@abloatai/ablo 0.34.0 → 0.35.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 (483) hide show
  1. package/AGENTS.md +4 -1
  2. package/CHANGELOG.md +684 -5
  3. package/README.md +39 -22
  4. package/dist/BaseSyncedStore.d.ts +152 -44
  5. package/dist/BaseSyncedStore.js +300 -184
  6. package/dist/Database.d.ts +9 -24
  7. package/dist/Database.js +37 -22
  8. package/dist/InstanceCache.d.ts +25 -4
  9. package/dist/InstanceCache.js +48 -15
  10. package/dist/LazyReferenceCollection.d.ts +3 -3
  11. package/dist/LazyReferenceCollection.js +4 -4
  12. package/dist/Model.d.ts +6 -6
  13. package/dist/Model.js +10 -10
  14. package/dist/ModelRegistry.d.ts +4 -4
  15. package/dist/ModelRegistry.js +3 -3
  16. package/dist/{SyncEngineContext.d.ts → RuntimeContext.d.ts} +20 -13
  17. package/dist/{SyncEngineContext.js → RuntimeContext.js} +11 -12
  18. package/dist/SyncClient.d.ts +42 -32
  19. package/dist/SyncClient.js +166 -110
  20. package/dist/ai-sdk/coordinatedTool.d.ts +2 -2
  21. package/dist/ai-sdk/coordinatedTool.js +1 -1
  22. package/dist/ai-sdk/coordinationContext.d.ts +2 -2
  23. package/dist/ai-sdk/coordinationContext.js +1 -1
  24. package/dist/ai-sdk/wrap.d.ts +3 -3
  25. package/dist/ai-sdk/wrap.js +2 -2
  26. package/dist/auth/index.d.ts +1 -156
  27. package/dist/auth/index.js +8 -301
  28. package/dist/cli.cjs +3459 -1126
  29. package/dist/client/Ablo.d.ts +42 -287
  30. package/dist/client/Ablo.js +118 -963
  31. package/dist/client/abloClient.d.ts +309 -0
  32. package/dist/client/abloClient.js +13 -0
  33. package/dist/client/clientPrelude.d.ts +52 -0
  34. package/dist/client/clientPrelude.js +60 -0
  35. package/dist/client/consoleLogger.d.ts +2 -2
  36. package/dist/client/coreClient.d.ts +60 -0
  37. package/dist/client/coreClient.js +118 -0
  38. package/dist/client/createInternalComponents.d.ts +4 -4
  39. package/dist/client/createInternalComponents.js +9 -8
  40. package/dist/client/createModelProxy.d.ts +78 -373
  41. package/dist/client/createModelProxy.js +114 -86
  42. package/dist/client/humans.d.ts +48 -0
  43. package/dist/client/humans.js +52 -0
  44. package/dist/client/modelRegistration.d.ts +1 -1
  45. package/dist/client/modelRegistration.js +9 -9
  46. package/dist/client/options.d.ts +73 -17
  47. package/dist/client/reactiveEngine.d.ts +48 -0
  48. package/dist/client/reactiveEngine.js +910 -0
  49. package/dist/client/resourceTypes.d.ts +9 -250
  50. package/dist/client/resourceTypes.js +8 -5
  51. package/dist/client/schemaConfig.d.ts +4 -4
  52. package/dist/client/schemaConfig.js +6 -2
  53. package/dist/client/validateAbloOptions.d.ts +3 -2
  54. package/dist/client/validateAbloOptions.js +1 -1
  55. package/dist/client/wsMutationExecutor.d.ts +3 -3
  56. package/dist/client/wsMutationExecutor.js +3 -3
  57. package/dist/context.d.ts +9 -9
  58. package/dist/context.js +10 -9
  59. package/dist/coordination/ClaimLog.d.ts +26 -0
  60. package/dist/coordination/ClaimLog.js +32 -0
  61. package/dist/coordination/index.d.ts +1 -15
  62. package/dist/coordination/index.js +8 -31
  63. package/dist/core/DatabaseManager.js +1 -1
  64. package/dist/core/QueryView.d.ts +1 -1
  65. package/dist/core/QueryView.js +1 -1
  66. package/dist/core/StoreManager.d.ts +4 -23
  67. package/dist/core/StoreManager.js +5 -55
  68. package/dist/core/index.d.ts +2 -2
  69. package/dist/core/index.js +2 -2
  70. package/dist/core/storeContract.d.ts +2 -2
  71. package/dist/docs/catalog.d.ts +72 -0
  72. package/dist/docs/catalog.js +227 -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 +40 -34
  78. package/dist/index.js +26 -20
  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 +2 -2
  99. package/dist/query/client.js +4 -4
  100. package/dist/query/types.d.ts +6 -41
  101. package/dist/query/types.js +2 -2
  102. package/dist/react/AbloProvider.d.ts +6 -8
  103. package/dist/react/AbloProvider.js +5 -7
  104. package/dist/react/context.d.ts +1 -1
  105. package/dist/react/context.js +1 -1
  106. package/dist/react/index.d.ts +5 -5
  107. package/dist/react/index.js +3 -3
  108. package/dist/react/internalContext.d.ts +1 -1
  109. package/dist/react/useAblo.d.ts +3 -3
  110. package/dist/react/useAblo.js +1 -1
  111. package/dist/react/useCurrentUserId.js +1 -1
  112. package/dist/react/useErrorListener.js +1 -1
  113. package/dist/react/useMutationFailureListener.d.ts +2 -2
  114. package/dist/react/useMutationFailureListener.js +1 -1
  115. package/dist/react/useMutators.d.ts +3 -3
  116. package/dist/react/useMutators.js +3 -3
  117. package/dist/react/useUndoScope.d.ts +5 -5
  118. package/dist/react/useUndoScope.js +1 -1
  119. package/dist/schema/coordination.d.ts +69 -10
  120. package/dist/schema/coordination.js +86 -9
  121. package/dist/schema/ddl.js +2 -2
  122. package/dist/schema/diff.d.ts +1 -1
  123. package/dist/schema/generate.js +1 -1
  124. package/dist/schema/index.d.ts +10 -10
  125. package/dist/schema/index.js +18 -18
  126. package/dist/schema/queries.d.ts +27 -27
  127. package/dist/schema/queries.js +23 -23
  128. package/dist/schema/select.d.ts +3 -3
  129. package/dist/schema/select.js +3 -3
  130. package/dist/schema/serialize.d.ts +15 -6
  131. package/dist/schema/serialize.js +17 -3
  132. package/dist/schema/sugar.d.ts +6 -7
  133. package/dist/schema/sugar.js +9 -12
  134. package/dist/schema/syncDeltaRow.d.ts +4 -152
  135. package/dist/schema/syncDeltaRow.js +4 -105
  136. package/dist/server/adapter.d.ts +18 -1
  137. package/dist/server/commit.d.ts +10 -16
  138. package/dist/server/index.d.ts +1 -1
  139. package/dist/server/index.js +1 -1
  140. package/dist/server/readConfig.d.ts +1 -1
  141. package/dist/source/adapters/drizzle.d.ts +1 -1
  142. package/dist/source/adapters/drizzle.js +2 -2
  143. package/dist/source/adapters/kysely.d.ts +1 -1
  144. package/dist/source/adapters/kysely.js +1 -1
  145. package/dist/source/adapters/kyselyMutationCore.d.ts +1 -1
  146. package/dist/source/adapters/kyselyMutationCore.js +2 -2
  147. package/dist/source/adapters/memory.js +1 -1
  148. package/dist/source/adapters/prisma.d.ts +8 -3
  149. package/dist/source/adapters/prisma.js +1 -1
  150. package/dist/source/connector.js +1 -1
  151. package/dist/source/connectorProtocol.d.ts +2 -8
  152. package/dist/source/connectorProtocol.js +3 -2
  153. package/dist/source/contract.d.ts +29 -17
  154. package/dist/source/contract.js +27 -22
  155. package/dist/source/factory.d.ts +1 -1
  156. package/dist/source/footprint.d.ts +111 -0
  157. package/dist/source/footprint.js +0 -0
  158. package/dist/source/idempotency.js +2 -2
  159. package/dist/source/index.d.ts +1 -0
  160. package/dist/source/index.js +3 -0
  161. package/dist/source/next.d.ts +1 -1
  162. package/dist/source/signing.d.ts +9 -2
  163. package/dist/source/signing.js +4 -1
  164. package/dist/source/types.d.ts +6 -4
  165. package/dist/source/types.js +1 -1
  166. package/dist/stores/ObjectStore.d.ts +1 -1
  167. package/dist/stores/SyncActionStore.d.ts +1 -1
  168. package/dist/stores/SyncActionStore.js +2 -10
  169. package/dist/stores/syncAction.d.ts +26 -0
  170. package/dist/stores/syncAction.js +16 -0
  171. package/dist/surface.d.ts +3 -3
  172. package/dist/surface.js +6 -4
  173. package/dist/sync/BootstrapFetcher.d.ts +123 -6
  174. package/dist/sync/BootstrapFetcher.js +492 -66
  175. package/dist/sync/ConnectionManager.d.ts +6 -198
  176. package/dist/sync/ConnectionManager.js +6 -677
  177. package/dist/sync/OnDemandLoader.d.ts +2 -2
  178. package/dist/sync/OnDemandLoader.js +60 -21
  179. package/dist/sync/SubscriptionManager.d.ts +13 -2
  180. package/dist/sync/SubscriptionManager.js +23 -5
  181. package/dist/sync/SyncWebSocket.d.ts +27 -510
  182. package/dist/sync/SyncWebSocket.js +76 -954
  183. package/dist/sync/awaitClaimGrant.d.ts +4 -44
  184. package/dist/sync/awaitClaimGrant.js +4 -109
  185. package/dist/sync/commitFrames.d.ts +6 -40
  186. package/dist/sync/commitFrames.js +6 -97
  187. package/dist/sync/contextPorts.d.ts +18 -0
  188. package/dist/sync/contextPorts.js +31 -0
  189. package/dist/sync/createClaimStream.d.ts +5 -49
  190. package/dist/sync/createClaimStream.js +5 -469
  191. package/dist/sync/createPresenceStream.d.ts +26 -4
  192. package/dist/sync/createPresenceStream.js +28 -20
  193. package/dist/sync/createSnapshot.d.ts +2 -2
  194. package/dist/sync/createSnapshot.js +1 -1
  195. package/dist/sync/credentialLifecycle.d.ts +5 -173
  196. package/dist/sync/credentialLifecycle.js +5 -320
  197. package/dist/sync/deltaPipeline.d.ts +1 -1
  198. package/dist/sync/participants.d.ts +5 -4
  199. package/dist/sync/participants.js +29 -22
  200. package/dist/sync/schemaDrift.d.ts +55 -0
  201. package/dist/sync/schemaDrift.js +53 -0
  202. package/dist/sync/schemas.d.ts +21 -32
  203. package/dist/sync/schemas.js +26 -17
  204. package/dist/sync/syncPlan.d.ts +3 -3
  205. package/dist/sync/wsFrameHandlers.d.ts +6 -114
  206. package/dist/sync/wsFrameHandlers.js +6 -392
  207. package/dist/testing/fixtures/bootstrap.d.ts +1 -1
  208. package/dist/testing/fixtures/deltas.d.ts +1 -1
  209. package/dist/testing/fixtures/httpResponses.d.ts +70 -0
  210. package/dist/testing/fixtures/httpResponses.js +90 -0
  211. package/dist/testing/fixtures/models.js +1 -1
  212. package/dist/testing/helpers/wait.js +1 -1
  213. package/dist/testing/mocks/MockMutationExecutor.d.ts +2 -2
  214. package/dist/testing/mocks/MockMutationExecutor.js +8 -14
  215. package/dist/testing/mocks/MockSyncContext.d.ts +11 -11
  216. package/dist/testing/mocks/MockSyncContext.js +10 -9
  217. package/dist/testing/mocks/MockSyncStore.js +1 -1
  218. package/dist/testing/mocks/MockWebSocket.d.ts +2 -2
  219. package/dist/transaction/ablo.d.ts +88 -0
  220. package/dist/transaction/ablo.js +33 -0
  221. package/dist/{client/auth.d.ts → transaction/auth/apiKey.d.ts} +43 -8
  222. package/dist/{client/auth.js → transaction/auth/apiKey.js} +19 -0
  223. package/dist/transaction/auth/bootstrapScope.d.ts +15 -0
  224. package/dist/transaction/auth/bootstrapScope.js +1 -0
  225. package/dist/transaction/auth/capability.d.ts +177 -0
  226. package/dist/transaction/auth/capability.js +199 -0
  227. package/dist/{auth → transaction/auth}/credentialSource.d.ts +8 -1
  228. package/dist/{client → transaction/auth}/identity.d.ts +8 -7
  229. package/dist/{client → transaction/auth}/identity.js +1 -1
  230. package/dist/transaction/auth/index.d.ts +162 -0
  231. package/dist/transaction/auth/index.js +304 -0
  232. package/dist/{auth → transaction/auth}/schemas.d.ts +1 -1
  233. package/dist/{auth → transaction/auth}/schemas.js +13 -13
  234. package/dist/{client → transaction/auth}/sessionMint.d.ts +8 -8
  235. package/dist/{client → transaction/auth}/sessionMint.js +4 -7
  236. package/dist/transaction/coordination/awaitClaimGrant.d.ts +49 -0
  237. package/dist/transaction/coordination/awaitClaimGrant.js +112 -0
  238. package/dist/transaction/coordination/claimMeta.d.ts +49 -0
  239. package/dist/transaction/coordination/claimMeta.js +52 -0
  240. package/dist/transaction/coordination/createClaimStream.d.ts +64 -0
  241. package/dist/transaction/coordination/createClaimStream.js +475 -0
  242. package/dist/transaction/coordination/events.d.ts +74 -0
  243. package/dist/transaction/coordination/events.js +7 -0
  244. package/dist/transaction/coordination/index.d.ts +19 -0
  245. package/dist/transaction/coordination/index.js +44 -0
  246. package/dist/transaction/coordination/locator.d.ts +83 -0
  247. package/dist/transaction/coordination/locator.js +82 -0
  248. package/dist/transaction/coordination/schema.d.ts +1473 -0
  249. package/dist/{coordination → transaction/coordination}/schema.js +490 -55
  250. package/dist/transaction/coordination/targetConflict.d.ts +2 -0
  251. package/dist/transaction/coordination/targetConflict.js +103 -0
  252. package/dist/{coordination → transaction/coordination}/trace.d.ts +7 -18
  253. package/dist/{coordination → transaction/coordination}/trace.js +18 -25
  254. package/dist/transaction/durableWrites.d.ts +62 -0
  255. package/dist/{client → transaction}/durableWrites.js +28 -3
  256. package/dist/transaction/environment.d.ts +105 -0
  257. package/dist/transaction/environment.js +108 -0
  258. package/dist/{errorCodes.d.ts → transaction/errorCodes.d.ts} +11 -11
  259. package/dist/{errorCodes.js → transaction/errorCodes.js} +35 -12
  260. package/dist/{errors.d.ts → transaction/errors.d.ts} +37 -13
  261. package/dist/{errors.js → transaction/errors.js} +85 -16
  262. package/dist/transaction/index.d.ts +20 -0
  263. package/dist/transaction/index.js +20 -0
  264. package/dist/transaction/keys/index.d.ts +87 -0
  265. package/dist/transaction/keys/index.js +207 -0
  266. package/dist/transaction/log/syncDeltaRow.d.ts +158 -0
  267. package/dist/transaction/log/syncDeltaRow.js +95 -0
  268. package/dist/{sync/syncPosition.d.ts → transaction/logPosition.d.ts} +22 -8
  269. package/dist/{sync/syncPosition.js → transaction/logPosition.js} +15 -6
  270. package/dist/transaction/logger.d.ts +16 -0
  271. package/dist/transaction/logger.js +7 -0
  272. package/dist/transaction/observability.d.ts +53 -0
  273. package/dist/transaction/observability.js +19 -0
  274. package/dist/transaction/plugin.d.ts +192 -0
  275. package/dist/transaction/plugin.js +87 -0
  276. package/dist/{policy → transaction/policy}/types.d.ts +3 -3
  277. package/dist/{policy → transaction/policy}/types.js +2 -0
  278. package/dist/transaction/resources/httpResources.d.ts +266 -0
  279. package/dist/transaction/resources/httpResources.js +7 -0
  280. package/dist/transaction/resources/modelOperations.d.ts +319 -0
  281. package/dist/transaction/resources/modelOperations.js +12 -0
  282. package/dist/transaction/resources/mutationOptions.d.ts +66 -0
  283. package/dist/transaction/resources/mutationOptions.js +9 -0
  284. package/dist/transaction/resources/where.d.ts +85 -0
  285. package/dist/transaction/resources/where.js +70 -0
  286. package/dist/{client → transaction/resources}/writeOptionsSchema.d.ts +2 -6
  287. package/dist/{client → transaction/resources}/writeOptionsSchema.js +9 -5
  288. package/dist/{schema → transaction/schema}/field.d.ts +5 -5
  289. package/dist/{schema → transaction/schema}/field.js +5 -5
  290. package/dist/transaction/schema/loadStrategy.d.ts +45 -0
  291. package/dist/transaction/schema/loadStrategy.js +46 -0
  292. package/dist/{schema → transaction/schema}/model.d.ts +50 -35
  293. package/dist/{schema → transaction/schema}/model.js +30 -20
  294. package/dist/transaction/schema/openapi.d.ts +57 -0
  295. package/dist/transaction/schema/openapi.js +340 -0
  296. package/dist/{schema → transaction/schema}/relation.d.ts +14 -14
  297. package/dist/{schema → transaction/schema}/relation.js +7 -7
  298. package/dist/{schema → transaction/schema}/residency.d.ts +0 -9
  299. package/dist/{schema → transaction/schema}/residency.js +0 -5
  300. package/dist/{schema → transaction/schema}/roles.d.ts +5 -5
  301. package/dist/{schema → transaction/schema}/roles.js +5 -5
  302. package/dist/{schema → transaction/schema}/schema.d.ts +12 -10
  303. package/dist/{schema → transaction/schema}/schema.js +4 -3
  304. package/dist/{schema → transaction/schema}/tenancy.d.ts +1 -1
  305. package/dist/{schema → transaction/schema}/tenancy.js +7 -4
  306. package/dist/transaction/transactionLayer.d.ts +82 -0
  307. package/dist/transaction/transactionLayer.js +24 -0
  308. package/dist/{transactions → transaction/transactions/settlement}/commitEnvelope.d.ts +4 -5
  309. package/dist/{transactions → transaction/transactions/settlement}/commitEnvelope.js +9 -13
  310. package/dist/{transactions → transaction/transactions/settlement}/httpCommitEnvelope.d.ts +9 -2
  311. package/dist/{transactions → transaction/transactions/settlement}/httpCommitEnvelope.js +5 -9
  312. package/dist/{transactions/durableWriteStore.d.ts → transaction/transactions/settlement/pendingWrite.d.ts} +10 -36
  313. package/dist/transaction/transactions/settlement/pendingWrite.js +20 -0
  314. package/dist/transaction/transport/commitFrames.d.ts +90 -0
  315. package/dist/transaction/transport/commitFrames.js +134 -0
  316. package/dist/transaction/transport/connectionManager.d.ts +215 -0
  317. package/dist/transaction/transport/connectionManager.js +673 -0
  318. package/dist/transaction/transport/credentialLifecycle.d.ts +177 -0
  319. package/dist/transaction/transport/credentialLifecycle.js +324 -0
  320. package/dist/{sync → transaction/transport}/heartbeat.d.ts +3 -1
  321. package/dist/{sync → transaction/transport}/heartbeat.js +6 -4
  322. package/dist/{client → transaction/transport}/httpClient.d.ts +59 -16
  323. package/dist/{client → transaction/transport}/httpClient.js +5 -5
  324. package/dist/transaction/transport/httpOptions.d.ts +33 -0
  325. package/dist/transaction/transport/httpOptions.js +12 -0
  326. package/dist/{client → transaction/transport}/httpTransport.js +171 -85
  327. package/dist/{sync/NetworkProbe.d.ts → transaction/transport/networkProbe.d.ts} +7 -4
  328. package/dist/{sync/NetworkProbe.js → transaction/transport/networkProbe.js} +14 -13
  329. package/dist/transaction/transport/wsFrameHandlers.d.ts +128 -0
  330. package/dist/transaction/transport/wsFrameHandlers.js +429 -0
  331. package/dist/transaction/transport/wsTransport.d.ts +576 -0
  332. package/dist/transaction/transport/wsTransport.js +1017 -0
  333. package/dist/transaction/types/assertExact.d.ts +17 -0
  334. package/dist/transaction/types/assertExact.js +1 -0
  335. package/dist/{types → transaction/types}/global.d.ts +17 -2
  336. package/dist/{types → transaction/types}/global.js +2 -1
  337. package/dist/{types → transaction/types}/index.d.ts +14 -46
  338. package/dist/{types → transaction/types}/index.js +7 -16
  339. package/dist/{types → transaction/types}/streams.d.ts +63 -45
  340. package/dist/{utils → transaction/utils}/json.d.ts +18 -0
  341. package/dist/transaction/utils/json.js +276 -0
  342. package/dist/transaction/wire/accountResponses.d.ts +351 -0
  343. package/dist/transaction/wire/accountResponses.js +255 -0
  344. package/dist/transaction/wire/auth.d.ts +49 -0
  345. package/dist/transaction/wire/auth.js +57 -0
  346. package/dist/transaction/wire/claimEvent.d.ts +76 -0
  347. package/dist/transaction/wire/claimEvent.js +73 -0
  348. package/dist/transaction/wire/claims.d.ts +463 -0
  349. package/dist/transaction/wire/claims.js +229 -0
  350. package/dist/{wire → transaction/wire}/commit.d.ts +125 -193
  351. package/dist/{wire → transaction/wire}/commit.js +68 -47
  352. package/dist/{wire → transaction/wire}/delta.d.ts +66 -17
  353. package/dist/{wire → transaction/wire}/delta.js +37 -13
  354. package/dist/transaction/wire/errorEnvelope.d.ts +72 -0
  355. package/dist/{wire → transaction/wire}/errorEnvelope.js +36 -5
  356. package/dist/transaction/wire/feedCursor.d.ts +60 -0
  357. package/dist/transaction/wire/feedCursor.js +82 -0
  358. package/dist/transaction/wire/feedEvent.d.ts +177 -0
  359. package/dist/transaction/wire/feedEvent.js +39 -0
  360. package/dist/transaction/wire/frames.d.ts +194 -0
  361. package/dist/transaction/wire/frames.js +50 -0
  362. package/dist/transaction/wire/inboundFrames.d.ts +552 -0
  363. package/dist/transaction/wire/inboundFrames.js +116 -0
  364. package/dist/transaction/wire/index.d.ts +50 -0
  365. package/dist/transaction/wire/index.js +74 -0
  366. package/dist/{wire → transaction/wire}/listEnvelope.d.ts +13 -14
  367. package/dist/transaction/wire/listEnvelope.js +42 -0
  368. package/dist/transaction/wire/modelResponses.d.ts +85 -0
  369. package/dist/transaction/wire/modelResponses.js +43 -0
  370. package/dist/transactions/{TransactionQueue.d.ts → mutations/MutationQueue.d.ts} +79 -38
  371. package/dist/transactions/{TransactionQueue.js → mutations/MutationQueue.js} +110 -59
  372. package/dist/transactions/{TransactionStore.d.ts → mutations/MutationStore.d.ts} +8 -8
  373. package/dist/transactions/{TransactionStore.js → mutations/MutationStore.js} +2 -2
  374. package/dist/transactions/{coalesceRules.d.ts → mutations/coalesceRules.d.ts} +10 -10
  375. package/dist/transactions/{coalesceRules.js → mutations/coalesceRules.js} +1 -1
  376. package/dist/transactions/mutations/commitLatency.d.ts +52 -0
  377. package/dist/transactions/mutations/commitLatency.js +130 -0
  378. package/dist/transactions/{commitOutboxStore.d.ts → mutations/commitOutboxStore.d.ts} +1 -5
  379. package/dist/transactions/{commitOutboxStore.js → mutations/commitOutboxStore.js} +1 -1
  380. package/dist/transactions/{commitPayload.d.ts → mutations/commitPayload.d.ts} +16 -15
  381. package/dist/transactions/{commitPayload.js → mutations/commitPayload.js} +12 -12
  382. package/dist/transactions/{deltaConfirmation.d.ts → mutations/deltaConfirmation.d.ts} +11 -11
  383. package/dist/transactions/{deltaConfirmation.js → mutations/deltaConfirmation.js} +7 -7
  384. package/dist/transactions/mutations/durableWriteStore.d.ts +14 -0
  385. package/dist/transactions/mutations/durableWriteStore.js +12 -0
  386. package/dist/transactions/{optimisticApply.d.ts → mutations/optimisticApply.d.ts} +7 -7
  387. package/dist/transactions/{replayValidation.d.ts → mutations/replayValidation.d.ts} +3 -3
  388. package/dist/transactions/{replayValidation.js → mutations/replayValidation.js} +4 -3
  389. package/dist/utils/mobxSetup.d.ts +1 -1
  390. package/dist/utils/mobxSetup.js +5 -2
  391. package/dist/webhooks/events.d.ts +2 -2
  392. package/dist/wire/index.d.ts +1 -34
  393. package/dist/wire/index.js +8 -49
  394. package/docs/agent-messaging.md +3 -3
  395. package/docs/agents.md +19 -12
  396. package/docs/api-keys.md +8 -4
  397. package/docs/api.md +22 -18
  398. package/docs/audit.md +2 -0
  399. package/docs/cli.md +31 -3
  400. package/docs/client-behavior.md +8 -6
  401. package/docs/concurrency-convention.md +30 -24
  402. package/docs/coordination.md +48 -38
  403. package/docs/data-sources.md +3 -1
  404. package/docs/debugging.md +5 -3
  405. package/docs/deployment.md +267 -0
  406. package/docs/examples/agent-human.md +49 -42
  407. package/docs/examples/ai-sdk-tool.md +69 -44
  408. package/docs/examples/existing-python-backend.md +8 -6
  409. package/docs/examples/nextjs.md +129 -47
  410. package/docs/examples/scoped-agent.md +45 -44
  411. package/docs/examples/server-agent.md +46 -26
  412. package/docs/groups.md +32 -29
  413. package/docs/guarantees.md +4 -2
  414. package/docs/how-it-works.md +9 -7
  415. package/docs/idempotency.md +126 -0
  416. package/docs/identity.md +58 -54
  417. package/docs/index.md +172 -84
  418. package/docs/integration-guide.md +17 -16
  419. package/docs/interaction-model.md +6 -4
  420. package/docs/mcp.md +41 -16
  421. package/docs/migration.md +63 -5
  422. package/docs/operating-on-your-database.md +111 -0
  423. package/docs/projects.md +2 -0
  424. package/docs/quickstart.md +22 -5
  425. package/docs/react.md +12 -10
  426. package/docs/schema-contract.md +5 -3
  427. package/docs/session-settings.md +108 -0
  428. package/docs/sessions.md +3 -1
  429. package/docs/webhooks.md +3 -1
  430. package/llms.txt +47 -17
  431. package/package.json +10 -8
  432. package/dist/agent/Agent.d.ts +0 -366
  433. package/dist/agent/Agent.js +0 -514
  434. package/dist/agent/index.d.ts +0 -115
  435. package/dist/agent/index.js +0 -128
  436. package/dist/agent/session.d.ts +0 -93
  437. package/dist/agent/session.js +0 -149
  438. package/dist/agent/types.d.ts +0 -68
  439. package/dist/agent/types.js +0 -9
  440. package/dist/client/durableWrites.d.ts +0 -21
  441. package/dist/coordination/schema.d.ts +0 -722
  442. package/dist/schema/openapi.d.ts +0 -29
  443. package/dist/schema/openapi.js +0 -124
  444. package/dist/transactions/durableWriteStore.js +0 -30
  445. package/dist/utils/json.js +0 -88
  446. package/dist/wire/errorEnvelope.d.ts +0 -55
  447. package/dist/wire/frames.d.ts +0 -197
  448. package/dist/wire/frames.js +0 -49
  449. package/dist/wire/listEnvelope.js +0 -18
  450. /package/dist/{client → transaction/auth}/credentialEndpoint.d.ts +0 -0
  451. /package/dist/{client → transaction/auth}/credentialEndpoint.js +0 -0
  452. /package/dist/{auth → transaction/auth}/credentialPolicy.d.ts +0 -0
  453. /package/dist/{auth → transaction/auth}/credentialPolicy.js +0 -0
  454. /package/dist/{auth → transaction/auth}/credentialSource.js +0 -0
  455. /package/dist/{client → transaction/auth}/hostedEndpoints.d.ts +0 -0
  456. /package/dist/{client → transaction/auth}/hostedEndpoints.js +0 -0
  457. /package/dist/{client → transaction/coordination}/claimHeartbeatLoop.d.ts +0 -0
  458. /package/dist/{client → transaction/coordination}/claimHeartbeatLoop.js +0 -0
  459. /package/dist/{client → transaction}/persistence.d.ts +0 -0
  460. /package/dist/{client → transaction}/persistence.js +0 -0
  461. /package/dist/{client → transaction/resources}/functionalUpdate.d.ts +0 -0
  462. /package/dist/{client → transaction/resources}/functionalUpdate.js +0 -0
  463. /package/dist/{transactions → transaction/transactions/settlement}/idempotencyKey.d.ts +0 -0
  464. /package/dist/{transactions → transaction/transactions/settlement}/idempotencyKey.js +0 -0
  465. /package/dist/{client → transaction/transport}/httpTransport.d.ts +0 -0
  466. /package/dist/{types → transaction/types}/modelData.d.ts +0 -0
  467. /package/dist/{types → transaction/types}/modelData.js +0 -0
  468. /package/dist/{types → transaction/types}/participant.d.ts +0 -0
  469. /package/dist/{types → transaction/types}/participant.js +0 -0
  470. /package/dist/{types → transaction/types}/streams.js +0 -0
  471. /package/dist/{utils → transaction/utils}/asyncIterator.d.ts +0 -0
  472. /package/dist/{utils → transaction/utils}/asyncIterator.js +0 -0
  473. /package/dist/{utils → transaction/utils}/duration.d.ts +0 -0
  474. /package/dist/{utils → transaction/utils}/duration.js +0 -0
  475. /package/dist/{wire → transaction/wire}/bootstrapReason.d.ts +0 -0
  476. /package/dist/{wire → transaction/wire}/bootstrapReason.js +0 -0
  477. /package/dist/{wire → transaction/wire}/protocol.d.ts +0 -0
  478. /package/dist/{wire → transaction/wire}/protocol.js +0 -0
  479. /package/dist/{wire → transaction/wire}/protocolVersion.d.ts +0 -0
  480. /package/dist/{wire → transaction/wire}/protocolVersion.js +0 -0
  481. /package/dist/transactions/{UnconfirmedWrites.d.ts → mutations/UnconfirmedWrites.d.ts} +0 -0
  482. /package/dist/transactions/{UnconfirmedWrites.js → mutations/UnconfirmedWrites.js} +0 -0
  483. /package/dist/transactions/{optimisticApply.js → mutations/optimisticApply.js} +0 -0
