@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,13 +1,11 @@
1
1
  /**
2
- * ModelRegistry - Type-safe model metadata management
3
- *
4
- * Key improvements:
5
- * - Instance-based for better testing
6
- * - Validation at registration
7
- * - Lazy reference resolution
8
- * - Crypto-based schema hashing
9
- * - Comprehensive error reporting
10
- * - Best practices from Linear Sync Engine
2
+ * ModelRegistry is the source of truth for model metadata: which model classes
3
+ * exist, the properties and references declared on each, the back-references
4
+ * used for cascade handling, and a stable hash of the whole schema.
5
+ * {@link Model} instances resolve their metadata through the active registry,
6
+ * and {@link InstanceCache} uses it to map between model names and constructor
7
+ * classes. References resolve lazily, so a model may declare a reference to
8
+ * another model that is registered later.
11
9
  */
12
10
  // Removed Node.js crypto import for browser compatibility
13
11
  import { PropertyType, LoadStrategy, } from './types/index.js';
@@ -43,19 +41,17 @@ export class ModelRegistry {
43
41
  properties = new Map();
44
42
  references = new Map();
45
43
  pendingReferences = new Map();
46
- // 🔧 PROPER FIX: Static mapping from constructor to model name.
47
- // Keyed `unknown` on purpose: lookups arrive as `this.constructor`
48
- // (Function) and as typed model classes — both accepted without casts.
44
+ // Maps a constructor back to its model name. Keyed as `unknown` on purpose:
45
+ // lookups arrive both as `this.constructor` (a Function) and as typed model
46
+ // classes, and both are accepted without a cast.
49
47
  constructorToModelName = new Map();
50
- // LINEAR PATTERN: BackReferences for cascade-aware transaction handling.
51
- // Maps childModelName BackReferenceMetadata[] (which parent models
52
- // own this child). The inverse direction (parentModelName children)
53
- // is derived on demand by `getChildModels`, populated only here.
48
+ // Back-references for cascade-aware transaction handling. Maps a child model
49
+ // name to the parent models it references. The inverse direction (parent to
50
+ // children) is derived on demand by `getChildModels`; it is populated here.
54
51
  backReferences = new Map();
55
52
  schemaHash;
56
53
  config;
57
54
  registeredModels = new Set();
58
- batchMode = false;
59
55
  pendingHashUpdate = false;
60
56
  constructor(config = {}) {
61
57
  this.config = {
@@ -169,7 +165,7 @@ export class ModelRegistry {
169
165
  const modelClass = constructor;
170
166
  this.models.set(name, modelClass);
171
167
  this.modelMetadata.set(name, metadata);
172
- // 🔧 PROPER FIX: Create reverse mapping from constructor to model name
168
+ // Record the reverse mapping from constructor to model name
173
169
  this.constructorToModelName.set(constructor, name);
174
170
  // Initialize property maps
175
171
  if (!this.properties.has(name)) {
@@ -246,13 +242,14 @@ export class ModelRegistry {
246
242
  this.completeReferenceRegistration(modelName, propertyName, metadata);
247
243
  }
248
244
  /**
249
- * LINEAR PATTERN: Register a back-reference for cascade-aware transaction handling
245
+ * Register a back-reference for cascade-aware transaction handling.
250
246
  *
251
- * When a parent model is deleted, the TransactionQueue will cancel pending
252
- * transactions for all child models that have a backReference to that parent.
247
+ * When a parent model is deleted, the transaction queue cancels pending
248
+ * transactions for every child model that declares a back-reference to that
249
+ * parent.
253
250
  *
254
- * @param childModelName - The model that has a FK to the parent (e.g., 'Slide')
255
- * @param metadata - BackReference configuration
251
+ * @param childModelName - The model that holds a foreign key to the parent (e.g., 'Slide')
252
+ * @param metadata - The back-reference configuration
256
253
  */
257
254
  registerBackReference(childModelName, metadata) {
258
255
  // Add to instance map
@@ -345,7 +342,9 @@ export class ModelRegistry {
345
342
  return children;
346
343
  }
347
344
  /**
348
- * Calculate schema hash using crypto
345
+ * Compute a stable hash of the registered schema — model names, property
346
+ * types, and their indexed and optional flags. Memoized until the schema
347
+ * changes.
349
348
  */
350
349
  getSchemaHash() {
351
350
  if (this.schemaHash)
@@ -428,7 +427,6 @@ export class ModelRegistry {
428
427
  * Start batch registration mode to optimize performance
429
428
  */
430
429
  startBatch() {
431
- this.batchMode = true;
432
430
  this.pendingHashUpdate = false;
433
431
  }
434
432
  /**
@@ -438,7 +436,6 @@ export class ModelRegistry {
438
436
  * End batch registration mode and update schema hash if needed
439
437
  */
440
438
  endBatch() {
441
- this.batchMode = false;
442
439
  if (this.pendingHashUpdate) {
443
440
  this.getSchemaHash(); // This will recalculate if needed
444
441
  this.pendingHashUpdate = false;
@@ -460,7 +457,6 @@ export class ModelRegistry {
460
457
  this.backReferences.clear();
461
458
  this.constructorToModelName.clear();
462
459
  this.schemaHash = undefined;
463
- this.batchMode = false;
464
460
  this.pendingHashUpdate = false;
465
461
  getContext().logger.info('ModelRegistry cleared');
466
462
  }
@@ -1,10 +1,9 @@
1
1
  /**
2
- * NetworkMonitor - Network connectivity tracking with visibility awareness
3
- *
4
- * Monitors online/offline state using browser events AND visibility changes.
5
- * When a tab becomes visible after being hidden (e.g., laptop sleep/wake),
6
- * the WebSocket may have silently died without triggering online/offline events.
7
- * The visibility handler detects this and emits 'online' to trigger recovery.
2
+ * NetworkMonitor tracks network connectivity and reports it through events.
3
+ * It listens to the browser's online and offline events, and it also watches
4
+ * for a tab becoming visible again: after a laptop sleep/wake or a long spell
5
+ * in the background, the WebSocket can die silently without an offline event
6
+ * firing, so returning to the tab emits a recovery signal the store can act on.
8
7
  */
9
8
  import { EventEmitter } from 'events';
10
9
  export declare class NetworkMonitor extends EventEmitter {
@@ -1,10 +1,9 @@
1
1
  /**
2
- * NetworkMonitor - Network connectivity tracking with visibility awareness
3
- *
4
- * Monitors online/offline state using browser events AND visibility changes.
5
- * When a tab becomes visible after being hidden (e.g., laptop sleep/wake),
6
- * the WebSocket may have silently died without triggering online/offline events.
7
- * The visibility handler detects this and emits 'online' to trigger recovery.
2
+ * NetworkMonitor tracks network connectivity and reports it through events.
3
+ * It listens to the browser's online and offline events, and it also watches
4
+ * for a tab becoming visible again: after a laptop sleep/wake or a long spell
5
+ * in the background, the WebSocket can die silently without an offline event
6
+ * firing, so returning to the tab emits a recovery signal the store can act on.
8
7
  */
9
8
  import { EventEmitter } from 'events';
10
9
  import { getContext } from './context.js';
@@ -1,20 +1,21 @@
1
1
  /**
2
- * SyncClient - Mutation and offline queue manager
3
- *
4
- * Responsibilities:
5
- * - Handle model mutations (create, update, delete, archive)
6
- * - Manage offline mutation queue with persistence
7
- * - Send mutations to server via API client
8
- * - Handle conflict resolution for local changes
2
+ * Applies model mutations and manages the offline write queue. The
3
+ * SyncClient turns local create, update, delete, and archive calls into
4
+ * optimistic changes, holds them while the client is offline, sends them to
5
+ * the server when connectivity returns, and resolves conflicts when the
6
+ * server's version of a row disagrees with the local one. It sits between the
7
+ * reactive object pool and the {@link TransactionQueue} that delivers writes
8
+ * over the network.
9
9
  */
10
- import { ObjectPool } from './ObjectPool.js';
10
+ import { InstanceCache } from './InstanceCache.js';
11
11
  import { Model } from './Model.js';
12
12
  import { EventEmitter } from 'events';
13
13
  import { TransactionQueue } from './transactions/TransactionQueue.js';
14
- import { type OptimisticEchoMetrics } from './transactions/OptimisticEchoTracker.js';
14
+ import { type UnconfirmedWritesMetrics } from './transactions/UnconfirmedWrites.js';
15
15
  import type { Database } from './Database.js';
16
16
  import type { WriteOptions } from './interfaces/index.js';
17
17
  import { SyncPosition } from './sync/syncPosition.js';
18
+ import { type CommitOutboxStore } from './transactions/commitOutboxStore.js';
18
19
  interface SyncObserver {
19
20
  onSync?: (event: SyncEvent) => void;
20
21
  }
@@ -44,39 +45,38 @@ export declare class SyncClient extends EventEmitter {
44
45
  private database;
45
46
  private get mutationExecutor();
46
47
  private networkMonitor;
47
- private transactionQueue;
48
48
  private observers;
49
49
  private userId;
50
50
  private organizationId;
51
51
  private pendingMutations;
52
- /**
53
- * Tracks transaction ids the client has optimistically applied but
54
- * the server has not yet confirmed. The receive path consults it
55
- * to recognize delta echoes of own mutations and suppress the
56
- * (otherwise-redundant) pool mutation — the IDB write still runs
57
- * because the delta is the authoritative version of the row.
58
- *
59
- * The receive-layer discriminator named in
60
- * `apps/sync-server/docs/OPTIMISTIC_RECONCILIATION.md`. Without
61
- * it, an optimistically-applied DELETE followed by a
62
- * server-confirming CREATE echo resurrects the row for the window
63
- * between the two confirmations (the chart-delete flicker).
52
+ private readonly stagedMutationIds;
53
+ private pendingJournalBatch;
54
+ private journalFlushScheduled;
55
+ private readonly commitOutboxNamespace;
56
+ /**
57
+ * Tracks the ids of transactions the client has applied optimistically but
58
+ * the server has not yet confirmed. When a delta arrives, the receive path
59
+ * consults this set to recognize the echo of the client's own mutation and
60
+ * skip the now-redundant pool update; the IndexedDB write still runs,
61
+ * because the delta is the authoritative version of the row. Without this
62
+ * discriminator, an optimistically applied delete followed by a
63
+ * server-confirmed create echo would resurrect the row for the window
64
+ * between the two confirmations.
64
65
  *
65
- * Bounded with FIFO eviction; observability via `getEchoMetrics()`.
66
+ * The set is bounded with first-in-first-out eviction, and
67
+ * {@link SyncClient.getEchoMetrics} exposes its counters.
66
68
  */
67
69
  private readonly echoTracker;
68
70
  private connectionState;
69
- private offlineSince?;
70
- private maxRetries;
71
71
  private isDisposed;
72
72
  /**
73
- * THE client's place in the global delta order the one canonical
74
- * instance (see `sync/syncPosition.ts`). The store advances
75
- * `applied`/`persisted` as deltas land; the queue advances `acked` on
76
- * commit responses; snapshots/claims read `readFloor`.
73
+ * The client's position in the global delta order, held as the single
74
+ * canonical {@link SyncPosition} instance. The store advances `applied` and
75
+ * `persisted` as deltas land, the queue advances `acked` on commit
76
+ * responses, and snapshots and claims read `readFloor`.
77
77
  */
78
78
  readonly position: SyncPosition;
79
- constructor(objectPool: ObjectPool, database: Database);
79
+ constructor(objectPool: InstanceCache, database: Database, commitOutbox?: CommitOutboxStore, commitOutboxNamespace?: string);
80
80
  /**
81
81
  * Setup network monitoring handlers
82
82
  */
@@ -104,20 +104,20 @@ export declare class SyncClient extends EventEmitter {
104
104
  */
105
105
  private setupTransactionRollbackHandling;
106
106
  /**
107
- * Forward reconciliation requests from TransactionQueue to the sync layer.
108
- * When delta confirmation times out, TransactionQueue emits 'reconciliation:needed'
109
- * instead of rolling back following the Replicache/PowerSync pattern of never
110
- * destroying optimistic state that the server may have committed.
107
+ * Forward reconciliation requests from the {@link TransactionQueue} to the
108
+ * sync layer. When delta confirmation times out, the queue emits
109
+ * `reconciliation:needed` instead of rolling back, so optimistic state the
110
+ * server may already have committed is never destroyed.
111
111
  */
112
112
  private setupReconciliationForwarding;
113
113
  /**
114
- * LINEAR PATTERN: Persist unconfirmed transactions to IndexedDB.
115
- * When delta confirmation retries exhaust, the transaction data is cached in IDB
116
- * so it survives tab close. On next session, WebSocket reconnect + delta catch-up
117
- * will deliver the missing deltas and naturally confirm the transaction.
114
+ * Persist unconfirmed transactions to IndexedDB. When delta-confirmation
115
+ * retries are exhausted, the transaction is cached so it survives a tab
116
+ * close. On the next session, a WebSocket reconnect and delta catch-up
117
+ * deliver the missing deltas and confirm the transaction.
118
118
  */
119
119
  private setupAwaitingTransactionPersistence;
120
- /** Persist an unconfirmed transaction to IDB (never rejects — failures are captured). */
120
+ /** Persist an unconfirmed transaction to IndexedDB (never rejects — failures are captured). */
121
121
  private persistAwaitingTransaction;
122
122
  /** Drop the persisted awaiting-row once confirmed (never rejects). */
123
123
  private removeAwaitingTransaction;
@@ -135,7 +135,7 @@ export declare class SyncClient extends EventEmitter {
135
135
  * Self-healing helper for individual model records.
136
136
  *
137
137
  * Two registry-driven repair passes run on every row hydrated from
138
- * IDB or merged from a delta:
138
+ * IndexedDB or merged from a delta:
139
139
  *
140
140
  * 1. **Auto-fill** — for each `autoFill` rule the consumer's schema
141
141
  * declares on this model, copy the corresponding identity value
@@ -156,12 +156,12 @@ export declare class SyncClient extends EventEmitter {
156
156
  healed: boolean;
157
157
  } | null;
158
158
  /**
159
- * Hydrate ObjectPool with data from Database
159
+ * Hydrate InstanceCache with data from Database
160
160
  * Called after bootstrap is complete
161
161
  */
162
162
  hydrateFromDatabase(): Promise<void>;
163
163
  /**
164
- * Re-hydrate ObjectPool from IndexedDB when the pool already has data.
164
+ * Re-hydrate InstanceCache from IndexedDB when the pool already has data.
165
165
  *
166
166
  * Unlike hydrateFromDatabase() (which uses addBatch and skips existing IDs),
167
167
  * this method properly:
@@ -172,13 +172,14 @@ export declare class SyncClient extends EventEmitter {
172
172
  */
173
173
  rehydrateFromDatabase(): Promise<RehydrationStats>;
174
174
  /**
175
- * Mutate model optimistically and queue for server sync.
176
- * IndexedDB is only updated when server confirms via delta packet.
175
+ * Apply a mutation to a model optimistically and queue it for server sync.
176
+ * IndexedDB is updated only once the server confirms the change with a delta
177
+ * packet.
177
178
  *
178
- * CRITICAL: Changes are captured BEFORE poolAction to prevent data loss.
179
- * The captured changes are frozen and passed to queueMutation.
180
- *
181
- * @see src/sync-engine/types/TrackableModel.ts for change capture pattern
179
+ * A model's changes are captured before the pool action runs, because a pool
180
+ * operation such as an upsert can clear the model's local change set;
181
+ * capturing first ensures those changes are never lost. The captured set is
182
+ * frozen and handed to {@link queueMutation}.
182
183
  */
183
184
  private mutate;
184
185
  private pendingChangedTypes;
@@ -210,8 +211,9 @@ export declare class SyncClient extends EventEmitter {
210
211
  */
211
212
  private clearPendingMutationsForModel;
212
213
  /**
213
- * Upload file and create attachment (UPLOAD operation)
214
- * Uses Linear-style pattern with immediate URL generation
214
+ * Upload a file and create its attachment record. The upload runs through
215
+ * the {@link TransactionQueue}, and a model is built from the server's
216
+ * response and added to the pool.
215
217
  */
216
218
  uploadFile(file: File, options: {
217
219
  id: string;
@@ -239,31 +241,33 @@ export declare class SyncClient extends EventEmitter {
239
241
  /** Archive model (ARCHIVE) - works offline */
240
242
  archive(model: Model): void;
241
243
  /**
242
- * Append a mutation and schedule its sync work.
244
+ * Append a mutation to the pending queue and schedule its sync work.
243
245
  *
244
- * IDB persistence and the server push are deferred to a microtask so N
245
- * pushes inside the same tick collapse into ONE IDB serialization + ONE
246
- * process call. Without the deferral, queueing 100 mutations (paste,
247
- * PPTX import, AI sandbox layer creation) reserializes the entire
248
- * growing queue 100× O(N²) `model.toJSON()`.
246
+ * IndexedDB persistence and the server push are deferred to a microtask, so
247
+ * many pushes within the same tick collapse into a single serialization and
248
+ * a single process call. Without the deferral, queueing a hundred mutations
249
+ * at once — a large paste, a document import, bulk layer creation would
250
+ * reserialize the whole growing queue a hundred times, an O(N²) cost in
251
+ * `model.toJSON()`.
249
252
  *
250
- * @param mutation.capturedChanges - Pre-captured changes (frozen), used
251
- * to avoid re-reading changes after pool ops that might clear them.
253
+ * @param mutation.capturedChanges - Pre-captured, frozen changes, used to
254
+ * avoid re-reading a model after pool operations that might clear them.
252
255
  */
253
256
  private queueMutation;
257
+ private scheduleJournalFlush;
258
+ private flushPendingMutationJournal;
254
259
  private syncScheduled;
255
260
  private scheduleSync;
261
+ private pendingMutationRecord;
262
+ private persistPendingMutation;
256
263
  /**
257
- * Persist mutation queue to IndexedDB
258
- */
259
- private persistMutationQueue;
260
- /**
261
- * Restore mutation queue from IndexedDB.
264
+ * Restore the mutation queue from IndexedDB.
262
265
  *
263
- * The persisted record was written by a PREVIOUS session (possibly an older
264
- * SDK build), so each entry is validated at this replay boundary (T1.8):
265
- * corrupt entries are dropped + logged at debug, and a failure never
266
- * vanishes into an empty catch offline write survival must be observable.
266
+ * The persisted record was written by an earlier session, possibly by an
267
+ * older build of the SDK, so each entry is validated as it is replayed:
268
+ * corrupt entries are dropped and logged at debug level, and a failure is
269
+ * never swallowed silently, because the survival of offline writes must be
270
+ * observable.
267
271
  */
268
272
  private restoreMutationQueue;
269
273
  /**
@@ -281,17 +285,16 @@ export declare class SyncClient extends EventEmitter {
281
285
  */
282
286
  private stageMutation;
283
287
  /**
284
- * Resolve conflicts between local and server data
285
- * Used when processing deltas from WebSocket
286
- *
287
- * CRITICAL: Always respects certain server states (deletes, deactivations)
288
- * even when there are local changes, to maintain data consistency.
288
+ * Resolve a conflict between the local model and incoming server data,
289
+ * called while processing deltas from the WebSocket. Certain server states,
290
+ * such as deletions and deactivations, always take precedence even when the
291
+ * local model has unsynced changes, so the two sides stay consistent.
289
292
  */
290
293
  resolveConflicts(localModel: Model, serverData: Record<string, unknown>): Model;
291
294
  /**
292
- * Extract critical state fields from server data
293
- * These are states that must always be respected, even with local changes.
294
- * The conflict brain reads exactly these known fields nothing else.
295
+ * Extract the critical state fields from server data. These are the states
296
+ * that must be honored even when the local model has unsynced changes. The
297
+ * conflict resolver reads exactly these fields and no others.
295
298
  */
296
299
  private extractCriticalState;
297
300
  /**
@@ -344,26 +347,26 @@ export declare class SyncClient extends EventEmitter {
344
347
  */
345
348
  dispose(): void;
346
349
  /**
347
- * LINEAR PATTERN: Notify TransactionQueue of incoming delta for sync ID threshold confirmation.
348
- * Transactions are confirmed when any delta with id >= their lastSyncId threshold arrives.
349
- * @param syncId - The sync ID of the received delta
350
+ * Notify the {@link TransactionQueue} of an incoming delta so it can confirm
351
+ * transactions by sync-id threshold. A transaction is confirmed once any
352
+ * delta with an id at or beyond its `lastSyncId` threshold arrives.
353
+ * @param syncId - The sync id of the received delta.
350
354
  */
351
355
  onDeltaReceived(syncId: number): void;
352
356
  /**
353
- * LINEAR PATTERN: Cancel transactions for orphaned child entities
354
- *
355
- * Called by SyncedStore when a DELETE delta arrives for a parent entity.
356
- * Cancels pending transactions for children that reference the deleted parent.
357
+ * Cancel pending transactions for child entities orphaned by a parent's
358
+ * deletion. The store calls this when a delete delta arrives for a parent,
359
+ * cancelling any queued writes on children that reference it.
357
360
  *
358
- * @param childModelName - The child model type (e.g., 'SlideLayer')
359
- * @param foreignKey - The FK property name (e.g., 'slideId')
360
- * @param parentId - The deleted parent's ID
361
- * @returns Number of transactions cancelled
361
+ * @param childModelName - The child model type (for example, `SlideLayer`).
362
+ * @param foreignKey - The foreign-key property name (for example, `slideId`).
363
+ * @param parentId - The id of the deleted parent.
364
+ * @returns The number of transactions cancelled.
362
365
  */
363
366
  cancelTransactionsByForeignKey(childModelName: string, foreignKey: string, parentId: string): number;
364
367
  /**
365
- * Wait for a transaction to be confirmed via delta echo (Linear pattern)
366
- * Delegates to TransactionQueue which already handles timeouts
368
+ * Wait for a transaction to be confirmed by its delta echo. Delegates to the
369
+ * {@link TransactionQueue}, which handles the confirmation timeout.
367
370
  */
368
371
  waitForDeltaConfirmation(transactionId: string): Promise<void>;
369
372
  /**
@@ -373,12 +376,12 @@ export declare class SyncClient extends EventEmitter {
373
376
  /**
374
377
  * Get sync statistics. Return type is inferred from the literal so
375
378
  * the call site sees the actual shape — `connectionState` narrowed
376
- * to its three states, `objectPoolStats` typed by `ObjectPool.getStats`.
379
+ * to its three states, `objectPoolStats` typed by `InstanceCache.getStats`.
377
380
  */
378
381
  getSyncStats(): {
379
382
  connectionState: 'connected' | 'disconnected' | 'connecting';
380
383
  pendingMutations: number;
381
- objectPoolStats: ReturnType<ObjectPool['getStats']>;
384
+ objectPoolStats: ReturnType<InstanceCache['getStats']>;
382
385
  };
383
386
  /**
384
387
  * Get pending transaction count from TransactionQueue
@@ -396,10 +399,10 @@ export declare class SyncClient extends EventEmitter {
396
399
  * can render typed UI (toast keyed by `AbloError.type`, route-level
397
400
  * "this entity reverted" boundaries, telemetry).
398
401
  *
399
- * Distinct from `onTransactionEvent('failed', cb)`, which exists only
400
- * for the legacy parameterless `pendingChanges` counter and intentionally
401
- * drops the payload. The two coexist — keep the counter callback fast
402
- * and the typed listener for user-visible surfaces.
402
+ * Distinct from `onTransactionEvent('failed', cb)`, which serves the
403
+ * parameterless `pendingChanges` counter and intentionally drops the
404
+ * payload. The two coexist: the counter callback stays lightweight, while
405
+ * this typed listener drives user-visible surfaces.
403
406
  */
404
407
  onMutationFailure(listener: (payload: {
405
408
  transaction: import('./transactions/TransactionQueue.js').Transaction;
@@ -407,15 +410,16 @@ export declare class SyncClient extends EventEmitter {
407
410
  permanent?: boolean;
408
411
  }) => void): () => void;
409
412
  /**
410
- * Subscribe to LOCAL transaction creation with the full {@link Transaction}
413
+ * Subscribe to local transaction creation with the full {@link Transaction}
411
414
  * payload (`type`, `modelName`, `modelId`, `data`, `previousData`). This is
412
- * the feed `BaseSyncedStore.subscribeLocalMutations` taps for undo recording.
415
+ * the feed the store's local-mutation subscription taps for undo recording.
413
416
  *
414
- * MUST subscribe to the TransactionQueue's emitter directly — that is the
415
- * ONLY emitter that fires `transaction:created`. SyncClient's own emitter
416
- * (reached via `subscribe()`) never re-broadcasts it, so routing undo through
417
- * `subscribe('transaction:created')` silently records nothing. Mirrors
418
- * `onMutationFailure`, which taps the queue for the same reason.
417
+ * It subscribes to the {@link TransactionQueue}'s emitter directly, since
418
+ * that is the only emitter that fires `transaction:created`. The SyncClient's
419
+ * own emitter (reached through {@link subscribe}) never rebroadcasts that
420
+ * event, so routing undo through `subscribe('transaction:created')` would
421
+ * record nothing. {@link onMutationFailure} taps the queue for the same
422
+ * reason.
419
423
  */
420
424
  onLocalTransaction(listener: (tx: import('./transactions/TransactionQueue.js').Transaction) => void): () => void;
421
425
  /**
@@ -464,9 +468,9 @@ export declare class SyncClient extends EventEmitter {
464
468
  unassignEntity(entityType: string, entityId: string): Promise<void>;
465
469
  reassignEntity(entityType: string, entityId: string, assigneeType: string, assigneeId: string, id?: string): Promise<void>;
466
470
  /**
467
- * Apply a batch of delta results from Database to the ObjectPool.
471
+ * Apply a batch of delta results from Database to the InstanceCache.
468
472
  * Owns: model creation, upsert, remove, archive, conflict resolution.
469
- * Returns: nothing — ObjectPool is updated in place.
473
+ * Returns: nothing — InstanceCache is updated in place.
470
474
  */
471
475
  /**
472
476
  * Mark a local transaction as optimistically applied. The matching
@@ -482,14 +486,14 @@ export declare class SyncClient extends EventEmitter {
482
486
  * — a sustained `evictions > 0` rate or `rollbacks` spike is a
483
487
  * health signal worth alerting on.
484
488
  */
485
- getEchoMetrics(): Readonly<OptimisticEchoMetrics>;
489
+ getEchoMetrics(): Readonly<UnconfirmedWritesMetrics>;
486
490
  /**
487
- * Package-internal accessor for the TransactionQueue. Used by
488
- * `Ablo.commits.create()` to route raw multi-op envelopes through the
489
- * same retry-on-reconnect lane as the Model proxy path, and by tests
490
- * to exercise the queue markTransactionPending wiring on the real
491
- * instance the SyncClient subscribes to. NOT re-exported to SDK
492
- * consumers `Ablo` itself is the public surface.
491
+ * Package-internal accessor for the {@link TransactionQueue}. Used by
492
+ * `Ablo.commits.create()` to route raw multi-operation envelopes through the
493
+ * same retry-on-reconnect lane as the model proxy path, and by tests to
494
+ * exercise the queue's interaction with {@link markTransactionPending} on the
495
+ * real instance the SyncClient subscribes to. It is not re-exported to SDK
496
+ * consumers; `Ablo` is the public surface.
493
497
  */
494
498
  getTransactionQueue(): TransactionQueue;
495
499
  applyDeltaBatchToPool(dbResults: {
@@ -507,7 +511,7 @@ export declare class SyncClient extends EventEmitter {
507
511
  transactionId?: string;
508
512
  }[], enrichRelations: (modelName: string, data: Record<string, unknown>) => Record<string, unknown>): void;
509
513
  /**
510
- * Apply bootstrap data to the ObjectPool with ghost removal.
514
+ * Apply bootstrap data to the InstanceCache with ghost removal.
511
515
  * Owns: model creation, batch upsert, ghost detection + removal.
512
516
  */
513
517
  applyBootstrapDataToPool(bootstrapData: {
@@ -515,13 +519,13 @@ export declare class SyncClient extends EventEmitter {
515
519
  failedModels?: string[];
516
520
  }, protectedIds?: ReadonlySet<string>, options?: {
517
521
  /**
518
- * SCOPED backfill (P4 hydrate-on-enter): the snapshot covers only the
519
- * groups just entered, NOT the whole type. Two behaviors change to keep
520
- * it from corrupting the pool:
521
- * - upsert is version-guarded ({@link ObjectPool.upsertIfNewer}) so a
522
- * concurrent live delta isn't clobbered back to the snapshot version;
523
- * - ghost removal is SKIPPED a subset snapshot must never evict rows
524
- * of the same type that belong to other (unhydrated) groups.
522
+ * Scoped backfill for the hydrate-on-enter path: the snapshot covers only
523
+ * the groups just entered, not the whole model type. Two behaviors change
524
+ * so the subset cannot corrupt the pool. First, the upsert is
525
+ * version-guarded ({@link InstanceCache.upsertIfNewer}) so a concurrent live
526
+ * delta is not clobbered back to the snapshot version. Second, ghost
527
+ * removal is skipped, because a subset snapshot must never evict rows of
528
+ * the same type that belong to other, unhydrated groups.
525
529
  */
526
530
  scoped?: boolean;
527
531
  }): {