@abloatai/ablo 0.26.0 → 0.28.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (418) hide show
  1. package/CHANGELOG.md +42 -2
  2. package/README.md +102 -86
  3. package/dist/BaseSyncedStore.d.ts +85 -88
  4. package/dist/BaseSyncedStore.js +134 -151
  5. package/dist/Database.d.ts +68 -69
  6. package/dist/Database.js +316 -135
  7. package/dist/{ObjectPool.d.ts → InstanceCache.d.ts} +10 -13
  8. package/dist/{ObjectPool.js → InstanceCache.js} +85 -83
  9. package/dist/LazyReferenceCollection.d.ts +11 -15
  10. package/dist/LazyReferenceCollection.js +12 -16
  11. package/dist/Model.d.ts +54 -52
  12. package/dist/Model.js +78 -62
  13. package/dist/ModelRegistry.d.ts +21 -19
  14. package/dist/ModelRegistry.js +23 -27
  15. package/dist/NetworkMonitor.d.ts +5 -6
  16. package/dist/NetworkMonitor.js +5 -6
  17. package/dist/SyncClient.d.ts +122 -118
  18. package/dist/SyncClient.js +541 -245
  19. package/dist/adapters/alwaysOnline.d.ts +6 -8
  20. package/dist/adapters/alwaysOnline.js +6 -8
  21. package/dist/adapters/inMemoryStorage.d.ts +10 -9
  22. package/dist/adapters/inMemoryStorage.js +21 -9
  23. package/dist/agent/Agent.d.ts +27 -32
  24. package/dist/agent/Agent.js +18 -19
  25. package/dist/agent/index.d.ts +4 -4
  26. package/dist/agent/index.js +5 -5
  27. package/dist/agent/session.d.ts +47 -44
  28. package/dist/agent/session.js +37 -48
  29. package/dist/agent/types.d.ts +26 -31
  30. package/dist/agent/types.js +6 -7
  31. package/dist/ai-sdk/coordinatedTool.d.ts +108 -0
  32. package/dist/ai-sdk/{coordinated-tool.js → coordinatedTool.js} +44 -38
  33. package/dist/ai-sdk/coordinationContext.d.ts +46 -0
  34. package/dist/ai-sdk/{coordination-context.js → coordinationContext.js} +26 -33
  35. package/dist/ai-sdk/index.d.ts +25 -22
  36. package/dist/ai-sdk/index.js +25 -22
  37. package/dist/ai-sdk/wrap.d.ts +6 -7
  38. package/dist/ai-sdk/wrap.js +1 -1
  39. package/dist/auth/credentialPolicy.d.ts +69 -74
  40. package/dist/auth/credentialPolicy.js +51 -56
  41. package/dist/auth/credentialSource.d.ts +6 -5
  42. package/dist/auth/credentialSource.js +9 -10
  43. package/dist/auth/index.d.ts +59 -58
  44. package/dist/auth/index.js +31 -37
  45. package/dist/auth/schemas.d.ts +5 -4
  46. package/dist/auth/schemas.js +5 -4
  47. package/dist/batching/index.d.ts +19 -21
  48. package/dist/batching/index.js +14 -17
  49. package/dist/cli.cjs +173 -121
  50. package/dist/client/Ablo.d.ts +97 -74
  51. package/dist/client/Ablo.js +129 -163
  52. package/dist/client/ApiClient.d.ts +30 -19
  53. package/dist/client/ApiClient.js +442 -81
  54. package/dist/client/auth.d.ts +47 -47
  55. package/dist/client/auth.js +108 -117
  56. package/dist/client/claimHeartbeatLoop.d.ts +50 -0
  57. package/dist/client/claimHeartbeatLoop.js +88 -0
  58. package/dist/client/consoleLogger.d.ts +5 -6
  59. package/dist/client/consoleLogger.js +5 -6
  60. package/dist/client/createInternalComponents.d.ts +16 -17
  61. package/dist/client/createInternalComponents.js +26 -31
  62. package/dist/client/createModelProxy.d.ts +130 -120
  63. package/dist/client/createModelProxy.js +152 -122
  64. package/dist/client/credentialEndpoint.d.ts +40 -42
  65. package/dist/client/credentialEndpoint.js +35 -36
  66. package/dist/client/functionalUpdate.d.ts +29 -27
  67. package/dist/client/functionalUpdate.js +21 -21
  68. package/dist/client/hostedEndpoints.d.ts +9 -12
  69. package/dist/client/hostedEndpoints.js +9 -12
  70. package/dist/client/httpClient.d.ts +59 -53
  71. package/dist/client/httpClient.js +29 -31
  72. package/dist/client/identity.d.ts +15 -20
  73. package/dist/client/identity.js +47 -58
  74. package/dist/client/modelRegistration.d.ts +5 -9
  75. package/dist/client/modelRegistration.js +78 -87
  76. package/dist/client/options.d.ts +157 -157
  77. package/dist/client/options.js +3 -7
  78. package/dist/client/registerDataSource.d.ts +9 -9
  79. package/dist/client/registerDataSource.js +15 -16
  80. package/dist/client/resourceTypes.d.ts +64 -75
  81. package/dist/client/resourceTypes.js +4 -10
  82. package/dist/client/schemaConfig.d.ts +31 -43
  83. package/dist/client/schemaConfig.js +38 -50
  84. package/dist/client/sessionMint.d.ts +16 -12
  85. package/dist/client/sessionMint.js +26 -31
  86. package/dist/client/validateAbloOptions.d.ts +12 -14
  87. package/dist/client/validateAbloOptions.js +8 -9
  88. package/dist/client/writeOptionsSchema.d.ts +18 -16
  89. package/dist/client/writeOptionsSchema.js +23 -20
  90. package/dist/client/wsMutationExecutor.d.ts +16 -20
  91. package/dist/client/wsMutationExecutor.js +18 -23
  92. package/dist/commit/contract.d.ts +493 -0
  93. package/dist/commit/contract.js +187 -0
  94. package/dist/commit/index.d.ts +6 -0
  95. package/dist/commit/index.js +5 -0
  96. package/dist/context.d.ts +6 -4
  97. package/dist/context.js +6 -4
  98. package/dist/coordination/index.d.ts +10 -8
  99. package/dist/coordination/index.js +14 -12
  100. package/dist/coordination/schema.d.ts +176 -128
  101. package/dist/coordination/schema.js +197 -133
  102. package/dist/coordination/trace.d.ts +9 -10
  103. package/dist/coordination/trace.js +13 -14
  104. package/dist/core/DatabaseManager.d.ts +5 -7
  105. package/dist/core/DatabaseManager.js +15 -19
  106. package/dist/core/QueryProcessor.d.ts +7 -9
  107. package/dist/core/QueryProcessor.js +22 -28
  108. package/dist/core/QueryView.d.ts +8 -8
  109. package/dist/core/QueryView.js +2 -2
  110. package/dist/core/StoreManager.d.ts +14 -14
  111. package/dist/core/StoreManager.js +33 -24
  112. package/dist/core/ViewRegistry.d.ts +5 -5
  113. package/dist/core/ViewRegistry.js +4 -4
  114. package/dist/core/index.d.ts +17 -12
  115. package/dist/core/index.js +32 -26
  116. package/dist/core/openIDBWithTimeout.d.ts +38 -36
  117. package/dist/core/openIDBWithTimeout.js +42 -43
  118. package/dist/core/queryUtils.d.ts +45 -0
  119. package/dist/core/queryUtils.js +69 -0
  120. package/dist/core/storeContract.d.ts +63 -61
  121. package/dist/core/storeContract.js +8 -12
  122. package/dist/environment.d.ts +28 -0
  123. package/dist/environment.js +21 -0
  124. package/dist/errorCodes.d.ts +107 -99
  125. package/dist/errorCodes.js +137 -134
  126. package/dist/errors.d.ts +160 -166
  127. package/dist/errors.js +155 -158
  128. package/dist/index.d.ts +36 -27
  129. package/dist/index.js +91 -86
  130. package/dist/interfaces/index.d.ts +102 -113
  131. package/dist/interfaces/index.js +5 -4
  132. package/dist/keys/index.d.ts +27 -29
  133. package/dist/keys/index.js +41 -40
  134. package/dist/mutators/RecordingTransaction.d.ts +16 -16
  135. package/dist/mutators/RecordingTransaction.js +31 -37
  136. package/dist/mutators/Transaction.d.ts +18 -26
  137. package/dist/mutators/Transaction.js +14 -20
  138. package/dist/mutators/UndoManager.d.ts +124 -131
  139. package/dist/mutators/UndoManager.js +177 -156
  140. package/dist/mutators/defineMutators.d.ts +23 -34
  141. package/dist/mutators/defineMutators.js +14 -20
  142. package/dist/mutators/inverseOp.d.ts +12 -15
  143. package/dist/mutators/inverseOp.js +12 -15
  144. package/dist/mutators/mutateActions.d.ts +10 -9
  145. package/dist/mutators/mutateActions.js +1 -1
  146. package/dist/mutators/readerActions.d.ts +9 -8
  147. package/dist/mutators/readerActions.js +2 -2
  148. package/dist/mutators/undoApply.d.ts +31 -27
  149. package/dist/mutators/undoApply.js +26 -24
  150. package/dist/policy/index.d.ts +5 -3
  151. package/dist/policy/index.js +5 -3
  152. package/dist/policy/types.d.ts +104 -100
  153. package/dist/policy/types.js +67 -66
  154. package/dist/query/client.d.ts +28 -23
  155. package/dist/query/client.js +45 -43
  156. package/dist/query/types.d.ts +37 -60
  157. package/dist/query/types.js +13 -33
  158. package/dist/react/AbloProvider.d.ts +1 -1
  159. package/dist/react/AbloProvider.js +2 -2
  160. package/dist/react/context.d.ts +25 -28
  161. package/dist/react/context.js +9 -10
  162. package/dist/react/index.d.ts +41 -42
  163. package/dist/react/index.js +37 -38
  164. package/dist/react/internalContext.d.ts +17 -19
  165. package/dist/react/useAblo.d.ts +28 -25
  166. package/dist/react/useAblo.js +41 -17
  167. package/dist/react/useCurrentUserId.d.ts +8 -7
  168. package/dist/react/useCurrentUserId.js +8 -7
  169. package/dist/react/useErrorListener.d.ts +7 -7
  170. package/dist/react/useErrorListener.js +10 -11
  171. package/dist/react/useMutationFailureListener.d.ts +8 -8
  172. package/dist/react/useMutationFailureListener.js +8 -8
  173. package/dist/react/useMutators.d.ts +11 -11
  174. package/dist/react/useMutators.js +3 -3
  175. package/dist/react/useReactive.js +2 -2
  176. package/dist/react/useSyncStatus.d.ts +4 -6
  177. package/dist/react/useUndoScope.d.ts +7 -9
  178. package/dist/react/useUndoScope.js +1 -1
  179. package/dist/schema/coordination.d.ts +21 -25
  180. package/dist/schema/coordination.js +21 -25
  181. package/dist/schema/ddl.d.ts +43 -39
  182. package/dist/schema/ddl.js +75 -68
  183. package/dist/schema/ddlLock.d.ts +20 -24
  184. package/dist/schema/ddlLock.js +18 -23
  185. package/dist/schema/diff.d.ts +99 -61
  186. package/dist/schema/diff.js +43 -34
  187. package/dist/schema/field.d.ts +37 -42
  188. package/dist/schema/field.js +35 -48
  189. package/dist/schema/generate.d.ts +12 -12
  190. package/dist/schema/generate.js +12 -12
  191. package/dist/schema/index.d.ts +3 -3
  192. package/dist/schema/index.js +21 -23
  193. package/dist/schema/model.d.ts +118 -143
  194. package/dist/schema/model.js +22 -33
  195. package/dist/schema/openapi.d.ts +10 -9
  196. package/dist/schema/openapi.js +5 -3
  197. package/dist/schema/queries.d.ts +29 -31
  198. package/dist/schema/queries.js +23 -25
  199. package/dist/schema/relation.d.ts +89 -99
  200. package/dist/schema/relation.js +13 -13
  201. package/dist/schema/residency.d.ts +16 -13
  202. package/dist/schema/residency.js +16 -13
  203. package/dist/schema/roles.d.ts +36 -43
  204. package/dist/schema/roles.js +31 -37
  205. package/dist/schema/schema.d.ts +64 -43
  206. package/dist/schema/schema.js +31 -32
  207. package/dist/schema/select.d.ts +13 -13
  208. package/dist/schema/select.js +13 -13
  209. package/dist/schema/serialize.d.ts +28 -31
  210. package/dist/schema/serialize.js +27 -31
  211. package/dist/schema/sugar.d.ts +17 -32
  212. package/dist/schema/sugar.js +14 -29
  213. package/dist/schema/{sync-delta-row.d.ts → syncDeltaRow.d.ts} +26 -49
  214. package/dist/schema/syncDeltaRow.js +89 -0
  215. package/dist/schema/tenancy.d.ts +44 -46
  216. package/dist/schema/tenancy.js +46 -48
  217. package/dist/server/adapter.d.ts +58 -58
  218. package/dist/server/adapter.js +13 -14
  219. package/dist/server/commit.d.ts +60 -64
  220. package/dist/server/index.d.ts +9 -10
  221. package/dist/server/index.js +1 -1
  222. package/dist/server/readConfig.d.ts +70 -0
  223. package/dist/server/readConfig.js +8 -0
  224. package/dist/server/storageMode.d.ts +23 -0
  225. package/dist/server/storageMode.js +17 -0
  226. package/dist/source/adapter.d.ts +30 -25
  227. package/dist/source/adapter.js +10 -10
  228. package/dist/source/adapters/drizzle.d.ts +28 -23
  229. package/dist/source/adapters/drizzle.js +30 -25
  230. package/dist/source/adapters/kysely.d.ts +27 -25
  231. package/dist/source/adapters/kysely.js +24 -23
  232. package/dist/source/adapters/memory.d.ts +8 -7
  233. package/dist/source/adapters/memory.js +9 -8
  234. package/dist/source/adapters/prisma.d.ts +13 -12
  235. package/dist/source/adapters/prisma.js +22 -25
  236. package/dist/source/conformance.d.ts +18 -11
  237. package/dist/source/conformance.js +17 -11
  238. package/dist/source/connector.d.ts +31 -32
  239. package/dist/source/connector.js +28 -28
  240. package/dist/source/connectorProtocol.d.ts +160 -0
  241. package/dist/source/connectorProtocol.js +162 -0
  242. package/dist/source/contract.d.ts +26 -27
  243. package/dist/source/contract.js +28 -29
  244. package/dist/source/factory.d.ts +46 -58
  245. package/dist/source/factory.js +22 -27
  246. package/dist/source/index.d.ts +7 -9
  247. package/dist/source/index.js +12 -14
  248. package/dist/source/migrations.d.ts +9 -9
  249. package/dist/source/migrations.js +9 -9
  250. package/dist/source/next.d.ts +9 -10
  251. package/dist/source/next.js +6 -7
  252. package/dist/source/pushQueue.d.ts +69 -47
  253. package/dist/source/pushQueue.js +32 -28
  254. package/dist/source/signing.d.ts +46 -17
  255. package/dist/source/signing.js +28 -11
  256. package/dist/source/types.d.ts +121 -104
  257. package/dist/source/types.js +13 -14
  258. package/dist/stores/ObjectStore.d.ts +24 -12
  259. package/dist/stores/ObjectStore.js +38 -16
  260. package/dist/stores/ObjectStoreContract.d.ts +14 -15
  261. package/dist/stores/SyncActionStore.d.ts +7 -11
  262. package/dist/stores/SyncActionStore.js +13 -17
  263. package/dist/surface.d.ts +28 -21
  264. package/dist/surface.js +29 -20
  265. package/dist/sync/{BootstrapHelper.d.ts → BootstrapFetcher.d.ts} +36 -42
  266. package/dist/sync/{BootstrapHelper.js → BootstrapFetcher.js} +76 -76
  267. package/dist/sync/ConnectionManager.d.ts +39 -50
  268. package/dist/sync/ConnectionManager.js +55 -66
  269. package/dist/sync/NetworkProbe.d.ts +24 -29
  270. package/dist/sync/NetworkProbe.js +63 -69
  271. package/dist/sync/{HydrationCoordinator.d.ts → OnDemandLoader.d.ts} +42 -41
  272. package/dist/sync/{HydrationCoordinator.js → OnDemandLoader.js} +59 -54
  273. package/dist/sync/{AreaOfInterestManager.d.ts → SubscriptionManager.d.ts} +43 -57
  274. package/dist/sync/{AreaOfInterestManager.js → SubscriptionManager.js} +43 -51
  275. package/dist/sync/SyncWebSocket.d.ts +141 -166
  276. package/dist/sync/SyncWebSocket.js +191 -223
  277. package/dist/sync/awaitClaimGrant.d.ts +18 -18
  278. package/dist/sync/awaitClaimGrant.js +11 -11
  279. package/dist/sync/bootstrapApply.d.ts +34 -24
  280. package/dist/sync/bootstrapApply.js +27 -19
  281. package/dist/sync/commitFrames.d.ts +21 -20
  282. package/dist/sync/commitFrames.js +18 -18
  283. package/dist/sync/createClaimStream.d.ts +23 -22
  284. package/dist/sync/createClaimStream.js +105 -23
  285. package/dist/sync/createPresenceStream.d.ts +19 -18
  286. package/dist/sync/createPresenceStream.js +25 -26
  287. package/dist/sync/createSnapshot.d.ts +12 -14
  288. package/dist/sync/createSnapshot.js +20 -26
  289. package/dist/sync/credentialLifecycle.d.ts +104 -104
  290. package/dist/sync/credentialLifecycle.js +140 -147
  291. package/dist/sync/deltaPipeline.d.ts +36 -34
  292. package/dist/sync/deltaPipeline.js +64 -65
  293. package/dist/sync/groupChange.d.ts +63 -61
  294. package/dist/sync/groupChange.js +74 -78
  295. package/dist/sync/heartbeat.d.ts +34 -33
  296. package/dist/sync/heartbeat.js +31 -31
  297. package/dist/sync/participants.d.ts +19 -19
  298. package/dist/sync/persistedPrefix.d.ts +12 -0
  299. package/dist/sync/persistedPrefix.js +22 -0
  300. package/dist/sync/schemas.d.ts +3 -2
  301. package/dist/sync/schemas.js +14 -10
  302. package/dist/sync/syncCursor.d.ts +17 -21
  303. package/dist/sync/syncCursor.js +17 -21
  304. package/dist/sync/syncPlan.d.ts +28 -36
  305. package/dist/sync/syncPlan.js +18 -19
  306. package/dist/sync/syncPosition.d.ts +54 -49
  307. package/dist/sync/syncPosition.js +57 -52
  308. package/dist/sync/wsFrameHandlers.d.ts +35 -36
  309. package/dist/sync/wsFrameHandlers.js +63 -67
  310. package/dist/testing/fixtures/bootstrap.d.ts +12 -6
  311. package/dist/testing/fixtures/bootstrap.js +12 -6
  312. package/dist/testing/fixtures/deltas.d.ts +30 -33
  313. package/dist/testing/fixtures/deltas.js +30 -33
  314. package/dist/testing/fixtures/models.d.ts +11 -10
  315. package/dist/testing/fixtures/models.js +11 -10
  316. package/dist/testing/helpers/{react-wrapper.d.ts → reactWrapper.d.ts} +13 -10
  317. package/dist/testing/helpers/{react-wrapper.js → reactWrapper.js} +15 -12
  318. package/dist/testing/helpers/{sync-engine-harness.d.ts → syncEngineHarness.d.ts} +17 -15
  319. package/dist/testing/helpers/{sync-engine-harness.js → syncEngineHarness.js} +12 -10
  320. package/dist/testing/helpers/wait.d.ts +13 -8
  321. package/dist/testing/helpers/wait.js +13 -8
  322. package/dist/testing/index.d.ts +5 -3
  323. package/dist/testing/index.js +3 -2
  324. package/dist/testing/mocks/FakeDatabase.d.ts +18 -0
  325. package/dist/testing/mocks/FakeDatabase.js +10 -0
  326. package/dist/testing/mocks/MockMutationExecutor.d.ts +18 -17
  327. package/dist/testing/mocks/MockMutationExecutor.js +15 -14
  328. package/dist/testing/mocks/MockNetworkMonitor.d.ts +8 -8
  329. package/dist/testing/mocks/MockNetworkMonitor.js +8 -8
  330. package/dist/testing/mocks/MockSyncContext.d.ts +20 -17
  331. package/dist/testing/mocks/MockSyncContext.js +15 -13
  332. package/dist/testing/mocks/MockSyncStore.d.ts +10 -10
  333. package/dist/testing/mocks/MockSyncStore.js +11 -11
  334. package/dist/testing/mocks/MockWebSocket.d.ts +28 -23
  335. package/dist/testing/mocks/MockWebSocket.js +22 -21
  336. package/dist/transactions/TransactionQueue.d.ts +244 -181
  337. package/dist/transactions/TransactionQueue.js +929 -423
  338. package/dist/transactions/TransactionStore.d.ts +6 -4
  339. package/dist/transactions/TransactionStore.js +6 -4
  340. package/dist/transactions/UnconfirmedWrites.d.ts +82 -0
  341. package/dist/transactions/UnconfirmedWrites.js +104 -0
  342. package/dist/transactions/coalesceRules.d.ts +41 -17
  343. package/dist/transactions/coalesceRules.js +40 -17
  344. package/dist/transactions/commitEnvelope.d.ts +132 -0
  345. package/dist/transactions/commitEnvelope.js +139 -0
  346. package/dist/transactions/commitOutboxStore.d.ts +32 -0
  347. package/dist/transactions/commitOutboxStore.js +26 -0
  348. package/dist/transactions/commitPayload.d.ts +63 -52
  349. package/dist/transactions/commitPayload.js +54 -57
  350. package/dist/transactions/deltaConfirmation.d.ts +20 -22
  351. package/dist/transactions/deltaConfirmation.js +37 -45
  352. package/dist/transactions/httpCommitEnvelope.d.ts +43 -0
  353. package/dist/transactions/httpCommitEnvelope.js +179 -0
  354. package/dist/transactions/optimisticApply.d.ts +49 -0
  355. package/dist/transactions/optimisticApply.js +65 -0
  356. package/dist/transactions/replayValidation.d.ts +182 -0
  357. package/dist/transactions/replayValidation.js +156 -0
  358. package/dist/types/global.d.ts +46 -41
  359. package/dist/types/global.js +20 -19
  360. package/dist/types/index.d.ts +71 -77
  361. package/dist/types/index.js +22 -22
  362. package/dist/types/modelData.d.ts +6 -8
  363. package/dist/types/modelData.js +5 -7
  364. package/dist/types/participant.d.ts +10 -11
  365. package/dist/types/participant.js +6 -8
  366. package/dist/types/streams.d.ts +208 -195
  367. package/dist/types/streams.js +7 -7
  368. package/dist/utils/asyncIterator.d.ts +25 -32
  369. package/dist/utils/asyncIterator.js +25 -32
  370. package/dist/utils/duration.d.ts +12 -15
  371. package/dist/utils/duration.js +12 -15
  372. package/dist/utils/mobxSetup.d.ts +53 -0
  373. package/dist/utils/{mobx-setup.js → mobxSetup.js} +42 -98
  374. package/dist/webhooks/events.d.ts +21 -16
  375. package/dist/webhooks/events.js +10 -8
  376. package/dist/webhooks/index.d.ts +5 -7
  377. package/dist/webhooks/index.js +5 -7
  378. package/dist/wire/bootstrapReason.d.ts +9 -0
  379. package/dist/wire/bootstrapReason.js +8 -0
  380. package/dist/{schema/sync-delta-wire.d.ts → wire/delta.d.ts} +58 -41
  381. package/dist/wire/delta.js +114 -0
  382. package/dist/wire/errorEnvelope.d.ts +30 -31
  383. package/dist/wire/errorEnvelope.js +34 -40
  384. package/dist/wire/frames.d.ts +315 -86
  385. package/dist/wire/frames.js +47 -33
  386. package/dist/wire/index.d.ts +18 -14
  387. package/dist/wire/index.js +32 -27
  388. package/dist/wire/listEnvelope.d.ts +16 -23
  389. package/dist/wire/listEnvelope.js +7 -6
  390. package/dist/wire/protocol.d.ts +25 -32
  391. package/dist/wire/protocol.js +25 -32
  392. package/dist/wire/protocolVersion.d.ts +44 -40
  393. package/dist/wire/protocolVersion.js +44 -40
  394. package/docs/api.md +10 -10
  395. package/docs/coordination.md +59 -0
  396. package/docs/mcp.md +1 -1
  397. package/package.json +17 -11
  398. package/dist/ai-sdk/coordinated-tool.d.ts +0 -101
  399. package/dist/ai-sdk/coordination-context.d.ts +0 -52
  400. package/dist/core/query-utils.d.ts +0 -34
  401. package/dist/core/query-utils.js +0 -59
  402. package/dist/schema/sync-delta-row.js +0 -103
  403. package/dist/schema/sync-delta-wire.js +0 -102
  404. package/dist/server/read-config.d.ts +0 -67
  405. package/dist/server/read-config.js +0 -8
  406. package/dist/server/storage-mode.d.ts +0 -8
  407. package/dist/server/storage-mode.js +0 -28
  408. package/dist/source/connector-protocol.d.ts +0 -159
  409. package/dist/source/connector-protocol.js +0 -161
  410. package/dist/transactions/OptimisticEchoTracker.d.ts +0 -82
  411. package/dist/transactions/OptimisticEchoTracker.js +0 -104
  412. package/dist/transactions/mutation-error-handler.d.ts +0 -5
  413. package/dist/transactions/mutation-error-handler.js +0 -39
  414. package/dist/transactions/optimistic.d.ts +0 -24
  415. package/dist/transactions/optimistic.js +0 -45
  416. package/dist/transactions/persistedReplay.d.ts +0 -93
  417. package/dist/transactions/persistedReplay.js +0 -105
  418. package/dist/utils/mobx-setup.d.ts +0 -42
