@abloatai/ablo 0.34.1 → 0.36.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (536) hide show
  1. package/AGENTS.md +2 -1
  2. package/CHANGELOG.md +758 -5
  3. package/README.md +56 -502
  4. package/bin/ablo.cjs +39 -0
  5. package/dist/BaseSyncedStore.d.ts +176 -48
  6. package/dist/BaseSyncedStore.js +346 -214
  7. package/dist/Database.d.ts +17 -44
  8. package/dist/Database.js +96 -79
  9. package/dist/InstanceCache.d.ts +31 -6
  10. package/dist/InstanceCache.js +65 -30
  11. package/dist/LazyReferenceCollection.d.ts +3 -3
  12. package/dist/LazyReferenceCollection.js +4 -4
  13. package/dist/Model.d.ts +23 -13
  14. package/dist/Model.js +27 -17
  15. package/dist/ModelRegistry.d.ts +8 -4
  16. package/dist/ModelRegistry.js +20 -18
  17. package/dist/NetworkMonitor.d.ts +3 -1
  18. package/dist/NetworkMonitor.js +7 -5
  19. package/dist/{SyncEngineContext.d.ts → RuntimeContext.d.ts} +20 -13
  20. package/dist/{SyncEngineContext.js → RuntimeContext.js} +11 -12
  21. package/dist/SyncClient.d.ts +47 -47
  22. package/dist/SyncClient.js +215 -156
  23. package/dist/ai-sdk/coordinatedTool.d.ts +2 -2
  24. package/dist/ai-sdk/coordinatedTool.js +1 -1
  25. package/dist/ai-sdk/coordinationContext.d.ts +2 -2
  26. package/dist/ai-sdk/coordinationContext.js +1 -1
  27. package/dist/ai-sdk/wrap.d.ts +3 -3
  28. package/dist/ai-sdk/wrap.js +2 -2
  29. package/dist/auth/index.d.ts +1 -156
  30. package/dist/auth/index.js +8 -301
  31. package/dist/client/Ablo.d.ts +42 -287
  32. package/dist/client/Ablo.js +129 -963
  33. package/dist/client/abloClient.d.ts +309 -0
  34. package/dist/client/abloClient.js +13 -0
  35. package/dist/client/clientPrelude.d.ts +52 -0
  36. package/dist/client/clientPrelude.js +60 -0
  37. package/dist/client/consoleLogger.d.ts +2 -2
  38. package/dist/client/coreClient.d.ts +60 -0
  39. package/dist/client/coreClient.js +118 -0
  40. package/dist/client/createInternalComponents.d.ts +8 -4
  41. package/dist/client/createInternalComponents.js +17 -10
  42. package/dist/client/createModelProxy.d.ts +98 -373
  43. package/dist/client/createModelProxy.js +233 -139
  44. package/dist/client/humans.d.ts +69 -0
  45. package/dist/client/humans.js +78 -0
  46. package/dist/client/modelRegistration.d.ts +1 -1
  47. package/dist/client/modelRegistration.js +9 -9
  48. package/dist/client/options.d.ts +73 -17
  49. package/dist/client/reactiveEngine.d.ts +53 -0
  50. package/dist/client/reactiveEngine.js +688 -0
  51. package/dist/client/resourceTypes.d.ts +9 -250
  52. package/dist/client/resourceTypes.js +8 -5
  53. package/dist/client/schemaConfig.d.ts +4 -4
  54. package/dist/client/schemaConfig.js +6 -2
  55. package/dist/client/storeCluster.d.ts +47 -0
  56. package/dist/client/storeCluster.js +118 -0
  57. package/dist/client/storeLifecycle.d.ts +61 -0
  58. package/dist/client/storeLifecycle.js +231 -0
  59. package/dist/client/validateAbloOptions.d.ts +3 -2
  60. package/dist/client/validateAbloOptions.js +1 -1
  61. package/dist/client/wsMutationExecutor.d.ts +3 -3
  62. package/dist/client/wsMutationExecutor.js +3 -3
  63. package/dist/context.d.ts +22 -9
  64. package/dist/context.js +33 -9
  65. package/dist/coordination/ClaimLog.d.ts +26 -0
  66. package/dist/coordination/ClaimLog.js +32 -0
  67. package/dist/coordination/index.d.ts +1 -15
  68. package/dist/coordination/index.js +8 -31
  69. package/dist/core/index.d.ts +3 -3
  70. package/dist/core/index.js +2 -2
  71. package/dist/docs/catalog.d.ts +72 -0
  72. package/dist/docs/catalog.js +230 -0
  73. package/dist/docs/index.d.ts +10 -0
  74. package/dist/docs/index.js +10 -0
  75. package/dist/environment.d.ts +1 -40
  76. package/dist/environment.js +8 -37
  77. package/dist/index.d.ts +44 -36
  78. package/dist/index.js +30 -22
  79. package/dist/interfaces/index.d.ts +44 -134
  80. package/dist/keys/index.d.ts +1 -77
  81. package/dist/keys/index.js +8 -190
  82. package/dist/mutators/{RecordingTransaction.d.ts → RecordingMutation.d.ts} +4 -4
  83. package/dist/mutators/{RecordingTransaction.js → RecordingMutation.js} +2 -2
  84. package/dist/mutators/Transaction.d.ts +1 -1
  85. package/dist/mutators/Transaction.js +1 -1
  86. package/dist/mutators/UndoManager.d.ts +6 -6
  87. package/dist/mutators/UndoManager.js +5 -5
  88. package/dist/mutators/defineMutators.d.ts +3 -3
  89. package/dist/mutators/defineMutators.js +1 -1
  90. package/dist/mutators/inverseOp.js +2 -2
  91. package/dist/mutators/mutateActions.d.ts +3 -3
  92. package/dist/mutators/mutateActions.js +1 -1
  93. package/dist/mutators/readerActions.d.ts +1 -1
  94. package/dist/mutators/undoApply.d.ts +1 -1
  95. package/dist/mutators/undoApply.js +1 -1
  96. package/dist/policy/index.d.ts +2 -2
  97. package/dist/policy/index.js +1 -1
  98. package/dist/query/client.d.ts +5 -2
  99. package/dist/query/client.js +10 -9
  100. package/dist/query/types.d.ts +6 -41
  101. package/dist/query/types.js +2 -2
  102. package/dist/react/AbloProvider.d.ts +18 -8
  103. package/dist/react/AbloProvider.js +10 -9
  104. package/dist/react/context.d.ts +3 -3
  105. package/dist/react/context.js +1 -1
  106. package/dist/react/createAbloReact.d.ts +56 -0
  107. package/dist/react/createAbloReact.js +51 -0
  108. package/dist/react/index.d.ts +6 -5
  109. package/dist/react/index.js +6 -3
  110. package/dist/react/internalContext.d.ts +1 -1
  111. package/dist/react/useAblo.d.ts +12 -5
  112. package/dist/react/useAblo.js +26 -8
  113. package/dist/react/useCurrentUserId.js +1 -1
  114. package/dist/react/useErrorListener.js +1 -1
  115. package/dist/react/useMutationFailureListener.d.ts +2 -2
  116. package/dist/react/useMutationFailureListener.js +1 -1
  117. package/dist/react/useMutators.d.ts +3 -3
  118. package/dist/react/useMutators.js +3 -3
  119. package/dist/react/useUndoScope.d.ts +5 -5
  120. package/dist/react/useUndoScope.js +1 -1
  121. package/dist/schema/coordination.d.ts +69 -10
  122. package/dist/schema/coordination.js +90 -9
  123. package/dist/schema/ddl.js +2 -2
  124. package/dist/schema/diff.d.ts +1 -1
  125. package/dist/schema/generate.js +1 -1
  126. package/dist/schema/index.d.ts +11 -10
  127. package/dist/schema/index.js +22 -18
  128. package/dist/schema/queries.d.ts +27 -27
  129. package/dist/schema/queries.js +23 -23
  130. package/dist/schema/select.d.ts +3 -3
  131. package/dist/schema/select.js +6 -3
  132. package/dist/schema/serialize.d.ts +15 -6
  133. package/dist/schema/serialize.js +20 -3
  134. package/dist/schema/sugar.d.ts +6 -7
  135. package/dist/schema/sugar.js +9 -12
  136. package/dist/schema/syncDeltaRow.d.ts +4 -152
  137. package/dist/schema/syncDeltaRow.js +4 -105
  138. package/dist/server/adapter.d.ts +18 -1
  139. package/dist/server/commit.d.ts +10 -16
  140. package/dist/server/index.d.ts +1 -1
  141. package/dist/server/index.js +1 -1
  142. package/dist/server/readConfig.d.ts +1 -1
  143. package/dist/source/adapter.d.ts +7 -5
  144. package/dist/source/adapter.js +7 -5
  145. package/dist/source/adapters/drizzle.d.ts +1 -1
  146. package/dist/source/adapters/drizzle.js +2 -2
  147. package/dist/source/adapters/kysely.d.ts +1 -1
  148. package/dist/source/adapters/kysely.js +1 -1
  149. package/dist/source/adapters/kyselyMutationCore.d.ts +1 -1
  150. package/dist/source/adapters/kyselyMutationCore.js +2 -2
  151. package/dist/source/adapters/memory.js +1 -1
  152. package/dist/source/adapters/prisma.d.ts +8 -3
  153. package/dist/source/adapters/prisma.js +1 -1
  154. package/dist/source/connector.js +1 -1
  155. package/dist/source/connectorProtocol.d.ts +2 -8
  156. package/dist/source/connectorProtocol.js +3 -2
  157. package/dist/source/contract.d.ts +29 -17
  158. package/dist/source/contract.js +27 -22
  159. package/dist/source/factory.d.ts +1 -1
  160. package/dist/source/idempotency.js +2 -2
  161. package/dist/source/index.d.ts +1 -0
  162. package/dist/source/index.js +3 -0
  163. package/dist/source/next.d.ts +1 -1
  164. package/dist/source/signing.d.ts +9 -2
  165. package/dist/source/signing.js +4 -1
  166. package/dist/source/types.d.ts +6 -4
  167. package/dist/source/types.js +1 -1
  168. package/dist/{core/storeContract.d.ts → storeContract.d.ts} +6 -6
  169. package/dist/{core → stores}/DatabaseManager.d.ts +3 -1
  170. package/dist/{core → stores}/DatabaseManager.js +14 -13
  171. package/dist/stores/ObjectStore.d.ts +1 -1
  172. package/dist/{core → stores}/StoreManager.d.ts +9 -26
  173. package/dist/{core → stores}/StoreManager.js +29 -77
  174. package/dist/stores/SyncActionStore.d.ts +4 -2
  175. package/dist/stores/SyncActionStore.js +11 -17
  176. package/dist/stores/syncAction.d.ts +26 -0
  177. package/dist/stores/syncAction.js +16 -0
  178. package/dist/surface.d.ts +3 -3
  179. package/dist/surface.js +6 -4
  180. package/dist/sync/BootstrapFetcher.d.ts +127 -6
  181. package/dist/sync/BootstrapFetcher.js +511 -83
  182. package/dist/sync/ConnectionManager.d.ts +6 -198
  183. package/dist/sync/ConnectionManager.js +6 -677
  184. package/dist/sync/OnDemandLoader.d.ts +5 -2
  185. package/dist/sync/OnDemandLoader.js +61 -21
  186. package/dist/sync/SubscriptionManager.d.ts +13 -2
  187. package/dist/sync/SubscriptionManager.js +23 -5
  188. package/dist/sync/SyncWebSocket.d.ts +27 -510
  189. package/dist/sync/SyncWebSocket.js +76 -954
  190. package/dist/sync/awaitClaimGrant.d.ts +4 -44
  191. package/dist/sync/awaitClaimGrant.js +4 -109
  192. package/dist/sync/bootstrapApply.d.ts +3 -0
  193. package/dist/sync/bootstrapApply.js +2 -2
  194. package/dist/sync/commitFrames.d.ts +6 -40
  195. package/dist/sync/commitFrames.js +6 -97
  196. package/dist/sync/contextPorts.d.ts +18 -0
  197. package/dist/sync/contextPorts.js +31 -0
  198. package/dist/sync/createClaimStream.d.ts +5 -49
  199. package/dist/sync/createClaimStream.js +5 -469
  200. package/dist/sync/createPresenceStream.d.ts +26 -4
  201. package/dist/sync/createPresenceStream.js +28 -20
  202. package/dist/sync/createSnapshot.d.ts +2 -2
  203. package/dist/sync/createSnapshot.js +1 -1
  204. package/dist/sync/credentialLifecycle.d.ts +5 -173
  205. package/dist/sync/credentialLifecycle.js +5 -320
  206. package/dist/sync/deltaPipeline.d.ts +13 -12
  207. package/dist/sync/deltaPipeline.js +21 -4
  208. package/dist/sync/groupChange.d.ts +3 -0
  209. package/dist/sync/groupChange.js +16 -14
  210. package/dist/sync/participants.d.ts +24 -6
  211. package/dist/sync/participants.js +32 -23
  212. package/dist/sync/schemaDrift.d.ts +55 -0
  213. package/dist/sync/schemaDrift.js +53 -0
  214. package/dist/sync/schemas.d.ts +23 -33
  215. package/dist/sync/schemas.js +29 -20
  216. package/dist/sync/syncPlan.d.ts +3 -3
  217. package/dist/sync/wsFrameHandlers.d.ts +6 -114
  218. package/dist/sync/wsFrameHandlers.js +6 -392
  219. package/dist/syncLog/contract.d.ts +20 -0
  220. package/dist/syncLog/contract.js +19 -0
  221. package/dist/syncLog/index.d.ts +1 -0
  222. package/dist/syncLog/index.js +1 -0
  223. package/dist/transaction/ablo.d.ts +88 -0
  224. package/dist/transaction/ablo.js +33 -0
  225. package/dist/{client/auth.d.ts → transaction/auth/apiKey.d.ts} +43 -8
  226. package/dist/{client/auth.js → transaction/auth/apiKey.js} +19 -0
  227. package/dist/transaction/auth/bootstrapScope.d.ts +15 -0
  228. package/dist/transaction/auth/bootstrapScope.js +1 -0
  229. package/dist/transaction/auth/capability.d.ts +212 -0
  230. package/dist/transaction/auth/capability.js +224 -0
  231. package/dist/{auth → transaction/auth}/credentialSource.d.ts +8 -1
  232. package/dist/{client → transaction/auth}/identity.d.ts +8 -7
  233. package/dist/{client → transaction/auth}/identity.js +1 -1
  234. package/dist/transaction/auth/index.d.ts +162 -0
  235. package/dist/transaction/auth/index.js +304 -0
  236. package/dist/{auth → transaction/auth}/schemas.d.ts +1 -1
  237. package/dist/{auth → transaction/auth}/schemas.js +13 -13
  238. package/dist/{client → transaction/auth}/sessionMint.d.ts +8 -8
  239. package/dist/{client → transaction/auth}/sessionMint.js +4 -7
  240. package/dist/transaction/coordination/awaitClaimGrant.d.ts +56 -0
  241. package/dist/transaction/coordination/awaitClaimGrant.js +124 -0
  242. package/dist/{client → transaction/coordination}/claimHeartbeatLoop.d.ts +34 -0
  243. package/dist/{client → transaction/coordination}/claimHeartbeatLoop.js +20 -0
  244. package/dist/transaction/coordination/claimMeta.d.ts +49 -0
  245. package/dist/transaction/coordination/claimMeta.js +52 -0
  246. package/dist/transaction/coordination/createClaimStream.d.ts +64 -0
  247. package/dist/transaction/coordination/createClaimStream.js +475 -0
  248. package/dist/transaction/coordination/events.d.ts +74 -0
  249. package/dist/transaction/coordination/events.js +7 -0
  250. package/dist/transaction/coordination/index.d.ts +19 -0
  251. package/dist/transaction/coordination/index.js +45 -0
  252. package/dist/transaction/coordination/locator.d.ts +104 -0
  253. package/dist/transaction/coordination/locator.js +102 -0
  254. package/dist/transaction/coordination/schema.d.ts +1536 -0
  255. package/dist/transaction/coordination/schema.js +1177 -0
  256. package/dist/transaction/coordination/targetConflict.d.ts +2 -0
  257. package/dist/transaction/coordination/targetConflict.js +107 -0
  258. package/dist/{coordination → transaction/coordination}/trace.d.ts +7 -18
  259. package/dist/{coordination → transaction/coordination}/trace.js +18 -25
  260. package/dist/transaction/durableWrites.d.ts +62 -0
  261. package/dist/{client → transaction}/durableWrites.js +28 -3
  262. package/dist/transaction/environment.d.ts +105 -0
  263. package/dist/transaction/environment.js +108 -0
  264. package/dist/{errorCodes.d.ts → transaction/errorCodes.d.ts} +12 -12
  265. package/dist/{errorCodes.js → transaction/errorCodes.js} +45 -18
  266. package/dist/{errors.d.ts → transaction/errors.d.ts} +37 -13
  267. package/dist/{errors.js → transaction/errors.js} +85 -16
  268. package/dist/transaction/footprint.d.ts +111 -0
  269. package/dist/transaction/footprint.js +0 -0
  270. package/dist/transaction/index.d.ts +20 -0
  271. package/dist/transaction/index.js +20 -0
  272. package/dist/transaction/keys/index.d.ts +87 -0
  273. package/dist/transaction/keys/index.js +207 -0
  274. package/dist/transaction/log/syncDeltaRow.d.ts +158 -0
  275. package/dist/transaction/log/syncDeltaRow.js +95 -0
  276. package/dist/{sync/syncPosition.d.ts → transaction/logPosition.d.ts} +22 -8
  277. package/dist/{sync/syncPosition.js → transaction/logPosition.js} +15 -6
  278. package/dist/transaction/logger.d.ts +16 -0
  279. package/dist/transaction/logger.js +7 -0
  280. package/dist/transaction/observability.d.ts +53 -0
  281. package/dist/transaction/observability.js +19 -0
  282. package/dist/transaction/plugin.d.ts +285 -0
  283. package/dist/transaction/plugin.js +106 -0
  284. package/dist/{policy → transaction/policy}/types.d.ts +3 -3
  285. package/dist/{policy → transaction/policy}/types.js +2 -0
  286. package/dist/transaction/resources/httpResources.d.ts +321 -0
  287. package/dist/transaction/resources/httpResources.js +7 -0
  288. package/dist/transaction/resources/modelOperations.d.ts +427 -0
  289. package/dist/transaction/resources/modelOperations.js +12 -0
  290. package/dist/transaction/resources/mutationOptions.d.ts +66 -0
  291. package/dist/transaction/resources/mutationOptions.js +9 -0
  292. package/dist/transaction/resources/where.d.ts +101 -0
  293. package/dist/transaction/resources/where.js +115 -0
  294. package/dist/{client → transaction/resources}/writeOptionsSchema.d.ts +2 -6
  295. package/dist/{client → transaction/resources}/writeOptionsSchema.js +9 -5
  296. package/dist/{schema → transaction/schema}/field.d.ts +17 -23
  297. package/dist/{schema → transaction/schema}/field.js +5 -5
  298. package/dist/transaction/schema/fieldRef.d.ts +38 -0
  299. package/dist/transaction/schema/fieldRef.js +11 -0
  300. package/dist/transaction/schema/loadStrategy.d.ts +45 -0
  301. package/dist/transaction/schema/loadStrategy.js +46 -0
  302. package/dist/{schema → transaction/schema}/model.d.ts +50 -35
  303. package/dist/{schema → transaction/schema}/model.js +30 -20
  304. package/dist/transaction/schema/openapi.d.ts +58 -0
  305. package/dist/transaction/schema/openapi.js +501 -0
  306. package/dist/{schema → transaction/schema}/relation.d.ts +21 -16
  307. package/dist/{schema → transaction/schema}/relation.js +7 -7
  308. package/dist/{schema → transaction/schema}/residency.d.ts +0 -9
  309. package/dist/{schema → transaction/schema}/residency.js +0 -5
  310. package/dist/{schema → transaction/schema}/roles.d.ts +5 -5
  311. package/dist/{schema → transaction/schema}/roles.js +5 -5
  312. package/dist/{schema → transaction/schema}/schema.d.ts +39 -10
  313. package/dist/{schema → transaction/schema}/schema.js +24 -3
  314. package/dist/{schema → transaction/schema}/tenancy.d.ts +1 -1
  315. package/dist/{schema → transaction/schema}/tenancy.js +7 -4
  316. package/dist/transaction/transactionLayer.d.ts +82 -0
  317. package/dist/transaction/transactionLayer.js +24 -0
  318. package/dist/{transactions → transaction/transactions/settlement}/commitEnvelope.d.ts +5 -6
  319. package/dist/{transactions → transaction/transactions/settlement}/commitEnvelope.js +9 -13
  320. package/dist/{transactions → transaction/transactions/settlement}/httpCommitEnvelope.d.ts +9 -2
  321. package/dist/{transactions → transaction/transactions/settlement}/httpCommitEnvelope.js +5 -9
  322. package/dist/{transactions/durableWriteStore.d.ts → transaction/transactions/settlement/pendingWrite.d.ts} +11 -37
  323. package/dist/transaction/transactions/settlement/pendingWrite.js +20 -0
  324. package/dist/transaction/transport/commitFrames.d.ts +90 -0
  325. package/dist/transaction/transport/commitFrames.js +134 -0
  326. package/dist/transaction/transport/connectionManager.d.ts +215 -0
  327. package/dist/transaction/transport/connectionManager.js +673 -0
  328. package/dist/transaction/transport/credentialLifecycle.d.ts +177 -0
  329. package/dist/transaction/transport/credentialLifecycle.js +324 -0
  330. package/dist/{sync → transaction/transport}/heartbeat.d.ts +3 -1
  331. package/dist/{sync → transaction/transport}/heartbeat.js +6 -4
  332. package/dist/transaction/transport/httpClient.d.ts +131 -0
  333. package/dist/{client → transaction/transport}/httpClient.js +6 -5
  334. package/dist/transaction/transport/httpOptions.d.ts +33 -0
  335. package/dist/transaction/transport/httpOptions.js +12 -0
  336. package/dist/{client → transaction/transport}/httpTransport.js +295 -97
  337. package/dist/{sync/NetworkProbe.d.ts → transaction/transport/networkProbe.d.ts} +7 -4
  338. package/dist/{sync/NetworkProbe.js → transaction/transport/networkProbe.js} +14 -13
  339. package/dist/transaction/transport/wsFrameHandlers.d.ts +128 -0
  340. package/dist/transaction/transport/wsFrameHandlers.js +429 -0
  341. package/dist/transaction/transport/wsTransport.d.ts +574 -0
  342. package/dist/transaction/transport/wsTransport.js +1023 -0
  343. package/dist/transaction/types/assertExact.d.ts +17 -0
  344. package/dist/transaction/types/assertExact.js +1 -0
  345. package/dist/{types → transaction/types}/global.d.ts +17 -2
  346. package/dist/{types → transaction/types}/global.js +2 -1
  347. package/dist/{types → transaction/types}/index.d.ts +14 -46
  348. package/dist/{types → transaction/types}/index.js +7 -16
  349. package/dist/{types → transaction/types}/streams.d.ts +73 -45
  350. package/dist/transaction/utils/duration.d.ts +50 -0
  351. package/dist/{utils → transaction/utils}/duration.js +32 -0
  352. package/dist/{utils → transaction/utils}/json.d.ts +18 -0
  353. package/dist/transaction/utils/json.js +276 -0
  354. package/dist/transaction/wire/accountResponses.d.ts +420 -0
  355. package/dist/transaction/wire/accountResponses.js +290 -0
  356. package/dist/transaction/wire/auth.d.ts +56 -0
  357. package/dist/transaction/wire/auth.js +63 -0
  358. package/dist/transaction/wire/claimEvent.d.ts +76 -0
  359. package/dist/transaction/wire/claimEvent.js +73 -0
  360. package/dist/transaction/wire/claims.d.ts +530 -0
  361. package/dist/transaction/wire/claims.js +327 -0
  362. package/dist/{wire → transaction/wire}/commit.d.ts +125 -193
  363. package/dist/{wire → transaction/wire}/commit.js +68 -47
  364. package/dist/{wire → transaction/wire}/delta.d.ts +66 -17
  365. package/dist/{wire → transaction/wire}/delta.js +37 -13
  366. package/dist/transaction/wire/errorEnvelope.d.ts +72 -0
  367. package/dist/{wire → transaction/wire}/errorEnvelope.js +36 -5
  368. package/dist/transaction/wire/feedCursor.d.ts +60 -0
  369. package/dist/transaction/wire/feedCursor.js +82 -0
  370. package/dist/transaction/wire/feedEvent.d.ts +204 -0
  371. package/dist/transaction/wire/feedEvent.js +65 -0
  372. package/dist/transaction/wire/frames.d.ts +194 -0
  373. package/dist/transaction/wire/frames.js +50 -0
  374. package/dist/transaction/wire/inboundFrames.d.ts +562 -0
  375. package/dist/transaction/wire/inboundFrames.js +116 -0
  376. package/dist/transaction/wire/index.d.ts +54 -0
  377. package/dist/transaction/wire/index.js +83 -0
  378. package/dist/{wire → transaction/wire}/listEnvelope.d.ts +13 -14
  379. package/dist/transaction/wire/listEnvelope.js +42 -0
  380. package/dist/transaction/wire/modelMutations.d.ts +31 -0
  381. package/dist/transaction/wire/modelMutations.js +52 -0
  382. package/dist/transaction/wire/modelResponses.d.ts +85 -0
  383. package/dist/transaction/wire/modelResponses.js +43 -0
  384. package/dist/transaction/wire/modelShape.d.ts +78 -0
  385. package/dist/transaction/wire/modelShape.js +74 -0
  386. package/dist/transactions/{TransactionQueue.d.ts → mutations/MutationQueue.d.ts} +85 -38
  387. package/dist/transactions/{TransactionQueue.js → mutations/MutationQueue.js} +141 -80
  388. package/dist/transactions/{TransactionStore.d.ts → mutations/MutationStore.d.ts} +8 -8
  389. package/dist/transactions/{TransactionStore.js → mutations/MutationStore.js} +2 -2
  390. package/dist/transactions/{coalesceRules.d.ts → mutations/coalesceRules.d.ts} +10 -10
  391. package/dist/transactions/{coalesceRules.js → mutations/coalesceRules.js} +1 -1
  392. package/dist/transactions/mutations/commitLatency.d.ts +52 -0
  393. package/dist/transactions/mutations/commitLatency.js +130 -0
  394. package/dist/transactions/{commitOutboxStore.d.ts → mutations/commitOutboxStore.d.ts} +1 -5
  395. package/dist/transactions/{commitOutboxStore.js → mutations/commitOutboxStore.js} +1 -1
  396. package/dist/transactions/{commitPayload.d.ts → mutations/commitPayload.d.ts} +18 -16
  397. package/dist/transactions/{commitPayload.js → mutations/commitPayload.js} +15 -15
  398. package/dist/transactions/{deltaConfirmation.d.ts → mutations/deltaConfirmation.d.ts} +15 -11
  399. package/dist/transactions/{deltaConfirmation.js → mutations/deltaConfirmation.js} +14 -12
  400. package/dist/transactions/mutations/durableWriteStore.d.ts +14 -0
  401. package/dist/transactions/mutations/durableWriteStore.js +12 -0
  402. package/dist/transactions/{optimisticApply.d.ts → mutations/optimisticApply.d.ts} +7 -7
  403. package/dist/transactions/{replayValidation.d.ts → mutations/replayValidation.d.ts} +4 -3
  404. package/dist/transactions/{replayValidation.js → mutations/replayValidation.js} +7 -5
  405. package/dist/utils/mobxSetup.d.ts +1 -1
  406. package/dist/utils/mobxSetup.js +5 -2
  407. package/dist/{core → views}/QueryView.d.ts +2 -2
  408. package/dist/{core → views}/QueryView.js +2 -2
  409. package/dist/{core → views}/ViewRegistry.d.ts +1 -1
  410. package/dist/{core/queryUtils.d.ts → views/incrementalView.d.ts} +6 -6
  411. package/dist/{core/queryUtils.js → views/incrementalView.js} +6 -6
  412. package/dist/webhooks/events.d.ts +2 -2
  413. package/dist/wire/index.d.ts +1 -34
  414. package/dist/wire/index.js +8 -49
  415. package/docs/agent-messaging.md +3 -3
  416. package/docs/agents.md +20 -13
  417. package/docs/api-keys.md +14 -10
  418. package/docs/api.md +27 -61
  419. package/docs/audit.md +6 -3
  420. package/docs/cli.md +41 -13
  421. package/docs/client-behavior.md +11 -9
  422. package/docs/concurrency-convention.md +49 -57
  423. package/docs/coordination.md +283 -121
  424. package/docs/data-sources.md +7 -5
  425. package/docs/debugging.md +39 -15
  426. package/docs/deployment.md +267 -0
  427. package/docs/examples/agent-human.md +49 -42
  428. package/docs/examples/ai-sdk-tool.md +69 -44
  429. package/docs/examples/existing-python-backend.md +8 -6
  430. package/docs/examples/nextjs.md +129 -47
  431. package/docs/examples/scoped-agent.md +46 -45
  432. package/docs/examples/server-agent.md +46 -26
  433. package/docs/groups.md +87 -30
  434. package/docs/guarantees.md +41 -12
  435. package/docs/how-it-works.md +38 -12
  436. package/docs/idempotency.md +126 -0
  437. package/docs/identity.md +77 -74
  438. package/docs/index.md +172 -86
  439. package/docs/integration-guide.md +31 -19
  440. package/docs/mcp.md +46 -21
  441. package/docs/migration.md +95 -18
  442. package/docs/operating-on-your-database.md +3 -1
  443. package/docs/projects.md +3 -1
  444. package/docs/quickstart.md +22 -5
  445. package/docs/react.md +31 -18
  446. package/docs/schema-contract.md +5 -3
  447. package/docs/session-settings.md +108 -0
  448. package/docs/sessions.md +4 -2
  449. package/docs/webhooks.md +12 -10
  450. package/llms.txt +48 -18
  451. package/package.json +21 -26
  452. package/dist/agent/Agent.d.ts +0 -366
  453. package/dist/agent/Agent.js +0 -514
  454. package/dist/agent/index.d.ts +0 -115
  455. package/dist/agent/index.js +0 -128
  456. package/dist/agent/session.d.ts +0 -93
  457. package/dist/agent/session.js +0 -149
  458. package/dist/agent/types.d.ts +0 -68
  459. package/dist/agent/types.js +0 -9
  460. package/dist/cli.cjs +0 -286329
  461. package/dist/client/durableWrites.d.ts +0 -21
  462. package/dist/client/httpClient.d.ts +0 -80
  463. package/dist/coordination/schema.d.ts +0 -722
  464. package/dist/coordination/schema.js +0 -578
  465. package/dist/schema/openapi.d.ts +0 -29
  466. package/dist/schema/openapi.js +0 -124
  467. package/dist/testing/fixtures/bootstrap.d.ts +0 -49
  468. package/dist/testing/fixtures/bootstrap.js +0 -59
  469. package/dist/testing/fixtures/deltas.d.ts +0 -83
  470. package/dist/testing/fixtures/deltas.js +0 -136
  471. package/dist/testing/fixtures/models.d.ts +0 -83
  472. package/dist/testing/fixtures/models.js +0 -272
  473. package/dist/testing/helpers/reactWrapper.d.ts +0 -69
  474. package/dist/testing/helpers/reactWrapper.js +0 -67
  475. package/dist/testing/helpers/syncEngineHarness.d.ts +0 -54
  476. package/dist/testing/helpers/syncEngineHarness.js +0 -73
  477. package/dist/testing/helpers/wait.d.ts +0 -30
  478. package/dist/testing/helpers/wait.js +0 -49
  479. package/dist/testing/index.d.ts +0 -23
  480. package/dist/testing/index.js +0 -33
  481. package/dist/testing/mocks/FakeDatabase.d.ts +0 -18
  482. package/dist/testing/mocks/FakeDatabase.js +0 -10
  483. package/dist/testing/mocks/MockMutationExecutor.d.ts +0 -87
  484. package/dist/testing/mocks/MockMutationExecutor.js +0 -192
  485. package/dist/testing/mocks/MockNetworkMonitor.d.ts +0 -20
  486. package/dist/testing/mocks/MockNetworkMonitor.js +0 -46
  487. package/dist/testing/mocks/MockSyncContext.d.ts +0 -51
  488. package/dist/testing/mocks/MockSyncContext.js +0 -71
  489. package/dist/testing/mocks/MockSyncStore.d.ts +0 -88
  490. package/dist/testing/mocks/MockSyncStore.js +0 -171
  491. package/dist/testing/mocks/MockWebSocket.d.ts +0 -71
  492. package/dist/testing/mocks/MockWebSocket.js +0 -118
  493. package/dist/transactions/durableWriteStore.js +0 -30
  494. package/dist/utils/duration.d.ts +0 -25
  495. package/dist/utils/json.js +0 -88
  496. package/dist/wire/errorEnvelope.d.ts +0 -55
  497. package/dist/wire/frames.d.ts +0 -197
  498. package/dist/wire/frames.js +0 -49
  499. package/dist/wire/listEnvelope.js +0 -18
  500. package/docs/interaction-model.md +0 -97
  501. /package/dist/{core → query}/QueryProcessor.d.ts +0 -0
  502. /package/dist/{core → query}/QueryProcessor.js +0 -0
  503. /package/dist/{core/storeContract.js → storeContract.js} +0 -0
  504. /package/dist/{core → stores}/openIDBWithTimeout.d.ts +0 -0
  505. /package/dist/{core → stores}/openIDBWithTimeout.js +0 -0
  506. /package/dist/{client → transaction/auth}/credentialEndpoint.d.ts +0 -0
  507. /package/dist/{client → transaction/auth}/credentialEndpoint.js +0 -0
  508. /package/dist/{auth → transaction/auth}/credentialPolicy.d.ts +0 -0
  509. /package/dist/{auth → transaction/auth}/credentialPolicy.js +0 -0
  510. /package/dist/{auth → transaction/auth}/credentialSource.js +0 -0
  511. /package/dist/{client → transaction/auth}/hostedEndpoints.d.ts +0 -0
  512. /package/dist/{client → transaction/auth}/hostedEndpoints.js +0 -0
  513. /package/dist/{client → transaction}/persistence.d.ts +0 -0
  514. /package/dist/{client → transaction}/persistence.js +0 -0
  515. /package/dist/{client → transaction/resources}/functionalUpdate.d.ts +0 -0
  516. /package/dist/{client → transaction/resources}/functionalUpdate.js +0 -0
  517. /package/dist/{transactions → transaction/transactions/settlement}/idempotencyKey.d.ts +0 -0
  518. /package/dist/{transactions → transaction/transactions/settlement}/idempotencyKey.js +0 -0
  519. /package/dist/{client → transaction/transport}/httpTransport.d.ts +0 -0
  520. /package/dist/{types → transaction/types}/modelData.d.ts +0 -0
  521. /package/dist/{types → transaction/types}/modelData.js +0 -0
  522. /package/dist/{types → transaction/types}/participant.d.ts +0 -0
  523. /package/dist/{types → transaction/types}/participant.js +0 -0
  524. /package/dist/{types → transaction/types}/streams.js +0 -0
  525. /package/dist/{utils → transaction/utils}/asyncIterator.d.ts +0 -0
  526. /package/dist/{utils → transaction/utils}/asyncIterator.js +0 -0
  527. /package/dist/{wire → transaction/wire}/bootstrapReason.d.ts +0 -0
  528. /package/dist/{wire → transaction/wire}/bootstrapReason.js +0 -0
  529. /package/dist/{wire → transaction/wire}/protocol.d.ts +0 -0
  530. /package/dist/{wire → transaction/wire}/protocol.js +0 -0
  531. /package/dist/{wire → transaction/wire}/protocolVersion.d.ts +0 -0
  532. /package/dist/{wire → transaction/wire}/protocolVersion.js +0 -0
  533. /package/dist/transactions/{UnconfirmedWrites.d.ts → mutations/UnconfirmedWrites.d.ts} +0 -0
  534. /package/dist/transactions/{UnconfirmedWrites.js → mutations/UnconfirmedWrites.js} +0 -0
  535. /package/dist/transactions/{optimisticApply.js → mutations/optimisticApply.js} +0 -0
  536. /package/dist/{core → views}/ViewRegistry.js +0 -0
