@memberjunction/server 6.2.0-edge.3 → 6.2.0-edge.5
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/README.md +20 -0
- package/dist/.tsbuildinfo +1 -1
- package/dist/agentSessions/BridgeHostInstance.d.ts +25 -0
- package/dist/agentSessions/BridgeHostInstance.d.ts.map +1 -0
- package/dist/agentSessions/BridgeHostInstance.js +30 -0
- package/dist/agentSessions/BridgeHostInstance.js.map +1 -0
- package/dist/agentSessions/HostInstance.d.ts +75 -11
- package/dist/agentSessions/HostInstance.d.ts.map +1 -1
- package/dist/agentSessions/HostInstance.js +99 -28
- package/dist/agentSessions/HostInstance.js.map +1 -1
- package/dist/agentSessions/ReturningVisitorRecap.d.ts.map +1 -1
- package/dist/agentSessions/ReturningVisitorRecap.js +7 -3
- package/dist/agentSessions/ReturningVisitorRecap.js.map +1 -1
- package/dist/agentSessions/SessionJanitor.d.ts +236 -27
- package/dist/agentSessions/SessionJanitor.d.ts.map +1 -1
- package/dist/agentSessions/SessionJanitor.js +682 -54
- package/dist/agentSessions/SessionJanitor.js.map +1 -1
- package/dist/agentSessions/SessionManager.d.ts +48 -3
- package/dist/agentSessions/SessionManager.d.ts.map +1 -1
- package/dist/agentSessions/SessionManager.js +112 -9
- package/dist/agentSessions/SessionManager.js.map +1 -1
- package/dist/agentSessions/SessionRunIDVerifier.d.ts +63 -0
- package/dist/agentSessions/SessionRunIDVerifier.d.ts.map +1 -0
- package/dist/agentSessions/SessionRunIDVerifier.js +129 -0
- package/dist/agentSessions/SessionRunIDVerifier.js.map +1 -0
- package/dist/agentSessions/index.d.ts +2 -0
- package/dist/agentSessions/index.d.ts.map +1 -1
- package/dist/agentSessions/index.js +10 -3
- package/dist/agentSessions/index.js.map +1 -1
- package/dist/apiRoot.d.ts +32 -0
- package/dist/apiRoot.d.ts.map +1 -0
- package/dist/apiRoot.js +67 -0
- package/dist/apiRoot.js.map +1 -0
- package/dist/auth/AuthProviderCatalogRouter.d.ts.map +1 -1
- package/dist/auth/AuthProviderCatalogRouter.js +25 -0
- package/dist/auth/AuthProviderCatalogRouter.js.map +1 -1
- package/dist/auth/LoginScreenEngine.d.ts +22 -0
- package/dist/auth/LoginScreenEngine.d.ts.map +1 -0
- package/dist/auth/LoginScreenEngine.js +57 -0
- package/dist/auth/LoginScreenEngine.js.map +1 -0
- package/dist/auth/actionAuthorization.d.ts +40 -0
- package/dist/auth/actionAuthorization.d.ts.map +1 -0
- package/dist/auth/actionAuthorization.js +94 -0
- package/dist/auth/actionAuthorization.js.map +1 -0
- package/dist/auth/index.d.ts +1 -0
- package/dist/auth/index.d.ts.map +1 -1
- package/dist/auth/index.js +4 -10
- package/dist/auth/index.js.map +1 -1
- package/dist/auth/magicLink/MagicLinkRouter.d.ts.map +1 -1
- package/dist/auth/magicLink/MagicLinkRouter.js +3 -2
- package/dist/auth/magicLink/MagicLinkRouter.js.map +1 -1
- package/dist/auth/magicLink/MagicLinkService.d.ts.map +1 -1
- package/dist/auth/magicLink/MagicLinkService.js +6 -3
- package/dist/auth/magicLink/MagicLinkService.js.map +1 -1
- package/dist/auth/newUsers.d.ts +10 -0
- package/dist/auth/newUsers.d.ts.map +1 -1
- package/dist/auth/newUsers.js +80 -11
- package/dist/auth/newUsers.js.map +1 -1
- package/dist/config.d.ts +2514 -22
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +166 -4
- package/dist/config.js.map +1 -1
- package/dist/context.d.ts +8 -0
- package/dist/context.d.ts.map +1 -1
- package/dist/context.js +14 -11
- package/dist/context.js.map +1 -1
- package/dist/coreRoutes.d.ts +29 -0
- package/dist/coreRoutes.d.ts.map +1 -0
- package/dist/coreRoutes.js +142 -0
- package/dist/coreRoutes.js.map +1 -0
- package/dist/generated/graphql-schemas/__mj.d.ts +504 -3
- package/dist/generated/graphql-schemas/__mj.d.ts.map +1 -1
- package/dist/generated/graphql-schemas/__mj.js +2456 -7
- package/dist/generated/graphql-schemas/__mj.js.map +1 -1
- package/dist/generic/CacheInvalidationResolver.d.ts +43 -8
- package/dist/generic/CacheInvalidationResolver.d.ts.map +1 -1
- package/dist/generic/CacheInvalidationResolver.js +59 -19
- package/dist/generic/CacheInvalidationResolver.js.map +1 -1
- package/dist/generic/OrphanedConversationDetailReconciler.js +3 -3
- package/dist/generic/OrphanedConversationDetailReconciler.js.map +1 -1
- package/dist/generic/PushStatusResolver.js +1 -1
- package/dist/generic/PushStatusResolver.js.map +1 -1
- package/dist/generic/ResolverBase.d.ts +123 -48
- package/dist/generic/ResolverBase.d.ts.map +1 -1
- package/dist/generic/ResolverBase.js +293 -305
- package/dist/generic/ResolverBase.js.map +1 -1
- package/dist/generic/RunViewResolver.d.ts.map +1 -1
- package/dist/generic/RunViewResolver.js +16 -0
- package/dist/generic/RunViewResolver.js.map +1 -1
- package/dist/globalCors.d.ts +33 -0
- package/dist/globalCors.d.ts.map +1 -0
- package/dist/globalCors.js +58 -0
- package/dist/globalCors.js.map +1 -0
- package/dist/index.d.ts +17 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +219 -278
- package/dist/index.js.map +1 -1
- package/dist/isolatedProvider.d.ts +20 -0
- package/dist/isolatedProvider.d.ts.map +1 -0
- package/dist/isolatedProvider.js +22 -0
- package/dist/isolatedProvider.js.map +1 -0
- package/dist/multiTenancy/index.d.ts.map +1 -1
- package/dist/multiTenancy/index.js +22 -2
- package/dist/multiTenancy/index.js.map +1 -1
- package/dist/realtimeProxy/RealtimeProxyServer.d.ts +44 -4
- package/dist/realtimeProxy/RealtimeProxyServer.d.ts.map +1 -1
- package/dist/realtimeProxy/RealtimeProxyServer.js +121 -16
- package/dist/realtimeProxy/RealtimeProxyServer.js.map +1 -1
- package/dist/realtimeProxy/RealtimeRelayTunnel.d.ts +171 -0
- package/dist/realtimeProxy/RealtimeRelayTunnel.d.ts.map +1 -0
- package/dist/realtimeProxy/RealtimeRelayTunnel.js +532 -0
- package/dist/realtimeProxy/RealtimeRelayTunnel.js.map +1 -0
- package/dist/realtimeSessions/RealtimeSessionEventService.d.ts +148 -0
- package/dist/realtimeSessions/RealtimeSessionEventService.d.ts.map +1 -0
- package/dist/realtimeSessions/RealtimeSessionEventService.js +191 -0
- package/dist/realtimeSessions/RealtimeSessionEventService.js.map +1 -0
- package/dist/realtimeSessions/RealtimeSessionVerificationService.d.ts +66 -0
- package/dist/realtimeSessions/RealtimeSessionVerificationService.d.ts.map +1 -0
- package/dist/realtimeSessions/RealtimeSessionVerificationService.js +139 -0
- package/dist/realtimeSessions/RealtimeSessionVerificationService.js.map +1 -0
- package/dist/realtimeSessions/RealtimeVerifyRouter.d.ts +38 -0
- package/dist/realtimeSessions/RealtimeVerifyRouter.d.ts.map +1 -0
- package/dist/realtimeSessions/RealtimeVerifyRouter.js +99 -0
- package/dist/realtimeSessions/RealtimeVerifyRouter.js.map +1 -0
- package/dist/realtimeSessions/RecordingAssemblyScheduler.d.ts +100 -0
- package/dist/realtimeSessions/RecordingAssemblyScheduler.d.ts.map +1 -0
- package/dist/realtimeSessions/RecordingAssemblyScheduler.js +173 -0
- package/dist/realtimeSessions/RecordingAssemblyScheduler.js.map +1 -0
- package/dist/realtimeSessions/SessionVerificationPortsBase.d.ts +61 -0
- package/dist/realtimeSessions/SessionVerificationPortsBase.d.ts.map +1 -0
- package/dist/realtimeSessions/SessionVerificationPortsBase.js +149 -0
- package/dist/realtimeSessions/SessionVerificationPortsBase.js.map +1 -0
- package/dist/realtimeSessions/SlidingWindowRateLimiter.d.ts +57 -0
- package/dist/realtimeSessions/SlidingWindowRateLimiter.d.ts.map +1 -0
- package/dist/realtimeSessions/SlidingWindowRateLimiter.js +69 -0
- package/dist/realtimeSessions/SlidingWindowRateLimiter.js.map +1 -0
- package/dist/realtimeSessions/index.d.ts +19 -0
- package/dist/realtimeSessions/index.d.ts.map +1 -0
- package/dist/realtimeSessions/index.js +19 -0
- package/dist/realtimeSessions/index.js.map +1 -0
- package/dist/realtimeSessions/ownedRealtimeSession.d.ts +30 -0
- package/dist/realtimeSessions/ownedRealtimeSession.d.ts.map +1 -0
- package/dist/realtimeSessions/ownedRealtimeSession.js +47 -0
- package/dist/realtimeSessions/ownedRealtimeSession.js.map +1 -0
- package/dist/realtimeSessions/sessionAccess.d.ts +92 -0
- package/dist/realtimeSessions/sessionAccess.d.ts.map +1 -0
- package/dist/realtimeSessions/sessionAccess.js +94 -0
- package/dist/realtimeSessions/sessionAccess.js.map +1 -0
- package/dist/realtimeSessions/sessionConfigStamps.d.ts +70 -0
- package/dist/realtimeSessions/sessionConfigStamps.d.ts.map +1 -0
- package/dist/realtimeSessions/sessionConfigStamps.js +93 -0
- package/dist/realtimeSessions/sessionConfigStamps.js.map +1 -0
- package/dist/realtimeSessions/subscriptionAuthorization.d.ts +65 -0
- package/dist/realtimeSessions/subscriptionAuthorization.d.ts.map +1 -0
- package/dist/realtimeSessions/subscriptionAuthorization.js +71 -0
- package/dist/realtimeSessions/subscriptionAuthorization.js.map +1 -0
- package/dist/realtimeSessions/verificationCore.d.ts +243 -0
- package/dist/realtimeSessions/verificationCore.d.ts.map +1 -0
- package/dist/realtimeSessions/verificationCore.js +356 -0
- package/dist/realtimeSessions/verificationCore.js.map +1 -0
- package/dist/realtimeSessions/verificationPages.d.ts +66 -0
- package/dist/realtimeSessions/verificationPages.d.ts.map +1 -0
- package/dist/realtimeSessions/verificationPages.js +110 -0
- package/dist/realtimeSessions/verificationPages.js.map +1 -0
- package/dist/realtimeSessions/verificationPolicy.d.ts +147 -0
- package/dist/realtimeSessions/verificationPolicy.d.ts.map +1 -0
- package/dist/realtimeSessions/verificationPolicy.js +249 -0
- package/dist/realtimeSessions/verificationPolicy.js.map +1 -0
- package/dist/realtimeSessions/verificationWorkflow.d.ts +263 -0
- package/dist/realtimeSessions/verificationWorkflow.d.ts.map +1 -0
- package/dist/realtimeSessions/verificationWorkflow.js +435 -0
- package/dist/realtimeSessions/verificationWorkflow.js.map +1 -0
- package/dist/realtimeWidget/widgetGuestElevation.d.ts +20 -2
- package/dist/realtimeWidget/widgetGuestElevation.d.ts.map +1 -1
- package/dist/realtimeWidget/widgetGuestElevation.js +31 -2
- package/dist/realtimeWidget/widgetGuestElevation.js.map +1 -1
- package/dist/resolvers/ActionResolver.d.ts +31 -5
- package/dist/resolvers/ActionResolver.d.ts.map +1 -1
- package/dist/resolvers/ActionResolver.js +75 -14
- package/dist/resolvers/ActionResolver.js.map +1 -1
- package/dist/resolvers/AdhocQueryResolver.d.ts +14 -1
- package/dist/resolvers/AdhocQueryResolver.d.ts.map +1 -1
- package/dist/resolvers/AdhocQueryResolver.js +21 -5
- package/dist/resolvers/AdhocQueryResolver.js.map +1 -1
- package/dist/resolvers/ArtifactFileResolver.d.ts +5 -1
- package/dist/resolvers/ArtifactFileResolver.d.ts.map +1 -1
- package/dist/resolvers/ArtifactFileResolver.js +9 -7
- package/dist/resolvers/ArtifactFileResolver.js.map +1 -1
- package/dist/resolvers/CacheStatsResolver.d.ts +27 -0
- package/dist/resolvers/CacheStatsResolver.d.ts.map +1 -1
- package/dist/resolvers/CacheStatsResolver.js +113 -2
- package/dist/resolvers/CacheStatsResolver.js.map +1 -1
- package/dist/resolvers/ClientToolRequestResolver.d.ts +4 -2
- package/dist/resolvers/ClientToolRequestResolver.d.ts.map +1 -1
- package/dist/resolvers/ClientToolRequestResolver.js +28 -10
- package/dist/resolvers/ClientToolRequestResolver.js.map +1 -1
- package/dist/resolvers/ConversationRunEventsResolver.d.ts +8 -4
- package/dist/resolvers/ConversationRunEventsResolver.d.ts.map +1 -1
- package/dist/resolvers/ConversationRunEventsResolver.js +6 -6
- package/dist/resolvers/ConversationRunEventsResolver.js.map +1 -1
- package/dist/resolvers/DatasetResolver.d.ts +24 -3
- package/dist/resolvers/DatasetResolver.d.ts.map +1 -1
- package/dist/resolvers/DatasetResolver.js +57 -8
- package/dist/resolvers/DatasetResolver.js.map +1 -1
- package/dist/resolvers/EntityRecordNameResolver.d.ts +2 -1
- package/dist/resolvers/EntityRecordNameResolver.d.ts.map +1 -1
- package/dist/resolvers/EntityRecordNameResolver.js +3 -2
- package/dist/resolvers/EntityRecordNameResolver.js.map +1 -1
- package/dist/resolvers/FetchEntityVectorsResolver.d.ts +27 -1
- package/dist/resolvers/FetchEntityVectorsResolver.d.ts.map +1 -1
- package/dist/resolvers/FetchEntityVectorsResolver.js +148 -2
- package/dist/resolvers/FetchEntityVectorsResolver.js.map +1 -1
- package/dist/resolvers/FileResolver.d.ts +82 -11
- package/dist/resolvers/FileResolver.d.ts.map +1 -1
- package/dist/resolvers/FileResolver.js +279 -101
- package/dist/resolvers/FileResolver.js.map +1 -1
- package/dist/resolvers/GetDataContextDataResolver.d.ts +33 -7
- package/dist/resolvers/GetDataContextDataResolver.d.ts.map +1 -1
- package/dist/resolvers/GetDataContextDataResolver.js +117 -38
- package/dist/resolvers/GetDataContextDataResolver.js.map +1 -1
- package/dist/resolvers/GetDataResolver.d.ts.map +1 -1
- package/dist/resolvers/GetDataResolver.js +6 -3
- package/dist/resolvers/GetDataResolver.js.map +1 -1
- package/dist/resolvers/HumanHandoffResolver.d.ts.map +1 -1
- package/dist/resolvers/HumanHandoffResolver.js +7 -1
- package/dist/resolvers/HumanHandoffResolver.js.map +1 -1
- package/dist/resolvers/IntegrationDiscoveryResolver.d.ts.map +1 -1
- package/dist/resolvers/IntegrationDiscoveryResolver.js +4 -2
- package/dist/resolvers/IntegrationDiscoveryResolver.js.map +1 -1
- package/dist/resolvers/MCPResolver.d.ts.map +1 -1
- package/dist/resolvers/MCPResolver.js +9 -4
- package/dist/resolvers/MCPResolver.js.map +1 -1
- package/dist/resolvers/QueryResolver.d.ts +2 -0
- package/dist/resolvers/QueryResolver.d.ts.map +1 -1
- package/dist/resolvers/QueryResolver.js +13 -0
- package/dist/resolvers/QueryResolver.js.map +1 -1
- package/dist/resolvers/RealtimeBridgeResolver.d.ts +54 -2
- package/dist/resolvers/RealtimeBridgeResolver.d.ts.map +1 -1
- package/dist/resolvers/RealtimeBridgeResolver.js +155 -10
- package/dist/resolvers/RealtimeBridgeResolver.js.map +1 -1
- package/dist/resolvers/RealtimeClientSessionResolver.d.ts +157 -33
- package/dist/resolvers/RealtimeClientSessionResolver.d.ts.map +1 -1
- package/dist/resolvers/RealtimeClientSessionResolver.js +404 -116
- package/dist/resolvers/RealtimeClientSessionResolver.js.map +1 -1
- package/dist/resolvers/RealtimeSessionEventsResolver.d.ts +61 -0
- package/dist/resolvers/RealtimeSessionEventsResolver.d.ts.map +1 -0
- package/dist/resolvers/RealtimeSessionEventsResolver.js +130 -0
- package/dist/resolvers/RealtimeSessionEventsResolver.js.map +1 -0
- package/dist/resolvers/RealtimeSessionVerificationResolver.d.ts +85 -0
- package/dist/resolvers/RealtimeSessionVerificationResolver.d.ts.map +1 -0
- package/dist/resolvers/RealtimeSessionVerificationResolver.js +188 -0
- package/dist/resolvers/RealtimeSessionVerificationResolver.js.map +1 -0
- package/dist/resolvers/RemoteBrowserActionResolver.d.ts +2 -0
- package/dist/resolvers/RemoteBrowserActionResolver.d.ts.map +1 -1
- package/dist/resolvers/RemoteBrowserActionResolver.js +5 -1
- package/dist/resolvers/RemoteBrowserActionResolver.js.map +1 -1
- package/dist/resolvers/RunAIAgentResolver.d.ts +10 -0
- package/dist/resolvers/RunAIAgentResolver.d.ts.map +1 -1
- package/dist/resolvers/RunAIAgentResolver.js +100 -14
- package/dist/resolvers/RunAIAgentResolver.js.map +1 -1
- package/dist/resolvers/RunTemplateResolver.d.ts.map +1 -1
- package/dist/resolvers/RunTemplateResolver.js +12 -11
- package/dist/resolvers/RunTemplateResolver.js.map +1 -1
- package/dist/resolvers/SearchKnowledgeStreamResolver.d.ts +12 -1
- package/dist/resolvers/SearchKnowledgeStreamResolver.d.ts.map +1 -1
- package/dist/resolvers/SearchKnowledgeStreamResolver.js +15 -2
- package/dist/resolvers/SearchKnowledgeStreamResolver.js.map +1 -1
- package/dist/resolvers/SqlLoggingConfigResolver.d.ts.map +1 -1
- package/dist/resolvers/SqlLoggingConfigResolver.js +2 -3
- package/dist/resolvers/SqlLoggingConfigResolver.js.map +1 -1
- package/dist/resolvers/SyncDataResolver.d.ts.map +1 -1
- package/dist/resolvers/SyncDataResolver.js +6 -2
- package/dist/resolvers/SyncDataResolver.js.map +1 -1
- package/dist/resolvers/SyncRolesUsersResolver.d.ts +2 -0
- package/dist/resolvers/SyncRolesUsersResolver.d.ts.map +1 -1
- package/dist/resolvers/SyncRolesUsersResolver.js +23 -6
- package/dist/resolvers/SyncRolesUsersResolver.js.map +1 -1
- package/dist/resolvers/TaskGraphFrameResolver.d.ts +2 -1
- package/dist/resolvers/TaskGraphFrameResolver.d.ts.map +1 -1
- package/dist/resolvers/TaskGraphFrameResolver.js +28 -1
- package/dist/resolvers/TaskGraphFrameResolver.js.map +1 -1
- package/dist/resolvers/TestQuerySQLResolver.d.ts +24 -0
- package/dist/resolvers/TestQuerySQLResolver.d.ts.map +1 -1
- package/dist/resolvers/TestQuerySQLResolver.js +65 -13
- package/dist/resolvers/TestQuerySQLResolver.js.map +1 -1
- package/dist/resolvers/TransactionGroupResolver.d.ts +19 -2
- package/dist/resolvers/TransactionGroupResolver.d.ts.map +1 -1
- package/dist/resolvers/TransactionGroupResolver.js +102 -24
- package/dist/resolvers/TransactionGroupResolver.js.map +1 -1
- package/dist/resolvers/UserAvatarResolver.d.ts +16 -0
- package/dist/resolvers/UserAvatarResolver.d.ts.map +1 -0
- package/dist/resolvers/UserAvatarResolver.js +124 -0
- package/dist/resolvers/UserAvatarResolver.js.map +1 -0
- package/dist/resolvers/UserResolver.d.ts.map +1 -1
- package/dist/resolvers/UserResolver.js +2 -17
- package/dist/resolvers/UserResolver.js.map +1 -1
- package/dist/resolvers/agent-run-data-guard.d.ts +31 -0
- package/dist/resolvers/agent-run-data-guard.d.ts.map +1 -0
- package/dist/resolvers/agent-run-data-guard.js +72 -0
- package/dist/resolvers/agent-run-data-guard.js.map +1 -0
- package/dist/resolvers/agentVisionConsentAudit.d.ts +37 -0
- package/dist/resolvers/agentVisionConsentAudit.d.ts.map +1 -0
- package/dist/resolvers/agentVisionConsentAudit.js +63 -0
- package/dist/resolvers/agentVisionConsentAudit.js.map +1 -0
- package/dist/resolvers/avatarInputValidation.d.ts +40 -0
- package/dist/resolvers/avatarInputValidation.d.ts.map +1 -0
- package/dist/resolvers/avatarInputValidation.js +97 -0
- package/dist/resolvers/avatarInputValidation.js.map +1 -0
- package/dist/resolvers/currentUserRoles.d.ts +29 -0
- package/dist/resolvers/currentUserRoles.d.ts.map +1 -1
- package/dist/resolvers/currentUserRoles.js +30 -0
- package/dist/resolvers/currentUserRoles.js.map +1 -1
- package/dist/resolvers/meetings/meetingMutations.d.ts +6 -0
- package/dist/resolvers/meetings/meetingMutations.d.ts.map +1 -1
- package/dist/resolvers/meetings/meetingMutations.js +21 -0
- package/dist/resolvers/meetings/meetingMutations.js.map +1 -1
- package/dist/rest/RealtimeRecordingHandler.d.ts +49 -0
- package/dist/rest/RealtimeRecordingHandler.d.ts.map +1 -0
- package/dist/rest/RealtimeRecordingHandler.js +383 -0
- package/dist/rest/RealtimeRecordingHandler.js.map +1 -0
- package/dist/rest/ViewOperationsHandler.d.ts +3 -1
- package/dist/rest/ViewOperationsHandler.d.ts.map +1 -1
- package/dist/rest/ViewOperationsHandler.js +21 -12
- package/dist/rest/ViewOperationsHandler.js.map +1 -1
- package/dist/rest/setupRESTEndpoints.d.ts +6 -0
- package/dist/rest/setupRESTEndpoints.d.ts.map +1 -1
- package/dist/rest/setupRESTEndpoints.js +6 -0
- package/dist/rest/setupRESTEndpoints.js.map +1 -1
- package/dist/serverExtensionReservedRoots.d.ts +12 -10
- package/dist/serverExtensionReservedRoots.d.ts.map +1 -1
- package/dist/serverExtensionReservedRoots.js +14 -17
- package/dist/serverExtensionReservedRoots.js.map +1 -1
- package/dist/services/MJStorageBlobStore.d.ts +8 -1
- package/dist/services/MJStorageBlobStore.d.ts.map +1 -1
- package/dist/services/MJStorageBlobStore.js +25 -19
- package/dist/services/MJStorageBlobStore.js.map +1 -1
- package/dist/services/StartTaskGraphDispatcher.js +2 -2
- package/dist/services/StartTaskGraphDispatcher.js.map +1 -1
- package/dist/services/TaskGraphActionRunner.d.ts +5 -3
- package/dist/services/TaskGraphActionRunner.d.ts.map +1 -1
- package/dist/services/TaskGraphActionRunner.js +27 -5
- package/dist/services/TaskGraphActionRunner.js.map +1 -1
- package/dist/services/TaskGraphAgentRunner.d.ts +14 -2
- package/dist/services/TaskGraphAgentRunner.d.ts.map +1 -1
- package/dist/services/TaskGraphAgentRunner.js +157 -9
- package/dist/services/TaskGraphAgentRunner.js.map +1 -1
- package/dist/services/TaskGraphContinuationDeliverer.d.ts +57 -4
- package/dist/services/TaskGraphContinuationDeliverer.d.ts.map +1 -1
- package/dist/services/TaskGraphContinuationDeliverer.js +607 -18
- package/dist/services/TaskGraphContinuationDeliverer.js.map +1 -1
- package/dist/sharedCache.d.ts +105 -0
- package/dist/sharedCache.d.ts.map +1 -0
- package/dist/sharedCache.js +279 -0
- package/dist/sharedCache.js.map +1 -0
- package/dist/types.d.ts +6 -0
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js.map +1 -1
- package/package.json +99 -96
- package/src/__tests__/ActionResolver.authorization.test.ts +353 -0
- package/src/__tests__/AdhocQueryResolver.sqlAuthorizer.test.ts +104 -0
- package/src/__tests__/BridgeHostInstance.test.ts +232 -0
- package/src/__tests__/ClientToolRequestResolver.test.ts +116 -0
- package/src/__tests__/DatasetResolver.itemFilters.test.ts +201 -0
- package/src/__tests__/EntityRecordNameResolver.rowSecurity.test.ts +152 -0
- package/src/__tests__/FetchEntityVectorsResolver.test.ts +433 -0
- package/src/__tests__/FileResolver.storageAccess.test.ts +562 -0
- package/src/__tests__/GetDataContextDataResolver.sqlItems.test.ts +416 -0
- package/src/__tests__/HostInstance.test.ts +84 -0
- package/src/__tests__/HumanHandoffResolver.test.ts +17 -0
- package/src/__tests__/ListOperationsResolver.adhocScreen.test.ts +137 -0
- package/src/__tests__/LoginScreenEngine.test.ts +86 -0
- package/src/__tests__/MJStorageBlobStore.storageGate.test.ts +63 -0
- package/src/__tests__/MeetingResolver.test.ts +75 -1
- package/src/__tests__/RealtimeBridgeResolver.test.ts +415 -6
- package/src/__tests__/RealtimeClientSessionResolver.configTamper.test.ts +383 -0
- package/src/__tests__/RealtimeClientSessionResolver.test.ts +682 -58
- package/src/__tests__/RealtimeProxyServer.test.ts +16 -1
- package/src/__tests__/RealtimeRelay.test.ts +876 -0
- package/src/__tests__/RecordingAssemblyScheduler.test.ts +178 -0
- package/src/__tests__/RemoteBrowserActionResolver.goalRunLink.test.ts +129 -0
- package/src/__tests__/ResolverBase.adhocReadScope.test.ts +133 -2
- package/src/__tests__/ResolverBase.aggregateScreen.test.ts +174 -0
- package/src/__tests__/ResolverBase.balancedClause.test.ts +155 -0
- package/src/__tests__/ResolverBase.clauseUnscopedRead.test.ts +127 -0
- package/src/__tests__/ResolverBase.clientOldValues.test.ts +212 -6
- package/src/__tests__/ResolverBase.filterEscaping.test.ts +5 -2
- package/src/__tests__/ReturningVisitorRecap.test.ts +115 -0
- package/src/__tests__/RunAIAgentResolver.branch.test.ts +170 -0
- package/src/__tests__/RunAIAgentResolver.historyFrom.test.ts +6 -4
- package/src/__tests__/RunAIAgentResolver.runDataGuard.test.ts +258 -0
- package/src/__tests__/RunAIAgentResolver.stoppedPredecessor.test.ts +166 -0
- package/src/__tests__/RunTemplateResolver.test.ts +132 -0
- package/src/__tests__/RunViewResolver.cacheCheckForwarding.test.ts +63 -0
- package/src/__tests__/RunViewResolver.cacheCheckScreen.test.ts +165 -0
- package/src/__tests__/SearchKnowledgeStreamResolver.test.ts +161 -0
- package/src/__tests__/SessionJanitor.test.ts +1203 -21
- package/src/__tests__/SessionManager.test.ts +240 -17
- package/src/__tests__/SessionRunIDVerifier.test.ts +251 -0
- package/src/__tests__/SyncRolesUsersResolver.userRoles.test.ts +97 -0
- package/src/__tests__/TaskGraphActionRunner.durablePayload.test.ts +25 -0
- package/src/__tests__/TaskGraphAgentRunner.test.ts +266 -0
- package/src/__tests__/TaskGraphContinuationDeliverer.test.ts +403 -22
- package/src/__tests__/TaskGraphFrameResolver.test.ts +22 -0
- package/src/__tests__/TestQuerySQLResolver.test.ts +274 -0
- package/src/__tests__/TransactionGroupResolver.refusals.test.ts +98 -1
- package/src/__tests__/UpdateMJDataContextItem.oldValues.test.ts +220 -0
- package/src/__tests__/UserAvatarResolver.test.ts +255 -0
- package/src/__tests__/UserResolver.currentUser.test.ts +16 -1
- package/src/__tests__/ViewOperationsHandler.clauseScreen.test.ts +157 -0
- package/src/__tests__/actionAuthorization.test.ts +130 -0
- package/src/__tests__/agent-run-data-guard.test.ts +130 -0
- package/src/__tests__/agentVisionConsentAudit.test.ts +118 -0
- package/src/__tests__/apiRootBoot.test.ts +202 -0
- package/src/__tests__/avatarInputValidation.test.ts +160 -0
- package/src/__tests__/cacheInvalidationRecordData.test.ts +64 -0
- package/src/__tests__/conversationRunEvents.test.ts +56 -14
- package/src/__tests__/globalCors.test.ts +217 -0
- package/src/__tests__/isolatedProviderTransactions.test.ts +169 -0
- package/src/__tests__/magicLinkService.consume.test.ts +6 -0
- package/src/__tests__/magicLinkService.provisionLog.test.ts +5 -0
- package/src/__tests__/multiTenancy.postgresRewrite.test.ts +181 -0
- package/src/__tests__/multiTenancy.security.test.ts +51 -0
- package/src/__tests__/multiTenancy.test.ts +1 -1
- package/src/__tests__/newUsers.template.test.ts +151 -0
- package/src/__tests__/newUsers.test.ts +74 -5
- package/src/__tests__/orphanedConversationDetailReconciler.test.ts +17 -2
- package/src/__tests__/ownedRealtimeSession.test.ts +39 -0
- package/src/__tests__/pushStatusResolver.filter.test.ts +7 -0
- package/src/__tests__/realtimeRecordingHandler.test.ts +652 -0
- package/src/__tests__/realtimeSessions/RealtimeSessionEventService.test.ts +201 -0
- package/src/__tests__/realtimeSessions/RealtimeSessionEventsResolver.test.ts +215 -0
- package/src/__tests__/realtimeSessions/RealtimeSessionVerificationResolver.test.ts +102 -0
- package/src/__tests__/realtimeSessions/RealtimeSessionVerificationService.test.ts +349 -0
- package/src/__tests__/realtimeSessions/RealtimeVerifyRouter.test.ts +131 -0
- package/src/__tests__/realtimeSessions/SlidingWindowRateLimiter.test.ts +56 -0
- package/src/__tests__/realtimeSessions/helpers.ts +4 -0
- package/src/__tests__/realtimeSessions/sessionAccess.test.ts +129 -0
- package/src/__tests__/realtimeSessions/sessionConfigStamps.test.ts +124 -0
- package/src/__tests__/realtimeSessions/verificationCore.test.ts +355 -0
- package/src/__tests__/realtimeSessions/verificationPages.test.ts +84 -0
- package/src/__tests__/realtimeSessions/verificationPolicy.test.ts +226 -0
- package/src/__tests__/realtimeSessions/verificationWorkflow.test.ts +633 -0
- package/src/__tests__/resolverBase.fls.test.ts +87 -4
- package/src/__tests__/serverExtensionHostOverlay.test.ts +66 -0
- package/src/__tests__/serverExtensionReservedRoots.test.ts +11 -96
- package/src/__tests__/sharedCache.test.ts +312 -0
- package/src/__tests__/widgetGuestElevation.test.ts +44 -0
- package/src/agentSessions/BridgeHostInstance.ts +32 -0
- package/src/agentSessions/HostInstance.ts +124 -28
- package/src/agentSessions/ReturningVisitorRecap.ts +7 -3
- package/src/agentSessions/SessionJanitor.ts +821 -59
- package/src/agentSessions/SessionManager.ts +138 -26
- package/src/agentSessions/SessionRunIDVerifier.ts +171 -0
- package/src/agentSessions/index.ts +10 -3
- package/src/apiRoot.ts +78 -0
- package/src/auth/AuthProviderCatalogRouter.ts +26 -0
- package/src/auth/LoginScreenEngine.ts +50 -0
- package/src/auth/actionAuthorization.ts +116 -0
- package/src/auth/index.ts +4 -8
- package/src/auth/magicLink/MagicLinkRouter.ts +3 -2
- package/src/auth/magicLink/MagicLinkService.ts +6 -3
- package/src/auth/newUsers.ts +99 -11
- package/src/config.ts +171 -5
- package/src/context.ts +15 -10
- package/src/coreRoutes.ts +166 -0
- package/src/generated/graphql-schemas/__mj.ts +1815 -57
- package/src/generic/CacheInvalidationResolver.ts +73 -18
- package/src/generic/OrphanedConversationDetailReconciler.ts +3 -3
- package/src/generic/PushStatusResolver.ts +1 -1
- package/src/generic/ResolverBase.ts +335 -326
- package/src/generic/RunViewResolver.ts +21 -0
- package/src/globalCors.ts +71 -0
- package/src/index.ts +231 -300
- package/src/isolatedProvider.ts +22 -0
- package/src/multiTenancy/index.ts +24 -2
- package/src/realtimeProxy/RealtimeProxyServer.ts +148 -16
- package/src/realtimeProxy/RealtimeRelayTunnel.ts +645 -0
- package/src/realtimeSessions/README.md +179 -0
- package/src/realtimeSessions/RealtimeSessionEventService.ts +274 -0
- package/src/realtimeSessions/RealtimeSessionVerificationService.ts +168 -0
- package/src/realtimeSessions/RealtimeVerifyRouter.ts +109 -0
- package/src/realtimeSessions/RecordingAssemblyScheduler.ts +234 -0
- package/src/realtimeSessions/SessionVerificationPortsBase.ts +189 -0
- package/src/realtimeSessions/SlidingWindowRateLimiter.ts +92 -0
- package/src/realtimeSessions/index.ts +18 -0
- package/src/realtimeSessions/ownedRealtimeSession.ts +55 -0
- package/src/realtimeSessions/sessionAccess.ts +145 -0
- package/src/realtimeSessions/sessionConfigStamps.ts +123 -0
- package/src/realtimeSessions/subscriptionAuthorization.ts +116 -0
- package/src/realtimeSessions/verificationCore.ts +502 -0
- package/src/realtimeSessions/verificationPages.ts +149 -0
- package/src/realtimeSessions/verificationPolicy.ts +321 -0
- package/src/realtimeSessions/verificationWorkflow.ts +702 -0
- package/src/realtimeWidget/widgetGuestElevation.ts +34 -2
- package/src/resolvers/ActionResolver.ts +84 -21
- package/src/resolvers/AdhocQueryResolver.ts +24 -6
- package/src/resolvers/ArtifactFileResolver.ts +9 -8
- package/src/resolvers/CacheStatsResolver.ts +89 -2
- package/src/resolvers/ClientToolRequestResolver.ts +25 -7
- package/src/resolvers/ConversationRunEventsResolver.ts +15 -11
- package/src/resolvers/DatasetResolver.ts +70 -10
- package/src/resolvers/EntityRecordNameResolver.ts +3 -2
- package/src/resolvers/FetchEntityVectorsResolver.ts +179 -2
- package/src/resolvers/FileResolver.ts +321 -106
- package/src/resolvers/GetDataContextDataResolver.ts +139 -41
- package/src/resolvers/GetDataResolver.ts +6 -3
- package/src/resolvers/HumanHandoffResolver.ts +8 -0
- package/src/resolvers/IntegrationDiscoveryResolver.ts +4 -2
- package/src/resolvers/MCPResolver.ts +8 -5
- package/src/resolvers/QueryResolver.ts +11 -0
- package/src/resolvers/RealtimeBridgeResolver.ts +163 -11
- package/src/resolvers/RealtimeClientSessionResolver.ts +511 -129
- package/src/resolvers/RealtimeSessionEventsResolver.ts +133 -0
- package/src/resolvers/RealtimeSessionVerificationResolver.ts +174 -0
- package/src/resolvers/RemoteBrowserActionResolver.ts +11 -1
- package/src/resolvers/RunAIAgentResolver.ts +116 -14
- package/src/resolvers/RunTemplateResolver.ts +13 -12
- package/src/resolvers/SearchKnowledgeStreamResolver.ts +19 -3
- package/src/resolvers/SqlLoggingConfigResolver.ts +2 -4
- package/src/resolvers/SyncDataResolver.ts +6 -2
- package/src/resolvers/SyncRolesUsersResolver.ts +24 -6
- package/src/resolvers/TaskGraphFrameResolver.ts +33 -1
- package/src/resolvers/TestQuerySQLResolver.ts +68 -13
- package/src/resolvers/TransactionGroupResolver.ts +131 -27
- package/src/resolvers/UserAvatarResolver.ts +111 -0
- package/src/resolvers/UserResolver.ts +2 -16
- package/src/resolvers/__tests__/GetDataResolver.validation.test.ts +95 -0
- package/src/resolvers/agent-run-data-guard.ts +89 -0
- package/src/resolvers/agentVisionConsentAudit.ts +82 -0
- package/src/resolvers/avatarInputValidation.ts +123 -0
- package/src/resolvers/currentUserRoles.ts +32 -1
- package/src/resolvers/meetings/meetingMutations.ts +21 -0
- package/src/rest/RealtimeRecordingHandler.ts +464 -0
- package/src/rest/ViewOperationsHandler.ts +29 -13
- package/src/rest/setupRESTEndpoints.ts +6 -0
- package/src/serverExtensionReservedRoots.ts +14 -17
- package/src/services/MJStorageBlobStore.ts +31 -30
- package/src/services/StartTaskGraphDispatcher.ts +2 -2
- package/src/services/TaskGraphActionRunner.ts +25 -5
- package/src/services/TaskGraphAgentRunner.ts +188 -11
- package/src/services/TaskGraphContinuationDeliverer.ts +713 -17
- package/src/sharedCache.ts +305 -0
- package/src/types.ts +7 -0
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { LogError, UserInfo, IMetadataProvider, Metadata } from '@memberjunction/core';
|
|
2
2
|
import { MJGlobal } from '@memberjunction/global';
|
|
3
3
|
import type { MJFileEntity, MJFileStorageProviderEntity } from '@memberjunction/core-entities';
|
|
4
|
-
import { FileStorageBase, FileStorageEngine } from '@memberjunction/storage';
|
|
4
|
+
import { FileStorageBase, FileStorageEngine, StorageAccessEvaluator, StorageAccountAccess, StorageObjectKeyOf } from '@memberjunction/storage';
|
|
5
5
|
import type {
|
|
6
6
|
AttachmentBlobUploadInput,
|
|
7
7
|
AttachmentBlobUploadResult,
|
|
@@ -113,7 +113,7 @@ export class MJStorageBlobStore implements IAttachmentBlobStore {
|
|
|
113
113
|
provider?: IMetadataProvider
|
|
114
114
|
): Promise<string | null> {
|
|
115
115
|
try {
|
|
116
|
-
const resolved = await this.resolveFileAndDriver(fileId, contextUser, provider);
|
|
116
|
+
const resolved = await this.resolveFileAndDriver(fileId, contextUser, 'Read', provider);
|
|
117
117
|
if (!resolved) return null;
|
|
118
118
|
|
|
119
119
|
const content = await resolved.driver.GetObject({ fullPath: resolved.objectKey });
|
|
@@ -132,7 +132,7 @@ export class MJStorageBlobStore implements IAttachmentBlobStore {
|
|
|
132
132
|
provider?: IMetadataProvider
|
|
133
133
|
): Promise<string | null> {
|
|
134
134
|
try {
|
|
135
|
-
const resolved = await this.resolveFileAndDriver(fileId, contextUser, provider);
|
|
135
|
+
const resolved = await this.resolveFileAndDriver(fileId, contextUser, 'Read', provider);
|
|
136
136
|
if (!resolved) return null;
|
|
137
137
|
return resolved.driver.CreatePreAuthDownloadUrl(resolved.objectKey);
|
|
138
138
|
} catch (err) {
|
|
@@ -148,7 +148,7 @@ export class MJStorageBlobStore implements IAttachmentBlobStore {
|
|
|
148
148
|
provider?: IMetadataProvider
|
|
149
149
|
): Promise<boolean> {
|
|
150
150
|
try {
|
|
151
|
-
const resolved = await this.resolveFileAndDriver(fileId, contextUser, provider);
|
|
151
|
+
const resolved = await this.resolveFileAndDriver(fileId, contextUser, 'Write', provider);
|
|
152
152
|
if (!resolved) return false;
|
|
153
153
|
|
|
154
154
|
const deleted = await resolved.driver.DeleteObject(resolved.objectKey);
|
|
@@ -165,45 +165,46 @@ export class MJStorageBlobStore implements IAttachmentBlobStore {
|
|
|
165
165
|
}
|
|
166
166
|
|
|
167
167
|
/**
|
|
168
|
-
* Loads a file
|
|
168
|
+
* Loads a file (as the caller), and a driver able to act on it — through the storage gate.
|
|
169
169
|
*
|
|
170
170
|
* Shared by download, URL and delete, which previously repeated this block three times with
|
|
171
171
|
* subtly different fallbacks — the account-credential path existed in only one of them.
|
|
172
|
+
*
|
|
173
|
+
* When an account links to the file's provider, `FileStorageEngine.ResolveFileObject` resolves it and refuses unless
|
|
174
|
+
* the caller may use that account for `access` and may read every `MJ: Files` row tracking the object (a row can
|
|
175
|
+
* alias another row's object). Otherwise the environment-configured driver serves the file; there is no account to
|
|
176
|
+
* gate, so only the tracked-file rule applies. A refusal throws, and each caller logs it and reports failure.
|
|
172
177
|
*/
|
|
173
178
|
private async resolveFileAndDriver(
|
|
174
179
|
fileId: string,
|
|
175
180
|
contextUser: UserInfo,
|
|
181
|
+
access: StorageAccountAccess,
|
|
176
182
|
provider?: IMetadataProvider
|
|
177
183
|
): Promise<{ file: MJFileEntity; driver: FileStorageBase; objectKey: string } | null> {
|
|
178
184
|
const md = provider ?? Metadata.Provider;
|
|
179
|
-
|
|
180
|
-
// Load the engine before asking it anything. `Accounts` returns an empty array when it has
|
|
181
|
-
// not been configured, so on a cold process the account-credential branch below would be
|
|
182
|
-
// skipped silently and the driver would fall back to environment-only credentials — which
|
|
183
|
-
// then fails to read a file that is perfectly readable. Every other MJServer call site
|
|
184
|
-
// configures immediately before use for the same reason.
|
|
185
|
-
await FileStorageEngine.Instance.Config(false, contextUser);
|
|
186
|
-
|
|
187
185
|
const file = await md.GetEntityObject<MJFileEntity>('MJ: Files', contextUser);
|
|
188
186
|
if (!(await file.Load(fileId))) return null;
|
|
189
187
|
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
)
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
const matchingAccounts = FileStorageEngine.Instance.GetAccountsByProviderID(file.ProviderID);
|
|
199
|
-
const driver =
|
|
200
|
-
matchingAccounts.length > 0
|
|
201
|
-
? await FileStorageEngine.Instance.GetDriver(matchingAccounts[0].ID, contextUser)
|
|
202
|
-
: MJGlobal.Instance.ClassFactory.CreateInstance<FileStorageBase>(
|
|
203
|
-
FileStorageBase,
|
|
204
|
-
storageProvider.ServerDriverKey
|
|
205
|
-
);
|
|
188
|
+
// Prefer account-scoped credentials (gated) when an account links to this provider. ResolveFileObject configures
|
|
189
|
+
// the engine first, so a cold process does not silently skip this branch.
|
|
190
|
+
const resolved = await FileStorageEngine.Instance.ResolveFileObject(file, contextUser, access, md);
|
|
191
|
+
if (resolved) {
|
|
192
|
+
return { file, driver: resolved.Driver, objectKey: resolved.ObjectKey };
|
|
193
|
+
}
|
|
194
|
+
return this.environmentDriverFor(file, contextUser, md);
|
|
195
|
+
}
|
|
206
196
|
|
|
207
|
-
|
|
197
|
+
/** The environment-configured driver for a file whose provider has no account — after the tracked-file rule. */
|
|
198
|
+
private async environmentDriverFor(
|
|
199
|
+
file: MJFileEntity,
|
|
200
|
+
contextUser: UserInfo,
|
|
201
|
+
md: IMetadataProvider
|
|
202
|
+
): Promise<{ file: MJFileEntity; driver: FileStorageBase; objectKey: string } | null> {
|
|
203
|
+
const storageProvider = await md.GetEntityObject<MJFileStorageProviderEntity>('MJ: File Storage Providers', contextUser);
|
|
204
|
+
if (!(await storageProvider.Load(file.ProviderID))) return null;
|
|
205
|
+
const objectKey = StorageObjectKeyOf(file);
|
|
206
|
+
await StorageAccessEvaluator.Instance.AssertTrackedObjectsReadable(file.ProviderID, [objectKey], contextUser, md);
|
|
207
|
+
const driver = MJGlobal.Instance.ClassFactory.CreateInstance<FileStorageBase>(FileStorageBase, storageProvider.ServerDriverKey);
|
|
208
|
+
return { file, driver, objectKey };
|
|
208
209
|
}
|
|
209
210
|
}
|
|
@@ -75,10 +75,10 @@ export async function StartTaskGraphDispatcher(
|
|
|
75
75
|
{ InstanceID: instanceID ?? defaultInstanceID() },
|
|
76
76
|
// Without this the dispatcher had nowhere to deliver: a finished graph logged its outcome,
|
|
77
77
|
// marked itself delivered, and said nothing to the conversation that asked for it.
|
|
78
|
-
new TaskGraphContinuationDeliverer(providerFactory, contextUser),
|
|
78
|
+
new TaskGraphContinuationDeliverer(providerFactory, contextUser, pubSub),
|
|
79
79
|
// Live signal. Supplied only when a PubSub engine exists — in a worker or a test there is
|
|
80
80
|
// nobody to publish to, and the dispatcher runs identically without one.
|
|
81
|
-
pubSub ? new TaskGraphFrameBroadcaster(pubSub) : undefined,
|
|
81
|
+
pubSub ? new TaskGraphFrameBroadcaster(pubSub, true) : undefined,
|
|
82
82
|
// Action nodes — the third execution shape, beside agents and people. Durable After* entity
|
|
83
83
|
// actions land as these.
|
|
84
84
|
new TaskGraphActionRunner(),
|
|
@@ -35,7 +35,7 @@ export class TaskGraphActionRunner implements TaskActionRunner {
|
|
|
35
35
|
Filters: [],
|
|
36
36
|
});
|
|
37
37
|
|
|
38
|
-
const output = this.buildOutput(result.Params);
|
|
38
|
+
const output = this.buildOutput(result.Params, result.Message);
|
|
39
39
|
const unstorable = this.findUnstorableOutput(output);
|
|
40
40
|
if (unstorable) {
|
|
41
41
|
const message =
|
|
@@ -90,15 +90,35 @@ export class TaskGraphActionRunner implements TaskActionRunner {
|
|
|
90
90
|
* is exactly what the Demo workflow did: step 1 completed with an output payload of `{}` and
|
|
91
91
|
* every downstream branch was skipped, with nothing anywhere reporting a problem.
|
|
92
92
|
*
|
|
93
|
-
* Only `Output` and `Both` params are included
|
|
94
|
-
*
|
|
95
|
-
*
|
|
93
|
+
* Only `Output` and `Both` params are included (plus any structured JSON object returned in
|
|
94
|
+
* `resultMessage`, such as `Create Document`'s `{ handle, documentType, fileName }`). Echoing
|
|
95
|
+
* `Input`-only params back would let a step's own parameters masquerade as its results, so an
|
|
96
|
+
* output mapping could "succeed" by reading the value the step was given rather than the one it
|
|
97
|
+
* produced.
|
|
96
98
|
*/
|
|
97
|
-
private buildOutput(actionParams: ActionParam[]): Record<string, unknown> {
|
|
99
|
+
private buildOutput(actionParams: ActionParam[], resultMessage?: string | null): Record<string, unknown> {
|
|
98
100
|
const output: Record<string, unknown> = {};
|
|
101
|
+
if (typeof resultMessage === 'string') {
|
|
102
|
+
const trimmed = resultMessage.trim();
|
|
103
|
+
if (trimmed.startsWith('{') && trimmed.endsWith('}')) {
|
|
104
|
+
try {
|
|
105
|
+
const parsed: unknown = JSON.parse(trimmed);
|
|
106
|
+
if (parsed && typeof parsed === 'object' && !Array.isArray(parsed)) {
|
|
107
|
+
Object.assign(output, parsed as Record<string, unknown>);
|
|
108
|
+
}
|
|
109
|
+
} catch {
|
|
110
|
+
// Non-JSON prose message; ignore.
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
}
|
|
99
114
|
for (const p of actionParams ?? []) {
|
|
100
115
|
if (p.Type === 'Output' || p.Type === 'Both') output[p.Name] = p.Value;
|
|
101
116
|
}
|
|
117
|
+
if (typeof output.handle === 'string' && output.Handle === undefined) {
|
|
118
|
+
output.Handle = output.handle;
|
|
119
|
+
} else if (typeof output.Handle === 'string' && output.handle === undefined) {
|
|
120
|
+
output.handle = output.Handle;
|
|
121
|
+
}
|
|
102
122
|
return output;
|
|
103
123
|
}
|
|
104
124
|
|
|
@@ -13,8 +13,12 @@
|
|
|
13
13
|
* @module @memberjunction/server
|
|
14
14
|
*/
|
|
15
15
|
import { AgentRunner } from '@memberjunction/ai-agents';
|
|
16
|
+
import { AIEngine } from '@memberjunction/aiengine';
|
|
16
17
|
import { ChatMessageRole } from '@memberjunction/ai';
|
|
17
|
-
import { LogError } from '@memberjunction/core';
|
|
18
|
+
import { LogError, type UserInfo } from '@memberjunction/core';
|
|
19
|
+
import { UUIDsEqual } from '@memberjunction/global';
|
|
20
|
+
import { UserCache } from '@memberjunction/generic-database-provider';
|
|
21
|
+
import { MJTaskEntity } from '@memberjunction/core-entities';
|
|
18
22
|
import { MJAIAgentEntityExtended, MJAIAgentRunEntityExtended } from '@memberjunction/ai-core-plus';
|
|
19
23
|
import type { AgentExecutionProgressCallback } from '@memberjunction/ai-core-plus';
|
|
20
24
|
import type { TaskAgentRunner, TaskAgentRunParams, TaskAgentRunResult } from '@memberjunction/task-graph';
|
|
@@ -27,14 +31,41 @@ export class TaskGraphAgentRunner implements TaskAgentRunner {
|
|
|
27
31
|
return { Success: false, ErrorMessage: `Agent ${params.AgentID} could not be loaded.` };
|
|
28
32
|
}
|
|
29
33
|
|
|
30
|
-
const
|
|
34
|
+
const parentRun = await this.loadSubmittingRun(params);
|
|
35
|
+
const actingUser = this.resolveActingUser(parentRun?.UserID, params.ContextUser);
|
|
36
|
+
const engineLoaded = (AIEngine.Instance?.Agents?.length ?? 0) > 0;
|
|
37
|
+
if (engineLoaded && actingUser && typeof AIEngine.Instance.CanUserRunAgent === 'function') {
|
|
38
|
+
const permitted = await AIEngine.Instance.CanUserRunAgent(agent.ID, actingUser);
|
|
39
|
+
if (!permitted) {
|
|
40
|
+
return {
|
|
41
|
+
Success: false,
|
|
42
|
+
ErrorMessage: `User does not have permission to run agent "${agent.Name}".`,
|
|
43
|
+
};
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
const taskContext = await this.resolveTaskContext(params);
|
|
47
|
+
const conversationDetailId =
|
|
48
|
+
parentRun?.ConversationDetailID ?? taskContext.conversationDetailId ?? undefined;
|
|
49
|
+
|
|
50
|
+
const runner = new AgentRunner(params.Provider);
|
|
51
|
+
const result = await runner.RunAgent({
|
|
31
52
|
agent,
|
|
32
|
-
|
|
33
|
-
|
|
53
|
+
provider: params.Provider,
|
|
54
|
+
conversationMessages: [{
|
|
55
|
+
role: ChatMessageRole.user,
|
|
56
|
+
content: this.buildPrompt(params, taskContext.name, taskContext.description),
|
|
57
|
+
}],
|
|
58
|
+
contextUser: actingUser,
|
|
59
|
+
conversationId: parentRun?.ConversationID ?? undefined,
|
|
60
|
+
// A task-graph step receives its explicit InputPayload and DependencyOutputs.
|
|
61
|
+
// Passing an empty inputArtifacts array prevents AgentRunner.hydrateConversationArtifacts
|
|
62
|
+
// from loading unrelated artifacts from earlier turns in the conversation and tempting
|
|
63
|
+
// the step agent to emit `version-source` against a prior turn's artifact.
|
|
64
|
+
inputArtifacts: [],
|
|
34
65
|
// Inherited from the graph, so a graph this run goes on to emit is one hop deeper
|
|
35
66
|
// rather than starting the chain over. Without it MAX_REINVOKE_DEPTH never fires.
|
|
36
67
|
continuationDepth: params.ContinuationDepth ?? 0,
|
|
37
|
-
parentRun
|
|
68
|
+
parentRun,
|
|
38
69
|
// The bridge from the agent's own progress stream up to graph-level observers: the
|
|
39
70
|
// dispatcher turns these into rate-limited `NodeProgress` frames, which is how a
|
|
40
71
|
// running Agent step shows "what it is doing right now" on the workflow canvas.
|
|
@@ -42,6 +73,41 @@ export class TaskGraphAgentRunner implements TaskAgentRunner {
|
|
|
42
73
|
});
|
|
43
74
|
|
|
44
75
|
const success = result?.success === true;
|
|
76
|
+
if (
|
|
77
|
+
success &&
|
|
78
|
+
result?.payload != null &&
|
|
79
|
+
conversationDetailId &&
|
|
80
|
+
result.artifactDirective?.behavior !== 'suppress' &&
|
|
81
|
+
typeof runner.ProcessAgentArtifacts === 'function'
|
|
82
|
+
) {
|
|
83
|
+
try {
|
|
84
|
+
// Each step in a task graph is an independent workflow node and multiple steps
|
|
85
|
+
// in the same graph share the originating ConversationDetailID. Enforcing
|
|
86
|
+
// `behavior: 'create-new'` (while preserving any directive name/description)
|
|
87
|
+
// prevents a step from accidentally versioning an earlier turn's artifact or
|
|
88
|
+
// overwriting a sibling DAG step's artifact via FindPreviousArtifactForMessage.
|
|
89
|
+
const stepArtifactResult = {
|
|
90
|
+
...result,
|
|
91
|
+
artifactDirective: {
|
|
92
|
+
...result.artifactDirective,
|
|
93
|
+
behavior: 'create-new' as const,
|
|
94
|
+
},
|
|
95
|
+
};
|
|
96
|
+
await runner.ProcessAgentArtifacts(
|
|
97
|
+
stepArtifactResult,
|
|
98
|
+
conversationDetailId,
|
|
99
|
+
undefined,
|
|
100
|
+
actingUser,
|
|
101
|
+
params.Provider,
|
|
102
|
+
);
|
|
103
|
+
} catch (artifactErr) {
|
|
104
|
+
LogError(
|
|
105
|
+
`[TaskGraphAgentRunner] Task ${params.TaskID}: artifact persistence failed (non-fatal): ` +
|
|
106
|
+
`${artifactErr instanceof Error ? artifactErr.message : String(artifactErr)}`,
|
|
107
|
+
);
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
|
|
45
111
|
return {
|
|
46
112
|
Success: success,
|
|
47
113
|
Output: this.extractOutput(result),
|
|
@@ -55,6 +121,58 @@ export class TaskGraphAgentRunner implements TaskAgentRunner {
|
|
|
55
121
|
}
|
|
56
122
|
}
|
|
57
123
|
|
|
124
|
+
private resolveActingUser(ownerUserId: string | null | undefined, fallback: UserInfo): UserInfo {
|
|
125
|
+
if (!ownerUserId) {
|
|
126
|
+
return fallback;
|
|
127
|
+
}
|
|
128
|
+
try {
|
|
129
|
+
const users = UserCache.Instance?.Users ?? UserCache.Users ?? [];
|
|
130
|
+
const matched = users.find((u) => UUIDsEqual(u.ID, ownerUserId));
|
|
131
|
+
if (matched) {
|
|
132
|
+
return matched;
|
|
133
|
+
}
|
|
134
|
+
} catch {
|
|
135
|
+
// Fall back to params.ContextUser when UserCache is not initialized.
|
|
136
|
+
}
|
|
137
|
+
return fallback;
|
|
138
|
+
}
|
|
139
|
+
|
|
140
|
+
/**
|
|
141
|
+
* Resolves the step task's `Name`, `Description`, and originating `ConversationDetailID`
|
|
142
|
+
* (falling back to the parent workflow task row for `ConversationDetailID`).
|
|
143
|
+
*/
|
|
144
|
+
private async resolveTaskContext(params: TaskAgentRunParams): Promise<{
|
|
145
|
+
name: string | null;
|
|
146
|
+
description: string | null;
|
|
147
|
+
conversationDetailId: string | null;
|
|
148
|
+
}> {
|
|
149
|
+
if (!params.TaskID) {
|
|
150
|
+
return { name: null, description: null, conversationDetailId: null };
|
|
151
|
+
}
|
|
152
|
+
try {
|
|
153
|
+
const task = await params.Provider.GetEntityObject<MJTaskEntity>('MJ: Tasks', params.ContextUser);
|
|
154
|
+
if (!(await task.Load(params.TaskID))) {
|
|
155
|
+
return { name: null, description: null, conversationDetailId: null };
|
|
156
|
+
}
|
|
157
|
+
const rawDesc = (task.Description || '').trim();
|
|
158
|
+
const cleanDesc = rawDesc.split(/\n\n--- (?:Output|Error) ---\n/)[0]?.trim() || null;
|
|
159
|
+
let conversationDetailId = task.ConversationDetailID ?? null;
|
|
160
|
+
if (!conversationDetailId && task.ParentID) {
|
|
161
|
+
const parentTask = await params.Provider.GetEntityObject<MJTaskEntity>('MJ: Tasks', params.ContextUser);
|
|
162
|
+
if (await parentTask.Load(task.ParentID)) {
|
|
163
|
+
conversationDetailId = parentTask.ConversationDetailID ?? null;
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
return {
|
|
167
|
+
name: task.Name?.trim() || null,
|
|
168
|
+
description: cleanDesc,
|
|
169
|
+
conversationDetailId,
|
|
170
|
+
};
|
|
171
|
+
} catch {
|
|
172
|
+
return { name: null, description: null, conversationDetailId: null };
|
|
173
|
+
}
|
|
174
|
+
}
|
|
175
|
+
|
|
58
176
|
/**
|
|
59
177
|
* Adapts the agent framework's progress callback onto the dispatcher's plain sink.
|
|
60
178
|
*
|
|
@@ -104,15 +222,25 @@ export class TaskGraphAgentRunner implements TaskAgentRunner {
|
|
|
104
222
|
}
|
|
105
223
|
|
|
106
224
|
/**
|
|
107
|
-
* Builds the agent's instruction from the task's
|
|
225
|
+
* Builds the agent's instruction from the task's name/description, its structured input payload,
|
|
226
|
+
* and its dependencies' outputs.
|
|
108
227
|
*
|
|
109
228
|
* Dependency outputs are included inline because a task's whole reason for depending on another
|
|
110
229
|
* is to consume what it produced. They are rendered as labelled JSON rather than prose so the
|
|
111
230
|
* agent can parse them reliably rather than inferring structure from formatting.
|
|
112
231
|
*/
|
|
113
|
-
private buildPrompt(
|
|
232
|
+
private buildPrompt(
|
|
233
|
+
params: TaskAgentRunParams,
|
|
234
|
+
taskName?: string | null,
|
|
235
|
+
taskDescription?: string | null,
|
|
236
|
+
): string {
|
|
114
237
|
const sections: string[] = [];
|
|
115
238
|
|
|
239
|
+
if (taskName || taskDescription) {
|
|
240
|
+
const header = taskName ? `## Task: ${taskName}` : '## Task Description';
|
|
241
|
+
sections.push(taskDescription ? `${header}\n${taskDescription}` : header);
|
|
242
|
+
}
|
|
243
|
+
|
|
116
244
|
if (params.InputPayload != null) {
|
|
117
245
|
sections.push(`## Task input\n\`\`\`json\n${JSON.stringify(params.InputPayload, null, 2)}\n\`\`\``);
|
|
118
246
|
}
|
|
@@ -129,10 +257,59 @@ export class TaskGraphAgentRunner implements TaskAgentRunner {
|
|
|
129
257
|
: 'Execute this task.';
|
|
130
258
|
}
|
|
131
259
|
|
|
132
|
-
/**
|
|
260
|
+
/**
|
|
261
|
+
* Prefers a structured payload over prose so downstream tasks get data rather than text,
|
|
262
|
+
* while preserving `agentRun.Message` when the payload object has no `message`/`summary`
|
|
263
|
+
* property (e.g., when a sub-agent returns a clarification question or human-readable summary)
|
|
264
|
+
* and normalizing `results` / `result` / `succeeded` for downstream condition evaluation.
|
|
265
|
+
*/
|
|
133
266
|
private extractOutput(result: unknown): unknown {
|
|
134
|
-
const r = result as {
|
|
135
|
-
|
|
136
|
-
|
|
267
|
+
const r = result as {
|
|
268
|
+
success?: boolean;
|
|
269
|
+
payload?: unknown;
|
|
270
|
+
agentRun?: { Message?: string; FinalStep?: string };
|
|
271
|
+
} | null;
|
|
272
|
+
const runMessage = typeof r?.agentRun?.Message === 'string' ? r.agentRun.Message.trim() : '';
|
|
273
|
+
const isChatStop = r?.agentRun?.FinalStep === 'Chat';
|
|
274
|
+
if (r?.payload != null) {
|
|
275
|
+
if (typeof r.payload === 'object' && !Array.isArray(r.payload)) {
|
|
276
|
+
const payloadObj = r.payload as Record<string, unknown>;
|
|
277
|
+
const enriched: Record<string, unknown> = { ...payloadObj };
|
|
278
|
+
|
|
279
|
+
if (
|
|
280
|
+
enriched.results &&
|
|
281
|
+
typeof enriched.results === 'object' &&
|
|
282
|
+
!Array.isArray(enriched.results)
|
|
283
|
+
) {
|
|
284
|
+
for (const [k, v] of Object.entries(enriched.results as Record<string, unknown>)) {
|
|
285
|
+
if (enriched[k] === undefined) {
|
|
286
|
+
enriched[k] = v;
|
|
287
|
+
}
|
|
288
|
+
}
|
|
289
|
+
}
|
|
290
|
+
if (enriched.results !== undefined && enriched.result === undefined) {
|
|
291
|
+
enriched.result = enriched.results;
|
|
292
|
+
} else if (enriched.result !== undefined && enriched.results === undefined) {
|
|
293
|
+
enriched.results = enriched.result;
|
|
294
|
+
}
|
|
295
|
+
|
|
296
|
+
if (runMessage && enriched.message == null && enriched.summary == null) {
|
|
297
|
+
enriched.message = runMessage;
|
|
298
|
+
}
|
|
299
|
+
if (isChatStop) {
|
|
300
|
+
enriched.finalStep = 'Chat';
|
|
301
|
+
} else if (typeof r.success === 'boolean' && enriched.succeeded === undefined) {
|
|
302
|
+
enriched.succeeded = r.success;
|
|
303
|
+
}
|
|
304
|
+
return enriched;
|
|
305
|
+
}
|
|
306
|
+
return r.payload;
|
|
307
|
+
}
|
|
308
|
+
if (runMessage) {
|
|
309
|
+
return isChatStop
|
|
310
|
+
? { message: runMessage, finalStep: 'Chat' }
|
|
311
|
+
: { message: runMessage, succeeded: r?.success === true };
|
|
312
|
+
}
|
|
313
|
+
return null;
|
|
137
314
|
}
|
|
138
315
|
}
|