@@ -1,12 +1,10 @@
1
1
  /**
2
- * Always-online network provider for Node.js / agent / sidecar.
3
- *
4
- * The server IS the network it doesn't go offline. If the Postgres
5
- * connection drops, that's a database error, not a network error.
6
- * The "online/offline" concept only applies to browser clients that
7
- * can lose their WiFi connection.
8
- *
9
- * Implements OnlineStatusProvider (same interface as browserOnlineStatus).
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.
10
8
  */
11
9
  import type { OnlineStatusProvider } from '../interfaces/index.js';
12
10
  /**
@@ -1,12 +1,10 @@
1
1
  /**
2
- * Always-online network provider for Node.js / agent / sidecar.
3
- *
4
- * The server IS the network it doesn't go offline. If the Postgres
5
- * connection drops, that's a database error, not a network error.
6
- * The "online/offline" concept only applies to browser clients that
7
- * can lose their WiFi connection.
8
- *
9
- * Implements OnlineStatusProvider (same interface as browserOnlineStatus).
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.
10
8
  */
11
9
  /**
12
10
  * Returns an OnlineStatusProvider that always reports online.
@@ -1,14 +1,14 @@
1
1
  /**
2
- * In-memory storage adapter replaces IndexedDB for Node.js / agent / test.
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.
3
8
  *
4
- * Implements {@link ObjectStoreContract}, the shared surface that
5
- * IDB-backed `ObjectStore` also satisfies. Centralized contract so a
6
- * future drift between the two trips a typecheck error here, not
7
- * silently in a caller.
8
- *
9
- * No persistence — cleared on process restart. This is intentional:
10
- * the Node sync-server and agent workers get their state from the
11
- * server's delta stream, not from a local cache.
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
12
  */
