@abloatai/ablo 0.34.0 → 0.35.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 +4 -1
- package/CHANGELOG.md +684 -5
- package/README.md +39 -22
- package/dist/BaseSyncedStore.d.ts +152 -44
- package/dist/BaseSyncedStore.js +300 -184
- package/dist/Database.d.ts +9 -24
- package/dist/Database.js +37 -22
- package/dist/InstanceCache.d.ts +25 -4
- package/dist/InstanceCache.js +48 -15
- package/dist/LazyReferenceCollection.d.ts +3 -3
- package/dist/LazyReferenceCollection.js +4 -4
- package/dist/Model.d.ts +6 -6
- package/dist/Model.js +10 -10
- package/dist/ModelRegistry.d.ts +4 -4
- package/dist/ModelRegistry.js +3 -3
- package/dist/{SyncEngineContext.d.ts → RuntimeContext.d.ts} +20 -13
- package/dist/{SyncEngineContext.js → RuntimeContext.js} +11 -12
- package/dist/SyncClient.d.ts +42 -32
- package/dist/SyncClient.js +166 -110
- package/dist/ai-sdk/coordinatedTool.d.ts +2 -2
- package/dist/ai-sdk/coordinatedTool.js +1 -1
- package/dist/ai-sdk/coordinationContext.d.ts +2 -2
- package/dist/ai-sdk/coordinationContext.js +1 -1
- package/dist/ai-sdk/wrap.d.ts +3 -3
- package/dist/ai-sdk/wrap.js +2 -2
- package/dist/auth/index.d.ts +1 -156
- package/dist/auth/index.js +8 -301
- package/dist/cli.cjs +3459 -1126
- package/dist/client/Ablo.d.ts +42 -287
- package/dist/client/Ablo.js +118 -963
- package/dist/client/abloClient.d.ts +309 -0
- package/dist/client/abloClient.js +13 -0
- package/dist/client/clientPrelude.d.ts +52 -0
- package/dist/client/clientPrelude.js +60 -0
- package/dist/client/consoleLogger.d.ts +2 -2
- package/dist/client/coreClient.d.ts +60 -0
- package/dist/client/coreClient.js +118 -0
- package/dist/client/createInternalComponents.d.ts +4 -4
- package/dist/client/createInternalComponents.js +9 -8
- package/dist/client/createModelProxy.d.ts +78 -373
- package/dist/client/createModelProxy.js +114 -86
- package/dist/client/humans.d.ts +48 -0
- package/dist/client/humans.js +52 -0
- package/dist/client/modelRegistration.d.ts +1 -1
- package/dist/client/modelRegistration.js +9 -9
- package/dist/client/options.d.ts +73 -17
- package/dist/client/reactiveEngine.d.ts +48 -0
- package/dist/client/reactiveEngine.js +910 -0
- package/dist/client/resourceTypes.d.ts +9 -250
- package/dist/client/resourceTypes.js +8 -5
- package/dist/client/schemaConfig.d.ts +4 -4
- package/dist/client/schemaConfig.js +6 -2
- package/dist/client/validateAbloOptions.d.ts +3 -2
- package/dist/client/validateAbloOptions.js +1 -1
- package/dist/client/wsMutationExecutor.d.ts +3 -3
- package/dist/client/wsMutationExecutor.js +3 -3
- package/dist/context.d.ts +9 -9
- package/dist/context.js +10 -9
- package/dist/coordination/ClaimLog.d.ts +26 -0
- package/dist/coordination/ClaimLog.js +32 -0
- package/dist/coordination/index.d.ts +1 -15
- package/dist/coordination/index.js +8 -31
- package/dist/core/DatabaseManager.js +1 -1
- package/dist/core/QueryView.d.ts +1 -1
- package/dist/core/QueryView.js +1 -1
- package/dist/core/StoreManager.d.ts +4 -23
- package/dist/core/StoreManager.js +5 -55
- package/dist/core/index.d.ts +2 -2
- package/dist/core/index.js +2 -2
- package/dist/core/storeContract.d.ts +2 -2
- package/dist/docs/catalog.d.ts +72 -0
- package/dist/docs/catalog.js +227 -0
- package/dist/docs/index.d.ts +10 -0
- package/dist/docs/index.js +10 -0
- package/dist/environment.d.ts +1 -40
- package/dist/environment.js +8 -37
- package/dist/index.d.ts +40 -34
- package/dist/index.js +26 -20
- package/dist/interfaces/index.d.ts +44 -134
- package/dist/keys/index.d.ts +1 -77
- package/dist/keys/index.js +8 -190
- package/dist/mutators/{RecordingTransaction.d.ts → RecordingMutation.d.ts} +4 -4
- package/dist/mutators/{RecordingTransaction.js → RecordingMutation.js} +2 -2
- package/dist/mutators/Transaction.d.ts +1 -1
- package/dist/mutators/Transaction.js +1 -1
- package/dist/mutators/UndoManager.d.ts +6 -6
- package/dist/mutators/UndoManager.js +5 -5
- package/dist/mutators/defineMutators.d.ts +3 -3
- package/dist/mutators/defineMutators.js +1 -1
- package/dist/mutators/inverseOp.js +2 -2
- package/dist/mutators/mutateActions.d.ts +3 -3
- package/dist/mutators/mutateActions.js +1 -1
- package/dist/mutators/readerActions.d.ts +1 -1
- package/dist/mutators/undoApply.d.ts +1 -1
- package/dist/mutators/undoApply.js +1 -1
- package/dist/policy/index.d.ts +2 -2
- package/dist/policy/index.js +1 -1
- package/dist/query/client.d.ts +2 -2
- package/dist/query/client.js +4 -4
- package/dist/query/types.d.ts +6 -41
- package/dist/query/types.js +2 -2
- package/dist/react/AbloProvider.d.ts +6 -8
- package/dist/react/AbloProvider.js +5 -7
- package/dist/react/context.d.ts +1 -1
- package/dist/react/context.js +1 -1
- package/dist/react/index.d.ts +5 -5
- package/dist/react/index.js +3 -3
- package/dist/react/internalContext.d.ts +1 -1
- package/dist/react/useAblo.d.ts +3 -3
- package/dist/react/useAblo.js +1 -1
- package/dist/react/useCurrentUserId.js +1 -1
- package/dist/react/useErrorListener.js +1 -1
- package/dist/react/useMutationFailureListener.d.ts +2 -2
- package/dist/react/useMutationFailureListener.js +1 -1
- package/dist/react/useMutators.d.ts +3 -3
- package/dist/react/useMutators.js +3 -3
- package/dist/react/useUndoScope.d.ts +5 -5
- package/dist/react/useUndoScope.js +1 -1
- package/dist/schema/coordination.d.ts +69 -10
- package/dist/schema/coordination.js +86 -9
- package/dist/schema/ddl.js +2 -2
- package/dist/schema/diff.d.ts +1 -1
- package/dist/schema/generate.js +1 -1
- package/dist/schema/index.d.ts +10 -10
- package/dist/schema/index.js +18 -18
- package/dist/schema/queries.d.ts +27 -27
- package/dist/schema/queries.js +23 -23
- package/dist/schema/select.d.ts +3 -3
- package/dist/schema/select.js +3 -3
- package/dist/schema/serialize.d.ts +15 -6
- package/dist/schema/serialize.js +17 -3
- package/dist/schema/sugar.d.ts +6 -7
- package/dist/schema/sugar.js +9 -12
- package/dist/schema/syncDeltaRow.d.ts +4 -152
- package/dist/schema/syncDeltaRow.js +4 -105
- package/dist/server/adapter.d.ts +18 -1
- package/dist/server/commit.d.ts +10 -16
- package/dist/server/index.d.ts +1 -1
- package/dist/server/index.js +1 -1
- package/dist/server/readConfig.d.ts +1 -1
- package/dist/source/adapters/drizzle.d.ts +1 -1
- package/dist/source/adapters/drizzle.js +2 -2
- package/dist/source/adapters/kysely.d.ts +1 -1
- package/dist/source/adapters/kysely.js +1 -1
- package/dist/source/adapters/kyselyMutationCore.d.ts +1 -1
- package/dist/source/adapters/kyselyMutationCore.js +2 -2
- package/dist/source/adapters/memory.js +1 -1
- package/dist/source/adapters/prisma.d.ts +8 -3
- package/dist/source/adapters/prisma.js +1 -1
- package/dist/source/connector.js +1 -1
- package/dist/source/connectorProtocol.d.ts +2 -8
- package/dist/source/connectorProtocol.js +3 -2
- package/dist/source/contract.d.ts +29 -17
- package/dist/source/contract.js +27 -22
- package/dist/source/factory.d.ts +1 -1
- package/dist/source/footprint.d.ts +111 -0
- package/dist/source/footprint.js +0 -0
- package/dist/source/idempotency.js +2 -2
- package/dist/source/index.d.ts +1 -0
- package/dist/source/index.js +3 -0
- package/dist/source/next.d.ts +1 -1
- package/dist/source/signing.d.ts +9 -2
- package/dist/source/signing.js +4 -1
- package/dist/source/types.d.ts +6 -4
- package/dist/source/types.js +1 -1
- package/dist/stores/ObjectStore.d.ts +1 -1
- package/dist/stores/SyncActionStore.d.ts +1 -1
- package/dist/stores/SyncActionStore.js +2 -10
- package/dist/stores/syncAction.d.ts +26 -0
- package/dist/stores/syncAction.js +16 -0
- package/dist/surface.d.ts +3 -3
- package/dist/surface.js +6 -4
- package/dist/sync/BootstrapFetcher.d.ts +123 -6
- package/dist/sync/BootstrapFetcher.js +492 -66
- package/dist/sync/ConnectionManager.d.ts +6 -198
- package/dist/sync/ConnectionManager.js +6 -677
- package/dist/sync/OnDemandLoader.d.ts +2 -2
- package/dist/sync/OnDemandLoader.js +60 -21
- package/dist/sync/SubscriptionManager.d.ts +13 -2
- package/dist/sync/SubscriptionManager.js +23 -5
- package/dist/sync/SyncWebSocket.d.ts +27 -510
- package/dist/sync/SyncWebSocket.js +76 -954
- package/dist/sync/awaitClaimGrant.d.ts +4 -44
- package/dist/sync/awaitClaimGrant.js +4 -109
- package/dist/sync/commitFrames.d.ts +6 -40
- package/dist/sync/commitFrames.js +6 -97
- package/dist/sync/contextPorts.d.ts +18 -0
- package/dist/sync/contextPorts.js +31 -0
- package/dist/sync/createClaimStream.d.ts +5 -49
- package/dist/sync/createClaimStream.js +5 -469
- package/dist/sync/createPresenceStream.d.ts +26 -4
- package/dist/sync/createPresenceStream.js +28 -20
- package/dist/sync/createSnapshot.d.ts +2 -2
- package/dist/sync/createSnapshot.js +1 -1
- package/dist/sync/credentialLifecycle.d.ts +5 -173
- package/dist/sync/credentialLifecycle.js +5 -320
- package/dist/sync/deltaPipeline.d.ts +1 -1
- package/dist/sync/participants.d.ts +5 -4
- package/dist/sync/participants.js +29 -22
- package/dist/sync/schemaDrift.d.ts +55 -0
- package/dist/sync/schemaDrift.js +53 -0
- package/dist/sync/schemas.d.ts +21 -32
- package/dist/sync/schemas.js +26 -17
- package/dist/sync/syncPlan.d.ts +3 -3
- package/dist/sync/wsFrameHandlers.d.ts +6 -114
- package/dist/sync/wsFrameHandlers.js +6 -392
- package/dist/testing/fixtures/bootstrap.d.ts +1 -1
- package/dist/testing/fixtures/deltas.d.ts +1 -1
- package/dist/testing/fixtures/httpResponses.d.ts +70 -0
- package/dist/testing/fixtures/httpResponses.js +90 -0
- package/dist/testing/fixtures/models.js +1 -1
- package/dist/testing/helpers/wait.js +1 -1
- package/dist/testing/mocks/MockMutationExecutor.d.ts +2 -2
- package/dist/testing/mocks/MockMutationExecutor.js +8 -14
- package/dist/testing/mocks/MockSyncContext.d.ts +11 -11
- package/dist/testing/mocks/MockSyncContext.js +10 -9
- package/dist/testing/mocks/MockSyncStore.js +1 -1
- package/dist/testing/mocks/MockWebSocket.d.ts +2 -2
- package/dist/transaction/ablo.d.ts +88 -0
- package/dist/transaction/ablo.js +33 -0
- package/dist/{client/auth.d.ts → transaction/auth/apiKey.d.ts} +43 -8
- package/dist/{client/auth.js → transaction/auth/apiKey.js} +19 -0
- package/dist/transaction/auth/bootstrapScope.d.ts +15 -0
- package/dist/transaction/auth/bootstrapScope.js +1 -0
- package/dist/transaction/auth/capability.d.ts +177 -0
- package/dist/transaction/auth/capability.js +199 -0
- package/dist/{auth → transaction/auth}/credentialSource.d.ts +8 -1
- package/dist/{client → transaction/auth}/identity.d.ts +8 -7
- package/dist/{client → transaction/auth}/identity.js +1 -1
- package/dist/transaction/auth/index.d.ts +162 -0
- package/dist/transaction/auth/index.js +304 -0
- package/dist/{auth → transaction/auth}/schemas.d.ts +1 -1
- package/dist/{auth → transaction/auth}/schemas.js +13 -13
- package/dist/{client → transaction/auth}/sessionMint.d.ts +8 -8
- package/dist/{client → transaction/auth}/sessionMint.js +4 -7
- package/dist/transaction/coordination/awaitClaimGrant.d.ts +49 -0
- package/dist/transaction/coordination/awaitClaimGrant.js +112 -0
- package/dist/transaction/coordination/claimMeta.d.ts +49 -0
- package/dist/transaction/coordination/claimMeta.js +52 -0
- package/dist/transaction/coordination/createClaimStream.d.ts +64 -0
- package/dist/transaction/coordination/createClaimStream.js +475 -0
- package/dist/transaction/coordination/events.d.ts +74 -0
- package/dist/transaction/coordination/events.js +7 -0
- package/dist/transaction/coordination/index.d.ts +19 -0
- package/dist/transaction/coordination/index.js +44 -0
- package/dist/transaction/coordination/locator.d.ts +83 -0
- package/dist/transaction/coordination/locator.js +82 -0
- package/dist/transaction/coordination/schema.d.ts +1473 -0
- package/dist/{coordination → transaction/coordination}/schema.js +490 -55
- package/dist/transaction/coordination/targetConflict.d.ts +2 -0
- package/dist/transaction/coordination/targetConflict.js +103 -0
- package/dist/{coordination → transaction/coordination}/trace.d.ts +7 -18
- package/dist/{coordination → transaction/coordination}/trace.js +18 -25
- package/dist/transaction/durableWrites.d.ts +62 -0
- package/dist/{client → transaction}/durableWrites.js +28 -3
- package/dist/transaction/environment.d.ts +105 -0
- package/dist/transaction/environment.js +108 -0
- package/dist/{errorCodes.d.ts → transaction/errorCodes.d.ts} +11 -11
- package/dist/{errorCodes.js → transaction/errorCodes.js} +35 -12
- package/dist/{errors.d.ts → transaction/errors.d.ts} +37 -13
- package/dist/{errors.js → transaction/errors.js} +85 -16
- package/dist/transaction/index.d.ts +20 -0
- package/dist/transaction/index.js +20 -0
- package/dist/transaction/keys/index.d.ts +87 -0
- package/dist/transaction/keys/index.js +207 -0
- package/dist/transaction/log/syncDeltaRow.d.ts +158 -0
- package/dist/transaction/log/syncDeltaRow.js +95 -0
- package/dist/{sync/syncPosition.d.ts → transaction/logPosition.d.ts} +22 -8
- package/dist/{sync/syncPosition.js → transaction/logPosition.js} +15 -6
- package/dist/transaction/logger.d.ts +16 -0
- package/dist/transaction/logger.js +7 -0
- package/dist/transaction/observability.d.ts +53 -0
- package/dist/transaction/observability.js +19 -0
- package/dist/transaction/plugin.d.ts +192 -0
- package/dist/transaction/plugin.js +87 -0
- package/dist/{policy → transaction/policy}/types.d.ts +3 -3
- package/dist/{policy → transaction/policy}/types.js +2 -0
- package/dist/transaction/resources/httpResources.d.ts +266 -0
- package/dist/transaction/resources/httpResources.js +7 -0
- package/dist/transaction/resources/modelOperations.d.ts +319 -0
- package/dist/transaction/resources/modelOperations.js +12 -0
- package/dist/transaction/resources/mutationOptions.d.ts +66 -0
- package/dist/transaction/resources/mutationOptions.js +9 -0
- package/dist/transaction/resources/where.d.ts +85 -0
- package/dist/transaction/resources/where.js +70 -0
- package/dist/{client → transaction/resources}/writeOptionsSchema.d.ts +2 -6
- package/dist/{client → transaction/resources}/writeOptionsSchema.js +9 -5
- package/dist/{schema → transaction/schema}/field.d.ts +5 -5
- package/dist/{schema → transaction/schema}/field.js +5 -5
- package/dist/transaction/schema/loadStrategy.d.ts +45 -0
- package/dist/transaction/schema/loadStrategy.js +46 -0
- package/dist/{schema → transaction/schema}/model.d.ts +50 -35
- package/dist/{schema → transaction/schema}/model.js +30 -20
- package/dist/transaction/schema/openapi.d.ts +57 -0
- package/dist/transaction/schema/openapi.js +340 -0
- package/dist/{schema → transaction/schema}/relation.d.ts +14 -14
- package/dist/{schema → transaction/schema}/relation.js +7 -7
- package/dist/{schema → transaction/schema}/residency.d.ts +0 -9
- package/dist/{schema → transaction/schema}/residency.js +0 -5
- package/dist/{schema → transaction/schema}/roles.d.ts +5 -5
- package/dist/{schema → transaction/schema}/roles.js +5 -5
- package/dist/{schema → transaction/schema}/schema.d.ts +12 -10
- package/dist/{schema → transaction/schema}/schema.js +4 -3
- package/dist/{schema → transaction/schema}/tenancy.d.ts +1 -1
- package/dist/{schema → transaction/schema}/tenancy.js +7 -4
- package/dist/transaction/transactionLayer.d.ts +82 -0
- package/dist/transaction/transactionLayer.js +24 -0
- package/dist/{transactions → transaction/transactions/settlement}/commitEnvelope.d.ts +4 -5
- package/dist/{transactions → transaction/transactions/settlement}/commitEnvelope.js +9 -13
- package/dist/{transactions → transaction/transactions/settlement}/httpCommitEnvelope.d.ts +9 -2
- package/dist/{transactions → transaction/transactions/settlement}/httpCommitEnvelope.js +5 -9
- package/dist/{transactions/durableWriteStore.d.ts → transaction/transactions/settlement/pendingWrite.d.ts} +10 -36
- package/dist/transaction/transactions/settlement/pendingWrite.js +20 -0
- package/dist/transaction/transport/commitFrames.d.ts +90 -0
- package/dist/transaction/transport/commitFrames.js +134 -0
- package/dist/transaction/transport/connectionManager.d.ts +215 -0
- package/dist/transaction/transport/connectionManager.js +673 -0
- package/dist/transaction/transport/credentialLifecycle.d.ts +177 -0
- package/dist/transaction/transport/credentialLifecycle.js +324 -0
- package/dist/{sync → transaction/transport}/heartbeat.d.ts +3 -1
- package/dist/{sync → transaction/transport}/heartbeat.js +6 -4
- package/dist/{client → transaction/transport}/httpClient.d.ts +59 -16
- package/dist/{client → transaction/transport}/httpClient.js +5 -5
- package/dist/transaction/transport/httpOptions.d.ts +33 -0
- package/dist/transaction/transport/httpOptions.js +12 -0
- package/dist/{client → transaction/transport}/httpTransport.js +171 -85
- package/dist/{sync/NetworkProbe.d.ts → transaction/transport/networkProbe.d.ts} +7 -4
- package/dist/{sync/NetworkProbe.js → transaction/transport/networkProbe.js} +14 -13
- package/dist/transaction/transport/wsFrameHandlers.d.ts +128 -0
- package/dist/transaction/transport/wsFrameHandlers.js +429 -0
- package/dist/transaction/transport/wsTransport.d.ts +576 -0
- package/dist/transaction/transport/wsTransport.js +1017 -0
- package/dist/transaction/types/assertExact.d.ts +17 -0
- package/dist/transaction/types/assertExact.js +1 -0
- package/dist/{types → transaction/types}/global.d.ts +17 -2
- package/dist/{types → transaction/types}/global.js +2 -1
- package/dist/{types → transaction/types}/index.d.ts +14 -46
- package/dist/{types → transaction/types}/index.js +7 -16
- package/dist/{types → transaction/types}/streams.d.ts +63 -45
- package/dist/{utils → transaction/utils}/json.d.ts +18 -0
- package/dist/transaction/utils/json.js +276 -0
- package/dist/transaction/wire/accountResponses.d.ts +351 -0
- package/dist/transaction/wire/accountResponses.js +255 -0
- package/dist/transaction/wire/auth.d.ts +49 -0
- package/dist/transaction/wire/auth.js +57 -0
- package/dist/transaction/wire/claimEvent.d.ts +76 -0
- package/dist/transaction/wire/claimEvent.js +73 -0
- package/dist/transaction/wire/claims.d.ts +463 -0
- package/dist/transaction/wire/claims.js +229 -0
- package/dist/{wire → transaction/wire}/commit.d.ts +125 -193
- package/dist/{wire → transaction/wire}/commit.js +68 -47
- package/dist/{wire → transaction/wire}/delta.d.ts +66 -17
- package/dist/{wire → transaction/wire}/delta.js +37 -13
- package/dist/transaction/wire/errorEnvelope.d.ts +72 -0
- package/dist/{wire → transaction/wire}/errorEnvelope.js +36 -5
- package/dist/transaction/wire/feedCursor.d.ts +60 -0
- package/dist/transaction/wire/feedCursor.js +82 -0
- package/dist/transaction/wire/feedEvent.d.ts +177 -0
- package/dist/transaction/wire/feedEvent.js +39 -0
- package/dist/transaction/wire/frames.d.ts +194 -0
- package/dist/transaction/wire/frames.js +50 -0
- package/dist/transaction/wire/inboundFrames.d.ts +552 -0
- package/dist/transaction/wire/inboundFrames.js +116 -0
- package/dist/transaction/wire/index.d.ts +50 -0
- package/dist/transaction/wire/index.js +74 -0
- package/dist/{wire → transaction/wire}/listEnvelope.d.ts +13 -14
- package/dist/transaction/wire/listEnvelope.js +42 -0
- package/dist/transaction/wire/modelResponses.d.ts +85 -0
- package/dist/transaction/wire/modelResponses.js +43 -0
- package/dist/transactions/{TransactionQueue.d.ts → mutations/MutationQueue.d.ts} +79 -38
- package/dist/transactions/{TransactionQueue.js → mutations/MutationQueue.js} +110 -59
- package/dist/transactions/{TransactionStore.d.ts → mutations/MutationStore.d.ts} +8 -8
- package/dist/transactions/{TransactionStore.js → mutations/MutationStore.js} +2 -2
- package/dist/transactions/{coalesceRules.d.ts → mutations/coalesceRules.d.ts} +10 -10
- package/dist/transactions/{coalesceRules.js → mutations/coalesceRules.js} +1 -1
- package/dist/transactions/mutations/commitLatency.d.ts +52 -0
- package/dist/transactions/mutations/commitLatency.js +130 -0
- package/dist/transactions/{commitOutboxStore.d.ts → mutations/commitOutboxStore.d.ts} +1 -5
- package/dist/transactions/{commitOutboxStore.js → mutations/commitOutboxStore.js} +1 -1
- package/dist/transactions/{commitPayload.d.ts → mutations/commitPayload.d.ts} +16 -15
- package/dist/transactions/{commitPayload.js → mutations/commitPayload.js} +12 -12
- package/dist/transactions/{deltaConfirmation.d.ts → mutations/deltaConfirmation.d.ts} +11 -11
- package/dist/transactions/{deltaConfirmation.js → mutations/deltaConfirmation.js} +7 -7
- package/dist/transactions/mutations/durableWriteStore.d.ts +14 -0
- package/dist/transactions/mutations/durableWriteStore.js +12 -0
- package/dist/transactions/{optimisticApply.d.ts → mutations/optimisticApply.d.ts} +7 -7
- package/dist/transactions/{replayValidation.d.ts → mutations/replayValidation.d.ts} +3 -3
- package/dist/transactions/{replayValidation.js → mutations/replayValidation.js} +4 -3
- package/dist/utils/mobxSetup.d.ts +1 -1
- package/dist/utils/mobxSetup.js +5 -2
- package/dist/webhooks/events.d.ts +2 -2
- package/dist/wire/index.d.ts +1 -34
- package/dist/wire/index.js +8 -49
- package/docs/agent-messaging.md +3 -3
- package/docs/agents.md +19 -12
- package/docs/api-keys.md +8 -4
- package/docs/api.md +22 -18
- package/docs/audit.md +2 -0
- package/docs/cli.md +31 -3
- package/docs/client-behavior.md +8 -6
- package/docs/concurrency-convention.md +30 -24
- package/docs/coordination.md +48 -38
- package/docs/data-sources.md +3 -1
- package/docs/debugging.md +5 -3
- package/docs/deployment.md +267 -0
- package/docs/examples/agent-human.md +49 -42
- package/docs/examples/ai-sdk-tool.md +69 -44
- package/docs/examples/existing-python-backend.md +8 -6
- package/docs/examples/nextjs.md +129 -47
- package/docs/examples/scoped-agent.md +45 -44
- package/docs/examples/server-agent.md +46 -26
- package/docs/groups.md +32 -29
- package/docs/guarantees.md +4 -2
- package/docs/how-it-works.md +9 -7
- package/docs/idempotency.md +126 -0
- package/docs/identity.md +58 -54
- package/docs/index.md +172 -84
- package/docs/integration-guide.md +17 -16
- package/docs/interaction-model.md +6 -4
- package/docs/mcp.md +41 -16
- package/docs/migration.md +63 -5
- package/docs/operating-on-your-database.md +111 -0
- package/docs/projects.md +2 -0
- package/docs/quickstart.md +22 -5
- package/docs/react.md +12 -10
- package/docs/schema-contract.md +5 -3
- package/docs/session-settings.md +108 -0
- package/docs/sessions.md +3 -1
- package/docs/webhooks.md +3 -1
- package/llms.txt +47 -17
- package/package.json +10 -8
- package/dist/agent/Agent.d.ts +0 -366
- package/dist/agent/Agent.js +0 -514
- package/dist/agent/index.d.ts +0 -115
- package/dist/agent/index.js +0 -128
- package/dist/agent/session.d.ts +0 -93
- package/dist/agent/session.js +0 -149
- package/dist/agent/types.d.ts +0 -68
- package/dist/agent/types.js +0 -9
- package/dist/client/durableWrites.d.ts +0 -21
- package/dist/coordination/schema.d.ts +0 -722
- package/dist/schema/openapi.d.ts +0 -29
- package/dist/schema/openapi.js +0 -124
- package/dist/transactions/durableWriteStore.js +0 -30
- package/dist/utils/json.js +0 -88
- package/dist/wire/errorEnvelope.d.ts +0 -55
- package/dist/wire/frames.d.ts +0 -197
- package/dist/wire/frames.js +0 -49
- package/dist/wire/listEnvelope.js +0 -18
- /package/dist/{client → transaction/auth}/credentialEndpoint.d.ts +0 -0
- /package/dist/{client → transaction/auth}/credentialEndpoint.js +0 -0
- /package/dist/{auth → transaction/auth}/credentialPolicy.d.ts +0 -0
- /package/dist/{auth → transaction/auth}/credentialPolicy.js +0 -0
- /package/dist/{auth → transaction/auth}/credentialSource.js +0 -0
- /package/dist/{client → transaction/auth}/hostedEndpoints.d.ts +0 -0
- /package/dist/{client → transaction/auth}/hostedEndpoints.js +0 -0
- /package/dist/{client → transaction/coordination}/claimHeartbeatLoop.d.ts +0 -0
- /package/dist/{client → transaction/coordination}/claimHeartbeatLoop.js +0 -0
- /package/dist/{client → transaction}/persistence.d.ts +0 -0
- /package/dist/{client → transaction}/persistence.js +0 -0
- /package/dist/{client → transaction/resources}/functionalUpdate.d.ts +0 -0
- /package/dist/{client → transaction/resources}/functionalUpdate.js +0 -0
- /package/dist/{transactions → transaction/transactions/settlement}/idempotencyKey.d.ts +0 -0
- /package/dist/{transactions → transaction/transactions/settlement}/idempotencyKey.js +0 -0
- /package/dist/{client → transaction/transport}/httpTransport.d.ts +0 -0
- /package/dist/{types → transaction/types}/modelData.d.ts +0 -0
- /package/dist/{types → transaction/types}/modelData.js +0 -0
- /package/dist/{types → transaction/types}/participant.d.ts +0 -0
- /package/dist/{types → transaction/types}/participant.js +0 -0
- /package/dist/{types → transaction/types}/streams.js +0 -0
- /package/dist/{utils → transaction/utils}/asyncIterator.d.ts +0 -0
- /package/dist/{utils → transaction/utils}/asyncIterator.js +0 -0
- /package/dist/{utils → transaction/utils}/duration.d.ts +0 -0
- /package/dist/{utils → transaction/utils}/duration.js +0 -0
- /package/dist/{wire → transaction/wire}/bootstrapReason.d.ts +0 -0
- /package/dist/{wire → transaction/wire}/bootstrapReason.js +0 -0
- /package/dist/{wire → transaction/wire}/protocol.d.ts +0 -0
- /package/dist/{wire → transaction/wire}/protocol.js +0 -0
- /package/dist/{wire → transaction/wire}/protocolVersion.d.ts +0 -0
- /package/dist/{wire → transaction/wire}/protocolVersion.js +0 -0
- /package/dist/transactions/{UnconfirmedWrites.d.ts → mutations/UnconfirmedWrites.d.ts} +0 -0
- /package/dist/transactions/{UnconfirmedWrites.js → mutations/UnconfirmedWrites.js} +0 -0
- /package/dist/transactions/{optimisticApply.js → mutations/optimisticApply.js} +0 -0
|
@@ -0,0 +1,463 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The request bodies for the claim routes.
|
|
3
|
+
*
|
|
4
|
+
* A claim is a lease over a row, so these cross the same boundary the commit
|
|
5
|
+
* body does and belong here for the same reason: one definition site, which the
|
|
6
|
+
* server validates against and the published OpenAPI reference derives from.
|
|
7
|
+
*
|
|
8
|
+
* Before this existed both claim routes cast `JSON.parse` output to a
|
|
9
|
+
* hand-written interface, so an untrusted body reached the coordinator
|
|
10
|
+
* unvalidated and the reference described the shape from memory.
|
|
11
|
+
*/
|
|
12
|
+
import { z } from 'zod';
|
|
13
|
+
/** The row a claim points at, when it is not already given by the URL. */
|
|
14
|
+
export declare const claimTargetSchema: z.ZodObject<{
|
|
15
|
+
model: z.ZodOptional<z.ZodString>;
|
|
16
|
+
id: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
17
|
+
path: z.ZodOptional<z.ZodString>;
|
|
18
|
+
range: z.ZodOptional<z.ZodObject<{
|
|
19
|
+
startLine: z.ZodNumber;
|
|
20
|
+
endLine: z.ZodNumber;
|
|
21
|
+
startColumn: z.ZodOptional<z.ZodNumber>;
|
|
22
|
+
endColumn: z.ZodOptional<z.ZodNumber>;
|
|
23
|
+
}, z.core.$strip>>;
|
|
24
|
+
field: z.ZodOptional<z.ZodString>;
|
|
25
|
+
fields: z.ZodOptional<z.ZodReadonly<z.ZodArray<z.ZodString>>>;
|
|
26
|
+
meta: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
|
|
27
|
+
}, z.core.$strip>;
|
|
28
|
+
export type ClaimTargetBody = z.infer<typeof claimTargetSchema>;
|
|
29
|
+
/**
|
|
30
|
+
* `POST /v1/claims` and `POST /v1/models/{model}/{id}/claim`.
|
|
31
|
+
*
|
|
32
|
+
* Every field is optional: on the model-scoped route the target comes from the
|
|
33
|
+
* URL, and a bare claim means "I'm editing this row".
|
|
34
|
+
*/
|
|
35
|
+
export declare const claimRequestSchema: z.ZodObject<{
|
|
36
|
+
claimId: z.ZodOptional<z.ZodString>;
|
|
37
|
+
target: z.ZodOptional<z.ZodNullable<z.ZodObject<{
|
|
38
|
+
model: z.ZodOptional<z.ZodString>;
|
|
39
|
+
id: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
40
|
+
path: z.ZodOptional<z.ZodString>;
|
|
41
|
+
range: z.ZodOptional<z.ZodObject<{
|
|
42
|
+
startLine: z.ZodNumber;
|
|
43
|
+
endLine: z.ZodNumber;
|
|
44
|
+
startColumn: z.ZodOptional<z.ZodNumber>;
|
|
45
|
+
endColumn: z.ZodOptional<z.ZodNumber>;
|
|
46
|
+
}, z.core.$strip>>;
|
|
47
|
+
field: z.ZodOptional<z.ZodString>;
|
|
48
|
+
fields: z.ZodOptional<z.ZodReadonly<z.ZodArray<z.ZodString>>>;
|
|
49
|
+
meta: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
|
|
50
|
+
}, z.core.$strip>>>;
|
|
51
|
+
reason: z.ZodOptional<z.ZodString>;
|
|
52
|
+
description: z.ZodOptional<z.ZodString>;
|
|
53
|
+
meta: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
|
|
54
|
+
ttl: z.ZodOptional<z.ZodNullable<z.ZodUnion<readonly [z.ZodString, z.ZodNumber]>>>;
|
|
55
|
+
queue: z.ZodOptional<z.ZodBoolean>;
|
|
56
|
+
}, z.core.$strip>;
|
|
57
|
+
export type ClaimRequest = z.infer<typeof claimRequestSchema>;
|
|
58
|
+
/**
|
|
59
|
+
* `POST /v1/models/{model}/{id}/claim/heartbeat`.
|
|
60
|
+
*
|
|
61
|
+
* An empty body is a plain "still working" beat. `ttl` extends the lease;
|
|
62
|
+
* `claimId` names the exact lease instead of "my claim on this row".
|
|
63
|
+
*/
|
|
64
|
+
export declare const claimHeartbeatRequestSchema: z.ZodObject<{
|
|
65
|
+
claimId: z.ZodOptional<z.ZodString>;
|
|
66
|
+
ttl: z.ZodOptional<z.ZodNullable<z.ZodUnion<readonly [z.ZodString, z.ZodNumber]>>>;
|
|
67
|
+
details: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
|
|
68
|
+
}, z.core.$strip>;
|
|
69
|
+
export type ClaimHeartbeatRequest = z.infer<typeof claimHeartbeatRequestSchema>;
|
|
70
|
+
/**
|
|
71
|
+
* The query string on `GET /v1/models/{model}`.
|
|
72
|
+
*
|
|
73
|
+
* Values arrive as strings, so this describes the wire spelling rather than the
|
|
74
|
+
* parsed result — which is what a caller and the reference both need.
|
|
75
|
+
*/
|
|
76
|
+
export declare const listQuerySchema: z.ZodObject<{
|
|
77
|
+
limit: z.ZodOptional<z.ZodString>;
|
|
78
|
+
order_by: z.ZodOptional<z.ZodString>;
|
|
79
|
+
order: z.ZodOptional<z.ZodEnum<{
|
|
80
|
+
asc: "asc";
|
|
81
|
+
desc: "desc";
|
|
82
|
+
}>>;
|
|
83
|
+
starting_after: z.ZodOptional<z.ZodString>;
|
|
84
|
+
}, z.core.$strip>;
|
|
85
|
+
export type ListQuery = z.infer<typeof listQuerySchema>;
|
|
86
|
+
/**
|
|
87
|
+
* A claim's current state, as returned by `GET /v1/claims/{claimId}`.
|
|
88
|
+
*
|
|
89
|
+
* This is the polling shape, and only the polling shape. Acquiring a claim
|
|
90
|
+
* answers with {@link claimAcquireResponseSchema}, whose two arms are spelled
|
|
91
|
+
* differently — that route was documented against this schema for a while, and
|
|
92
|
+
* the reference described a response the server has never sent.
|
|
93
|
+
*
|
|
94
|
+
* This is the shape that makes queued grants reachable without a socket: the
|
|
95
|
+
* caller enqueues, receives `queued`, heartbeats to stay in line, and polls
|
|
96
|
+
* until `status` becomes `active`, at which point `fenceToken` is present and
|
|
97
|
+
* the work can begin.
|
|
98
|
+
*
|
|
99
|
+
* Two properties are load-bearing and easy to get wrong from the outside:
|
|
100
|
+
*
|
|
101
|
+
* **`position` is advisory.** A privileged caller can reorder the wait line, so
|
|
102
|
+
* a position can go UP between polls. Only `status` is authoritative — a client
|
|
103
|
+
* that asserts monotonic position will fail in production, not in review.
|
|
104
|
+
*
|
|
105
|
+
* **`fenceToken` appears at grant, never at enqueue.** It orders by acquisition
|
|
106
|
+
* rather than by arrival, which is what the fence watermark depends on; a token
|
|
107
|
+
* handed out while queued would break that ordering.
|
|
108
|
+
*
|
|
109
|
+
* There is deliberately no `readAt` here. A watermark records the state a
|
|
110
|
+
* writer reasoned against, and a caller that has just been granted a claim has
|
|
111
|
+
* not read anything yet — it reads next. Stamping one at grant would assert a
|
|
112
|
+
* premise the caller never established, so the holder gets its watermark from
|
|
113
|
+
* its own read, the same way the socket path takes it from a local snapshot.
|
|
114
|
+
*/
|
|
115
|
+
export declare const claimStateSchema: z.ZodObject<{
|
|
116
|
+
expiresAt: z.ZodOptional<z.ZodNumber>;
|
|
117
|
+
fenceToken: z.ZodOptional<z.ZodNumber>;
|
|
118
|
+
position: z.ZodOptional<z.ZodNumber>;
|
|
119
|
+
object: z.ZodLiteral<"claim">;
|
|
120
|
+
claimId: z.ZodString;
|
|
121
|
+
status: z.ZodEnum<{
|
|
122
|
+
active: "active";
|
|
123
|
+
committed: "committed";
|
|
124
|
+
expired: "expired";
|
|
125
|
+
canceled: "canceled";
|
|
126
|
+
queued: "queued";
|
|
127
|
+
}>;
|
|
128
|
+
}, z.core.$strip>;
|
|
129
|
+
export type ClaimState = z.infer<typeof claimStateSchema>;
|
|
130
|
+
/**
|
|
131
|
+
* `POST /v1/claims` and `POST /v1/models/{model}/{id}/claim`, **201** — the
|
|
132
|
+
* target was free and the lease is yours. The claim is nested rather than
|
|
133
|
+
* flattened because the outer object is the created resource's envelope, and
|
|
134
|
+
* `id` is its identity.
|
|
135
|
+
*/
|
|
136
|
+
export declare const claimAcquiredResponseSchema: z.ZodObject<{
|
|
137
|
+
id: z.ZodString;
|
|
138
|
+
object: z.ZodLiteral<"claim">;
|
|
139
|
+
claim: z.ZodReadonly<z.ZodObject<{
|
|
140
|
+
id: z.ZodString;
|
|
141
|
+
actor: z.ZodString;
|
|
142
|
+
participantKind: z.ZodPreprocess<z.ZodEnum<{
|
|
143
|
+
user: "user";
|
|
144
|
+
agent: "agent";
|
|
145
|
+
system: "system";
|
|
146
|
+
}>>;
|
|
147
|
+
onBehalfOfId: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
148
|
+
onBehalfOfKind: z.ZodOptional<z.ZodNullable<z.ZodPreprocess<z.ZodEnum<{
|
|
149
|
+
user: "user";
|
|
150
|
+
agent: "agent";
|
|
151
|
+
system: "system";
|
|
152
|
+
}>>>>;
|
|
153
|
+
capabilityId: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
154
|
+
description: z.ZodOptional<z.ZodString>;
|
|
155
|
+
status: z.ZodOptional<z.ZodEnum<{
|
|
156
|
+
active: "active";
|
|
157
|
+
queued: "queued";
|
|
158
|
+
}>>;
|
|
159
|
+
position: z.ZodOptional<z.ZodNumber>;
|
|
160
|
+
expiresAt: z.ZodNumber;
|
|
161
|
+
fenceToken: z.ZodOptional<z.ZodNumber>;
|
|
162
|
+
target: z.ZodReadonly<z.ZodObject<{
|
|
163
|
+
model: z.ZodString;
|
|
164
|
+
id: z.ZodString;
|
|
165
|
+
path: z.ZodOptional<z.ZodString>;
|
|
166
|
+
range: z.ZodOptional<z.ZodObject<{
|
|
167
|
+
startLine: z.ZodNumber;
|
|
168
|
+
endLine: z.ZodNumber;
|
|
169
|
+
startColumn: z.ZodOptional<z.ZodNumber>;
|
|
170
|
+
endColumn: z.ZodOptional<z.ZodNumber>;
|
|
171
|
+
}, z.core.$strip>>;
|
|
172
|
+
field: z.ZodOptional<z.ZodString>;
|
|
173
|
+
fields: z.ZodOptional<z.ZodReadonly<z.ZodArray<z.ZodString>>>;
|
|
174
|
+
meta: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
|
|
175
|
+
}, z.core.$strip>>;
|
|
176
|
+
meta: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
|
|
177
|
+
field: z.ZodOptional<z.ZodString>;
|
|
178
|
+
}, z.core.$strip>>;
|
|
179
|
+
}, z.core.$strip>;
|
|
180
|
+
export type ClaimAcquiredResponse = z.infer<typeof claimAcquiredResponseSchema>;
|
|
181
|
+
/**
|
|
182
|
+
* The same two routes, **202** — the row was already held and `queue: true`
|
|
183
|
+
* put you in line. The grant arrives later on the caller's stream, or through
|
|
184
|
+
* `GET /v1/claims/{claimId}`.
|
|
185
|
+
*
|
|
186
|
+
* There is deliberately no `object` field here: a queued claim is not yet a
|
|
187
|
+
* created resource, and the status code plus `status: 'queued'` already carry
|
|
188
|
+
* the distinction.
|
|
189
|
+
*/
|
|
190
|
+
export declare const claimQueuedResponseSchema: z.ZodObject<{
|
|
191
|
+
status: z.ZodLiteral<"queued">;
|
|
192
|
+
claimId: z.ZodString;
|
|
193
|
+
position: z.ZodNumber;
|
|
194
|
+
heldBy: z.ZodOptional<z.ZodString>;
|
|
195
|
+
expiresAt: z.ZodOptional<z.ZodNumber>;
|
|
196
|
+
heldByClaim: z.ZodOptional<z.ZodObject<{
|
|
197
|
+
entityType: z.ZodString;
|
|
198
|
+
entityId: z.ZodString;
|
|
199
|
+
path: z.ZodOptional<z.ZodString>;
|
|
200
|
+
range: z.ZodOptional<z.ZodObject<{
|
|
201
|
+
startLine: z.ZodNumber;
|
|
202
|
+
endLine: z.ZodNumber;
|
|
203
|
+
startColumn: z.ZodOptional<z.ZodNumber>;
|
|
204
|
+
endColumn: z.ZodOptional<z.ZodNumber>;
|
|
205
|
+
}, z.core.$strip>>;
|
|
206
|
+
field: z.ZodOptional<z.ZodString>;
|
|
207
|
+
fields: z.ZodOptional<z.ZodReadonly<z.ZodArray<z.ZodString>>>;
|
|
208
|
+
meta: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
|
|
209
|
+
claimId: z.ZodString;
|
|
210
|
+
description: z.ZodOptional<z.ZodString>;
|
|
211
|
+
declaredAt: z.ZodNumber;
|
|
212
|
+
expiresAt: z.ZodNumber;
|
|
213
|
+
onBehalfOfId: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
214
|
+
onBehalfOfKind: z.ZodOptional<z.ZodNullable<z.ZodPreprocess<z.ZodEnum<{
|
|
215
|
+
user: "user";
|
|
216
|
+
agent: "agent";
|
|
217
|
+
system: "system";
|
|
218
|
+
}>>>>;
|
|
219
|
+
capabilityId: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
220
|
+
}, z.core.$strip>>;
|
|
221
|
+
}, z.core.$strip>;
|
|
222
|
+
export type ClaimQueuedResponse = z.infer<typeof claimQueuedResponseSchema>;
|
|
223
|
+
/**
|
|
224
|
+
* Either answer to a claim acquire. The two arms cannot be a discriminated
|
|
225
|
+
* union — the 201 keys on `object` and the 202 on `status`, and neither field
|
|
226
|
+
* appears in both — so a caller branches on `status === 'queued'`, which is
|
|
227
|
+
* what the HTTP transport does.
|
|
228
|
+
*/
|
|
229
|
+
export declare const claimAcquireResponseSchema: z.ZodUnion<readonly [z.ZodObject<{
|
|
230
|
+
id: z.ZodString;
|
|
231
|
+
object: z.ZodLiteral<"claim">;
|
|
232
|
+
claim: z.ZodReadonly<z.ZodObject<{
|
|
233
|
+
id: z.ZodString;
|
|
234
|
+
actor: z.ZodString;
|
|
235
|
+
participantKind: z.ZodPreprocess<z.ZodEnum<{
|
|
236
|
+
user: "user";
|
|
237
|
+
agent: "agent";
|
|
238
|
+
system: "system";
|
|
239
|
+
}>>;
|
|
240
|
+
onBehalfOfId: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
241
|
+
onBehalfOfKind: z.ZodOptional<z.ZodNullable<z.ZodPreprocess<z.ZodEnum<{
|
|
242
|
+
user: "user";
|
|
243
|
+
agent: "agent";
|
|
244
|
+
system: "system";
|
|
245
|
+
}>>>>;
|
|
246
|
+
capabilityId: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
247
|
+
description: z.ZodOptional<z.ZodString>;
|
|
248
|
+
status: z.ZodOptional<z.ZodEnum<{
|
|
249
|
+
active: "active";
|
|
250
|
+
queued: "queued";
|
|
251
|
+
}>>;
|
|
252
|
+
position: z.ZodOptional<z.ZodNumber>;
|
|
253
|
+
expiresAt: z.ZodNumber;
|
|
254
|
+
fenceToken: z.ZodOptional<z.ZodNumber>;
|
|
255
|
+
target: z.ZodReadonly<z.ZodObject<{
|
|
256
|
+
model: z.ZodString;
|
|
257
|
+
id: z.ZodString;
|
|
258
|
+
path: z.ZodOptional<z.ZodString>;
|
|
259
|
+
range: z.ZodOptional<z.ZodObject<{
|
|
260
|
+
startLine: z.ZodNumber;
|
|
261
|
+
endLine: z.ZodNumber;
|
|
262
|
+
startColumn: z.ZodOptional<z.ZodNumber>;
|
|
263
|
+
endColumn: z.ZodOptional<z.ZodNumber>;
|
|
264
|
+
}, z.core.$strip>>;
|
|
265
|
+
field: z.ZodOptional<z.ZodString>;
|
|
266
|
+
fields: z.ZodOptional<z.ZodReadonly<z.ZodArray<z.ZodString>>>;
|
|
267
|
+
meta: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
|
|
268
|
+
}, z.core.$strip>>;
|
|
269
|
+
meta: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
|
|
270
|
+
field: z.ZodOptional<z.ZodString>;
|
|
271
|
+
}, z.core.$strip>>;
|
|
272
|
+
}, z.core.$strip>, z.ZodObject<{
|
|
273
|
+
status: z.ZodLiteral<"queued">;
|
|
274
|
+
claimId: z.ZodString;
|
|
275
|
+
position: z.ZodNumber;
|
|
276
|
+
heldBy: z.ZodOptional<z.ZodString>;
|
|
277
|
+
expiresAt: z.ZodOptional<z.ZodNumber>;
|
|
278
|
+
heldByClaim: z.ZodOptional<z.ZodObject<{
|
|
279
|
+
entityType: z.ZodString;
|
|
280
|
+
entityId: z.ZodString;
|
|
281
|
+
path: z.ZodOptional<z.ZodString>;
|
|
282
|
+
range: z.ZodOptional<z.ZodObject<{
|
|
283
|
+
startLine: z.ZodNumber;
|
|
284
|
+
endLine: z.ZodNumber;
|
|
285
|
+
startColumn: z.ZodOptional<z.ZodNumber>;
|
|
286
|
+
endColumn: z.ZodOptional<z.ZodNumber>;
|
|
287
|
+
}, z.core.$strip>>;
|
|
288
|
+
field: z.ZodOptional<z.ZodString>;
|
|
289
|
+
fields: z.ZodOptional<z.ZodReadonly<z.ZodArray<z.ZodString>>>;
|
|
290
|
+
meta: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
|
|
291
|
+
claimId: z.ZodString;
|
|
292
|
+
description: z.ZodOptional<z.ZodString>;
|
|
293
|
+
declaredAt: z.ZodNumber;
|
|
294
|
+
expiresAt: z.ZodNumber;
|
|
295
|
+
onBehalfOfId: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
296
|
+
onBehalfOfKind: z.ZodOptional<z.ZodNullable<z.ZodPreprocess<z.ZodEnum<{
|
|
297
|
+
user: "user";
|
|
298
|
+
agent: "agent";
|
|
299
|
+
system: "system";
|
|
300
|
+
}>>>>;
|
|
301
|
+
capabilityId: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
302
|
+
}, z.core.$strip>>;
|
|
303
|
+
}, z.core.$strip>]>;
|
|
304
|
+
export type ClaimAcquireResponse = z.infer<typeof claimAcquireResponseSchema>;
|
|
305
|
+
/**
|
|
306
|
+
* `POST /v1/models/{model}/{id}/claim/heartbeat`.
|
|
307
|
+
*
|
|
308
|
+
* `status` never carries `'lost'` in a body: a lease that ended answers with a
|
|
309
|
+
* 409 `claim_lost` instead, which the error mapping raises as
|
|
310
|
+
* `AbloClaimedError` before any of this is read. That is the one way this
|
|
311
|
+
* differs from the WebSocket {@link claimHeartbeatAckPayloadSchema}, whose
|
|
312
|
+
* three-state status includes the loss.
|
|
313
|
+
*/
|
|
314
|
+
export declare const claimHeartbeatReplySchema: z.ZodObject<{
|
|
315
|
+
object: z.ZodLiteral<"claim_heartbeat">;
|
|
316
|
+
claimId: z.ZodString;
|
|
317
|
+
status: z.ZodEnum<{
|
|
318
|
+
queued: "queued";
|
|
319
|
+
held: "held";
|
|
320
|
+
}>;
|
|
321
|
+
expiresAt: z.ZodOptional<z.ZodNumber>;
|
|
322
|
+
queueDepth: z.ZodOptional<z.ZodNumber>;
|
|
323
|
+
position: z.ZodOptional<z.ZodNumber>;
|
|
324
|
+
}, z.core.$strip>;
|
|
325
|
+
export type ClaimHeartbeatReply = z.infer<typeof claimHeartbeatReplySchema>;
|
|
326
|
+
/** `POST /v1/claims/heartbeat` — one ack per lease the batch extended. */
|
|
327
|
+
export declare const claimHeartbeatBatchReplySchema: z.ZodObject<{
|
|
328
|
+
object: z.ZodLiteral<"list">;
|
|
329
|
+
results: z.ZodArray<z.ZodObject<{
|
|
330
|
+
claimId: z.ZodString;
|
|
331
|
+
status: z.ZodEnum<{
|
|
332
|
+
queued: "queued";
|
|
333
|
+
held: "held";
|
|
334
|
+
lost: "lost";
|
|
335
|
+
}>;
|
|
336
|
+
expiresAt: z.ZodOptional<z.ZodNumber>;
|
|
337
|
+
position: z.ZodOptional<z.ZodNumber>;
|
|
338
|
+
queueDepth: z.ZodOptional<z.ZodNumber>;
|
|
339
|
+
}, z.core.$strip>>;
|
|
340
|
+
}, z.core.$strip>;
|
|
341
|
+
export type ClaimHeartbeatBatchReply = z.infer<typeof claimHeartbeatBatchReplySchema>;
|
|
342
|
+
/**
|
|
343
|
+
* The query string on `GET /v1/claims` — the four questions you may ask about
|
|
344
|
+
* live work, which are the same four the audit log already answers about
|
|
345
|
+
* finished work.
|
|
346
|
+
*
|
|
347
|
+
* The names are audit's names on purpose (`routes/dashboard/audit.ts` filters on
|
|
348
|
+
* `actorId`, `actorKind`, `onBehalfOfId`, `capabilityId`). Asking "everything
|
|
349
|
+
* agent A is doing" and "everything agent A did" should not require learning two
|
|
350
|
+
* vocabularies for one idea; the tense is the only thing that differs.
|
|
351
|
+
*
|
|
352
|
+
* `model` and `id` scope to a row and are the original axis. The other three
|
|
353
|
+
* scope to a participant, and a request may combine them — "what is this agent
|
|
354
|
+
* doing to this invoice" is both.
|
|
355
|
+
*
|
|
356
|
+
* Every value is optional, and an omitted filter is not a filter: a bare request
|
|
357
|
+
* lists everything the caller's organization holds.
|
|
358
|
+
*/
|
|
359
|
+
export declare const claimListQuerySchema: z.ZodObject<{
|
|
360
|
+
model: z.ZodOptional<z.ZodString>;
|
|
361
|
+
id: z.ZodOptional<z.ZodString>;
|
|
362
|
+
field: z.ZodOptional<z.ZodString>;
|
|
363
|
+
actorId: z.ZodOptional<z.ZodString>;
|
|
364
|
+
actorKind: z.ZodOptional<z.ZodPreprocess<z.ZodEnum<{
|
|
365
|
+
user: "user";
|
|
366
|
+
agent: "agent";
|
|
367
|
+
system: "system";
|
|
368
|
+
}>>>;
|
|
369
|
+
onBehalfOfId: z.ZodOptional<z.ZodString>;
|
|
370
|
+
capabilityId: z.ZodOptional<z.ZodString>;
|
|
371
|
+
}, z.core.$strip>;
|
|
372
|
+
export type ClaimListQuery = z.infer<typeof claimListQuerySchema>;
|
|
373
|
+
/**
|
|
374
|
+
* `GET /v1/claims` — who holds what, and who waits.
|
|
375
|
+
*
|
|
376
|
+
* `queue` is populated only when the request names both a `model` and an `id`;
|
|
377
|
+
* a wait line belongs to one row, so an unscoped listing has nothing to report
|
|
378
|
+
* and answers with an empty array rather than omitting the field.
|
|
379
|
+
*/
|
|
380
|
+
export declare const claimListResponseSchema: z.ZodObject<{
|
|
381
|
+
object: z.ZodLiteral<"list">;
|
|
382
|
+
claims: z.ZodReadonly<z.ZodArray<z.ZodReadonly<z.ZodObject<{
|
|
383
|
+
id: z.ZodString;
|
|
384
|
+
actor: z.ZodString;
|
|
385
|
+
participantKind: z.ZodPreprocess<z.ZodEnum<{
|
|
386
|
+
user: "user";
|
|
387
|
+
agent: "agent";
|
|
388
|
+
system: "system";
|
|
389
|
+
}>>;
|
|
390
|
+
onBehalfOfId: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
391
|
+
onBehalfOfKind: z.ZodOptional<z.ZodNullable<z.ZodPreprocess<z.ZodEnum<{
|
|
392
|
+
user: "user";
|
|
393
|
+
agent: "agent";
|
|
394
|
+
system: "system";
|
|
395
|
+
}>>>>;
|
|
396
|
+
capabilityId: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
397
|
+
description: z.ZodOptional<z.ZodString>;
|
|
398
|
+
status: z.ZodOptional<z.ZodEnum<{
|
|
399
|
+
active: "active";
|
|
400
|
+
queued: "queued";
|
|
401
|
+
}>>;
|
|
402
|
+
position: z.ZodOptional<z.ZodNumber>;
|
|
403
|
+
expiresAt: z.ZodNumber;
|
|
404
|
+
fenceToken: z.ZodOptional<z.ZodNumber>;
|
|
405
|
+
target: z.ZodReadonly<z.ZodObject<{
|
|
406
|
+
model: z.ZodString;
|
|
407
|
+
id: z.ZodString;
|
|
408
|
+
path: z.ZodOptional<z.ZodString>;
|
|
409
|
+
range: z.ZodOptional<z.ZodObject<{
|
|
410
|
+
startLine: z.ZodNumber;
|
|
411
|
+
endLine: z.ZodNumber;
|
|
412
|
+
startColumn: z.ZodOptional<z.ZodNumber>;
|
|
413
|
+
endColumn: z.ZodOptional<z.ZodNumber>;
|
|
414
|
+
}, z.core.$strip>>;
|
|
415
|
+
field: z.ZodOptional<z.ZodString>;
|
|
416
|
+
fields: z.ZodOptional<z.ZodReadonly<z.ZodArray<z.ZodString>>>;
|
|
417
|
+
meta: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
|
|
418
|
+
}, z.core.$strip>>;
|
|
419
|
+
meta: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
|
|
420
|
+
field: z.ZodOptional<z.ZodString>;
|
|
421
|
+
}, z.core.$strip>>>>;
|
|
422
|
+
queue: z.ZodReadonly<z.ZodArray<z.ZodReadonly<z.ZodObject<{
|
|
423
|
+
id: z.ZodString;
|
|
424
|
+
actor: z.ZodString;
|
|
425
|
+
participantKind: z.ZodPreprocess<z.ZodEnum<{
|
|
426
|
+
user: "user";
|
|
427
|
+
agent: "agent";
|
|
428
|
+
system: "system";
|
|
429
|
+
}>>;
|
|
430
|
+
onBehalfOfId: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
431
|
+
onBehalfOfKind: z.ZodOptional<z.ZodNullable<z.ZodPreprocess<z.ZodEnum<{
|
|
432
|
+
user: "user";
|
|
433
|
+
agent: "agent";
|
|
434
|
+
system: "system";
|
|
435
|
+
}>>>>;
|
|
436
|
+
capabilityId: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
437
|
+
description: z.ZodOptional<z.ZodString>;
|
|
438
|
+
status: z.ZodOptional<z.ZodEnum<{
|
|
439
|
+
active: "active";
|
|
440
|
+
queued: "queued";
|
|
441
|
+
}>>;
|
|
442
|
+
position: z.ZodOptional<z.ZodNumber>;
|
|
443
|
+
expiresAt: z.ZodNumber;
|
|
444
|
+
fenceToken: z.ZodOptional<z.ZodNumber>;
|
|
445
|
+
target: z.ZodReadonly<z.ZodObject<{
|
|
446
|
+
model: z.ZodString;
|
|
447
|
+
id: z.ZodString;
|
|
448
|
+
path: z.ZodOptional<z.ZodString>;
|
|
449
|
+
range: z.ZodOptional<z.ZodObject<{
|
|
450
|
+
startLine: z.ZodNumber;
|
|
451
|
+
endLine: z.ZodNumber;
|
|
452
|
+
startColumn: z.ZodOptional<z.ZodNumber>;
|
|
453
|
+
endColumn: z.ZodOptional<z.ZodNumber>;
|
|
454
|
+
}, z.core.$strip>>;
|
|
455
|
+
field: z.ZodOptional<z.ZodString>;
|
|
456
|
+
fields: z.ZodOptional<z.ZodReadonly<z.ZodArray<z.ZodString>>>;
|
|
457
|
+
meta: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
|
|
458
|
+
}, z.core.$strip>>;
|
|
459
|
+
meta: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
|
|
460
|
+
field: z.ZodOptional<z.ZodString>;
|
|
461
|
+
}, z.core.$strip>>>>;
|
|
462
|
+
}, z.core.$strip>;
|
|
463
|
+
export type ClaimListResponse = z.infer<typeof claimListResponseSchema>;
|
|
@@ -0,0 +1,229 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The request bodies for the claim routes.
|
|
3
|
+
*
|
|
4
|
+
* A claim is a lease over a row, so these cross the same boundary the commit
|
|
5
|
+
* body does and belong here for the same reason: one definition site, which the
|
|
6
|
+
* server validates against and the published OpenAPI reference derives from.
|
|
7
|
+
*
|
|
8
|
+
* Before this existed both claim routes cast `JSON.parse` output to a
|
|
9
|
+
* hand-written interface, so an untrusted body reached the coordinator
|
|
10
|
+
* unvalidated and the reference described the shape from memory.
|
|
11
|
+
*/
|
|
12
|
+
import { z } from 'zod';
|
|
13
|
+
import { targetRangeSchema, publicClaimStatusSchema, wireParticipantKindSchema, claimRecordSchema, modelClaimSchema, claimHeartbeatAckPayloadSchema, wireClaimSummarySchema, } from '../coordination/schema.js';
|
|
14
|
+
/** The row a claim points at, when it is not already given by the URL. */
|
|
15
|
+
export const claimTargetSchema = z.object({
|
|
16
|
+
model: z.string().optional(),
|
|
17
|
+
id: z.string().nullish(),
|
|
18
|
+
path: z.string().optional(),
|
|
19
|
+
range: targetRangeSchema.optional(),
|
|
20
|
+
field: z.string().optional(),
|
|
21
|
+
/** Several named parts at once — see {@link targetRefSchema}. */
|
|
22
|
+
fields: z.array(z.string()).readonly().optional(),
|
|
23
|
+
meta: z.record(z.string(), z.unknown()).optional(),
|
|
24
|
+
});
|
|
25
|
+
/**
|
|
26
|
+
* `POST /v1/claims` and `POST /v1/models/{model}/{id}/claim`.
|
|
27
|
+
*
|
|
28
|
+
* Every field is optional: on the model-scoped route the target comes from the
|
|
29
|
+
* URL, and a bare claim means "I'm editing this row".
|
|
30
|
+
*/
|
|
31
|
+
export const claimRequestSchema = z.object({
|
|
32
|
+
claimId: z.string().optional(),
|
|
33
|
+
target: claimTargetSchema.nullish(),
|
|
34
|
+
reason: z.string().optional(),
|
|
35
|
+
/** Defaults to `editing`. Shown to other participants holding the row. */
|
|
36
|
+
description: z.string().optional(),
|
|
37
|
+
meta: z.record(z.string(), z.unknown()).optional(),
|
|
38
|
+
/** Lease length in the same grammar as a heartbeat: `'5m'` or `30000`. */
|
|
39
|
+
ttl: z.union([z.string(), z.number()]).nullish(),
|
|
40
|
+
/**
|
|
41
|
+
* Join the fair wait line when the row is already held, instead of failing.
|
|
42
|
+
* The response carries `{ status: 'queued', position }` and the grant arrives
|
|
43
|
+
* later on the caller's stream.
|
|
44
|
+
*/
|
|
45
|
+
queue: z.boolean().optional(),
|
|
46
|
+
});
|
|
47
|
+
/**
|
|
48
|
+
* `POST /v1/models/{model}/{id}/claim/heartbeat`.
|
|
49
|
+
*
|
|
50
|
+
* An empty body is a plain "still working" beat. `ttl` extends the lease;
|
|
51
|
+
* `claimId` names the exact lease instead of "my claim on this row".
|
|
52
|
+
*/
|
|
53
|
+
export const claimHeartbeatRequestSchema = z.object({
|
|
54
|
+
claimId: z.string().optional(),
|
|
55
|
+
ttl: z.union([z.string(), z.number()]).nullish(),
|
|
56
|
+
/** Progress carried on the beat — becomes the claim's peer-visible
|
|
57
|
+
* `meta.progress`. Last beat wins, and it goes with the lease. */
|
|
58
|
+
details: z.record(z.string(), z.unknown()).optional(),
|
|
59
|
+
});
|
|
60
|
+
/**
|
|
61
|
+
* The query string on `GET /v1/models/{model}`.
|
|
62
|
+
*
|
|
63
|
+
* Values arrive as strings, so this describes the wire spelling rather than the
|
|
64
|
+
* parsed result — which is what a caller and the reference both need.
|
|
65
|
+
*/
|
|
66
|
+
export const listQuerySchema = z.object({
|
|
67
|
+
limit: z.string().optional(),
|
|
68
|
+
order_by: z.string().optional(),
|
|
69
|
+
order: z.enum(['asc', 'desc']).optional(),
|
|
70
|
+
/** Keyset cursor: the id of the last row from the previous page. */
|
|
71
|
+
starting_after: z.string().optional(),
|
|
72
|
+
});
|
|
73
|
+
/**
|
|
74
|
+
* A claim's current state, as returned by `GET /v1/claims/{claimId}`.
|
|
75
|
+
*
|
|
76
|
+
* This is the polling shape, and only the polling shape. Acquiring a claim
|
|
77
|
+
* answers with {@link claimAcquireResponseSchema}, whose two arms are spelled
|
|
78
|
+
* differently — that route was documented against this schema for a while, and
|
|
79
|
+
* the reference described a response the server has never sent.
|
|
80
|
+
*
|
|
81
|
+
* This is the shape that makes queued grants reachable without a socket: the
|
|
82
|
+
* caller enqueues, receives `queued`, heartbeats to stay in line, and polls
|
|
83
|
+
* until `status` becomes `active`, at which point `fenceToken` is present and
|
|
84
|
+
* the work can begin.
|
|
85
|
+
*
|
|
86
|
+
* Two properties are load-bearing and easy to get wrong from the outside:
|
|
87
|
+
*
|
|
88
|
+
* **`position` is advisory.** A privileged caller can reorder the wait line, so
|
|
89
|
+
* a position can go UP between polls. Only `status` is authoritative — a client
|
|
90
|
+
* that asserts monotonic position will fail in production, not in review.
|
|
91
|
+
*
|
|
92
|
+
* **`fenceToken` appears at grant, never at enqueue.** It orders by acquisition
|
|
93
|
+
* rather than by arrival, which is what the fence watermark depends on; a token
|
|
94
|
+
* handed out while queued would break that ordering.
|
|
95
|
+
*
|
|
96
|
+
* There is deliberately no `readAt` here. A watermark records the state a
|
|
97
|
+
* writer reasoned against, and a caller that has just been granted a claim has
|
|
98
|
+
* not read anything yet — it reads next. Stamping one at grant would assert a
|
|
99
|
+
* premise the caller never established, so the holder gets its watermark from
|
|
100
|
+
* its own read, the same way the socket path takes it from a local snapshot.
|
|
101
|
+
*/
|
|
102
|
+
export const claimStateSchema = claimRecordSchema
|
|
103
|
+
.pick({ position: true, expiresAt: true, fenceToken: true })
|
|
104
|
+
.partial()
|
|
105
|
+
.extend({
|
|
106
|
+
object: z.literal('claim'),
|
|
107
|
+
/** The claim named, rather than the claim as a resource — which is why this
|
|
108
|
+
* is `claimId` and not the record's `id`. */
|
|
109
|
+
claimId: z.string(),
|
|
110
|
+
/**
|
|
111
|
+
* Widened from the record's two observable states to all five.
|
|
112
|
+
*
|
|
113
|
+
* A poll is the one surface that can arrive after the claim ended: the
|
|
114
|
+
* caller holds an id and asks what became of it, so `committed`, `expired`,
|
|
115
|
+
* and `canceled` are answers this route must be able to give. A peer's
|
|
116
|
+
* listing cannot see them, because a terminal claim has already left the
|
|
117
|
+
* set being listed.
|
|
118
|
+
*/
|
|
119
|
+
status: publicClaimStatusSchema,
|
|
120
|
+
});
|
|
121
|
+
/**
|
|
122
|
+
* `POST /v1/claims` and `POST /v1/models/{model}/{id}/claim`, **201** — the
|
|
123
|
+
* target was free and the lease is yours. The claim is nested rather than
|
|
124
|
+
* flattened because the outer object is the created resource's envelope, and
|
|
125
|
+
* `id` is its identity.
|
|
126
|
+
*/
|
|
127
|
+
export const claimAcquiredResponseSchema = z.object({
|
|
128
|
+
id: z.string(),
|
|
129
|
+
object: z.literal('claim'),
|
|
130
|
+
claim: modelClaimSchema,
|
|
131
|
+
});
|
|
132
|
+
/**
|
|
133
|
+
* The same two routes, **202** — the row was already held and `queue: true`
|
|
134
|
+
* put you in line. The grant arrives later on the caller's stream, or through
|
|
135
|
+
* `GET /v1/claims/{claimId}`.
|
|
136
|
+
*
|
|
137
|
+
* There is deliberately no `object` field here: a queued claim is not yet a
|
|
138
|
+
* created resource, and the status code plus `status: 'queued'` already carry
|
|
139
|
+
* the distinction.
|
|
140
|
+
*/
|
|
141
|
+
export const claimQueuedResponseSchema = z.object({
|
|
142
|
+
status: z.literal('queued'),
|
|
143
|
+
claimId: z.string(),
|
|
144
|
+
position: z.number().int().nonnegative(),
|
|
145
|
+
heldBy: z.string().optional(),
|
|
146
|
+
expiresAt: z.number().int().optional(),
|
|
147
|
+
heldByClaim: wireClaimSummarySchema.optional(),
|
|
148
|
+
});
|
|
149
|
+
/**
|
|
150
|
+
* Either answer to a claim acquire. The two arms cannot be a discriminated
|
|
151
|
+
* union — the 201 keys on `object` and the 202 on `status`, and neither field
|
|
152
|
+
* appears in both — so a caller branches on `status === 'queued'`, which is
|
|
153
|
+
* what the HTTP transport does.
|
|
154
|
+
*/
|
|
155
|
+
export const claimAcquireResponseSchema = z.union([
|
|
156
|
+
claimAcquiredResponseSchema,
|
|
157
|
+
claimQueuedResponseSchema,
|
|
158
|
+
]);
|
|
159
|
+
/**
|
|
160
|
+
* `POST /v1/models/{model}/{id}/claim/heartbeat`.
|
|
161
|
+
*
|
|
162
|
+
* `status` never carries `'lost'` in a body: a lease that ended answers with a
|
|
163
|
+
* 409 `claim_lost` instead, which the error mapping raises as
|
|
164
|
+
* `AbloClaimedError` before any of this is read. That is the one way this
|
|
165
|
+
* differs from the WebSocket {@link claimHeartbeatAckPayloadSchema}, whose
|
|
166
|
+
* three-state status includes the loss.
|
|
167
|
+
*/
|
|
168
|
+
export const claimHeartbeatReplySchema = z.object({
|
|
169
|
+
object: z.literal('claim_heartbeat'),
|
|
170
|
+
claimId: z.string(),
|
|
171
|
+
status: z.enum(['held', 'queued']),
|
|
172
|
+
/** Present on `held`: the extended lease deadline. */
|
|
173
|
+
expiresAt: z.number().int().optional(),
|
|
174
|
+
/** Present on `held`: how many participants wait behind you. */
|
|
175
|
+
queueDepth: z.number().int().nonnegative().optional(),
|
|
176
|
+
/** Present on `queued`: the refreshed place in line. */
|
|
177
|
+
position: z.number().int().nonnegative().optional(),
|
|
178
|
+
});
|
|
179
|
+
/** `POST /v1/claims/heartbeat` — one ack per lease the batch extended. */
|
|
180
|
+
export const claimHeartbeatBatchReplySchema = z.object({
|
|
181
|
+
object: z.literal('list'),
|
|
182
|
+
results: z.array(claimHeartbeatAckPayloadSchema),
|
|
183
|
+
});
|
|
184
|
+
/**
|
|
185
|
+
* The query string on `GET /v1/claims` — the four questions you may ask about
|
|
186
|
+
* live work, which are the same four the audit log already answers about
|
|
187
|
+
* finished work.
|
|
188
|
+
*
|
|
189
|
+
* The names are audit's names on purpose (`routes/dashboard/audit.ts` filters on
|
|
190
|
+
* `actorId`, `actorKind`, `onBehalfOfId`, `capabilityId`). Asking "everything
|
|
191
|
+
* agent A is doing" and "everything agent A did" should not require learning two
|
|
192
|
+
* vocabularies for one idea; the tense is the only thing that differs.
|
|
193
|
+
*
|
|
194
|
+
* `model` and `id` scope to a row and are the original axis. The other three
|
|
195
|
+
* scope to a participant, and a request may combine them — "what is this agent
|
|
196
|
+
* doing to this invoice" is both.
|
|
197
|
+
*
|
|
198
|
+
* Every value is optional, and an omitted filter is not a filter: a bare request
|
|
199
|
+
* lists everything the caller's organization holds.
|
|
200
|
+
*/
|
|
201
|
+
export const claimListQuerySchema = z.object({
|
|
202
|
+
model: z.string().optional(),
|
|
203
|
+
id: z.string().optional(),
|
|
204
|
+
field: z.string().optional(),
|
|
205
|
+
/** Who is doing it. Matches the claim's holder. */
|
|
206
|
+
actorId: z.string().optional(),
|
|
207
|
+
/** Narrow to people, to agents, or to system principals. */
|
|
208
|
+
actorKind: wireParticipantKindSchema.optional(),
|
|
209
|
+
/**
|
|
210
|
+
* Who it is being done for. The operations question — "what is running on
|
|
211
|
+
* behalf of this customer right now" — which was answerable only in hindsight
|
|
212
|
+
* until the claim carried its delegation.
|
|
213
|
+
*/
|
|
214
|
+
onBehalfOfId: z.string().optional(),
|
|
215
|
+
/** Which grant authorized it. */
|
|
216
|
+
capabilityId: z.string().optional(),
|
|
217
|
+
});
|
|
218
|
+
/**
|
|
219
|
+
* `GET /v1/claims` — who holds what, and who waits.
|
|
220
|
+
*
|
|
221
|
+
* `queue` is populated only when the request names both a `model` and an `id`;
|
|
222
|
+
* a wait line belongs to one row, so an unscoped listing has nothing to report
|
|
223
|
+
* and answers with an empty array rather than omitting the field.
|
|
224
|
+
*/
|
|
225
|
+
export const claimListResponseSchema = z.object({
|
|
226
|
+
object: z.literal('list'),
|
|
227
|
+
claims: z.array(modelClaimSchema).readonly(),
|
|
228
|
+
queue: z.array(modelClaimSchema).readonly(),
|
|
229
|
+
});
|