@@ -1,128 +0,0 @@
1
- /**
2
- * @abloatai/ablo/agent — Agent SDK helpers
3
- *
4
- * Two entry points depending on agent lifetime:
5
- *
6
- * ─────────────────────────────────────────────────────────────────────────
7
- * Long-lived agents (browser, daemon, persistent Node process)
8
- * ─────────────────────────────────────────────────────────────────────────
9
- * Use the unified `Ablo({...})` factory directly with `kind: 'agent'`.
10
- * The factory holds the WebSocket, reactive subscriptions, mutations, and
11
- * presence/claims — same surface as a browser user, just with a
12
- * server-issued capability token instead of session cookies.
13
- *
14
- * ```ts
15
- * import Ablo from '@abloatai/ablo';
16
- *
17
- * const ablo = Ablo({
18
- * schema,
19
- * url: 'wss://api.example.com',
20
- * organizationId,
21
- * kind: 'agent',
22
- * agentId: 'reviewer-bot',
23
- * capabilityToken: mintedToken,
24
- * syncGroups: [`org:${organizationId}`],
25
- * inMemory: true, // Node has no IndexedDB
26
- * });
27
- *
28
- * await ablo.ready();
29
- * for (const task of ablo.tasks.list({ where: { status: 'pending_review' } })) {
30
- * await ablo.tasks.update(task.id, { status: 'reviewed' });
31
- * }
32
- * ```
33
- *
34
- * For server-side caching across requests, use {@link Agent.session}
35
- * — it caches one engine per identity and refreshes capability tokens
36
- * before expiry.
37
- *
38
- * ─────────────────────────────────────────────────────────────────────────
39
- * Short-lived agents (queue consumer, serverless, API route)
40
- * ─────────────────────────────────────────────────────────────────────────
41
- * Use {@link Agent}. Stateless REST hooks that slot directly into
42
- * the Vercel AI SDK's `generateText` / `streamText`. No WebSocket. Ideal
43
- * for agent-worker jobs that process one task and exit.
44
- *
45
- * ```ts
46
- * import { generateText, tool, stepCountIs } from 'ai';
47
- * import { Agent } from '@abloatai/ablo/agent';
48
- *
49
- * const perception = new Agent({
50
- * syncServerUrl: 'http://localhost:8080',
51
- * agentId: job.id,
52
- * organizationId: job.organizationId,
53
- * syncGroups: [`org:${job.organizationId}`],
54
- * });
55
- *
56
- * await generateText({
57
- * model: 'anthropic/claude-sonnet-4.5',
58
- * messages,
59
- * stopWhen: stepCountIs(10),
60
- * tools: {
61
- * updateSlide: perception.wrapTool(tool({ ... }), {
62
- * entityType: 'Slide',
63
- * getEntityId: (args) => args.id,
64
- * }),
65
- * },
66
- * prepareStep: perception.prepareStep(),
67
- * onStepFinish: perception.onStepFinish(),
68
- * });
69
- * ```
70
- *
71
- * ─────────────────────────────────────────────────────────────────────────
72
- * Idiomatic tool pattern
73
- * ─────────────────────────────────────────────────────────────────────────
74
- * Tools are factory functions that pull ambient state from
75
- * `experimental_context`. The caller builds an {@link AgentContext} once
76
- * and passes it to `generateText`; every tool reaches in.
77
- *
78
- * ```ts
79
- * import { tool } from 'ai';
80
- * import { z } from 'zod';
81
- * import { Agent, type AgentContext } from '@abloatai/ablo/agent';
82
- *
83
- * export const updateSlideTool = () => tool({
84
- * description: 'Update a slide title',
85
- * inputSchema: z.object({ id: z.string(), title: z.string() }),
86
- * execute: async (args, { experimental_context }) => {
87
- * const perception = Agent.fromContext(experimental_context, 'updateSlide');
88
- * const check = await perception.checkFreshness('Slide', args.id, Date.now() - 5000);
89
- * if (check.stale) return check.summary;
90
- * return { ok: true };
91
- * },
92
- * });
93
- * ```
94
- *
95
- * ─────────────────────────────────────────────────────────────────────────
96
- * Composed usage (a long-lived `Ablo({kind:'agent'})` plus an Agent)
97
- * ─────────────────────────────────────────────────────────────────────────
98
- * If you have a long-lived `Ablo` instance AND want AI SDK hooks, pass it
99
- * as the `announcer` to Agent — presence announcements route
100
- * through the existing WebSocket instead of opening new HTTP calls.
101
- *
102
- * ```ts
103
- * const ablo = Ablo({ kind: 'agent', schema, capabilityToken, ... });
104
- * await ablo.ready();
105
- *
106
- * const perception = new Agent({
107
- * ...sharedConfig,
108
- * announcer: ablo, // reuse the WebSocket
109
- * });
110
- * ```
111
- *
112
- * Both `Ablo` and `Agent` implement the
113
- * {@link PresenceAnnouncer} interface.
114
- */
115
- // ── The entire `/agent` surface — one symbol ────────────────────────────
116
- //
117
- // `Agent` is both the class and the namespace for its types. Reach for
118
- // options, context, and session options via dot access:
119
- //
120
- // import { Agent } from '@abloatai/ablo/agent';
121
- // const opts: Agent.Options = { ... };
122
- // const ctx: Agent.Context = { perception };
123
- // const s: Agent.SessionOptions = { ... };
124
- //
125
- // Everything else (Activity, Claim, Peer, ActiveClaim, ...)
126
- // lives on the `Ablo.*` namespace via
127
- // `import type { Ablo } from '@abloatai/ablo'`.
128
- export { Agent } from './Agent.js';
@@ -1,93 +0,0 @@
1
- /**
2
- * Caches and manages the lifecycle of long-lived agent connections on a server.
3
- *
4
- * Server code that runs AI agents typically needs the same four things, and this
5
- * module handles all of them:
6
- * 1. Reuse one connected agent per (organization, user, surface, target)
7
- * instead of connecting anew on every request.
8
- * 2. Re-issue the agent's capability token before it expires.
9
- * 3. Request exactly the sync groups the token allows, so the two lists
10
- * overlap. If they don't, the agent subscribes to nothing and every
11
- * broadcast is silently filtered out.
12
- * 4. Connect, disconnect, and dispose cleanly.
13
- *
14
- * Everything except obtaining the token is the same for every caller and lives
15
- * here. Obtaining the token depends on how you authenticate — cookie forwarding,
16
- * API-key exchange, OAuth, and so on — so you supply that step through the
17
- * {@link AgentSessionOptions.issueToken} callback. The module itself depends on
18
- * nothing outside this package.
19
- */
20
- import { Ablo } from '../client/Ablo.js';
21
- import type { Schema, SchemaRecord } from '../schema/schema.js';
22
- interface IssuedToken {
23
- readonly token: string;
24
- readonly expiresAtMs: number;
25
- /**
26
- * The sync groups this token grants access to. It must include every group the
27
- * agent needs to subscribe to. The agent's effective subscription is the
28
- * overlap between the groups it requests and the groups listed here, so a list
29
- * that omits a needed group leaves the agent subscribed to nothing and silently
30
- * receiving no broadcasts.
31
- */
32
- readonly syncGroups: readonly string[];
33
- }
34
- interface AgentIdentity {
35
- readonly userId: string;
36
- readonly organizationId: string;
37
- /**
38
- * The kind of surface making the request, such as `'chat'`, `'mcp'`, or
39
- * `'agent_worker'`. The cache keys on this value, so two surfaces never share a
40
- * token or a WebSocket connection.
41
- */
42
- readonly surfaceClass: string;
43
- readonly target?: {
44
- readonly entityType: string;
45
- readonly entityId: string;
46
- } | null;
47
- }
48
- export interface AgentSessionOptions<R extends SchemaRecord = SchemaRecord> {
49
- /** WebSocket URL of your sync server, such as `wss://sync.example.com` or `ws://localhost:3001`. */
50
- readonly syncServerUrl: string;
51
- /**
52
- * Your schema, used to build the typed model proxy on the returned client. The
53
- * agent client exposes it as `agent.<model>.create/update/delete`.
54
- */
55
- readonly schema: Schema<R>;
56
- /**
57
- * Issues a capability token for the given identity. The session calls it on a
58
- * cache miss or when the current token is near expiry. Because this callback
59
- * carries out your authentication flow — cookie forwarding, API-key exchange,
60
- * OAuth, and so on — the rest of the session stays independent of how you
61
- * authenticate.
62
- */
63
- readonly issueToken: (identity: AgentIdentity) => Promise<IssuedToken>;
64
- /**
65
- * How long before a token's true expiry the session should re-issue it, in
66
- * milliseconds. Defaults to 30 seconds. The buffer absorbs clock skew so a
67
- * token never expires mid-use.
68
- */
69
- readonly reissueBufferMs?: number;
70
- /**
71
- * How to derive the agent's identifier from the request identity. Defaults to
72
- * `${surfaceClass}:${userId}`. Override it when you want a different shape for
73
- * attribution.
74
- */
75
- readonly agentIdFor?: (identity: AgentIdentity) => string;
76
- }
77
- /**
78
- * Creates a session that hands out connected agents on demand. Its `getAgent`
79
- * method handles caching, token issuance, sync-group alignment, and connection
80
- * lifecycle; call `disposeAll` from your process's shutdown hook to close every
81
- * open connection.
82
- *
83
- * Treat the session as a long-lived singleton shared across requests. The cache
84
- * key combines organization, user, surface, and target, so two concurrent
85
- * requests for the same combination share one agent and one WebSocket, while
86
- * requests for different combinations get independent agents.
87
- */
88
- export declare function createAgentSession<R extends SchemaRecord = SchemaRecord>(options: AgentSessionOptions<R>): {
89
- getAgent: (identity: AgentIdentity) => Promise<Ablo<R>>;
90
- evict: (identity: AgentIdentity) => void;
91
- disposeAll: () => void;
92
- };
93
- export {};
@@ -1,149 +0,0 @@
1
- /**
2
- * Caches and manages the lifecycle of long-lived agent connections on a server.
3
- *
4
- * Server code that runs AI agents typically needs the same four things, and this
5
- * module handles all of them:
6
- * 1. Reuse one connected agent per (organization, user, surface, target)
7
- * instead of connecting anew on every request.
8
- * 2. Re-issue the agent's capability token before it expires.
9
- * 3. Request exactly the sync groups the token allows, so the two lists
10
- * overlap. If they don't, the agent subscribes to nothing and every
11
- * broadcast is silently filtered out.
12
- * 4. Connect, disconnect, and dispose cleanly.
13
- *
14
- * Everything except obtaining the token is the same for every caller and lives
15
- * here. Obtaining the token depends on how you authenticate — cookie forwarding,
16
- * API-key exchange, OAuth, and so on — so you supply that step through the
17
- * {@link AgentSessionOptions.issueToken} callback. The module itself depends on
18
- * nothing outside this package.
19
- */
20
- import { Ablo } from '../client/Ablo.js';
21
- import { AbloConnectionError } from '../errors.js';
22
- import { getContext } from '../context.js';
23
- /**
24
- * Creates a session that hands out connected agents on demand. Its `getAgent`
25
- * method handles caching, token issuance, sync-group alignment, and connection
26
- * lifecycle; call `disposeAll` from your process's shutdown hook to close every
27
- * open connection.
28
- *
29
- * Treat the session as a long-lived singleton shared across requests. The cache
30
- * key combines organization, user, surface, and target, so two concurrent
31
- * requests for the same combination share one agent and one WebSocket, while
32
- * requests for different combinations get independent agents.
33
- */
34
- export function createAgentSession(options) {
35
- const reissueBufferMs = options.reissueBufferMs ?? 30_000;
36
- const agentIdFor = options.agentIdFor ??
37
- ((id) => `${id.surfaceClass}:${id.userId}`);
38
- const cacheByKey = new Map();
39
- function cacheKey(id) {
40
- const targetSeg = id.target
41
- ? `:${id.target.entityType}:${id.target.entityId}`
42
- : '';
43
- return `${id.organizationId}:${id.userId}:${id.surfaceClass}${targetSeg}`;
44
- }
45
- async function getAgent(identity) {
46
- const key = cacheKey(identity);
47
- const cached = cacheByKey.get(key);
48
- if (cached && cached.expiresAtMs - Date.now() > reissueBufferMs) {
49
- return cached.agent;
50
- }
51
- // Best-effort cleanup of stale agent — don't let a stuck cached
52
- // entry block fresh issuance.
53
- if (cached) {
54
- try {
55
- await cached.agent.dispose();
56
- }
57
- catch {
58
- /* ignore */
59
- }
60
- }
61
- const minted = await options.issueToken(identity);
62
- // Request the same sync groups the token grants. The groups requested here
63
- // and the groups the token allows must overlap; otherwise their intersection
64
- // is empty and every broadcast is filtered out. The token's allowed list is
65
- // exactly what to request, since the caller decided what went into it.
66
- //
67
- // Pass the URL as `baseURL`, the field the client reads. Any other field name
68
- // is ignored, in which case the client would fall back to its default host,
69
- // so `baseURL` keeps the caller's URL the single source of truth.
70
- const wsUrl = toWsUrl(options.syncServerUrl);
71
- const agentOptions = {
72
- baseURL: wsUrl,
73
- schema: options.schema,
74
- kind: 'agent',
75
- capabilityToken: minted.token,
76
- agentId: agentIdFor(identity),
77
- organizationId: identity.organizationId,
78
- syncGroups: [...minted.syncGroups],
79
- // Agents run in Node — no IDB available, no need for it.
80
- inMemory: true,
81
- };
82
- const agent = Ablo(agentOptions);
83
- try {
84
- await agent.ready();
85
- }
86
- catch (err) {
87
- const e = err;
88
- const code = e.cause?.code;
89
- const causeMsg = e.cause?.message;
90
- // Best-effort dispose so the failed agent doesn't leak ws state.
91
- try {
92
- await agent.dispose();
93
- }
94
- catch { /* ignore */ }
95
- // Log through the level-gated logger so it honors ABLO_LOG_LEVEL: an
96
- // `error` headline naming the unreachable URL and code, plus a `debug`
97
- // companion carrying the structured fields for deeper diagnosis.
98
- const log = getContext().logger;
99
- log.error(`Agent could not connect to the sync server at ${wsUrl}${code ? ` (${code})` : ''}.`);
100
- log.debug('[Agent.session] ws bootstrap failed', {
101
- url: wsUrl,
102
- surfaceClass: identity.surfaceClass,
103
- orgId: identity.organizationId,
104
- userId: identity.userId,
105
- code,
106
- causeMsg,
107
- err,
108
- });
109
- throw new AbloConnectionError(`ws bootstrap ${wsUrl} failed: ${e.message ?? 'bootstrap failed'}` +
110
- (code ? ` (${code})` : ''), { code: 'bootstrap_fetch_timeout', cause: err });
111
- }
112
- cacheByKey.set(key, { agent, expiresAtMs: minted.expiresAtMs });
113
- return agent;
114
- }
115
- function disposeAll() {
116
- for (const { agent } of cacheByKey.values()) {
117
- try {
118
- void agent.dispose();
119
- }
120
- catch {
121
- /* ignore */
122
- }
123
- }
124
- cacheByKey.clear();
125
- }
126
- /**
127
- * Removes and disposes one cached agent. Call it when you know the agent's
128
- * token is no longer valid — after a revocation or role change, for example —
129
- * so the next `getAgent` call issues a fresh one.
130
- */
131
- function evict(identity) {
132
- const key = cacheKey(identity);
133
- const cached = cacheByKey.get(key);
134
- if (cached) {
135
- try {
136
- void cached.agent.dispose();
137
- }
138
- catch {
139
- /* ignore */
140
- }
141
- cacheByKey.delete(key);
142
- }
143
- }
144
- return { getAgent, evict, disposeAll };
145
- }
146
- /** `https://host` → `wss://host`; `http://host` → `ws://host`. */
147
- function toWsUrl(url) {
148
- return url.replace(/^http/, 'ws');
149
- }
@@ -1,68 +0,0 @@
1
- /**
2
- * Types specific to running AI agents. The shared data vocabulary — `Peer`,
3
- * {@link Activity}, `Claim`, `ActiveClaim`, `PresenceUpdatePayload`, and
4
- * `PresenceKind` — lives in the streams module. This file adds only the two
5
- * pieces the agent layer needs on top of it: {@link PresenceAnnouncer}, a
6
- * transport-agnostic way to announce presence, and {@link AgentContext}, the bag
7
- * of ambient state passed to AI SDK tools.
8
- */
9
- import type { Activity } from '../types/streams.js';
10
- /**
11
- * A minimal interface for announcing an agent's presence, independent of how it
12
- * connects. Both the WebSocket-based agent client and the REST-based agent
13
- * implement it, so higher-level code can depend on this interface without caring
14
- * which transport is in use.
15
- */
16
- export interface PresenceAnnouncer {
17
- announce(status: 'online' | 'away' | 'offline', activity?: Activity): Promise<void>;
18
- }
19
- /**
20
- * The ambient state passed to AI SDK tools through the AI SDK's
21
- * `experimental_context`. Build one {@link AgentContext} per agent invocation and
22
- * pass it as `experimental_context`; each tool's `execute` function then reads
23
- * what it needs from `options.experimental_context` rather than closing over
24
- * shared module state.
25
- *
26
- * Passing context this way, rather than capturing it in each tool's closure,
27
- * keeps tools as plain module exports that any agent can reuse, types the context
28
- * in one place, and lets a new tool read any field without changing its
29
- * signature.
30
- *
31
- * ```ts
32
- * import { generateText, tool } from 'ai';
33
- * import { Agent, type AgentContext } from '@abloatai/ablo/agent';
34
- *
35
- * const updateSlideTool = () => tool({
36
- * inputSchema: z.object({ id: z.string(), title: z.string() }),
37
- * execute: async (args, { experimental_context }) => {
38
- * const perception = Agent.fromContext(experimental_context);
39
- * const check = await perception.checkFreshness('Slide', args.id, Date.now() - 5000);
40
- * if (check.stale) return check.summary;
41
- * // ... actual mutation
42
- * },
43
- * });
44
- *
45
- * await generateText({
46
- * model: 'anthropic/claude-sonnet-4.5',
47
- * tools: { updateSlide: updateSlideTool() },
48
- * experimental_context: { perception, organizationId, userId } satisfies AgentContext,
49
- * });
50
- * ```
51
- *
52
- * Extend {@link AgentContext} with your own fields through module augmentation or
53
- * by intersecting it with your own context type.
54
- */
55
- export interface AgentContext {
56
- /** Announces presence and checks whether an entity has changed since a given time. Required. */
57
- perception: PresenceAnnouncer & {
58
- checkFreshness?: (entityType: string, entityId: string, lastSeenAt: number) => Promise<unknown>;
59
- };
60
- /** The organization every operation is scoped to. */
61
- organizationId?: string;
62
- /** Identifier for the user or agent. Agents use the form `agent:<id>`. */
63
- userId?: string;
64
- /** The sync groups this agent belongs to. */
65
- syncGroups?: string[];
66
- /** Room for your own product-specific fields. */
67
- [key: string]: unknown;
68
- }
@@ -1,9 +0,0 @@
1
- /**
2
- * Types specific to running AI agents. The shared data vocabulary — `Peer`,
3
- * {@link Activity}, `Claim`, `ActiveClaim`, `PresenceUpdatePayload`, and
4
- * `PresenceKind` — lives in the streams module. This file adds only the two
5
- * pieces the agent layer needs on top of it: {@link PresenceAnnouncer}, a
6
- * transport-agnostic way to announce presence, and {@link AgentContext}, the bag
7
- * of ambient state passed to AI SDK tools.
8
- */
9
- export {};