@abloatai/ablo 0.35.0 → 0.37.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 -2
- package/CHANGELOG.md +71 -1929
- package/NOTICE +2 -2
- package/README.md +23 -532
- package/assets/banner.png +0 -0
- package/dist/auth.d.ts +2 -0
- package/dist/auth.d.ts.map +1 -0
- package/dist/auth.js +2 -0
- package/dist/auth.js.map +1 -0
- package/dist/client.d.ts +3 -0
- package/dist/client.d.ts.map +1 -0
- package/dist/client.js +3 -0
- package/dist/client.js.map +1 -0
- package/dist/coordination.d.ts +2 -0
- package/dist/coordination.d.ts.map +1 -0
- package/dist/coordination.js +2 -0
- package/dist/coordination.js.map +1 -0
- package/dist/index.d.ts +3 -112
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +3 -161
- package/dist/index.js.map +1 -0
- package/dist/react.d.ts +4 -0
- package/dist/react.d.ts.map +1 -0
- package/dist/react.js +3 -0
- package/dist/react.js.map +1 -0
- package/dist/schema.d.ts +2 -0
- package/dist/schema.d.ts.map +1 -0
- package/dist/schema.js +2 -0
- package/dist/schema.js.map +1 -0
- package/dist/server.d.ts +2 -0
- package/dist/server.d.ts.map +1 -0
- package/dist/server.js +2 -0
- package/dist/server.js.map +1 -0
- package/dist/source-conformance.d.ts +2 -0
- package/dist/source-conformance.d.ts.map +1 -0
- package/dist/source-conformance.js +2 -0
- package/dist/source-conformance.js.map +1 -0
- package/dist/source-drizzle.d.ts +2 -0
- package/dist/source-drizzle.d.ts.map +1 -0
- package/dist/source-drizzle.js +2 -0
- package/dist/source-drizzle.js.map +1 -0
- package/dist/source-kysely.d.ts +2 -0
- package/dist/source-kysely.d.ts.map +1 -0
- package/dist/source-kysely.js +2 -0
- package/dist/source-kysely.js.map +1 -0
- package/dist/source-next.d.ts +2 -0
- package/dist/source-next.d.ts.map +1 -0
- package/dist/source-next.js +2 -0
- package/dist/source-next.js.map +1 -0
- package/dist/source.d.ts +2 -0
- package/dist/source.d.ts.map +1 -0
- package/dist/source.js +2 -0
- package/dist/source.js.map +1 -0
- package/dist/wire.d.ts +2 -0
- package/dist/wire.d.ts.map +1 -0
- package/dist/wire.js +2 -0
- package/dist/wire.js.map +1 -0
- package/docs/agents.md +2 -2
- package/docs/api-keys.md +13 -12
- package/docs/api.md +15 -53
- package/docs/audit.md +4 -3
- package/docs/cli.md +11 -11
- package/docs/client-behavior.md +9 -9
- package/docs/concurrency-convention.md +28 -42
- package/docs/coordination.md +228 -86
- package/docs/data-sources.md +5 -5
- package/docs/debugging.md +34 -12
- package/docs/deployment.md +8 -8
- package/docs/examples/agent-human.md +4 -4
- package/docs/examples/ai-sdk-tool.md +1 -1
- package/docs/examples/existing-python-backend.md +15 -4
- package/docs/examples/nextjs.md +27 -6
- package/docs/examples/scoped-agent.md +3 -3
- package/docs/examples/server-agent.md +2 -2
- package/docs/groups.md +57 -3
- package/docs/guarantees.md +37 -10
- package/docs/how-it-works.md +32 -8
- package/docs/idempotency.md +6 -6
- package/docs/identity.md +24 -24
- package/docs/index.md +8 -8
- package/docs/integration-guide.md +38 -16
- package/docs/internal/README.md +18 -0
- package/docs/internal/agent-fleet-coordination-design.md +171 -0
- package/docs/internal/agent-orchestration.md +58 -0
- package/docs/internal/commit-identifiers.md +91 -0
- package/docs/internal/concurrency-open-decisions.md +37 -0
- package/docs/internal/data-source-reverse-channel.md +150 -0
- package/docs/internal/per-field-conflict-detection.md +165 -0
- package/docs/internal/postgres-replication.md +64 -0
- package/docs/internal/serializable-schema.md +119 -0
- package/docs/internal/structure.md +32 -0
- package/docs/mcp.md +9 -9
- package/docs/migration.md +37 -18
- package/docs/projects.md +1 -1
- package/docs/quickstart.md +2 -2
- package/docs/react.md +24 -13
- package/docs/schema-contract.md +3 -3
- package/docs/sessions.md +91 -37
- package/docs/webhooks.md +9 -9
- package/examples/README.md +2 -2
- package/examples/data-source/README.md +1 -1
- package/examples/data-source/ablo-driver.ts +1 -1
- package/examples/data-source/customer-server.ts +1 -1
- package/examples/data-source/run.ts +1 -1
- package/examples/data-source/schema.ts +1 -1
- package/examples/quickstart.ts +2 -2
- package/llms.txt +12 -12
- package/package.json +64 -174
- package/dist/BaseSyncedStore.d.ts +0 -823
- package/dist/BaseSyncedStore.js +0 -1955
- package/dist/Database.d.ts +0 -335
- package/dist/Database.js +0 -1500
- package/dist/InstanceCache.d.ts +0 -233
- package/dist/InstanceCache.js +0 -1164
- package/dist/LazyReferenceCollection.d.ts +0 -177
- package/dist/LazyReferenceCollection.js +0 -461
- package/dist/Model.d.ts +0 -444
- package/dist/Model.js +0 -909
- package/dist/ModelRegistry.d.ts +0 -221
- package/dist/ModelRegistry.js +0 -537
- package/dist/NetworkMonitor.d.ts +0 -26
- package/dist/NetworkMonitor.js +0 -77
- package/dist/RuntimeContext.d.ts +0 -52
- package/dist/RuntimeContext.js +0 -80
- package/dist/SyncClient.d.ts +0 -551
- package/dist/SyncClient.js +0 -2199
- package/dist/adapters/alwaysOnline.d.ts +0 -14
- package/dist/adapters/alwaysOnline.js +0 -17
- package/dist/adapters/inMemoryStorage.d.ts +0 -31
- package/dist/adapters/inMemoryStorage.js +0 -110
- package/dist/ai-sdk/coordinatedTool.d.ts +0 -120
- package/dist/ai-sdk/coordinatedTool.js +0 -134
- package/dist/ai-sdk/coordinationContext.d.ts +0 -46
- package/dist/ai-sdk/coordinationContext.js +0 -106
- package/dist/ai-sdk/index.d.ts +0 -121
- package/dist/ai-sdk/index.js +0 -121
- package/dist/ai-sdk/wrap.d.ts +0 -65
- package/dist/ai-sdk/wrap.js +0 -39
- package/dist/auth/index.d.ts +0 -1
- package/dist/auth/index.js +0 -8
- package/dist/batching/index.d.ts +0 -55
- package/dist/batching/index.js +0 -147
- package/dist/cli.cjs +0 -288600
- package/dist/client/Ablo.d.ts +0 -231
- package/dist/client/Ablo.js +0 -149
- package/dist/client/abloClient.d.ts +0 -309
- package/dist/client/abloClient.js +0 -13
- package/dist/client/clientPrelude.d.ts +0 -52
- package/dist/client/clientPrelude.js +0 -60
- package/dist/client/consoleLogger.d.ts +0 -35
- package/dist/client/consoleLogger.js +0 -44
- package/dist/client/coreClient.d.ts +0 -60
- package/dist/client/coreClient.js +0 -118
- package/dist/client/createInternalComponents.d.ts +0 -46
- package/dist/client/createInternalComponents.js +0 -92
- package/dist/client/createModelProxy.d.ts +0 -228
- package/dist/client/createModelProxy.js +0 -818
- package/dist/client/humans.d.ts +0 -48
- package/dist/client/humans.js +0 -52
- package/dist/client/modelRegistration.d.ts +0 -10
- package/dist/client/modelRegistration.js +0 -312
- package/dist/client/options.d.ts +0 -461
- package/dist/client/options.js +0 -7
- package/dist/client/reactiveEngine.d.ts +0 -48
- package/dist/client/reactiveEngine.js +0 -910
- package/dist/client/resourceTypes.d.ts +0 -12
- package/dist/client/resourceTypes.js +0 -10
- package/dist/client/schemaConfig.d.ts +0 -44
- package/dist/client/schemaConfig.js +0 -185
- package/dist/client/validateAbloOptions.d.ts +0 -42
- package/dist/client/validateAbloOptions.js +0 -43
- package/dist/client/wsMutationExecutor.d.ts +0 -27
- package/dist/client/wsMutationExecutor.js +0 -72
- package/dist/context.d.ts +0 -29
- package/dist/context.js +0 -58
- package/dist/coordination/ClaimLog.d.ts +0 -26
- package/dist/coordination/ClaimLog.js +0 -32
- package/dist/coordination/index.d.ts +0 -1
- package/dist/coordination/index.js +0 -8
- package/dist/core/DatabaseManager.d.ts +0 -105
- package/dist/core/DatabaseManager.js +0 -387
- package/dist/core/QueryProcessor.d.ts +0 -75
- package/dist/core/QueryProcessor.js +0 -255
- package/dist/core/QueryView.d.ts +0 -79
- package/dist/core/QueryView.js +0 -218
- package/dist/core/StoreManager.d.ts +0 -112
- package/dist/core/StoreManager.js +0 -302
- package/dist/core/ViewRegistry.d.ts +0 -20
- package/dist/core/ViewRegistry.js +0 -55
- package/dist/core/index.d.ts +0 -33
- package/dist/core/index.js +0 -48
- package/dist/core/openIDBWithTimeout.d.ts +0 -65
- package/dist/core/openIDBWithTimeout.js +0 -153
- package/dist/core/queryUtils.d.ts +0 -45
- package/dist/core/queryUtils.js +0 -69
- package/dist/core/storeContract.d.ts +0 -145
- package/dist/core/storeContract.js +0 -12
- package/dist/docs/catalog.d.ts +0 -72
- package/dist/docs/catalog.js +0 -227
- package/dist/docs/index.d.ts +0 -10
- package/dist/docs/index.js +0 -10
- package/dist/environment.d.ts +0 -1
- package/dist/environment.js +0 -8
- package/dist/interfaces/index.d.ts +0 -311
- package/dist/interfaces/index.js +0 -9
- package/dist/keys/index.d.ts +0 -1
- package/dist/keys/index.js +0 -8
- package/dist/mutators/RecordingMutation.d.ts +0 -36
- package/dist/mutators/RecordingMutation.js +0 -182
- package/dist/mutators/Transaction.d.ts +0 -40
- package/dist/mutators/Transaction.js +0 -58
- package/dist/mutators/UndoManager.d.ts +0 -258
- package/dist/mutators/UndoManager.js +0 -658
- package/dist/mutators/defineMutators.d.ts +0 -60
- package/dist/mutators/defineMutators.js +0 -18
- package/dist/mutators/inverseOp.d.ts +0 -126
- package/dist/mutators/inverseOp.js +0 -71
- package/dist/mutators/mutateActions.d.ts +0 -45
- package/dist/mutators/mutateActions.js +0 -105
- package/dist/mutators/readerActions.d.ts +0 -33
- package/dist/mutators/readerActions.js +0 -57
- package/dist/mutators/undoApply.d.ts +0 -51
- package/dist/mutators/undoApply.js +0 -117
- package/dist/policy/index.d.ts +0 -21
- package/dist/policy/index.js +0 -20
- package/dist/query/client.d.ts +0 -61
- package/dist/query/client.js +0 -137
- package/dist/query/types.d.ts +0 -85
- package/dist/query/types.js +0 -16
- package/dist/react/AbloProvider.d.ts +0 -230
- package/dist/react/AbloProvider.js +0 -455
- package/dist/react/ClientSideSuspense.d.ts +0 -36
- package/dist/react/ClientSideSuspense.js +0 -17
- package/dist/react/DefaultFallback.d.ts +0 -24
- package/dist/react/DefaultFallback.js +0 -43
- package/dist/react/context.d.ts +0 -55
- package/dist/react/context.js +0 -29
- package/dist/react/index.d.ts +0 -61
- package/dist/react/index.js +0 -66
- package/dist/react/internalContext.d.ts +0 -33
- package/dist/react/internalContext.js +0 -3
- package/dist/react/useAblo.d.ts +0 -75
- package/dist/react/useAblo.js +0 -102
- package/dist/react/useCurrentUserId.d.ts +0 -22
- package/dist/react/useCurrentUserId.js +0 -34
- package/dist/react/useErrorListener.d.ts +0 -20
- package/dist/react/useErrorListener.js +0 -38
- package/dist/react/useMutationFailureListener.d.ts +0 -26
- package/dist/react/useMutationFailureListener.js +0 -38
- package/dist/react/useMutators.d.ts +0 -56
- package/dist/react/useMutators.js +0 -84
- package/dist/react/useReactive.d.ts +0 -35
- package/dist/react/useReactive.js +0 -123
- package/dist/react/useSyncStatus.d.ts +0 -59
- package/dist/react/useSyncStatus.js +0 -76
- package/dist/react/useUndoScope.d.ts +0 -34
- package/dist/react/useUndoScope.js +0 -81
- package/dist/schema/coordination.d.ts +0 -112
- package/dist/schema/coordination.js +0 -129
- package/dist/schema/ddl.d.ts +0 -97
- package/dist/schema/ddl.js +0 -491
- package/dist/schema/ddlLock.d.ts +0 -35
- package/dist/schema/ddlLock.js +0 -46
- package/dist/schema/diff.d.ts +0 -225
- package/dist/schema/diff.js +0 -289
- package/dist/schema/generate.d.ts +0 -19
- package/dist/schema/generate.js +0 -86
- package/dist/schema/index.d.ts +0 -41
- package/dist/schema/index.js +0 -76
- package/dist/schema/queries.d.ts +0 -201
- package/dist/schema/queries.js +0 -144
- package/dist/schema/select.d.ts +0 -40
- package/dist/schema/select.js +0 -87
- package/dist/schema/serialize.d.ts +0 -115
- package/dist/schema/serialize.js +0 -262
- package/dist/schema/sugar.d.ts +0 -109
- package/dist/schema/sugar.js +0 -83
- package/dist/schema/syncDeltaRow.d.ts +0 -6
- package/dist/schema/syncDeltaRow.js +0 -6
- package/dist/server/adapter.d.ts +0 -173
- package/dist/server/adapter.js +0 -18
- package/dist/server/commit.d.ts +0 -107
- package/dist/server/commit.js +0 -1
- package/dist/server/index.d.ts +0 -14
- package/dist/server/index.js +0 -2
- package/dist/server/readConfig.d.ts +0 -80
- package/dist/server/readConfig.js +0 -8
- package/dist/server/storageMode.d.ts +0 -23
- package/dist/server/storageMode.js +0 -17
- package/dist/source/adapter.d.ts +0 -81
- package/dist/source/adapter.js +0 -22
- package/dist/source/adapters/drizzle.d.ts +0 -48
- package/dist/source/adapters/drizzle.js +0 -219
- package/dist/source/adapters/kysely.d.ts +0 -42
- package/dist/source/adapters/kysely.js +0 -205
- package/dist/source/adapters/kyselyMutationCore.d.ts +0 -76
- package/dist/source/adapters/kyselyMutationCore.js +0 -125
- package/dist/source/adapters/memory.d.ts +0 -13
- package/dist/source/adapters/memory.js +0 -130
- package/dist/source/adapters/prisma.d.ts +0 -63
- package/dist/source/adapters/prisma.js +0 -202
- package/dist/source/conformance.d.ts +0 -37
- package/dist/source/conformance.js +0 -215
- package/dist/source/connector.d.ts +0 -95
- package/dist/source/connector.js +0 -266
- package/dist/source/connectorProtocol.d.ts +0 -154
- package/dist/source/connectorProtocol.js +0 -163
- package/dist/source/contract.d.ts +0 -195
- package/dist/source/contract.js +0 -164
- package/dist/source/factory.d.ts +0 -92
- package/dist/source/factory.js +0 -286
- package/dist/source/footprint.d.ts +0 -111
- package/dist/source/footprint.js +0 -0
- package/dist/source/idempotency.d.ts +0 -61
- package/dist/source/idempotency.js +0 -144
- package/dist/source/index.d.ts +0 -23
- package/dist/source/index.js +0 -30
- package/dist/source/migrations.d.ts +0 -21
- package/dist/source/migrations.js +0 -103
- package/dist/source/next.d.ts +0 -32
- package/dist/source/next.js +0 -25
- package/dist/source/pushQueue.d.ts +0 -134
- package/dist/source/pushQueue.js +0 -256
- package/dist/source/signing.d.ts +0 -92
- package/dist/source/signing.js +0 -162
- package/dist/source/types.d.ts +0 -401
- package/dist/source/types.js +0 -59
- package/dist/stores/ObjectStore.d.ts +0 -115
- package/dist/stores/ObjectStore.js +0 -393
- package/dist/stores/ObjectStoreContract.d.ts +0 -38
- package/dist/stores/ObjectStoreContract.js +0 -1
- package/dist/stores/SyncActionStore.d.ts +0 -97
- package/dist/stores/SyncActionStore.js +0 -504
- package/dist/stores/syncAction.d.ts +0 -26
- package/dist/stores/syncAction.js +0 -16
- package/dist/surface.d.ts +0 -36
- package/dist/surface.js +0 -75
- package/dist/sync/BootstrapFetcher.d.ts +0 -280
- package/dist/sync/BootstrapFetcher.js +0 -962
- package/dist/sync/ConnectionManager.d.ts +0 -8
- package/dist/sync/ConnectionManager.js +0 -8
- package/dist/sync/OnDemandLoader.d.ts +0 -228
- package/dist/sync/OnDemandLoader.js +0 -742
- package/dist/sync/SubscriptionManager.d.ts +0 -159
- package/dist/sync/SubscriptionManager.js +0 -243
- package/dist/sync/SyncWebSocket.d.ts +0 -173
- package/dist/sync/SyncWebSocket.js +0 -438
- package/dist/sync/awaitClaimGrant.d.ts +0 -6
- package/dist/sync/awaitClaimGrant.js +0 -6
- package/dist/sync/bootstrapApply.d.ts +0 -70
- package/dist/sync/bootstrapApply.js +0 -73
- package/dist/sync/commitFrames.d.ts +0 -8
- package/dist/sync/commitFrames.js +0 -8
- package/dist/sync/contextPorts.d.ts +0 -18
- package/dist/sync/contextPorts.js +0 -31
- package/dist/sync/createClaimStream.d.ts +0 -7
- package/dist/sync/createClaimStream.js +0 -7
- package/dist/sync/createPresenceStream.d.ts +0 -69
- package/dist/sync/createPresenceStream.js +0 -200
- package/dist/sync/createSnapshot.d.ts +0 -29
- package/dist/sync/createSnapshot.js +0 -118
- package/dist/sync/credentialLifecycle.d.ts +0 -7
- package/dist/sync/credentialLifecycle.js +0 -7
- package/dist/sync/deltaPipeline.d.ts +0 -113
- package/dist/sync/deltaPipeline.js +0 -261
- package/dist/sync/groupChange.d.ts +0 -113
- package/dist/sync/groupChange.js +0 -242
- package/dist/sync/participants.d.ts +0 -115
- package/dist/sync/participants.js +0 -344
- package/dist/sync/persistedPrefix.d.ts +0 -12
- package/dist/sync/persistedPrefix.js +0 -22
- package/dist/sync/schemaDrift.d.ts +0 -55
- package/dist/sync/schemaDrift.js +0 -53
- package/dist/sync/schemas.d.ts +0 -70
- package/dist/sync/schemas.js +0 -94
- package/dist/sync/syncCursor.d.ts +0 -40
- package/dist/sync/syncCursor.js +0 -55
- package/dist/sync/syncPlan.d.ts +0 -54
- package/dist/sync/syncPlan.js +0 -50
- package/dist/sync/wsFrameHandlers.d.ts +0 -8
- package/dist/sync/wsFrameHandlers.js +0 -8
- 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/httpResponses.d.ts +0 -70
- package/dist/testing/fixtures/httpResponses.js +0 -90
- 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 -186
- 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 -72
- 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/transaction/ablo.d.ts +0 -88
- package/dist/transaction/ablo.js +0 -33
- package/dist/transaction/auth/apiKey.d.ts +0 -152
- package/dist/transaction/auth/apiKey.js +0 -419
- package/dist/transaction/auth/bootstrapScope.d.ts +0 -15
- package/dist/transaction/auth/bootstrapScope.js +0 -1
- package/dist/transaction/auth/capability.d.ts +0 -177
- package/dist/transaction/auth/capability.js +0 -199
- package/dist/transaction/auth/credentialEndpoint.d.ts +0 -61
- package/dist/transaction/auth/credentialEndpoint.js +0 -86
- package/dist/transaction/auth/credentialPolicy.d.ts +0 -148
- package/dist/transaction/auth/credentialPolicy.js +0 -125
- package/dist/transaction/auth/credentialSource.d.ts +0 -30
- package/dist/transaction/auth/credentialSource.js +0 -55
- package/dist/transaction/auth/hostedEndpoints.d.ts +0 -21
- package/dist/transaction/auth/hostedEndpoints.js +0 -21
- package/dist/transaction/auth/identity.d.ts +0 -55
- package/dist/transaction/auth/identity.js +0 -210
- package/dist/transaction/auth/index.d.ts +0 -162
- package/dist/transaction/auth/index.js +0 -304
- package/dist/transaction/auth/schemas.d.ts +0 -59
- package/dist/transaction/auth/schemas.js +0 -85
- package/dist/transaction/auth/sessionMint.d.ts +0 -28
- package/dist/transaction/auth/sessionMint.js +0 -85
- package/dist/transaction/coordination/awaitClaimGrant.d.ts +0 -49
- package/dist/transaction/coordination/awaitClaimGrant.js +0 -112
- package/dist/transaction/coordination/claimHeartbeatLoop.d.ts +0 -50
- package/dist/transaction/coordination/claimHeartbeatLoop.js +0 -88
- package/dist/transaction/coordination/claimMeta.d.ts +0 -49
- package/dist/transaction/coordination/claimMeta.js +0 -52
- package/dist/transaction/coordination/createClaimStream.d.ts +0 -64
- package/dist/transaction/coordination/createClaimStream.js +0 -475
- package/dist/transaction/coordination/events.d.ts +0 -74
- package/dist/transaction/coordination/events.js +0 -7
- package/dist/transaction/coordination/index.d.ts +0 -19
- package/dist/transaction/coordination/index.js +0 -44
- package/dist/transaction/coordination/locator.d.ts +0 -83
- package/dist/transaction/coordination/locator.js +0 -82
- package/dist/transaction/coordination/schema.d.ts +0 -1473
- package/dist/transaction/coordination/schema.js +0 -1013
- package/dist/transaction/coordination/targetConflict.d.ts +0 -2
- package/dist/transaction/coordination/targetConflict.js +0 -103
- package/dist/transaction/coordination/trace.d.ts +0 -78
- package/dist/transaction/coordination/trace.js +0 -138
- package/dist/transaction/durableWrites.d.ts +0 -62
- package/dist/transaction/durableWrites.js +0 -71
- package/dist/transaction/environment.d.ts +0 -105
- package/dist/transaction/environment.js +0 -108
- package/dist/transaction/errorCodes.d.ts +0 -403
- package/dist/transaction/errorCodes.js +0 -480
- package/dist/transaction/errors.d.ts +0 -428
- package/dist/transaction/errors.js +0 -686
- package/dist/transaction/index.d.ts +0 -20
- package/dist/transaction/index.js +0 -20
- package/dist/transaction/keys/index.d.ts +0 -87
- package/dist/transaction/keys/index.js +0 -207
- package/dist/transaction/log/syncDeltaRow.d.ts +0 -158
- package/dist/transaction/log/syncDeltaRow.js +0 -95
- package/dist/transaction/logPosition.d.ts +0 -97
- package/dist/transaction/logPosition.js +0 -125
- package/dist/transaction/logger.d.ts +0 -16
- package/dist/transaction/logger.js +0 -7
- package/dist/transaction/observability.d.ts +0 -53
- package/dist/transaction/observability.js +0 -19
- package/dist/transaction/persistence.d.ts +0 -12
- package/dist/transaction/persistence.js +0 -11
- package/dist/transaction/plugin.d.ts +0 -192
- package/dist/transaction/plugin.js +0 -87
- package/dist/transaction/policy/types.d.ts +0 -217
- package/dist/transaction/policy/types.js +0 -126
- package/dist/transaction/resources/functionalUpdate.d.ts +0 -79
- package/dist/transaction/resources/functionalUpdate.js +0 -87
- package/dist/transaction/resources/httpResources.d.ts +0 -266
- package/dist/transaction/resources/httpResources.js +0 -7
- package/dist/transaction/resources/modelOperations.d.ts +0 -319
- package/dist/transaction/resources/modelOperations.js +0 -12
- package/dist/transaction/resources/mutationOptions.d.ts +0 -66
- package/dist/transaction/resources/mutationOptions.js +0 -9
- package/dist/transaction/resources/where.d.ts +0 -85
- package/dist/transaction/resources/where.js +0 -70
- package/dist/transaction/resources/writeOptionsSchema.d.ts +0 -47
- package/dist/transaction/resources/writeOptionsSchema.js +0 -73
- package/dist/transaction/schema/field.d.ts +0 -126
- package/dist/transaction/schema/field.js +0 -265
- package/dist/transaction/schema/loadStrategy.d.ts +0 -45
- package/dist/transaction/schema/loadStrategy.js +0 -46
- package/dist/transaction/schema/model.d.ts +0 -379
- package/dist/transaction/schema/model.js +0 -123
- package/dist/transaction/schema/openapi.d.ts +0 -57
- package/dist/transaction/schema/openapi.js +0 -340
- package/dist/transaction/schema/relation.d.ts +0 -199
- package/dist/transaction/schema/relation.js +0 -104
- package/dist/transaction/schema/residency.d.ts +0 -29
- package/dist/transaction/schema/residency.js +0 -25
- package/dist/transaction/schema/roles.d.ts +0 -249
- package/dist/transaction/schema/roles.js +0 -230
- package/dist/transaction/schema/schema.d.ts +0 -324
- package/dist/transaction/schema/schema.js +0 -305
- package/dist/transaction/schema/tenancy.d.ts +0 -139
- package/dist/transaction/schema/tenancy.js +0 -190
- package/dist/transaction/transactionLayer.d.ts +0 -82
- package/dist/transaction/transactionLayer.js +0 -24
- package/dist/transaction/transactions/settlement/commitEnvelope.d.ts +0 -143
- package/dist/transaction/transactions/settlement/commitEnvelope.js +0 -161
- package/dist/transaction/transactions/settlement/httpCommitEnvelope.d.ts +0 -53
- package/dist/transaction/transactions/settlement/httpCommitEnvelope.js +0 -207
- package/dist/transaction/transactions/settlement/idempotencyKey.d.ts +0 -10
- package/dist/transaction/transactions/settlement/idempotencyKey.js +0 -9
- package/dist/transaction/transactions/settlement/pendingWrite.d.ts +0 -112
- package/dist/transaction/transactions/settlement/pendingWrite.js +0 -20
- package/dist/transaction/transport/commitFrames.d.ts +0 -90
- package/dist/transaction/transport/commitFrames.js +0 -134
- package/dist/transaction/transport/connectionManager.d.ts +0 -215
- package/dist/transaction/transport/connectionManager.js +0 -673
- package/dist/transaction/transport/credentialLifecycle.d.ts +0 -177
- package/dist/transaction/transport/credentialLifecycle.js +0 -324
- package/dist/transaction/transport/heartbeat.d.ts +0 -65
- package/dist/transaction/transport/heartbeat.js +0 -93
- package/dist/transaction/transport/httpClient.d.ts +0 -123
- package/dist/transaction/transport/httpClient.js +0 -145
- package/dist/transaction/transport/httpOptions.d.ts +0 -33
- package/dist/transaction/transport/httpOptions.js +0 -12
- package/dist/transaction/transport/httpTransport.d.ts +0 -8
- package/dist/transaction/transport/httpTransport.js +0 -1276
- package/dist/transaction/transport/networkProbe.d.ts +0 -84
- package/dist/transaction/transport/networkProbe.js +0 -207
- package/dist/transaction/transport/wsFrameHandlers.d.ts +0 -128
- package/dist/transaction/transport/wsFrameHandlers.js +0 -429
- package/dist/transaction/transport/wsTransport.d.ts +0 -576
- package/dist/transaction/transport/wsTransport.js +0 -1017
- package/dist/transaction/types/assertExact.d.ts +0 -17
- package/dist/transaction/types/assertExact.js +0 -1
- package/dist/transaction/types/global.d.ts +0 -107
- package/dist/transaction/types/global.js +0 -40
- package/dist/transaction/types/index.d.ts +0 -205
- package/dist/transaction/types/index.js +0 -56
- package/dist/transaction/types/modelData.d.ts +0 -10
- package/dist/transaction/types/modelData.js +0 -9
- package/dist/transaction/types/participant.d.ts +0 -20
- package/dist/transaction/types/participant.js +0 -10
- package/dist/transaction/types/streams.d.ts +0 -540
- package/dist/transaction/types/streams.js +0 -11
- package/dist/transaction/utils/asyncIterator.d.ts +0 -34
- package/dist/transaction/utils/asyncIterator.js +0 -135
- package/dist/transaction/utils/duration.d.ts +0 -25
- package/dist/transaction/utils/duration.js +0 -45
- package/dist/transaction/utils/json.d.ts +0 -57
- package/dist/transaction/utils/json.js +0 -276
- package/dist/transaction/wire/accountResponses.d.ts +0 -351
- package/dist/transaction/wire/accountResponses.js +0 -255
- package/dist/transaction/wire/auth.d.ts +0 -49
- package/dist/transaction/wire/auth.js +0 -57
- package/dist/transaction/wire/bootstrapReason.d.ts +0 -9
- package/dist/transaction/wire/bootstrapReason.js +0 -8
- package/dist/transaction/wire/claimEvent.d.ts +0 -76
- package/dist/transaction/wire/claimEvent.js +0 -73
- package/dist/transaction/wire/claims.d.ts +0 -463
- package/dist/transaction/wire/claims.js +0 -229
- package/dist/transaction/wire/commit.d.ts +0 -603
- package/dist/transaction/wire/commit.js +0 -321
- package/dist/transaction/wire/delta.d.ts +0 -250
- package/dist/transaction/wire/delta.js +0 -147
- package/dist/transaction/wire/errorEnvelope.d.ts +0 -72
- package/dist/transaction/wire/errorEnvelope.js +0 -123
- package/dist/transaction/wire/feedCursor.d.ts +0 -60
- package/dist/transaction/wire/feedCursor.js +0 -82
- package/dist/transaction/wire/feedEvent.d.ts +0 -177
- package/dist/transaction/wire/feedEvent.js +0 -39
- package/dist/transaction/wire/frames.d.ts +0 -194
- package/dist/transaction/wire/frames.js +0 -50
- package/dist/transaction/wire/inboundFrames.d.ts +0 -552
- package/dist/transaction/wire/inboundFrames.js +0 -116
- package/dist/transaction/wire/index.d.ts +0 -50
- package/dist/transaction/wire/index.js +0 -74
- package/dist/transaction/wire/listEnvelope.d.ts +0 -37
- package/dist/transaction/wire/listEnvelope.js +0 -42
- package/dist/transaction/wire/modelResponses.d.ts +0 -85
- package/dist/transaction/wire/modelResponses.js +0 -43
- package/dist/transaction/wire/protocol.d.ts +0 -38
- package/dist/transaction/wire/protocol.js +0 -38
- package/dist/transaction/wire/protocolVersion.d.ts +0 -73
- package/dist/transaction/wire/protocolVersion.js +0 -83
- package/dist/transactions/mutations/MutationQueue.d.ts +0 -655
- package/dist/transactions/mutations/MutationQueue.js +0 -2797
- package/dist/transactions/mutations/MutationStore.d.ts +0 -20
- package/dist/transactions/mutations/MutationStore.js +0 -53
- package/dist/transactions/mutations/UnconfirmedWrites.d.ts +0 -82
- package/dist/transactions/mutations/UnconfirmedWrites.js +0 -104
- package/dist/transactions/mutations/coalesceRules.d.ts +0 -58
- package/dist/transactions/mutations/coalesceRules.js +0 -140
- package/dist/transactions/mutations/commitLatency.d.ts +0 -52
- package/dist/transactions/mutations/commitLatency.js +0 -130
- package/dist/transactions/mutations/commitOutboxStore.d.ts +0 -28
- package/dist/transactions/mutations/commitOutboxStore.js +0 -26
- package/dist/transactions/mutations/commitPayload.d.ts +0 -164
- package/dist/transactions/mutations/commitPayload.js +0 -152
- package/dist/transactions/mutations/deltaConfirmation.d.ts +0 -59
- package/dist/transactions/mutations/deltaConfirmation.js +0 -233
- package/dist/transactions/mutations/durableWriteStore.d.ts +0 -14
- package/dist/transactions/mutations/durableWriteStore.js +0 -12
- package/dist/transactions/mutations/optimisticApply.d.ts +0 -49
- package/dist/transactions/mutations/optimisticApply.js +0 -65
- package/dist/transactions/mutations/replayValidation.d.ts +0 -186
- package/dist/transactions/mutations/replayValidation.js +0 -163
- package/dist/utils/mobxSetup.d.ts +0 -53
- package/dist/utils/mobxSetup.js +0 -330
- package/dist/webhooks/events.d.ts +0 -43
- package/dist/webhooks/events.js +0 -42
- package/dist/webhooks/index.d.ts +0 -8
- package/dist/webhooks/index.js +0 -8
- package/dist/wire/index.d.ts +0 -1
- package/dist/wire/index.js +0 -8
- package/docs/interaction-model.md +0 -99
package/docs/api.md
CHANGED
|
@@ -13,10 +13,10 @@ row, you can optionally `claim` it so they serialize instead of clobbering
|
|
|
13
13
|
each other.
|
|
14
14
|
|
|
15
15
|
Two things to know before the method list. **Reads come in two flavors:**
|
|
16
|
-
`
|
|
16
|
+
`get({ id })` / `list({ where })` are async — they answer from what is
|
|
17
17
|
already local and fall back to the server. Put `local.` in front of either and
|
|
18
18
|
you get the same read restricted to what is already here, which is why it can
|
|
19
|
-
return a value rather than a promise: `local.
|
|
19
|
+
return a value rather than a promise: `local.get(id)`, `local.list({ where })`,
|
|
20
20
|
`local.count({ where })`. Use those in render, after data has synced.
|
|
21
21
|
**Claims don't lock.** If another writer holds the row, `claim` waits
|
|
22
22
|
for them, re-reads the fresh row, then hands it to you — so two writers
|
|
@@ -38,7 +38,7 @@ const schema = defineSchema({
|
|
|
38
38
|
const ablo = Ablo({ schema, apiKey: process.env.ABLO_API_KEY });
|
|
39
39
|
|
|
40
40
|
await ablo.ready();
|
|
41
|
-
const report = await ablo.weatherReports.
|
|
41
|
+
const report = await ablo.weatherReports.get({ id: 'report_stockholm' });
|
|
42
42
|
if (!report) throw new Error('Row not found');
|
|
43
43
|
|
|
44
44
|
await ablo.weatherReports.update({ id: 'report_stockholm', data: { status: 'ready' }, wait: 'confirmed' });
|
|
@@ -51,24 +51,24 @@ agents, read the [Integration Guide](./integration-guide.md).
|
|
|
51
51
|
|
|
52
52
|
Each schema model becomes a typed model on the client:
|
|
53
53
|
|
|
54
|
-
- `ablo.weatherReports.
|
|
54
|
+
- `ablo.weatherReports.get({ id })` reads one row asynchronously (server read).
|
|
55
55
|
- `ablo.weatherReports.list({ where })` reads a collection asynchronously (server read).
|
|
56
|
-
- `ablo.weatherReports.local.
|
|
56
|
+
- `ablo.weatherReports.local.get(id)` reads one row synchronously from the local graph.
|
|
57
57
|
- `ablo.weatherReports.create({ data })` creates a row.
|
|
58
58
|
- `ablo.weatherReports.update({ id, data, ...options })` updates a row.
|
|
59
59
|
- `ablo.weatherReports.delete({ id, ...options })` deletes a row.
|
|
60
60
|
|
|
61
|
-
`local.` narrows a read to what has already synced. `
|
|
61
|
+
`local.` narrows a read to what has already synced. `get({ id })` and
|
|
62
62
|
`list({ where })` answer from the local graph and fall back to IndexedDB and
|
|
63
63
|
then the network, so reach for them when the row may not be here yet.
|
|
64
|
-
`local.
|
|
64
|
+
`local.get(id)` and `local.list({ where })` are the same reads with the
|
|
65
65
|
fallback removed — nothing to await, so they return a value.
|
|
66
66
|
|
|
67
67
|
| Method | Returns | Use when |
|
|
68
68
|
|---|---|---|
|
|
69
|
-
| `
|
|
69
|
+
| `get({ id })` | `Promise<T \| undefined>` | You need one row, hydrating from local store and server. |
|
|
70
70
|
| `list({ where })` | `Promise<T[]>` | You need to hydrate a collection from local store and server. |
|
|
71
|
-
| `local.
|
|
71
|
+
| `local.get(id)` | `T \| undefined` | You want a synchronous snapshot of one local row. |
|
|
72
72
|
| `local.list(options?)` | `T[]` | You want a synchronous snapshot of a local collection. |
|
|
73
73
|
| `local.count(options?)` | `number` | You want a synchronous count of local rows. |
|
|
74
74
|
| `create({ data, ...options })` | `Promise<T>` | You want to create through the schema model. |
|
|
@@ -120,49 +120,11 @@ blocks), and `ablo.<model>.claim.release({ id })` releases it early. The full
|
|
|
120
120
|
coordination surface is `claim.state({ id })` / `claim.queue({ id })` /
|
|
121
121
|
`claim.release({ id })` / `claim.reorder({ id, order })` hanging off `claim`.
|
|
122
122
|
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
| `id` | string | Unique identifier for the claim. |
|
|
129
|
-
| `status` | `'active' \| 'queued' \| 'committed' \| 'expired' \| 'canceled'` | The whole lifecycle, in one field. `active` is the holder; `queued` is a waiter in the FIFO line behind it. |
|
|
130
|
-
| `target` | `{ type, id, field? }` | What is being coordinated. |
|
|
131
|
-
| `description` | string | Peer-visible phrase for the work in progress — `'editing'`, `'writing'`, `'reviewing the risk section'`. Defaults to `'editing'`, and rides back in the rejection a blocked writer receives. |
|
|
132
|
-
| `heldBy` | string | Participant id holding the claim. |
|
|
133
|
-
| `participantKind` | `'user' \| 'agent' \| 'system'` | Who's behind it — a human (`user`), an AI (`agent`), or automated infrastructure (`system`). |
|
|
134
|
-
| `createdAt` | number? | Ms-epoch the holder opened it. Optional — derived shapes may omit it. |
|
|
135
|
-
| `expiresAt` | number | Ms-epoch at which the server auto-expires it if the holder doesn't finish. |
|
|
136
|
-
|
|
137
|
-
```json
|
|
138
|
-
{
|
|
139
|
-
"object": "claim",
|
|
140
|
-
"id": "claim_3MtwBwLkdIwHu7ix",
|
|
141
|
-
"status": "active",
|
|
142
|
-
"target": { "type": "weatherReports", "id": "report_stockholm", "field": "status" },
|
|
143
|
-
"description": "editing",
|
|
144
|
-
"heldBy": "agent:report-writer",
|
|
145
|
-
"participantKind": "agent",
|
|
146
|
-
"expiresAt": 1716580000000
|
|
147
|
-
}
|
|
148
|
-
```
|
|
149
|
-
|
|
150
|
-
### Lifecycle
|
|
151
|
-
|
|
152
|
-
```
|
|
153
|
-
claim({ id }) update({ id }) lands
|
|
154
|
-
(free) ───────────▶ active ───────────────────────▶ committed
|
|
155
|
-
│
|
|
156
|
-
┌───────────┴───────────┐
|
|
157
|
-
▼ ▼
|
|
158
|
-
canceled expired
|
|
159
|
-
(release w/o write) (TTL; holder died)
|
|
160
|
-
```
|
|
161
|
-
|
|
162
|
-
A target is free when `ablo.<model>.claim.state({ id })` is `null`. Terminal
|
|
163
|
-
states drop out of the live stream, so a present claim is either `active` (the
|
|
164
|
-
holder) or `queued` (waiting in the FIFO line behind the holder; see
|
|
165
|
-
`claim.queue({ id })`).
|
|
123
|
+
The fields on a claim, its lifecycle diagram, and the full method surface are in
|
|
124
|
+
[Coordination](./coordination.md#the-claim-state-object), which is where that
|
|
125
|
+
object is defined. Note that the entity half of `target` is spelled `model`/`id`
|
|
126
|
+
on the SDK's model surface and `type`/`id` on the claim handle and the wait
|
|
127
|
+
line.
|
|
166
128
|
|
|
167
129
|
### Reading and claiming
|
|
168
130
|
|
|
@@ -217,7 +179,7 @@ endpoint documents that model's real field contract instead of a generic blob.
|
|
|
217
179
|
|---|---|
|
|
218
180
|
| `ablo.<model>.create({ data })` | `POST /api/v1/models/{model}` |
|
|
219
181
|
| `ablo.<model>.list({ where })` | `GET /api/v1/models/{model}` |
|
|
220
|
-
| `ablo.<model>.
|
|
182
|
+
| `ablo.<model>.get({ id })` | `GET /api/v1/models/{model}/{id}` |
|
|
221
183
|
| `ablo.<model>.update({ id, data })` | `PATCH /api/v1/models/{model}/{id}` |
|
|
222
184
|
| `ablo.<model>.delete({ id })` | `DELETE /api/v1/models/{model}/{id}` |
|
|
223
185
|
| `ablo.<model>.claim({ id })` | `POST /api/v1/models/{model}/{id}/claim` |
|
package/docs/audit.md
CHANGED
|
@@ -23,11 +23,12 @@ with which key — and the chain columns that make the log tamper-evident:
|
|
|
23
23
|
capabilityId: string | null, // the API key/capability used for the write
|
|
24
24
|
capabilityLabel: string | null, // its human-readable name, for scanning the log
|
|
25
25
|
delegationChainRootUserId: string | null, // always points at a human
|
|
26
|
-
actionType:
|
|
27
|
-
modelName: string,
|
|
26
|
+
actionType: 'I' | 'U' | 'D', // insert, update, delete
|
|
27
|
+
modelName: string, // the model that changed, e.g. 'orders'
|
|
28
|
+
modelId: string, // the row that changed
|
|
28
29
|
confirmationState: 'auto' | 'previewed' | 'approved' | 'required_human_approval' | 'auto_historical',
|
|
29
30
|
diffSummary: unknown,
|
|
30
|
-
// chain columns
|
|
31
|
+
// chain columns, carried on every stored row and checked by verify (below)
|
|
31
32
|
chainSeq: number,
|
|
32
33
|
prevHash: string,
|
|
33
34
|
rowHash: string,
|
package/docs/cli.md
CHANGED
|
@@ -94,18 +94,18 @@ profiles entirely: it acts in whatever project it was minted for.
|
|
|
94
94
|
|
|
95
95
|
| Command | What it does | Flags |
|
|
96
96
|
| ---------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------ |
|
|
97
|
-
| `ablo init` | Scaffold `ablo/` (`schema.ts`, client, optional Data Source / agent / component), write `.env`, install the SDK. Offers to log in at the end.
|
|
98
|
-
| `ablo login` / `logout` / `status` | Authentication & status (above).
|
|
99
|
-
| `ablo mode [sandbox\|production]` | Switch active environment.
|
|
97
|
+
| `ablo init` | Scaffold `ablo/` (`schema.ts`, client, optional Data Source / agent / component), write `.env`, install the SDK. Offers to log in at the end. |: |
|
|
98
|
+
| `ablo login` / `logout` / `status` | Authentication & status (above). |: |
|
|
99
|
+
| `ablo mode [sandbox\|production]` | Switch active environment. |: |
|
|
100
100
|
| `ablo projects list\|create\|use\|rename` | Manage projects and the active one (see [Projects](#projects)). Each project's keys/schema/data are isolated. | `--name "<display>"` (create/rename) |
|
|
101
|
-
| `ablo dev` | **Hosted
|
|
101
|
+
| `ablo dev` | **Hosted**: push the schema to your test sandbox, then watch `ablo/schema.ts` and re-push on save. | `--no-watch`, `--schema <path>`, `--export <name>`, `--url <url>` |
|
|
102
102
|
| `ablo logs` | Tail your scope's commit activity (`stripe logs tail`). Follows by default. | `-n, --tail <N>`, `--since <dur\|ts>`, `--model`, `--op`, `--json`, `--no-follow`, `--mode sandbox\|production` |
|
|
103
|
-
| `ablo push` | **Hosted
|
|
104
|
-
| `ablo migrate` | **Direct Postgres
|
|
105
|
-
| `ablo pull` | **Direct Postgres
|
|
106
|
-
| `ablo check` | **Direct Postgres
|
|
103
|
+
| `ablo push` | **Hosted**: upload the schema to Ablo; the server diffs, migrates, and activates it. | `--force`, `--rename old:new`, `--backfill model.field=value`, `--schema`, `--export`, `--url` |
|
|
104
|
+
| `ablo migrate` | **Direct Postgres**: provision just the synced models (plus the adapter's `ablo_outbox` / `ablo_idempotency`) in your own `DATABASE_URL`. Leaves your other tables alone. | `--dry-run`, `--output <file>`, `--schema`, `--export` |
|
|
105
|
+
| `ablo pull` | **Direct Postgres**: generate `defineSchema(...)` from your existing tables (read-only, like `prisma db pull`). | `--out <path>`, `--app-schema <name>`, `--import <pkg>`, `--force` |
|
|
106
|
+
| `ablo check` | **Direct Postgres**: verify your _existing_ tables fit the schema (read-only, no schema changes). | `--schema <path>`, `--export <name>`, `--app-schema <name>` |
|
|
107
107
|
| `ablo generate` | Emit TypeScript types from the schema. | `--out <path>`, `--schema`, `--export` |
|
|
108
|
-
| `ablo docs` | Read these pages for the version you installed
|
|
108
|
+
| `ablo docs` | Read these pages for the version you installed: offline, no network (see [`ablo docs`](#ablo-docs)). | `--json` |
|
|
109
109
|
|
|
110
110
|
## `ablo docs`
|
|
111
111
|
|
|
@@ -241,7 +241,7 @@ The one type map, shared by both paths (there is no second mapping):
|
|
|
241
241
|
| Zod | Postgres |
|
|
242
242
|
| ------------------------------------------------------------ | -------------------------------------------------------------------------------------------------------- |
|
|
243
243
|
| `z.string()` | `TEXT` |
|
|
244
|
-
| `z.number()` | `DOUBLE PRECISION
|
|
244
|
+
| `z.number()` | `DOUBLE PRECISION`: never `INTEGER`; a Zod number may be fractional, and truncating is silent data loss |
|
|
245
245
|
| `z.boolean()` | `BOOLEAN` |
|
|
246
246
|
| `z.date()` | `TIMESTAMPTZ` |
|
|
247
247
|
| `z.enum([...])` | `TEXT` + a `CHECK (col IN (...))` constraint |
|
|
@@ -296,7 +296,7 @@ migration can't leave clients gated against tables that don't match.
|
|
|
296
296
|
|
|
297
297
|
| Variable | Purpose | Default |
|
|
298
298
|
| ------------------------------------- | ------------------------------------------------------------------------ | -------------------------- |
|
|
299
|
-
| `ABLO_API_KEY` | Authenticate without `ablo login` (CI). Always overrides the stored key.
|
|
299
|
+
| `ABLO_API_KEY` | Authenticate without `ablo login` (CI). Always overrides the stored key. |: |
|
|
300
300
|
| `ABLO_API_URL` | Control-plane / API host (`push`, `dev`, `status`). | `https://api.abloatai.com` |
|
|
301
301
|
| `ABLO_AUTH_URL` | Dashboard origin for `ablo login`'s device flow. | `https://abloatai.com` |
|
|
302
302
|
| `ABLO_CONFIG_DIR` / `XDG_CONFIG_HOME` | Where the credential file lives. | `~/.config/ablo` |
|
package/docs/client-behavior.md
CHANGED
|
@@ -34,7 +34,7 @@ Common options:
|
|
|
34
34
|
| `baseURL` | Override the hosted sync endpoint for staging or private deployments. |
|
|
35
35
|
| `persistence` | `memory` by default. Use `indexeddb` for a durable browser cache that survives reloads. |
|
|
36
36
|
| `durableWrites` | Optional crash recovery for unacknowledged agent/worker writes. Independent of the default memory cache; accepts `{ store, namespace? }`. |
|
|
37
|
-
| `transport` | `'websocket'` (default) is the live, stateful client
|
|
37
|
+
| `transport` | `'websocket'` (default) is the live, stateful client: a persistent socket, a local synced pool, and `onChange` subscriptions. `'http'` returns the **stateless** client for server-side actors (agents, workers, serverless): the same `ablo.<model>` read/write/claim surface, but each call is one HTTP round-trip with no socket. Under `'http'` the return type narrows to `AbloHttpClient`, so stateful-only methods (the `local` reads, `onChange`, `join`) are compile errors rather than runtime gaps. |
|
|
38
38
|
| `fetch` | Custom fetch implementation for tests or non-standard runtimes. |
|
|
39
39
|
| `defaultHeaders` | Extra headers attached to every HTTP request. |
|
|
40
40
|
| `defaultQuery` | Extra query parameters attached to every HTTP request. |
|
|
@@ -53,8 +53,8 @@ Each schema model becomes a typed model:
|
|
|
53
53
|
```ts
|
|
54
54
|
await ablo.ready();
|
|
55
55
|
|
|
56
|
-
const report = await ablo.weatherReports.
|
|
57
|
-
const local = ablo.weatherReports.local.
|
|
56
|
+
const report = await ablo.weatherReports.get({ id: 'report_stockholm' });
|
|
57
|
+
const local = ablo.weatherReports.local.get('report_stockholm');
|
|
58
58
|
|
|
59
59
|
await ablo.weatherReports.create({ data: { location: 'Stockholm', status: 'pending' } });
|
|
60
60
|
await ablo.weatherReports.update({ id: 'report_stockholm', data: { status: 'ready' }, wait: 'confirmed' });
|
|
@@ -62,7 +62,7 @@ await ablo.weatherReports.delete({ id: 'report_stockholm', wait: 'confirmed' });
|
|
|
62
62
|
```
|
|
63
63
|
|
|
64
64
|
Call `retrieve`/`list` first — they fetch from the server and you `await` them.
|
|
65
|
-
After that, `local.
|
|
65
|
+
After that, `local.get`/`local.list`/`local.count` read the already-synced data instantly with
|
|
66
66
|
no `await`, and stay reactive in render. Use the async pair to load, the sync trio
|
|
67
67
|
to read.
|
|
68
68
|
|
|
@@ -79,7 +79,7 @@ through the same model client path. A human Server Action, a browser view, and a
|
|
|
79
79
|
agent worker can all use `ablo.weatherReports`:
|
|
80
80
|
|
|
81
81
|
```ts
|
|
82
|
-
const report = await ablo.weatherReports.
|
|
82
|
+
const report = await ablo.weatherReports.get({ id });
|
|
83
83
|
const snap = ablo.snapshot({ weatherReports: id });
|
|
84
84
|
|
|
85
85
|
await ablo.weatherReports.update({
|
|
@@ -93,7 +93,7 @@ await ablo.weatherReports.update({
|
|
|
93
93
|
|
|
94
94
|
Once the server accepts the write, every other connected client gets the new row
|
|
95
95
|
automatically — no polling or manual refresh on your side. React clients that use
|
|
96
|
-
`useAblo((ablo) => ablo.weatherReports.local.
|
|
96
|
+
`useAblo((ablo) => ablo.weatherReports.local.get(id))` receive the new row, and selectors
|
|
97
97
|
such as `useAblo((ablo) => ablo.weatherReports.claim.state({ id }))`
|
|
98
98
|
receive active claim state. There is
|
|
99
99
|
no extra multiplayer setup beyond routing shared state through Ablo.
|
|
@@ -218,8 +218,8 @@ Only these imports are public SemVer surface:
|
|
|
218
218
|
- `@abloatai/ablo`
|
|
219
219
|
- `@abloatai/ablo/schema`
|
|
220
220
|
- `@abloatai/ablo/react`
|
|
221
|
-
- `@abloatai/ablo/testing`
|
|
222
221
|
|
|
223
222
|
`dataSource(...)` is exported from the root package for customer-owned storage
|
|
224
|
-
adapters. Everything outside the
|
|
225
|
-
apps and infrastructure.
|
|
223
|
+
adapters. Everything outside the three import paths is internal to Ablo-owned
|
|
224
|
+
apps and infrastructure. For adapter authors, `@abloatai/ablo/source/conformance`
|
|
225
|
+
is the suite that proves a storage adapter behaves correctly.
|
|
@@ -2,9 +2,9 @@
|
|
|
2
2
|
|
|
3
3
|
> The governing rule for how Ablo resolves concurrent writes to shared state.
|
|
4
4
|
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
5
|
+
This page is the contract: the `onStale` dispositions, what a conflict is
|
|
6
|
+
checked against, and where the convention stops. The three-layer mechanics of
|
|
7
|
+
claiming live in [Coordination](./coordination.md).
|
|
8
8
|
|
|
9
9
|
---
|
|
10
10
|
|
|
@@ -27,8 +27,8 @@ moments in time:
|
|
|
27
27
|
|
|
28
28
|
| form | when | mechanism |
|
|
29
29
|
|---|---|---|
|
|
30
|
-
| **Claim** | *prospective
|
|
31
|
-
| **Notification** | *in-flight
|
|
30
|
+
| **Claim** | *prospective*: before you act | reserve the row; others queue. Coordinate so the conflict never forms. |
|
|
31
|
+
| **Notification** | *in-flight*: after a concurrent change | surface the changed value; the actor resolves and re-issues. |
|
|
32
32
|
|
|
33
33
|
Use a claim when you will hold the row across a slow read→reason→write gap. Use a
|
|
34
34
|
notification when you didn't, and the premise moved under you.
|
|
@@ -42,9 +42,9 @@ when it goes stale. Three modes, split by whether they **force** an outcome:
|
|
|
42
42
|
|
|
43
43
|
| mode | coercive? | what the engine does | who resolves | use when |
|
|
44
44
|
|---|---|---|---|---|
|
|
45
|
-
| `notify` | **No
|
|
46
|
-
| `reject` | **Yes
|
|
47
|
-
| `overwrite` | **Yes
|
|
45
|
+
| `notify` | **No**: surface + delegate | Holds the write (does **not** apply it); returns a `StaleNotification` with the current value. | The actor (agent or human) reconciles and re-issues. | The aligned mode: tell the actor what changed, let it solve. |
|
|
46
|
+
| `reject` | **Yes**: force-abort | Throws `AbloStaleContextError`; the batch is discarded. | The caller retries from scratch. | Hard invariants; legacy/strict callers. The current default. |
|
|
47
|
+
| `overwrite` | **Yes**: force-clobber | Overwrites blindly last-writer-wins; **no** signal. | Nobody. | You genuinely own the field and concurrent values are noise. |
|
|
48
48
|
|
|
49
49
|
> `notify` is the convention. `reject` and `overwrite` are escape hatches for the
|
|
50
50
|
> two ends — "never let this be wrong" and "never bother me." They are not the
|
|
@@ -82,9 +82,9 @@ reads: [
|
|
|
82
82
|
]
|
|
83
83
|
```
|
|
84
84
|
|
|
85
|
-
- **Row
|
|
85
|
+
- **Row:** did this specific row (optionally these fields) change? The literal
|
|
86
86
|
per-object premise.
|
|
87
|
-
- **Group
|
|
87
|
+
- **Group:** did *anything* in this sync group change? `group` is a sync-group
|
|
88
88
|
key (`workspace:abc`, `document:s1`, `org:X`) — the same unit a participant **watches
|
|
89
89
|
and claims**. This is the more Ablo-native granularity.
|
|
90
90
|
|
|
@@ -108,13 +108,13 @@ Shape (canonical in `coordination/schema.ts`):
|
|
|
108
108
|
|
|
109
109
|
| field | meaning |
|
|
110
110
|
|---|---|
|
|
111
|
-
| `object` | Stripe-style type tag
|
|
111
|
+
| `object` | Stripe-style type tag: `'stale_notification'` |
|
|
112
112
|
| `model`, `id` | the conflicting row (for a group dep, both are the group key) |
|
|
113
113
|
| `group?` | set when this is a group-scoped notification |
|
|
114
114
|
| `readAt` | the watermark the committer reasoned against |
|
|
115
|
-
| `observedSyncId` | the newest delta on the premise
|
|
115
|
+
| `observedSyncId` | the newest delta on the premise: re-read at/after this |
|
|
116
116
|
| `conflictingFields` | fields that moved (empty for group / whole-entity) |
|
|
117
|
-
| `currentValues` | the live values of those fields
|
|
117
|
+
| `currentValues` | the live values of those fields: the premise to reconcile against (empty for group) |
|
|
118
118
|
| `writtenBy` | `{ kind, id }` of the concurrent author, reported faithfully |
|
|
119
119
|
|
|
120
120
|
Only `notify` produces a notification (the write was held). `reject` throws and
|
|
@@ -169,7 +169,7 @@ What the convention **guarantees**, and where it **stops**:
|
|
|
169
169
|
or human) owns the resolution. The engine does not distinguish them — it is
|
|
170
170
|
actor-neutral by design.
|
|
171
171
|
|
|
172
|
-
2. **Truthfulness
|
|
172
|
+
2. **Truthfulness:** `currentValues` / `observedSyncId` reflect committed state at
|
|
173
173
|
detection time, inside the same transaction as the write. A notification is
|
|
174
174
|
never speculative.
|
|
175
175
|
|
|
@@ -185,13 +185,11 @@ What the convention **guarantees**, and where it **stops**:
|
|
|
185
185
|
so they must not be gated by `notify`.
|
|
186
186
|
|
|
187
187
|
5. **Defaults.** A plain write (no `readAt`) is last-writer-wins with **no**
|
|
188
|
-
check. A guarded write with `readAt` but no `onStale` defaults to `reject
|
|
189
|
-
(back-compat). *Open decision (§7).*
|
|
188
|
+
check. A guarded write with `readAt` but no `onStale` defaults to `reject`.
|
|
190
189
|
|
|
191
190
|
6. **Policy seam.** Custom `ConflictPolicy` functions see **write-target**
|
|
192
191
|
conflicts (`stale_context` / `claim_held`). **Batch-premise** conflicts are
|
|
193
|
-
|
|
194
|
-
seam. *Open decision (§7).*
|
|
192
|
+
resolved directly via each entry's `onStale`, not through the policy seam.
|
|
195
193
|
|
|
196
194
|
7. **Claims win when held.** A non-holder writing to a claimed row is rejected
|
|
197
195
|
(`AbloClaimedError`) regardless of `readAt` — the prospective form takes
|
|
@@ -200,29 +198,17 @@ What the convention **guarantees**, and where it **stops**:
|
|
|
200
198
|
|
|
201
199
|
---
|
|
202
200
|
|
|
203
|
-
## 7.
|
|
201
|
+
## 7. What this convention does not cover
|
|
204
202
|
|
|
205
|
-
|
|
203
|
+
Three limits worth knowing before you rely on it.
|
|
206
204
|
|
|
207
|
-
- **
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
## 8. Out of scope
|
|
218
|
-
|
|
219
|
-
- Irreversible external side-effects (§6.4) — not gated by this convention.
|
|
220
|
-
- Cross-object *serializability proof*. A batch premise is a sound check, not
|
|
221
|
-
a full precedence-graph guarantee; it catches only what the caller declared.
|
|
222
|
-
A caller that declares nothing gets **no check at all** — not write-target
|
|
223
|
-
checking, which needs a `readAt` to check against. A plain write is
|
|
224
|
-
last-writer-wins, as §6.5 says. The floor is zero, and closing that gap is the
|
|
225
|
-
subject of ADR 0018.
|
|
226
|
-
- Identity → participant-kind mapping. `writtenBy.kind` reports whatever
|
|
227
|
-
authenticated (an `sk_` key resolves to `system`, not `agent`); how identities
|
|
228
|
-
map to kinds is a separate concern.
|
|
205
|
+
- **Irreversible external side-effects.** Emails, payments, and third-party
|
|
206
|
+
calls are not gated by this convention (§6.4). The engine cannot hold or undo
|
|
207
|
+
them, so never place one behind `notify`.
|
|
208
|
+
- **A caller that declares nothing gets no check.** The batch premise catches
|
|
209
|
+
only what you declared. Write-target checking needs a `readAt` to compare
|
|
210
|
+
against, so a plain write with neither is last-writer-wins (§6.5). What you
|
|
211
|
+
declare is what is protected.
|
|
212
|
+
- **`writtenBy.kind` reports what authenticated, not what you meant.** An `sk_`
|
|
213
|
+
key resolves to `system`, not `agent`. How identities map to participant kinds
|
|
214
|
+
is a separate concern from this convention.
|