@abloatai/ablo 0.34.1 → 0.36.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.
- package/AGENTS.md +2 -1
- package/CHANGELOG.md +758 -5
- package/README.md +56 -502
- package/bin/ablo.cjs +39 -0
- package/dist/BaseSyncedStore.d.ts +176 -48
- package/dist/BaseSyncedStore.js +346 -214
- package/dist/Database.d.ts +17 -44
- package/dist/Database.js +96 -79
- package/dist/InstanceCache.d.ts +31 -6
- package/dist/InstanceCache.js +65 -30
- package/dist/LazyReferenceCollection.d.ts +3 -3
- package/dist/LazyReferenceCollection.js +4 -4
- package/dist/Model.d.ts +23 -13
- package/dist/Model.js +27 -17
- package/dist/ModelRegistry.d.ts +8 -4
- package/dist/ModelRegistry.js +20 -18
- package/dist/NetworkMonitor.d.ts +3 -1
- package/dist/NetworkMonitor.js +7 -5
- package/dist/{SyncEngineContext.d.ts → RuntimeContext.d.ts} +20 -13
- package/dist/{SyncEngineContext.js → RuntimeContext.js} +11 -12
- package/dist/SyncClient.d.ts +47 -47
- package/dist/SyncClient.js +215 -156
- package/dist/ai-sdk/coordinatedTool.d.ts +2 -2
- package/dist/ai-sdk/coordinatedTool.js +1 -1
- package/dist/ai-sdk/coordinationContext.d.ts +2 -2
- package/dist/ai-sdk/coordinationContext.js +1 -1
- package/dist/ai-sdk/wrap.d.ts +3 -3
- package/dist/ai-sdk/wrap.js +2 -2
- package/dist/auth/index.d.ts +1 -156
- package/dist/auth/index.js +8 -301
- package/dist/client/Ablo.d.ts +42 -287
- package/dist/client/Ablo.js +129 -963
- package/dist/client/abloClient.d.ts +309 -0
- package/dist/client/abloClient.js +13 -0
- package/dist/client/clientPrelude.d.ts +52 -0
- package/dist/client/clientPrelude.js +60 -0
- package/dist/client/consoleLogger.d.ts +2 -2
- package/dist/client/coreClient.d.ts +60 -0
- package/dist/client/coreClient.js +118 -0
- package/dist/client/createInternalComponents.d.ts +8 -4
- package/dist/client/createInternalComponents.js +17 -10
- package/dist/client/createModelProxy.d.ts +98 -373
- package/dist/client/createModelProxy.js +233 -139
- package/dist/client/humans.d.ts +69 -0
- package/dist/client/humans.js +78 -0
- package/dist/client/modelRegistration.d.ts +1 -1
- package/dist/client/modelRegistration.js +9 -9
- package/dist/client/options.d.ts +73 -17
- package/dist/client/reactiveEngine.d.ts +53 -0
- package/dist/client/reactiveEngine.js +688 -0
- package/dist/client/resourceTypes.d.ts +9 -250
- package/dist/client/resourceTypes.js +8 -5
- package/dist/client/schemaConfig.d.ts +4 -4
- package/dist/client/schemaConfig.js +6 -2
- package/dist/client/storeCluster.d.ts +47 -0
- package/dist/client/storeCluster.js +118 -0
- package/dist/client/storeLifecycle.d.ts +61 -0
- package/dist/client/storeLifecycle.js +231 -0
- package/dist/client/validateAbloOptions.d.ts +3 -2
- package/dist/client/validateAbloOptions.js +1 -1
- package/dist/client/wsMutationExecutor.d.ts +3 -3
- package/dist/client/wsMutationExecutor.js +3 -3
- package/dist/context.d.ts +22 -9
- package/dist/context.js +33 -9
- package/dist/coordination/ClaimLog.d.ts +26 -0
- package/dist/coordination/ClaimLog.js +32 -0
- package/dist/coordination/index.d.ts +1 -15
- package/dist/coordination/index.js +8 -31
- package/dist/core/index.d.ts +3 -3
- package/dist/core/index.js +2 -2
- package/dist/docs/catalog.d.ts +72 -0
- package/dist/docs/catalog.js +230 -0
- package/dist/docs/index.d.ts +10 -0
- package/dist/docs/index.js +10 -0
- package/dist/environment.d.ts +1 -40
- package/dist/environment.js +8 -37
- package/dist/index.d.ts +44 -36
- package/dist/index.js +30 -22
- package/dist/interfaces/index.d.ts +44 -134
- package/dist/keys/index.d.ts +1 -77
- package/dist/keys/index.js +8 -190
- package/dist/mutators/{RecordingTransaction.d.ts → RecordingMutation.d.ts} +4 -4
- package/dist/mutators/{RecordingTransaction.js → RecordingMutation.js} +2 -2
- package/dist/mutators/Transaction.d.ts +1 -1
- package/dist/mutators/Transaction.js +1 -1
- package/dist/mutators/UndoManager.d.ts +6 -6
- package/dist/mutators/UndoManager.js +5 -5
- package/dist/mutators/defineMutators.d.ts +3 -3
- package/dist/mutators/defineMutators.js +1 -1
- package/dist/mutators/inverseOp.js +2 -2
- package/dist/mutators/mutateActions.d.ts +3 -3
- package/dist/mutators/mutateActions.js +1 -1
- package/dist/mutators/readerActions.d.ts +1 -1
- package/dist/mutators/undoApply.d.ts +1 -1
- package/dist/mutators/undoApply.js +1 -1
- package/dist/policy/index.d.ts +2 -2
- package/dist/policy/index.js +1 -1
- package/dist/query/client.d.ts +5 -2
- package/dist/query/client.js +10 -9
- package/dist/query/types.d.ts +6 -41
- package/dist/query/types.js +2 -2
- package/dist/react/AbloProvider.d.ts +18 -8
- package/dist/react/AbloProvider.js +10 -9
- package/dist/react/context.d.ts +3 -3
- package/dist/react/context.js +1 -1
- package/dist/react/createAbloReact.d.ts +56 -0
- package/dist/react/createAbloReact.js +51 -0
- package/dist/react/index.d.ts +6 -5
- package/dist/react/index.js +6 -3
- package/dist/react/internalContext.d.ts +1 -1
- package/dist/react/useAblo.d.ts +12 -5
- package/dist/react/useAblo.js +26 -8
- package/dist/react/useCurrentUserId.js +1 -1
- package/dist/react/useErrorListener.js +1 -1
- package/dist/react/useMutationFailureListener.d.ts +2 -2
- package/dist/react/useMutationFailureListener.js +1 -1
- package/dist/react/useMutators.d.ts +3 -3
- package/dist/react/useMutators.js +3 -3
- package/dist/react/useUndoScope.d.ts +5 -5
- package/dist/react/useUndoScope.js +1 -1
- package/dist/schema/coordination.d.ts +69 -10
- package/dist/schema/coordination.js +90 -9
- package/dist/schema/ddl.js +2 -2
- package/dist/schema/diff.d.ts +1 -1
- package/dist/schema/generate.js +1 -1
- package/dist/schema/index.d.ts +11 -10
- package/dist/schema/index.js +22 -18
- package/dist/schema/queries.d.ts +27 -27
- package/dist/schema/queries.js +23 -23
- package/dist/schema/select.d.ts +3 -3
- package/dist/schema/select.js +6 -3
- package/dist/schema/serialize.d.ts +15 -6
- package/dist/schema/serialize.js +20 -3
- package/dist/schema/sugar.d.ts +6 -7
- package/dist/schema/sugar.js +9 -12
- package/dist/schema/syncDeltaRow.d.ts +4 -152
- package/dist/schema/syncDeltaRow.js +4 -105
- package/dist/server/adapter.d.ts +18 -1
- package/dist/server/commit.d.ts +10 -16
- package/dist/server/index.d.ts +1 -1
- package/dist/server/index.js +1 -1
- package/dist/server/readConfig.d.ts +1 -1
- package/dist/source/adapter.d.ts +7 -5
- package/dist/source/adapter.js +7 -5
- package/dist/source/adapters/drizzle.d.ts +1 -1
- package/dist/source/adapters/drizzle.js +2 -2
- package/dist/source/adapters/kysely.d.ts +1 -1
- package/dist/source/adapters/kysely.js +1 -1
- package/dist/source/adapters/kyselyMutationCore.d.ts +1 -1
- package/dist/source/adapters/kyselyMutationCore.js +2 -2
- package/dist/source/adapters/memory.js +1 -1
- package/dist/source/adapters/prisma.d.ts +8 -3
- package/dist/source/adapters/prisma.js +1 -1
- package/dist/source/connector.js +1 -1
- package/dist/source/connectorProtocol.d.ts +2 -8
- package/dist/source/connectorProtocol.js +3 -2
- package/dist/source/contract.d.ts +29 -17
- package/dist/source/contract.js +27 -22
- package/dist/source/factory.d.ts +1 -1
- package/dist/source/idempotency.js +2 -2
- package/dist/source/index.d.ts +1 -0
- package/dist/source/index.js +3 -0
- package/dist/source/next.d.ts +1 -1
- package/dist/source/signing.d.ts +9 -2
- package/dist/source/signing.js +4 -1
- package/dist/source/types.d.ts +6 -4
- package/dist/source/types.js +1 -1
- package/dist/{core/storeContract.d.ts → storeContract.d.ts} +6 -6
- package/dist/{core → stores}/DatabaseManager.d.ts +3 -1
- package/dist/{core → stores}/DatabaseManager.js +14 -13
- package/dist/stores/ObjectStore.d.ts +1 -1
- package/dist/{core → stores}/StoreManager.d.ts +9 -26
- package/dist/{core → stores}/StoreManager.js +29 -77
- package/dist/stores/SyncActionStore.d.ts +4 -2
- package/dist/stores/SyncActionStore.js +11 -17
- package/dist/stores/syncAction.d.ts +26 -0
- package/dist/stores/syncAction.js +16 -0
- package/dist/surface.d.ts +3 -3
- package/dist/surface.js +6 -4
- package/dist/sync/BootstrapFetcher.d.ts +127 -6
- package/dist/sync/BootstrapFetcher.js +511 -83
- package/dist/sync/ConnectionManager.d.ts +6 -198
- package/dist/sync/ConnectionManager.js +6 -677
- package/dist/sync/OnDemandLoader.d.ts +5 -2
- package/dist/sync/OnDemandLoader.js +61 -21
- package/dist/sync/SubscriptionManager.d.ts +13 -2
- package/dist/sync/SubscriptionManager.js +23 -5
- package/dist/sync/SyncWebSocket.d.ts +27 -510
- package/dist/sync/SyncWebSocket.js +76 -954
- package/dist/sync/awaitClaimGrant.d.ts +4 -44
- package/dist/sync/awaitClaimGrant.js +4 -109
- package/dist/sync/bootstrapApply.d.ts +3 -0
- package/dist/sync/bootstrapApply.js +2 -2
- package/dist/sync/commitFrames.d.ts +6 -40
- package/dist/sync/commitFrames.js +6 -97
- package/dist/sync/contextPorts.d.ts +18 -0
- package/dist/sync/contextPorts.js +31 -0
- package/dist/sync/createClaimStream.d.ts +5 -49
- package/dist/sync/createClaimStream.js +5 -469
- package/dist/sync/createPresenceStream.d.ts +26 -4
- package/dist/sync/createPresenceStream.js +28 -20
- package/dist/sync/createSnapshot.d.ts +2 -2
- package/dist/sync/createSnapshot.js +1 -1
- package/dist/sync/credentialLifecycle.d.ts +5 -173
- package/dist/sync/credentialLifecycle.js +5 -320
- package/dist/sync/deltaPipeline.d.ts +13 -12
- package/dist/sync/deltaPipeline.js +21 -4
- package/dist/sync/groupChange.d.ts +3 -0
- package/dist/sync/groupChange.js +16 -14
- package/dist/sync/participants.d.ts +24 -6
- package/dist/sync/participants.js +32 -23
- package/dist/sync/schemaDrift.d.ts +55 -0
- package/dist/sync/schemaDrift.js +53 -0
- package/dist/sync/schemas.d.ts +23 -33
- package/dist/sync/schemas.js +29 -20
- package/dist/sync/syncPlan.d.ts +3 -3
- package/dist/sync/wsFrameHandlers.d.ts +6 -114
- package/dist/sync/wsFrameHandlers.js +6 -392
- package/dist/syncLog/contract.d.ts +20 -0
- package/dist/syncLog/contract.js +19 -0
- package/dist/syncLog/index.d.ts +1 -0
- package/dist/syncLog/index.js +1 -0
- package/dist/transaction/ablo.d.ts +88 -0
- package/dist/transaction/ablo.js +33 -0
- package/dist/{client/auth.d.ts → transaction/auth/apiKey.d.ts} +43 -8
- package/dist/{client/auth.js → transaction/auth/apiKey.js} +19 -0
- package/dist/transaction/auth/bootstrapScope.d.ts +15 -0
- package/dist/transaction/auth/bootstrapScope.js +1 -0
- package/dist/transaction/auth/capability.d.ts +212 -0
- package/dist/transaction/auth/capability.js +224 -0
- package/dist/{auth → transaction/auth}/credentialSource.d.ts +8 -1
- package/dist/{client → transaction/auth}/identity.d.ts +8 -7
- package/dist/{client → transaction/auth}/identity.js +1 -1
- package/dist/transaction/auth/index.d.ts +162 -0
- package/dist/transaction/auth/index.js +304 -0
- package/dist/{auth → transaction/auth}/schemas.d.ts +1 -1
- package/dist/{auth → transaction/auth}/schemas.js +13 -13
- package/dist/{client → transaction/auth}/sessionMint.d.ts +8 -8
- package/dist/{client → transaction/auth}/sessionMint.js +4 -7
- package/dist/transaction/coordination/awaitClaimGrant.d.ts +56 -0
- package/dist/transaction/coordination/awaitClaimGrant.js +124 -0
- package/dist/{client → transaction/coordination}/claimHeartbeatLoop.d.ts +34 -0
- package/dist/{client → transaction/coordination}/claimHeartbeatLoop.js +20 -0
- package/dist/transaction/coordination/claimMeta.d.ts +49 -0
- package/dist/transaction/coordination/claimMeta.js +52 -0
- package/dist/transaction/coordination/createClaimStream.d.ts +64 -0
- package/dist/transaction/coordination/createClaimStream.js +475 -0
- package/dist/transaction/coordination/events.d.ts +74 -0
- package/dist/transaction/coordination/events.js +7 -0
- package/dist/transaction/coordination/index.d.ts +19 -0
- package/dist/transaction/coordination/index.js +45 -0
- package/dist/transaction/coordination/locator.d.ts +104 -0
- package/dist/transaction/coordination/locator.js +102 -0
- package/dist/transaction/coordination/schema.d.ts +1536 -0
- package/dist/transaction/coordination/schema.js +1177 -0
- package/dist/transaction/coordination/targetConflict.d.ts +2 -0
- package/dist/transaction/coordination/targetConflict.js +107 -0
- package/dist/{coordination → transaction/coordination}/trace.d.ts +7 -18
- package/dist/{coordination → transaction/coordination}/trace.js +18 -25
- package/dist/transaction/durableWrites.d.ts +62 -0
- package/dist/{client → transaction}/durableWrites.js +28 -3
- package/dist/transaction/environment.d.ts +105 -0
- package/dist/transaction/environment.js +108 -0
- package/dist/{errorCodes.d.ts → transaction/errorCodes.d.ts} +12 -12
- package/dist/{errorCodes.js → transaction/errorCodes.js} +45 -18
- package/dist/{errors.d.ts → transaction/errors.d.ts} +37 -13
- package/dist/{errors.js → transaction/errors.js} +85 -16
- package/dist/transaction/footprint.d.ts +111 -0
- package/dist/transaction/footprint.js +0 -0
- package/dist/transaction/index.d.ts +20 -0
- package/dist/transaction/index.js +20 -0
- package/dist/transaction/keys/index.d.ts +87 -0
- package/dist/transaction/keys/index.js +207 -0
- package/dist/transaction/log/syncDeltaRow.d.ts +158 -0
- package/dist/transaction/log/syncDeltaRow.js +95 -0
- package/dist/{sync/syncPosition.d.ts → transaction/logPosition.d.ts} +22 -8
- package/dist/{sync/syncPosition.js → transaction/logPosition.js} +15 -6
- package/dist/transaction/logger.d.ts +16 -0
- package/dist/transaction/logger.js +7 -0
- package/dist/transaction/observability.d.ts +53 -0
- package/dist/transaction/observability.js +19 -0
- package/dist/transaction/plugin.d.ts +285 -0
- package/dist/transaction/plugin.js +106 -0
- package/dist/{policy → transaction/policy}/types.d.ts +3 -3
- package/dist/{policy → transaction/policy}/types.js +2 -0
- package/dist/transaction/resources/httpResources.d.ts +321 -0
- package/dist/transaction/resources/httpResources.js +7 -0
- package/dist/transaction/resources/modelOperations.d.ts +427 -0
- package/dist/transaction/resources/modelOperations.js +12 -0
- package/dist/transaction/resources/mutationOptions.d.ts +66 -0
- package/dist/transaction/resources/mutationOptions.js +9 -0
- package/dist/transaction/resources/where.d.ts +101 -0
- package/dist/transaction/resources/where.js +115 -0
- package/dist/{client → transaction/resources}/writeOptionsSchema.d.ts +2 -6
- package/dist/{client → transaction/resources}/writeOptionsSchema.js +9 -5
- package/dist/{schema → transaction/schema}/field.d.ts +17 -23
- package/dist/{schema → transaction/schema}/field.js +5 -5
- package/dist/transaction/schema/fieldRef.d.ts +38 -0
- package/dist/transaction/schema/fieldRef.js +11 -0
- package/dist/transaction/schema/loadStrategy.d.ts +45 -0
- package/dist/transaction/schema/loadStrategy.js +46 -0
- package/dist/{schema → transaction/schema}/model.d.ts +50 -35
- package/dist/{schema → transaction/schema}/model.js +30 -20
- package/dist/transaction/schema/openapi.d.ts +58 -0
- package/dist/transaction/schema/openapi.js +501 -0
- package/dist/{schema → transaction/schema}/relation.d.ts +21 -16
- package/dist/{schema → transaction/schema}/relation.js +7 -7
- package/dist/{schema → transaction/schema}/residency.d.ts +0 -9
- package/dist/{schema → transaction/schema}/residency.js +0 -5
- package/dist/{schema → transaction/schema}/roles.d.ts +5 -5
- package/dist/{schema → transaction/schema}/roles.js +5 -5
- package/dist/{schema → transaction/schema}/schema.d.ts +39 -10
- package/dist/{schema → transaction/schema}/schema.js +24 -3
- package/dist/{schema → transaction/schema}/tenancy.d.ts +1 -1
- package/dist/{schema → transaction/schema}/tenancy.js +7 -4
- package/dist/transaction/transactionLayer.d.ts +82 -0
- package/dist/transaction/transactionLayer.js +24 -0
- package/dist/{transactions → transaction/transactions/settlement}/commitEnvelope.d.ts +5 -6
- package/dist/{transactions → transaction/transactions/settlement}/commitEnvelope.js +9 -13
- package/dist/{transactions → transaction/transactions/settlement}/httpCommitEnvelope.d.ts +9 -2
- package/dist/{transactions → transaction/transactions/settlement}/httpCommitEnvelope.js +5 -9
- package/dist/{transactions/durableWriteStore.d.ts → transaction/transactions/settlement/pendingWrite.d.ts} +11 -37
- package/dist/transaction/transactions/settlement/pendingWrite.js +20 -0
- package/dist/transaction/transport/commitFrames.d.ts +90 -0
- package/dist/transaction/transport/commitFrames.js +134 -0
- package/dist/transaction/transport/connectionManager.d.ts +215 -0
- package/dist/transaction/transport/connectionManager.js +673 -0
- package/dist/transaction/transport/credentialLifecycle.d.ts +177 -0
- package/dist/transaction/transport/credentialLifecycle.js +324 -0
- package/dist/{sync → transaction/transport}/heartbeat.d.ts +3 -1
- package/dist/{sync → transaction/transport}/heartbeat.js +6 -4
- package/dist/transaction/transport/httpClient.d.ts +131 -0
- package/dist/{client → transaction/transport}/httpClient.js +6 -5
- package/dist/transaction/transport/httpOptions.d.ts +33 -0
- package/dist/transaction/transport/httpOptions.js +12 -0
- package/dist/{client → transaction/transport}/httpTransport.js +295 -97
- package/dist/{sync/NetworkProbe.d.ts → transaction/transport/networkProbe.d.ts} +7 -4
- package/dist/{sync/NetworkProbe.js → transaction/transport/networkProbe.js} +14 -13
- package/dist/transaction/transport/wsFrameHandlers.d.ts +128 -0
- package/dist/transaction/transport/wsFrameHandlers.js +429 -0
- package/dist/transaction/transport/wsTransport.d.ts +574 -0
- package/dist/transaction/transport/wsTransport.js +1023 -0
- package/dist/transaction/types/assertExact.d.ts +17 -0
- package/dist/transaction/types/assertExact.js +1 -0
- package/dist/{types → transaction/types}/global.d.ts +17 -2
- package/dist/{types → transaction/types}/global.js +2 -1
- package/dist/{types → transaction/types}/index.d.ts +14 -46
- package/dist/{types → transaction/types}/index.js +7 -16
- package/dist/{types → transaction/types}/streams.d.ts +73 -45
- package/dist/transaction/utils/duration.d.ts +50 -0
- package/dist/{utils → transaction/utils}/duration.js +32 -0
- package/dist/{utils → transaction/utils}/json.d.ts +18 -0
- package/dist/transaction/utils/json.js +276 -0
- package/dist/transaction/wire/accountResponses.d.ts +420 -0
- package/dist/transaction/wire/accountResponses.js +290 -0
- package/dist/transaction/wire/auth.d.ts +56 -0
- package/dist/transaction/wire/auth.js +63 -0
- package/dist/transaction/wire/claimEvent.d.ts +76 -0
- package/dist/transaction/wire/claimEvent.js +73 -0
- package/dist/transaction/wire/claims.d.ts +530 -0
- package/dist/transaction/wire/claims.js +327 -0
- package/dist/{wire → transaction/wire}/commit.d.ts +125 -193
- package/dist/{wire → transaction/wire}/commit.js +68 -47
- package/dist/{wire → transaction/wire}/delta.d.ts +66 -17
- package/dist/{wire → transaction/wire}/delta.js +37 -13
- package/dist/transaction/wire/errorEnvelope.d.ts +72 -0
- package/dist/{wire → transaction/wire}/errorEnvelope.js +36 -5
- package/dist/transaction/wire/feedCursor.d.ts +60 -0
- package/dist/transaction/wire/feedCursor.js +82 -0
- package/dist/transaction/wire/feedEvent.d.ts +204 -0
- package/dist/transaction/wire/feedEvent.js +65 -0
- package/dist/transaction/wire/frames.d.ts +194 -0
- package/dist/transaction/wire/frames.js +50 -0
- package/dist/transaction/wire/inboundFrames.d.ts +562 -0
- package/dist/transaction/wire/inboundFrames.js +116 -0
- package/dist/transaction/wire/index.d.ts +54 -0
- package/dist/transaction/wire/index.js +83 -0
- package/dist/{wire → transaction/wire}/listEnvelope.d.ts +13 -14
- package/dist/transaction/wire/listEnvelope.js +42 -0
- package/dist/transaction/wire/modelMutations.d.ts +31 -0
- package/dist/transaction/wire/modelMutations.js +52 -0
- package/dist/transaction/wire/modelResponses.d.ts +85 -0
- package/dist/transaction/wire/modelResponses.js +43 -0
- package/dist/transaction/wire/modelShape.d.ts +78 -0
- package/dist/transaction/wire/modelShape.js +74 -0
- package/dist/transactions/{TransactionQueue.d.ts → mutations/MutationQueue.d.ts} +85 -38
- package/dist/transactions/{TransactionQueue.js → mutations/MutationQueue.js} +141 -80
- package/dist/transactions/{TransactionStore.d.ts → mutations/MutationStore.d.ts} +8 -8
- package/dist/transactions/{TransactionStore.js → mutations/MutationStore.js} +2 -2
- package/dist/transactions/{coalesceRules.d.ts → mutations/coalesceRules.d.ts} +10 -10
- package/dist/transactions/{coalesceRules.js → mutations/coalesceRules.js} +1 -1
- package/dist/transactions/mutations/commitLatency.d.ts +52 -0
- package/dist/transactions/mutations/commitLatency.js +130 -0
- package/dist/transactions/{commitOutboxStore.d.ts → mutations/commitOutboxStore.d.ts} +1 -5
- package/dist/transactions/{commitOutboxStore.js → mutations/commitOutboxStore.js} +1 -1
- package/dist/transactions/{commitPayload.d.ts → mutations/commitPayload.d.ts} +18 -16
- package/dist/transactions/{commitPayload.js → mutations/commitPayload.js} +15 -15
- package/dist/transactions/{deltaConfirmation.d.ts → mutations/deltaConfirmation.d.ts} +15 -11
- package/dist/transactions/{deltaConfirmation.js → mutations/deltaConfirmation.js} +14 -12
- package/dist/transactions/mutations/durableWriteStore.d.ts +14 -0
- package/dist/transactions/mutations/durableWriteStore.js +12 -0
- package/dist/transactions/{optimisticApply.d.ts → mutations/optimisticApply.d.ts} +7 -7
- package/dist/transactions/{replayValidation.d.ts → mutations/replayValidation.d.ts} +4 -3
- package/dist/transactions/{replayValidation.js → mutations/replayValidation.js} +7 -5
- package/dist/utils/mobxSetup.d.ts +1 -1
- package/dist/utils/mobxSetup.js +5 -2
- package/dist/{core → views}/QueryView.d.ts +2 -2
- package/dist/{core → views}/QueryView.js +2 -2
- package/dist/{core → views}/ViewRegistry.d.ts +1 -1
- package/dist/{core/queryUtils.d.ts → views/incrementalView.d.ts} +6 -6
- package/dist/{core/queryUtils.js → views/incrementalView.js} +6 -6
- package/dist/webhooks/events.d.ts +2 -2
- package/dist/wire/index.d.ts +1 -34
- package/dist/wire/index.js +8 -49
- package/docs/agent-messaging.md +3 -3
- package/docs/agents.md +20 -13
- package/docs/api-keys.md +14 -10
- package/docs/api.md +27 -61
- package/docs/audit.md +6 -3
- package/docs/cli.md +41 -13
- package/docs/client-behavior.md +11 -9
- package/docs/concurrency-convention.md +49 -57
- package/docs/coordination.md +283 -121
- package/docs/data-sources.md +7 -5
- package/docs/debugging.md +39 -15
- package/docs/deployment.md +267 -0
- package/docs/examples/agent-human.md +49 -42
- package/docs/examples/ai-sdk-tool.md +69 -44
- package/docs/examples/existing-python-backend.md +8 -6
- package/docs/examples/nextjs.md +129 -47
- package/docs/examples/scoped-agent.md +46 -45
- package/docs/examples/server-agent.md +46 -26
- package/docs/groups.md +87 -30
- package/docs/guarantees.md +41 -12
- package/docs/how-it-works.md +38 -12
- package/docs/idempotency.md +126 -0
- package/docs/identity.md +77 -74
- package/docs/index.md +172 -86
- package/docs/integration-guide.md +31 -19
- package/docs/mcp.md +46 -21
- package/docs/migration.md +95 -18
- package/docs/operating-on-your-database.md +3 -1
- package/docs/projects.md +3 -1
- package/docs/quickstart.md +22 -5
- package/docs/react.md +31 -18
- package/docs/schema-contract.md +5 -3
- package/docs/session-settings.md +108 -0
- package/docs/sessions.md +4 -2
- package/docs/webhooks.md +12 -10
- package/llms.txt +48 -18
- package/package.json +21 -26
- package/dist/agent/Agent.d.ts +0 -366
- package/dist/agent/Agent.js +0 -514
- package/dist/agent/index.d.ts +0 -115
- package/dist/agent/index.js +0 -128
- package/dist/agent/session.d.ts +0 -93
- package/dist/agent/session.js +0 -149
- package/dist/agent/types.d.ts +0 -68
- package/dist/agent/types.js +0 -9
- package/dist/cli.cjs +0 -286329
- package/dist/client/durableWrites.d.ts +0 -21
- package/dist/client/httpClient.d.ts +0 -80
- package/dist/coordination/schema.d.ts +0 -722
- package/dist/coordination/schema.js +0 -578
- package/dist/schema/openapi.d.ts +0 -29
- package/dist/schema/openapi.js +0 -124
- package/dist/testing/fixtures/bootstrap.d.ts +0 -49
- package/dist/testing/fixtures/bootstrap.js +0 -59
- package/dist/testing/fixtures/deltas.d.ts +0 -83
- package/dist/testing/fixtures/deltas.js +0 -136
- package/dist/testing/fixtures/models.d.ts +0 -83
- package/dist/testing/fixtures/models.js +0 -272
- package/dist/testing/helpers/reactWrapper.d.ts +0 -69
- package/dist/testing/helpers/reactWrapper.js +0 -67
- package/dist/testing/helpers/syncEngineHarness.d.ts +0 -54
- package/dist/testing/helpers/syncEngineHarness.js +0 -73
- package/dist/testing/helpers/wait.d.ts +0 -30
- package/dist/testing/helpers/wait.js +0 -49
- package/dist/testing/index.d.ts +0 -23
- package/dist/testing/index.js +0 -33
- package/dist/testing/mocks/FakeDatabase.d.ts +0 -18
- package/dist/testing/mocks/FakeDatabase.js +0 -10
- package/dist/testing/mocks/MockMutationExecutor.d.ts +0 -87
- package/dist/testing/mocks/MockMutationExecutor.js +0 -192
- package/dist/testing/mocks/MockNetworkMonitor.d.ts +0 -20
- package/dist/testing/mocks/MockNetworkMonitor.js +0 -46
- package/dist/testing/mocks/MockSyncContext.d.ts +0 -51
- package/dist/testing/mocks/MockSyncContext.js +0 -71
- package/dist/testing/mocks/MockSyncStore.d.ts +0 -88
- package/dist/testing/mocks/MockSyncStore.js +0 -171
- package/dist/testing/mocks/MockWebSocket.d.ts +0 -71
- package/dist/testing/mocks/MockWebSocket.js +0 -118
- package/dist/transactions/durableWriteStore.js +0 -30
- package/dist/utils/duration.d.ts +0 -25
- package/dist/utils/json.js +0 -88
- package/dist/wire/errorEnvelope.d.ts +0 -55
- package/dist/wire/frames.d.ts +0 -197
- package/dist/wire/frames.js +0 -49
- package/dist/wire/listEnvelope.js +0 -18
- package/docs/interaction-model.md +0 -97
- /package/dist/{core → query}/QueryProcessor.d.ts +0 -0
- /package/dist/{core → query}/QueryProcessor.js +0 -0
- /package/dist/{core/storeContract.js → storeContract.js} +0 -0
- /package/dist/{core → stores}/openIDBWithTimeout.d.ts +0 -0
- /package/dist/{core → stores}/openIDBWithTimeout.js +0 -0
- /package/dist/{client → transaction/auth}/credentialEndpoint.d.ts +0 -0
- /package/dist/{client → transaction/auth}/credentialEndpoint.js +0 -0
- /package/dist/{auth → transaction/auth}/credentialPolicy.d.ts +0 -0
- /package/dist/{auth → transaction/auth}/credentialPolicy.js +0 -0
- /package/dist/{auth → transaction/auth}/credentialSource.js +0 -0
- /package/dist/{client → transaction/auth}/hostedEndpoints.d.ts +0 -0
- /package/dist/{client → transaction/auth}/hostedEndpoints.js +0 -0
- /package/dist/{client → transaction}/persistence.d.ts +0 -0
- /package/dist/{client → transaction}/persistence.js +0 -0
- /package/dist/{client → transaction/resources}/functionalUpdate.d.ts +0 -0
- /package/dist/{client → transaction/resources}/functionalUpdate.js +0 -0
- /package/dist/{transactions → transaction/transactions/settlement}/idempotencyKey.d.ts +0 -0
- /package/dist/{transactions → transaction/transactions/settlement}/idempotencyKey.js +0 -0
- /package/dist/{client → transaction/transport}/httpTransport.d.ts +0 -0
- /package/dist/{types → transaction/types}/modelData.d.ts +0 -0
- /package/dist/{types → transaction/types}/modelData.js +0 -0
- /package/dist/{types → transaction/types}/participant.d.ts +0 -0
- /package/dist/{types → transaction/types}/participant.js +0 -0
- /package/dist/{types → transaction/types}/streams.js +0 -0
- /package/dist/{utils → transaction/utils}/asyncIterator.d.ts +0 -0
- /package/dist/{utils → transaction/utils}/asyncIterator.js +0 -0
- /package/dist/{wire → transaction/wire}/bootstrapReason.d.ts +0 -0
- /package/dist/{wire → transaction/wire}/bootstrapReason.js +0 -0
- /package/dist/{wire → transaction/wire}/protocol.d.ts +0 -0
- /package/dist/{wire → transaction/wire}/protocol.js +0 -0
- /package/dist/{wire → transaction/wire}/protocolVersion.d.ts +0 -0
- /package/dist/{wire → transaction/wire}/protocolVersion.js +0 -0
- /package/dist/transactions/{UnconfirmedWrites.d.ts → mutations/UnconfirmedWrites.d.ts} +0 -0
- /package/dist/transactions/{UnconfirmedWrites.js → mutations/UnconfirmedWrites.js} +0 -0
- /package/dist/transactions/{optimisticApply.js → mutations/optimisticApply.js} +0 -0
- /package/dist/{core → views}/ViewRegistry.js +0 -0
package/dist/wire/frames.d.ts
DELETED
|
@@ -1,197 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* The write-path message shapes for the sync protocol. These cover the frames
|
|
3
|
-
* a client sends to commit work — {@link CommitMessage}, a batch of raw
|
|
4
|
-
* operations — and the server's {@link MutationResultMessage}
|
|
5
|
-
* acknowledgement. The same frames flow over a WebSocket connection and over
|
|
6
|
-
* the HTTP commit endpoint.
|
|
7
|
-
*
|
|
8
|
-
* Both the client and the server import these definitions from here, so the two
|
|
9
|
-
* sides cannot drift. Each interface is paired with a Zod validator
|
|
10
|
-
* ({@link commitOperationSchema}, {@link commitPayloadSchema}) pinned to it at
|
|
11
|
-
* compile time, so the runtime check and the type stay in lockstep. Changing
|
|
12
|
-
* any shape in this file changes the wire contract and requires the client and
|
|
13
|
-
* server to update together.
|
|
14
|
-
*/
|
|
15
|
-
import { z } from 'zod';
|
|
16
|
-
import type { OnStaleMode, ReadDependency, TrackDependency } from '../coordination/index.js';
|
|
17
|
-
import type { MutationResultMessageWire } from './commit.js';
|
|
18
|
-
/**
|
|
19
|
-
* A single operation within a {@link CommitMessage} batch. Each operation is
|
|
20
|
-
* the smallest unit the server applies atomically — one create, update,
|
|
21
|
-
* delete, archive, or unarchive against one model row.
|
|
22
|
-
*/
|
|
23
|
-
export interface CommitOperation {
|
|
24
|
-
type: 'CREATE' | 'UPDATE' | 'DELETE' | 'ARCHIVE' | 'UNARCHIVE';
|
|
25
|
-
model: string;
|
|
26
|
-
id?: string | null;
|
|
27
|
-
input?: Record<string, unknown> | null;
|
|
28
|
-
/**
|
|
29
|
-
* A client-generated transaction id for this one operation. The server
|
|
30
|
-
* stamps it onto the `sync_deltas.transaction_id` column so the originating
|
|
31
|
-
* client can recognize the resulting broadcast as an echo of its own
|
|
32
|
-
* optimistic write. This is distinct from the batch-level `clientTxId` on
|
|
33
|
-
* {@link CommitMessage}, which the server uses to deduplicate retried batches.
|
|
34
|
-
*/
|
|
35
|
-
transactionId?: string | null;
|
|
36
|
-
/**
|
|
37
|
-
* A read watermark captured when the client last read this row. The server
|
|
38
|
-
* checks whether the target has changed since this point; if it has, the
|
|
39
|
-
* operation's {@link CommitOperation.onStale} mode decides what happens.
|
|
40
|
-
*/
|
|
41
|
-
readAt?: number | null;
|
|
42
|
-
/**
|
|
43
|
-
* What to do when the server detects the row changed since
|
|
44
|
-
* {@link CommitOperation.readAt}. `'reject'` (the default) fails the
|
|
45
|
-
* operation with a stale-context error; `'overwrite'` applies the write
|
|
46
|
-
* regardless; `'notify'` holds the write and returns a
|
|
47
|
-
* {@link StaleNotification} for the caller to resolve.
|
|
48
|
-
*/
|
|
49
|
-
onStale?: OnStaleMode | null;
|
|
50
|
-
/**
|
|
51
|
-
* Write even when another participant holds a claim on this row. The default
|
|
52
|
-
* (`false`) rejects the operation with a claimed-entity error while a claim
|
|
53
|
-
* is held. Setting `bypass` overrides that, and the override is recorded. It
|
|
54
|
-
* is honored only for participants the claim guard trusts, such as human and
|
|
55
|
-
* framework identities; a bypass requested by an agent is ignored.
|
|
56
|
-
*/
|
|
57
|
-
bypass?: boolean | null;
|
|
58
|
-
/**
|
|
59
|
-
* The monotonic fencing token of the held claim this write was issued under
|
|
60
|
-
* ({@link https://martin.kleppmann.com/2016/02/08/how-to-do-distributed-locking.html Kleppmann fencing}).
|
|
61
|
-
* The server rejects the write if a later holder already advanced this
|
|
62
|
-
* entity's persisted high-water past the token — closing the "lapsed holder
|
|
63
|
-
* resumes after its successor came and went" residual that the live-lease
|
|
64
|
-
* claim guard cannot see. Absent on every unclaimed write.
|
|
65
|
-
*/
|
|
66
|
-
fenceToken?: number | null;
|
|
67
|
-
}
|
|
68
|
-
/**
|
|
69
|
-
* Runtime validator for {@link CommitOperation}. Both commit transports — the
|
|
70
|
-
* WebSocket `commit` frame and the HTTP `/v1/commits` endpoint — run this check
|
|
71
|
-
* on every operation before it is applied, so a malformed operation is rejected
|
|
72
|
-
* at the edge. It builds on the shared coordination schema, widening `bypass`
|
|
73
|
-
* to also accept `null` so the validator and the interface match exactly. Note
|
|
74
|
-
* that `readAt` must be a number: it feeds the server's stale-check comparison,
|
|
75
|
-
* so a non-numeric watermark is refused here.
|
|
76
|
-
*/
|
|
77
|
-
export declare const commitOperationSchema: z.ZodObject<{
|
|
78
|
-
readAt: z.ZodOptional<z.ZodNullable<z.ZodNumber>>;
|
|
79
|
-
onStale: z.ZodOptional<z.ZodNullable<z.ZodEnum<{
|
|
80
|
-
reject: "reject";
|
|
81
|
-
overwrite: "overwrite";
|
|
82
|
-
notify: "notify";
|
|
83
|
-
}>>>;
|
|
84
|
-
type: z.ZodEnum<{
|
|
85
|
-
CREATE: "CREATE";
|
|
86
|
-
UPDATE: "UPDATE";
|
|
87
|
-
DELETE: "DELETE";
|
|
88
|
-
ARCHIVE: "ARCHIVE";
|
|
89
|
-
UNARCHIVE: "UNARCHIVE";
|
|
90
|
-
}>;
|
|
91
|
-
model: z.ZodString;
|
|
92
|
-
id: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
93
|
-
input: z.ZodOptional<z.ZodNullable<z.ZodRecord<z.ZodString, z.ZodUnknown>>>;
|
|
94
|
-
transactionId: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
95
|
-
fenceToken: z.ZodOptional<z.ZodNullable<z.ZodNumber>>;
|
|
96
|
-
bypass: z.ZodOptional<z.ZodNullable<z.ZodBoolean>>;
|
|
97
|
-
}, z.core.$strip>;
|
|
98
|
-
/**
|
|
99
|
-
* A client-to-server frame that asks the server to commit a batch of operations
|
|
100
|
-
* atomically. It carries a list of {@link CommitOperation} entries plus the
|
|
101
|
-
* batch metadata below.
|
|
102
|
-
*/
|
|
103
|
-
export interface CommitMessage {
|
|
104
|
-
type: 'commit';
|
|
105
|
-
payload: {
|
|
106
|
-
operations: CommitOperation[];
|
|
107
|
-
clientTxId: string;
|
|
108
|
-
/**
|
|
109
|
-
* Optional lineage id linking this batch to the task that caused it. When
|
|
110
|
-
* present, the server validates it and records it on the delta's
|
|
111
|
-
* `caused_by_task_id` column for audit trails; when omitted or `null`, the
|
|
112
|
-
* batch simply carries no task attribution.
|
|
113
|
-
*/
|
|
114
|
-
causedByTaskId?: string | null;
|
|
115
|
-
/**
|
|
116
|
-
* The reads this batch's writes were premised on. Each entry names either a
|
|
117
|
-
* specific row (`{ model, id, readAt, fields? }`) or a sync group
|
|
118
|
-
* (`{ group, readAt }`) that must not have changed since its `readAt`
|
|
119
|
-
* watermark. The server checks every entry and applies its `onStale`
|
|
120
|
-
* disposition to the whole batch if one moved. When omitted, only the rows
|
|
121
|
-
* being written are checked for staleness.
|
|
122
|
-
*/
|
|
123
|
-
reads?: ReadDependency[] | null;
|
|
124
|
-
/**
|
|
125
|
-
* Durable read-dependencies to register for this batch's participant. Each
|
|
126
|
-
* entry — a row (`{ model, id }`) or a sync group (`{ group }`) — is persisted
|
|
127
|
-
* and re-checked against every future delta; a later match surfaces a
|
|
128
|
-
* `StaleNotification` on the participant's next commit. Distinct from `reads`,
|
|
129
|
-
* which is checked once here and discarded.
|
|
130
|
-
*/
|
|
131
|
-
track?: TrackDependency[] | null;
|
|
132
|
-
};
|
|
133
|
-
}
|
|
134
|
-
/**
|
|
135
|
-
* Runtime validator for the payload of {@link CommitMessage}. It checks every
|
|
136
|
-
* field the server acts on — `operations`, `clientTxId`, `causedByTaskId`, and
|
|
137
|
-
* `reads` — validating each operation with {@link commitOperationSchema} and
|
|
138
|
-
* each read dependency with the shared read-dependency schema.
|
|
139
|
-
*/
|
|
140
|
-
export declare const commitPayloadSchema: z.ZodObject<{
|
|
141
|
-
operations: z.ZodArray<z.ZodObject<{
|
|
142
|
-
readAt: z.ZodOptional<z.ZodNullable<z.ZodNumber>>;
|
|
143
|
-
onStale: z.ZodOptional<z.ZodNullable<z.ZodEnum<{
|
|
144
|
-
reject: "reject";
|
|
145
|
-
overwrite: "overwrite";
|
|
146
|
-
notify: "notify";
|
|
147
|
-
}>>>;
|
|
148
|
-
type: z.ZodEnum<{
|
|
149
|
-
CREATE: "CREATE";
|
|
150
|
-
UPDATE: "UPDATE";
|
|
151
|
-
DELETE: "DELETE";
|
|
152
|
-
ARCHIVE: "ARCHIVE";
|
|
153
|
-
UNARCHIVE: "UNARCHIVE";
|
|
154
|
-
}>;
|
|
155
|
-
model: z.ZodString;
|
|
156
|
-
id: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
157
|
-
input: z.ZodOptional<z.ZodNullable<z.ZodRecord<z.ZodString, z.ZodUnknown>>>;
|
|
158
|
-
transactionId: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
159
|
-
fenceToken: z.ZodOptional<z.ZodNullable<z.ZodNumber>>;
|
|
160
|
-
bypass: z.ZodOptional<z.ZodNullable<z.ZodBoolean>>;
|
|
161
|
-
}, z.core.$strip>>;
|
|
162
|
-
clientTxId: z.ZodString;
|
|
163
|
-
causedByTaskId: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
164
|
-
reads: z.ZodOptional<z.ZodNullable<z.ZodArray<z.ZodUnion<readonly [z.ZodObject<{
|
|
165
|
-
model: z.ZodString;
|
|
166
|
-
id: z.ZodString;
|
|
167
|
-
readAt: z.ZodNumber;
|
|
168
|
-
fields: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
169
|
-
onStale: z.ZodOptional<z.ZodEnum<{
|
|
170
|
-
reject: "reject";
|
|
171
|
-
overwrite: "overwrite";
|
|
172
|
-
notify: "notify";
|
|
173
|
-
}>>;
|
|
174
|
-
}, z.core.$strip>, z.ZodObject<{
|
|
175
|
-
group: z.ZodString;
|
|
176
|
-
readAt: z.ZodNumber;
|
|
177
|
-
onStale: z.ZodOptional<z.ZodEnum<{
|
|
178
|
-
reject: "reject";
|
|
179
|
-
overwrite: "overwrite";
|
|
180
|
-
notify: "notify";
|
|
181
|
-
}>>;
|
|
182
|
-
}, z.core.$strip>]>>>>;
|
|
183
|
-
track: z.ZodOptional<z.ZodNullable<z.ZodArray<z.ZodUnion<readonly [z.ZodObject<{
|
|
184
|
-
model: z.ZodString;
|
|
185
|
-
id: z.ZodString;
|
|
186
|
-
readAt: z.ZodOptional<z.ZodNumber>;
|
|
187
|
-
}, z.core.$strip>, z.ZodObject<{
|
|
188
|
-
group: z.ZodString;
|
|
189
|
-
readAt: z.ZodOptional<z.ZodNumber>;
|
|
190
|
-
}, z.core.$strip>]>>>>;
|
|
191
|
-
}, z.core.$strip>;
|
|
192
|
-
/**
|
|
193
|
-
* The server's acknowledgement of a {@link CommitMessage}. Runtime shape and
|
|
194
|
-
* TypeScript type are both owned by `wire/commit.ts`; HTTP, WebSocket, and
|
|
195
|
-
* cached replay no longer maintain parallel receipt declarations.
|
|
196
|
-
*/
|
|
197
|
-
export type MutationResultMessage = MutationResultMessageWire;
|
package/dist/wire/frames.js
DELETED
|
@@ -1,49 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* The write-path message shapes for the sync protocol. These cover the frames
|
|
3
|
-
* a client sends to commit work — {@link CommitMessage}, a batch of raw
|
|
4
|
-
* operations — and the server's {@link MutationResultMessage}
|
|
5
|
-
* acknowledgement. The same frames flow over a WebSocket connection and over
|
|
6
|
-
* the HTTP commit endpoint.
|
|
7
|
-
*
|
|
8
|
-
* Both the client and the server import these definitions from here, so the two
|
|
9
|
-
* sides cannot drift. Each interface is paired with a Zod validator
|
|
10
|
-
* ({@link commitOperationSchema}, {@link commitPayloadSchema}) pinned to it at
|
|
11
|
-
* compile time, so the runtime check and the type stay in lockstep. Changing
|
|
12
|
-
* any shape in this file changes the wire contract and requires the client and
|
|
13
|
-
* server to update together.
|
|
14
|
-
*/
|
|
15
|
-
import { z } from 'zod';
|
|
16
|
-
// The runtime schema primitives are imported straight from the coordination
|
|
17
|
-
// schema module to keep this file's runtime dependencies limited to Zod.
|
|
18
|
-
import { commitOperationSchema as coordinationCommitOperationSchema, readDependencySchema, trackDependencySchema, } from '../coordination/schema.js';
|
|
19
|
-
/**
|
|
20
|
-
* Runtime validator for {@link CommitOperation}. Both commit transports — the
|
|
21
|
-
* WebSocket `commit` frame and the HTTP `/v1/commits` endpoint — run this check
|
|
22
|
-
* on every operation before it is applied, so a malformed operation is rejected
|
|
23
|
-
* at the edge. It builds on the shared coordination schema, widening `bypass`
|
|
24
|
-
* to also accept `null` so the validator and the interface match exactly. Note
|
|
25
|
-
* that `readAt` must be a number: it feeds the server's stale-check comparison,
|
|
26
|
-
* so a non-numeric watermark is refused here.
|
|
27
|
-
*/
|
|
28
|
-
export const commitOperationSchema = coordinationCommitOperationSchema.extend({
|
|
29
|
-
bypass: z.boolean().nullish(),
|
|
30
|
-
});
|
|
31
|
-
// Pins the schema to the interface: this fails to compile if either side drifts.
|
|
32
|
-
const _commitOperationContract = true;
|
|
33
|
-
void _commitOperationContract;
|
|
34
|
-
/**
|
|
35
|
-
* Runtime validator for the payload of {@link CommitMessage}. It checks every
|
|
36
|
-
* field the server acts on — `operations`, `clientTxId`, `causedByTaskId`, and
|
|
37
|
-
* `reads` — validating each operation with {@link commitOperationSchema} and
|
|
38
|
-
* each read dependency with the shared read-dependency schema.
|
|
39
|
-
*/
|
|
40
|
-
export const commitPayloadSchema = z.object({
|
|
41
|
-
operations: z.array(commitOperationSchema),
|
|
42
|
-
clientTxId: z.string(),
|
|
43
|
-
causedByTaskId: z.string().nullish(),
|
|
44
|
-
reads: z.array(readDependencySchema).nullish(),
|
|
45
|
-
track: z.array(trackDependencySchema).nullish(),
|
|
46
|
-
});
|
|
47
|
-
// Pins the schema to the payload type: fails to compile if either side drifts.
|
|
48
|
-
const _commitPayloadContract = true;
|
|
49
|
-
void _commitPayloadContract;
|
|
@@ -1,18 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Wraps an already-fetched page of rows in the uniform {@link ListEnvelope}.
|
|
3
|
-
*
|
|
4
|
-
* Pagination stays the caller's job — fetch one more row than the limit to
|
|
5
|
-
* decide `hasMore`, and derive the cursor from the last row's sort key. This
|
|
6
|
-
* helper only applies the envelope so no endpoint has to build the shape by
|
|
7
|
-
* hand. The defaults describe a small, unpaginated collection
|
|
8
|
-
* (`has_more: false`, `next_cursor: null`); a paginated endpoint passes both
|
|
9
|
-
* explicitly.
|
|
10
|
-
*/
|
|
11
|
-
export function listEnvelope(data, opts = {}) {
|
|
12
|
-
return {
|
|
13
|
-
object: 'list',
|
|
14
|
-
data,
|
|
15
|
-
has_more: opts.hasMore ?? false,
|
|
16
|
-
next_cursor: opts.nextCursor ?? null,
|
|
17
|
-
};
|
|
18
|
-
}
|
|
@@ -1,97 +0,0 @@
|
|
|
1
|
-
# Interaction Model
|
|
2
|
-
|
|
3
|
-
When a person, a server action, and an AI agent can all write to the same row,
|
|
4
|
-
you need one write path that stops them from clobbering each other. Ablo gives
|
|
5
|
-
you exactly one: load the row, claim it while you work, update it, and wait for
|
|
6
|
-
confirmation. This page walks through that path and the few primitives behind it.
|
|
7
|
-
|
|
8
|
-
Here's the whole path in one block — claim a row, update it inside the claim, and
|
|
9
|
-
let the claim release when your callback returns:
|
|
10
|
-
|
|
11
|
-
```ts
|
|
12
|
-
const report = await ablo.weatherReports.retrieve({ id: 'report_stockholm' });
|
|
13
|
-
|
|
14
|
-
await using claim = await ablo.weatherReports.claim({ id: 'report_stockholm' });
|
|
15
|
-
await ablo.weatherReports.update({ id: claim.data.id, data: { status: 'ready' }, wait: 'confirmed' });
|
|
16
|
-
```
|
|
17
|
-
|
|
18
|
-
Claims don't lock. If another writer holds the row, `claim` waits for them,
|
|
19
|
-
re-reads the fresh row, then hands it to you — so two writers serialize instead
|
|
20
|
-
of clobbering.
|
|
21
|
-
|
|
22
|
-
## Primitives
|
|
23
|
-
|
|
24
|
-
| Primitive | Plane | Purpose |
|
|
25
|
-
|---|---|---|
|
|
26
|
-
| `Schema` | State | Declares typed models the app and agents can read and write. |
|
|
27
|
-
| `Model` | State | The generated `ablo.<model>` model. Use `retrieve`/`list` (async server reads), `get`/`getAll`/`getCount` (synchronous local reads), `create`, `update`, and `delete`. |
|
|
28
|
-
| `Claim` | Coordination | Who is working on a target. Taken via `ablo.<model>.claim({ id })` and read via `ablo.<model>.claim.state({ id })`. Ephemeral — never persisted. |
|
|
29
|
-
| `Commit` | Protocol | The durable write underneath model updates. Most users do not call it directly. |
|
|
30
|
-
| `Receipt` | Protocol | The lower-level durable result for custom runtimes. Schema writes use `wait: 'confirmed'`. |
|
|
31
|
-
|
|
32
|
-
### Why each primitive is separate
|
|
33
|
-
|
|
34
|
-
Why are `Claim`, `Commit`, and `Receipt` separate things instead of one? Each
|
|
35
|
-
does a job the others can't. If you're coming from Replicache or Yjs you'd
|
|
36
|
-
expect just `Commit`; here's what the other two buy you over that minimum:
|
|
37
|
-
|
|
38
|
-
- **`Claim` is not a read lock.** Reads stay open. Claims serialize
|
|
39
|
-
acting-on-the-row, so slow work can wait in FIFO order, re-read, and write
|
|
40
|
-
from fresh state.
|
|
41
|
-
- **`Receipt` is not a `200 OK`.** It's the durable artifact a commit
|
|
42
|
-
produced — accepted commit id, server-assigned timestamps, stale-check
|
|
43
|
-
outcome — addressable after the fact and replayable into a different
|
|
44
|
-
client. A status code can't be re-read by a sub-agent that wasn't on
|
|
45
|
-
the original call.
|
|
46
|
-
|
|
47
|
-
## Run Loop
|
|
48
|
-
|
|
49
|
-
A normal schema-backed run is:
|
|
50
|
-
|
|
51
|
-
```ts
|
|
52
|
-
const report = await ablo.weatherReports.retrieve({ id });
|
|
53
|
-
const active = ablo.weatherReports.claim.state({ id });
|
|
54
|
-
await using claim = await ablo.weatherReports.claim({ id });
|
|
55
|
-
await ablo.weatherReports.update({ id: claim.data.id, data: patch, wait: 'confirmed' });
|
|
56
|
-
```
|
|
57
|
-
|
|
58
|
-
`retrieve({ id })` is an async server read (await it). `claim.state({ id })` is a
|
|
59
|
-
synchronous local read of who currently holds the row — it never blocks.
|
|
60
|
-
|
|
61
|
-
## Coordination
|
|
62
|
-
|
|
63
|
-
> Loop view only. Full claim reference — methods, the claim-state object, the
|
|
64
|
-
> `claim.queue`, errors — is [Coordination](./coordination.md).
|
|
65
|
-
|
|
66
|
-
Claims broadcast across the org. Call `claim({ id })`, do your writes with the
|
|
67
|
-
normal `update` inside the `await using` scope, and the claim releases
|
|
68
|
-
automatically when the scope exits:
|
|
69
|
-
|
|
70
|
-
```ts
|
|
71
|
-
await using claim = await ablo.weatherReports.claim({
|
|
72
|
-
id: 'report_stockholm',
|
|
73
|
-
description: 'editing',
|
|
74
|
-
});
|
|
75
|
-
await ablo.weatherReports.update({ id: claim.data.id, data: { status: 'ready' } }); // rejected if the row changed under the claim
|
|
76
|
-
```
|
|
77
|
-
|
|
78
|
-
`ablo.weatherReports.claim.state({ id: 'report_stockholm' })` reads the live claim (or
|
|
79
|
-
`null`) without blocking. Claims don't lock: if another participant holds the
|
|
80
|
-
row, `claim` waits for them to finish, re-reads, and then hands you the fresh
|
|
81
|
-
row. The same signal is visible to every schema client through `claim.state({ id })`
|
|
82
|
-
and the live claim stream.
|
|
83
|
-
|
|
84
|
-
## Conflict resolution
|
|
85
|
-
|
|
86
|
-
Schema updates can carry `readAt` and `onStale`. If the state advanced past
|
|
87
|
-
`readAt`, Ablo applies the `onStale` policy:
|
|
88
|
-
|
|
89
|
-
- `reject` — fail the commit (first writer wins).
|
|
90
|
-
- `notify` — accept the write, but flag it for product review.
|
|
91
|
-
- `overwrite` — apply the write unconditionally.
|
|
92
|
-
|
|
93
|
-
The choice is per-commit. No CRDT default; the policy is explicit.
|
|
94
|
-
|
|
95
|
-
## The contract in one sentence
|
|
96
|
-
|
|
97
|
-
Declare schema, load state, coordinate a claim, update the model, and wait for confirmation.
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|