@abloatai/ablo 0.25.0 → 0.27.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 +5 -3
- package/CHANGELOG.md +34 -0
- package/README.md +104 -88
- package/dist/BaseSyncedStore.d.ts +140 -266
- package/dist/BaseSyncedStore.js +338 -739
- package/dist/Database.d.ts +62 -77
- package/dist/Database.js +106 -127
- package/dist/{ObjectPool.d.ts → InstanceCache.d.ts} +10 -13
- package/dist/{ObjectPool.js → InstanceCache.js} +91 -83
- package/dist/LazyReferenceCollection.d.ts +11 -15
- package/dist/LazyReferenceCollection.js +16 -15
- package/dist/Model.d.ts +37 -52
- package/dist/Model.js +52 -69
- package/dist/ModelRegistry.d.ts +46 -25
- package/dist/ModelRegistry.js +32 -30
- package/dist/NetworkMonitor.d.ts +5 -6
- package/dist/NetworkMonitor.js +6 -7
- package/dist/SyncClient.d.ts +119 -109
- package/dist/SyncClient.js +303 -224
- package/dist/SyncEngineContext.d.ts +1 -3
- package/dist/SyncEngineContext.js +1 -2
- package/dist/adapters/alwaysOnline.d.ts +6 -8
- package/dist/adapters/alwaysOnline.js +6 -8
- package/dist/adapters/inMemoryStorage.d.ts +9 -9
- package/dist/adapters/inMemoryStorage.js +9 -9
- package/dist/agent/Agent.d.ts +39 -31
- package/dist/agent/Agent.js +35 -23
- package/dist/agent/index.d.ts +4 -4
- package/dist/agent/index.js +5 -5
- package/dist/agent/session.d.ts +47 -44
- package/dist/agent/session.js +37 -48
- package/dist/agent/types.d.ts +26 -31
- package/dist/agent/types.js +6 -7
- package/dist/ai-sdk/coordinatedTool.d.ts +108 -0
- package/dist/ai-sdk/{coordinated-tool.js → coordinatedTool.js} +44 -38
- package/dist/ai-sdk/coordinationContext.d.ts +46 -0
- package/dist/ai-sdk/{coordination-context.js → coordinationContext.js} +30 -31
- package/dist/ai-sdk/index.d.ts +25 -22
- package/dist/ai-sdk/index.js +25 -22
- package/dist/ai-sdk/wrap.d.ts +7 -8
- package/dist/ai-sdk/wrap.js +2 -2
- package/dist/auth/credentialPolicy.d.ts +74 -71
- package/dist/auth/credentialPolicy.js +51 -56
- package/dist/auth/credentialSource.d.ts +7 -18
- package/dist/auth/credentialSource.js +10 -18
- package/dist/auth/index.d.ts +59 -58
- package/dist/auth/index.js +34 -40
- package/dist/auth/schemas.d.ts +5 -4
- package/dist/auth/schemas.js +5 -4
- package/dist/batching/index.d.ts +19 -21
- package/dist/batching/index.js +14 -17
- package/dist/cli.cjs +483 -369
- package/dist/client/Ablo.d.ts +107 -836
- package/dist/client/Ablo.js +174 -833
- package/dist/client/ApiClient.d.ts +44 -20
- package/dist/client/ApiClient.js +193 -44
- package/dist/client/auth.d.ts +51 -60
- package/dist/client/auth.js +137 -110
- package/dist/client/claimHeartbeatLoop.d.ts +50 -0
- package/dist/client/claimHeartbeatLoop.js +88 -0
- package/dist/client/consoleLogger.d.ts +35 -0
- package/dist/client/consoleLogger.js +44 -0
- package/dist/client/createInternalComponents.d.ts +14 -17
- package/dist/client/createInternalComponents.js +26 -31
- package/dist/client/createModelProxy.d.ts +130 -120
- package/dist/client/createModelProxy.js +158 -124
- package/dist/client/credentialEndpoint.d.ts +61 -0
- package/dist/client/credentialEndpoint.js +86 -0
- package/dist/client/functionalUpdate.d.ts +29 -27
- package/dist/client/functionalUpdate.js +21 -21
- package/dist/client/hostedEndpoints.d.ts +21 -0
- package/dist/client/hostedEndpoints.js +21 -0
- package/dist/client/httpClient.d.ts +58 -54
- package/dist/client/httpClient.js +29 -31
- package/dist/client/identity.d.ts +15 -20
- package/dist/client/identity.js +49 -59
- package/dist/client/modelRegistration.d.ts +10 -0
- package/dist/client/modelRegistration.js +301 -0
- package/dist/client/options.d.ts +373 -0
- package/dist/client/options.js +6 -0
- package/dist/client/registerDataSource.d.ts +9 -9
- package/dist/client/registerDataSource.js +15 -16
- package/dist/client/resourceTypes.d.ts +333 -0
- package/dist/client/resourceTypes.js +7 -0
- package/dist/client/schemaConfig.d.ts +44 -0
- package/dist/client/schemaConfig.js +176 -0
- package/dist/client/sessionMint.d.ts +17 -13
- package/dist/client/sessionMint.js +26 -31
- package/dist/client/validateAbloOptions.d.ts +12 -14
- package/dist/client/validateAbloOptions.js +9 -10
- package/dist/client/writeOptionsSchema.d.ts +18 -16
- package/dist/client/writeOptionsSchema.js +23 -20
- package/dist/client/wsMutationExecutor.d.ts +28 -0
- package/dist/client/wsMutationExecutor.js +71 -0
- package/dist/context.d.ts +6 -4
- package/dist/context.js +6 -7
- package/dist/coordination/index.d.ts +13 -4
- package/dist/coordination/index.js +29 -4
- package/dist/coordination/schema.d.ts +176 -128
- package/dist/coordination/schema.js +197 -133
- package/dist/coordination/trace.d.ts +9 -11
- package/dist/coordination/trace.js +13 -15
- package/dist/core/DatabaseManager.d.ts +5 -8
- package/dist/core/DatabaseManager.js +38 -40
- package/dist/core/QueryProcessor.d.ts +7 -9
- package/dist/core/QueryProcessor.js +27 -34
- package/dist/core/QueryView.d.ts +17 -5
- package/dist/core/QueryView.js +6 -7
- package/dist/core/StoreManager.d.ts +14 -16
- package/dist/core/StoreManager.js +26 -25
- package/dist/core/ViewRegistry.d.ts +5 -5
- package/dist/core/ViewRegistry.js +4 -4
- package/dist/core/index.d.ts +18 -13
- package/dist/core/index.js +32 -26
- package/dist/core/openIDBWithTimeout.d.ts +38 -36
- package/dist/core/openIDBWithTimeout.js +57 -54
- package/dist/core/queryUtils.d.ts +45 -0
- package/dist/core/queryUtils.js +69 -0
- package/dist/core/storeContract.d.ts +145 -0
- package/dist/core/storeContract.js +12 -0
- package/dist/environment.d.ts +28 -0
- package/dist/environment.js +21 -0
- package/dist/errorCodes.d.ts +118 -101
- package/dist/errorCodes.js +277 -260
- package/dist/errors.d.ts +170 -165
- package/dist/errors.js +161 -151
- package/dist/index.d.ts +30 -27
- package/dist/index.js +90 -82
- package/dist/interfaces/index.d.ts +108 -133
- package/dist/interfaces/index.js +5 -4
- package/dist/keys/index.d.ts +27 -29
- package/dist/keys/index.js +59 -49
- package/dist/mutators/RecordingTransaction.d.ts +16 -16
- package/dist/mutators/RecordingTransaction.js +31 -37
- package/dist/mutators/Transaction.d.ts +18 -26
- package/dist/mutators/Transaction.js +14 -20
- package/dist/mutators/UndoManager.d.ts +122 -131
- package/dist/mutators/UndoManager.js +149 -155
- package/dist/mutators/defineMutators.d.ts +24 -37
- package/dist/mutators/defineMutators.js +14 -20
- package/dist/mutators/inverseOp.d.ts +12 -15
- package/dist/mutators/inverseOp.js +12 -15
- package/dist/mutators/mutateActions.d.ts +10 -9
- package/dist/mutators/mutateActions.js +1 -1
- package/dist/mutators/readerActions.d.ts +9 -8
- package/dist/mutators/readerActions.js +2 -2
- package/dist/mutators/undoApply.d.ts +31 -27
- package/dist/mutators/undoApply.js +26 -24
- package/dist/policy/index.d.ts +5 -3
- package/dist/policy/index.js +5 -3
- package/dist/policy/types.d.ts +105 -101
- package/dist/policy/types.js +67 -66
- package/dist/query/client.d.ts +32 -16
- package/dist/query/client.js +103 -72
- package/dist/query/types.d.ts +37 -60
- package/dist/query/types.js +13 -33
- package/dist/react/AbloProvider.d.ts +7 -11
- package/dist/react/AbloProvider.js +24 -17
- package/dist/react/context.d.ts +27 -146
- package/dist/react/context.js +9 -10
- package/dist/react/index.d.ts +41 -42
- package/dist/react/index.js +37 -38
- package/dist/react/internalContext.d.ts +17 -19
- package/dist/react/useAblo.d.ts +23 -22
- package/dist/react/useAblo.js +17 -15
- package/dist/react/useCurrentUserId.d.ts +8 -7
- package/dist/react/useCurrentUserId.js +8 -7
- package/dist/react/useErrorListener.d.ts +7 -7
- package/dist/react/useErrorListener.js +11 -12
- package/dist/react/useMutationFailureListener.d.ts +8 -8
- package/dist/react/useMutationFailureListener.js +9 -9
- package/dist/react/useMutators.d.ts +11 -11
- package/dist/react/useMutators.js +10 -4
- package/dist/react/useReactive.js +2 -3
- package/dist/react/useSyncStatus.d.ts +4 -6
- package/dist/react/useUndoScope.d.ts +7 -9
- package/dist/react/useUndoScope.js +3 -3
- package/dist/schema/coordination.d.ts +21 -25
- package/dist/schema/coordination.js +21 -25
- package/dist/schema/ddl.d.ts +43 -39
- package/dist/schema/ddl.js +75 -68
- package/dist/schema/ddlLock.d.ts +35 -0
- package/dist/schema/ddlLock.js +46 -0
- package/dist/schema/diff.d.ts +99 -61
- package/dist/schema/diff.js +43 -34
- package/dist/schema/field.d.ts +37 -42
- package/dist/schema/field.js +36 -49
- package/dist/schema/generate.d.ts +12 -12
- package/dist/schema/generate.js +12 -12
- package/dist/schema/index.d.ts +5 -4
- package/dist/schema/index.js +29 -21
- package/dist/schema/model.d.ts +121 -146
- package/dist/schema/model.js +24 -35
- package/dist/schema/openapi.d.ts +10 -9
- package/dist/schema/openapi.js +7 -1
- package/dist/schema/queries.d.ts +30 -32
- package/dist/schema/queries.js +24 -25
- package/dist/schema/relation.d.ts +89 -99
- package/dist/schema/relation.js +13 -13
- package/dist/schema/residency.d.ts +38 -0
- package/dist/schema/residency.js +30 -0
- package/dist/schema/roles.d.ts +45 -27
- package/dist/schema/roles.js +52 -21
- package/dist/schema/schema.d.ts +36 -45
- package/dist/schema/schema.js +42 -39
- package/dist/schema/select.d.ts +13 -13
- package/dist/schema/select.js +13 -13
- package/dist/schema/serialize.d.ts +36 -39
- package/dist/schema/serialize.js +27 -31
- package/dist/schema/sugar.d.ts +17 -32
- package/dist/schema/sugar.js +14 -29
- package/dist/schema/{sync-delta-row.d.ts → syncDeltaRow.d.ts} +27 -50
- package/dist/schema/syncDeltaRow.js +89 -0
- package/dist/schema/tenancy.d.ts +44 -46
- package/dist/schema/tenancy.js +46 -48
- package/dist/server/adapter.d.ts +58 -58
- package/dist/server/adapter.js +13 -14
- package/dist/server/commit.d.ts +60 -64
- package/dist/server/index.d.ts +9 -10
- package/dist/server/index.js +1 -1
- package/dist/server/readConfig.d.ts +70 -0
- package/dist/server/readConfig.js +8 -0
- package/dist/server/storageMode.d.ts +23 -0
- package/dist/server/storageMode.js +17 -0
- package/dist/source/adapter.d.ts +31 -26
- package/dist/source/adapter.js +10 -10
- package/dist/source/adapters/drizzle.d.ts +28 -23
- package/dist/source/adapters/drizzle.js +34 -28
- package/dist/source/adapters/kysely.d.ts +27 -25
- package/dist/source/adapters/kysely.js +28 -26
- package/dist/source/adapters/memory.d.ts +8 -7
- package/dist/source/adapters/memory.js +10 -9
- package/dist/source/adapters/prisma.d.ts +13 -12
- package/dist/source/adapters/prisma.js +27 -29
- package/dist/source/conformance.d.ts +18 -11
- package/dist/source/conformance.js +27 -19
- package/dist/source/connector.d.ts +31 -32
- package/dist/source/connector.js +30 -28
- package/dist/source/connectorProtocol.d.ts +160 -0
- package/dist/source/connectorProtocol.js +162 -0
- package/dist/source/contract.d.ts +26 -27
- package/dist/source/contract.js +28 -29
- package/dist/source/factory.d.ts +94 -0
- package/dist/source/factory.js +268 -0
- package/dist/source/index.d.ts +10 -462
- package/dist/source/index.js +17 -421
- package/dist/source/migrations.d.ts +9 -9
- package/dist/source/migrations.js +9 -9
- package/dist/source/next.d.ts +10 -11
- package/dist/source/next.js +7 -8
- package/dist/source/pushQueue.d.ts +70 -48
- package/dist/source/pushQueue.js +36 -29
- package/dist/source/signing.d.ts +88 -0
- package/dist/source/signing.js +159 -0
- package/dist/source/types.d.ts +351 -0
- package/dist/source/types.js +43 -0
- package/dist/stores/ObjectStore.d.ts +11 -12
- package/dist/stores/ObjectStore.js +34 -35
- package/dist/stores/ObjectStoreContract.d.ts +12 -15
- package/dist/stores/SyncActionStore.d.ts +8 -12
- package/dist/stores/SyncActionStore.js +77 -46
- package/dist/surface.d.ts +28 -21
- package/dist/surface.js +28 -20
- package/dist/sync/{BootstrapHelper.d.ts → BootstrapFetcher.d.ts} +37 -45
- package/dist/sync/{BootstrapHelper.js → BootstrapFetcher.js} +101 -80
- package/dist/sync/ConnectionManager.d.ts +47 -50
- package/dist/sync/ConnectionManager.js +74 -70
- package/dist/sync/NetworkProbe.d.ts +27 -31
- package/dist/sync/NetworkProbe.js +67 -72
- package/dist/sync/{HydrationCoordinator.d.ts → OnDemandLoader.d.ts} +49 -36
- package/dist/sync/{HydrationCoordinator.js → OnDemandLoader.js} +79 -54
- package/dist/sync/{AreaOfInterestManager.d.ts → SubscriptionManager.d.ts} +45 -59
- package/dist/sync/{AreaOfInterestManager.js → SubscriptionManager.js} +44 -52
- package/dist/sync/SyncWebSocket.d.ts +175 -250
- package/dist/sync/SyncWebSocket.js +431 -769
- package/dist/sync/awaitClaimGrant.d.ts +18 -18
- package/dist/sync/awaitClaimGrant.js +38 -30
- package/dist/sync/bootstrapApply.d.ts +70 -0
- package/dist/sync/bootstrapApply.js +73 -0
- package/dist/sync/commitFrames.d.ts +44 -0
- package/dist/sync/commitFrames.js +94 -0
- package/dist/sync/createClaimStream.d.ts +23 -22
- package/dist/sync/createClaimStream.js +108 -25
- package/dist/sync/createPresenceStream.d.ts +19 -18
- package/dist/sync/createPresenceStream.js +25 -26
- package/dist/sync/createSnapshot.d.ts +13 -17
- package/dist/sync/createSnapshot.js +20 -26
- package/dist/sync/credentialLifecycle.d.ts +175 -0
- package/dist/sync/credentialLifecycle.js +322 -0
- package/dist/sync/deltaPipeline.d.ts +113 -0
- package/dist/sync/deltaPipeline.js +261 -0
- package/dist/sync/groupChange.d.ts +113 -0
- package/dist/sync/groupChange.js +242 -0
- package/dist/sync/heartbeat.d.ts +63 -0
- package/dist/sync/heartbeat.js +91 -0
- package/dist/sync/participants.d.ts +27 -27
- package/dist/sync/schemas.d.ts +3 -2
- package/dist/sync/schemas.js +14 -10
- package/dist/sync/syncCursor.d.ts +40 -0
- package/dist/sync/syncCursor.js +55 -0
- package/dist/sync/syncPlan.d.ts +54 -0
- package/dist/sync/syncPlan.js +50 -0
- package/dist/sync/syncPosition.d.ts +54 -49
- package/dist/sync/syncPosition.js +57 -52
- package/dist/sync/wsFrameHandlers.d.ts +116 -0
- package/dist/sync/wsFrameHandlers.js +374 -0
- package/dist/testing/fixtures/bootstrap.d.ts +21 -17
- package/dist/testing/fixtures/bootstrap.js +12 -6
- package/dist/testing/fixtures/deltas.d.ts +31 -34
- package/dist/testing/fixtures/deltas.js +30 -33
- package/dist/testing/fixtures/models.d.ts +11 -10
- package/dist/testing/fixtures/models.js +12 -10
- package/dist/testing/helpers/{react-wrapper.d.ts → reactWrapper.d.ts} +13 -10
- package/dist/testing/helpers/{react-wrapper.js → reactWrapper.js} +15 -12
- package/dist/testing/helpers/{sync-engine-harness.d.ts → syncEngineHarness.d.ts} +17 -18
- package/dist/testing/helpers/{sync-engine-harness.js → syncEngineHarness.js} +14 -11
- package/dist/testing/helpers/wait.d.ts +13 -8
- package/dist/testing/helpers/wait.js +13 -8
- package/dist/testing/index.d.ts +4 -4
- package/dist/testing/index.js +3 -3
- package/dist/testing/mocks/MockMutationExecutor.d.ts +18 -17
- package/dist/testing/mocks/MockMutationExecutor.js +15 -14
- package/dist/testing/mocks/MockNetworkMonitor.d.ts +8 -8
- package/dist/testing/mocks/MockNetworkMonitor.js +8 -8
- package/dist/testing/mocks/MockSyncContext.d.ts +21 -34
- package/dist/testing/mocks/MockSyncContext.js +16 -45
- package/dist/testing/mocks/MockSyncStore.d.ts +14 -14
- package/dist/testing/mocks/MockSyncStore.js +11 -11
- package/dist/testing/mocks/MockWebSocket.d.ts +28 -24
- package/dist/testing/mocks/MockWebSocket.js +22 -21
- package/dist/transactions/TransactionQueue.d.ts +190 -221
- package/dist/transactions/TransactionQueue.js +424 -822
- package/dist/transactions/TransactionStore.d.ts +20 -0
- package/dist/transactions/TransactionStore.js +53 -0
- package/dist/transactions/UnconfirmedWrites.d.ts +82 -0
- package/dist/transactions/UnconfirmedWrites.js +104 -0
- package/dist/transactions/coalesceRules.d.ts +58 -0
- package/dist/transactions/coalesceRules.js +140 -0
- package/dist/transactions/commitPayload.d.ts +130 -0
- package/dist/transactions/commitPayload.js +143 -0
- package/dist/transactions/deltaConfirmation.d.ts +58 -0
- package/dist/transactions/deltaConfirmation.js +215 -0
- package/dist/transactions/optimisticApply.d.ts +49 -0
- package/dist/transactions/optimisticApply.js +65 -0
- package/dist/transactions/replayValidation.d.ts +99 -0
- package/dist/transactions/replayValidation.js +111 -0
- package/dist/types/global.d.ts +46 -41
- package/dist/types/global.js +20 -19
- package/dist/types/index.d.ts +74 -80
- package/dist/types/index.js +22 -27
- package/dist/types/modelData.d.ts +10 -0
- package/dist/types/modelData.js +9 -0
- package/dist/types/participant.d.ts +20 -0
- package/dist/types/participant.js +10 -0
- package/dist/types/streams.d.ts +216 -209
- package/dist/types/streams.js +7 -7
- package/dist/utils/asyncIterator.d.ts +25 -32
- package/dist/utils/asyncIterator.js +25 -32
- package/dist/utils/duration.d.ts +12 -15
- package/dist/utils/duration.js +12 -15
- package/dist/utils/mobxSetup.d.ts +53 -0
- package/dist/utils/{mobx-setup.js → mobxSetup.js} +44 -100
- package/dist/webhooks/events.d.ts +21 -16
- package/dist/webhooks/events.js +10 -8
- package/dist/webhooks/index.d.ts +5 -7
- package/dist/webhooks/index.js +5 -7
- package/dist/{schema/sync-delta-wire.d.ts → wire/delta.d.ts} +58 -41
- package/dist/wire/delta.js +114 -0
- package/dist/wire/errorEnvelope.d.ts +35 -27
- package/dist/wire/errorEnvelope.js +38 -32
- package/dist/wire/frames.d.ts +150 -67
- package/dist/wire/frames.js +48 -1
- package/dist/wire/index.d.ts +18 -13
- package/dist/wire/index.js +36 -13
- package/dist/wire/listEnvelope.d.ts +16 -23
- package/dist/wire/listEnvelope.js +7 -6
- package/dist/wire/protocol.d.ts +38 -0
- package/dist/wire/protocol.js +38 -0
- package/dist/wire/protocolVersion.d.ts +60 -0
- package/dist/wire/protocolVersion.js +67 -0
- package/docs/api-keys.md +4 -3
- package/docs/coordination.md +59 -0
- package/docs/examples/existing-python-backend.md +3 -3
- package/docs/identity.md +4 -4
- package/docs/integration-guide.md +1 -1
- package/docs/react.md +1 -1
- package/docs/sessions.md +5 -7
- package/package.json +24 -21
- package/dist/ai-sdk/coordinated-tool.d.ts +0 -101
- package/dist/ai-sdk/coordination-context.d.ts +0 -52
- package/dist/client/index.d.ts +0 -36
- package/dist/client/index.js +0 -33
- package/dist/config/index.d.ts +0 -10
- package/dist/config/index.js +0 -12
- package/dist/core/query-utils.d.ts +0 -34
- package/dist/core/query-utils.js +0 -59
- package/dist/interfaces/headless.d.ts +0 -95
- package/dist/interfaces/headless.js +0 -41
- package/dist/query/index.d.ts +0 -6
- package/dist/query/index.js +0 -5
- package/dist/realtime/index.d.ts +0 -10
- package/dist/realtime/index.js +0 -9
- package/dist/schema/plane.d.ts +0 -23
- package/dist/schema/plane.js +0 -19
- package/dist/schema/sync-delta-row.js +0 -103
- package/dist/schema/sync-delta-wire.js +0 -102
- package/dist/server/next.d.ts +0 -51
- package/dist/server/next.js +0 -47
- package/dist/server/read-config.d.ts +0 -67
- package/dist/server/read-config.js +0 -8
- package/dist/server/storage-mode.d.ts +0 -1
- package/dist/server/storage-mode.js +0 -18
- package/dist/source/connector-protocol.d.ts +0 -159
- package/dist/source/connector-protocol.js +0 -161
- package/dist/sync/OfflineFlush.d.ts +0 -9
- package/dist/sync/OfflineFlush.js +0 -22
- package/dist/sync/OfflineTransactionStore.d.ts +0 -37
- package/dist/sync/OfflineTransactionStore.js +0 -263
- package/dist/transactions/OptimisticEchoTracker.d.ts +0 -82
- package/dist/transactions/OptimisticEchoTracker.js +0 -104
- package/dist/transactions/index.d.ts +0 -16
- package/dist/transactions/index.js +0 -7
- package/dist/transactions/mutation-error-handler.d.ts +0 -5
- package/dist/transactions/mutation-error-handler.js +0 -39
- package/dist/utils/mobx-setup.d.ts +0 -42
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
* All SDK classes receive this context at construction time.
|
|
5
5
|
* It bundles every injectable dependency so constructors stay clean.
|
|
6
6
|
*/
|
|
7
|
-
import type { SyncLogger, SyncObservabilityProvider, SyncAnalytics, SessionErrorDetector, OnlineStatusProvider, ModelDebugLoggerContract, MutationExecutor,
|
|
7
|
+
import type { SyncLogger, SyncObservabilityProvider, SyncAnalytics, SessionErrorDetector, OnlineStatusProvider, ModelDebugLoggerContract, MutationExecutor, SyncEngineConfig } from './interfaces/index.js';
|
|
8
8
|
export interface SyncEngineContext {
|
|
9
9
|
/** Structured logger */
|
|
10
10
|
logger: SyncLogger;
|
|
@@ -20,8 +20,6 @@ export interface SyncEngineContext {
|
|
|
20
20
|
modelDebugLogger?: ModelDebugLoggerContract;
|
|
21
21
|
/** Backend mutation transport (GraphQL, REST, etc.) */
|
|
22
22
|
mutationExecutor: MutationExecutor;
|
|
23
|
-
/** Offline mutation replay dispatcher */
|
|
24
|
-
mutationDispatcher: MutationDispatcher;
|
|
25
23
|
/** Application-specific sync configuration */
|
|
26
24
|
config: SyncEngineConfig;
|
|
27
25
|
}
|
|
@@ -26,7 +26,6 @@ export const noopObservability = {
|
|
|
26
26
|
captureReconciliation() { },
|
|
27
27
|
captureDeltaRetryExhausted() { },
|
|
28
28
|
captureWebSocketError() { },
|
|
29
|
-
captureOfflineFlushFailure() { },
|
|
30
29
|
captureSelfHealing() { },
|
|
31
30
|
captureClaim() { },
|
|
32
31
|
captureConflict() { },
|
|
@@ -57,7 +56,7 @@ export const browserOnlineStatus = {
|
|
|
57
56
|
export const defaultSessionErrorDetector = {
|
|
58
57
|
isSessionError(error) {
|
|
59
58
|
if (error && typeof error === 'object' && 'isSessionError' in error) {
|
|
60
|
-
return error.isSessionError
|
|
59
|
+
return error.isSessionError;
|
|
61
60
|
}
|
|
62
61
|
return false;
|
|
63
62
|
},
|
|
@@ -1,12 +1,10 @@
|
|
|
1
1
|
/**
|
|
2
|
-
*
|
|
3
|
-
*
|
|
4
|
-
*
|
|
5
|
-
* connection
|
|
6
|
-
*
|
|
7
|
-
*
|
|
8
|
-
*
|
|
9
|
-
* Implements OnlineStatusProvider (same interface as browserOnlineStatus).
|
|
2
|
+
* An {@link OnlineStatusProvider} that always reports the client as online.
|
|
3
|
+
* Server-side runtimes — Node processes, agents, and sidecars — have no
|
|
4
|
+
* browser network stack to lose, so there is no offline state to track. A
|
|
5
|
+
* dropped database connection surfaces as a database error, not a network
|
|
6
|
+
* transition. This is the server-side counterpart to the browser's
|
|
7
|
+
* connectivity-aware provider, which watches the real online/offline signal.
|
|
10
8
|
*/
|
|
11
9
|
import type { OnlineStatusProvider } from '../interfaces/index.js';
|
|
12
10
|
/**
|
|
@@ -1,12 +1,10 @@
|
|
|
1
1
|
/**
|
|
2
|
-
*
|
|
3
|
-
*
|
|
4
|
-
*
|
|
5
|
-
* connection
|
|
6
|
-
*
|
|
7
|
-
*
|
|
8
|
-
*
|
|
9
|
-
* Implements OnlineStatusProvider (same interface as browserOnlineStatus).
|
|
2
|
+
* An {@link OnlineStatusProvider} that always reports the client as online.
|
|
3
|
+
* Server-side runtimes — Node processes, agents, and sidecars — have no
|
|
4
|
+
* browser network stack to lose, so there is no offline state to track. A
|
|
5
|
+
* dropped database connection surfaces as a database error, not a network
|
|
6
|
+
* transition. This is the server-side counterpart to the browser's
|
|
7
|
+
* connectivity-aware provider, which watches the real online/offline signal.
|
|
10
8
|
*/
|
|
11
9
|
/**
|
|
12
10
|
* Returns an OnlineStatusProvider that always reports online.
|
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
/**
|
|
2
|
-
*
|
|
2
|
+
* An in-memory {@link ObjectStoreContract} implementation for runtimes
|
|
3
|
+
* without IndexedDB, such as Node processes, agents, and tests. It keeps
|
|
4
|
+
* records in a map and maintains simple secondary indexes, satisfying the
|
|
5
|
+
* same contract the IndexedDB-backed store implements — so if the two ever
|
|
6
|
+
* diverge, the mismatch becomes a typecheck error here rather than a silent
|
|
7
|
+
* failure at a call site.
|
|
3
8
|
*
|
|
4
|
-
*
|
|
5
|
-
*
|
|
6
|
-
*
|
|
7
|
-
* silently in a caller.
|
|
8
|
-
*
|
|
9
|
-
* No persistence — cleared on process restart. This is intentional:
|
|
10
|
-
* the Node sync-server and agent workers get their state from the
|
|
11
|
-
* server's delta stream, not from a local cache.
|
|
9
|
+
* Nothing is persisted; the data is cleared on process restart. That is
|
|
10
|
+
* deliberate: server-side runtimes and agent workers rebuild their state from
|
|
11
|
+
* the server's delta stream rather than from a local cache.
|
|
12
12
|
*/
|
|
13
13
|
import type { ObjectStoreContract } from '../stores/ObjectStoreContract.js';
|
|
14
14
|
export declare class InMemoryObjectStore implements ObjectStoreContract {
|
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
/**
|
|
2
|
-
*
|
|
2
|
+
* An in-memory {@link ObjectStoreContract} implementation for runtimes
|
|
3
|
+
* without IndexedDB, such as Node processes, agents, and tests. It keeps
|
|
4
|
+
* records in a map and maintains simple secondary indexes, satisfying the
|
|
5
|
+
* same contract the IndexedDB-backed store implements — so if the two ever
|
|
6
|
+
* diverge, the mismatch becomes a typecheck error here rather than a silent
|
|
7
|
+
* failure at a call site.
|
|
3
8
|
*
|
|
4
|
-
*
|
|
5
|
-
*
|
|
6
|
-
*
|
|
7
|
-
* silently in a caller.
|
|
8
|
-
*
|
|
9
|
-
* No persistence — cleared on process restart. This is intentional:
|
|
10
|
-
* the Node sync-server and agent workers get their state from the
|
|
11
|
-
* server's delta stream, not from a local cache.
|
|
9
|
+
* Nothing is persisted; the data is cleared on process restart. That is
|
|
10
|
+
* deliberate: server-side runtimes and agent workers rebuild their state from
|
|
11
|
+
* the server's delta stream rather than from a local cache.
|
|
12
12
|
*/
|
|
13
13
|
export class InMemoryObjectStore {
|
|
14
14
|
modelName;
|
package/dist/agent/Agent.d.ts
CHANGED
|
@@ -45,14 +45,11 @@ import { createAgentSession } from './session.js';
|
|
|
45
45
|
export type { AgentContext } from './types.js';
|
|
46
46
|
export type { WireClaim } from '../types/streams.js';
|
|
47
47
|
/**
|
|
48
|
-
*
|
|
49
|
-
*
|
|
50
|
-
*
|
|
51
|
-
*
|
|
52
|
-
*
|
|
53
|
-
* `gather()` returns this shape verbatim today; once the server
|
|
54
|
-
* adopts the engine names this interface deletes and the response is
|
|
55
|
-
* typed as the canonical `Peer`.
|
|
48
|
+
* The record shape the sync server returns from its REST `/api/presence`
|
|
49
|
+
* endpoint. This interface is internal to this module and not exported. Its
|
|
50
|
+
* field names (`userId`, `isAgent`, `updatedAt`) are the wire contract the
|
|
51
|
+
* presence API sends, and {@link Agent.gather} surfaces these records
|
|
52
|
+
* unchanged in the `presence` array of its snapshot.
|
|
56
53
|
*/
|
|
57
54
|
interface WirePeer {
|
|
58
55
|
userId: string;
|
|
@@ -125,11 +122,10 @@ export interface FreshnessCheck {
|
|
|
125
122
|
/** Human-readable summary — feed this back to the LLM when stale. */
|
|
126
123
|
summary?: string;
|
|
127
124
|
/**
|
|
128
|
-
* Pending-mutation claims from
|
|
129
|
-
* entity
|
|
130
|
-
* currently generating against
|
|
131
|
-
*
|
|
132
|
-
* that predates committed deltas.
|
|
125
|
+
* Pending-mutation claims from other participants targeting this
|
|
126
|
+
* entity, with the agent's own claims filtered out. An empty array
|
|
127
|
+
* means no one else is currently generating against the entity. A
|
|
128
|
+
* non-empty array is advisory: the agent can proceed, wait, or defer.
|
|
133
129
|
*/
|
|
134
130
|
pendingClaims?: WireClaim[];
|
|
135
131
|
}
|
|
@@ -141,14 +137,14 @@ export interface AgentMessage {
|
|
|
141
137
|
/** Subset of AI SDK's prepareStep context. */
|
|
142
138
|
export interface PrepareStepContext<M extends AgentMessage = AgentMessage> {
|
|
143
139
|
stepNumber: number;
|
|
144
|
-
steps:
|
|
145
|
-
toolCalls?:
|
|
140
|
+
steps: readonly {
|
|
141
|
+
toolCalls?: readonly {
|
|
146
142
|
toolName: string;
|
|
147
143
|
input?: unknown;
|
|
148
144
|
args?: unknown;
|
|
149
|
-
}
|
|
150
|
-
toolResults?:
|
|
151
|
-
}
|
|
145
|
+
}[];
|
|
146
|
+
toolResults?: readonly unknown[];
|
|
147
|
+
}[];
|
|
152
148
|
messages: M[];
|
|
153
149
|
model?: unknown;
|
|
154
150
|
}
|
|
@@ -164,12 +160,12 @@ export interface StepFinishContext {
|
|
|
164
160
|
stepType?: 'initial' | 'continue' | 'tool-result';
|
|
165
161
|
finishReason?: string;
|
|
166
162
|
text?: string;
|
|
167
|
-
toolCalls?:
|
|
163
|
+
toolCalls?: readonly {
|
|
168
164
|
toolName: string;
|
|
169
165
|
input?: unknown;
|
|
170
166
|
args?: unknown;
|
|
171
|
-
}
|
|
172
|
-
toolResults?:
|
|
167
|
+
}[];
|
|
168
|
+
toolResults?: readonly unknown[];
|
|
173
169
|
usage?: {
|
|
174
170
|
inputTokens?: number;
|
|
175
171
|
outputTokens?: number;
|
|
@@ -230,6 +226,19 @@ export interface WrapToolOptions<TArgs> {
|
|
|
230
226
|
*/
|
|
231
227
|
announceOnExecute?: boolean;
|
|
232
228
|
}
|
|
229
|
+
/**
|
|
230
|
+
* The console-backed logger an {@link Agent} uses when the caller does not
|
|
231
|
+
* supply one. It is the same gated factory the `Ablo()` client uses
|
|
232
|
+
* (`createConsoleLogger`), reads its threshold from the `ABLO_LOG_LEVEL`
|
|
233
|
+
* environment variable (default `warn`), and tags each line with `[agent]` so
|
|
234
|
+
* agent-runtime output is easy to spot. The level is resolved when the logger
|
|
235
|
+
* is built rather than at module load, so an `ABLO_LOG_LEVEL` that the host
|
|
236
|
+
* process sets before constructing an Agent is honored.
|
|
237
|
+
*
|
|
238
|
+
* Exported so a unit test can pin the gating behavior; consumers normally pass
|
|
239
|
+
* their own `logger` option instead.
|
|
240
|
+
*/
|
|
241
|
+
export declare function defaultAgentLogger(): SyncLogger;
|
|
233
242
|
export declare class Agent implements PresenceAnnouncer {
|
|
234
243
|
private readonly opts;
|
|
235
244
|
constructor(options: AgentOptions);
|
|
@@ -239,11 +248,10 @@ export declare class Agent implements PresenceAnnouncer {
|
|
|
239
248
|
* tokens before TTL elapses. Use on the server when the same agent
|
|
240
249
|
* identity handles many requests.
|
|
241
250
|
*
|
|
242
|
-
* Returns the cache
|
|
243
|
-
* uses `Ablo({kind:'agent'})` over WebSocket, while the `Agent` class
|
|
244
|
-
* itself is the short-lived REST helper for AI SDK tool loops. The
|
|
245
|
-
*
|
|
246
|
-
* agent-related under one namespace.
|
|
251
|
+
* Returns the cache rather than an `Agent` instance: the long-lived path
|
|
252
|
+
* uses `Ablo({kind:'agent'})` over a WebSocket, while the `Agent` class
|
|
253
|
+
* itself is the short-lived REST helper for AI SDK tool loops. The static
|
|
254
|
+
* method lives here so everything agent-related sits under one namespace.
|
|
247
255
|
*
|
|
248
256
|
* ```ts
|
|
249
257
|
* const session = Agent.session({ syncServerUrl, schema, issueToken });
|
|
@@ -255,8 +263,8 @@ export declare class Agent implements PresenceAnnouncer {
|
|
|
255
263
|
get userId(): string;
|
|
256
264
|
/**
|
|
257
265
|
* Extract the Agent instance from an AI SDK tool's
|
|
258
|
-
* `experimental_context`. Use inside tool `execute`
|
|
259
|
-
* the
|
|
266
|
+
* `experimental_context`. Use it inside a tool's `execute` function to
|
|
267
|
+
* reach the agent without capturing it in a closure.
|
|
260
268
|
*
|
|
261
269
|
* ```ts
|
|
262
270
|
* execute: async (args, { experimental_context }) => {
|
|
@@ -272,9 +280,9 @@ export declare class Agent implements PresenceAnnouncer {
|
|
|
272
280
|
*/
|
|
273
281
|
static fromContext(ctx: unknown, toolName?: string): Agent;
|
|
274
282
|
/**
|
|
275
|
-
*
|
|
276
|
-
* of throwing when
|
|
277
|
-
* awareness is optional
|
|
283
|
+
* A lenient variant of {@link fromContext} that returns `undefined` instead
|
|
284
|
+
* of throwing when no agent is present in the context. Useful for tools
|
|
285
|
+
* where awareness is optional, such as read-only tools that work without it.
|
|
278
286
|
*/
|
|
279
287
|
static tryFromContext(ctx: unknown): Agent | undefined;
|
|
280
288
|
/**
|
package/dist/agent/Agent.js
CHANGED
|
@@ -40,17 +40,30 @@
|
|
|
40
40
|
* for custom integrations outside the AI SDK.
|
|
41
41
|
*/
|
|
42
42
|
import { createAgentSession } from './session.js';
|
|
43
|
+
import { createConsoleLogger, resolveLogLevel } from '../client/consoleLogger.js';
|
|
43
44
|
import { AbloValidationError } from '../errors.js';
|
|
44
45
|
// ── Agent ───────────────────────────────────────────────────────
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
46
|
+
/**
|
|
47
|
+
* The console-backed logger an {@link Agent} uses when the caller does not
|
|
48
|
+
* supply one. It is the same gated factory the `Ablo()` client uses
|
|
49
|
+
* (`createConsoleLogger`), reads its threshold from the `ABLO_LOG_LEVEL`
|
|
50
|
+
* environment variable (default `warn`), and tags each line with `[agent]` so
|
|
51
|
+
* agent-runtime output is easy to spot. The level is resolved when the logger
|
|
52
|
+
* is built rather than at module load, so an `ABLO_LOG_LEVEL` that the host
|
|
53
|
+
* process sets before constructing an Agent is honored.
|
|
54
|
+
*
|
|
55
|
+
* Exported so a unit test can pin the gating behavior; consumers normally pass
|
|
56
|
+
* their own `logger` option instead.
|
|
57
|
+
*/
|
|
58
|
+
export function defaultAgentLogger() {
|
|
59
|
+
const gated = createConsoleLogger(resolveLogLevel());
|
|
60
|
+
return {
|
|
61
|
+
debug: (msg, ...args) => { gated.debug('[agent]', msg, ...args); },
|
|
62
|
+
info: (msg, ...args) => { gated.info('[agent]', msg, ...args); },
|
|
63
|
+
warn: (msg, ...args) => { gated.warn('[agent]', msg, ...args); },
|
|
64
|
+
error: (msg, ...args) => { gated.error('[agent]', msg, ...args); },
|
|
65
|
+
};
|
|
66
|
+
}
|
|
54
67
|
export class Agent {
|
|
55
68
|
opts;
|
|
56
69
|
constructor(options) {
|
|
@@ -63,7 +76,7 @@ export class Agent {
|
|
|
63
76
|
syncGroups: options.syncGroups,
|
|
64
77
|
fetch: options.fetch ?? globalThis.fetch.bind(globalThis),
|
|
65
78
|
timeoutMs: options.timeoutMs ?? 5_000,
|
|
66
|
-
logger: options.logger ??
|
|
79
|
+
logger: options.logger ?? defaultAgentLogger(),
|
|
67
80
|
};
|
|
68
81
|
}
|
|
69
82
|
/**
|
|
@@ -72,11 +85,10 @@ export class Agent {
|
|
|
72
85
|
* tokens before TTL elapses. Use on the server when the same agent
|
|
73
86
|
* identity handles many requests.
|
|
74
87
|
*
|
|
75
|
-
* Returns the cache
|
|
76
|
-
* uses `Ablo({kind:'agent'})` over WebSocket, while the `Agent` class
|
|
77
|
-
* itself is the short-lived REST helper for AI SDK tool loops. The
|
|
78
|
-
*
|
|
79
|
-
* agent-related under one namespace.
|
|
88
|
+
* Returns the cache rather than an `Agent` instance: the long-lived path
|
|
89
|
+
* uses `Ablo({kind:'agent'})` over a WebSocket, while the `Agent` class
|
|
90
|
+
* itself is the short-lived REST helper for AI SDK tool loops. The static
|
|
91
|
+
* method lives here so everything agent-related sits under one namespace.
|
|
80
92
|
*
|
|
81
93
|
* ```ts
|
|
82
94
|
* const session = Agent.session({ syncServerUrl, schema, issueToken });
|
|
@@ -90,8 +102,8 @@ export class Agent {
|
|
|
90
102
|
}
|
|
91
103
|
/**
|
|
92
104
|
* Extract the Agent instance from an AI SDK tool's
|
|
93
|
-
* `experimental_context`. Use inside tool `execute`
|
|
94
|
-
* the
|
|
105
|
+
* `experimental_context`. Use it inside a tool's `execute` function to
|
|
106
|
+
* reach the agent without capturing it in a closure.
|
|
95
107
|
*
|
|
96
108
|
* ```ts
|
|
97
109
|
* execute: async (args, { experimental_context }) => {
|
|
@@ -117,9 +129,9 @@ export class Agent {
|
|
|
117
129
|
return ctx.perception;
|
|
118
130
|
}
|
|
119
131
|
/**
|
|
120
|
-
*
|
|
121
|
-
* of throwing when
|
|
122
|
-
* awareness is optional
|
|
132
|
+
* A lenient variant of {@link fromContext} that returns `undefined` instead
|
|
133
|
+
* of throwing when no agent is present in the context. Useful for tools
|
|
134
|
+
* where awareness is optional, such as read-only tools that work without it.
|
|
123
135
|
*/
|
|
124
136
|
static tryFromContext(ctx) {
|
|
125
137
|
if (!ctx ||
|
|
@@ -222,9 +234,10 @@ export class Agent {
|
|
|
222
234
|
pendingClaims,
|
|
223
235
|
};
|
|
224
236
|
}
|
|
225
|
-
const body = (await res.json());
|
|
237
|
+
const body = (await (res).json());
|
|
226
238
|
const rows = body.results?.[0];
|
|
227
|
-
|
|
239
|
+
const entity = rows?.[0];
|
|
240
|
+
if (!entity) {
|
|
228
241
|
return {
|
|
229
242
|
stale: true,
|
|
230
243
|
reason: 'not_found',
|
|
@@ -232,7 +245,6 @@ export class Agent {
|
|
|
232
245
|
pendingClaims,
|
|
233
246
|
};
|
|
234
247
|
}
|
|
235
|
-
const entity = rows[0];
|
|
236
248
|
const updatedAtRaw = entity.updated_at ?? entity.updatedAt;
|
|
237
249
|
const lastModifiedBy = entity.updated_by ??
|
|
238
250
|
entity.updatedBy ??
|
package/dist/agent/index.d.ts
CHANGED
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
* Two entry points depending on agent lifetime:
|
|
5
5
|
*
|
|
6
6
|
* ─────────────────────────────────────────────────────────────────────────
|
|
7
|
-
*
|
|
7
|
+
* Long-lived agents (browser, daemon, persistent Node process)
|
|
8
8
|
* ─────────────────────────────────────────────────────────────────────────
|
|
9
9
|
* Use the unified `Ablo({...})` factory directly with `kind: 'agent'`.
|
|
10
10
|
* The factory holds the WebSocket, reactive subscriptions, mutations, and
|
|
@@ -36,7 +36,7 @@
|
|
|
36
36
|
* before expiry.
|
|
37
37
|
*
|
|
38
38
|
* ─────────────────────────────────────────────────────────────────────────
|
|
39
|
-
*
|
|
39
|
+
* Short-lived agents (queue consumer, serverless, API route)
|
|
40
40
|
* ─────────────────────────────────────────────────────────────────────────
|
|
41
41
|
* Use {@link Agent}. Stateless REST hooks that slot directly into
|
|
42
42
|
* the Vercel AI SDK's `generateText` / `streamText`. No WebSocket. Ideal
|
|
@@ -69,7 +69,7 @@
|
|
|
69
69
|
* ```
|
|
70
70
|
*
|
|
71
71
|
* ─────────────────────────────────────────────────────────────────────────
|
|
72
|
-
*
|
|
72
|
+
* Idiomatic tool pattern
|
|
73
73
|
* ─────────────────────────────────────────────────────────────────────────
|
|
74
74
|
* Tools are factory functions that pull ambient state from
|
|
75
75
|
* `experimental_context`. The caller builds an {@link AgentContext} once
|
|
@@ -93,7 +93,7 @@
|
|
|
93
93
|
* ```
|
|
94
94
|
*
|
|
95
95
|
* ─────────────────────────────────────────────────────────────────────────
|
|
96
|
-
*
|
|
96
|
+
* Composed usage (a long-lived `Ablo({kind:'agent'})` plus an Agent)
|
|
97
97
|
* ─────────────────────────────────────────────────────────────────────────
|
|
98
98
|
* If you have a long-lived `Ablo` instance AND want AI SDK hooks, pass it
|
|
99
99
|
* as the `announcer` to Agent — presence announcements route
|
package/dist/agent/index.js
CHANGED
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
* Two entry points depending on agent lifetime:
|
|
5
5
|
*
|
|
6
6
|
* ─────────────────────────────────────────────────────────────────────────
|
|
7
|
-
*
|
|
7
|
+
* Long-lived agents (browser, daemon, persistent Node process)
|
|
8
8
|
* ─────────────────────────────────────────────────────────────────────────
|
|
9
9
|
* Use the unified `Ablo({...})` factory directly with `kind: 'agent'`.
|
|
10
10
|
* The factory holds the WebSocket, reactive subscriptions, mutations, and
|
|
@@ -36,7 +36,7 @@
|
|
|
36
36
|
* before expiry.
|
|
37
37
|
*
|
|
38
38
|
* ─────────────────────────────────────────────────────────────────────────
|
|
39
|
-
*
|
|
39
|
+
* Short-lived agents (queue consumer, serverless, API route)
|
|
40
40
|
* ─────────────────────────────────────────────────────────────────────────
|
|
41
41
|
* Use {@link Agent}. Stateless REST hooks that slot directly into
|
|
42
42
|
* the Vercel AI SDK's `generateText` / `streamText`. No WebSocket. Ideal
|
|
@@ -69,7 +69,7 @@
|
|
|
69
69
|
* ```
|
|
70
70
|
*
|
|
71
71
|
* ─────────────────────────────────────────────────────────────────────────
|
|
72
|
-
*
|
|
72
|
+
* Idiomatic tool pattern
|
|
73
73
|
* ─────────────────────────────────────────────────────────────────────────
|
|
74
74
|
* Tools are factory functions that pull ambient state from
|
|
75
75
|
* `experimental_context`. The caller builds an {@link AgentContext} once
|
|
@@ -93,7 +93,7 @@
|
|
|
93
93
|
* ```
|
|
94
94
|
*
|
|
95
95
|
* ─────────────────────────────────────────────────────────────────────────
|
|
96
|
-
*
|
|
96
|
+
* Composed usage (a long-lived `Ablo({kind:'agent'})` plus an Agent)
|
|
97
97
|
* ─────────────────────────────────────────────────────────────────────────
|
|
98
98
|
* If you have a long-lived `Ablo` instance AND want AI SDK hooks, pass it
|
|
99
99
|
* as the `announcer` to Agent — presence announcements route
|
|
@@ -114,7 +114,7 @@
|
|
|
114
114
|
*/
|
|
115
115
|
// ── The entire `/agent` surface — one symbol ────────────────────────────
|
|
116
116
|
//
|
|
117
|
-
// `Agent` is the class
|
|
117
|
+
// `Agent` is both the class and the namespace for its types. Reach for
|
|
118
118
|
// options, context, and session options via dot access:
|
|
119
119
|
//
|
|
120
120
|
// import { Agent } from '@abloatai/ablo/agent';
|
package/dist/agent/session.d.ts
CHANGED
|
@@ -1,23 +1,21 @@
|
|
|
1
1
|
/**
|
|
2
|
-
*
|
|
2
|
+
* Caches and manages the lifecycle of long-lived agent connections on a server.
|
|
3
3
|
*
|
|
4
|
-
*
|
|
5
|
-
*
|
|
6
|
-
*
|
|
7
|
-
*
|
|
8
|
-
*
|
|
9
|
-
*
|
|
10
|
-
*
|
|
4
|
+
* Server code that runs AI agents typically needs the same four things, and this
|
|
5
|
+
* module handles all of them:
|
|
6
|
+
* 1. Reuse one connected agent per (organization, user, surface, target)
|
|
7
|
+
* instead of connecting anew on every request.
|
|
8
|
+
* 2. Re-issue the agent's capability token before it expires.
|
|
9
|
+
* 3. Request exactly the sync groups the token allows, so the two lists
|
|
10
|
+
* overlap. If they don't, the agent subscribes to nothing and every
|
|
11
|
+
* broadcast is silently filtered out.
|
|
12
|
+
* 4. Connect, disconnect, and dispose cleanly.
|
|
11
13
|
*
|
|
12
|
-
*
|
|
13
|
-
*
|
|
14
|
-
*
|
|
15
|
-
*
|
|
16
|
-
*
|
|
17
|
-
* exchange, OAuth, etc.). Consumer provides via the
|
|
18
|
-
* `issueToken` callback.
|
|
19
|
-
*
|
|
20
|
-
* The helper itself imports nothing app-specific. Open-source-clean.
|
|
14
|
+
* Everything except obtaining the token is the same for every caller and lives
|
|
15
|
+
* here. Obtaining the token depends on how you authenticate — cookie forwarding,
|
|
16
|
+
* API-key exchange, OAuth, and so on — so you supply that step through the
|
|
17
|
+
* {@link AgentSessionOptions.issueToken} callback. The module itself depends on
|
|
18
|
+
* nothing outside this package.
|
|
21
19
|
*/
|
|
22
20
|
import { Ablo } from '../client/Ablo.js';
|
|
23
21
|
import type { Schema, SchemaRecord } from '../schema/schema.js';
|
|
@@ -25,11 +23,11 @@ interface IssuedToken {
|
|
|
25
23
|
readonly token: string;
|
|
26
24
|
readonly expiresAtMs: number;
|
|
27
25
|
/**
|
|
28
|
-
*
|
|
29
|
-
*
|
|
30
|
-
*
|
|
31
|
-
* a
|
|
32
|
-
*
|
|
26
|
+
* The sync groups this token grants access to. It must include every group the
|
|
27
|
+
* agent needs to subscribe to. The agent's effective subscription is the
|
|
28
|
+
* overlap between the groups it requests and the groups listed here, so a list
|
|
29
|
+
* that omits a needed group leaves the agent subscribed to nothing and silently
|
|
30
|
+
* receiving no broadcasts.
|
|
33
31
|
*/
|
|
34
32
|
readonly syncGroups: readonly string[];
|
|
35
33
|
}
|
|
@@ -37,8 +35,9 @@ interface AgentIdentity {
|
|
|
37
35
|
readonly userId: string;
|
|
38
36
|
readonly organizationId: string;
|
|
39
37
|
/**
|
|
40
|
-
*
|
|
41
|
-
*
|
|
38
|
+
* The kind of surface making the request, such as `'chat'`, `'mcp'`, or
|
|
39
|
+
* `'agent_worker'`. The cache keys on this value, so two surfaces never share a
|
|
40
|
+
* token or a WebSocket connection.
|
|
42
41
|
*/
|
|
43
42
|
readonly surfaceClass: string;
|
|
44
43
|
readonly target?: {
|
|
@@ -47,40 +46,44 @@ interface AgentIdentity {
|
|
|
47
46
|
} | null;
|
|
48
47
|
}
|
|
49
48
|
export interface AgentSessionOptions<R extends SchemaRecord = SchemaRecord> {
|
|
50
|
-
/**
|
|
49
|
+
/** WebSocket URL of your sync server, such as `wss://sync.example.com` or `ws://localhost:3001`. */
|
|
51
50
|
readonly syncServerUrl: string;
|
|
52
|
-
/**
|
|
53
|
-
*
|
|
54
|
-
*
|
|
55
|
-
|
|
51
|
+
/**
|
|
52
|
+
* Your schema, used to build the typed model proxy on the returned client. The
|
|
53
|
+
* agent client exposes it as `agent.<model>.create/update/delete`.
|
|
54
|
+
*/
|
|
56
55
|
readonly schema: Schema<R>;
|
|
57
56
|
/**
|
|
58
|
-
*
|
|
59
|
-
*
|
|
60
|
-
*
|
|
57
|
+
* Issues a capability token for the given identity. The session calls it on a
|
|
58
|
+
* cache miss or when the current token is near expiry. Because this callback
|
|
59
|
+
* carries out your authentication flow — cookie forwarding, API-key exchange,
|
|
60
|
+
* OAuth, and so on — the rest of the session stays independent of how you
|
|
61
|
+
* authenticate.
|
|
61
62
|
*/
|
|
62
63
|
readonly issueToken: (identity: AgentIdentity) => Promise<IssuedToken>;
|
|
63
64
|
/**
|
|
64
|
-
*
|
|
65
|
-
*
|
|
65
|
+
* How long before a token's true expiry the session should re-issue it, in
|
|
66
|
+
* milliseconds. Defaults to 30 seconds. The buffer absorbs clock skew so a
|
|
67
|
+
* token never expires mid-use.
|
|
66
68
|
*/
|
|
67
69
|
readonly reissueBufferMs?: number;
|
|
68
70
|
/**
|
|
69
|
-
*
|
|
70
|
-
* Override when
|
|
71
|
+
* How to derive the agent's identifier from the request identity. Defaults to
|
|
72
|
+
* `${surfaceClass}:${userId}`. Override it when you want a different shape for
|
|
73
|
+
* attribution.
|
|
71
74
|
*/
|
|
72
75
|
readonly agentIdFor?: (identity: AgentIdentity) => string;
|
|
73
76
|
}
|
|
74
77
|
/**
|
|
75
|
-
*
|
|
76
|
-
*
|
|
77
|
-
*
|
|
78
|
+
* Creates a session that hands out connected agents on demand. Its `getAgent`
|
|
79
|
+
* method handles caching, token issuance, sync-group alignment, and connection
|
|
80
|
+
* lifecycle; call `disposeAll` from your process's shutdown hook to close every
|
|
81
|
+
* open connection.
|
|
78
82
|
*
|
|
79
|
-
*
|
|
80
|
-
*
|
|
81
|
-
*
|
|
82
|
-
*
|
|
83
|
-
* independent agents.
|
|
83
|
+
* Treat the session as a long-lived singleton shared across requests. The cache
|
|
84
|
+
* key combines organization, user, surface, and target, so two concurrent
|
|
85
|
+
* requests for the same combination share one agent and one WebSocket, while
|
|
86
|
+
* requests for different combinations get independent agents.
|
|
84
87
|
*/
|
|
85
88
|
export declare function createAgentSession<R extends SchemaRecord = SchemaRecord>(options: AgentSessionOptions<R>): {
|
|
86
89
|
getAgent: (identity: AgentIdentity) => Promise<Ablo<R>>;
|