@abloatai/ablo 0.36.0 → 0.37.1

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 (597) hide show
  1. package/AGENTS.md +2 -2
  2. package/CHANGELOG.md +55 -2014
  3. package/NOTICE +2 -2
  4. package/README.md +45 -63
  5. package/assets/banner.png +0 -0
  6. package/dist/auth.d.ts +2 -0
  7. package/dist/auth.d.ts.map +1 -0
  8. package/dist/auth.js +2 -0
  9. package/dist/auth.js.map +1 -0
  10. package/dist/client.d.ts +3 -0
  11. package/dist/client.d.ts.map +1 -0
  12. package/dist/client.js +3 -0
  13. package/dist/client.js.map +1 -0
  14. package/dist/coordination.d.ts +2 -0
  15. package/dist/coordination.d.ts.map +1 -0
  16. package/dist/coordination.js +2 -0
  17. package/dist/coordination.js.map +1 -0
  18. package/dist/index.d.ts +3 -114
  19. package/dist/index.d.ts.map +1 -0
  20. package/dist/index.js +3 -163
  21. package/dist/index.js.map +1 -0
  22. package/dist/react.d.ts +4 -0
  23. package/dist/react.d.ts.map +1 -0
  24. package/dist/react.js +3 -0
  25. package/dist/react.js.map +1 -0
  26. package/dist/schema.d.ts +2 -0
  27. package/dist/schema.d.ts.map +1 -0
  28. package/dist/schema.js +2 -0
  29. package/dist/schema.js.map +1 -0
  30. package/dist/server.d.ts +2 -0
  31. package/dist/server.d.ts.map +1 -0
  32. package/dist/server.js +2 -0
  33. package/dist/server.js.map +1 -0
  34. package/dist/source-conformance.d.ts +2 -0
  35. package/dist/source-conformance.d.ts.map +1 -0
  36. package/dist/source-conformance.js +2 -0
  37. package/dist/source-conformance.js.map +1 -0
  38. package/dist/source-drizzle.d.ts +2 -0
  39. package/dist/source-drizzle.d.ts.map +1 -0
  40. package/dist/source-drizzle.js +2 -0
  41. package/dist/source-drizzle.js.map +1 -0
  42. package/dist/source-kysely.d.ts +2 -0
  43. package/dist/source-kysely.d.ts.map +1 -0
  44. package/dist/source-kysely.js +2 -0
  45. package/dist/source-kysely.js.map +1 -0
  46. package/dist/source-next.d.ts +2 -0
  47. package/dist/source-next.d.ts.map +1 -0
  48. package/dist/source-next.js +2 -0
  49. package/dist/source-next.js.map +1 -0
  50. package/dist/source.d.ts +2 -0
  51. package/dist/source.d.ts.map +1 -0
  52. package/dist/source.js +2 -0
  53. package/dist/source.js.map +1 -0
  54. package/dist/wire.d.ts +2 -0
  55. package/dist/wire.d.ts.map +1 -0
  56. package/dist/wire.js +2 -0
  57. package/dist/wire.js.map +1 -0
  58. package/docs/agents.md +1 -1
  59. package/docs/api-keys.md +7 -6
  60. package/docs/api.md +10 -10
  61. package/docs/client-behavior.md +5 -5
  62. package/docs/coordination.md +52 -62
  63. package/docs/data-sources.md +1 -1
  64. package/docs/examples/agent-human.md +4 -4
  65. package/docs/examples/ai-sdk-tool.md +1 -1
  66. package/docs/examples/existing-python-backend.md +15 -4
  67. package/docs/examples/nextjs.md +27 -6
  68. package/docs/examples/server-agent.md +2 -2
  69. package/docs/how-it-works.md +4 -4
  70. package/docs/identity.md +2 -1
  71. package/docs/integration-guide.md +24 -13
  72. package/docs/internal/README.md +18 -0
  73. package/docs/internal/agent-fleet-coordination-design.md +171 -0
  74. package/docs/internal/agent-orchestration.md +58 -0
  75. package/docs/internal/commit-identifiers.md +91 -0
  76. package/docs/internal/concurrency-open-decisions.md +37 -0
  77. package/docs/internal/data-source-reverse-channel.md +150 -0
  78. package/docs/internal/per-field-conflict-detection.md +165 -0
  79. package/docs/internal/postgres-replication.md +64 -0
  80. package/docs/internal/serializable-schema.md +119 -0
  81. package/docs/internal/structure.md +32 -0
  82. package/docs/mcp.md +2 -2
  83. package/docs/migration.md +3 -3
  84. package/docs/quickstart.md +2 -2
  85. package/docs/react.md +5 -5
  86. package/docs/schema-contract.md +3 -3
  87. package/docs/sessions.md +91 -37
  88. package/examples/README.md +2 -2
  89. package/examples/data-source/README.md +1 -1
  90. package/examples/data-source/ablo-driver.ts +1 -1
  91. package/examples/data-source/customer-server.ts +1 -1
  92. package/examples/data-source/run.ts +1 -1
  93. package/examples/data-source/schema.ts +1 -1
  94. package/examples/quickstart.ts +2 -2
  95. package/llms.txt +8 -8
  96. package/package.json +63 -166
  97. package/bin/ablo.cjs +0 -39
  98. package/dist/BaseSyncedStore.d.ts +0 -843
  99. package/dist/BaseSyncedStore.js +0 -1971
  100. package/dist/Database.d.ts +0 -323
  101. package/dist/Database.js +0 -1502
  102. package/dist/InstanceCache.d.ts +0 -237
  103. package/dist/InstanceCache.js +0 -1166
  104. package/dist/LazyReferenceCollection.d.ts +0 -177
  105. package/dist/LazyReferenceCollection.js +0 -461
  106. package/dist/Model.d.ts +0 -454
  107. package/dist/Model.js +0 -919
  108. package/dist/ModelRegistry.d.ts +0 -225
  109. package/dist/ModelRegistry.js +0 -539
  110. package/dist/NetworkMonitor.d.ts +0 -28
  111. package/dist/NetworkMonitor.js +0 -79
  112. package/dist/RuntimeContext.d.ts +0 -52
  113. package/dist/RuntimeContext.js +0 -80
  114. package/dist/SyncClient.d.ts +0 -541
  115. package/dist/SyncClient.js +0 -2202
  116. package/dist/adapters/alwaysOnline.d.ts +0 -14
  117. package/dist/adapters/alwaysOnline.js +0 -17
  118. package/dist/adapters/inMemoryStorage.d.ts +0 -31
  119. package/dist/adapters/inMemoryStorage.js +0 -110
  120. package/dist/ai-sdk/coordinatedTool.d.ts +0 -120
  121. package/dist/ai-sdk/coordinatedTool.js +0 -134
  122. package/dist/ai-sdk/coordinationContext.d.ts +0 -46
  123. package/dist/ai-sdk/coordinationContext.js +0 -106
  124. package/dist/ai-sdk/index.d.ts +0 -121
  125. package/dist/ai-sdk/index.js +0 -121
  126. package/dist/ai-sdk/wrap.d.ts +0 -65
  127. package/dist/ai-sdk/wrap.js +0 -39
  128. package/dist/auth/index.d.ts +0 -1
  129. package/dist/auth/index.js +0 -8
  130. package/dist/batching/index.d.ts +0 -55
  131. package/dist/batching/index.js +0 -147
  132. package/dist/client/Ablo.d.ts +0 -231
  133. package/dist/client/Ablo.js +0 -160
  134. package/dist/client/abloClient.d.ts +0 -309
  135. package/dist/client/abloClient.js +0 -13
  136. package/dist/client/clientPrelude.d.ts +0 -52
  137. package/dist/client/clientPrelude.js +0 -60
  138. package/dist/client/consoleLogger.d.ts +0 -35
  139. package/dist/client/consoleLogger.js +0 -44
  140. package/dist/client/coreClient.d.ts +0 -60
  141. package/dist/client/coreClient.js +0 -118
  142. package/dist/client/createInternalComponents.d.ts +0 -50
  143. package/dist/client/createInternalComponents.js +0 -98
  144. package/dist/client/createModelProxy.d.ts +0 -248
  145. package/dist/client/createModelProxy.js +0 -884
  146. package/dist/client/humans.d.ts +0 -69
  147. package/dist/client/humans.js +0 -78
  148. package/dist/client/modelRegistration.d.ts +0 -10
  149. package/dist/client/modelRegistration.js +0 -312
  150. package/dist/client/options.d.ts +0 -461
  151. package/dist/client/options.js +0 -7
  152. package/dist/client/reactiveEngine.d.ts +0 -53
  153. package/dist/client/reactiveEngine.js +0 -688
  154. package/dist/client/resourceTypes.d.ts +0 -12
  155. package/dist/client/resourceTypes.js +0 -10
  156. package/dist/client/schemaConfig.d.ts +0 -44
  157. package/dist/client/schemaConfig.js +0 -185
  158. package/dist/client/storeCluster.d.ts +0 -47
  159. package/dist/client/storeCluster.js +0 -118
  160. package/dist/client/storeLifecycle.d.ts +0 -61
  161. package/dist/client/storeLifecycle.js +0 -231
  162. package/dist/client/validateAbloOptions.d.ts +0 -42
  163. package/dist/client/validateAbloOptions.js +0 -43
  164. package/dist/client/wsMutationExecutor.d.ts +0 -27
  165. package/dist/client/wsMutationExecutor.js +0 -72
  166. package/dist/context.d.ts +0 -42
  167. package/dist/context.js +0 -81
  168. package/dist/coordination/ClaimLog.d.ts +0 -26
  169. package/dist/coordination/ClaimLog.js +0 -32
  170. package/dist/coordination/index.d.ts +0 -1
  171. package/dist/coordination/index.js +0 -8
  172. package/dist/core/index.d.ts +0 -33
  173. package/dist/core/index.js +0 -48
  174. package/dist/docs/catalog.d.ts +0 -72
  175. package/dist/docs/catalog.js +0 -230
  176. package/dist/docs/index.d.ts +0 -10
  177. package/dist/docs/index.js +0 -10
  178. package/dist/environment.d.ts +0 -1
  179. package/dist/environment.js +0 -8
  180. package/dist/interfaces/index.d.ts +0 -311
  181. package/dist/interfaces/index.js +0 -9
  182. package/dist/keys/index.d.ts +0 -1
  183. package/dist/keys/index.js +0 -8
  184. package/dist/mutators/RecordingMutation.d.ts +0 -36
  185. package/dist/mutators/RecordingMutation.js +0 -182
  186. package/dist/mutators/Transaction.d.ts +0 -40
  187. package/dist/mutators/Transaction.js +0 -58
  188. package/dist/mutators/UndoManager.d.ts +0 -258
  189. package/dist/mutators/UndoManager.js +0 -658
  190. package/dist/mutators/defineMutators.d.ts +0 -60
  191. package/dist/mutators/defineMutators.js +0 -18
  192. package/dist/mutators/inverseOp.d.ts +0 -126
  193. package/dist/mutators/inverseOp.js +0 -71
  194. package/dist/mutators/mutateActions.d.ts +0 -45
  195. package/dist/mutators/mutateActions.js +0 -105
  196. package/dist/mutators/readerActions.d.ts +0 -33
  197. package/dist/mutators/readerActions.js +0 -57
  198. package/dist/mutators/undoApply.d.ts +0 -51
  199. package/dist/mutators/undoApply.js +0 -117
  200. package/dist/policy/index.d.ts +0 -21
  201. package/dist/policy/index.js +0 -20
  202. package/dist/query/QueryProcessor.d.ts +0 -75
  203. package/dist/query/QueryProcessor.js +0 -255
  204. package/dist/query/client.d.ts +0 -64
  205. package/dist/query/client.js +0 -138
  206. package/dist/query/types.d.ts +0 -85
  207. package/dist/query/types.js +0 -16
  208. package/dist/react/AbloProvider.d.ts +0 -242
  209. package/dist/react/AbloProvider.js +0 -458
  210. package/dist/react/ClientSideSuspense.d.ts +0 -36
  211. package/dist/react/ClientSideSuspense.js +0 -17
  212. package/dist/react/DefaultFallback.d.ts +0 -24
  213. package/dist/react/DefaultFallback.js +0 -43
  214. package/dist/react/context.d.ts +0 -55
  215. package/dist/react/context.js +0 -29
  216. package/dist/react/createAbloReact.d.ts +0 -56
  217. package/dist/react/createAbloReact.js +0 -51
  218. package/dist/react/index.d.ts +0 -62
  219. package/dist/react/index.js +0 -69
  220. package/dist/react/internalContext.d.ts +0 -33
  221. package/dist/react/internalContext.js +0 -3
  222. package/dist/react/useAblo.d.ts +0 -82
  223. package/dist/react/useAblo.js +0 -120
  224. package/dist/react/useCurrentUserId.d.ts +0 -22
  225. package/dist/react/useCurrentUserId.js +0 -34
  226. package/dist/react/useErrorListener.d.ts +0 -20
  227. package/dist/react/useErrorListener.js +0 -38
  228. package/dist/react/useMutationFailureListener.d.ts +0 -26
  229. package/dist/react/useMutationFailureListener.js +0 -38
  230. package/dist/react/useMutators.d.ts +0 -56
  231. package/dist/react/useMutators.js +0 -84
  232. package/dist/react/useReactive.d.ts +0 -35
  233. package/dist/react/useReactive.js +0 -123
  234. package/dist/react/useSyncStatus.d.ts +0 -59
  235. package/dist/react/useSyncStatus.js +0 -76
  236. package/dist/react/useUndoScope.d.ts +0 -34
  237. package/dist/react/useUndoScope.js +0 -81
  238. package/dist/schema/coordination.d.ts +0 -112
  239. package/dist/schema/coordination.js +0 -133
  240. package/dist/schema/ddl.d.ts +0 -97
  241. package/dist/schema/ddl.js +0 -491
  242. package/dist/schema/ddlLock.d.ts +0 -35
  243. package/dist/schema/ddlLock.js +0 -46
  244. package/dist/schema/diff.d.ts +0 -225
  245. package/dist/schema/diff.js +0 -289
  246. package/dist/schema/generate.d.ts +0 -19
  247. package/dist/schema/generate.js +0 -86
  248. package/dist/schema/index.d.ts +0 -42
  249. package/dist/schema/index.js +0 -80
  250. package/dist/schema/queries.d.ts +0 -201
  251. package/dist/schema/queries.js +0 -144
  252. package/dist/schema/select.d.ts +0 -40
  253. package/dist/schema/select.js +0 -90
  254. package/dist/schema/serialize.d.ts +0 -115
  255. package/dist/schema/serialize.js +0 -265
  256. package/dist/schema/sugar.d.ts +0 -109
  257. package/dist/schema/sugar.js +0 -83
  258. package/dist/schema/syncDeltaRow.d.ts +0 -6
  259. package/dist/schema/syncDeltaRow.js +0 -6
  260. package/dist/server/adapter.d.ts +0 -173
  261. package/dist/server/adapter.js +0 -18
  262. package/dist/server/commit.d.ts +0 -107
  263. package/dist/server/commit.js +0 -1
  264. package/dist/server/index.d.ts +0 -14
  265. package/dist/server/index.js +0 -2
  266. package/dist/server/readConfig.d.ts +0 -80
  267. package/dist/server/readConfig.js +0 -8
  268. package/dist/server/storageMode.d.ts +0 -23
  269. package/dist/server/storageMode.js +0 -17
  270. package/dist/source/adapter.d.ts +0 -83
  271. package/dist/source/adapter.js +0 -24
  272. package/dist/source/adapters/drizzle.d.ts +0 -48
  273. package/dist/source/adapters/drizzle.js +0 -219
  274. package/dist/source/adapters/kysely.d.ts +0 -42
  275. package/dist/source/adapters/kysely.js +0 -205
  276. package/dist/source/adapters/kyselyMutationCore.d.ts +0 -76
  277. package/dist/source/adapters/kyselyMutationCore.js +0 -125
  278. package/dist/source/adapters/memory.d.ts +0 -13
  279. package/dist/source/adapters/memory.js +0 -130
  280. package/dist/source/adapters/prisma.d.ts +0 -63
  281. package/dist/source/adapters/prisma.js +0 -202
  282. package/dist/source/conformance.d.ts +0 -37
  283. package/dist/source/conformance.js +0 -215
  284. package/dist/source/connector.d.ts +0 -95
  285. package/dist/source/connector.js +0 -266
  286. package/dist/source/connectorProtocol.d.ts +0 -154
  287. package/dist/source/connectorProtocol.js +0 -163
  288. package/dist/source/contract.d.ts +0 -195
  289. package/dist/source/contract.js +0 -164
  290. package/dist/source/factory.d.ts +0 -92
  291. package/dist/source/factory.js +0 -286
  292. package/dist/source/idempotency.d.ts +0 -61
  293. package/dist/source/idempotency.js +0 -144
  294. package/dist/source/index.d.ts +0 -23
  295. package/dist/source/index.js +0 -30
  296. package/dist/source/migrations.d.ts +0 -21
  297. package/dist/source/migrations.js +0 -103
  298. package/dist/source/next.d.ts +0 -32
  299. package/dist/source/next.js +0 -25
  300. package/dist/source/pushQueue.d.ts +0 -134
  301. package/dist/source/pushQueue.js +0 -256
  302. package/dist/source/signing.d.ts +0 -92
  303. package/dist/source/signing.js +0 -162
  304. package/dist/source/types.d.ts +0 -401
  305. package/dist/source/types.js +0 -59
  306. package/dist/storeContract.d.ts +0 -145
  307. package/dist/storeContract.js +0 -12
  308. package/dist/stores/DatabaseManager.d.ts +0 -107
  309. package/dist/stores/DatabaseManager.js +0 -388
  310. package/dist/stores/ObjectStore.d.ts +0 -115
  311. package/dist/stores/ObjectStore.js +0 -393
  312. package/dist/stores/ObjectStoreContract.d.ts +0 -38
  313. package/dist/stores/ObjectStoreContract.js +0 -1
  314. package/dist/stores/StoreManager.d.ts +0 -114
  315. package/dist/stores/StoreManager.js +0 -304
  316. package/dist/stores/SyncActionStore.d.ts +0 -99
  317. package/dist/stores/SyncActionStore.js +0 -506
  318. package/dist/stores/openIDBWithTimeout.d.ts +0 -65
  319. package/dist/stores/openIDBWithTimeout.js +0 -153
  320. package/dist/stores/syncAction.d.ts +0 -26
  321. package/dist/stores/syncAction.js +0 -16
  322. package/dist/surface.d.ts +0 -36
  323. package/dist/surface.js +0 -75
  324. package/dist/sync/BootstrapFetcher.d.ts +0 -284
  325. package/dist/sync/BootstrapFetcher.js +0 -964
  326. package/dist/sync/ConnectionManager.d.ts +0 -8
  327. package/dist/sync/ConnectionManager.js +0 -8
  328. package/dist/sync/OnDemandLoader.d.ts +0 -231
  329. package/dist/sync/OnDemandLoader.js +0 -743
  330. package/dist/sync/SubscriptionManager.d.ts +0 -159
  331. package/dist/sync/SubscriptionManager.js +0 -243
  332. package/dist/sync/SyncWebSocket.d.ts +0 -173
  333. package/dist/sync/SyncWebSocket.js +0 -438
  334. package/dist/sync/awaitClaimGrant.d.ts +0 -6
  335. package/dist/sync/awaitClaimGrant.js +0 -6
  336. package/dist/sync/bootstrapApply.d.ts +0 -73
  337. package/dist/sync/bootstrapApply.js +0 -73
  338. package/dist/sync/commitFrames.d.ts +0 -8
  339. package/dist/sync/commitFrames.js +0 -8
  340. package/dist/sync/contextPorts.d.ts +0 -18
  341. package/dist/sync/contextPorts.js +0 -31
  342. package/dist/sync/createClaimStream.d.ts +0 -7
  343. package/dist/sync/createClaimStream.js +0 -7
  344. package/dist/sync/createPresenceStream.d.ts +0 -69
  345. package/dist/sync/createPresenceStream.js +0 -200
  346. package/dist/sync/createSnapshot.d.ts +0 -29
  347. package/dist/sync/createSnapshot.js +0 -118
  348. package/dist/sync/credentialLifecycle.d.ts +0 -7
  349. package/dist/sync/credentialLifecycle.js +0 -7
  350. package/dist/sync/deltaPipeline.d.ts +0 -114
  351. package/dist/sync/deltaPipeline.js +0 -278
  352. package/dist/sync/groupChange.d.ts +0 -116
  353. package/dist/sync/groupChange.js +0 -244
  354. package/dist/sync/participants.d.ts +0 -132
  355. package/dist/sync/participants.js +0 -346
  356. package/dist/sync/persistedPrefix.d.ts +0 -12
  357. package/dist/sync/persistedPrefix.js +0 -22
  358. package/dist/sync/schemaDrift.d.ts +0 -55
  359. package/dist/sync/schemaDrift.js +0 -53
  360. package/dist/sync/schemas.d.ts +0 -71
  361. package/dist/sync/schemas.js +0 -94
  362. package/dist/sync/syncCursor.d.ts +0 -40
  363. package/dist/sync/syncCursor.js +0 -55
  364. package/dist/sync/syncPlan.d.ts +0 -54
  365. package/dist/sync/syncPlan.js +0 -50
  366. package/dist/sync/wsFrameHandlers.d.ts +0 -8
  367. package/dist/sync/wsFrameHandlers.js +0 -8
  368. package/dist/syncLog/contract.d.ts +0 -20
  369. package/dist/syncLog/contract.js +0 -19
  370. package/dist/syncLog/index.d.ts +0 -1
  371. package/dist/syncLog/index.js +0 -1
  372. package/dist/transaction/ablo.d.ts +0 -88
  373. package/dist/transaction/ablo.js +0 -33
  374. package/dist/transaction/auth/apiKey.d.ts +0 -152
  375. package/dist/transaction/auth/apiKey.js +0 -419
  376. package/dist/transaction/auth/bootstrapScope.d.ts +0 -15
  377. package/dist/transaction/auth/bootstrapScope.js +0 -1
  378. package/dist/transaction/auth/capability.d.ts +0 -212
  379. package/dist/transaction/auth/capability.js +0 -224
  380. package/dist/transaction/auth/credentialEndpoint.d.ts +0 -61
  381. package/dist/transaction/auth/credentialEndpoint.js +0 -86
  382. package/dist/transaction/auth/credentialPolicy.d.ts +0 -148
  383. package/dist/transaction/auth/credentialPolicy.js +0 -125
  384. package/dist/transaction/auth/credentialSource.d.ts +0 -30
  385. package/dist/transaction/auth/credentialSource.js +0 -55
  386. package/dist/transaction/auth/hostedEndpoints.d.ts +0 -21
  387. package/dist/transaction/auth/hostedEndpoints.js +0 -21
  388. package/dist/transaction/auth/identity.d.ts +0 -55
  389. package/dist/transaction/auth/identity.js +0 -210
  390. package/dist/transaction/auth/index.d.ts +0 -162
  391. package/dist/transaction/auth/index.js +0 -304
  392. package/dist/transaction/auth/schemas.d.ts +0 -59
  393. package/dist/transaction/auth/schemas.js +0 -85
  394. package/dist/transaction/auth/sessionMint.d.ts +0 -28
  395. package/dist/transaction/auth/sessionMint.js +0 -85
  396. package/dist/transaction/coordination/awaitClaimGrant.d.ts +0 -56
  397. package/dist/transaction/coordination/awaitClaimGrant.js +0 -124
  398. package/dist/transaction/coordination/claimHeartbeatLoop.d.ts +0 -84
  399. package/dist/transaction/coordination/claimHeartbeatLoop.js +0 -108
  400. package/dist/transaction/coordination/claimMeta.d.ts +0 -49
  401. package/dist/transaction/coordination/claimMeta.js +0 -52
  402. package/dist/transaction/coordination/createClaimStream.d.ts +0 -64
  403. package/dist/transaction/coordination/createClaimStream.js +0 -475
  404. package/dist/transaction/coordination/events.d.ts +0 -74
  405. package/dist/transaction/coordination/events.js +0 -7
  406. package/dist/transaction/coordination/index.d.ts +0 -19
  407. package/dist/transaction/coordination/index.js +0 -45
  408. package/dist/transaction/coordination/locator.d.ts +0 -104
  409. package/dist/transaction/coordination/locator.js +0 -102
  410. package/dist/transaction/coordination/schema.d.ts +0 -1536
  411. package/dist/transaction/coordination/schema.js +0 -1177
  412. package/dist/transaction/coordination/targetConflict.d.ts +0 -2
  413. package/dist/transaction/coordination/targetConflict.js +0 -107
  414. package/dist/transaction/coordination/trace.d.ts +0 -78
  415. package/dist/transaction/coordination/trace.js +0 -138
  416. package/dist/transaction/durableWrites.d.ts +0 -62
  417. package/dist/transaction/durableWrites.js +0 -71
  418. package/dist/transaction/environment.d.ts +0 -105
  419. package/dist/transaction/environment.js +0 -108
  420. package/dist/transaction/errorCodes.d.ts +0 -403
  421. package/dist/transaction/errorCodes.js +0 -484
  422. package/dist/transaction/errors.d.ts +0 -428
  423. package/dist/transaction/errors.js +0 -686
  424. package/dist/transaction/footprint.d.ts +0 -111
  425. package/dist/transaction/footprint.js +0 -0
  426. package/dist/transaction/index.d.ts +0 -20
  427. package/dist/transaction/index.js +0 -20
  428. package/dist/transaction/keys/index.d.ts +0 -87
  429. package/dist/transaction/keys/index.js +0 -207
  430. package/dist/transaction/log/syncDeltaRow.d.ts +0 -158
  431. package/dist/transaction/log/syncDeltaRow.js +0 -95
  432. package/dist/transaction/logPosition.d.ts +0 -97
  433. package/dist/transaction/logPosition.js +0 -125
  434. package/dist/transaction/logger.d.ts +0 -16
  435. package/dist/transaction/logger.js +0 -7
  436. package/dist/transaction/observability.d.ts +0 -53
  437. package/dist/transaction/observability.js +0 -19
  438. package/dist/transaction/persistence.d.ts +0 -12
  439. package/dist/transaction/persistence.js +0 -11
  440. package/dist/transaction/plugin.d.ts +0 -285
  441. package/dist/transaction/plugin.js +0 -106
  442. package/dist/transaction/policy/types.d.ts +0 -217
  443. package/dist/transaction/policy/types.js +0 -126
  444. package/dist/transaction/resources/functionalUpdate.d.ts +0 -79
  445. package/dist/transaction/resources/functionalUpdate.js +0 -87
  446. package/dist/transaction/resources/httpResources.d.ts +0 -321
  447. package/dist/transaction/resources/httpResources.js +0 -7
  448. package/dist/transaction/resources/modelOperations.d.ts +0 -427
  449. package/dist/transaction/resources/modelOperations.js +0 -12
  450. package/dist/transaction/resources/mutationOptions.d.ts +0 -66
  451. package/dist/transaction/resources/mutationOptions.js +0 -9
  452. package/dist/transaction/resources/where.d.ts +0 -101
  453. package/dist/transaction/resources/where.js +0 -115
  454. package/dist/transaction/resources/writeOptionsSchema.d.ts +0 -47
  455. package/dist/transaction/resources/writeOptionsSchema.js +0 -73
  456. package/dist/transaction/schema/field.d.ts +0 -120
  457. package/dist/transaction/schema/field.js +0 -265
  458. package/dist/transaction/schema/fieldRef.d.ts +0 -38
  459. package/dist/transaction/schema/fieldRef.js +0 -11
  460. package/dist/transaction/schema/loadStrategy.d.ts +0 -45
  461. package/dist/transaction/schema/loadStrategy.js +0 -46
  462. package/dist/transaction/schema/model.d.ts +0 -379
  463. package/dist/transaction/schema/model.js +0 -123
  464. package/dist/transaction/schema/openapi.d.ts +0 -58
  465. package/dist/transaction/schema/openapi.js +0 -501
  466. package/dist/transaction/schema/relation.d.ts +0 -204
  467. package/dist/transaction/schema/relation.js +0 -104
  468. package/dist/transaction/schema/residency.d.ts +0 -29
  469. package/dist/transaction/schema/residency.js +0 -25
  470. package/dist/transaction/schema/roles.d.ts +0 -249
  471. package/dist/transaction/schema/roles.js +0 -230
  472. package/dist/transaction/schema/schema.d.ts +0 -351
  473. package/dist/transaction/schema/schema.js +0 -325
  474. package/dist/transaction/schema/tenancy.d.ts +0 -139
  475. package/dist/transaction/schema/tenancy.js +0 -190
  476. package/dist/transaction/transactionLayer.d.ts +0 -82
  477. package/dist/transaction/transactionLayer.js +0 -24
  478. package/dist/transaction/transactions/settlement/commitEnvelope.d.ts +0 -143
  479. package/dist/transaction/transactions/settlement/commitEnvelope.js +0 -161
  480. package/dist/transaction/transactions/settlement/httpCommitEnvelope.d.ts +0 -53
  481. package/dist/transaction/transactions/settlement/httpCommitEnvelope.js +0 -207
  482. package/dist/transaction/transactions/settlement/idempotencyKey.d.ts +0 -10
  483. package/dist/transaction/transactions/settlement/idempotencyKey.js +0 -9
  484. package/dist/transaction/transactions/settlement/pendingWrite.d.ts +0 -112
  485. package/dist/transaction/transactions/settlement/pendingWrite.js +0 -20
  486. package/dist/transaction/transport/commitFrames.d.ts +0 -90
  487. package/dist/transaction/transport/commitFrames.js +0 -134
  488. package/dist/transaction/transport/connectionManager.d.ts +0 -215
  489. package/dist/transaction/transport/connectionManager.js +0 -673
  490. package/dist/transaction/transport/credentialLifecycle.d.ts +0 -177
  491. package/dist/transaction/transport/credentialLifecycle.js +0 -324
  492. package/dist/transaction/transport/heartbeat.d.ts +0 -65
  493. package/dist/transaction/transport/heartbeat.js +0 -93
  494. package/dist/transaction/transport/httpClient.d.ts +0 -131
  495. package/dist/transaction/transport/httpClient.js +0 -146
  496. package/dist/transaction/transport/httpOptions.d.ts +0 -33
  497. package/dist/transaction/transport/httpOptions.js +0 -12
  498. package/dist/transaction/transport/httpTransport.d.ts +0 -8
  499. package/dist/transaction/transport/httpTransport.js +0 -1388
  500. package/dist/transaction/transport/networkProbe.d.ts +0 -84
  501. package/dist/transaction/transport/networkProbe.js +0 -207
  502. package/dist/transaction/transport/wsFrameHandlers.d.ts +0 -128
  503. package/dist/transaction/transport/wsFrameHandlers.js +0 -429
  504. package/dist/transaction/transport/wsTransport.d.ts +0 -574
  505. package/dist/transaction/transport/wsTransport.js +0 -1023
  506. package/dist/transaction/types/assertExact.d.ts +0 -17
  507. package/dist/transaction/types/assertExact.js +0 -1
  508. package/dist/transaction/types/global.d.ts +0 -107
  509. package/dist/transaction/types/global.js +0 -40
  510. package/dist/transaction/types/index.d.ts +0 -205
  511. package/dist/transaction/types/index.js +0 -56
  512. package/dist/transaction/types/modelData.d.ts +0 -10
  513. package/dist/transaction/types/modelData.js +0 -9
  514. package/dist/transaction/types/participant.d.ts +0 -20
  515. package/dist/transaction/types/participant.js +0 -10
  516. package/dist/transaction/types/streams.d.ts +0 -550
  517. package/dist/transaction/types/streams.js +0 -11
  518. package/dist/transaction/utils/asyncIterator.d.ts +0 -34
  519. package/dist/transaction/utils/asyncIterator.js +0 -135
  520. package/dist/transaction/utils/duration.d.ts +0 -50
  521. package/dist/transaction/utils/duration.js +0 -77
  522. package/dist/transaction/utils/json.d.ts +0 -57
  523. package/dist/transaction/utils/json.js +0 -276
  524. package/dist/transaction/wire/accountResponses.d.ts +0 -420
  525. package/dist/transaction/wire/accountResponses.js +0 -290
  526. package/dist/transaction/wire/auth.d.ts +0 -56
  527. package/dist/transaction/wire/auth.js +0 -63
  528. package/dist/transaction/wire/bootstrapReason.d.ts +0 -9
  529. package/dist/transaction/wire/bootstrapReason.js +0 -8
  530. package/dist/transaction/wire/claimEvent.d.ts +0 -76
  531. package/dist/transaction/wire/claimEvent.js +0 -73
  532. package/dist/transaction/wire/claims.d.ts +0 -530
  533. package/dist/transaction/wire/claims.js +0 -327
  534. package/dist/transaction/wire/commit.d.ts +0 -603
  535. package/dist/transaction/wire/commit.js +0 -321
  536. package/dist/transaction/wire/delta.d.ts +0 -250
  537. package/dist/transaction/wire/delta.js +0 -147
  538. package/dist/transaction/wire/errorEnvelope.d.ts +0 -72
  539. package/dist/transaction/wire/errorEnvelope.js +0 -123
  540. package/dist/transaction/wire/feedCursor.d.ts +0 -60
  541. package/dist/transaction/wire/feedCursor.js +0 -82
  542. package/dist/transaction/wire/feedEvent.d.ts +0 -204
  543. package/dist/transaction/wire/feedEvent.js +0 -65
  544. package/dist/transaction/wire/frames.d.ts +0 -194
  545. package/dist/transaction/wire/frames.js +0 -50
  546. package/dist/transaction/wire/inboundFrames.d.ts +0 -562
  547. package/dist/transaction/wire/inboundFrames.js +0 -116
  548. package/dist/transaction/wire/index.d.ts +0 -54
  549. package/dist/transaction/wire/index.js +0 -83
  550. package/dist/transaction/wire/listEnvelope.d.ts +0 -37
  551. package/dist/transaction/wire/listEnvelope.js +0 -42
  552. package/dist/transaction/wire/modelMutations.d.ts +0 -31
  553. package/dist/transaction/wire/modelMutations.js +0 -52
  554. package/dist/transaction/wire/modelResponses.d.ts +0 -85
  555. package/dist/transaction/wire/modelResponses.js +0 -43
  556. package/dist/transaction/wire/modelShape.d.ts +0 -78
  557. package/dist/transaction/wire/modelShape.js +0 -74
  558. package/dist/transaction/wire/protocol.d.ts +0 -38
  559. package/dist/transaction/wire/protocol.js +0 -38
  560. package/dist/transaction/wire/protocolVersion.d.ts +0 -73
  561. package/dist/transaction/wire/protocolVersion.js +0 -83
  562. package/dist/transactions/mutations/MutationQueue.d.ts +0 -661
  563. package/dist/transactions/mutations/MutationQueue.js +0 -2807
  564. package/dist/transactions/mutations/MutationStore.d.ts +0 -20
  565. package/dist/transactions/mutations/MutationStore.js +0 -53
  566. package/dist/transactions/mutations/UnconfirmedWrites.d.ts +0 -82
  567. package/dist/transactions/mutations/UnconfirmedWrites.js +0 -104
  568. package/dist/transactions/mutations/coalesceRules.d.ts +0 -58
  569. package/dist/transactions/mutations/coalesceRules.js +0 -140
  570. package/dist/transactions/mutations/commitLatency.d.ts +0 -52
  571. package/dist/transactions/mutations/commitLatency.js +0 -130
  572. package/dist/transactions/mutations/commitOutboxStore.d.ts +0 -28
  573. package/dist/transactions/mutations/commitOutboxStore.js +0 -26
  574. package/dist/transactions/mutations/commitPayload.d.ts +0 -165
  575. package/dist/transactions/mutations/commitPayload.js +0 -152
  576. package/dist/transactions/mutations/deltaConfirmation.d.ts +0 -63
  577. package/dist/transactions/mutations/deltaConfirmation.js +0 -235
  578. package/dist/transactions/mutations/durableWriteStore.d.ts +0 -14
  579. package/dist/transactions/mutations/durableWriteStore.js +0 -12
  580. package/dist/transactions/mutations/optimisticApply.d.ts +0 -49
  581. package/dist/transactions/mutations/optimisticApply.js +0 -65
  582. package/dist/transactions/mutations/replayValidation.d.ts +0 -187
  583. package/dist/transactions/mutations/replayValidation.js +0 -164
  584. package/dist/utils/mobxSetup.d.ts +0 -53
  585. package/dist/utils/mobxSetup.js +0 -330
  586. package/dist/views/QueryView.d.ts +0 -79
  587. package/dist/views/QueryView.js +0 -218
  588. package/dist/views/ViewRegistry.d.ts +0 -20
  589. package/dist/views/ViewRegistry.js +0 -55
  590. package/dist/views/incrementalView.d.ts +0 -45
  591. package/dist/views/incrementalView.js +0 -69
  592. package/dist/webhooks/events.d.ts +0 -43
  593. package/dist/webhooks/events.js +0 -42
  594. package/dist/webhooks/index.d.ts +0 -8
  595. package/dist/webhooks/index.js +0 -8
  596. package/dist/wire/index.d.ts +0 -1
  597. package/dist/wire/index.js +0 -8
