@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,11 +1,9 @@
1
1
  /**
2
- * Ablo Sync Engine - Database Manager
3
- *
4
- * Manages the two-tier database architecture:
5
- * 1. ablo_databases - Metadata about workspace databases
6
- * 2. ablo_(hash) - Workspace-specific data storage
7
- *
8
- * Follows Ablo's architecture for database management.
2
+ * Manages the client-side IndexedDB databases the sync engine keeps in the
3
+ * browser. There are two tiers. A single registry database, `ablo_databases`,
4
+ * records metadata about every workspace database. Each user-and-workspace pair
5
+ * then gets its own data database, named `ablo_<hash>`, that holds the synced
6
+ * rows. {@link DatabaseManager} creates, versions, and deletes both tiers.
9
7
  */
10
8
  import { getContext } from '../context.js';
11
9
  import { openIDBWithTimeout, deleteIDBWithTimeout, IDBOpenTimeoutError, } from './openIDBWithTimeout.js';
@@ -90,7 +88,7 @@ export class DatabaseManager {
90
88
  else if (existingInfo) {
91
89
  schemaVersion = existingInfo.schemaVersion || 1;
92
90
  }
93
- // DEBUG: Log all existing databases for this user to detect duplicates
91
+ // Record the existing databases for this user so duplicates can be detected.
94
92
  const allUserDatabases = await this.getDatabasesForUser(userId);
95
93
  const allIndexedDBs = (await indexedDB.databases?.()) || [];
96
94
  const abloDatabases = allIndexedDBs.filter((db) => db.name?.startsWith('ablo_'));
@@ -117,7 +115,7 @@ export class DatabaseManager {
117
115
  generateDatabaseName(userId, workspaceId, userVersion = 1) {
118
116
  // Combine userId, workspaceId, and userVersion for unique database
119
117
  const combined = `${userId}:${workspaceId}:${userVersion}`;
120
- // Generate hash similar to Linear's approach
118
+ // Hash the combined key into a compact, deterministic identifier.
121
119
  let hash = 0;
122
120
  for (let i = 0; i < combined.length; i++) {
123
121
  hash = (hash << 5) - hash + combined.charCodeAt(i);
@@ -185,13 +183,12 @@ export class DatabaseManager {
185
183
  onUpgrade: (request, event) => {
186
184
  const db = request.result;
187
185
  const tx = event.target.transaction;
188
- // Per jakearchibald/idb's "Transaction Lifetime Management":
189
- // only IDB-request awaits keep an upgrade transaction alive; any
190
- // non-IDB await (fetch, timer, etc.) commits it prematurely and
191
- // later ops throw `TransactionInactiveError`. StoreManager.createStores
192
- // (src/core/StoreManager.ts:93) is only synchronous createObjectStore
193
- // / createIndex calls wrapped in an `async` keyword, so firing it
194
- // without awaiting is safe and matches the VCS-slot semantics.
186
+ // IndexedDB rule: only awaits on IndexedDB requests keep an upgrade
187
+ // transaction alive. Any other await a fetch, a timer — commits the
188
+ // transaction early, and later operations then throw
189
+ // `TransactionInactiveError`. StoreManager.createStores runs only
190
+ // synchronous createObjectStore / createIndex calls under an `async`
191
+ // keyword, so calling it without awaiting is safe here.
195
192
  if (createStoresFn && tx) {
196
193
  try {
197
194
  void createStoresFn(db, tx).catch((err) => {
@@ -238,9 +235,8 @@ export class DatabaseManager {
238
235
  updatedAt: data.updatedAt ? new Date(data.updatedAt) : new Date(),
239
236
  schemaHash: data.schemaHash,
240
237
  syncGroups: data.syncGroups,
241
- // NOTE: old persisted records may still carry a `versions` key
242
- // (the removed per-entity version vector) tolerated by simply
243
- // not picking it here.
238
+ // Older persisted records may still carry an extra `versions` key
239
+ // that is no longer used; it is tolerated by simply not reading it here.
244
240
  };
245
241
  resolve(meta);
246
242
  };
@@ -1,15 +1,13 @@
1
1
  /**
2
- * QueryProcessor - Centralized query processing for the sync engine
3
- *
4
- * Responsibilities:
5
- * - Complex filtering, sorting, and pagination logic
6
- * - Query optimization and caching strategies
7
- * - Predicate evaluation and result processing
8
- *
9
- * This extracts query processing logic from SyncedStore for proper separation of concerns
2
+ * Runs in-memory queries over a set of models — filtering by predicate,
3
+ * sorting, paginating, and caching the results. A caller hands
4
+ * {@link QueryProcessor} the candidate models and the query options, and it
5
+ * returns a {@link QueryResult}. It keeps two caches: a string-keyed cache for
6
+ * plain queries, and a structural-identity cache for predicate queries, whose
7
+ * closures cannot be turned into a stable string key.
10
8
  */
11
9
  import type { Model } from '../Model.js';
12
- import type { ModelScope } from '../ObjectPool.js';
10
+ import type { ModelScope } from '../InstanceCache.js';
13
11
  export interface QueryOptions<T extends Model> {
14
12
  predicate?: (model: T) => boolean;
15
13
  /** Stable key to distinguish different predicates for the same model type.
@@ -1,20 +1,17 @@
1
1
  /**
2
- * QueryProcessor - Centralized query processing for the sync engine
3
- *
4
- * Responsibilities:
5
- * - Complex filtering, sorting, and pagination logic
6
- * - Query optimization and caching strategies
7
- * - Predicate evaluation and result processing
8
- *
9
- * This extracts query processing logic from SyncedStore for proper separation of concerns
2
+ * Runs in-memory queries over a set of models — filtering by predicate,
3
+ * sorting, paginating, and caching the results. A caller hands
4
+ * {@link QueryProcessor} the candidate models and the query options, and it
5
+ * returns a {@link QueryResult}. It keeps two caches: a string-keyed cache for
6
+ * plain queries, and a structural-identity cache for predicate queries, whose
7
+ * closures cannot be turned into a stable string key.
10
8
  */
11
9
  /**
12
- * Optimized in-memory cache implementation
13
- *
14
- * 2025 Best Practice: O(1) invalidation by model type instead of O(n) regex matching
15
- * - Maintains a reverse index from model type to cache keys
16
- * - Invalidation by model type is O(k) where k = keys for that model type
17
- * - No regex compilation or full cache iteration needed
10
+ * The default in-memory cache. It keeps a reverse index from model type to the
11
+ * cache keys for that type, so invalidating one model type costs work
12
+ * proportional to that type's keys rather than a scan of the whole cache. A
13
+ * regex fallback still covers the rare pattern that is not a plain model-type
14
+ * match.
18
15
  */
19
16
  class BasicQueryCache {
20
17
  cache = new Map();
@@ -87,21 +84,19 @@ class BasicQueryCache {
87
84
  * Cache key format: "operation:ModelType:options"
88
85
  */
89
86
  extractModelType(key) {
90
- // `?? null` is equivalent to the old length check: a missing second
91
- // segment reads as undefined, and split never yields undefined otherwise.
87
+ // A missing second segment reads as undefined, so `?? null` yields null.
92
88
  return key.split(':')[1] ?? null;
93
89
  }
94
90
  }
95
91
  export class QueryProcessor {
96
92
  cache;
97
93
  enableCache;
98
- // Stable-reference cache for predicate queries.
99
- // String-based cache keys can't represent closures, so we use a separate
100
- // identity-based cache that compares result model IDs. This follows the same
101
- // principle as MobX's comparer.structural return the previous reference
102
- // when the structural content hasn't changed.
103
- // Key: deterministic portion of query (modelName + serializable options)
104
- // Value: previous result + its ID fingerprint
94
+ // Stable-reference cache for predicate queries. A string cache key cannot
95
+ // capture a closure, so predicate queries use a separate identity-based
96
+ // cache keyed on the deterministic part of the query (model name plus
97
+ // serializable options). Each entry stores the previous result and a
98
+ // fingerprint of its model ids; when the ids are unchanged, the processor
99
+ // returns the previous array reference so observers do not re-render.
105
100
  predicateResultCache = new Map();
106
101
  constructor(config = {}) {
107
102
  this.enableCache = config.enableCache ?? true;
@@ -137,10 +132,9 @@ export class QueryProcessor {
137
132
  hasMore: offset + limit < total,
138
133
  fromCache: false,
139
134
  };
140
- // For predicate queries: use structural identity comparison
141
- // Return the previous array reference if model IDs haven't changed.
142
- // This is the query-layer equivalent of MobX's comparer.structural —
143
- // observers won't re-render when the result is structurally identical.
135
+ // For predicate queries: compare by structural identity. Return the
136
+ // previous array reference when the model ids are unchanged, so observers
137
+ // don't re-render on a structurally identical result.
144
138
  if (options.predicate && this.enableCache) {
145
139
  const ids = data.map((m) => m.id).join(',');
146
140
  const cached = this.predicateResultCache.get(cacheKey);
@@ -151,7 +145,7 @@ export class QueryProcessor {
151
145
  // New result — store for future comparison
152
146
  this.predicateResultCache.set(cacheKey, { ids, result });
153
147
  }
154
- // For non-predicate queries: use string-based cache as before
148
+ // For non-predicate queries: use the string-based cache.
155
149
  if (!options.predicate && this.enableCache) {
156
150
  this.cache.set(cacheKey, result);
157
151
  }
@@ -12,13 +12,13 @@ import { type IObservableArray } from 'mobx';
12
12
  import { type Model } from '../Model.js';
13
13
  import { ModelScope } from '../types/index.js';
14
14
  import type { ViewRegistry } from './ViewRegistry.js';
15
- import type { IncrementalView } from './query-utils.js';
15
+ import type { IncrementalView } from './queryUtils.js';
16
16
  /**
17
- * The slice of `ObjectPool` a QueryView reads a minimal structural
18
- * interface (LogFoldContext-style) instead of the concrete class, so this
19
- * module never imports `../ObjectPool.js` back (ObjectPool imports QueryView
20
- * at runtime for `createView()`; the reverse edge was the last core-layer
21
- * import cycle). `ObjectPool` satisfies it structurally.
17
+ * The slice of the object pool that a {@link QueryView} reads. It is a minimal
18
+ * structural interface rather than the concrete pool class, which lets a query
19
+ * view avoid importing the pool and so breaks what would otherwise be an import
20
+ * cycle the pool imports {@link QueryView} to construct one. The concrete
21
+ * pool satisfies this interface structurally.
22
22
  */
23
23
  export interface QueryViewPool {
24
24
  hasForeignKeyIndex(typename: string, fieldName: string): boolean;
@@ -32,8 +32,8 @@ export interface QueryViewOptions<T> {
32
32
  order?: 'asc' | 'desc';
33
33
  limit?: number;
34
34
  offset?: number;
35
- /** Lifecycle filter — `live` (default), `archived`, or `all`. Named `state`
36
- * (GitHub's open/closed/all precedent) so it doesn't collide with the
35
+ /** Lifecycle filter — `live` (the default), `archived`, or `all`. It is
36
+ * named `state` rather than `scope` so it does not collide with the
37
37
  * sync-group `scope`. */
38
38
  state?: ModelScope;
39
39
  }
@@ -11,7 +11,7 @@
11
11
  import { observable, runInAction } from 'mobx';
12
12
  import { modelAsRow } from '../Model.js';
13
13
  import { ModelScope } from '../types/index.js';
14
- import { compareValues, binaryInsertionIndex, findIndexById, } from './query-utils.js';
14
+ import { compareValues, binaryInsertionIndex, findIndexById, } from './queryUtils.js';
15
15
  // ---------------------------------------------------------------------------
16
16
  // QueryView
17
17
  // ---------------------------------------------------------------------------
@@ -168,7 +168,7 @@ export class QueryView {
168
168
  // -----------------------------------------------------------------------
169
169
  /** Check whether an entity passes both `where` and `filter`. */
170
170
  matchesFilter(entity) {
171
- // Note: scope is tracked per-entry in the ObjectPool, not on the model.
171
+ // Note: scope is tracked per-entry in the InstanceCache, not on the model.
172
172
  // The initial scan handles scope via getByTypeName(typename, scope).
173
173
  // Incremental notifications from the pool are scope-appropriate since
174
174
  // add/upsert/remove reflect the pool's authoritative scope tracking.
@@ -1,9 +1,10 @@
1
1
  /**
2
- * Linear Sync Engine - Store Manager
3
- *
4
- * Manages all ObjectStore instances for registered models.
5
- * Creates appropriate store types based on model load strategies.
6
- * Follows Linear's architecture with 80+ ObjectStore instances.
2
+ * Manages the {@link ObjectStore} instances the sync engine keeps in the
3
+ * browser — one per registered model — alongside the single
4
+ * {@link SyncActionStore} for pending changes. It creates each store from the
5
+ * model's metadata, tracks readiness, and provisions the underlying IndexedDB
6
+ * object stores. A model's load strategy (instant, lazy, or partial) decides
7
+ * how and when its data is loaded.
7
8
  */
8
9
  import { ModelRegistry } from '../ModelRegistry.js';
9
10
  import { ObjectStore } from '../stores/ObjectStore.js';
@@ -20,6 +21,8 @@ import { LoadStrategy } from '../types/index.js';
20
21
  */
21
22
  export declare class StoreManager {
22
23
  private stores;
24
+ /** Strict-durability wrapper for the client write journal and commit outbox. */
25
+ private transactionStore;
23
26
  private syncactionStore;
24
27
  private db;
25
28
  private isInitialized;
@@ -63,15 +66,12 @@ export declare class StoreManager {
63
66
  totalStores: number;
64
67
  }>;
65
68
  /**
66
- * Check if ANY data store has at least one record.
67
- *
68
- * This is the Zero-style cache-validity check: if the stores are empty,
69
- * the sync cursor (lastSyncId) is invalid regardless of what the metadata
70
- * says. The cursor and the data must be co-located no data means no
71
- * cursor, which means full bootstrap.
72
- *
73
- * Samples up to 3 stores to avoid a full scan. If any store has records,
74
- * returns true (we have cached data worth preserving).
69
+ * Reports whether any data store holds at least one record. This is a
70
+ * cache-validity check: if the stores are empty, the sync cursor
71
+ * (`lastSyncId`) is meaningless no matter what the metadata says, because the
72
+ * cursor and the data must travel together no data means no cursor, which
73
+ * forces a full bootstrap. To stay cheap it samples up to three stores rather
74
+ * than scanning them all, and returns true as soon as one has records.
75
75
  */
76
76
  hasAnyData(): Promise<boolean>;
77
77
  /**
@@ -1,9 +1,10 @@
1
1
  /**
2
- * Linear Sync Engine - Store Manager
3
- *
4
- * Manages all ObjectStore instances for registered models.
5
- * Creates appropriate store types based on model load strategies.
6
- * Follows Linear's architecture with 80+ ObjectStore instances.
2
+ * Manages the {@link ObjectStore} instances the sync engine keeps in the
3
+ * browser — one per registered model — alongside the single
4
+ * {@link SyncActionStore} for pending changes. It creates each store from the
5
+ * model's metadata, tracks readiness, and provisions the underlying IndexedDB
6
+ * object stores. A model's load strategy (instant, lazy, or partial) decides
7
+ * how and when its data is loaded.
7
8
  */
8
9
  import { ModelRegistry } from '../ModelRegistry.js';
9
10
  import { ObjectStore } from '../stores/ObjectStore.js';
@@ -21,6 +22,8 @@ import { AbloValidationError } from '../errors.js';
21
22
  */
22
23
  export class StoreManager {
23
24
  stores = new Map();
25
+ /** Strict-durability wrapper for the client write journal and commit outbox. */
26
+ transactionStore = null;
24
27
  syncactionStore = null;
25
28
  db = null;
26
29
  isInitialized = false;
@@ -45,6 +48,12 @@ export class StoreManager {
45
48
  for (const modelName of allModels) {
46
49
  await this.createStoreForModel(modelName);
47
50
  }
51
+ // Special stores are created during the IDB upgrade, but unlike model
52
+ // stores they have no registry metadata and therefore need an explicit
53
+ // runtime wrapper. Outbox acknowledgement must mean disk-backed, so this
54
+ // store opts into strict durability rather than the cache stores' relaxed
55
+ // mode.
56
+ this.transactionStore = new ObjectStore(this.db, '__transactions', '__transactions', { loadStrategy: LoadStrategy.instant }, 'strict');
48
57
  // Initialize SyncactionStore
49
58
  this.syncactionStore = new SyncActionStore(this.db);
50
59
  await this.syncactionStore.initialize();
@@ -70,7 +79,7 @@ export class StoreManager {
70
79
  }
71
80
  // Use model name directly as store name
72
81
  const storeName = modelName;
73
- // Create ObjectStore (MVP: simplified - use single store type for all strategies)
82
+ // Create the ObjectStore. One store type currently serves every load strategy.
74
83
  const store = new ObjectStore(this.db, modelName, storeName, metadata);
75
84
  this.stores.set(modelName, store);
76
85
  }
@@ -122,7 +131,7 @@ export class StoreManager {
122
131
  }
123
132
  // Create __meta table for model persistence state and database metadata
124
133
  if (!db.objectStoreNames.contains('__meta')) {
125
- const metaStore = db.createObjectStore('__meta');
134
+ db.createObjectStore('__meta');
126
135
  getContext().logger.debug('Created __meta table');
127
136
  }
128
137
  // Create __transactions table for unsent transactions
@@ -141,6 +150,9 @@ export class StoreManager {
141
150
  * Get ObjectStore for a model
142
151
  */
143
152
  getStore(modelName) {
153
+ if (modelName === '__transactions') {
154
+ return this.transactionStore ?? undefined;
155
+ }
144
156
  return this.stores.get(modelName);
145
157
  }
146
158
  /**
@@ -184,15 +196,12 @@ export class StoreManager {
184
196
  };
185
197
  }
186
198
  /**
187
- * Check if ANY data store has at least one record.
188
- *
189
- * This is the Zero-style cache-validity check: if the stores are empty,
190
- * the sync cursor (lastSyncId) is invalid regardless of what the metadata
191
- * says. The cursor and the data must be co-located no data means no
192
- * cursor, which means full bootstrap.
193
- *
194
- * Samples up to 3 stores to avoid a full scan. If any store has records,
195
- * returns true (we have cached data worth preserving).
199
+ * Reports whether any data store holds at least one record. This is a
200
+ * cache-validity check: if the stores are empty, the sync cursor
201
+ * (`lastSyncId`) is meaningless no matter what the metadata says, because the
202
+ * cursor and the data must travel together no data means no cursor, which
203
+ * forces a full bootstrap. To stay cheap it samples up to three stores rather
204
+ * than scanning them all, and returns true as soon as one has records.
196
205
  */
197
206
  async hasAnyData() {
198
207
  const storeEntries = Array.from(this.stores);
@@ -281,8 +290,8 @@ export class StoreManager {
281
290
  * Clear all stores
282
291
  */
283
292
  async clearAllStores() {
284
- // Lifecycle chatter (logout / identity switch / reset) NOT a warning.
285
- // `debug` so it's silent under the default `warn` threshold.
293
+ // Lifecycle chatter (logout / identity switch / reset), not a warning.
294
+ // Logged at `debug` so it stays silent under the default `warn` threshold.
286
295
  getContext().logger.debug('Clearing all stores');
287
296
  const promises = Array.from(this.stores.values()).map((store) => store.clear());
288
297
  await Promise.all(promises);
@@ -297,12 +306,12 @@ export class StoreManager {
297
306
  for (const store of this.stores.values()) {
298
307
  store.markAsClosing();
299
308
  }
300
- // SyncActionStore is a standalone store (does NOT extend ObjectStore)
301
- // and has no markAsClosing equivalent. The previous `(syncactionStore
302
- // as any).markAsClosing?.()` was a silent no-op disguised as a real
303
- // call the optional chain swallowed the missing method. If
304
- // closing-state coordination is needed for sync actions, add it
305
- // explicitly to SyncActionStore rather than reintroducing the cast.
309
+ this.transactionStore?.markAsClosing();
310
+ // SyncActionStore is a standalone store that does not extend ObjectStore
311
+ // and has no markAsClosing equivalent, so it is intentionally skipped here.
312
+ // If closing-state coordination is ever needed for sync actions, add it
313
+ // explicitly to SyncActionStore rather than casting to reach a method that
314
+ // may not exist.
306
315
  getContext().logger.debug('All stores marked as closing');
307
316
  }
308
317
  /**
@@ -1,20 +1,20 @@
1
1
  /**
2
2
  * ViewRegistry — tracks active QueryViews per typename.
3
3
  *
4
- * When the ObjectPool mutates a model, it calls notifyAdded / notifyUpdated /
4
+ * When the InstanceCache mutates a model, it calls notifyAdded / notifyUpdated /
5
5
  * notifyRemoved on the registry, which fans the event out to every active
6
6
  * QueryView subscribed to that typename.
7
7
  */
8
8
  import { type Model } from '../Model.js';
9
- import type { IncrementalView } from './query-utils.js';
9
+ import type { IncrementalView } from './queryUtils.js';
10
10
  export declare class ViewRegistry {
11
11
  private views;
12
12
  register(typename: string, view: IncrementalView): void;
13
13
  unregister(typename: string, view: IncrementalView): void;
14
- /** Called by ObjectPool after a model is added to the pool. */
14
+ /** Called by InstanceCache after a model is added to the pool. */
15
15
  notifyAdded(typename: string, model: Model): void;
16
- /** Called by ObjectPool after a model is updated in the pool. */
16
+ /** Called by InstanceCache after a model is updated in the pool. */
17
17
  notifyUpdated(typename: string, model: Model): void;
18
- /** Called by ObjectPool after a model is removed from the pool. */
18
+ /** Called by InstanceCache after a model is removed from the pool. */
19
19
  notifyRemoved(typename: string, modelId: string): void;
20
20
  }
@@ -1,7 +1,7 @@
1
1
  /**
2
2
  * ViewRegistry — tracks active QueryViews per typename.
3
3
  *
4
- * When the ObjectPool mutates a model, it calls notifyAdded / notifyUpdated /
4
+ * When the InstanceCache mutates a model, it calls notifyAdded / notifyUpdated /
5
5
  * notifyRemoved on the registry, which fans the event out to every active
6
6
  * QueryView subscribed to that typename.
7
7
  */
@@ -25,7 +25,7 @@ export class ViewRegistry {
25
25
  this.views.delete(typename);
26
26
  }
27
27
  }
28
- /** Called by ObjectPool after a model is added to the pool. */
28
+ /** Called by InstanceCache after a model is added to the pool. */
29
29
  notifyAdded(typename, model) {
30
30
  const set = this.views.get(typename);
31
31
  if (!set)
@@ -34,7 +34,7 @@ export class ViewRegistry {
34
34
  view.handleAdded(modelAsRow(model));
35
35
  }
36
36
  }
37
- /** Called by ObjectPool after a model is updated in the pool. */
37
+ /** Called by InstanceCache after a model is updated in the pool. */
38
38
  notifyUpdated(typename, model) {
39
39
  const set = this.views.get(typename);
40
40
  if (!set)
@@ -43,7 +43,7 @@ export class ViewRegistry {
43
43
  view.handleUpdated(modelAsRow(model));
44
44
  }
45
45
  }
46
- /** Called by ObjectPool after a model is removed from the pool. */
46
+ /** Called by InstanceCache after a model is removed from the pool. */
47
47
  notifyRemoved(typename, modelId) {
48
48
  const set = this.views.get(typename);
49
49
  if (!set)
@@ -1,20 +1,22 @@
1
1
  /**
2
- * @abloatai/ablo/core Framework extension
2
+ * The framework-extension entry point of this package. Import from here only
3
+ * when you are building on top of the sync engine — wiring your own store and
4
+ * provider stack, writing a sync adapter, or driving a test harness. Everyday
5
+ * application code should use the `Ablo({ schema })` client from the package
6
+ * root instead; the primitives exported here are lower-level building blocks.
3
7
  *
4
- * Only imported by the handful of files that extend or orchestrate the
5
- * sync engine (the app-shell store/provider stack, sync adapters, demo
6
- * harnesses). Regular model files and components should NOT import from
7
- * here — the consumer surface is `Ablo({ schema })` on the root.
8
- *
9
- * TRIMMED to what framework-level consumers actually import (verified by
10
- * a monorepo-wide import scan). Everything else the engine defines stays
11
- * module-private: if a new framework concern genuinely needs another
12
- * primitive, add the export deliberately — don't re-widen the barrel.
8
+ * The surface is deliberately narrow: it exposes only the types and classes an
9
+ * extension actually needs. Anything the engine does not export here is
10
+ * internal and may change.
13
11
  */
14
12
  export { BaseSyncedStore, type ModelConstructor, type ConcreteModelConstructor, } from '../BaseSyncedStore.js';
15
13
  export { SyncClient } from '../SyncClient.js';
16
14
  export { Database } from '../Database.js';
17
- export { ObjectPool, ModelScope } from '../ObjectPool.js';
15
+ export { InstanceCache, ModelScope } from '../InstanceCache.js';
16
+ /** @deprecated `ObjectPool` was renamed to {@link InstanceCache} — the class is an
17
+ * identity-map cache of live model instances, not a reuse pool. This alias keeps existing
18
+ * imports working and will be removed in a future major version. */
19
+ export { InstanceCache as ObjectPool } from '../InstanceCache.js';
18
20
  export { Model } from '../Model.js';
19
21
  export { LazyReferenceCollection, type LazyCollectionOptions, } from '../LazyReferenceCollection.js';
20
22
  export { ModelRegistry, getActiveRegistry, } from '../ModelRegistry.js';
@@ -22,7 +24,10 @@ export { postQuery, type PostQueryOptions } from '../query/client.js';
22
24
  export { computeFKDepthPriority, type InternalAbloOptions } from '../client/Ablo.js';
23
25
  export type { SyncLogger, SyncObservabilityProvider, MutationExecutor, SessionErrorDetector, OnlineStatusProvider, CommitResult, MutationOperation, } from '../interfaces/index.js';
24
26
  export { SyncWebSocket, type SyncDelta, type SyncWebSocketOptions, } from '../sync/SyncWebSocket.js';
25
- export { BootstrapHelper } from '../sync/BootstrapHelper.js';
27
+ export { BootstrapFetcher } from '../sync/BootstrapFetcher.js';
28
+ /** @deprecated `BootstrapHelper` was renamed to {@link BootstrapFetcher}. This alias keeps
29
+ * existing imports working and will be removed in a future major version. */
30
+ export { BootstrapFetcher as BootstrapHelper } from '../sync/BootstrapFetcher.js';
26
31
  export { createClaimStream, type AttachableClaimStream, type ClaimStreamConfig, } from '../sync/createClaimStream.js';
27
32
  export { awaitClaimGrant, type GrantTransport, } from '../sync/awaitClaimGrant.js';
28
33
  export { LoadStrategy } from '../types/index.js';
@@ -1,42 +1,48 @@
1
1
  /**
2
- * @abloatai/ablo/core Framework extension
2
+ * The framework-extension entry point of this package. Import from here only
3
+ * when you are building on top of the sync engine — wiring your own store and
4
+ * provider stack, writing a sync adapter, or driving a test harness. Everyday
5
+ * application code should use the `Ablo({ schema })` client from the package
6
+ * root instead; the primitives exported here are lower-level building blocks.
3
7
  *
4
- * Only imported by the handful of files that extend or orchestrate the
5
- * sync engine (the app-shell store/provider stack, sync adapters, demo
6
- * harnesses). Regular model files and components should NOT import from
7
- * here — the consumer surface is `Ablo({ schema })` on the root.
8
- *
9
- * TRIMMED to what framework-level consumers actually import (verified by
10
- * a monorepo-wide import scan). Everything else the engine defines stays
11
- * module-private: if a new framework concern genuinely needs another
12
- * primitive, add the export deliberately — don't re-widen the barrel.
8
+ * The surface is deliberately narrow: it exposes only the types and classes an
9
+ * extension actually needs. Anything the engine does not export here is
10
+ * internal and may change.
13
11
  */
14
- // Base store class + the constructor shapes subclasses reference
12
+ // The base store class, plus the constructor shapes that subclasses reference.
15
13
  export { BaseSyncedStore, } from '../BaseSyncedStore.js';
16
14
  // Core infrastructure classes
17
15
  export { SyncClient } from '../SyncClient.js';
18
16
  export { Database } from '../Database.js';
19
- export { ObjectPool, ModelScope } from '../ObjectPool.js';
17
+ export { InstanceCache, ModelScope } from '../InstanceCache.js';
18
+ /** @deprecated `ObjectPool` was renamed to {@link InstanceCache} — the class is an
19
+ * identity-map cache of live model instances, not a reuse pool. This alias keeps existing
20
+ * imports working and will be removed in a future major version. */
21
+ export { InstanceCache as ObjectPool } from '../InstanceCache.js';
20
22
  export { Model } from '../Model.js';
21
23
  export { LazyReferenceCollection, } from '../LazyReferenceCollection.js';
22
24
  export { ModelRegistry, getActiveRegistry, } from '../ModelRegistry.js';
23
- // Lower-level network read for per-app demand loaders that haven't
24
- // migrated to `ablo.<model>.list(...)` yet.
25
+ // A lower-level network read primitive. Prefer `ablo.<model>.list(...)` for
26
+ // ordinary reads; reach for this only when writing a custom on-demand loader.
25
27
  export { postQuery } from '../query/client.js';
26
- // FK-cycle / dependency-order helper used by schema-aware test
27
- // fixtures and scaffolding tools to compute commit ordering.
28
+ // Computes a dependency-safe ordering for a set of models by walking their
29
+ // foreign-key relationships, so writes commit parents before children. Used by
30
+ // schema-aware test fixtures and scaffolding tools.
28
31
  export { computeFKDepthPriority } from '../client/Ablo.js';
29
- // Sync layer the wire socket + delta shape, for sync adapters and the
30
- // multi-agent demo harnesses.
32
+ // The sync layer: the WebSocket wrapper and the delta shape it carries. Needed
33
+ // when writing a sync adapter or a multi-participant test harness.
31
34
  export { SyncWebSocket, } from '../sync/SyncWebSocket.js';
32
- export { BootstrapHelper } from '../sync/BootstrapHelper.js';
33
- // Claim coordination primitives (the lower-level pieces behind the
34
- // consumer-facing `ablo.<model>.claim`). The stream factory builds the
35
- // announce/await machinery on a SyncWebSocket; `awaitClaimGrant` is the
36
- // fair-queue grant coordinator. Exposed on /core for framework-level
37
- // orchestration and e2e harnesses NOT on the consumer `.` root.
35
+ export { BootstrapFetcher } from '../sync/BootstrapFetcher.js';
36
+ /** @deprecated `BootstrapHelper` was renamed to {@link BootstrapFetcher}. This alias keeps
37
+ * existing imports working and will be removed in a future major version. */
38
+ export { BootstrapFetcher as BootstrapHelper } from '../sync/BootstrapFetcher.js';
39
+ // The lower-level claim-coordination primitives behind the `ablo.<model>.claim`
40
+ // API. `createClaimStream` builds the announce-and-await machinery on top of a
41
+ // `SyncWebSocket`; `awaitClaimGrant` coordinates fair, first-in-first-out
42
+ // grants. These are for extension code and test harnesses; ordinary
43
+ // application code should use `ablo.<model>.claim`.
38
44
  export { createClaimStream, } from '../sync/createClaimStream.js';
39
45
  export { awaitClaimGrant, } from '../sync/awaitClaimGrant.js';
40
- // Schema/model load strategy enum referenced by model registration in
41
- // framework code.
46
+ // An enum naming the strategies for loading a model's data. Referenced when
47
+ // registering models in extension code.
42
48
  export { LoadStrategy } from '../types/index.js';