13
13
  import type { ObjectStoreContract } from '../stores/ObjectStoreContract.js';
14
14
  export declare class InMemoryObjectStore implements ObjectStoreContract {
@@ -17,6 +17,7 @@ export declare class InMemoryObjectStore implements ObjectStoreContract {
17
17
  private data;
18
18
  private indexes;
19
19
  constructor(modelName: string, storeName: string, indexNames?: string[]);
20
+ add(record: Record<string, unknown>): Promise<void>;
20
21
  put(record: Record<string, unknown>): Promise<void>;
21
22
  get(id: string): Promise<Record<string, unknown> | undefined>;
22
23
  getAll(): Promise<Record<string, unknown>[]>;
@@ -1,14 +1,14 @@
1
1
  /**
2
- * In-memory storage adapter replaces IndexedDB for Node.js / agent / test.
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.
3
8
  *
4
- * Implements {@link ObjectStoreContract}, the shared surface that
5
- * IDB-backed `ObjectStore` also satisfies. Centralized contract so a
6
- * future drift between the two trips a typecheck error here, not
7
- * silently in a caller.
8
- *
9
- * No persistence — cleared on process restart. This is intentional:
10
- * the Node sync-server and agent workers get their state from the
11
- * server's delta stream, not from a local cache.
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
12
  */
13
13
  export class InMemoryObjectStore {
14
14
  modelName;
@@ -22,6 +22,18 @@ export class InMemoryObjectStore {
22
22
  this.indexes.set(name, new Map());
23
23
  }
24
24
  }
25
+ async 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
+ }
25
37
  async put(record) {
26
38
  const id = record.id;
27
39
  if (!id)
@@ -45,14 +45,11 @@ import { createAgentSession } from './session.js';
45
45
  export type { AgentContext } from './types.js';
46
46
  export type { WireClaim } from '../types/streams.js';
47
47
  /**
48
- * Shape returned by the sync server's REST `/api/presence` endpoint.
49
- *
50
- * Local to this module, NOT exported. The server still speaks the
51
- * legacy vocabulary (`userId`, `isAgent`, `updatedAt`); the engine has
52
- * moved on to `participantId` / `participantKind` / `lastActive`.
53
- * `gather()` returns this shape verbatim today; once the server
54
- * adopts the engine names this interface deletes and the response is
55
- * typed as the canonical `Peer`.
48
+ * The record shape the sync server returns from its REST `/api/presence`
49
+ * endpoint. This interface is internal to this module and not exported. Its
50
+ * field names (`userId`, `isAgent`, `updatedAt`) are the wire contract the
51
+ * presence API sends, and {@link Agent.gather} surfaces these records
52
+ * unchanged in the `presence` array of its snapshot.
56
53
  */
57
54
  interface WirePeer {
58
55
  userId: string;
@@ -125,11 +122,10 @@ export interface FreshnessCheck {
125
122
  /** Human-readable summary — feed this back to the LLM when stale. */
126
123
  summary?: string;
127
124
  /**
128
- * Pending-mutation claims from OTHER participants targeting this
129
- * entity (self-claims filtered out). Empty = no one else is
130
- * currently generating against this entity. Non-empty is ADVISORY
131
- * the agent can proceed, wait, or defer. Stale-read protection
132
- * that predates committed deltas.
125
+ * Pending-mutation claims from other participants targeting this
126
+ * entity, with the agent's own claims filtered out. An empty array
127
+ * means no one else is currently generating against the entity. A
128
+ * non-empty array is advisory: the agent can proceed, wait, or defer.
133
129
  */
134
130
  pendingClaims?: WireClaim[];
135
131
  }
@@ -231,16 +227,16 @@ export interface WrapToolOptions<TArgs> {
231
227
  announceOnExecute?: boolean;
232
228
  }
233
229
  /**
234
- * Console-backed default logger the SAME gated factory the `Ablo()` client
235
- * uses (`createConsoleLogger`, threshold from `ABLO_LOG_LEVEL`, default
236
- * `warn`), tagged `[agent]` so agent-runtime lines are distinguishable. The
237
- * previous hand-rolled shim ignored the level gate entirely and printed
238
- * `[perception]` engine internals at debug/info by default. Level is resolved
239
- * per construction (not at module load) so `ABLO_LOG_LEVEL` set by the host
240
- * process before building an Agent is honored.
230
+ * The console-backed logger an {@link Agent} uses when the caller does not
231
+ * supply one. It is the same gated factory the `Ablo()` client uses
232
+ * (`createConsoleLogger`), reads its threshold from the `ABLO_LOG_LEVEL`
233
+ * environment variable (default `warn`), and tags each line with `[agent]` so
234
+ * agent-runtime output is easy to spot. The level is resolved when the logger
235
+ * is built rather than at module load, so an `ABLO_LOG_LEVEL` that the host
236
+ * process sets before constructing an Agent is honored.
241
237
  *
242
- * Exported for the unit test that pins the gating; consumers pass their own
243
- * `logger` option instead.
238
+ * Exported so a unit test can pin the gating behavior; consumers normally pass
239
+ * their own `logger` option instead.
244
240
  */
245
241
  export declare function defaultAgentLogger(): SyncLogger;
246
242
  export declare class Agent implements PresenceAnnouncer {
@@ -252,11 +248,10 @@ export declare class Agent implements PresenceAnnouncer {
252
248
  * tokens before TTL elapses. Use on the server when the same agent
253
249
  * identity handles many requests.
254
250
  *
255
- * Returns the cache, NOT an `Agent` instance: the long-lived path
256
- * uses `Ablo({kind:'agent'})` over WebSocket, while the `Agent` class
257
- * itself is the short-lived REST helper for AI SDK tool loops. The
258
- * static method lives here so consumers reach for everything
259
- * agent-related under one namespace.
251
+ * Returns the cache rather than an `Agent` instance: the long-lived path
252
+ * uses `Ablo({kind:'agent'})` over a WebSocket, while the `Agent` class
253
+ * itself is the short-lived REST helper for AI SDK tool loops. The static
254
+ * method lives here so everything agent-related sits under one namespace.
260
255
  *
261
256
  * ```ts
262
257
  * const session = Agent.session({ syncServerUrl, schema, issueToken });
@@ -268,8 +263,8 @@ export declare class Agent implements PresenceAnnouncer {
268
263
  get userId(): string;
269
264
  /**
270
265
  * Extract the Agent instance from an AI SDK tool's
271
- * `experimental_context`. Use inside tool `execute` functions to reach
272
- * the perception without closure-capturing it.
266
+ * `experimental_context`. Use it inside a tool's `execute` function to
267
+ * reach the agent without capturing it in a closure.
273
268
  *
274
269
  * ```ts
275
270
  * execute: async (args, { experimental_context }) => {
@@ -285,9 +280,9 @@ export declare class Agent implements PresenceAnnouncer {
285
280
  */
286
281
  static fromContext(ctx: unknown, toolName?: string): Agent;
287
282
  /**
288
- * Narrower variant of {@link fromContext} that returns `undefined` instead
289
- * of throwing when perception isn't in context. Useful for tools where
290
- * awareness is optional (e.g., read-only tools that work without it).
283
+ * A lenient variant of {@link fromContext} that returns `undefined` instead
284
+ * of throwing when no agent is present in the context. Useful for tools
285
+ * where awareness is optional, such as read-only tools that work without it.
291
286
  */
292
287
  static tryFromContext(ctx: unknown): Agent | undefined;
293
288
  /**
@@ -44,16 +44,16 @@ import { createConsoleLogger, resolveLogLevel } from '../client/consoleLogger.js
44
44
  import { AbloValidationError } from '../errors.js';
45
45
  // ── Agent ───────────────────────────────────────────────────────
46
46
  /**
47
- * Console-backed default logger the SAME gated factory the `Ablo()` client
48
- * uses (`createConsoleLogger`, threshold from `ABLO_LOG_LEVEL`, default
49
- * `warn`), tagged `[agent]` so agent-runtime lines are distinguishable. The
50
- * previous hand-rolled shim ignored the level gate entirely and printed
51
- * `[perception]` engine internals at debug/info by default. Level is resolved
52
- * per construction (not at module load) so `ABLO_LOG_LEVEL` set by the host
53
- * process before building an Agent is honored.
47
+ * The console-backed logger an {@link Agent} uses when the caller does not
48
+ * supply one. It is the same gated factory the `Ablo()` client uses
49
+ * (`createConsoleLogger`), reads its threshold from the `ABLO_LOG_LEVEL`
50
+ * environment variable (default `warn`), and tags each line with `[agent]` so
51
+ * agent-runtime output is easy to spot. The level is resolved when the logger
52
+ * is built rather than at module load, so an `ABLO_LOG_LEVEL` that the host
53
+ * process sets before constructing an Agent is honored.
54
54
  *
55
- * Exported for the unit test that pins the gating; consumers pass their own
56
- * `logger` option instead.
55
+ * Exported so a unit test can pin the gating behavior; consumers normally pass
56
+ * their own `logger` option instead.
57
57
  */
58
58
  export function defaultAgentLogger() {
59
59
  const gated = createConsoleLogger(resolveLogLevel());
@@ -85,11 +85,10 @@ export class Agent {
85
85
  * tokens before TTL elapses. Use on the server when the same agent
86
86
  * identity handles many requests.
87
87
  *
88
- * Returns the cache, NOT an `Agent` instance: the long-lived path
89
- * uses `Ablo({kind:'agent'})` over WebSocket, while the `Agent` class
90
- * itself is the short-lived REST helper for AI SDK tool loops. The
91
- * static method lives here so consumers reach for everything
92
- * agent-related under one namespace.
88
+ * Returns the cache rather than an `Agent` instance: the long-lived path
89
+ * uses `Ablo({kind:'agent'})` over a WebSocket, while the `Agent` class
90
+ * itself is the short-lived REST helper for AI SDK tool loops. The static
91
+ * method lives here so everything agent-related sits under one namespace.
93
92
  *
94
93
  * ```ts
95
94
  * const session = Agent.session({ syncServerUrl, schema, issueToken });
@@ -103,8 +102,8 @@ export class Agent {
103
102
  }
104
103
  /**
105
104
  * Extract the Agent instance from an AI SDK tool's
106
- * `experimental_context`. Use inside tool `execute` functions to reach
107
- * the perception without closure-capturing it.
105
+ * `experimental_context`. Use it inside a tool's `execute` function to
106
+ * reach the agent without capturing it in a closure.
108
107
  *
109
108
  * ```ts
110
109
  * execute: async (args, { experimental_context }) => {
@@ -130,9 +129,9 @@ export class Agent {
130
129
  return ctx.perception;
131
130
  }
132
131
  /**
133
- * Narrower variant of {@link fromContext} that returns `undefined` instead
134
- * of throwing when perception isn't in context. Useful for tools where
135
- * awareness is optional (e.g., read-only tools that work without it).
132
+ * A lenient variant of {@link fromContext} that returns `undefined` instead
133
+ * of throwing when no agent is present in the context. Useful for tools
134
+ * where awareness is optional, such as read-only tools that work without it.
136
135
  */
137
136
  static tryFromContext(ctx) {
138
137
  if (!ctx ||
@@ -4,7 +4,7 @@
4
4
  * Two entry points depending on agent lifetime:
5
5
  *
6
6
  * ─────────────────────────────────────────────────────────────────────────
7
- * LONG-LIVED AGENT (browser, daemon, persistent Node process)
7
+ * Long-lived agents (browser, daemon, persistent Node process)
8
8
  * ─────────────────────────────────────────────────────────────────────────
9
9
  * Use the unified `Ablo({...})` factory directly with `kind: 'agent'`.
10
10
  * The factory holds the WebSocket, reactive subscriptions, mutations, and
@@ -36,7 +36,7 @@
36
36
  * before expiry.
37
37
  *
38
38
  * ─────────────────────────────────────────────────────────────────────────
39
- * SHORT-LIVED AGENT (SQS consumer, serverless, API route)
39
+ * Short-lived agents (queue consumer, serverless, API route)
40
40
  * ─────────────────────────────────────────────────────────────────────────
41
41
  * Use {@link Agent}. Stateless REST hooks that slot directly into
42
42
  * the Vercel AI SDK's `generateText` / `streamText`. No WebSocket. Ideal
@@ -69,7 +69,7 @@
69
69
  * ```
70
70
  *
71
71
  * ─────────────────────────────────────────────────────────────────────────
72
- * IDIOMATIC TOOL PATTERN (ported from vercel-labs/open-agents)
72
+ * Idiomatic tool pattern
73
73
  * ─────────────────────────────────────────────────────────────────────────
74
74
  * Tools are factory functions that pull ambient state from
75
75
  * `experimental_context`. The caller builds an {@link AgentContext} once
@@ -93,7 +93,7 @@
93
93
  * ```
94
94
  *
95
95
  * ─────────────────────────────────────────────────────────────────────────
96
- * COMPOSED (long-lived `Ablo({kind:'agent'})` + Agent together)
96
+ * Composed usage (a long-lived `Ablo({kind:'agent'})` plus an Agent)
97
97
  * ─────────────────────────────────────────────────────────────────────────
98
98
  * If you have a long-lived `Ablo` instance AND want AI SDK hooks, pass it
99
99
  * as the `announcer` to Agent — presence announcements route
@@ -4,7 +4,7 @@
4
4
  * Two entry points depending on agent lifetime:
5
5
  *
6
6
  * ─────────────────────────────────────────────────────────────────────────
7
- * LONG-LIVED AGENT (browser, daemon, persistent Node process)
7
+ * Long-lived agents (browser, daemon, persistent Node process)
8
8
  * ─────────────────────────────────────────────────────────────────────────
9
9
  * Use the unified `Ablo({...})` factory directly with `kind: 'agent'`.
10
10
  * The factory holds the WebSocket, reactive subscriptions, mutations, and
@@ -36,7 +36,7 @@
36
36
  * before expiry.
37
37
  *
38
38
  * ─────────────────────────────────────────────────────────────────────────
39
- * SHORT-LIVED AGENT (SQS consumer, serverless, API route)
39
+ * Short-lived agents (queue consumer, serverless, API route)
40
40
  * ─────────────────────────────────────────────────────────────────────────
41
41
  * Use {@link Agent}. Stateless REST hooks that slot directly into
42
42
  * the Vercel AI SDK's `generateText` / `streamText`. No WebSocket. Ideal
@@ -69,7 +69,7 @@
69
69
  * ```
70
70
  *
71
71
  * ─────────────────────────────────────────────────────────────────────────
72
- * IDIOMATIC TOOL PATTERN (ported from vercel-labs/open-agents)
72
+ * Idiomatic tool pattern
73
73
  * ─────────────────────────────────────────────────────────────────────────
74
74
  * Tools are factory functions that pull ambient state from
75
75
  * `experimental_context`. The caller builds an {@link AgentContext} once
@@ -93,7 +93,7 @@
93
93
  * ```
94
94
  *
95
95
  * ─────────────────────────────────────────────────────────────────────────
96
- * COMPOSED (long-lived `Ablo({kind:'agent'})` + Agent together)
96
+ * Composed usage (a long-lived `Ablo({kind:'agent'})` plus an Agent)
97
97
  * ─────────────────────────────────────────────────────────────────────────
98
98
  * If you have a long-lived `Ablo` instance AND want AI SDK hooks, pass it
99
99
  * as the `announcer` to Agent — presence announcements route
@@ -114,7 +114,7 @@
114
114
  */
115
115
  // ── The entire `/agent` surface — one symbol ────────────────────────────
116
116
  //
117
- // `Agent` is the class AND the namespace for its types. Reach for
117
+ // `Agent` is both the class and the namespace for its types. Reach for
118
118
  // options, context, and session options via dot access:
119
119
  //
120
120
  // import { Agent } from '@abloatai/ablo/agent';
@@ -1,23 +1,21 @@
1
1
  /**
2
- * Agent session cache + lifecycle for server-side `SyncAgent`s.
2
+ * Caches and manages the lifecycle of long-lived agent connections on a server.
3
3
  *
4
- * Captures the pattern every server-side consumer needs:
5
- * 1. Cache `SyncAgent` instances per (org, user, surface, target).
6
- * 2. Re-mint capabilities before TTL elapses.
7
- * 3. Align the SyncAgent ctor's `syncGroups` with the cap allowlist
8
- * so the upgrade-time intersection is non-empty (avoid the
9
- * silent black-hole-broadcast bug).
10
- * 4. Connect / disconnect / dispose lifecycle.
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.
11
13
  *
12
- * What's generic, what isn't:
13
- * - Cache, TTL, sync_groups alignment, lifecycle: SAME for every
14
- * consumer. Lives here.
15
- * - Cap mint: AUTH-FLOW-SPECIFIC. Every consumer has a different
16
- * way to obtain a token (Better Auth cookie forwarding, API key
17
- * exchange, OAuth, etc.). Consumer provides via the
18
- * `issueToken` callback.
19
- *
20
- * The helper itself imports nothing app-specific. Open-source-clean.
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.
21
19
  */
22
20
  import { Ablo } from '../client/Ablo.js';
23
21
  import type { Schema, SchemaRecord } from '../schema/schema.js';
@@ -25,11 +23,11 @@ interface IssuedToken {
25
23
  readonly token: string;
26
24
  readonly expiresAtMs: number;
27
25
  /**
28
- * Sync groups allowed by this capability. Must include every group
29
- * the agent will subscribe to the upgrade-time intersection of
30
- * (allowed) (requested) determines effective subscription. Returning
31
- * a list that doesn't include the needed groups produces an empty
32
- * intersection and silent broadcast failure.
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.
33
31
  */
34
32
  readonly syncGroups: readonly string[];
35
33
  }
@@ -37,8 +35,9 @@ interface AgentIdentity {
37
35
  readonly userId: string;
38
36
  readonly organizationId: string;
39
37
  /**
40
- * Surface class `'chat'`, `'mcp'`, `'agent_worker'`, etc. Session
41
- * caches per surface so two surfaces don't share token or WS.
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.
42
41
  */
43
42
  readonly surfaceClass: string;
44
43
  readonly target?: {
@@ -47,40 +46,44 @@ interface AgentIdentity {
47
46
  } | null;
48
47
  }
49
48
  export interface AgentSessionOptions<R extends SchemaRecord = SchemaRecord> {
50
- /** Sync-server WebSocket URL `wss://sync.example.com` or `ws://localhost:3001`. */
49
+ /** WebSocket URL of your sync server, such as `wss://sync.example.com` or `ws://localhost:3001`. */
51
50
  readonly syncServerUrl: string;
52
- /** Schema for the typed model proxy on the returned Ablo. After
53
- * the dual-engine collapse, `Ablo({kind:'agent'})` is the unified
54
- * factory and requires the schema to expose
55
- * `agent.<model>.create/update/delete`. */
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
+ */
56
55
  readonly schema: Schema<R>;
57
56
  /**
58
- * Token-issuing callback. Called on cache miss / expiry. Owns the
59
- * consumer's auth flow (Better Auth cookies, API key exchange, OAuth,
60
- * etc.) so the engine stays auth-flow-agnostic.
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.
61
62
  */
62
63
  readonly issueToken: (identity: AgentIdentity) => Promise<IssuedToken>;
63
64
  /**
64
- * Soft window before actual expiry to re-mint. Defaults to 30s.
65
- * Avoids races between mint-time and clock-skew at use-time.
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.
66
68
  */
67
69
  readonly reissueBufferMs?: number;
68
70
  /**
69
- * Optional agent-id strategy. Default: `${surfaceClass}:${userId}`.
70
- * Override when the consumer wants different attribution shape.
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.
71
74
  */
72
75
  readonly agentIdFor?: (identity: AgentIdentity) => string;
73
76
  }
74
77
  /**
75
- * Returns a session whose `getAgent` method handles cache, mint,
76
- * sync_groups alignment, and lifecycle. Call `disposeAll()` from
77
- * the consumer's process shutdown hook.
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.
78
82
  *
79
- * Threading: the session is intended to be a long-lived singleton
80
- * shared across requests. The cache is keyed precisely so two
81
- * concurrent requests for the same (user, org, surface, target)
82
- * share one agent + one WS, while different requests get
83
- * independent agents.
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.
84
87
  */
85
88
  export declare function createAgentSession<R extends SchemaRecord = SchemaRecord>(options: AgentSessionOptions<R>): {
86
89
  getAgent: (identity: AgentIdentity) => Promise<Ablo<R>>;