@abloatai/ablo 0.35.0 → 0.37.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 (622) hide show
  1. package/AGENTS.md +2 -2
  2. package/CHANGELOG.md +71 -1929
  3. package/NOTICE +2 -2
  4. package/README.md +23 -532
  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 -112
  19. package/dist/index.d.ts.map +1 -0
  20. package/dist/index.js +3 -161
  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 +2 -2
  59. package/docs/api-keys.md +13 -12
  60. package/docs/api.md +15 -53
  61. package/docs/audit.md +4 -3
  62. package/docs/cli.md +11 -11
  63. package/docs/client-behavior.md +9 -9
  64. package/docs/concurrency-convention.md +28 -42
  65. package/docs/coordination.md +228 -86
  66. package/docs/data-sources.md +5 -5
  67. package/docs/debugging.md +34 -12
  68. package/docs/deployment.md +8 -8
  69. package/docs/examples/agent-human.md +4 -4
  70. package/docs/examples/ai-sdk-tool.md +1 -1
  71. package/docs/examples/existing-python-backend.md +15 -4
  72. package/docs/examples/nextjs.md +27 -6
  73. package/docs/examples/scoped-agent.md +3 -3
  74. package/docs/examples/server-agent.md +2 -2
  75. package/docs/groups.md +57 -3
  76. package/docs/guarantees.md +37 -10
  77. package/docs/how-it-works.md +32 -8
  78. package/docs/idempotency.md +6 -6
  79. package/docs/identity.md +24 -24
  80. package/docs/index.md +8 -8
  81. package/docs/integration-guide.md +38 -16
  82. package/docs/internal/README.md +18 -0
  83. package/docs/internal/agent-fleet-coordination-design.md +171 -0
  84. package/docs/internal/agent-orchestration.md +58 -0
  85. package/docs/internal/commit-identifiers.md +91 -0
  86. package/docs/internal/concurrency-open-decisions.md +37 -0
  87. package/docs/internal/data-source-reverse-channel.md +150 -0
  88. package/docs/internal/per-field-conflict-detection.md +165 -0
  89. package/docs/internal/postgres-replication.md +64 -0
  90. package/docs/internal/serializable-schema.md +119 -0
  91. package/docs/internal/structure.md +32 -0
  92. package/docs/mcp.md +9 -9
  93. package/docs/migration.md +37 -18
  94. package/docs/projects.md +1 -1
  95. package/docs/quickstart.md +2 -2
  96. package/docs/react.md +24 -13
  97. package/docs/schema-contract.md +3 -3
  98. package/docs/sessions.md +91 -37
  99. package/docs/webhooks.md +9 -9
  100. package/examples/README.md +2 -2
  101. package/examples/data-source/README.md +1 -1
  102. package/examples/data-source/ablo-driver.ts +1 -1
  103. package/examples/data-source/customer-server.ts +1 -1
  104. package/examples/data-source/run.ts +1 -1
  105. package/examples/data-source/schema.ts +1 -1
  106. package/examples/quickstart.ts +2 -2
  107. package/llms.txt +12 -12
  108. package/package.json +64 -174
  109. package/dist/BaseSyncedStore.d.ts +0 -823
  110. package/dist/BaseSyncedStore.js +0 -1955
  111. package/dist/Database.d.ts +0 -335
  112. package/dist/Database.js +0 -1500
  113. package/dist/InstanceCache.d.ts +0 -233
  114. package/dist/InstanceCache.js +0 -1164
  115. package/dist/LazyReferenceCollection.d.ts +0 -177
  116. package/dist/LazyReferenceCollection.js +0 -461
  117. package/dist/Model.d.ts +0 -444
  118. package/dist/Model.js +0 -909
  119. package/dist/ModelRegistry.d.ts +0 -221
  120. package/dist/ModelRegistry.js +0 -537
  121. package/dist/NetworkMonitor.d.ts +0 -26
  122. package/dist/NetworkMonitor.js +0 -77
  123. package/dist/RuntimeContext.d.ts +0 -52
  124. package/dist/RuntimeContext.js +0 -80
  125. package/dist/SyncClient.d.ts +0 -551
  126. package/dist/SyncClient.js +0 -2199
  127. package/dist/adapters/alwaysOnline.d.ts +0 -14
  128. package/dist/adapters/alwaysOnline.js +0 -17
  129. package/dist/adapters/inMemoryStorage.d.ts +0 -31
  130. package/dist/adapters/inMemoryStorage.js +0 -110
  131. package/dist/ai-sdk/coordinatedTool.d.ts +0 -120
  132. package/dist/ai-sdk/coordinatedTool.js +0 -134
  133. package/dist/ai-sdk/coordinationContext.d.ts +0 -46
  134. package/dist/ai-sdk/coordinationContext.js +0 -106
  135. package/dist/ai-sdk/index.d.ts +0 -121
  136. package/dist/ai-sdk/index.js +0 -121
  137. package/dist/ai-sdk/wrap.d.ts +0 -65
  138. package/dist/ai-sdk/wrap.js +0 -39
  139. package/dist/auth/index.d.ts +0 -1
  140. package/dist/auth/index.js +0 -8
  141. package/dist/batching/index.d.ts +0 -55
  142. package/dist/batching/index.js +0 -147
  143. package/dist/cli.cjs +0 -288600
  144. package/dist/client/Ablo.d.ts +0 -231
  145. package/dist/client/Ablo.js +0 -149
  146. package/dist/client/abloClient.d.ts +0 -309
  147. package/dist/client/abloClient.js +0 -13
  148. package/dist/client/clientPrelude.d.ts +0 -52
  149. package/dist/client/clientPrelude.js +0 -60
  150. package/dist/client/consoleLogger.d.ts +0 -35
  151. package/dist/client/consoleLogger.js +0 -44
  152. package/dist/client/coreClient.d.ts +0 -60
  153. package/dist/client/coreClient.js +0 -118
  154. package/dist/client/createInternalComponents.d.ts +0 -46
  155. package/dist/client/createInternalComponents.js +0 -92
  156. package/dist/client/createModelProxy.d.ts +0 -228
  157. package/dist/client/createModelProxy.js +0 -818
  158. package/dist/client/humans.d.ts +0 -48
  159. package/dist/client/humans.js +0 -52
  160. package/dist/client/modelRegistration.d.ts +0 -10
  161. package/dist/client/modelRegistration.js +0 -312
  162. package/dist/client/options.d.ts +0 -461
  163. package/dist/client/options.js +0 -7
  164. package/dist/client/reactiveEngine.d.ts +0 -48
  165. package/dist/client/reactiveEngine.js +0 -910
  166. package/dist/client/resourceTypes.d.ts +0 -12
  167. package/dist/client/resourceTypes.js +0 -10
  168. package/dist/client/schemaConfig.d.ts +0 -44
  169. package/dist/client/schemaConfig.js +0 -185
  170. package/dist/client/validateAbloOptions.d.ts +0 -42
  171. package/dist/client/validateAbloOptions.js +0 -43
  172. package/dist/client/wsMutationExecutor.d.ts +0 -27
  173. package/dist/client/wsMutationExecutor.js +0 -72
  174. package/dist/context.d.ts +0 -29
  175. package/dist/context.js +0 -58
  176. package/dist/coordination/ClaimLog.d.ts +0 -26
  177. package/dist/coordination/ClaimLog.js +0 -32
  178. package/dist/coordination/index.d.ts +0 -1
  179. package/dist/coordination/index.js +0 -8
  180. package/dist/core/DatabaseManager.d.ts +0 -105
  181. package/dist/core/DatabaseManager.js +0 -387
  182. package/dist/core/QueryProcessor.d.ts +0 -75
  183. package/dist/core/QueryProcessor.js +0 -255
  184. package/dist/core/QueryView.d.ts +0 -79
  185. package/dist/core/QueryView.js +0 -218
  186. package/dist/core/StoreManager.d.ts +0 -112
  187. package/dist/core/StoreManager.js +0 -302
  188. package/dist/core/ViewRegistry.d.ts +0 -20
  189. package/dist/core/ViewRegistry.js +0 -55
  190. package/dist/core/index.d.ts +0 -33
  191. package/dist/core/index.js +0 -48
  192. package/dist/core/openIDBWithTimeout.d.ts +0 -65
  193. package/dist/core/openIDBWithTimeout.js +0 -153
  194. package/dist/core/queryUtils.d.ts +0 -45
  195. package/dist/core/queryUtils.js +0 -69
  196. package/dist/core/storeContract.d.ts +0 -145
  197. package/dist/core/storeContract.js +0 -12
  198. package/dist/docs/catalog.d.ts +0 -72
  199. package/dist/docs/catalog.js +0 -227
  200. package/dist/docs/index.d.ts +0 -10
  201. package/dist/docs/index.js +0 -10
  202. package/dist/environment.d.ts +0 -1
  203. package/dist/environment.js +0 -8
  204. package/dist/interfaces/index.d.ts +0 -311
  205. package/dist/interfaces/index.js +0 -9
  206. package/dist/keys/index.d.ts +0 -1
  207. package/dist/keys/index.js +0 -8
  208. package/dist/mutators/RecordingMutation.d.ts +0 -36
  209. package/dist/mutators/RecordingMutation.js +0 -182
  210. package/dist/mutators/Transaction.d.ts +0 -40
  211. package/dist/mutators/Transaction.js +0 -58
  212. package/dist/mutators/UndoManager.d.ts +0 -258
  213. package/dist/mutators/UndoManager.js +0 -658
  214. package/dist/mutators/defineMutators.d.ts +0 -60
  215. package/dist/mutators/defineMutators.js +0 -18
  216. package/dist/mutators/inverseOp.d.ts +0 -126
  217. package/dist/mutators/inverseOp.js +0 -71
  218. package/dist/mutators/mutateActions.d.ts +0 -45
  219. package/dist/mutators/mutateActions.js +0 -105
  220. package/dist/mutators/readerActions.d.ts +0 -33
  221. package/dist/mutators/readerActions.js +0 -57
  222. package/dist/mutators/undoApply.d.ts +0 -51
  223. package/dist/mutators/undoApply.js +0 -117
  224. package/dist/policy/index.d.ts +0 -21
  225. package/dist/policy/index.js +0 -20
  226. package/dist/query/client.d.ts +0 -61
  227. package/dist/query/client.js +0 -137
  228. package/dist/query/types.d.ts +0 -85
  229. package/dist/query/types.js +0 -16
  230. package/dist/react/AbloProvider.d.ts +0 -230
  231. package/dist/react/AbloProvider.js +0 -455
  232. package/dist/react/ClientSideSuspense.d.ts +0 -36
  233. package/dist/react/ClientSideSuspense.js +0 -17
  234. package/dist/react/DefaultFallback.d.ts +0 -24
  235. package/dist/react/DefaultFallback.js +0 -43
  236. package/dist/react/context.d.ts +0 -55
  237. package/dist/react/context.js +0 -29
  238. package/dist/react/index.d.ts +0 -61
  239. package/dist/react/index.js +0 -66
  240. package/dist/react/internalContext.d.ts +0 -33
  241. package/dist/react/internalContext.js +0 -3
  242. package/dist/react/useAblo.d.ts +0 -75
  243. package/dist/react/useAblo.js +0 -102
  244. package/dist/react/useCurrentUserId.d.ts +0 -22
  245. package/dist/react/useCurrentUserId.js +0 -34
  246. package/dist/react/useErrorListener.d.ts +0 -20
  247. package/dist/react/useErrorListener.js +0 -38
  248. package/dist/react/useMutationFailureListener.d.ts +0 -26
  249. package/dist/react/useMutationFailureListener.js +0 -38
  250. package/dist/react/useMutators.d.ts +0 -56
  251. package/dist/react/useMutators.js +0 -84
  252. package/dist/react/useReactive.d.ts +0 -35
  253. package/dist/react/useReactive.js +0 -123
  254. package/dist/react/useSyncStatus.d.ts +0 -59
  255. package/dist/react/useSyncStatus.js +0 -76
  256. package/dist/react/useUndoScope.d.ts +0 -34
  257. package/dist/react/useUndoScope.js +0 -81
  258. package/dist/schema/coordination.d.ts +0 -112
  259. package/dist/schema/coordination.js +0 -129
  260. package/dist/schema/ddl.d.ts +0 -97
  261. package/dist/schema/ddl.js +0 -491
  262. package/dist/schema/ddlLock.d.ts +0 -35
  263. package/dist/schema/ddlLock.js +0 -46
  264. package/dist/schema/diff.d.ts +0 -225
  265. package/dist/schema/diff.js +0 -289
  266. package/dist/schema/generate.d.ts +0 -19
  267. package/dist/schema/generate.js +0 -86
  268. package/dist/schema/index.d.ts +0 -41
  269. package/dist/schema/index.js +0 -76
  270. package/dist/schema/queries.d.ts +0 -201
  271. package/dist/schema/queries.js +0 -144
  272. package/dist/schema/select.d.ts +0 -40
  273. package/dist/schema/select.js +0 -87
  274. package/dist/schema/serialize.d.ts +0 -115
  275. package/dist/schema/serialize.js +0 -262
  276. package/dist/schema/sugar.d.ts +0 -109
  277. package/dist/schema/sugar.js +0 -83
  278. package/dist/schema/syncDeltaRow.d.ts +0 -6
  279. package/dist/schema/syncDeltaRow.js +0 -6
  280. package/dist/server/adapter.d.ts +0 -173
  281. package/dist/server/adapter.js +0 -18
  282. package/dist/server/commit.d.ts +0 -107
  283. package/dist/server/commit.js +0 -1
  284. package/dist/server/index.d.ts +0 -14
  285. package/dist/server/index.js +0 -2
  286. package/dist/server/readConfig.d.ts +0 -80
  287. package/dist/server/readConfig.js +0 -8
  288. package/dist/server/storageMode.d.ts +0 -23
  289. package/dist/server/storageMode.js +0 -17
  290. package/dist/source/adapter.d.ts +0 -81
  291. package/dist/source/adapter.js +0 -22
  292. package/dist/source/adapters/drizzle.d.ts +0 -48
  293. package/dist/source/adapters/drizzle.js +0 -219
  294. package/dist/source/adapters/kysely.d.ts +0 -42
  295. package/dist/source/adapters/kysely.js +0 -205
  296. package/dist/source/adapters/kyselyMutationCore.d.ts +0 -76
  297. package/dist/source/adapters/kyselyMutationCore.js +0 -125
  298. package/dist/source/adapters/memory.d.ts +0 -13
  299. package/dist/source/adapters/memory.js +0 -130
  300. package/dist/source/adapters/prisma.d.ts +0 -63
  301. package/dist/source/adapters/prisma.js +0 -202
  302. package/dist/source/conformance.d.ts +0 -37
  303. package/dist/source/conformance.js +0 -215
  304. package/dist/source/connector.d.ts +0 -95
  305. package/dist/source/connector.js +0 -266
  306. package/dist/source/connectorProtocol.d.ts +0 -154
  307. package/dist/source/connectorProtocol.js +0 -163
  308. package/dist/source/contract.d.ts +0 -195
  309. package/dist/source/contract.js +0 -164
  310. package/dist/source/factory.d.ts +0 -92
  311. package/dist/source/factory.js +0 -286
  312. package/dist/source/footprint.d.ts +0 -111
  313. package/dist/source/footprint.js +0 -0
  314. package/dist/source/idempotency.d.ts +0 -61
  315. package/dist/source/idempotency.js +0 -144
  316. package/dist/source/index.d.ts +0 -23
  317. package/dist/source/index.js +0 -30
  318. package/dist/source/migrations.d.ts +0 -21
  319. package/dist/source/migrations.js +0 -103
  320. package/dist/source/next.d.ts +0 -32
  321. package/dist/source/next.js +0 -25
  322. package/dist/source/pushQueue.d.ts +0 -134
  323. package/dist/source/pushQueue.js +0 -256
  324. package/dist/source/signing.d.ts +0 -92
  325. package/dist/source/signing.js +0 -162
  326. package/dist/source/types.d.ts +0 -401
  327. package/dist/source/types.js +0 -59
  328. package/dist/stores/ObjectStore.d.ts +0 -115
  329. package/dist/stores/ObjectStore.js +0 -393
  330. package/dist/stores/ObjectStoreContract.d.ts +0 -38
  331. package/dist/stores/ObjectStoreContract.js +0 -1
  332. package/dist/stores/SyncActionStore.d.ts +0 -97
  333. package/dist/stores/SyncActionStore.js +0 -504
  334. package/dist/stores/syncAction.d.ts +0 -26
  335. package/dist/stores/syncAction.js +0 -16
  336. package/dist/surface.d.ts +0 -36
  337. package/dist/surface.js +0 -75
  338. package/dist/sync/BootstrapFetcher.d.ts +0 -280
  339. package/dist/sync/BootstrapFetcher.js +0 -962
  340. package/dist/sync/ConnectionManager.d.ts +0 -8
  341. package/dist/sync/ConnectionManager.js +0 -8
  342. package/dist/sync/OnDemandLoader.d.ts +0 -228
  343. package/dist/sync/OnDemandLoader.js +0 -742
  344. package/dist/sync/SubscriptionManager.d.ts +0 -159
  345. package/dist/sync/SubscriptionManager.js +0 -243
  346. package/dist/sync/SyncWebSocket.d.ts +0 -173
  347. package/dist/sync/SyncWebSocket.js +0 -438
  348. package/dist/sync/awaitClaimGrant.d.ts +0 -6
  349. package/dist/sync/awaitClaimGrant.js +0 -6
  350. package/dist/sync/bootstrapApply.d.ts +0 -70
  351. package/dist/sync/bootstrapApply.js +0 -73
  352. package/dist/sync/commitFrames.d.ts +0 -8
  353. package/dist/sync/commitFrames.js +0 -8
  354. package/dist/sync/contextPorts.d.ts +0 -18
  355. package/dist/sync/contextPorts.js +0 -31
  356. package/dist/sync/createClaimStream.d.ts +0 -7
  357. package/dist/sync/createClaimStream.js +0 -7
  358. package/dist/sync/createPresenceStream.d.ts +0 -69
  359. package/dist/sync/createPresenceStream.js +0 -200
  360. package/dist/sync/createSnapshot.d.ts +0 -29
  361. package/dist/sync/createSnapshot.js +0 -118
  362. package/dist/sync/credentialLifecycle.d.ts +0 -7
  363. package/dist/sync/credentialLifecycle.js +0 -7
  364. package/dist/sync/deltaPipeline.d.ts +0 -113
  365. package/dist/sync/deltaPipeline.js +0 -261
  366. package/dist/sync/groupChange.d.ts +0 -113
  367. package/dist/sync/groupChange.js +0 -242
  368. package/dist/sync/participants.d.ts +0 -115
  369. package/dist/sync/participants.js +0 -344
  370. package/dist/sync/persistedPrefix.d.ts +0 -12
  371. package/dist/sync/persistedPrefix.js +0 -22
  372. package/dist/sync/schemaDrift.d.ts +0 -55
  373. package/dist/sync/schemaDrift.js +0 -53
  374. package/dist/sync/schemas.d.ts +0 -70
  375. package/dist/sync/schemas.js +0 -94
  376. package/dist/sync/syncCursor.d.ts +0 -40
  377. package/dist/sync/syncCursor.js +0 -55
  378. package/dist/sync/syncPlan.d.ts +0 -54
  379. package/dist/sync/syncPlan.js +0 -50
  380. package/dist/sync/wsFrameHandlers.d.ts +0 -8
  381. package/dist/sync/wsFrameHandlers.js +0 -8
  382. package/dist/testing/fixtures/bootstrap.d.ts +0 -49
  383. package/dist/testing/fixtures/bootstrap.js +0 -59
  384. package/dist/testing/fixtures/deltas.d.ts +0 -83
  385. package/dist/testing/fixtures/deltas.js +0 -136
  386. package/dist/testing/fixtures/httpResponses.d.ts +0 -70
  387. package/dist/testing/fixtures/httpResponses.js +0 -90
  388. package/dist/testing/fixtures/models.d.ts +0 -83
  389. package/dist/testing/fixtures/models.js +0 -272
  390. package/dist/testing/helpers/reactWrapper.d.ts +0 -69
  391. package/dist/testing/helpers/reactWrapper.js +0 -67
  392. package/dist/testing/helpers/syncEngineHarness.d.ts +0 -54
  393. package/dist/testing/helpers/syncEngineHarness.js +0 -73
  394. package/dist/testing/helpers/wait.d.ts +0 -30
  395. package/dist/testing/helpers/wait.js +0 -49
  396. package/dist/testing/index.d.ts +0 -23
  397. package/dist/testing/index.js +0 -33
  398. package/dist/testing/mocks/FakeDatabase.d.ts +0 -18
  399. package/dist/testing/mocks/FakeDatabase.js +0 -10
  400. package/dist/testing/mocks/MockMutationExecutor.d.ts +0 -87
  401. package/dist/testing/mocks/MockMutationExecutor.js +0 -186
  402. package/dist/testing/mocks/MockNetworkMonitor.d.ts +0 -20
  403. package/dist/testing/mocks/MockNetworkMonitor.js +0 -46
  404. package/dist/testing/mocks/MockSyncContext.d.ts +0 -51
  405. package/dist/testing/mocks/MockSyncContext.js +0 -72
  406. package/dist/testing/mocks/MockSyncStore.d.ts +0 -88
  407. package/dist/testing/mocks/MockSyncStore.js +0 -171
  408. package/dist/testing/mocks/MockWebSocket.d.ts +0 -71
  409. package/dist/testing/mocks/MockWebSocket.js +0 -118
  410. package/dist/transaction/ablo.d.ts +0 -88
  411. package/dist/transaction/ablo.js +0 -33
  412. package/dist/transaction/auth/apiKey.d.ts +0 -152
  413. package/dist/transaction/auth/apiKey.js +0 -419
  414. package/dist/transaction/auth/bootstrapScope.d.ts +0 -15
  415. package/dist/transaction/auth/bootstrapScope.js +0 -1
  416. package/dist/transaction/auth/capability.d.ts +0 -177
  417. package/dist/transaction/auth/capability.js +0 -199
  418. package/dist/transaction/auth/credentialEndpoint.d.ts +0 -61
  419. package/dist/transaction/auth/credentialEndpoint.js +0 -86
  420. package/dist/transaction/auth/credentialPolicy.d.ts +0 -148
  421. package/dist/transaction/auth/credentialPolicy.js +0 -125
  422. package/dist/transaction/auth/credentialSource.d.ts +0 -30
  423. package/dist/transaction/auth/credentialSource.js +0 -55
  424. package/dist/transaction/auth/hostedEndpoints.d.ts +0 -21
  425. package/dist/transaction/auth/hostedEndpoints.js +0 -21
  426. package/dist/transaction/auth/identity.d.ts +0 -55
  427. package/dist/transaction/auth/identity.js +0 -210
  428. package/dist/transaction/auth/index.d.ts +0 -162
  429. package/dist/transaction/auth/index.js +0 -304
  430. package/dist/transaction/auth/schemas.d.ts +0 -59
  431. package/dist/transaction/auth/schemas.js +0 -85
  432. package/dist/transaction/auth/sessionMint.d.ts +0 -28
  433. package/dist/transaction/auth/sessionMint.js +0 -85
  434. package/dist/transaction/coordination/awaitClaimGrant.d.ts +0 -49
  435. package/dist/transaction/coordination/awaitClaimGrant.js +0 -112
  436. package/dist/transaction/coordination/claimHeartbeatLoop.d.ts +0 -50
  437. package/dist/transaction/coordination/claimHeartbeatLoop.js +0 -88
  438. package/dist/transaction/coordination/claimMeta.d.ts +0 -49
  439. package/dist/transaction/coordination/claimMeta.js +0 -52
  440. package/dist/transaction/coordination/createClaimStream.d.ts +0 -64
  441. package/dist/transaction/coordination/createClaimStream.js +0 -475
  442. package/dist/transaction/coordination/events.d.ts +0 -74
  443. package/dist/transaction/coordination/events.js +0 -7
  444. package/dist/transaction/coordination/index.d.ts +0 -19
  445. package/dist/transaction/coordination/index.js +0 -44
  446. package/dist/transaction/coordination/locator.d.ts +0 -83
  447. package/dist/transaction/coordination/locator.js +0 -82
  448. package/dist/transaction/coordination/schema.d.ts +0 -1473
  449. package/dist/transaction/coordination/schema.js +0 -1013
  450. package/dist/transaction/coordination/targetConflict.d.ts +0 -2
  451. package/dist/transaction/coordination/targetConflict.js +0 -103
  452. package/dist/transaction/coordination/trace.d.ts +0 -78
  453. package/dist/transaction/coordination/trace.js +0 -138
  454. package/dist/transaction/durableWrites.d.ts +0 -62
  455. package/dist/transaction/durableWrites.js +0 -71
  456. package/dist/transaction/environment.d.ts +0 -105
  457. package/dist/transaction/environment.js +0 -108
  458. package/dist/transaction/errorCodes.d.ts +0 -403
  459. package/dist/transaction/errorCodes.js +0 -480
  460. package/dist/transaction/errors.d.ts +0 -428
  461. package/dist/transaction/errors.js +0 -686
  462. package/dist/transaction/index.d.ts +0 -20
  463. package/dist/transaction/index.js +0 -20
  464. package/dist/transaction/keys/index.d.ts +0 -87
  465. package/dist/transaction/keys/index.js +0 -207
  466. package/dist/transaction/log/syncDeltaRow.d.ts +0 -158
  467. package/dist/transaction/log/syncDeltaRow.js +0 -95
  468. package/dist/transaction/logPosition.d.ts +0 -97
  469. package/dist/transaction/logPosition.js +0 -125
  470. package/dist/transaction/logger.d.ts +0 -16
  471. package/dist/transaction/logger.js +0 -7
  472. package/dist/transaction/observability.d.ts +0 -53
  473. package/dist/transaction/observability.js +0 -19
  474. package/dist/transaction/persistence.d.ts +0 -12
  475. package/dist/transaction/persistence.js +0 -11
  476. package/dist/transaction/plugin.d.ts +0 -192
  477. package/dist/transaction/plugin.js +0 -87
  478. package/dist/transaction/policy/types.d.ts +0 -217
  479. package/dist/transaction/policy/types.js +0 -126
  480. package/dist/transaction/resources/functionalUpdate.d.ts +0 -79
  481. package/dist/transaction/resources/functionalUpdate.js +0 -87
  482. package/dist/transaction/resources/httpResources.d.ts +0 -266
  483. package/dist/transaction/resources/httpResources.js +0 -7
  484. package/dist/transaction/resources/modelOperations.d.ts +0 -319
  485. package/dist/transaction/resources/modelOperations.js +0 -12
  486. package/dist/transaction/resources/mutationOptions.d.ts +0 -66
  487. package/dist/transaction/resources/mutationOptions.js +0 -9
  488. package/dist/transaction/resources/where.d.ts +0 -85
  489. package/dist/transaction/resources/where.js +0 -70
  490. package/dist/transaction/resources/writeOptionsSchema.d.ts +0 -47
  491. package/dist/transaction/resources/writeOptionsSchema.js +0 -73
  492. package/dist/transaction/schema/field.d.ts +0 -126
  493. package/dist/transaction/schema/field.js +0 -265
  494. package/dist/transaction/schema/loadStrategy.d.ts +0 -45
  495. package/dist/transaction/schema/loadStrategy.js +0 -46
  496. package/dist/transaction/schema/model.d.ts +0 -379
  497. package/dist/transaction/schema/model.js +0 -123
  498. package/dist/transaction/schema/openapi.d.ts +0 -57
  499. package/dist/transaction/schema/openapi.js +0 -340
  500. package/dist/transaction/schema/relation.d.ts +0 -199
  501. package/dist/transaction/schema/relation.js +0 -104
  502. package/dist/transaction/schema/residency.d.ts +0 -29
  503. package/dist/transaction/schema/residency.js +0 -25
  504. package/dist/transaction/schema/roles.d.ts +0 -249
  505. package/dist/transaction/schema/roles.js +0 -230
  506. package/dist/transaction/schema/schema.d.ts +0 -324
  507. package/dist/transaction/schema/schema.js +0 -305
  508. package/dist/transaction/schema/tenancy.d.ts +0 -139
  509. package/dist/transaction/schema/tenancy.js +0 -190
  510. package/dist/transaction/transactionLayer.d.ts +0 -82
  511. package/dist/transaction/transactionLayer.js +0 -24
  512. package/dist/transaction/transactions/settlement/commitEnvelope.d.ts +0 -143
  513. package/dist/transaction/transactions/settlement/commitEnvelope.js +0 -161
  514. package/dist/transaction/transactions/settlement/httpCommitEnvelope.d.ts +0 -53
  515. package/dist/transaction/transactions/settlement/httpCommitEnvelope.js +0 -207
  516. package/dist/transaction/transactions/settlement/idempotencyKey.d.ts +0 -10
  517. package/dist/transaction/transactions/settlement/idempotencyKey.js +0 -9
  518. package/dist/transaction/transactions/settlement/pendingWrite.d.ts +0 -112
  519. package/dist/transaction/transactions/settlement/pendingWrite.js +0 -20
  520. package/dist/transaction/transport/commitFrames.d.ts +0 -90
  521. package/dist/transaction/transport/commitFrames.js +0 -134
  522. package/dist/transaction/transport/connectionManager.d.ts +0 -215
  523. package/dist/transaction/transport/connectionManager.js +0 -673
  524. package/dist/transaction/transport/credentialLifecycle.d.ts +0 -177
  525. package/dist/transaction/transport/credentialLifecycle.js +0 -324
  526. package/dist/transaction/transport/heartbeat.d.ts +0 -65
  527. package/dist/transaction/transport/heartbeat.js +0 -93
  528. package/dist/transaction/transport/httpClient.d.ts +0 -123
  529. package/dist/transaction/transport/httpClient.js +0 -145
  530. package/dist/transaction/transport/httpOptions.d.ts +0 -33
  531. package/dist/transaction/transport/httpOptions.js +0 -12
  532. package/dist/transaction/transport/httpTransport.d.ts +0 -8
  533. package/dist/transaction/transport/httpTransport.js +0 -1276
  534. package/dist/transaction/transport/networkProbe.d.ts +0 -84
  535. package/dist/transaction/transport/networkProbe.js +0 -207
  536. package/dist/transaction/transport/wsFrameHandlers.d.ts +0 -128
  537. package/dist/transaction/transport/wsFrameHandlers.js +0 -429
  538. package/dist/transaction/transport/wsTransport.d.ts +0 -576
  539. package/dist/transaction/transport/wsTransport.js +0 -1017
  540. package/dist/transaction/types/assertExact.d.ts +0 -17
  541. package/dist/transaction/types/assertExact.js +0 -1
  542. package/dist/transaction/types/global.d.ts +0 -107
  543. package/dist/transaction/types/global.js +0 -40
  544. package/dist/transaction/types/index.d.ts +0 -205
  545. package/dist/transaction/types/index.js +0 -56
  546. package/dist/transaction/types/modelData.d.ts +0 -10
  547. package/dist/transaction/types/modelData.js +0 -9
  548. package/dist/transaction/types/participant.d.ts +0 -20
  549. package/dist/transaction/types/participant.js +0 -10
  550. package/dist/transaction/types/streams.d.ts +0 -540
  551. package/dist/transaction/types/streams.js +0 -11
  552. package/dist/transaction/utils/asyncIterator.d.ts +0 -34
  553. package/dist/transaction/utils/asyncIterator.js +0 -135
  554. package/dist/transaction/utils/duration.d.ts +0 -25
  555. package/dist/transaction/utils/duration.js +0 -45
  556. package/dist/transaction/utils/json.d.ts +0 -57
  557. package/dist/transaction/utils/json.js +0 -276
  558. package/dist/transaction/wire/accountResponses.d.ts +0 -351
  559. package/dist/transaction/wire/accountResponses.js +0 -255
  560. package/dist/transaction/wire/auth.d.ts +0 -49
  561. package/dist/transaction/wire/auth.js +0 -57
  562. package/dist/transaction/wire/bootstrapReason.d.ts +0 -9
  563. package/dist/transaction/wire/bootstrapReason.js +0 -8
  564. package/dist/transaction/wire/claimEvent.d.ts +0 -76
  565. package/dist/transaction/wire/claimEvent.js +0 -73
  566. package/dist/transaction/wire/claims.d.ts +0 -463
  567. package/dist/transaction/wire/claims.js +0 -229
  568. package/dist/transaction/wire/commit.d.ts +0 -603
  569. package/dist/transaction/wire/commit.js +0 -321
  570. package/dist/transaction/wire/delta.d.ts +0 -250
  571. package/dist/transaction/wire/delta.js +0 -147
  572. package/dist/transaction/wire/errorEnvelope.d.ts +0 -72
  573. package/dist/transaction/wire/errorEnvelope.js +0 -123
  574. package/dist/transaction/wire/feedCursor.d.ts +0 -60
  575. package/dist/transaction/wire/feedCursor.js +0 -82
  576. package/dist/transaction/wire/feedEvent.d.ts +0 -177
  577. package/dist/transaction/wire/feedEvent.js +0 -39
  578. package/dist/transaction/wire/frames.d.ts +0 -194
  579. package/dist/transaction/wire/frames.js +0 -50
  580. package/dist/transaction/wire/inboundFrames.d.ts +0 -552
  581. package/dist/transaction/wire/inboundFrames.js +0 -116
  582. package/dist/transaction/wire/index.d.ts +0 -50
  583. package/dist/transaction/wire/index.js +0 -74
  584. package/dist/transaction/wire/listEnvelope.d.ts +0 -37
  585. package/dist/transaction/wire/listEnvelope.js +0 -42
  586. package/dist/transaction/wire/modelResponses.d.ts +0 -85
  587. package/dist/transaction/wire/modelResponses.js +0 -43
  588. package/dist/transaction/wire/protocol.d.ts +0 -38
  589. package/dist/transaction/wire/protocol.js +0 -38
  590. package/dist/transaction/wire/protocolVersion.d.ts +0 -73
  591. package/dist/transaction/wire/protocolVersion.js +0 -83
  592. package/dist/transactions/mutations/MutationQueue.d.ts +0 -655
  593. package/dist/transactions/mutations/MutationQueue.js +0 -2797
  594. package/dist/transactions/mutations/MutationStore.d.ts +0 -20
  595. package/dist/transactions/mutations/MutationStore.js +0 -53
  596. package/dist/transactions/mutations/UnconfirmedWrites.d.ts +0 -82
  597. package/dist/transactions/mutations/UnconfirmedWrites.js +0 -104
  598. package/dist/transactions/mutations/coalesceRules.d.ts +0 -58
  599. package/dist/transactions/mutations/coalesceRules.js +0 -140
  600. package/dist/transactions/mutations/commitLatency.d.ts +0 -52
  601. package/dist/transactions/mutations/commitLatency.js +0 -130
  602. package/dist/transactions/mutations/commitOutboxStore.d.ts +0 -28
  603. package/dist/transactions/mutations/commitOutboxStore.js +0 -26
  604. package/dist/transactions/mutations/commitPayload.d.ts +0 -164
  605. package/dist/transactions/mutations/commitPayload.js +0 -152
  606. package/dist/transactions/mutations/deltaConfirmation.d.ts +0 -59
  607. package/dist/transactions/mutations/deltaConfirmation.js +0 -233
  608. package/dist/transactions/mutations/durableWriteStore.d.ts +0 -14
  609. package/dist/transactions/mutations/durableWriteStore.js +0 -12
  610. package/dist/transactions/mutations/optimisticApply.d.ts +0 -49
  611. package/dist/transactions/mutations/optimisticApply.js +0 -65
  612. package/dist/transactions/mutations/replayValidation.d.ts +0 -186
  613. package/dist/transactions/mutations/replayValidation.js +0 -163
  614. package/dist/utils/mobxSetup.d.ts +0 -53
  615. package/dist/utils/mobxSetup.js +0 -330
  616. package/dist/webhooks/events.d.ts +0 -43
  617. package/dist/webhooks/events.js +0 -42
  618. package/dist/webhooks/index.d.ts +0 -8
  619. package/dist/webhooks/index.js +0 -8
  620. package/dist/wire/index.d.ts +0 -1
  621. package/dist/wire/index.js +0 -8
  622. package/docs/interaction-model.md +0 -99
@@ -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
- }