@@ -1,46 +1,6 @@
1
1
  /**
2
- * Waits for a queued claim to reach the head of the line the client side of
3
- * the fair-queue handover. When a claim is contended, the server puts it in a
4
- * queue and replies that it is queued (HTTP 202 on `/v1/claims`, or a
5
- * `claim_queued` frame over the WebSocket). The grant is delivered later, when
6
- * the claim reaches the head, as a `claim_granted` frame. This resolves once
7
- * that frame arrives for the given `claimId`, so the caller's `claim` promise
8
- * stays pending — event-driven, with no polling — until it is actually the
9
- * caller's turn. It rejects if the claim is lost (`claim_lost`: taken away by a
10
- * TTL lapse on disconnect, or revoked) or if an optional timeout elapses.
11
- *
12
- * It needs only a minimal `{ subscribe }` transport, so it can be tested
13
- * against a fake; {@link SyncWebSocket} satisfies it.
2
+ * Moved to the settlement core (ADR 0016): claim push is coordination, and
3
+ * coordination is the product. This path re-exports it so existing importers
4
+ * stay unchanged.
14
5
  */
15
- export interface GrantTransport {
16
- subscribe(event: 'claim_acquired' | 'claim_granted' | 'claim_lost' | 'claim_queued' | 'claim_rejected', handler: (payload: Record<string, unknown>) => void): () => void;
17
- }
18
- export interface ClaimGrantInfo {
19
- /**
20
- * True when the grant arrived as `claim_granted` — the target was held when
21
- * the caller asked, and the caller waited in the FIFO line behind the holder.
22
- * False for the immediate `claim_acquired`, where the target was free.
23
- *
24
- * Callers read this to know the row may have changed while they queued. Claim
25
- * visibility is scoped to the entity, so a broad, organization-wide
26
- * subscription receives no presence or claim fan-out, and the local
27
- * coordination snapshot cannot be trusted to tell whether the caller waited.
28
- * The grant frame itself is the authoritative signal.
29
- */
30
- readonly waited: boolean;
31
- /**
32
- * The fencing token the server minted for this grant (Option B), read off the
33
- * grant frame — the authoritative source, since the token is server-stamped.
34
- * `undefined` when the server does not fence (no minter wired).
35
- */
36
- readonly fenceToken?: number;
37
- }
38
- export declare function awaitClaimGrant(transport: GrantTransport, claimId: string, options?: {
39
- timeoutMs?: number;
40
- /**
41
- * Backpressure: reject instead of waiting if, when we join the line, the
42
- * server reports `position >= maxQueueDepth` (i.e. that many claims are
43
- * already ahead of us). Omit to wait however deep the queue is.
44
- */
45
- maxQueueDepth?: number;
46
- }): Promise<ClaimGrantInfo>;
6
+ export { awaitClaimGrant, type GrantTransport, type ClaimGrantInfo, } from '../transaction/coordination/awaitClaimGrant.js';
@@ -1,111 +1,6 @@
1
1
  /**
2
- * Waits for a queued claim to reach the head of the line the client side of
3
- * the fair-queue handover. When a claim is contended, the server puts it in a
4
- * queue and replies that it is queued (HTTP 202 on `/v1/claims`, or a
5
- * `claim_queued` frame over the WebSocket). The grant is delivered later, when
6
- * the claim reaches the head, as a `claim_granted` frame. This resolves once
7
- * that frame arrives for the given `claimId`, so the caller's `claim` promise
8
- * stays pending — event-driven, with no polling — until it is actually the
9
- * caller's turn. It rejects if the claim is lost (`claim_lost`: taken away by a
10
- * TTL lapse on disconnect, or revoked) or if an optional timeout elapses.
11
- *
12
- * It needs only a minimal `{ subscribe }` transport, so it can be tested
13
- * against a fake; {@link SyncWebSocket} satisfies it.
2
+ * Moved to the settlement core (ADR 0016): claim push is coordination, and
3
+ * coordination is the product. This path re-exports it so existing importers
4
+ * stay unchanged.
14
5
  */