@@ -1,14 +0,0 @@
1
- /**
2
- * An {@link OnlineStatusProvider} that always reports the client as online.
3
- * Server-side runtimes — Node processes, agents, and sidecars — have no
4
- * browser network stack to lose, so there is no offline state to track. A
5
- * dropped database connection surfaces as a database error, not a network
6
- * transition. This is the server-side counterpart to the browser's
7
- * connectivity-aware provider, which watches the real online/offline signal.
8
- */
9
- import type { OnlineStatusProvider } from '../interfaces/index.js';
10
- /**
11
- * Returns an OnlineStatusProvider that always reports online.
12
- * `onStatusChange` never fires — the network never transitions.
13
- */
14
- export declare function alwaysOnline(): OnlineStatusProvider;
@@ -1,17 +0,0 @@
1
- /**
2
- * An {@link OnlineStatusProvider} that always reports the client as online.
3
- * Server-side runtimes — Node processes, agents, and sidecars — have no
4
- * browser network stack to lose, so there is no offline state to track. A
5
- * dropped database connection surfaces as a database error, not a network
6
- * transition. This is the server-side counterpart to the browser's
7
- * connectivity-aware provider, which watches the real online/offline signal.
8
- */
9
- /**
10
- * Returns an OnlineStatusProvider that always reports online.
11
- * `onStatusChange` never fires — the network never transitions.
12
- */
13
- export function alwaysOnline() {
14
- return {
15
- isOnline: () => true,
16
- };
17
- }
@@ -1,31 +0,0 @@
1
- /**
2
- * An in-memory {@link ObjectStoreContract} implementation for runtimes
3
- * without IndexedDB, such as Node processes, agents, and tests. It keeps
4
- * records in a map and maintains simple secondary indexes, satisfying the
5
- * same contract the IndexedDB-backed store implements — so if the two ever
6
- * diverge, the mismatch becomes a typecheck error here rather than a silent
7
- * failure at a call site.
8
- *
9
- * Nothing is persisted; the data is cleared on process restart. That is
10
- * deliberate: server-side runtimes and agent workers rebuild their state from
11
- * the server's delta stream rather than from a local cache.
12
- */
13
- import type { ObjectStoreContract } from '../stores/ObjectStoreContract.js';
14
- export declare class InMemoryObjectStore implements ObjectStoreContract {
15
- readonly modelName: string;
16
- readonly storeName: string;
17
- private data;
18
- private indexes;
19
- constructor(modelName: string, storeName: string, indexNames?: string[]);
20
- add(record: Record<string, unknown>): Promise<void>;
21
- put(record: Record<string, unknown>): Promise<void>;
22
- get(id: string): Promise<Record<string, unknown> | undefined>;
23
- getAll(): Promise<Record<string, unknown>[]>;
24
- delete(id: string): Promise<void>;
25
- getAllFromIndex(indexName: string, value: IDBValidKey): Promise<Record<string, unknown>[]>;
26
- clear(): Promise<void>;
27
- /** No-op — in-memory stores don't need closing. */
28
- markAsClosing(): void;
29
- private addToIndexes;
30
- private removeFromIndexes;
31
- }
@@ -1,110 +0,0 @@
1
- /**
2
- * An in-memory {@link ObjectStoreContract} implementation for runtimes
3
- * without IndexedDB, such as Node processes, agents, and tests. It keeps
4
- * records in a map and maintains simple secondary indexes, satisfying the
5
- * same contract the IndexedDB-backed store implements — so if the two ever
6
- * diverge, the mismatch becomes a typecheck error here rather than a silent
7
- * failure at a call site.
8
- *
9
- * Nothing is persisted; the data is cleared on process restart. That is
10
- * deliberate: server-side runtimes and agent workers rebuild their state from
11
- * the server's delta stream rather than from a local cache.
12
- */
13
- export class InMemoryObjectStore {
14
- modelName;
15
- storeName;
16
- data = new Map();
17
- indexes = new Map();
18
- constructor(modelName, storeName, indexNames = []) {
19
- this.modelName = modelName;
20
- this.storeName = storeName;
21
- for (const name of indexNames) {
22
- this.indexes.set(name, new Map());
23
- }
24
- }
25
- add(record) {
26
- const id = record.id;
27
- if (!id)
28
- throw new TypeError('In-memory record must carry an id');
29
- if (this.data.has(id)) {
30
- const error = new Error(`Record already exists: ${id}`);
31
- error.name = 'ConstraintError';
32
- throw error;
33
- }
34
- this.data.set(id, { ...record });
35
- this.addToIndexes(id, record);
36
- return Promise.resolve();
37
- }
38
- put(record) {
39
- const id = record.id;
40
- if (!id)
41
- return Promise.resolve();
42
- // Remove from old index entries if updating
43
- const existing = this.data.get(id);
44
- if (existing) {
45
- this.removeFromIndexes(id, existing);
46
- }
47
- this.data.set(id, { ...record });
48
- this.addToIndexes(id, record);
49
- return Promise.resolve();
50
- }
51
- get(id) {
52
- return Promise.resolve(this.data.get(id));
53
- }
54
- getAll() {
55
- return Promise.resolve([...this.data.values()]);
56
- }
57
- delete(id) {
58
- const existing = this.data.get(id);
59
- if (existing) {
60
- this.removeFromIndexes(id, existing);
61
- this.data.delete(id);
62
- }
63
- return Promise.resolve();
64
- }
65
- getAllFromIndex(indexName, value) {
66
- const index = this.indexes.get(indexName);
67
- if (!index)
68
- return Promise.resolve([]);
69
- // The in-memory index stores values as strings (it doesn't support
70
- // the full IDB key range — Date / BufferSource / arrays). For the
71
- // overwhelmingly-common case of string FK ids, coercing through
72
- // String() preserves the existing behavior while satisfying the
73
- // shared `ObjectStoreContract` signature.
74
- const ids = index.get(String(value));
75
- if (!ids)
76
- return Promise.resolve([]);
77
- return Promise.resolve([...ids]
78
- .map((id) => this.data.get(id))
79
- .filter((r) => r != null));
80
- }
81
- clear() {
82
- this.data.clear();
83
- for (const index of this.indexes.values()) {
84
- index.clear();
85
- }
86
- return Promise.resolve();
87
- }
88
- /** No-op — in-memory stores don't need closing. */
89
- markAsClosing() { }
90
- addToIndexes(id, record) {
91
- for (const [indexName, indexMap] of this.indexes) {
92
- const value = record[indexName];
93
- if (value != null) {
94
- const key = String(value);
95
- if (!indexMap.has(key))
96
- indexMap.set(key, new Set());
97
- indexMap.get(key).add(id);
98
- }
99
- }
100
- }
101
- removeFromIndexes(id, record) {
102
- for (const [indexName, indexMap] of this.indexes) {
103
- const value = record[indexName];
104
- if (value != null) {
105
- const key = String(value);
106
- indexMap.get(key)?.delete(id);
107
- }
108
- }
109
- }
110
- }
@@ -1,120 +0,0 @@
1
- /**
2
- * Turns a write to one of your models into a Vercel AI SDK tool that handles
3
- * multi-agent coordination for you, so an agent can contribute to shared state
4
- * without silently overwriting another writer's concurrent change.
5
- *
6
- * The lower-level approach is to write your own `tool()` and call
7
- * `ablo.<model>.update({ id, data, claim })` inside its `execute` — the right
8
- * amount of control for a bespoke tool. This helper covers the common case
9
- * instead: the agent produced some content and you want to save it into a shared
10
- * row, without re-deriving optimistic concurrency each time. You declare the
11
- * write:
12
- *
13
- * ```ts
14
- * import { coordinatedTool } from '@abloatai/ablo/ai-sdk';
15
- * import { z } from 'zod';
16
- *
17
- * const saveSection = coordinatedTool(ablo.documents, {
18
- * description: 'Save your section into the shared document.',
19
- * inputSchema: z.object({ text: z.string() }),
20
- * id: () => DOC_ID,
21
- * apply: (current, { text }) => ({ content: appendBlock(current.content, text) }),
22
- * // strategy: 'merge' ← the default
23
- * });
24
- *
25
- * await streamText({ model, messages, tools: { saveSection } });
26
- * ```
27
- *
28
- * The {@link CoordinatedToolOptions.apply} function is the whole API: a pure
29
- * function from the freshest row and the tool input to a patch, in the same
30
- * spirit as a functional state update. Everything beneath it — reading the latest
31
- * row, the compare-and-swap, backing off between retries, and releasing claims —
32
- * is the runtime's job.
33
- *
34
- * ## Strategies
35
- *
36
- * Choose a strategy by how you want concurrent writers to relate. Each is
37
- * designed to converge under many agents writing at once.
38
- *
39
- * - `'merge'` (the default) delegates to the functional update
40
- * `ablo.<model>.update(id, current => apply(current, input))`. The runtime
41
- * re-reads and re-applies `apply` on top of every concurrent write, backing off
42
- * between rounds, so many agents accumulate into one row and the model never
43
- * sees a conflict. This requires the model's agent conflict policy to be
44
- * `reject` (the default, or `agentsReject()`). A model that declares
45
- * `agentsNotify()` holds the losing write instead of rejecting it, which
46
- * defeats the reconcile loop — there, use `'claim'` or `'queue'`, or change the
47
- * policy.
48
- *
49
- * - `'claim'` gives mutual exclusion. It takes a fail-fast claim; if another
50
- * participant holds the row, it returns `{ status: 'claimed' }` and leaves the
51
- * decision to retry up to the model. A visible signal serves the agent better
52
- * than a hidden wait when it might spend its turn on something else. Works under
53
- * any conflict policy.
54
- *
55
- * - `'queue'` serializes writers over stateless HTTP. The tool polls to acquire
56
- * the claim until it is granted or `poll.timeoutMs` elapses, so the model calls
57
- * once and the tool waits its turn. Ordering is approximate rather than strict
58
- * first-in-first-out, which would require a persistent connection.
59
- */
60
- import type { z } from 'zod';
61
- import type { ClaimParams, ModelRetrieveParams, ModelUpdateParams } from '../client/createModelProxy.js';
62
- import type { ModelUpdater, ContentionOptions } from '../transaction/resources/functionalUpdate.js';
63
- import type { HeldClaim } from '../transaction/types/streams.js';
64
- export type CoordinationStrategy = 'merge' | 'claim' | 'queue';
65
- /** The structured result the tool hands back to the model (or the caller). */
66
- export interface CoordinatedWriteResult<T> {
67
- /**
68
- * `'written'` means the change was saved. `'claimed'` means another participant
69
- * holds the row, so nothing was saved and the model should try again.
70
- * `'timeout'` means the `'queue'` strategy could not acquire the row within
71
- * `poll.timeoutMs`.
72
- */
73
- status: 'written' | 'claimed' | 'timeout';
74
- /** The reconciled row, on `'written'`. */
75
- row?: T;
76
- message?: string;
77
- /** On `'written'` via the `queue` strategy, how long the tool waited in line. */
78
- waitedMs?: number;
79
- }
80
- export interface CoordinatedToolOptions<TInput, T> {
81
- /** Tool description shown to the model. */
82
- description: string;
83
- /** The schema of what the model may send, as a standard AI SDK / Zod input schema. */
84
- inputSchema: z.ZodType<TInput>;
85
- /** Which row this write targets, derived from the tool input. */
86
- id: (input: TInput) => string;
87
- /**
88
- * Produces the write patch from the freshest current row and the tool input, as
89
- * a pure function of the two. Under `'merge'` it re-runs on top of every
90
- * concurrent write, so it must be idempotent with respect to its own
91
- * contribution — for example, skip its change when its marker is already
92
- * present — to stay correct across retries.
93
- */
94
- apply: (current: T, input: TInput) => Partial<T>;
95
- /** How concurrent writers relate. Defaults to `'merge'`. */
96
- strategy?: CoordinationStrategy;
97
- /** Human-readable coordination metadata attached to the claim, used by the `'claim'` and `'queue'` strategies. */
98
- claim?: {
99
- description?: string;
100
- };
101
- /** How many reconcile rounds `'merge'` may take before it gives up with `AbloContentionError`. */
102
- retries?: number;
103
- /** Poll interval and overall timeout for `'queue'`. Defaults to 250ms and 30s. */
104
- poll?: {
105
- intervalMs?: number;
106
- timeoutMs?: number;
107
- };
108
- }
109
- /**
110
- * The small model port this helper needs. Both typed transports implement this
111
- * exact contract; local-cache methods, wire receipts, and transport lifecycle
112
- * deliberately stay out of an AI tool's dependency surface.
113
- */
114
- export interface CoordinatedModel<T> {
115
- retrieve(params: ModelRetrieveParams): Promise<T | undefined>;
116
- update(params: ModelUpdateParams<T>): Promise<T>;
117
- update(id: string, updater: ModelUpdater<T>, options?: ContentionOptions): Promise<T | undefined>;
118
- claim(params: ClaimParams<T>): Promise<HeldClaim<T>>;
119
- }
120
- export declare function coordinatedTool<TInput, T = Record<string, unknown>>(model: CoordinatedModel<T>, options: CoordinatedToolOptions<TInput, T>): import("ai").Tool<TInput, CoordinatedWriteResult<T>>;
@@ -1,134 +0,0 @@
1
- /**
2
- * Turns a write to one of your models into a Vercel AI SDK tool that handles
3
- * multi-agent coordination for you, so an agent can contribute to shared state
4
- * without silently overwriting another writer's concurrent change.
5
- *
6
- * The lower-level approach is to write your own `tool()` and call
7
- * `ablo.<model>.update({ id, data, claim })` inside its `execute` — the right
8
- * amount of control for a bespoke tool. This helper covers the common case
9
- * instead: the agent produced some content and you want to save it into a shared
10
- * row, without re-deriving optimistic concurrency each time. You declare the
11
- * write:
12
- *
13
- * ```ts
14
- * import { coordinatedTool } from '@abloatai/ablo/ai-sdk';
15
- * import { z } from 'zod';
16
- *
17
- * const saveSection = coordinatedTool(ablo.documents, {
18
- * description: 'Save your section into the shared document.',
19
- * inputSchema: z.object({ text: z.string() }),
20
- * id: () => DOC_ID,
21
- * apply: (current, { text }) => ({ content: appendBlock(current.content, text) }),
22
- * // strategy: 'merge' ← the default
23
- * });
24
- *
25
- * await streamText({ model, messages, tools: { saveSection } });
26
- * ```
27
- *
28
- * The {@link CoordinatedToolOptions.apply} function is the whole API: a pure
29
- * function from the freshest row and the tool input to a patch, in the same
30
- * spirit as a functional state update. Everything beneath it — reading the latest
31
- * row, the compare-and-swap, backing off between retries, and releasing claims —
32
- * is the runtime's job.
33
- *
34
- * ## Strategies
35
- *
36
- * Choose a strategy by how you want concurrent writers to relate. Each is
37
- * designed to converge under many agents writing at once.
38
- *
39
- * - `'merge'` (the default) delegates to the functional update
40
- * `ablo.<model>.update(id, current => apply(current, input))`. The runtime
41
- * re-reads and re-applies `apply` on top of every concurrent write, backing off
42
- * between rounds, so many agents accumulate into one row and the model never
43
- * sees a conflict. This requires the model's agent conflict policy to be
44
- * `reject` (the default, or `agentsReject()`). A model that declares
45
- * `agentsNotify()` holds the losing write instead of rejecting it, which
46
- * defeats the reconcile loop — there, use `'claim'` or `'queue'`, or change the
47
- * policy.
48
- *
49
- * - `'claim'` gives mutual exclusion. It takes a fail-fast claim; if another
50
- * participant holds the row, it returns `{ status: 'claimed' }` and leaves the
51
- * decision to retry up to the model. A visible signal serves the agent better
52
- * than a hidden wait when it might spend its turn on something else. Works under
53
- * any conflict policy.
54
- *
55
- * - `'queue'` serializes writers over stateless HTTP. The tool polls to acquire
56
- * the claim until it is granted or `poll.timeoutMs` elapses, so the model calls
57
- * once and the tool waits its turn. Ordering is approximate rather than strict
58
- * first-in-first-out, which would require a persistent connection.
59
- */
60
- import { tool } from 'ai';
61
- import { AbloClaimedError, AbloNotFoundError } from '../transaction/errors.js';
62
- const sleep = (ms) => new Promise((resolve) => setTimeout(resolve, ms));
63
- export function coordinatedTool(model, options) {
64
- const strategy = options.strategy ?? 'merge';
65
- return tool({
66
- description: options.description,
67
- inputSchema: options.inputSchema,
68
- execute: async (input) => {
69
- const id = options.id(input);
70
- if (strategy === 'merge') {
71
- // Read the freshest row, apply the patch, and commit it with a
72
- // compare-and-swap; on any concurrent write, re-read and re-apply with
73
- // backoff. The model never sees a conflict.
74
- const row = await model.update(id, (current) => options.apply(current, input), {
75
- retries: options.retries,
76
- });
77
- return { status: 'written', row: row ?? undefined };
78
- }
79
- // The 'claim' and 'queue' strategies both acquire a claim, write under it,
80
- // and release it. They differ only in what they do when the row is already
81
- // held: 'claim' returns a signal to the model, while 'queue' waits and
82
- // retries by polling to acquire.
83
- const acquireWriteRelease = async () => {
84
- const claim = await model.claim({
85
- id,
86
- queue: false,
87
- description: options.claim?.description,
88
- });
89
- try {
90
- const current = await model.retrieve({ id });
91
- if (current === undefined) {
92
- throw new AbloNotFoundError(`Cannot write ${id}: it does not exist (or is outside this credential's scope).`, [id]);
93
- }
94
- const row = await model.update({ id, data: options.apply(current, input), claim, wait: 'confirmed' });
95
- return { status: 'written', row };
96
- }
97
- finally {
98
- await claim.release();
99
- }
100
- };
101
- if (strategy === 'claim') {
102
- try {
103
- return await acquireWriteRelease();
104
- }
105
- catch (e) {
106
- if (e instanceof AbloClaimedError) {
107
- return { status: 'claimed', message: 'Another participant holds this row right now — it was NOT saved. Wait briefly and try again.' };
108
- }
109
- throw e;
110
- }
111
- }
112
- // strategy === 'queue': poll to acquire the claim over stateless HTTP.
113
- const interval = options.poll?.intervalMs ?? 250;
114
- const timeout = options.poll?.timeoutMs ?? 30_000;
115
- const start = Date.now();
116
- for (;;) {
117
- try {
118
- const result = await acquireWriteRelease();
119
- return { ...result, waitedMs: Date.now() - start };
120
- }
121
- catch (e) {
122
- if (e instanceof AbloClaimedError) {
123
- if (Date.now() - start >= timeout) {
124
- return { status: 'timeout', message: `Could not acquire the row within ${timeout}ms.` };
125
- }
126
- await sleep(interval);
127
- continue;
128
- }
129
- throw e;
130
- }
131
- }
132
- },
133
- });
134
- }
@@ -1,46 +0,0 @@
1
- /**
2
- * Language-model middleware that tells the model when other participants are
3
- * editing the same entity. It reads peer claims on the target from the agent's
4
- * live presence stream and, when it finds any, injects a short coordination note
5
- * into the prompt before the model runs.
6
- *
7
- * This is the counterpart to the claim-broadcast middleware: that one announces
8
- * what this agent is about to do, while this one reads what others are doing and
9
- * passes it to the model. Together they let the model notice when a person or
10
- * another agent is mid-edit and respond — deferring, framing its work as
11
- * complementary, or suggesting it wait.
12
- *
13
- * It depends only on the AI SDK's provider types and a connected agent from this
14
- * package, and you compose it with the AI SDK's `wrapLanguageModel`. Reading
15
- * peers costs no extra model calls: the presence stream is already in memory from
16
- * the agent's subscription. It adds only a few sentences to the system prompt,
17
- * and only while peers are actively editing.
18
- */
19
- import type { LanguageModelV3Middleware } from '@ai-sdk/provider';
20
- import type { Ablo } from '../client/Ablo.js';
21
- import type { SchemaRecord } from '../transaction/schema/schema.js';
22
- import type { ClaimTarget } from '../transaction/types/streams.js';
23
- export type { ClaimTarget };
24
- export interface CoordinationContextMiddlewareOptions<R extends SchemaRecord = SchemaRecord> {
25
- readonly agent: Ablo<R> | null;
26
- readonly target: ClaimTarget | null;
27
- /**
28
- * Claim identifiers to leave out of the read, typically this agent's own active
29
- * claim so the note doesn't report that the agent is editing against itself. In
30
- * the usual composition with the claim-broadcast middleware, `transformParams`
31
- * runs before that middleware declares its claim, so the agent's own claim
32
- * isn't in the presence stream yet and no filtering is needed. This option is
33
- * here for callers that compose the middleware differently, or that coordinate a
34
- * fleet and want to exclude sibling workers' claims.
35
- */
36
- readonly excludeClaimIds?: readonly string[];
37
- }
38
- /**
39
- * Builds the coordination-context middleware. If `agent` or `target` is null, the
40
- * middleware passes the prompt through unchanged.
41
- *
42
- * The generic over the schema record matches the claim-broadcast middleware: a
43
- * typed `Ablo<S>` and the widened `Ablo<SchemaRecord>` are not structurally
44
- * assignable, so the parameter stays generic to spare callers a cast.
45
- */
46
- export declare function coordinationContextMiddleware<R extends SchemaRecord = SchemaRecord>(options: CoordinationContextMiddlewareOptions<R>): LanguageModelV3Middleware;
@@ -1,106 +0,0 @@
1
- /**
2
- * Language-model middleware that tells the model when other participants are
3
- * editing the same entity. It reads peer claims on the target from the agent's
4
- * live presence stream and, when it finds any, injects a short coordination note
5
- * into the prompt before the model runs.
6
- *
7
- * This is the counterpart to the claim-broadcast middleware: that one announces
8
- * what this agent is about to do, while this one reads what others are doing and
9
- * passes it to the model. Together they let the model notice when a person or
10
- * another agent is mid-edit and respond — deferring, framing its work as
11
- * complementary, or suggesting it wait.
12
- *
13
- * It depends only on the AI SDK's provider types and a connected agent from this
14
- * package, and you compose it with the AI SDK's `wrapLanguageModel`. Reading
15
- * peers costs no extra model calls: the presence stream is already in memory from
16
- * the agent's subscription. It adds only a few sentences to the system prompt,
17
- * and only while peers are actively editing.
18
- */
19
- /**
20
- * Builds the coordination-context middleware. If `agent` or `target` is null, the
21
- * middleware passes the prompt through unchanged.
22
- *
23
- * The generic over the schema record matches the claim-broadcast middleware: a
24
- * typed `Ablo<S>` and the widened `Ablo<SchemaRecord>` are not structurally
25
- * assignable, so the parameter stays generic to spare callers a cast.
26
- */
27
- export function coordinationContextMiddleware(options) {
28
- const { agent, target } = options;
29
- const excludeClaimIds = new Set(options.excludeClaimIds ?? []);
30
- return {
31
- specificationVersion: 'v3',
32
- transformParams: async ({ params }) => {
33
- if (!agent || !target)
34
- return params;
35
- // Look up peer claims on the same target. This reads the agent's reactive
36
- // `claims.others` array in memory, with no I/O. The type is compared
37
- // case-insensitively: observed claims carry a lowercased type name (such as
38
- // `report`) while callers write the schema's type name (`Report`).
39
- const wantedType = target.type.toLowerCase();
40
- const peerClaims = agent.claims.others.filter((claim) => claim.target.type.toLowerCase() === wantedType &&
41
- claim.target.id === target.id &&
42
- targetsOverlap(claim.target, target) &&
43
- !excludeClaimIds.has(claim.id));
44
- if (peerClaims.length === 0)
45
- return params;
46
- const note = formatCoordinationNote(peerClaims, target);
47
- return injectSystemNote(params, note);
48
- },
49
- };
50
- }
51
- function hasSubtarget(target) {
52
- return Boolean(target.path || target.field || target.range);
53
- }
54
- function rangesOverlap(a, b) {
55
- return a.startLine <= b.endLine && b.startLine <= a.endLine;
56
- }
57
- function targetsOverlap(claimTarget, target) {
58
- if (!hasSubtarget(claimTarget) || !hasSubtarget(target))
59
- return true;
60
- if (claimTarget.path &&
61
- target.path &&
62
- claimTarget.path.toLowerCase() !== target.path.toLowerCase()) {
63
- return false;
64
- }
65
- const fieldOverlaps = !claimTarget.field ||
66
- !target.field ||
67
- claimTarget.field.toLowerCase() === target.field.toLowerCase();
68
- const rangeOverlaps = !claimTarget.range ||
69
- !target.range ||
70
- rangesOverlap(claimTarget.range, target.range);
71
- return fieldOverlaps && rangeOverlaps;
72
- }
73
- /**
74
- * Formats a one-paragraph coordination note for the model. It names who is
75
- * editing and, when known, what they are doing. The note stays short: the goal is
76
- * to make the model aware, not to flood the prompt.
77
- */
78
- function formatCoordinationNote(claims, target) {
79
- const entityLabel = target.type.toLowerCase();
80
- const c = claims.length === 1 ? claims[0] : undefined;
81
- if (c) {
82
- return (`<multiplayer_context>\n` +
83
- `Another participant is currently editing this ${entityLabel}. ` +
84
- `Declared work: ${c.description}. ` +
85
- `Defer to their concurrent changes when reasonable, or note your work as complementary to theirs. ` +
86
- `Avoid stomping their in-flight edits.\n` +
87
- `</multiplayer_context>`);
88
- }
89
- const descriptions = Array.from(new Set(claims.map((c) => c.description).filter(Boolean))).join('; ');
90
- return (`<multiplayer_context>\n` +
91
- `${claims.length} other participants are currently editing this ${entityLabel}. ` +
92
- (descriptions ? `Declared work: ${descriptions}. ` : '') +
93
- `Coordinate with their in-flight work — defer where reasonable, ` +
94
- `or describe your work as complementary.\n` +
95
- `</multiplayer_context>`);
96
- }
97
- /**
98
- * Append a system-role message to the prompt array. The AI SDK's
99
- * `LanguageModelV3Prompt` is an ordered list of messages.
100
- */
101
- function injectSystemNote(params, note) {
102
- return {
103
- ...params,
104
- prompt: [...params.prompt, { role: 'system', content: note }],
105
- };
106
- }