@abloatai/ablo 0.36.0 → 0.37.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/AGENTS.md +2 -2
- package/CHANGELOG.md +55 -2014
- package/NOTICE +2 -2
- package/README.md +45 -63
- 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 -114
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +3 -163
- 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 +1 -1
- package/docs/api-keys.md +7 -6
- package/docs/api.md +10 -10
- package/docs/client-behavior.md +5 -5
- package/docs/coordination.md +52 -62
- package/docs/data-sources.md +1 -1
- 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/server-agent.md +2 -2
- package/docs/how-it-works.md +4 -4
- package/docs/identity.md +2 -1
- package/docs/integration-guide.md +24 -13
- 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 +2 -2
- package/docs/migration.md +3 -3
- package/docs/quickstart.md +2 -2
- package/docs/react.md +5 -5
- package/docs/schema-contract.md +3 -3
- package/docs/sessions.md +91 -37
- 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 +8 -8
- package/package.json +63 -166
- package/bin/ablo.cjs +0 -39
- package/dist/BaseSyncedStore.d.ts +0 -843
- package/dist/BaseSyncedStore.js +0 -1971
- package/dist/Database.d.ts +0 -323
- package/dist/Database.js +0 -1502
- package/dist/InstanceCache.d.ts +0 -237
- package/dist/InstanceCache.js +0 -1166
- package/dist/LazyReferenceCollection.d.ts +0 -177
- package/dist/LazyReferenceCollection.js +0 -461
- package/dist/Model.d.ts +0 -454
- package/dist/Model.js +0 -919
- package/dist/ModelRegistry.d.ts +0 -225
- package/dist/ModelRegistry.js +0 -539
- package/dist/NetworkMonitor.d.ts +0 -28
- package/dist/NetworkMonitor.js +0 -79
- package/dist/RuntimeContext.d.ts +0 -52
- package/dist/RuntimeContext.js +0 -80
- package/dist/SyncClient.d.ts +0 -541
- package/dist/SyncClient.js +0 -2202
- 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/client/Ablo.d.ts +0 -231
- package/dist/client/Ablo.js +0 -160
- 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 -50
- package/dist/client/createInternalComponents.js +0 -98
- package/dist/client/createModelProxy.d.ts +0 -248
- package/dist/client/createModelProxy.js +0 -884
- package/dist/client/humans.d.ts +0 -69
- package/dist/client/humans.js +0 -78
- 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 -53
- package/dist/client/reactiveEngine.js +0 -688
- 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/storeCluster.d.ts +0 -47
- package/dist/client/storeCluster.js +0 -118
- package/dist/client/storeLifecycle.d.ts +0 -61
- package/dist/client/storeLifecycle.js +0 -231
- 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 -42
- package/dist/context.js +0 -81
- 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/index.d.ts +0 -33
- package/dist/core/index.js +0 -48
- package/dist/docs/catalog.d.ts +0 -72
- package/dist/docs/catalog.js +0 -230
- 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/QueryProcessor.d.ts +0 -75
- package/dist/query/QueryProcessor.js +0 -255
- package/dist/query/client.d.ts +0 -64
- package/dist/query/client.js +0 -138
- package/dist/query/types.d.ts +0 -85
- package/dist/query/types.js +0 -16
- package/dist/react/AbloProvider.d.ts +0 -242
- package/dist/react/AbloProvider.js +0 -458
- 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/createAbloReact.d.ts +0 -56
- package/dist/react/createAbloReact.js +0 -51
- package/dist/react/index.d.ts +0 -62
- package/dist/react/index.js +0 -69
- package/dist/react/internalContext.d.ts +0 -33
- package/dist/react/internalContext.js +0 -3
- package/dist/react/useAblo.d.ts +0 -82
- package/dist/react/useAblo.js +0 -120
- 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 -133
- 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 -42
- package/dist/schema/index.js +0 -80
- 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 -90
- package/dist/schema/serialize.d.ts +0 -115
- package/dist/schema/serialize.js +0 -265
- 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 -83
- package/dist/source/adapter.js +0 -24
- 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/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/storeContract.d.ts +0 -145
- package/dist/storeContract.js +0 -12
- package/dist/stores/DatabaseManager.d.ts +0 -107
- package/dist/stores/DatabaseManager.js +0 -388
- 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/StoreManager.d.ts +0 -114
- package/dist/stores/StoreManager.js +0 -304
- package/dist/stores/SyncActionStore.d.ts +0 -99
- package/dist/stores/SyncActionStore.js +0 -506
- package/dist/stores/openIDBWithTimeout.d.ts +0 -65
- package/dist/stores/openIDBWithTimeout.js +0 -153
- 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 -284
- package/dist/sync/BootstrapFetcher.js +0 -964
- package/dist/sync/ConnectionManager.d.ts +0 -8
- package/dist/sync/ConnectionManager.js +0 -8
- package/dist/sync/OnDemandLoader.d.ts +0 -231
- package/dist/sync/OnDemandLoader.js +0 -743
- 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 -73
- 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 -114
- package/dist/sync/deltaPipeline.js +0 -278
- package/dist/sync/groupChange.d.ts +0 -116
- package/dist/sync/groupChange.js +0 -244
- package/dist/sync/participants.d.ts +0 -132
- package/dist/sync/participants.js +0 -346
- 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 -71
- 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/syncLog/contract.d.ts +0 -20
- package/dist/syncLog/contract.js +0 -19
- package/dist/syncLog/index.d.ts +0 -1
- package/dist/syncLog/index.js +0 -1
- 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 -212
- package/dist/transaction/auth/capability.js +0 -224
- 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 -56
- package/dist/transaction/coordination/awaitClaimGrant.js +0 -124
- package/dist/transaction/coordination/claimHeartbeatLoop.d.ts +0 -84
- package/dist/transaction/coordination/claimHeartbeatLoop.js +0 -108
- 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 -45
- package/dist/transaction/coordination/locator.d.ts +0 -104
- package/dist/transaction/coordination/locator.js +0 -102
- package/dist/transaction/coordination/schema.d.ts +0 -1536
- package/dist/transaction/coordination/schema.js +0 -1177
- package/dist/transaction/coordination/targetConflict.d.ts +0 -2
- package/dist/transaction/coordination/targetConflict.js +0 -107
- 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 -484
- package/dist/transaction/errors.d.ts +0 -428
- package/dist/transaction/errors.js +0 -686
- package/dist/transaction/footprint.d.ts +0 -111
- package/dist/transaction/footprint.js +0 -0
- 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 -285
- package/dist/transaction/plugin.js +0 -106
- 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 -321
- package/dist/transaction/resources/httpResources.js +0 -7
- package/dist/transaction/resources/modelOperations.d.ts +0 -427
- 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 -101
- package/dist/transaction/resources/where.js +0 -115
- 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 -120
- package/dist/transaction/schema/field.js +0 -265
- package/dist/transaction/schema/fieldRef.d.ts +0 -38
- package/dist/transaction/schema/fieldRef.js +0 -11
- 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 -58
- package/dist/transaction/schema/openapi.js +0 -501
- package/dist/transaction/schema/relation.d.ts +0 -204
- 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 -351
- package/dist/transaction/schema/schema.js +0 -325
- 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 -131
- package/dist/transaction/transport/httpClient.js +0 -146
- 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 -1388
- 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 -574
- package/dist/transaction/transport/wsTransport.js +0 -1023
- 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 -550
- 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 -50
- package/dist/transaction/utils/duration.js +0 -77
- 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 -420
- package/dist/transaction/wire/accountResponses.js +0 -290
- package/dist/transaction/wire/auth.d.ts +0 -56
- package/dist/transaction/wire/auth.js +0 -63
- 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 -530
- package/dist/transaction/wire/claims.js +0 -327
- 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 -204
- package/dist/transaction/wire/feedEvent.js +0 -65
- 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 -562
- package/dist/transaction/wire/inboundFrames.js +0 -116
- package/dist/transaction/wire/index.d.ts +0 -54
- package/dist/transaction/wire/index.js +0 -83
- package/dist/transaction/wire/listEnvelope.d.ts +0 -37
- package/dist/transaction/wire/listEnvelope.js +0 -42
- package/dist/transaction/wire/modelMutations.d.ts +0 -31
- package/dist/transaction/wire/modelMutations.js +0 -52
- package/dist/transaction/wire/modelResponses.d.ts +0 -85
- package/dist/transaction/wire/modelResponses.js +0 -43
- package/dist/transaction/wire/modelShape.d.ts +0 -78
- package/dist/transaction/wire/modelShape.js +0 -74
- 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 -661
- package/dist/transactions/mutations/MutationQueue.js +0 -2807
- 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 -165
- package/dist/transactions/mutations/commitPayload.js +0 -152
- package/dist/transactions/mutations/deltaConfirmation.d.ts +0 -63
- package/dist/transactions/mutations/deltaConfirmation.js +0 -235
- 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 -187
- package/dist/transactions/mutations/replayValidation.js +0 -164
- package/dist/utils/mobxSetup.d.ts +0 -53
- package/dist/utils/mobxSetup.js +0 -330
- package/dist/views/QueryView.d.ts +0 -79
- package/dist/views/QueryView.js +0 -218
- package/dist/views/ViewRegistry.d.ts +0 -20
- package/dist/views/ViewRegistry.js +0 -55
- package/dist/views/incrementalView.d.ts +0 -45
- package/dist/views/incrementalView.js +0 -69
- 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
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Moved to the settlement core (ADR 0016): claim push is coordination, and
|
|
3
|
-
* coordination is the product — a contending agent wants `claim_granted`
|
|
4
|
-
* pushed exactly as much as a person does. This path re-exports it so
|
|
5
|
-
* existing importers stay unchanged.
|
|
6
|
-
*/
|
|
7
|
-
export { createClaimStream, type ClaimTransport, type ClaimStreamConfig, type AttachableClaimStream, } from '../transaction/coordination/createClaimStream.js';
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Moved to the settlement core (ADR 0016): claim push is coordination, and
|
|
3
|
-
* coordination is the product — a contending agent wants `claim_granted`
|
|
4
|
-
* pushed exactly as much as a person does. This path re-exports it so
|
|
5
|
-
* existing importers stay unchanged.
|
|
6
|
-
*/
|
|
7
|
-
export { createClaimStream, } from '../transaction/coordination/createClaimStream.js';
|
|
@@ -1,69 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Creates a {@link PresenceStream} over a live sync connection. Presence is the
|
|
3
|
-
* lightweight, ephemeral "who's here and what are they doing" view: each
|
|
4
|
-
* participant broadcasts a status and an activity, and sees everyone else's.
|
|
5
|
-
* The stream is built directly on the sync WebSocket and adds no second
|
|
6
|
-
* connection. It is the sibling of {@link createClaimStream}, which reuses the
|
|
7
|
-
* same presence frames.
|
|
8
|
-
*
|
|
9
|
-
* There are two ways to construct it:
|
|
10
|
-
*
|
|
11
|
-
* 1. Direct — pass an already-open `transport`, for example an agent worker
|
|
12
|
-
* or a test.
|
|
13
|
-
* 2. Deferred — construct without a transport and call `attach(transport)`
|
|
14
|
-
* once the connection is ready. The returned stream object is stable from
|
|
15
|
-
* construction, so callers can hold the reference and let attachment
|
|
16
|
-
* happen later.
|
|
17
|
-
*
|
|
18
|
-
* Wire frames:
|
|
19
|
-
* • Outbound `presence_update` — `{ status, activity? }`. The server stamps
|
|
20
|
-
* `userId`, `kind`, `timestamp`, and `isAgent`, then broadcasts to the
|
|
21
|
-
* other participants on the same sync groups.
|
|
22
|
-
* • Inbound — the same frame, with `kind` one of `enter`, `update`, or
|
|
23
|
-
* `leave`.
|
|
24
|
-
*/
|
|
25
|
-
import type { WsTransport } from '../transaction/transport/wsTransport.js';
|
|
26
|
-
import type { PresenceStream } from '../transaction/types/streams.js';
|
|
27
|
-
import type { ParticipantKind } from '../transaction/types/participant.js';
|
|
28
|
-
/**
|
|
29
|
-
* The wire capability the presence stream actually uses: subscribe to typed
|
|
30
|
-
* inbound frames, check liveness, and send outbound frames. The duplex
|
|
31
|
-
* `WsTransport` satisfies it — the same port shape the claim stream depends
|
|
32
|
-
* on — so the stream can attach to whatever connection the host built,
|
|
33
|
-
* without naming the engine's subclass.
|
|
34
|
-
*/
|
|
35
|
-
export type PresenceTransport = Pick<WsTransport, 'subscribe' | 'isConnected' | 'send'>;
|
|
36
|
-
export interface PresenceStreamConfig {
|
|
37
|
-
/** Identity used to filter our own echoed frames out of `others`. */
|
|
38
|
-
participantId: string;
|
|
39
|
-
/** Optional human label for the self entry. */
|
|
40
|
-
label?: string;
|
|
41
|
-
/** Sync groups the participant is broadcasting on. Used for the
|
|
42
|
-
* initial `self` entry and for `othersIn(...)` filtering. */
|
|
43
|
-
syncGroups: readonly string[];
|
|
44
|
-
/** Marks `self` as an agent. Server is the source of truth for
|
|
45
|
-
* peers' `isAgent`, but `self` is local — caller decides. */
|
|
46
|
-
isAgent?: boolean;
|
|
47
|
-
}
|
|
48
|
-
/** PresenceStream extended with engine-lifecycle hooks. */
|
|
49
|
-
export interface AttachablePresenceStream extends PresenceStream {
|
|
50
|
-
/** Wire the stream to a now-ready transport. Calls before this are
|
|
51
|
-
* buffered (self mutations only — no wire send). Idempotent. */
|
|
52
|
-
attach(transport: PresenceTransport): void;
|
|
53
|
-
/**
|
|
54
|
-
* Seeds the participant identity once the host resolves it. The stream can
|
|
55
|
-
* be built before identity is known — a hosted client learns who it is
|
|
56
|
-
* from its credential's scope during connect — and until then the
|
|
57
|
-
* construction-time values (possibly empty) would leave the `self` entry
|
|
58
|
-
* blank and let the participant's own echoed frames into `others`. Updates
|
|
59
|
-
* the `self` entry in place, so held references see the resolved identity.
|
|
60
|
-
*/
|
|
61
|
-
setParticipant(participant: {
|
|
62
|
-
id: string;
|
|
63
|
-
kind?: ParticipantKind;
|
|
64
|
-
syncGroups?: readonly string[];
|
|
65
|
-
}): void;
|
|
66
|
-
/** Tear down listeners. Stream object stays usable as a no-op. */
|
|
67
|
-
dispose(): void;
|
|
68
|
-
}
|
|
69
|
-
export declare function createPresenceStream(config: PresenceStreamConfig, transport?: PresenceTransport | null): AttachablePresenceStream;
|
|
@@ -1,200 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Creates a {@link PresenceStream} over a live sync connection. Presence is the
|
|
3
|
-
* lightweight, ephemeral "who's here and what are they doing" view: each
|
|
4
|
-
* participant broadcasts a status and an activity, and sees everyone else's.
|
|
5
|
-
* The stream is built directly on the sync WebSocket and adds no second
|
|
6
|
-
* connection. It is the sibling of {@link createClaimStream}, which reuses the
|
|
7
|
-
* same presence frames.
|
|
8
|
-
*
|
|
9
|
-
* There are two ways to construct it:
|
|
10
|
-
*
|
|
11
|
-
* 1. Direct — pass an already-open `transport`, for example an agent worker
|
|
12
|
-
* or a test.
|
|
13
|
-
* 2. Deferred — construct without a transport and call `attach(transport)`
|
|
14
|
-
* once the connection is ready. The returned stream object is stable from
|
|
15
|
-
* construction, so callers can hold the reference and let attachment
|
|
16
|
-
* happen later.
|
|
17
|
-
*
|
|
18
|
-
* Wire frames:
|
|
19
|
-
* • Outbound `presence_update` — `{ status, activity? }`. The server stamps
|
|
20
|
-
* `userId`, `kind`, `timestamp`, and `isAgent`, then broadcasts to the
|
|
21
|
-
* other participants on the same sync groups.
|
|
22
|
-
* • Inbound — the same frame, with `kind` one of `enter`, `update`, or
|
|
23
|
-
* `leave`.
|
|
24
|
-
*/
|
|
25
|
-
import { asyncIteratorFrom } from '../transaction/utils/asyncIterator.js';
|
|
26
|
-
import { participantKindFromWire } from '../transaction/coordination/schema.js';
|
|
27
|
-
import { isTargetTuple, subTarget, wireTarget } from '../transaction/coordination/index.js';
|
|
28
|
-
export function createPresenceStream(config, transport = null) {
|
|
29
|
-
const { label, syncGroups, isAgent = false } = config;
|
|
30
|
-
// Mutable: the host seeds the resolved identity via `setParticipant` once
|
|
31
|
-
// it is known; the own-echo filter always reads the current value.
|
|
32
|
-
let participantId = config.participantId;
|
|
33
|
-
// ── Self ─────────────────────────────────────────────────────────
|
|
34
|
-
const self = {
|
|
35
|
-
participantKind: isAgent ? 'agent' : 'user',
|
|
36
|
-
participantId,
|
|
37
|
-
label,
|
|
38
|
-
syncGroups: [...syncGroups],
|
|
39
|
-
activity: { entityType: 'Unknown', entityId: '', action: 'idle' },
|
|
40
|
-
lastActive: new Date().toISOString(),
|
|
41
|
-
};
|
|
42
|
-
// ── Others ───────────────────────────────────────────────────────
|
|
43
|
-
const othersById = new Map();
|
|
44
|
-
let othersSnapshot = Object.freeze([]);
|
|
45
|
-
const listeners = new Set();
|
|
46
|
-
const notifyListeners = () => {
|
|
47
|
-
othersSnapshot = Object.freeze(Array.from(othersById.values()));
|
|
48
|
-
for (const l of listeners) {
|
|
49
|
-
try {
|
|
50
|
-
l();
|
|
51
|
-
}
|
|
52
|
-
catch {
|
|
53
|
-
/* one bad listener doesn't break the others */
|
|
54
|
-
}
|
|
55
|
-
}
|
|
56
|
-
};
|
|
57
|
-
// ── Wire wiring ──────────────────────────────────────────────────
|
|
58
|
-
let attached = null;
|
|
59
|
-
const unsubs = [];
|
|
60
|
-
function attach(t) {
|
|
61
|
-
if (attached)
|
|
62
|
-
return; // idempotent
|
|
63
|
-
attached = t;
|
|
64
|
-
// Reconnect: clear roster (Hub sends fresh snapshot), re-announce
|
|
65
|
-
// own activity (peers don't auto-learn about us across reconnects).
|
|
66
|
-
unsubs.push(t.subscribe('connected', () => {
|
|
67
|
-
if (othersById.size > 0) {
|
|
68
|
-
othersById.clear();
|
|
69
|
-
othersSnapshot = Object.freeze([]);
|
|
70
|
-
notifyListeners();
|
|
71
|
-
}
|
|
72
|
-
if (self.activity.entityId)
|
|
73
|
-
sendUpdate(self.activity);
|
|
74
|
-
}));
|
|
75
|
-
// Inbound presence frames arrive in the wire vocabulary
|
|
76
|
-
// (userId / isAgent / timestamp); translate them into the shape this
|
|
77
|
-
// stream exposes (participantId / participantKind / lastActive).
|
|
78
|
-
unsubs.push(t.subscribe('presence_update', (event) => {
|
|
79
|
-
if (event.userId === participantId)
|
|
80
|
-
return; // own echo
|
|
81
|
-
if (!event.userId)
|
|
82
|
-
return;
|
|
83
|
-
switch (event.kind) {
|
|
84
|
-
case 'leave':
|
|
85
|
-
if (othersById.delete(event.userId))
|
|
86
|
-
notifyListeners();
|
|
87
|
-
return;
|
|
88
|
-
// No `undefined` arm: every site that builds a presence frame stamps
|
|
89
|
-
// `kind`, and the schema now says so, so an unlabelled frame is not a
|
|
90
|
-
// shape the transport can hand us.
|
|
91
|
-
case 'enter':
|
|
92
|
-
case 'update': {
|
|
93
|
-
const entry = {
|
|
94
|
-
participantKind: participantKindFromWire(event.participantKind, event.isAgent),
|
|
95
|
-
participantId: event.userId,
|
|
96
|
-
syncGroups: event.syncGroups ?? [],
|
|
97
|
-
activity: event.activity
|
|
98
|
-
? {
|
|
99
|
-
...wireTarget(event.activity),
|
|
100
|
-
...subTarget(event.activity),
|
|
101
|
-
action: event.activity.action,
|
|
102
|
-
...(event.activity.detail !== undefined
|
|
103
|
-
? { detail: event.activity.detail }
|
|
104
|
-
: {}),
|
|
105
|
-
}
|
|
106
|
-
: { entityType: 'Unknown', entityId: '', action: event.status },
|
|
107
|
-
lastActive: event.timestamp
|
|
108
|
-
? new Date(event.timestamp).toISOString()
|
|
109
|
-
: new Date().toISOString(),
|
|
110
|
-
};
|
|
111
|
-
othersById.set(event.userId, entry);
|
|
112
|
-
notifyListeners();
|
|
113
|
-
return;
|
|
114
|
-
}
|
|
115
|
-
}
|
|
116
|
-
}));
|
|
117
|
-
// If self was already mutated before attach, broadcast it now.
|
|
118
|
-
if (self.activity.entityId)
|
|
119
|
-
sendUpdate(self.activity);
|
|
120
|
-
}
|
|
121
|
-
if (transport)
|
|
122
|
-
attach(transport);
|
|
123
|
-
// ── Outbound ────────────────────────────────────────────────────
|
|
124
|
-
// Do not include `isAgent` in the payload. The server derives it
|
|
125
|
-
// authoritatively from the connection's identity, and letting a client
|
|
126
|
-
// self-declare it once caused human sessions to broadcast as agents to peers.
|
|
127
|
-
function sendUpdate(activity) {
|
|
128
|
-
if (!attached?.isConnected())
|
|
129
|
-
return; // no-op until connected
|
|
130
|
-
attached.send({
|
|
131
|
-
type: 'presence_update',
|
|
132
|
-
payload: { status: 'online', activity },
|
|
133
|
-
});
|
|
134
|
-
}
|
|
135
|
-
function doUpdate(activity) {
|
|
136
|
-
self.activity = activity;
|
|
137
|
-
self.lastActive = new Date().toISOString();
|
|
138
|
-
sendUpdate(activity);
|
|
139
|
-
}
|
|
140
|
-
function resolveTarget(target) {
|
|
141
|
-
if (isTargetTuple(target)) {
|
|
142
|
-
return { entityType: target[0], entityId: target[1], action: 'unknown' };
|
|
143
|
-
}
|
|
144
|
-
return {
|
|
145
|
-
...wireTarget(target),
|
|
146
|
-
...subTarget(target),
|
|
147
|
-
action: 'unknown',
|
|
148
|
-
};
|
|
149
|
-
}
|
|
150
|
-
const withVerb = (action) => (target, detail) => {
|
|
151
|
-
doUpdate({ ...resolveTarget(target), action, detail });
|
|
152
|
-
};
|
|
153
|
-
return {
|
|
154
|
-
self,
|
|
155
|
-
update: doUpdate,
|
|
156
|
-
editing: withVerb('editing'),
|
|
157
|
-
reading: withVerb('reading'),
|
|
158
|
-
viewing: withVerb('viewing'),
|
|
159
|
-
idle: () => {
|
|
160
|
-
doUpdate({ entityType: 'Unknown', entityId: '', action: 'idle' });
|
|
161
|
-
},
|
|
162
|
-
get others() {
|
|
163
|
-
return othersSnapshot;
|
|
164
|
-
},
|
|
165
|
-
othersIn: (syncGroup) => othersSnapshot.filter((e) => e.syncGroups.includes(syncGroup)),
|
|
166
|
-
onChange: (listener) => {
|
|
167
|
-
listeners.add(listener);
|
|
168
|
-
return () => {
|
|
169
|
-
listeners.delete(listener);
|
|
170
|
-
};
|
|
171
|
-
},
|
|
172
|
-
[Symbol.asyncIterator]() {
|
|
173
|
-
return asyncIteratorFrom((onChange) => {
|
|
174
|
-
listeners.add(onChange);
|
|
175
|
-
return () => {
|
|
176
|
-
listeners.delete(onChange);
|
|
177
|
-
};
|
|
178
|
-
}, () => othersSnapshot);
|
|
179
|
-
},
|
|
180
|
-
attach,
|
|
181
|
-
setParticipant(participant) {
|
|
182
|
-
participantId = participant.id;
|
|
183
|
-
const writable = self;
|
|
184
|
-
writable.participantId = participant.id;
|
|
185
|
-
if (participant.kind)
|
|
186
|
-
writable.participantKind = participant.kind;
|
|
187
|
-
if (participant.syncGroups)
|
|
188
|
-
writable.syncGroups = [...participant.syncGroups];
|
|
189
|
-
},
|
|
190
|
-
dispose() {
|
|
191
|
-
for (const off of unsubs)
|
|
192
|
-
off();
|
|
193
|
-
unsubs.length = 0;
|
|
194
|
-
listeners.clear();
|
|
195
|
-
othersById.clear();
|
|
196
|
-
othersSnapshot = Object.freeze([]);
|
|
197
|
-
attached = null;
|
|
198
|
-
},
|
|
199
|
-
};
|
|
200
|
-
}
|
|
@@ -1,29 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Captures a {@link Snapshot} of a chosen set of entities, along with a
|
|
3
|
-
* watermark, so a caller can detect when that state has gone stale. This is
|
|
4
|
-
* what an LLM caller threads into a prompt: `stamp` flows into later writes as
|
|
5
|
-
* `readAt`, so the server rejects a mutation premised on data that has since
|
|
6
|
-
* changed; `signal` is an `AbortSignal` that fires as soon as any captured
|
|
7
|
-
* entity receives a delta, so a mid-generation invalidation can abort the token
|
|
8
|
-
* stream instead of producing output against stale context.
|
|
9
|
-
*
|
|
10
|
-
* It reads the current entity state from the in-memory pool, reads the engine's
|
|
11
|
-
* current `lastSyncId` as the watermark, and subscribes to delta frames on the
|
|
12
|
-
* existing sync connection — no second connection.
|
|
13
|
-
*/
|
|
14
|
-
import type { InstanceCache } from '../InstanceCache.js';
|
|
15
|
-
import type { Schema } from '../transaction/schema/schema.js';
|
|
16
|
-
import type { SyncWebSocket } from './SyncWebSocket.js';
|
|
17
|
-
import type { Snapshot } from '../transaction/types/streams.js';
|
|
18
|
-
export interface CreateSnapshotArgs<TSchema extends Schema = Schema, K extends keyof TSchema['models'] & string = keyof TSchema['models'] & string> {
|
|
19
|
-
pool: InstanceCache;
|
|
20
|
-
/** Live transport for delta subscriptions. May be null if the engine
|
|
21
|
-
* hasn't connected yet — the snapshot still resolves with current
|
|
22
|
-
* pool state, but `signal` won't fire until reconnect. */
|
|
23
|
-
transport: SyncWebSocket | null;
|
|
24
|
-
/** Returns the engine's current `lastSyncId`. Read at snapshot time
|
|
25
|
-
* to stamp the watermark; not re-read after. */
|
|
26
|
-
getLastSyncId: () => number;
|
|
27
|
-
entities: Readonly<Record<K, string | readonly string[]>>;
|
|
28
|
-
}
|
|
29
|
-
export declare function createSnapshot<TSchema extends Schema, K extends keyof TSchema['models'] & string>(args: CreateSnapshotArgs<TSchema, K>): Snapshot<TSchema, K>;
|
|
@@ -1,118 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Captures a {@link Snapshot} of a chosen set of entities, along with a
|
|
3
|
-
* watermark, so a caller can detect when that state has gone stale. This is
|
|
4
|
-
* what an LLM caller threads into a prompt: `stamp` flows into later writes as
|
|
5
|
-
* `readAt`, so the server rejects a mutation premised on data that has since
|
|
6
|
-
* changed; `signal` is an `AbortSignal` that fires as soon as any captured
|
|
7
|
-
* entity receives a delta, so a mid-generation invalidation can abort the token
|
|
8
|
-
* stream instead of producing output against stale context.
|
|
9
|
-
*
|
|
10
|
-
* It reads the current entity state from the in-memory pool, reads the engine's
|
|
11
|
-
* current `lastSyncId` as the watermark, and subscribes to delta frames on the
|
|
12
|
-
* existing sync connection — no second connection.
|
|
13
|
-
*/
|
|
14
|
-
import { AbloValidationError } from '../transaction/errors.js';
|
|
15
|
-
import { Model, modelAsRow } from '../Model.js';
|
|
16
|
-
/**
|
|
17
|
-
* The snapshot result exposes `stamp`, `signal`, and `onChange` at its top
|
|
18
|
-
* level, alongside one bucket per model. If a schema declares a model with one
|
|
19
|
-
* of these names, the two would collide, so snapshot creation throws instead.
|
|
20
|
-
*/
|
|
21
|
-
const RESERVED_SNAPSHOT_KEYS = new Set([
|
|
22
|
-
'stamp',
|
|
23
|
-
'signal',
|
|
24
|
-
'onChange',
|
|
25
|
-
]);
|
|
26
|
-
export function createSnapshot(args) {
|
|
27
|
-
const { pool, transport, getLastSyncId, entities } = args;
|
|
28
|
-
// ── Validate keys ────────────────────────────────────────────────
|
|
29
|
-
for (const key of Object.keys(entities)) {
|
|
30
|
-
if (RESERVED_SNAPSHOT_KEYS.has(key)) {
|
|
31
|
-
throw new AbloValidationError(`engine.snapshot: model key "${key}" collides with a reserved ` +
|
|
32
|
-
`snapshot field (stamp / signal / onChange). Rename the model ` +
|
|
33
|
-
'in your schema.', { code: 'snapshot_reserved_key' });
|
|
34
|
-
}
|
|
35
|
-
}
|
|
36
|
-
// ── Watermark ────────────────────────────────────────────────────
|
|
37
|
-
const stamp = getLastSyncId();
|
|
38
|
-
// ── Capture data + watched set ───────────────────────────────────
|
|
39
|
-
const watched = new Set(); // `${type}:${id}`
|
|
40
|
-
const data = {};
|
|
41
|
-
for (const [type, idOrIds] of Object.entries(entities)) {
|
|
42
|
-
const ids = Array.isArray(idOrIds)
|
|
43
|
-
? idOrIds
|
|
44
|
-
: [idOrIds];
|
|
45
|
-
const bucket = {};
|
|
46
|
-
for (const id of ids) {
|
|
47
|
-
const m = pool.get(id);
|
|
48
|
-
// Only include if the model actually has the requested type —
|
|
49
|
-
// pool keys models globally by id, so `pool.get(id)` could
|
|
50
|
-
// return a different model that happens to share the id (rare,
|
|
51
|
-
// but type guards keep the surface honest).
|
|
52
|
-
if (m && m instanceof Model && m.getModelName() === type) {
|
|
53
|
-
bucket[id] = modelAsRow(m);
|
|
54
|
-
}
|
|
55
|
-
watched.add(`${type}:${id}`);
|
|
56
|
-
}
|
|
57
|
-
data[type] = bucket;
|
|
58
|
-
}
|
|
59
|
-
// ── Invalidation wiring ──────────────────────────────────────────
|
|
60
|
-
const listeners = new Set();
|
|
61
|
-
const controller = new AbortController();
|
|
62
|
-
const fireChange = (change) => {
|
|
63
|
-
if (!controller.signal.aborted) {
|
|
64
|
-
controller.abort(new Error('snapshot invalidated — underlying entity received a delta'));
|
|
65
|
-
}
|
|
66
|
-
for (const l of listeners) {
|
|
67
|
-
try {
|
|
68
|
-
l(change);
|
|
69
|
-
}
|
|
70
|
-
catch {
|
|
71
|
-
/* listener errors don't break siblings */
|
|
72
|
-
}
|
|
73
|
-
}
|
|
74
|
-
};
|
|
75
|
-
let unsubDelta = null;
|
|
76
|
-
if (transport) {
|
|
77
|
-
unsubDelta = transport.subscribe('delta', (delta) => {
|
|
78
|
-
const key = `${delta.modelName}:${delta.modelId}`;
|
|
79
|
-
if (!watched.has(key))
|
|
80
|
-
return;
|
|
81
|
-
// Every delta to a captured entity is reported as 'semantic' severity.
|
|
82
|
-
fireChange({
|
|
83
|
-
model: delta.modelName,
|
|
84
|
-
id: delta.modelId,
|
|
85
|
-
severity: 'semantic',
|
|
86
|
-
});
|
|
87
|
-
});
|
|
88
|
-
}
|
|
89
|
-
// ── Build the flat result ────────────────────────────────────────
|
|
90
|
-
const result = {
|
|
91
|
-
stamp,
|
|
92
|
-
signal: controller.signal,
|
|
93
|
-
onChange: (listener) => {
|
|
94
|
-
listeners.add(listener);
|
|
95
|
-
// The caller unsubscribes its own listener via the returned function.
|
|
96
|
-
// The underlying delta subscription lives for the snapshot's lifetime;
|
|
97
|
-
// there is no explicit dispose because a snapshot is short-lived (one
|
|
98
|
-
// LLM call's worth) and the subscription is cheap.
|
|
99
|
-
return () => {
|
|
100
|
-
listeners.delete(listener);
|
|
101
|
-
// Once the last listener is gone and the abort has fired, drop the
|
|
102
|
-
// delta subscription too — nothing is listening anymore.
|
|
103
|
-
if (listeners.size === 0 && controller.signal.aborted && unsubDelta) {
|
|
104
|
-
unsubDelta();
|
|
105
|
-
unsubDelta = null;
|
|
106
|
-
}
|
|
107
|
-
};
|
|
108
|
-
},
|
|
109
|
-
};
|
|
110
|
-
for (const [modelName, bucket] of Object.entries(data)) {
|
|
111
|
-
result[modelName] = bucket;
|
|
112
|
-
}
|
|
113
|
-
// Dynamic-shape boundary — `result` is built at runtime by iterating
|
|
114
|
-
// schema-derived buckets, so it structurally satisfies
|
|
115
|
-
// `Snapshot<TSchema, K>`. TS can't prove the static cast, but the
|
|
116
|
-
// runtime invariant holds.
|
|
117
|
-
return result;
|
|
118
|
-
}
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Moved to the settlement core with the duplex transport (ADR 0016): keeping
|
|
3
|
-
* a long-lived socket's credential fresh is connection plumbing an agent needs
|
|
4
|
-
* as much as a browser does. This path re-exports it so existing importers
|
|
5
|
-
* stay unchanged.
|
|
6
|
-
*/
|
|
7
|
-
export { DEFAULT_PREROLL_INTERVAL_MS, MIN_PREROLL_DELAY_MS, computePrerollDelayMs, CredentialLifecycle, type CredentialRefreshOutcome, type CredentialRecoveryOutcome, type CredentialRefreshResult, type CredentialRefresher, type CredentialLifecycleContext, } from '../transaction/transport/credentialLifecycle.js';
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Moved to the settlement core with the duplex transport (ADR 0016): keeping
|
|
3
|
-
* a long-lived socket's credential fresh is connection plumbing an agent needs
|
|
4
|
-
* as much as a browser does. This path re-exports it so existing importers
|
|
5
|
-
* stay unchanged.
|
|
6
|
-
*/
|
|
7
|
-
export { DEFAULT_PREROLL_INTERVAL_MS, MIN_PREROLL_DELAY_MS, computePrerollDelayMs, CredentialLifecycle, } from '../transaction/transport/credentialLifecycle.js';
|
|
@@ -1,114 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* The pipeline that takes incoming deltas from the server and lands them in
|
|
3
|
-
* local state. It has four stages: deduplicating deltas by state signature,
|
|
4
|
-
* per-delta bookkeeping and enqueue, a debounce for live traffic, and a flush
|
|
5
|
-
* that writes to the local store and then the in-memory pool. Every call it
|
|
6
|
-
* makes back into the surrounding store — resolving state fields, identifying
|
|
7
|
-
* custom entities, deduplicating, flushing, handling sync-group changes —
|
|
8
|
-
* routes through the {@link DeltaPipelineContext} interface, so a subclass that
|
|
9
|
-
* overrides any of those hooks still takes effect. The atomic frame-apply entry
|
|
10
|
-
* point lives on the store and drives this pipeline through {@link enqueueDelta}
|
|
11
|
-
* and {@link flushPendingDeltas}.
|
|
12
|
-
*/
|
|
13
|
-
import type { RuntimeContext } from '../RuntimeContext.js';
|
|
14
|
-
import { ModelScope } from '../InstanceCache.js';
|
|
15
|
-
import type { Model } from '../Model.js';
|
|
16
|
-
import type { SyncDelta } from './SyncWebSocket.js';
|
|
17
|
-
import type { ModelData } from '../transaction/types/modelData.js';
|
|
18
|
-
import { type AbloPlugin, type AppliedChange } from '../transaction/plugin.js';
|
|
19
|
-
/**
|
|
20
|
-
* What the pipeline needs back from the surrounding store: the shared mutable
|
|
21
|
-
* pipeline state (backed by the store's own fields through accessors), narrow
|
|
22
|
-
* persistence and pool facades, and the store's overridable hooks, so a
|
|
23
|
-
* subclass's overrides continue to take effect.
|
|
24
|
-
*/
|
|
25
|
-
export interface DeltaPipelineContext {
|
|
26
|
-
/** The owning client's runtime. Defaults to the module-global bridge. */
|
|
27
|
-
readonly runtime?: RuntimeContext;
|
|
28
|
-
/**
|
|
29
|
-
* The installed plugins, whose declared stage handlers this pipeline
|
|
30
|
-
* dispatches at each boundary. Empty (or absent) on directly-constructed
|
|
31
|
-
* stores, where the store's own apply is the whole pipeline.
|
|
32
|
-
*/
|
|
33
|
-
readonly stagePlugins?: readonly AbloPlugin[];
|
|
34
|
-
pendingDeltas: SyncDelta[];
|
|
35
|
-
batchTimer: ReturnType<typeof setTimeout> | null;
|
|
36
|
-
/** Queue for deltas arriving during an active bootstrap; null when none. */
|
|
37
|
-
readonly bootstrapDeltaQueue: SyncDelta[] | null;
|
|
38
|
-
readonly smartSyncOptions: {
|
|
39
|
-
readonly batchingDelay: number;
|
|
40
|
-
readonly maxBatchSize: number;
|
|
41
|
-
};
|
|
42
|
-
/** Pool-applied cursor (`syncClient.position.applied`). */
|
|
43
|
-
readonly highestProcessedSyncId: number;
|
|
44
|
-
/** Resume/ack cursor (`syncClient.position.persisted`). */
|
|
45
|
-
readonly lastAckedId: number;
|
|
46
|
-
onDeltaReceived(syncId: number, transactionId?: string, correlationId?: string): void;
|
|
47
|
-
advanceApplied(syncId: number): void;
|
|
48
|
-
advancePersisted(syncId: number): void;
|
|
49
|
-
processDeltaBatch(deltas: {
|
|
50
|
-
syncId?: number;
|
|
51
|
-
actionType: SyncDelta['actionType'];
|
|
52
|
-
modelName: string;
|
|
53
|
-
modelId: string;
|
|
54
|
-
data: ModelData | null;
|
|
55
|
-
transactionId?: string;
|
|
56
|
-
}[]): Promise<{
|
|
57
|
-
results: AppliedChange[];
|
|
58
|
-
persistedSyncId: number;
|
|
59
|
-
}>;
|
|
60
|
-
/** Applies persisted delta results to the in-memory pool, with the host's relation enrichment bound. */
|
|
61
|
-
applyDeltaBatchToPool(results: AppliedChange[]): void;
|
|
62
|
-
/** Acknowledges a sync id back to the server; a no-op when the socket is down. */
|
|
63
|
-
acknowledge(syncId: number): void;
|
|
64
|
-
readonly objectPool: {
|
|
65
|
-
get(id: string): Model | undefined;
|
|
66
|
-
add(model: Model, scope: ModelScope): void;
|
|
67
|
-
remove(id: string): boolean;
|
|
68
|
-
/** Full in-memory clear — the revocation-failure fallback (see
|
|
69
|
-
* {@link handleGroupHandlerFailure}). */
|
|
70
|
-
clear(): void;
|
|
71
|
-
};
|
|
72
|
-
getStateFields(modelName: string): string[];
|
|
73
|
-
isCustomEntity(modelName: string): boolean;
|
|
74
|
-
createCustomEntity(modelName: string, modelId: string, data: Record<string, unknown>): Model | null;
|
|
75
|
-
deduplicateDeltas(deltas: SyncDelta[]): SyncDelta[];
|
|
76
|
-
flushPendingDeltas(): Promise<void>;
|
|
77
|
-
handleFlushError(error: unknown): void;
|
|
78
|
-
handleSyncGroupChange(delta: SyncDelta): Promise<void>;
|
|
79
|
-
handleGroupRemoved(delta: SyncDelta): Promise<void>;
|
|
80
|
-
/** Host's re-bootstrap trigger — the revocation-failure fallback. */
|
|
81
|
-
forceFullRebootstrap(): void;
|
|
82
|
-
cascadeCancelTransactionsForDeletedParent(parentModelName: string, parentId: string): void;
|
|
83
|
-
}
|
|
84
|
-
/**
|
|
85
|
-
* Handles a sync-group ('G' or 'S') delta whose handler rejected after the
|
|
86
|
-
* applied watermark had already advanced. That delta will never be redelivered,
|
|
87
|
-
* so a failed security clear — revoked data that must not stay cached — would
|
|
88
|
-
* otherwise fail silently. The safe fallback is blunt: drop the whole in-memory
|
|
89
|
-
* pool and force a full re-bootstrap, rebuilding local state from the server.
|
|
90
|
-
* It never throws, because it runs inside the pipeline's fire-and-forget path.
|
|
91
|
-
*/
|
|
92
|
-
export declare function handleGroupHandlerFailure(ctx: DeltaPipelineContext, delta: SyncDelta, error: unknown): void;
|
|
93
|
-
/** Deduplicate deltas to the same entity — keep meaningful state transitions only */
|
|
94
|
-
export declare function deduplicateDeltas(ctx: DeltaPipelineContext, deltas: SyncDelta[]): SyncDelta[];
|
|
95
|
-
/**
|
|
96
|
-
* Performs per-delta bookkeeping and enqueues the delta. Returns `true` when
|
|
97
|
-
* the delta was pushed onto `pendingDeltas` — a regular batchable insert,
|
|
98
|
-
* update, covering, or delete that a later flush must drain — and `false` when
|
|
99
|
-
* it was skipped as a duplicate, deferred into the bootstrap queue, or handled
|
|
100
|
-
* immediately (a 'G'/'S' sync-group change). It does not schedule the flush
|
|
101
|
-
* itself; the caller chooses whether to debounce live traffic or flush a
|
|
102
|
-
* catch-up frame atomically.
|
|
103
|
-
*/
|
|
104
|
-
export declare function enqueueDelta(ctx: DeltaPipelineContext, delta: SyncDelta, options?: {
|
|
105
|
-
authoritative?: boolean;
|
|
106
|
-
}): boolean;
|
|
107
|
-
/** Debounce a flush for live single-delta traffic. */
|
|
108
|
-
export declare function scheduleDeltaFlush(ctx: DeltaPipelineContext): void;
|
|
109
|
-
/**
|
|
110
|
-
* Flushes the queued deltas: deduplicates them, applies custom-entity deltas
|
|
111
|
-
* straight to the pool, writes the rest to the local store and then the pool,
|
|
112
|
-
* and advances the acknowledgement cursor once the store write has committed.
|
|
113
|
-
*/
|
|
114
|
-
export declare function flushPendingDeltas(ctx: DeltaPipelineContext): Promise<void>;
|