15
- import { AbloClaimedError, formatClaimedErrorMessage, claimTargetLabel, } from '../errors.js';
16
- import { getContext } from '../context.js';
17
- /** Read the server-stamped fencing token off a grant frame, if present. */
18
- function readFenceToken(p) {
19
- return typeof p.fenceToken === 'number' ? p.fenceToken : undefined;
20
- }
21
- export function awaitClaimGrant(transport, claimId, options) {
22
- return new Promise((resolve, reject) => {
23
- const unsubs = [];
24
- let timer;
25
- const settle = (fn) => {
26
- if (timer)
27
- clearTimeout(timer);
28
- for (const u of unsubs)
29
- u();
30
- fn();
31
- };
32
- // The target was free → `claim_acquired` (immediate); it was contended,
33
- // we waited in line, and reached the head → `claim_granted`. Either frame
34
- // means the lease is now ours; `waited` records which path it was.
35
- unsubs.push(transport.subscribe('claim_acquired', (p) => {
36
- if (p?.claimId === claimId) {
37
- getContext().logger.debug(`claim: acquired ${claimId} (target was free)`);
38
- const fenceToken = readFenceToken(p);
39
- settle(() => {
40
- resolve({ waited: false, ...(fenceToken !== undefined ? { fenceToken } : {}) });
41
- });
42
- }
43
- }));
44
- unsubs.push(transport.subscribe('claim_granted', (p) => {
45
- if (p?.claimId === claimId) {
46
- // Promoted to the head of the line — the creator's "it's the agent's
47
- // turn now" moment after waiting behind a holder.
48
- getContext().logger.info(`claim: granted ${claimId} — your turn (waited in queue)`);
49
- const fenceToken = readFenceToken(p);
50
- settle(() => {
51
- resolve({ waited: true, ...(fenceToken !== undefined ? { fenceToken } : {}) });
52
- });
53
- }
54
- }));
55
- if (options?.maxQueueDepth !== undefined) {
56
- const max = options.maxQueueDepth;
57
- unsubs.push(transport.subscribe('claim_queued', (p) => {
58
- if (p?.claimId !== claimId)
59
- return;
60
- const position = typeof p.position === 'number' ? p.position : 0;
61
- if (position >= max) {
62
- settle(() => {
63
- reject(new AbloClaimedError(`Claim queue for ${claimId} is ${position} deep (max ${max}).`, { code: 'queue_too_deep' }));
64
- });
65
- }
66
- }));
67
- }
68
- unsubs.push(transport.subscribe('claim_rejected', (p) => {
69
- const rejection = p;
70
- if (rejection.claimId !== claimId)
71
- return;
72
- const target = rejection.target
73
- ? claimTargetLabel({
74
- model: rejection.target.entityType,
75
- id: rejection.target.entityId,
76
- field: rejection.target.field,
77
- })
78
- : claimId;
79
- settle(() => {
80
- reject(new AbloClaimedError(formatClaimedErrorMessage({
81
- targetLabel: target,
82
- heldBy: rejection.heldBy,
83
- claim: rejection.heldByClaim,
84
- policyReason: rejection.policyReason,
85
- fallback: `Claim rejected for ${target}.`,
86
- }), {
87
- code: rejection.reason === 'conflict'
88
- ? 'claim_conflict'
89
- : 'claim_lease_unavailable',
90
- claims: rejection.heldByClaim ? [rejection.heldByClaim] : undefined,
91
- }));
92
- });
93
- }));
94
- unsubs.push(transport.subscribe('claim_lost', (p) => {
95
- if (p?.claimId === claimId) {
96
- settle(() => {
97
- reject(new AbloClaimedError(`Claim lost while queued for ${claimId}.`, {
98
- code: 'claim_lost',
99
- }));
100
- });
101
- }
102
- }));
103
- if (options?.timeoutMs && options.timeoutMs > 0) {
104
- timer = setTimeout(() => {
105
- settle(() => {
106
- reject(new AbloClaimedError(`Timed out waiting for the queue grant on claim ${claimId}.`, { code: 'grant_timeout' }));
107
- });
108
- }, options.timeoutMs);
109
- }
110
- });
111
- }
6
+ export { awaitClaimGrant, } from '../transaction/coordination/awaitClaimGrant.js';
@@ -1,42 +1,8 @@
1
1
  /**
2
- * Builds the outgoing frames the sync WebSocket sends on the commit path, and
3
- * provides the single place claim events are traced. These are stateless
4
- * helpers that hold no socket state, so both the transport and its frame
5
- * dispatch can share them.
2
+ * Moved to the settlement core with the duplex transport (ADR 0016): the
3
+ * commit-path frame builders are stateless wire helpers. This path re-exports
4
+ * them so existing importers stay unchanged. The core's `buildCommitFrame`
5
+ * takes the structural `CommitFrameOperation` slice, which this package's
6
+ * `MutationOperation` satisfies.
6
7
  */
