@abloatai/ablo 0.36.0 → 0.37.1

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 (597) hide show
  1. package/AGENTS.md +2 -2
  2. package/CHANGELOG.md +55 -2014
  3. package/NOTICE +2 -2
  4. package/README.md +45 -63
  5. package/assets/banner.png +0 -0
  6. package/dist/auth.d.ts +2 -0
  7. package/dist/auth.d.ts.map +1 -0
  8. package/dist/auth.js +2 -0
  9. package/dist/auth.js.map +1 -0
  10. package/dist/client.d.ts +3 -0
  11. package/dist/client.d.ts.map +1 -0
  12. package/dist/client.js +3 -0
  13. package/dist/client.js.map +1 -0
  14. package/dist/coordination.d.ts +2 -0
  15. package/dist/coordination.d.ts.map +1 -0
  16. package/dist/coordination.js +2 -0
  17. package/dist/coordination.js.map +1 -0
  18. package/dist/index.d.ts +3 -114
  19. package/dist/index.d.ts.map +1 -0
  20. package/dist/index.js +3 -163
  21. package/dist/index.js.map +1 -0
  22. package/dist/react.d.ts +4 -0
  23. package/dist/react.d.ts.map +1 -0
  24. package/dist/react.js +3 -0
  25. package/dist/react.js.map +1 -0
  26. package/dist/schema.d.ts +2 -0
  27. package/dist/schema.d.ts.map +1 -0
  28. package/dist/schema.js +2 -0
  29. package/dist/schema.js.map +1 -0
  30. package/dist/server.d.ts +2 -0
  31. package/dist/server.d.ts.map +1 -0
  32. package/dist/server.js +2 -0
  33. package/dist/server.js.map +1 -0
  34. package/dist/source-conformance.d.ts +2 -0
  35. package/dist/source-conformance.d.ts.map +1 -0
  36. package/dist/source-conformance.js +2 -0
  37. package/dist/source-conformance.js.map +1 -0
  38. package/dist/source-drizzle.d.ts +2 -0
  39. package/dist/source-drizzle.d.ts.map +1 -0
  40. package/dist/source-drizzle.js +2 -0
  41. package/dist/source-drizzle.js.map +1 -0
  42. package/dist/source-kysely.d.ts +2 -0
  43. package/dist/source-kysely.d.ts.map +1 -0
  44. package/dist/source-kysely.js +2 -0
  45. package/dist/source-kysely.js.map +1 -0
  46. package/dist/source-next.d.ts +2 -0
  47. package/dist/source-next.d.ts.map +1 -0
  48. package/dist/source-next.js +2 -0
  49. package/dist/source-next.js.map +1 -0
  50. package/dist/source.d.ts +2 -0
  51. package/dist/source.d.ts.map +1 -0
  52. package/dist/source.js +2 -0
  53. package/dist/source.js.map +1 -0
  54. package/dist/wire.d.ts +2 -0
  55. package/dist/wire.d.ts.map +1 -0
  56. package/dist/wire.js +2 -0
  57. package/dist/wire.js.map +1 -0
  58. package/docs/agents.md +1 -1
  59. package/docs/api-keys.md +7 -6
  60. package/docs/api.md +10 -10
  61. package/docs/client-behavior.md +5 -5
  62. package/docs/coordination.md +52 -62
  63. package/docs/data-sources.md +1 -1
  64. package/docs/examples/agent-human.md +4 -4
  65. package/docs/examples/ai-sdk-tool.md +1 -1
  66. package/docs/examples/existing-python-backend.md +15 -4
  67. package/docs/examples/nextjs.md +27 -6
  68. package/docs/examples/server-agent.md +2 -2
  69. package/docs/how-it-works.md +4 -4
  70. package/docs/identity.md +2 -1
  71. package/docs/integration-guide.md +24 -13
  72. package/docs/internal/README.md +18 -0
  73. package/docs/internal/agent-fleet-coordination-design.md +171 -0
  74. package/docs/internal/agent-orchestration.md +58 -0
  75. package/docs/internal/commit-identifiers.md +91 -0
  76. package/docs/internal/concurrency-open-decisions.md +37 -0
  77. package/docs/internal/data-source-reverse-channel.md +150 -0
  78. package/docs/internal/per-field-conflict-detection.md +165 -0
  79. package/docs/internal/postgres-replication.md +64 -0
  80. package/docs/internal/serializable-schema.md +119 -0
  81. package/docs/internal/structure.md +32 -0
  82. package/docs/mcp.md +2 -2
  83. package/docs/migration.md +3 -3
  84. package/docs/quickstart.md +2 -2
  85. package/docs/react.md +5 -5
  86. package/docs/schema-contract.md +3 -3
  87. package/docs/sessions.md +91 -37
  88. package/examples/README.md +2 -2
  89. package/examples/data-source/README.md +1 -1
  90. package/examples/data-source/ablo-driver.ts +1 -1
  91. package/examples/data-source/customer-server.ts +1 -1
  92. package/examples/data-source/run.ts +1 -1
  93. package/examples/data-source/schema.ts +1 -1
  94. package/examples/quickstart.ts +2 -2
  95. package/llms.txt +8 -8
  96. package/package.json +63 -166
  97. package/bin/ablo.cjs +0 -39
  98. package/dist/BaseSyncedStore.d.ts +0 -843
  99. package/dist/BaseSyncedStore.js +0 -1971
  100. package/dist/Database.d.ts +0 -323
  101. package/dist/Database.js +0 -1502
  102. package/dist/InstanceCache.d.ts +0 -237
  103. package/dist/InstanceCache.js +0 -1166
  104. package/dist/LazyReferenceCollection.d.ts +0 -177
  105. package/dist/LazyReferenceCollection.js +0 -461
  106. package/dist/Model.d.ts +0 -454
  107. package/dist/Model.js +0 -919
  108. package/dist/ModelRegistry.d.ts +0 -225
  109. package/dist/ModelRegistry.js +0 -539
  110. package/dist/NetworkMonitor.d.ts +0 -28
  111. package/dist/NetworkMonitor.js +0 -79
  112. package/dist/RuntimeContext.d.ts +0 -52
  113. package/dist/RuntimeContext.js +0 -80
  114. package/dist/SyncClient.d.ts +0 -541
  115. package/dist/SyncClient.js +0 -2202
  116. package/dist/adapters/alwaysOnline.d.ts +0 -14
  117. package/dist/adapters/alwaysOnline.js +0 -17
  118. package/dist/adapters/inMemoryStorage.d.ts +0 -31
  119. package/dist/adapters/inMemoryStorage.js +0 -110
  120. package/dist/ai-sdk/coordinatedTool.d.ts +0 -120
  121. package/dist/ai-sdk/coordinatedTool.js +0 -134
  122. package/dist/ai-sdk/coordinationContext.d.ts +0 -46
  123. package/dist/ai-sdk/coordinationContext.js +0 -106
  124. package/dist/ai-sdk/index.d.ts +0 -121
  125. package/dist/ai-sdk/index.js +0 -121
  126. package/dist/ai-sdk/wrap.d.ts +0 -65
  127. package/dist/ai-sdk/wrap.js +0 -39
  128. package/dist/auth/index.d.ts +0 -1
  129. package/dist/auth/index.js +0 -8
  130. package/dist/batching/index.d.ts +0 -55
  131. package/dist/batching/index.js +0 -147
  132. package/dist/client/Ablo.d.ts +0 -231
  133. package/dist/client/Ablo.js +0 -160
  134. package/dist/client/abloClient.d.ts +0 -309
  135. package/dist/client/abloClient.js +0 -13
  136. package/dist/client/clientPrelude.d.ts +0 -52
  137. package/dist/client/clientPrelude.js +0 -60
  138. package/dist/client/consoleLogger.d.ts +0 -35
  139. package/dist/client/consoleLogger.js +0 -44
  140. package/dist/client/coreClient.d.ts +0 -60
  141. package/dist/client/coreClient.js +0 -118
  142. package/dist/client/createInternalComponents.d.ts +0 -50
  143. package/dist/client/createInternalComponents.js +0 -98
  144. package/dist/client/createModelProxy.d.ts +0 -248
  145. package/dist/client/createModelProxy.js +0 -884
  146. package/dist/client/humans.d.ts +0 -69
  147. package/dist/client/humans.js +0 -78
  148. package/dist/client/modelRegistration.d.ts +0 -10
  149. package/dist/client/modelRegistration.js +0 -312
  150. package/dist/client/options.d.ts +0 -461
  151. package/dist/client/options.js +0 -7
  152. package/dist/client/reactiveEngine.d.ts +0 -53
  153. package/dist/client/reactiveEngine.js +0 -688
  154. package/dist/client/resourceTypes.d.ts +0 -12
  155. package/dist/client/resourceTypes.js +0 -10
  156. package/dist/client/schemaConfig.d.ts +0 -44
  157. package/dist/client/schemaConfig.js +0 -185
  158. package/dist/client/storeCluster.d.ts +0 -47
  159. package/dist/client/storeCluster.js +0 -118
  160. package/dist/client/storeLifecycle.d.ts +0 -61
  161. package/dist/client/storeLifecycle.js +0 -231
  162. package/dist/client/validateAbloOptions.d.ts +0 -42
  163. package/dist/client/validateAbloOptions.js +0 -43
  164. package/dist/client/wsMutationExecutor.d.ts +0 -27
  165. package/dist/client/wsMutationExecutor.js +0 -72
  166. package/dist/context.d.ts +0 -42
  167. package/dist/context.js +0 -81
  168. package/dist/coordination/ClaimLog.d.ts +0 -26
  169. package/dist/coordination/ClaimLog.js +0 -32
  170. package/dist/coordination/index.d.ts +0 -1
  171. package/dist/coordination/index.js +0 -8
  172. package/dist/core/index.d.ts +0 -33
  173. package/dist/core/index.js +0 -48
  174. package/dist/docs/catalog.d.ts +0 -72
  175. package/dist/docs/catalog.js +0 -230
  176. package/dist/docs/index.d.ts +0 -10
  177. package/dist/docs/index.js +0 -10
  178. package/dist/environment.d.ts +0 -1
  179. package/dist/environment.js +0 -8
  180. package/dist/interfaces/index.d.ts +0 -311
  181. package/dist/interfaces/index.js +0 -9
  182. package/dist/keys/index.d.ts +0 -1
  183. package/dist/keys/index.js +0 -8
  184. package/dist/mutators/RecordingMutation.d.ts +0 -36
  185. package/dist/mutators/RecordingMutation.js +0 -182
  186. package/dist/mutators/Transaction.d.ts +0 -40
  187. package/dist/mutators/Transaction.js +0 -58
  188. package/dist/mutators/UndoManager.d.ts +0 -258
  189. package/dist/mutators/UndoManager.js +0 -658
  190. package/dist/mutators/defineMutators.d.ts +0 -60
  191. package/dist/mutators/defineMutators.js +0 -18
  192. package/dist/mutators/inverseOp.d.ts +0 -126
  193. package/dist/mutators/inverseOp.js +0 -71
  194. package/dist/mutators/mutateActions.d.ts +0 -45
  195. package/dist/mutators/mutateActions.js +0 -105
  196. package/dist/mutators/readerActions.d.ts +0 -33
  197. package/dist/mutators/readerActions.js +0 -57
  198. package/dist/mutators/undoApply.d.ts +0 -51
  199. package/dist/mutators/undoApply.js +0 -117
  200. package/dist/policy/index.d.ts +0 -21
  201. package/dist/policy/index.js +0 -20
  202. package/dist/query/QueryProcessor.d.ts +0 -75
  203. package/dist/query/QueryProcessor.js +0 -255
  204. package/dist/query/client.d.ts +0 -64
  205. package/dist/query/client.js +0 -138
  206. package/dist/query/types.d.ts +0 -85
  207. package/dist/query/types.js +0 -16
  208. package/dist/react/AbloProvider.d.ts +0 -242
  209. package/dist/react/AbloProvider.js +0 -458
  210. package/dist/react/ClientSideSuspense.d.ts +0 -36
  211. package/dist/react/ClientSideSuspense.js +0 -17
  212. package/dist/react/DefaultFallback.d.ts +0 -24
  213. package/dist/react/DefaultFallback.js +0 -43
  214. package/dist/react/context.d.ts +0 -55
  215. package/dist/react/context.js +0 -29
  216. package/dist/react/createAbloReact.d.ts +0 -56
  217. package/dist/react/createAbloReact.js +0 -51
  218. package/dist/react/index.d.ts +0 -62
  219. package/dist/react/index.js +0 -69
  220. package/dist/react/internalContext.d.ts +0 -33
  221. package/dist/react/internalContext.js +0 -3
  222. package/dist/react/useAblo.d.ts +0 -82
  223. package/dist/react/useAblo.js +0 -120
  224. package/dist/react/useCurrentUserId.d.ts +0 -22
  225. package/dist/react/useCurrentUserId.js +0 -34
  226. package/dist/react/useErrorListener.d.ts +0 -20
  227. package/dist/react/useErrorListener.js +0 -38
  228. package/dist/react/useMutationFailureListener.d.ts +0 -26
  229. package/dist/react/useMutationFailureListener.js +0 -38
  230. package/dist/react/useMutators.d.ts +0 -56
  231. package/dist/react/useMutators.js +0 -84
  232. package/dist/react/useReactive.d.ts +0 -35
  233. package/dist/react/useReactive.js +0 -123
  234. package/dist/react/useSyncStatus.d.ts +0 -59
  235. package/dist/react/useSyncStatus.js +0 -76
  236. package/dist/react/useUndoScope.d.ts +0 -34
  237. package/dist/react/useUndoScope.js +0 -81
  238. package/dist/schema/coordination.d.ts +0 -112
  239. package/dist/schema/coordination.js +0 -133
  240. package/dist/schema/ddl.d.ts +0 -97
  241. package/dist/schema/ddl.js +0 -491
  242. package/dist/schema/ddlLock.d.ts +0 -35
  243. package/dist/schema/ddlLock.js +0 -46
  244. package/dist/schema/diff.d.ts +0 -225
  245. package/dist/schema/diff.js +0 -289
  246. package/dist/schema/generate.d.ts +0 -19
  247. package/dist/schema/generate.js +0 -86
  248. package/dist/schema/index.d.ts +0 -42
  249. package/dist/schema/index.js +0 -80
  250. package/dist/schema/queries.d.ts +0 -201
  251. package/dist/schema/queries.js +0 -144
  252. package/dist/schema/select.d.ts +0 -40
  253. package/dist/schema/select.js +0 -90
  254. package/dist/schema/serialize.d.ts +0 -115
  255. package/dist/schema/serialize.js +0 -265
  256. package/dist/schema/sugar.d.ts +0 -109
  257. package/dist/schema/sugar.js +0 -83
  258. package/dist/schema/syncDeltaRow.d.ts +0 -6
  259. package/dist/schema/syncDeltaRow.js +0 -6
  260. package/dist/server/adapter.d.ts +0 -173
  261. package/dist/server/adapter.js +0 -18
  262. package/dist/server/commit.d.ts +0 -107
  263. package/dist/server/commit.js +0 -1
  264. package/dist/server/index.d.ts +0 -14
  265. package/dist/server/index.js +0 -2
  266. package/dist/server/readConfig.d.ts +0 -80
  267. package/dist/server/readConfig.js +0 -8
  268. package/dist/server/storageMode.d.ts +0 -23
  269. package/dist/server/storageMode.js +0 -17
  270. package/dist/source/adapter.d.ts +0 -83
  271. package/dist/source/adapter.js +0 -24
  272. package/dist/source/adapters/drizzle.d.ts +0 -48
  273. package/dist/source/adapters/drizzle.js +0 -219
  274. package/dist/source/adapters/kysely.d.ts +0 -42
  275. package/dist/source/adapters/kysely.js +0 -205
  276. package/dist/source/adapters/kyselyMutationCore.d.ts +0 -76
  277. package/dist/source/adapters/kyselyMutationCore.js +0 -125
  278. package/dist/source/adapters/memory.d.ts +0 -13
  279. package/dist/source/adapters/memory.js +0 -130
  280. package/dist/source/adapters/prisma.d.ts +0 -63
  281. package/dist/source/adapters/prisma.js +0 -202
  282. package/dist/source/conformance.d.ts +0 -37
  283. package/dist/source/conformance.js +0 -215
  284. package/dist/source/connector.d.ts +0 -95
  285. package/dist/source/connector.js +0 -266
  286. package/dist/source/connectorProtocol.d.ts +0 -154
  287. package/dist/source/connectorProtocol.js +0 -163
  288. package/dist/source/contract.d.ts +0 -195
  289. package/dist/source/contract.js +0 -164
  290. package/dist/source/factory.d.ts +0 -92
  291. package/dist/source/factory.js +0 -286
  292. package/dist/source/idempotency.d.ts +0 -61
  293. package/dist/source/idempotency.js +0 -144
  294. package/dist/source/index.d.ts +0 -23
  295. package/dist/source/index.js +0 -30
  296. package/dist/source/migrations.d.ts +0 -21
  297. package/dist/source/migrations.js +0 -103
  298. package/dist/source/next.d.ts +0 -32
  299. package/dist/source/next.js +0 -25
  300. package/dist/source/pushQueue.d.ts +0 -134
  301. package/dist/source/pushQueue.js +0 -256
  302. package/dist/source/signing.d.ts +0 -92
  303. package/dist/source/signing.js +0 -162
  304. package/dist/source/types.d.ts +0 -401
  305. package/dist/source/types.js +0 -59
  306. package/dist/storeContract.d.ts +0 -145
  307. package/dist/storeContract.js +0 -12
  308. package/dist/stores/DatabaseManager.d.ts +0 -107
  309. package/dist/stores/DatabaseManager.js +0 -388
  310. package/dist/stores/ObjectStore.d.ts +0 -115
  311. package/dist/stores/ObjectStore.js +0 -393
  312. package/dist/stores/ObjectStoreContract.d.ts +0 -38
  313. package/dist/stores/ObjectStoreContract.js +0 -1
  314. package/dist/stores/StoreManager.d.ts +0 -114
  315. package/dist/stores/StoreManager.js +0 -304
  316. package/dist/stores/SyncActionStore.d.ts +0 -99
  317. package/dist/stores/SyncActionStore.js +0 -506
  318. package/dist/stores/openIDBWithTimeout.d.ts +0 -65
  319. package/dist/stores/openIDBWithTimeout.js +0 -153
  320. package/dist/stores/syncAction.d.ts +0 -26
  321. package/dist/stores/syncAction.js +0 -16
  322. package/dist/surface.d.ts +0 -36
  323. package/dist/surface.js +0 -75
  324. package/dist/sync/BootstrapFetcher.d.ts +0 -284
  325. package/dist/sync/BootstrapFetcher.js +0 -964
  326. package/dist/sync/ConnectionManager.d.ts +0 -8
  327. package/dist/sync/ConnectionManager.js +0 -8
  328. package/dist/sync/OnDemandLoader.d.ts +0 -231
  329. package/dist/sync/OnDemandLoader.js +0 -743
  330. package/dist/sync/SubscriptionManager.d.ts +0 -159
  331. package/dist/sync/SubscriptionManager.js +0 -243
  332. package/dist/sync/SyncWebSocket.d.ts +0 -173
  333. package/dist/sync/SyncWebSocket.js +0 -438
  334. package/dist/sync/awaitClaimGrant.d.ts +0 -6
  335. package/dist/sync/awaitClaimGrant.js +0 -6
  336. package/dist/sync/bootstrapApply.d.ts +0 -73
  337. package/dist/sync/bootstrapApply.js +0 -73
  338. package/dist/sync/commitFrames.d.ts +0 -8
  339. package/dist/sync/commitFrames.js +0 -8
  340. package/dist/sync/contextPorts.d.ts +0 -18
  341. package/dist/sync/contextPorts.js +0 -31
  342. package/dist/sync/createClaimStream.d.ts +0 -7
  343. package/dist/sync/createClaimStream.js +0 -7
  344. package/dist/sync/createPresenceStream.d.ts +0 -69
  345. package/dist/sync/createPresenceStream.js +0 -200
  346. package/dist/sync/createSnapshot.d.ts +0 -29
  347. package/dist/sync/createSnapshot.js +0 -118
  348. package/dist/sync/credentialLifecycle.d.ts +0 -7
  349. package/dist/sync/credentialLifecycle.js +0 -7
  350. package/dist/sync/deltaPipeline.d.ts +0 -114
  351. package/dist/sync/deltaPipeline.js +0 -278
  352. package/dist/sync/groupChange.d.ts +0 -116
  353. package/dist/sync/groupChange.js +0 -244
  354. package/dist/sync/participants.d.ts +0 -132
  355. package/dist/sync/participants.js +0 -346
  356. package/dist/sync/persistedPrefix.d.ts +0 -12
  357. package/dist/sync/persistedPrefix.js +0 -22
  358. package/dist/sync/schemaDrift.d.ts +0 -55
  359. package/dist/sync/schemaDrift.js +0 -53
  360. package/dist/sync/schemas.d.ts +0 -71
  361. package/dist/sync/schemas.js +0 -94
  362. package/dist/sync/syncCursor.d.ts +0 -40
  363. package/dist/sync/syncCursor.js +0 -55
  364. package/dist/sync/syncPlan.d.ts +0 -54
  365. package/dist/sync/syncPlan.js +0 -50
  366. package/dist/sync/wsFrameHandlers.d.ts +0 -8
  367. package/dist/sync/wsFrameHandlers.js +0 -8
  368. package/dist/syncLog/contract.d.ts +0 -20
  369. package/dist/syncLog/contract.js +0 -19
  370. package/dist/syncLog/index.d.ts +0 -1
  371. package/dist/syncLog/index.js +0 -1
  372. package/dist/transaction/ablo.d.ts +0 -88
  373. package/dist/transaction/ablo.js +0 -33
  374. package/dist/transaction/auth/apiKey.d.ts +0 -152
  375. package/dist/transaction/auth/apiKey.js +0 -419
  376. package/dist/transaction/auth/bootstrapScope.d.ts +0 -15
  377. package/dist/transaction/auth/bootstrapScope.js +0 -1
  378. package/dist/transaction/auth/capability.d.ts +0 -212
  379. package/dist/transaction/auth/capability.js +0 -224
  380. package/dist/transaction/auth/credentialEndpoint.d.ts +0 -61
  381. package/dist/transaction/auth/credentialEndpoint.js +0 -86
  382. package/dist/transaction/auth/credentialPolicy.d.ts +0 -148
  383. package/dist/transaction/auth/credentialPolicy.js +0 -125
  384. package/dist/transaction/auth/credentialSource.d.ts +0 -30
  385. package/dist/transaction/auth/credentialSource.js +0 -55
  386. package/dist/transaction/auth/hostedEndpoints.d.ts +0 -21
  387. package/dist/transaction/auth/hostedEndpoints.js +0 -21
  388. package/dist/transaction/auth/identity.d.ts +0 -55
  389. package/dist/transaction/auth/identity.js +0 -210
  390. package/dist/transaction/auth/index.d.ts +0 -162
  391. package/dist/transaction/auth/index.js +0 -304
  392. package/dist/transaction/auth/schemas.d.ts +0 -59
  393. package/dist/transaction/auth/schemas.js +0 -85
  394. package/dist/transaction/auth/sessionMint.d.ts +0 -28
  395. package/dist/transaction/auth/sessionMint.js +0 -85
  396. package/dist/transaction/coordination/awaitClaimGrant.d.ts +0 -56
  397. package/dist/transaction/coordination/awaitClaimGrant.js +0 -124
  398. package/dist/transaction/coordination/claimHeartbeatLoop.d.ts +0 -84
  399. package/dist/transaction/coordination/claimHeartbeatLoop.js +0 -108
  400. package/dist/transaction/coordination/claimMeta.d.ts +0 -49
  401. package/dist/transaction/coordination/claimMeta.js +0 -52
  402. package/dist/transaction/coordination/createClaimStream.d.ts +0 -64
  403. package/dist/transaction/coordination/createClaimStream.js +0 -475
  404. package/dist/transaction/coordination/events.d.ts +0 -74
  405. package/dist/transaction/coordination/events.js +0 -7
  406. package/dist/transaction/coordination/index.d.ts +0 -19
  407. package/dist/transaction/coordination/index.js +0 -45
  408. package/dist/transaction/coordination/locator.d.ts +0 -104
  409. package/dist/transaction/coordination/locator.js +0 -102
  410. package/dist/transaction/coordination/schema.d.ts +0 -1536
  411. package/dist/transaction/coordination/schema.js +0 -1177
  412. package/dist/transaction/coordination/targetConflict.d.ts +0 -2
  413. package/dist/transaction/coordination/targetConflict.js +0 -107
  414. package/dist/transaction/coordination/trace.d.ts +0 -78
  415. package/dist/transaction/coordination/trace.js +0 -138
  416. package/dist/transaction/durableWrites.d.ts +0 -62
  417. package/dist/transaction/durableWrites.js +0 -71
  418. package/dist/transaction/environment.d.ts +0 -105
  419. package/dist/transaction/environment.js +0 -108
  420. package/dist/transaction/errorCodes.d.ts +0 -403
  421. package/dist/transaction/errorCodes.js +0 -484
  422. package/dist/transaction/errors.d.ts +0 -428
  423. package/dist/transaction/errors.js +0 -686
  424. package/dist/transaction/footprint.d.ts +0 -111
  425. package/dist/transaction/footprint.js +0 -0
  426. package/dist/transaction/index.d.ts +0 -20
  427. package/dist/transaction/index.js +0 -20
  428. package/dist/transaction/keys/index.d.ts +0 -87
  429. package/dist/transaction/keys/index.js +0 -207
  430. package/dist/transaction/log/syncDeltaRow.d.ts +0 -158
  431. package/dist/transaction/log/syncDeltaRow.js +0 -95
  432. package/dist/transaction/logPosition.d.ts +0 -97
  433. package/dist/transaction/logPosition.js +0 -125
  434. package/dist/transaction/logger.d.ts +0 -16
  435. package/dist/transaction/logger.js +0 -7
  436. package/dist/transaction/observability.d.ts +0 -53
  437. package/dist/transaction/observability.js +0 -19
  438. package/dist/transaction/persistence.d.ts +0 -12
  439. package/dist/transaction/persistence.js +0 -11
  440. package/dist/transaction/plugin.d.ts +0 -285
  441. package/dist/transaction/plugin.js +0 -106
  442. package/dist/transaction/policy/types.d.ts +0 -217
  443. package/dist/transaction/policy/types.js +0 -126
  444. package/dist/transaction/resources/functionalUpdate.d.ts +0 -79
  445. package/dist/transaction/resources/functionalUpdate.js +0 -87
  446. package/dist/transaction/resources/httpResources.d.ts +0 -321
  447. package/dist/transaction/resources/httpResources.js +0 -7
  448. package/dist/transaction/resources/modelOperations.d.ts +0 -427
  449. package/dist/transaction/resources/modelOperations.js +0 -12
  450. package/dist/transaction/resources/mutationOptions.d.ts +0 -66
  451. package/dist/transaction/resources/mutationOptions.js +0 -9
  452. package/dist/transaction/resources/where.d.ts +0 -101
  453. package/dist/transaction/resources/where.js +0 -115
  454. package/dist/transaction/resources/writeOptionsSchema.d.ts +0 -47
  455. package/dist/transaction/resources/writeOptionsSchema.js +0 -73
  456. package/dist/transaction/schema/field.d.ts +0 -120
  457. package/dist/transaction/schema/field.js +0 -265
  458. package/dist/transaction/schema/fieldRef.d.ts +0 -38
  459. package/dist/transaction/schema/fieldRef.js +0 -11
  460. package/dist/transaction/schema/loadStrategy.d.ts +0 -45
  461. package/dist/transaction/schema/loadStrategy.js +0 -46
  462. package/dist/transaction/schema/model.d.ts +0 -379
  463. package/dist/transaction/schema/model.js +0 -123
  464. package/dist/transaction/schema/openapi.d.ts +0 -58
  465. package/dist/transaction/schema/openapi.js +0 -501
  466. package/dist/transaction/schema/relation.d.ts +0 -204
  467. package/dist/transaction/schema/relation.js +0 -104
  468. package/dist/transaction/schema/residency.d.ts +0 -29
  469. package/dist/transaction/schema/residency.js +0 -25
  470. package/dist/transaction/schema/roles.d.ts +0 -249
  471. package/dist/transaction/schema/roles.js +0 -230
  472. package/dist/transaction/schema/schema.d.ts +0 -351
  473. package/dist/transaction/schema/schema.js +0 -325
  474. package/dist/transaction/schema/tenancy.d.ts +0 -139
  475. package/dist/transaction/schema/tenancy.js +0 -190
  476. package/dist/transaction/transactionLayer.d.ts +0 -82
  477. package/dist/transaction/transactionLayer.js +0 -24
  478. package/dist/transaction/transactions/settlement/commitEnvelope.d.ts +0 -143
  479. package/dist/transaction/transactions/settlement/commitEnvelope.js +0 -161
  480. package/dist/transaction/transactions/settlement/httpCommitEnvelope.d.ts +0 -53
  481. package/dist/transaction/transactions/settlement/httpCommitEnvelope.js +0 -207
  482. package/dist/transaction/transactions/settlement/idempotencyKey.d.ts +0 -10
  483. package/dist/transaction/transactions/settlement/idempotencyKey.js +0 -9
  484. package/dist/transaction/transactions/settlement/pendingWrite.d.ts +0 -112
  485. package/dist/transaction/transactions/settlement/pendingWrite.js +0 -20
  486. package/dist/transaction/transport/commitFrames.d.ts +0 -90
  487. package/dist/transaction/transport/commitFrames.js +0 -134
  488. package/dist/transaction/transport/connectionManager.d.ts +0 -215
  489. package/dist/transaction/transport/connectionManager.js +0 -673
  490. package/dist/transaction/transport/credentialLifecycle.d.ts +0 -177
  491. package/dist/transaction/transport/credentialLifecycle.js +0 -324
  492. package/dist/transaction/transport/heartbeat.d.ts +0 -65
  493. package/dist/transaction/transport/heartbeat.js +0 -93
  494. package/dist/transaction/transport/httpClient.d.ts +0 -131
  495. package/dist/transaction/transport/httpClient.js +0 -146
  496. package/dist/transaction/transport/httpOptions.d.ts +0 -33
  497. package/dist/transaction/transport/httpOptions.js +0 -12
  498. package/dist/transaction/transport/httpTransport.d.ts +0 -8
  499. package/dist/transaction/transport/httpTransport.js +0 -1388
  500. package/dist/transaction/transport/networkProbe.d.ts +0 -84
  501. package/dist/transaction/transport/networkProbe.js +0 -207
  502. package/dist/transaction/transport/wsFrameHandlers.d.ts +0 -128
  503. package/dist/transaction/transport/wsFrameHandlers.js +0 -429
  504. package/dist/transaction/transport/wsTransport.d.ts +0 -574
  505. package/dist/transaction/transport/wsTransport.js +0 -1023
  506. package/dist/transaction/types/assertExact.d.ts +0 -17
  507. package/dist/transaction/types/assertExact.js +0 -1
  508. package/dist/transaction/types/global.d.ts +0 -107
  509. package/dist/transaction/types/global.js +0 -40
  510. package/dist/transaction/types/index.d.ts +0 -205
  511. package/dist/transaction/types/index.js +0 -56
  512. package/dist/transaction/types/modelData.d.ts +0 -10
  513. package/dist/transaction/types/modelData.js +0 -9
  514. package/dist/transaction/types/participant.d.ts +0 -20
  515. package/dist/transaction/types/participant.js +0 -10
  516. package/dist/transaction/types/streams.d.ts +0 -550
  517. package/dist/transaction/types/streams.js +0 -11
  518. package/dist/transaction/utils/asyncIterator.d.ts +0 -34
  519. package/dist/transaction/utils/asyncIterator.js +0 -135
  520. package/dist/transaction/utils/duration.d.ts +0 -50
  521. package/dist/transaction/utils/duration.js +0 -77
  522. package/dist/transaction/utils/json.d.ts +0 -57
  523. package/dist/transaction/utils/json.js +0 -276
  524. package/dist/transaction/wire/accountResponses.d.ts +0 -420
  525. package/dist/transaction/wire/accountResponses.js +0 -290
  526. package/dist/transaction/wire/auth.d.ts +0 -56
  527. package/dist/transaction/wire/auth.js +0 -63
  528. package/dist/transaction/wire/bootstrapReason.d.ts +0 -9
  529. package/dist/transaction/wire/bootstrapReason.js +0 -8
  530. package/dist/transaction/wire/claimEvent.d.ts +0 -76
  531. package/dist/transaction/wire/claimEvent.js +0 -73
  532. package/dist/transaction/wire/claims.d.ts +0 -530
  533. package/dist/transaction/wire/claims.js +0 -327
  534. package/dist/transaction/wire/commit.d.ts +0 -603
  535. package/dist/transaction/wire/commit.js +0 -321
  536. package/dist/transaction/wire/delta.d.ts +0 -250
  537. package/dist/transaction/wire/delta.js +0 -147
  538. package/dist/transaction/wire/errorEnvelope.d.ts +0 -72
  539. package/dist/transaction/wire/errorEnvelope.js +0 -123
  540. package/dist/transaction/wire/feedCursor.d.ts +0 -60
  541. package/dist/transaction/wire/feedCursor.js +0 -82
  542. package/dist/transaction/wire/feedEvent.d.ts +0 -204
  543. package/dist/transaction/wire/feedEvent.js +0 -65
  544. package/dist/transaction/wire/frames.d.ts +0 -194
  545. package/dist/transaction/wire/frames.js +0 -50
  546. package/dist/transaction/wire/inboundFrames.d.ts +0 -562
  547. package/dist/transaction/wire/inboundFrames.js +0 -116
  548. package/dist/transaction/wire/index.d.ts +0 -54
  549. package/dist/transaction/wire/index.js +0 -83
  550. package/dist/transaction/wire/listEnvelope.d.ts +0 -37
  551. package/dist/transaction/wire/listEnvelope.js +0 -42
  552. package/dist/transaction/wire/modelMutations.d.ts +0 -31
  553. package/dist/transaction/wire/modelMutations.js +0 -52
  554. package/dist/transaction/wire/modelResponses.d.ts +0 -85
  555. package/dist/transaction/wire/modelResponses.js +0 -43
  556. package/dist/transaction/wire/modelShape.d.ts +0 -78
  557. package/dist/transaction/wire/modelShape.js +0 -74
  558. package/dist/transaction/wire/protocol.d.ts +0 -38
  559. package/dist/transaction/wire/protocol.js +0 -38
  560. package/dist/transaction/wire/protocolVersion.d.ts +0 -73
  561. package/dist/transaction/wire/protocolVersion.js +0 -83
  562. package/dist/transactions/mutations/MutationQueue.d.ts +0 -661
  563. package/dist/transactions/mutations/MutationQueue.js +0 -2807
  564. package/dist/transactions/mutations/MutationStore.d.ts +0 -20
  565. package/dist/transactions/mutations/MutationStore.js +0 -53
  566. package/dist/transactions/mutations/UnconfirmedWrites.d.ts +0 -82
  567. package/dist/transactions/mutations/UnconfirmedWrites.js +0 -104
  568. package/dist/transactions/mutations/coalesceRules.d.ts +0 -58
  569. package/dist/transactions/mutations/coalesceRules.js +0 -140
  570. package/dist/transactions/mutations/commitLatency.d.ts +0 -52
  571. package/dist/transactions/mutations/commitLatency.js +0 -130
  572. package/dist/transactions/mutations/commitOutboxStore.d.ts +0 -28
  573. package/dist/transactions/mutations/commitOutboxStore.js +0 -26
  574. package/dist/transactions/mutations/commitPayload.d.ts +0 -165
  575. package/dist/transactions/mutations/commitPayload.js +0 -152
  576. package/dist/transactions/mutations/deltaConfirmation.d.ts +0 -63
  577. package/dist/transactions/mutations/deltaConfirmation.js +0 -235
  578. package/dist/transactions/mutations/durableWriteStore.d.ts +0 -14
  579. package/dist/transactions/mutations/durableWriteStore.js +0 -12
  580. package/dist/transactions/mutations/optimisticApply.d.ts +0 -49
  581. package/dist/transactions/mutations/optimisticApply.js +0 -65
  582. package/dist/transactions/mutations/replayValidation.d.ts +0 -187
  583. package/dist/transactions/mutations/replayValidation.js +0 -164
  584. package/dist/utils/mobxSetup.d.ts +0 -53
  585. package/dist/utils/mobxSetup.js +0 -330
  586. package/dist/views/QueryView.d.ts +0 -79
  587. package/dist/views/QueryView.js +0 -218
  588. package/dist/views/ViewRegistry.d.ts +0 -20
  589. package/dist/views/ViewRegistry.js +0 -55
  590. package/dist/views/incrementalView.d.ts +0 -45
  591. package/dist/views/incrementalView.js +0 -69
  592. package/dist/webhooks/events.d.ts +0 -43
  593. package/dist/webhooks/events.js +0 -42
  594. package/dist/webhooks/index.d.ts +0 -8
  595. package/dist/webhooks/index.js +0 -8
  596. package/dist/wire/index.d.ts +0 -1
  597. package/dist/wire/index.js +0 -8