7
- import type { CommitMessage } from '../wire/index.js';
8
- import type { CommitAck as CanonicalCommitAck } from '../wire/commit.js';
9
- import type { MutationOperation, ClaimEvent } from '../interfaces/index.js';
10
- import type { StaleNotification, ReadDependency, TrackDependency } from '../coordination/schema.js';
11
- /**
12
- * The value a commit acknowledgement resolves to. `notifications` is present
13
- * only when a guarded write (`onStale: 'notify'`) met a concurrent change; it
14
- * carries the advisory signal that lets the writer self-heal, and the same
15
- * signal also arrives on the `conflict:notified` event.
16
- */
17
- export type CommitAck = CanonicalCommitAck;
18
- /**
19
- * Converts the client's list of {@link MutationOperation} values into the wire
20
- * {@link CommitMessage} the server accepts. This is the one place the loosely
21
- * typed operation — its `type` is a string, and it carries client-only
22
- * `options` the server never reads — becomes the strict wire contract. Mapping
23
- * each field by hand means a change to {@link CommitOperation} fails to compile
24
- * here; the single `as` cast narrows the validated `type` to the wire union and
25
- * is the only place that loosening happens.
26
- */
27
- export declare function buildCommitFrame(operations: readonly MutationOperation[], clientTxId: string, causedByTaskId?: string | null, reads?: readonly ReadDependency[] | null, track?: readonly TrackDependency[] | null): CommitMessage;
28
- /**
29
- * Defensively validate the optional `notifications` array off a commit ack.
30
- * Untrusted wire data — a malformed entry is dropped rather than throwing,
31
- * so a bad notification never sinks an otherwise-successful commit.
32
- */
33
- export declare function parseNotifications(raw: unknown): StaleNotification[] | undefined;
34
- /**
35
- * The single place claim events are traced. Every `claim_*` frame passes
36
- * through here, so a developer debugging a collision gets one consistent record
37
- * — a console line and a structured capture — without each frame case
38
- * re-deriving the row and holder shape. The wire payload is loosely typed
39
- * (`Record<string, unknown>`), so this is the one place that narrows it into a
40
- * {@link ClaimEvent}.
41
- */
42
- export declare function recordClaim(phase: ClaimEvent['phase'], payload: Record<string, unknown>): void;
8
+ export { buildCommitFrame, parseNotifications, recordClaim, type CommitAck, type CommitFrameOperation, type ClaimTracePorts, } from '../transaction/transport/commitFrames.js';
@@ -1,99 +1,8 @@
1
1
  /**
2
- * Builds the outgoing frames the sync WebSocket sends on the commit path, and
3
- * provides the single place claim events are traced. These are stateless
4
- * helpers that hold no socket state, so both the transport and its frame
5
- * dispatch can share them.
2
+ * Moved to the settlement core with the duplex transport (ADR 0016): the
3
+ * commit-path frame builders are stateless wire helpers. This path re-exports
4
+ * them so existing importers stay unchanged. The core's `buildCommitFrame`
5
+ * takes the structural `CommitFrameOperation` slice, which this package's
6
+ * `MutationOperation` satisfies.
6
7
  */
7
- import { getContext } from '../context.js';
8
- import { staleNotificationSchema, wireParticipantKindSchema, } from '../coordination/schema.js';
9
- import { formatClaim } from '../coordination/trace.js';
10
- /**
11
- * Converts the client's list of {@link MutationOperation} values into the wire
12
- * {@link CommitMessage} the server accepts. This is the one place the loosely
13
- * typed operation — its `type` is a string, and it carries client-only
14
- * `options` the server never reads — becomes the strict wire contract. Mapping
15
- * each field by hand means a change to {@link CommitOperation} fails to compile
16
- * here; the single `as` cast narrows the validated `type` to the wire union and
17
- * is the only place that loosening happens.
18
- */
19
- export function buildCommitFrame(operations, clientTxId, causedByTaskId, reads, track) {
20
- const payload = {
21
- operations: operations.map((op) => ({
22
- type: op.type,
23
- model: op.model,
24
- id: op.id,
25
- input: op.input,
26
- transactionId: op.transactionId,
27
- readAt: op.readAt,
28
- onStale: op.onStale,
29
- fenceToken: op.fenceToken,
30
- })),
31
- clientTxId,
32
- };
33
- if (causedByTaskId)
34
- payload.causedByTaskId = causedByTaskId;
35
- // The read set the batch was premised on: the rows or groups the writer read before committing.
36
- if (reads && reads.length > 0)
37
- payload.reads = [...reads];
38
- // Durable read-dependencies the writer is registering: the rows or groups it
39
- // wants to keep hearing about after this commit, delivered on a future receipt.
40
- if (track && track.length > 0)
41
- payload.track = [...track];
42
- return { type: 'commit', payload };
43
- }
44
- /**
45
- * Defensively validate the optional `notifications` array off a commit ack.
46
- * Untrusted wire data — a malformed entry is dropped rather than throwing,
47
- * so a bad notification never sinks an otherwise-successful commit.
48
- */
49
- export function parseNotifications(raw) {
50
- if (!Array.isArray(raw) || raw.length === 0)
51
- return undefined;
52
- const out = [];
53
- for (const entry of raw) {
54
- const parsed = staleNotificationSchema.safeParse(entry);
55
- if (parsed.success)
56
- out.push(parsed.data);
57
- }
58
- return out.length > 0 ? out : undefined;
59
- }
60
- /**
61
- * The single place claim events are traced. Every `claim_*` frame passes
62
- * through here, so a developer debugging a collision gets one consistent record
63
- * — a console line and a structured capture — without each frame case
64
- * re-deriving the row and holder shape. The wire payload is loosely typed
65
- * (`Record<string, unknown>`), so this is the one place that narrows it into a
66
- * {@link ClaimEvent}.
67
- */
68
- export function recordClaim(phase, payload) {
69
- const str = (v) => typeof v === 'string' ? v : undefined;
70
- // Targets arrive flat ({ entityType, entityId }) or nested under `target`.
71
- const target = payload.target && typeof payload.target === 'object'
72
- ? payload.target
73
- : payload;
74
- const kind = wireParticipantKindSchema.safeParse(payload.participantKind);
75
- const event = {
76
- phase,
77
- claimId: str(payload.claimId),
78
- model: str(target.entityType) ?? str(target.model),
79
- id: str(target.entityId) ?? str(target.id),
80
- field: str(target.field),
81
- actor: str(payload.actor) ?? str(payload.heldBy),
82
- participantKind: kind.success ? kind.data : undefined,
83
- position: typeof payload.position === 'number' ? payload.position : undefined,
84
- reason: str(payload.policyReason) ?? str(payload.reason),
85
- };
86
- const message = formatClaim(event);
87
- // A rejection or lost lease is the collision a developer is actively
88
- // debugging → warn (shows at the default log level). The routine events
89
- // (acquired/queued/granted/expired) are debug-only so they never drown the
90
- // console until you opt in with `new Ablo({ debug: true })`.
91
- const isCollision = phase === 'rejected' || phase === 'lost';
92
- const ctx = getContext();
93
- if (isCollision)
94
- ctx.logger.warn(message);
95
- else
96
- ctx.logger.debug(message);
97
- ctx.observability.breadcrumb(message, 'sync.coordination', isCollision ? 'warning' : 'info');
98
- ctx.observability.captureClaim(event);
99
- }
8
+ export { buildCommitFrame, parseNotifications, recordClaim, } from '../transaction/transport/commitFrames.js';
@@ -0,0 +1,18 @@
1
+ /**
2
+ * The runtime context, sliced into the ports the settlement core's transport
3
+ * takes. The core is injected, never service-located (ADR 0016), while this
4
+ * package resolves its shared dependencies through `getContext()` — so these
5
+ * adapters bridge the two: each method reads the context at call time, which
6
+ * preserves the lazy semantics of `getContext()` (a context installed after
7
+ * construction is still picked up, and the pre-init fallback still applies).
8
+ */
9
+ import type { Logger } from '../transaction/logger.js';
10
+ import type { SocketObservability } from '../transaction/observability.js';
11
+ /** The context's logger, resolved at call time. */
12
+ export declare const contextLogger: Logger;
13
+ /** The context's observability, resolved at call time, in the transport's shape. */
14
+ export declare const contextSocketObservability: SocketObservability;
15
+ /** The context's online-status provider, resolved at call time. */
16
+ export declare const contextOnlineStatus: {
17
+ isOnline: () => boolean;
18
+ };
@@ -0,0 +1,31 @@
1
+ /**
2
+ * The runtime context, sliced into the ports the settlement core's transport
3
+ * takes. The core is injected, never service-located (ADR 0016), while this
4
+ * package resolves its shared dependencies through `getContext()` — so these
5
+ * adapters bridge the two: each method reads the context at call time, which
6
+ * preserves the lazy semantics of `getContext()` (a context installed after
7
+ * construction is still picked up, and the pre-init fallback still applies).
8
+ */
9
+ import { getContext } from '../context.js';
10
+ /** The context's logger, resolved at call time. */
11
+ export const contextLogger = {
12
+ debug: (message, ...args) => { getContext().logger.debug(message, ...args); },
13
+ info: (message, ...args) => { getContext().logger.info(message, ...args); },
14
+ warn: (message, ...args) => { getContext().logger.warn(message, ...args); },
15
+ error: (message, ...args) => { getContext().logger.error(message, ...args); },
16
+ };
17
+ /** The context's observability, resolved at call time, in the transport's shape. */
18
+ export const contextSocketObservability = {
19
+ breadcrumb: (message, category, level, data) => {
20
+ getContext().observability.breadcrumb(message, category, level, data);
21
+ },
22
+ captureWebSocketError: (details) => {
23
+ getContext().observability.captureWebSocketError(details);
24
+ },
25
+ captureClaim: (event) => { getContext().observability.captureClaim(event); },
26
+ captureConflict: (event) => { getContext().observability.captureConflict(event); },
27
+ };
28
+ /** The context's online-status provider, resolved at call time. */
29
+ export const contextOnlineStatus = {
30
+ isOnline: () => getContext().onlineStatus.isOnline(),
31
+ };
@@ -1,51 +1,7 @@
1
1
  /**
2
- * Creates a {@link ClaimStream} over a live sync connection. A claim is a
3
- * short-lived, advisory lease a participant takes on an entity (or a field of
4
- * one) to signal "I'm working on this"; the stream lets you take claims, see
5
- * everyone else's, and watch the wait queue when a claim is contended.
6
- *
7
- * The stream is built directly on the sync WebSocket and shares that one
8
- * connection. It learns about other participants' claims from the same
9
- * `presence_update` frames the {@link createPresenceStream} presence stream
10
- * consumes — the server piggybacks each participant's `activeClaims` on every
11
- * presence frame — and sends its own claims as `claim_begin` and
12
- * `claim_abandon` frames.
13
- *
14
- * Wire frames:
15
- * • Outbound `claim_begin` — announce a claim: `{ claimId, entityType,
16
- * entityId, description, field?, estimatedMs? }`.
17
- * • Outbound `claim_abandon` — release it: `{ claimId, entityType?,
18
- * entityId? }`.
19
- * • Inbound, via presence — `event.activeClaims`, each stamped with
20
- * `declaredAt` and `expiresAt`.
21
- * • Inbound `claim_rejected` — the server refused the claim, with conflict
22
- * metadata.
2
+ * Moved to the settlement core (ADR 0016): claim push is coordination, and
3
+ * coordination is the product a contending agent wants `claim_granted`
4
+ * pushed exactly as much as a person does. This path re-exports it so
5
+ * existing importers stay unchanged.
23
6
  */