@@ -1,285 +0,0 @@
1
- /**
2
- * The plugin contract (ADR 0016).
3
- *
4
- * The core is `commit` · `get`/`list` · `observe` · `claim` · auth. Everything
5
- * else a caller might want — a local materialised copy, presence rendering,
6
- * batching, framework bindings — is a plugin declared in one list, so a server
7
- * or an agent installs only what it asked for.
8
- *
9
- * Every plugin has the same shape on purpose. Uniformity is what makes the list
10
- * composable and the types inferable; bespoke plugins would reproduce today's
11
- * nineteen export subpaths with extra ceremony.
12
- *
13
- * Where this shape came from, and the field-by-field reasoning behind it, is
14
- * recorded in ADR 0016 — the contract itself only states what each field does.
15
- */
16
- import type { ParticipantKind } from './types/participant.js';
17
- import type { ErrorCodeSpec } from './errorCodes.js';
18
- import type { Logger } from './logger.js';
19
- import type { CoordinationObservability } from './observability.js';
20
- import type { WsTransport } from './transport/wsTransport.js';
21
- import type { AuthCredentialSource } from './auth/credentialSource.js';
22
- import type { SyncDeltaWireCore } from './wire/delta.js';
23
- import type { ModelData } from './types/modelData.js';
24
- /**
25
- * A string type that keeps literal inference alive: `id: 'humans'` stays the
26
- * literal `'humans'` through object-literal inference instead of widening to
27
- * `string`, which is what lets {@link InstalledSurface} key a plugin list's
28
- * surface by id.
29
- */
30
- export type LiteralString = '' | (string & Record<never, never>);
31
- /**
32
- * The ordered stages a delta passes through on its way from the feed into
33
- * whatever is watching. A plugin names the one it attaches to.
34
- *
35
- * The order is not a convention — it is a correctness constraint. `acknowledge`
36
- * must follow `persist`, because acknowledging the input range rather than the
37
- * persisted high-water mark advances the server's cursor past deltas that never
38
- * committed, and the next catch-up then answers "you're up to date" for a delta
39
- * that was lost. Declaring the stage keeps that ordering out of array position,
40
- * where it would be load-bearing and undocumented.
41
- */
42
- export type PipelineStage =
43
- /** Deltas arrive from `observe()` and are queued. */
44
- 'receive'
45
- /** Per-entity collapse of the queued batch. */
46
- | 'dedupe'
47
- /** The batch is written to durable local storage. */
48
- | 'persist'
49
- /** Persisted results land in the in-memory graph. */
50
- | 'apply'
51
- /** The cursor advances — gated on `persist`, never on the input range. */
52
- | 'acknowledge'
53
- /** Anything downstream reacts: re-render, presence, subscribers. */
54
- | 'notify';
55
- /** Canonical order. A plugin runner must run stages in this sequence. */
56
- export declare const PIPELINE_STAGES: readonly PipelineStage[];
57
- /**
58
- * A delta as stage handlers receive it — the identity slice of the wire
59
- * shape, projected rather than restated so the wire schema stays the one
60
- * definition.
61
- */
62
- export type StageDelta = Pick<SyncDeltaWireCore, 'id' | 'actionType' | 'modelName' | 'modelId'>;
63
- /**
64
- * One persisted change: what the durable write reported and the apply stage
65
- * lands in the in-memory graph. `data` is absent for actions that carry
66
- * none (a remove reports identity only).
67
- */
68
- export interface AppliedChange {
69
- action: 'add' | 'update' | 'remove' | 'archive' | 'verify';
70
- modelName: string;
71
- modelId: string;
72
- data?: ModelData | null;
73
- /**
74
- * Server-stamped transaction id, echoing the client's own commit
75
- * operation id — how a client recognizes the confirmation of a change it
76
- * already applied locally. Absent for system-emitted changes, which have
77
- * no client transaction behind them.
78
- */
79
- transactionId?: string;
80
- }
81
- /**
82
- * What each stage hands its handlers. Read off the delta pipeline these
83
- * stages were read off, not invented: `receive` sees the delta being
84
- * queued, `dedupe` and `persist` see the batch at those boundaries,
85
- * `apply` and `notify` see the persisted changes, and `acknowledge` sees
86
- * the persistence-gated cursor value.
87
- */
88
- export interface StagePayloads {
89
- receive: {
90
- readonly delta: StageDelta;
91
- };
92
- dedupe: {
93
- readonly deltas: readonly StageDelta[];
94
- };
95
- persist: {
96
- readonly deltas: readonly StageDelta[];
97
- };
98
- apply: {
99
- readonly changes: readonly AppliedChange[];
100
- };
101
- acknowledge: {
102
- readonly syncId: number;
103
- };
104
- notify: {
105
- readonly changes: readonly AppliedChange[];
106
- };
107
- }
108
- /** The handler a plugin attaches at one stage. The payload derives from the key. */
109
- export type StageHandler<K extends PipelineStage> = (payload: StagePayloads[K]) => void;
110
- /**
111
- * What a capability needs from whatever transport was selected.
112
- *
113
- * Transport is a slot the caller fills, not a packaging axis, so a capability
114
- * states its requirement and an incompatible pairing fails when the client is
115
- * configured — with a typed error naming the plugin — rather than at runtime
116
- * with a subscription that silently never delivers.
117
- */
118
- export interface TransportCapabilities {
119
- /**
120
- * Requires a transport the server can initiate frames on. Live subscriptions,
121
- * presence, and claim grants need this; commit and point-in-time reads do not.
122
- */
123
- readonly duplex?: boolean;
124
- }
125
- /**
126
- * The core surface a plugin is handed at construction.
127
- *
128
- * Generic over the client's options type: the host instantiates it with its
129
- * own options bag, so a plugin reads configuration without this package
130
- * naming any consumer's types. Alongside the raw options, the context
131
- * carries the values the host has already resolved (`participant`,
132
- * `syncGroups`), so a plugin never re-derives identity.
133
- */
134
- export interface PluginContext<Options = unknown> {
135
- readonly logger: Logger;
136
- readonly observability?: CoordinationObservability;
137
- /** The client's own options bag, as the host received it. */
138
- readonly options?: Options;
139
- /**
140
- * The live duplex connection. The host builds it during construction, so a
141
- * plugin holds the thing rather than a function that fetches it: the
142
- * connection object is stable for the client's lifetime — identity and
143
- * read scope are seeded into it when they resolve, and reconnects replace
144
- * only the socket inside it, never the object. Absent on a
145
- * request-response client, which is what `requires: { duplex: true }`
146
- * guards.
147
- */
148
- readonly transport?: WsTransport;
149
- /** The participant this client runs as, when known at construction. */
150
- readonly participant?: {
151
- readonly id: string;
152
- readonly kind: ParticipantKind;
153
- };
154
- /** The connection's initial read scope (sync groups). */
155
- readonly syncGroups?: readonly string[];
156
- /** The resolved server base URL, settled by the host before construction. */
157
- readonly url?: string;
158
- /**
159
- * The client's single bearer-credential source, shared with every
160
- * auth-aware transport the host built. A plugin that constructs its own
161
- * fetching component hands this on rather than re-deriving a credential.
162
- */
163
- readonly auth?: AuthCredentialSource;
164
- /**
165
- * Whether a plugin with the given id is installed on this client. Supplied
166
- * by {@link resolvePlugins} from the list it is resolving — the one place
167
- * that truthfully knows the assembly — so a plugin interrogates what is
168
- * installed instead of the host special-casing plugins by name.
169
- */
170
- readonly hasPlugin?: (id: string) => boolean;
171
- /**
172
- * The resolved plugin list itself, supplied by {@link resolvePlugins}
173
- * alongside {@link hasPlugin} (which derives from it). A component a
174
- * plugin constructs — the store and its delta pipeline — holds this list
175
- * to dispatch the declared stage handlers through {@link runStage}.
176
- */
177
- readonly plugins?: readonly AbloPlugin[];
178
- }
179
- /**
180
- * One installed capability.
181
- *
182
- * @typeParam Surface - what `init` contributes to the client. The plugin list's
183
- * element types are what let the installed surface be inferred rather than
184
- * declared.
185
- */
186
- export interface AbloPlugin<Surface = unknown> {
187
- /** Stable identity — deduplication, diagnostics, and error attribution.
188
- * Literal-typed so a list's installed surface can be keyed by it. */
189
- readonly id: LiteralString;
190
- /** The plugin's own version, for diagnostics. */
191
- readonly version?: string;
192
- /** What this plugin needs from the transport. Checked at configuration time. */
193
- readonly requires?: TransportCapabilities;
194
- /**
195
- * Whether this plugin keeps a local copy of rows.
196
- *
197
- * This is ADR 0013 §4's membership test as a declared, checkable property
198
- * rather than a rule someone has to remember: a stateless caller can assert
199
- * that nothing in its list materialises, and CI can assert the core's own
200
- * list is uniformly `false`.
201
- */
202
- readonly materialises: boolean;
203
- /**
204
- * Error codes this plugin may raise, folded into the registry.
205
- *
206
- * Registration is part of the contract because the error catalog is
207
- * generated — a plugin that invents untyped errors would silently punch a
208
- * hole in the published reference.
209
- */
210
- readonly errorCodes?: Readonly<Record<string, ErrorCodeSpec>>;
211
- /**
212
- * The pipeline stages this plugin attaches to: each key names a stage and
213
- * holds the handler the runner invokes there. One field on purpose — a
214
- * declared stage cannot exist without its handler, nor a handler without
215
- * its stage, so the declaration can never point at nothing. The payload
216
- * type derives from the key ({@link StagePayloads}).
217
- */
218
- readonly stages?: {
219
- readonly [K in PipelineStage]?: StageHandler<K>;
220
- };
221
- /** Build the plugin's contribution to the client surface. */
222
- init(context: PluginContext): Surface;
223
- }
224
- /** The surface a plugin list contributes, keyed by plugin id. */
225
- export type InstalledSurface<Plugins extends readonly AbloPlugin[]> = {
226
- [P in Plugins[number] as P['id']]: P extends AbloPlugin<infer S> ? S : never;
227
- };
228
- /**
229
- * The plugin with the given id in a list, or `never` when absent. Sound
230
- * because ids are literal ({@link LiteralString}); a list typed only as
231
- * `AbloPlugin[]` has widened ids and resolves to `never`, so write plugin
232
- * lists inline for the client type to follow them.
233
- */
234
- export type PluginById<Plugins extends readonly AbloPlugin[], Id extends string> = Extract<Plugins[number], {
235
- id: Id;
236
- }>;
237
- /** Collapses a union into an intersection, member by member. */
238
- type UnionToIntersection<U> = (U extends unknown ? (member: U) => void : never) extends (member: infer I) => void ? I : never;
239
- /**
240
- * Every surface in a plugin list, folded into the one shape that merges onto
241
- * the client: `[a(), b()]` contributes `ASurface & BSurface`. An empty list
242
- * contributes nothing (`unknown`), so intersecting it changes no type.
243
- */
244
- export type MergedSurface<Plugins extends readonly AbloPlugin[]> = [
245
- Plugins[number]
246
- ] extends [never] ? unknown : UnionToIntersection<Plugins[number] extends AbloPlugin<infer Surface> ? Surface : never>;
247
- /** What the selected transport can actually do, for checking `requires`. */
248
- export interface TransportProfile {
249
- readonly duplex: boolean;
250
- }
251
- /**
252
- * Check a plugin list against the selected transport and build its surface.
253
- *
254
- * Both failures are configuration mistakes, so they surface here — while the
255
- * client is being constructed and the stack still points at the caller's own
256
- * setup — rather than later as a subscription that never delivers.
257
- */
258
- export declare function resolvePlugins<const Plugins extends readonly AbloPlugin[], Options = unknown>(plugins: Plugins, transport: TransportProfile, context: PluginContext<Options>): InstalledSurface<Plugins>;
259
- /**
260
- * Lays every installed plugin surface over a built client, so a plugin's
261
- * contributions are reachable as client members. The base always wins — a
262
- * plugin cannot shadow `dispose`, a model accessor, or any other member the
263
- * client itself defines; contributions only fill what the base leaves
264
- * undefined. With nothing installed the base is returned untouched.
265
- *
266
- * The second half of {@link resolvePlugins}: that call turns a list into a
267
- * surface, this one merges the surface onto the client the host built.
268
- */
269
- export declare function layerPluginSurface<T extends object>(base: T, installed: Record<string, unknown>): T;
270
- /**
271
- * The plugins attached to one pipeline stage, in declaration order.
272
- *
273
- * Stage order across the pipeline is fixed by {@link PIPELINE_STAGES}; this
274
- * returns the members of a single stage, where declaration order is the caller's
275
- * to choose and carries no correctness weight.
276
- */
277
- export declare function pluginsForStage(plugins: readonly AbloPlugin[], stage: PipelineStage): readonly AbloPlugin[];
278
- /**
279
- * Invokes every handler declared for one stage, in declaration order, with
280
- * that stage's payload. No handlers declared is a plain no-op, so a pipeline
281
- * dispatches unconditionally at each boundary and pays nothing when the
282
- * stage is unclaimed.
283
- */
284
- export declare function runStage<K extends PipelineStage>(plugins: readonly AbloPlugin[], stage: K, payload: StagePayloads[K]): void;
285
- export {};
@@ -1,106 +0,0 @@
1
- /**
2
- * The plugin contract (ADR 0016).
3
- *
4
- * The core is `commit` · `get`/`list` · `observe` · `claim` · auth. Everything
5
- * else a caller might want — a local materialised copy, presence rendering,
6
- * batching, framework bindings — is a plugin declared in one list, so a server
7
- * or an agent installs only what it asked for.
8
- *
9
- * Every plugin has the same shape on purpose. Uniformity is what makes the list
10
- * composable and the types inferable; bespoke plugins would reproduce today's
11
- * nineteen export subpaths with extra ceremony.
12
- *
13
- * Where this shape came from, and the field-by-field reasoning behind it, is
14
- * recorded in ADR 0016 — the contract itself only states what each field does.
15
- */
16
- import { AbloValidationError } from './errors.js';
17
- /** Canonical order. A plugin runner must run stages in this sequence. */
18
- export const PIPELINE_STAGES = [
19
- 'receive',
20
- 'dedupe',
21
- 'persist',
22
- 'apply',
23
- 'acknowledge',
24
- 'notify',
25
- ];
26
- /**
27
- * Check a plugin list against the selected transport and build its surface.
28
- *
29
- * Both failures are configuration mistakes, so they surface here — while the
30
- * client is being constructed and the stack still points at the caller's own
31
- * setup — rather than later as a subscription that never delivers.
32
- */
33
- export function resolvePlugins(plugins, transport, context) {
34
- const surface = {};
35
- const seen = new Set();
36
- // The assembly, injected from the list being resolved. Always this list's
37
- // own answer — a host-supplied `plugins` or `hasPlugin` could disagree
38
- // with the assembly it describes, so both are replaced, not deferred to.
39
- const initContext = {
40
- ...context,
41
- plugins,
42
- hasPlugin: (id) => plugins.some((plugin) => plugin.id === id),
43
- };
44
- for (const plugin of plugins) {
45
- if (seen.has(plugin.id)) {
46
- throw new AbloValidationError(`The ${plugin.id} plugin is listed twice. Remove the duplicate; a plugin is installed once per client.`, { code: 'invalid_options', param: 'plugins' });
47
- }
48
- seen.add(plugin.id);
49
- if (plugin.requires?.duplex && !transport.duplex) {
50
- throw new AbloValidationError(`The ${plugin.id} plugin needs a connection the server can send on, and this client is set up for request-response only. Switch the transport to 'websocket', or drop the plugin.`, { code: 'invalid_options', param: 'plugins' });
51
- }
52
- surface[plugin.id] = plugin.init(initContext);
53
- }
54
- return surface;
55
- }
56
- /**
57
- * Lays every installed plugin surface over a built client, so a plugin's
58
- * contributions are reachable as client members. The base always wins — a
59
- * plugin cannot shadow `dispose`, a model accessor, or any other member the
60
- * client itself defines; contributions only fill what the base leaves
61
- * undefined. With nothing installed the base is returned untouched.
62
- *
63
- * The second half of {@link resolvePlugins}: that call turns a list into a
64
- * surface, this one merges the surface onto the client the host built.
65
- */
66
- export function layerPluginSurface(base, installed) {
67
- const contributions = {};
68
- for (const surface of Object.values(installed)) {
69
- if (surface && typeof surface === 'object') {
70
- Object.assign(contributions, surface);
71
- }
72
- }
73
- if (Object.keys(contributions).length === 0)
74
- return base;
75
- return new Proxy(base, {
76
- get(target, prop, receiver) {
77
- const own = Reflect.get(target, prop, receiver);
78
- if (own !== undefined)
79
- return own;
80
- return typeof prop === 'string' && prop in contributions
81
- ? contributions[prop]
82
- : own;
83
- },
84
- });
85
- }
86
- /**
87
- * The plugins attached to one pipeline stage, in declaration order.
88
- *
89
- * Stage order across the pipeline is fixed by {@link PIPELINE_STAGES}; this
90
- * returns the members of a single stage, where declaration order is the caller's
91
- * to choose and carries no correctness weight.
92
- */
93
- export function pluginsForStage(plugins, stage) {
94
- return plugins.filter((plugin) => plugin.stages?.[stage] !== undefined);
95
- }
96
- /**
97
- * Invokes every handler declared for one stage, in declaration order, with
98
- * that stage's payload. No handlers declared is a plain no-op, so a pipeline
99
- * dispatches unconditionally at each boundary and pays nothing when the
100
- * stage is unclaimed.
101
- */
102
- export function runStage(plugins, stage, payload) {
103
- for (const plugin of plugins) {
104
- plugin.stages?.[stage]?.(payload);
105
- }
106
- }
@@ -1,217 +0,0 @@
1
- /**
2
- * The conflict types a policy decides on. The engine detects a conflict and
3
- * hands it to your {@link ConflictPolicy}, which returns a
4
- * {@link ConflictDecision}.
5
- *
6
- * There are two conflict shapes. A {@link StaleContextConflict} is a write
7
- * whose `readAt` watermark is older than the latest delta on the target row. A
8
- * {@link ClaimHeldConflict} is a participant trying to claim a target that
9
- * someone else already holds. {@link Conflict} is the discriminated union of
10
- * the two; switch on `kind` to narrow it.
11
- */
12
- import type { ParticipantRef } from '../types/participant.js';
13
- import type { CommitOperationType, OnStaleMode } from '../coordination/schema.js';
14
- export type ConflictKind = 'stale_context' | 'claim_held';
15
- /** Fields shared by every conflict shape. */
16
- interface ConflictBase {
17
- readonly committer: ParticipantRef;
18
- readonly organizationId: string;
19
- /** Human at the root of the committer's delegation chain (if any). */
20
- readonly delegationChainRootUserId?: string | null;
21
- }
22
- /** The operation whose write conflicts. */
23
- export interface ConflictOperation {
24
- readonly model: string;
25
- readonly id: string;
26
- readonly type: CommitOperationType;
27
- readonly input?: Readonly<Record<string, unknown>>;
28
- }
29
- export interface StaleContextConflict extends ConflictBase {
30
- readonly kind: 'stale_context';
31
- readonly operation: ConflictOperation;
32
- /** Watermark the committer reasoned against. */
33
- readonly readAt: number;
34
- /** Most recent delta id on the target. */
35
- readonly observedSyncId: number;
36
- /**
37
- * The fields whose concurrent change triggered this conflict — the
38
- * intersection of the fields the committer wrote and the columns a newer
39
- * delta touched. An empty array means the conflicting delta was a
40
- * whole-entity change, such as a create or delete, which conflicts with any
41
- * write. A policy can use this to decide at field granularity — for example,
42
- * allowing the write when the only overlap is on a cosmetic field.
43
- */
44
- readonly conflictingFields?: readonly string[];
45
- /**
46
- * The committer's declared `onStale` intent for this operation. The default
47
- * policy honors it: `'notify'` holds the write and notifies, and anything
48
- * else rejects. A custom policy may override this. When absent, it is treated
49
- * as `'reject'`, the default for an unguarded write.
50
- */
51
- readonly requestedMode?: OnStaleMode;
52
- }
53
- export interface ClaimHeldConflict extends ConflictBase {
54
- readonly kind: 'claim_held';
55
- readonly heldBy: ParticipantRef;
56
- readonly claimId: string;
57
- readonly entityType: string;
58
- readonly entityId: string;
59
- /** Holder's claim expiry (ms since epoch). */
60
- readonly expiresAt: number;
61
- /**
62
- * The capability operations granted to the committer — the allowlist carried
63
- * by its key. A policy decides purely from the conflict it is given, so this
64
- * is the only place it can read the committer's privileges. It lets a policy
65
- * express a rule such as "preempt only if the committer holds `claim.preempt`"
66
- * (see {@link capabilityPreemptPolicy}). Empty for a human session that
67
- * carries no allowlist.
68
- */
69
- readonly committerOperations: readonly string[];
70
- }
71
- /**
72
- * The discriminated union the policy receives. Switch on `.kind` to
73
- * narrow to the variant.
74
- */
75
- export type Conflict = StaleContextConflict | ClaimHeldConflict;
76
- /** What the policy returns. */
77
- export type ConflictDecision = {
78
- readonly action: 'reject';
79
- readonly reason?: string;
80
- } | {
81
- readonly action: 'allow';
82
- readonly note?: string;
83
- }
84
- /**
85
- * Evict the current holder and grant the target to the committer. This is
86
- * only meaningful for a `claim_held` conflict raised at claim time: the
87
- * holder receives a `claim_lost` notification with reason `'preempted'`, and
88
- * the committer takes the lease ahead of anyone already waiting in line for
89
- * it. Return it only for a committer you consider higher priority — for
90
- * example, a supervisor over its own sub-agents, or an identity that holds a
91
- * preempt capability. At commit time there is no holder to evict, so a
92
- * `preempt` decision is treated as `allow`.
93
- */
94
- | {
95
- readonly action: 'preempt';
96
- readonly reason?: string;
97
- }
98
- /**
99
- * Hold the write instead of aborting it. This is only meaningful for a
100
- * `stale_context` conflict. The engine withholds the conflicting operation
101
- * and returns a `StaleNotification` carrying the current value, so the actor
102
- * — an agent or a human — can reconcile and re-commit. The rest of the batch
103
- * still commits. It maps from `onStale: 'notify'`.
104
- *
105
- * The monotonic `sync_id` landing order decides who yields: the stale
106
- * committer always recomputes against the newer value, an asymmetry that
107
- * prevents two notifying writers from looping against each other. Retries are
108
- * bounded by the client's reconciliation retry cap.
109
- */
110
- | {
111
- readonly action: 'notify';
112
- readonly reason?: string;
113
- };
114
- /**
115
- * The function that decides a conflict. It receives a {@link Conflict} and
116
- * returns a {@link ConflictDecision}, either synchronously or as a promise.
117
- * Register your implementation with the engine; the example below allows a
118
- * cosmetic "linter" writer and defers everything else to {@link defaultPolicy}.
119
- *
120
- * ```ts
121
- * const policy: ConflictPolicy = (conflict) => {
122
- * if (conflict.committer.id.startsWith('linter:')) {
123
- * return { action: 'allow', note: 'cosmetic writer' };
124
- * }
125
- * return defaultPolicy(conflict);
126
- * };
127
- * ```
128
- */
129
- export type ConflictPolicy = (conflict: Conflict) => ConflictDecision | Promise<ConflictDecision>;
130
- /**
131
- * The conflict policy the engine uses when you do not supply your own. It
132
- * favors people: a human is never blocked, while agents and automated writers
133
- * yield to a claim someone else holds.
134
- *
135
- * For a `claim_held` conflict, the decision follows the committer's kind:
136
- *
137
- * • `user` → `allow` — a human is never blocked by a claim. A claim is a
138
- * coordination hint among agents, not a lock on
139
- * people.
140
- * • `agent` → `reject` — an agent yields to a claim held by someone else.
141
- * The one sanctioned exception is the privileged
142
- * `claim.preempt` capability; see
143
- * {@link capabilityPreemptPolicy}.
144
- * • `system` → `reject` — automated and backend writers serialize through
145
- * claims the same way agents do, so a server job
146
- * cannot silently overwrite a held row. Declare the
147
- * model's conflict axis to overwrite if you want that.
148
- *
149
- * Allowing only `user` by default is deliberate: a backend key is a
150
- * full-access credential, and claim serialization depends on those writers
151
- * respecting claims unless a model opts out.
152
- *
153
- * For a `stale_context` conflict, the decision honors the committer's declared
154
- * `onStale` intent: `'notify'` holds the write and notifies the actor to
155
- * resolve it, and anything else (including `'reject'` or an absent value)
156
- * rejects. An `onStale` of `'overwrite'` never reaches a policy — it is a hard
157
- * opt-out resolved before the conflict is detected.
158
- *
159
- * To change this behavior for a model, declare its conflict axis in the schema;
160
- * a declared axis overrides this default.
161
- */
162
- export declare const defaultPolicy: (conflict: Conflict) => ConflictDecision;
163
- /**
164
- * A ready-made policy that grants capability-gated preemption. When the
165
- * committer's capability allowlist includes the `claim.preempt` operation, a
166
- * `claim_held` conflict is preempted: the current holder is evicted and the
167
- * committer takes the lease. Every other conflict falls back to
168
- * {@link defaultPolicy}, which rejects. Register it as your conflict policy to
169
- * let a privileged identity take over a held entity without writing a bespoke
170
- * policy. The authorization rests on holding the capability, not on any
171
- * particular identity string.
172
- */
173
- export declare const capabilityPreemptPolicy: ConflictPolicy;
174
- /**
175
- * A model's declared conflict disposition, keyed by the kind of committer. You
176
- * set it in the model's schema, for example
177
- * `conflict: { user: 'overwrite', agent: 'reject' }`, and the engine applies it
178
- * at commit time. It is plain data using the same `'reject' | 'overwrite' |
179
- * 'notify'` vocabulary as the write guards, so it travels through the schema
180
- * registry to the server without naming any application model.
181
- *
182
- * Each key is the committer's participant kind, which the server derives and a
183
- * client cannot forge; an omitted kind falls back to the engine default. So
184
- * `{ user: 'overwrite', agent: 'reject' }` reads as "a human's write wins, an
185
- * agent's write yields," and `system`, being unlisted, takes the default.
186
- */
187
- export interface ConflictAxis {
188
- /** What happens when a human (`user` session) commits into a conflict. */
189
- readonly user?: OnStaleMode;
190
- /** What happens when an AI `agent` commits into a conflict. */
191
- readonly agent?: OnStaleMode;
192
- /** What happens when a `system` / automation actor commits into a conflict. */
193
- readonly system?: OnStaleMode;
194
- }
195
- /**
196
- * Resolves a declared {@link ConflictAxis} into a {@link ConflictDecision} for
197
- * one concrete conflict. It is pure and synchronous, doing no I/O, so it can
198
- * run on either the client or the server. It reads the committer's kind from
199
- * the conflict and maps the declared mode:
200
- *
201
- * - undefined → the engine default, {@link defaultPolicy}: a human is
202
- * allowed, an agent or system committer is rejected on a
203
- * `claim_held`, and a stale write honors `onStale: 'notify'`.
204
- * - `overwrite` → `allow`; the write wins and the committer is never blocked.
205
- * - `reject` → `reject`; the committer yields.
206
- * - `notify` → on a `stale_context` conflict, hold the write and notify so
207
- * the committer re-reads and re-applies; on a `claim_held`
208
- * conflict there is no held write to reconcile (see
209
- * {@link ConflictDecision} `notify`), so it degrades to
210
- * `reject` rather than silently writing to a claimed row.
211
- *
212
- * This is only the generic interpretation. Stronger server-side rules — such as
213
- * an agent never bypassing a claim held by someone else — are enforced where
214
- * the decision is applied, not here.
215
- */
216
- export declare function interpretConflictAxis(axis: ConflictAxis, conflict: Conflict): ConflictDecision;
217
- export {};