24
- import type { SyncWebSocket } from './SyncWebSocket.js';
25
- import type { ClaimOptions, Claim, ClaimStream, PresenceTarget } from '../types/streams.js';
26
- /**
27
- * The wire capability the claim stream actually uses: subscribe to typed
28
- * inbound frames, check liveness, and send outbound frames. `SyncWebSocket`
29
- * satisfies it, so production wiring is unchanged — but depending on the port
30
- * rather than the whole socket class lets a test drive it with a plain object,
31
- * no cast. `Pick` carries the exact (generic, typed-payload) `subscribe`
32
- * signature, so every handler stays fully typed.
33
- */
34
- export type ClaimTransport = Pick<SyncWebSocket, 'subscribe' | 'isConnected' | 'send'>;
35
- export interface ClaimStreamConfig {
36
- /** Identity used to filter our own active claims out of `others`. */
37
- participantId: string;
38
- }
39
- export interface AttachableClaimStream extends ClaimStream {
40
- /**
41
- * Mints a lease directly: sends the `claim_begin` frame and returns a held
42
- * {@link Claim} that carries no row `data` (the resource layer reads the row
43
- * and stamps it). This is an internal entry point, not part of the public
44
- * {@link ClaimStream}; application code takes a claim through
45
- * `ablo.<model>.claim({ id })`, which is built on this.
46
- */
47
- claim(target: PresenceTarget, opts?: ClaimOptions): Claim;
48
- attach(transport: ClaimTransport): void;
49
- dispose(): void;
50
- }
51
- export declare function createClaimStream(config: ClaimStreamConfig, transport?: ClaimTransport | null): AttachableClaimStream;
7
+ export { createClaimStream, type ClaimTransport, type ClaimStreamConfig, type AttachableClaimStream, } from '../transaction/coordination/createClaimStream.js';