@memberjunction/server 6.2.0-edge.0 → 6.2.0-edge.2
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/dist/.tsbuildinfo +1 -1
- package/dist/agentSessions/ReturningVisitorRecap.d.ts +2 -0
- package/dist/agentSessions/ReturningVisitorRecap.d.ts.map +1 -1
- package/dist/agentSessions/ReturningVisitorRecap.js +5 -1
- package/dist/agentSessions/ReturningVisitorRecap.js.map +1 -1
- package/dist/agentSessions/SessionManager.js +2 -2
- package/dist/agentSessions/remoteBrowserGoalEngine.d.ts +8 -0
- package/dist/agentSessions/remoteBrowserGoalEngine.d.ts.map +1 -1
- package/dist/agentSessions/remoteBrowserGoalEngine.js +21 -5
- package/dist/agentSessions/remoteBrowserGoalEngine.js.map +1 -1
- package/dist/auth/AuthProviderCatalogRouter.d.ts +2 -0
- package/dist/auth/AuthProviderCatalogRouter.d.ts.map +1 -1
- package/dist/auth/AuthProviderCatalogRouter.js +5 -1
- package/dist/auth/AuthProviderCatalogRouter.js.map +1 -1
- package/dist/auth/index.d.ts +20 -1
- package/dist/auth/index.d.ts.map +1 -1
- package/dist/auth/index.js +20 -10
- package/dist/auth/index.js.map +1 -1
- package/dist/auth/initializeProviders.d.ts +8 -0
- package/dist/auth/initializeProviders.d.ts.map +1 -1
- package/dist/auth/initializeProviders.js +21 -5
- package/dist/auth/initializeProviders.js.map +1 -1
- package/dist/auth/magicLink/MagicLinkRouter.d.ts +9 -0
- package/dist/auth/magicLink/MagicLinkRouter.d.ts.map +1 -1
- package/dist/auth/magicLink/MagicLinkRouter.js +22 -10
- package/dist/auth/magicLink/MagicLinkRouter.js.map +1 -1
- package/dist/auth/magicLink/MagicLinkService.d.ts +17 -15
- package/dist/auth/magicLink/MagicLinkService.d.ts.map +1 -1
- package/dist/auth/magicLink/MagicLinkService.js +65 -51
- package/dist/auth/magicLink/MagicLinkService.js.map +1 -1
- package/dist/auth/magicLink/index.d.ts +2 -2
- package/dist/auth/magicLink/index.d.ts.map +1 -1
- package/dist/auth/magicLink/index.js +2 -2
- package/dist/auth/magicLink/index.js.map +1 -1
- package/dist/auth/magicLink/magicLinkCore.d.ts +54 -33
- package/dist/auth/magicLink/magicLinkCore.d.ts.map +1 -1
- package/dist/auth/magicLink/magicLinkCore.js +61 -61
- package/dist/auth/magicLink/magicLinkCore.js.map +1 -1
- package/dist/auth/magicLink/redeemLanding.d.ts +4 -0
- package/dist/auth/magicLink/redeemLanding.d.ts.map +1 -1
- package/dist/auth/magicLink/redeemLanding.js +12 -4
- package/dist/auth/magicLink/redeemLanding.js.map +1 -1
- package/dist/auth/magicLink/types.d.ts +4 -4
- package/dist/auth/principals.d.ts +2 -0
- package/dist/auth/principals.d.ts.map +1 -1
- package/dist/auth/principals.js +6 -2
- package/dist/auth/principals.js.map +1 -1
- package/dist/cache.d.ts +2 -0
- package/dist/cache.d.ts.map +1 -1
- package/dist/cache.js +3 -1
- package/dist/cache.js.map +1 -1
- package/dist/config.d.ts +346 -2
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +34 -4
- package/dist/config.js.map +1 -1
- package/dist/context.d.ts +20 -0
- package/dist/context.d.ts.map +1 -1
- package/dist/context.js +27 -19
- package/dist/context.js.map +1 -1
- package/dist/directives/Public.d.ts +2 -0
- package/dist/directives/Public.d.ts.map +1 -1
- package/dist/directives/Public.js +3 -1
- package/dist/directives/Public.js.map +1 -1
- package/dist/directives/RequireSystemUser.d.ts +2 -0
- package/dist/directives/RequireSystemUser.d.ts.map +1 -1
- package/dist/directives/RequireSystemUser.js +3 -1
- package/dist/directives/RequireSystemUser.js.map +1 -1
- package/dist/generated/graphql-schemas/__mj.d.ts +1021 -0
- package/dist/generated/graphql-schemas/__mj.d.ts.map +1 -1
- package/dist/generated/graphql-schemas/__mj.js +7368 -2145
- package/dist/generated/graphql-schemas/__mj.js.map +1 -1
- package/dist/generic/CacheInvalidationResolver.d.ts +94 -4
- package/dist/generic/CacheInvalidationResolver.d.ts.map +1 -1
- package/dist/generic/CacheInvalidationResolver.js +122 -3
- package/dist/generic/CacheInvalidationResolver.js.map +1 -1
- package/dist/generic/DeleteOptionsInput.d.ts +8 -1
- package/dist/generic/DeleteOptionsInput.d.ts.map +1 -1
- package/dist/generic/DeleteOptionsInput.js +1 -1
- package/dist/generic/DeleteOptionsInput.js.map +1 -1
- package/dist/generic/FireAndForgetHeartbeat.d.ts +18 -2
- package/dist/generic/FireAndForgetHeartbeat.d.ts.map +1 -1
- package/dist/generic/FireAndForgetHeartbeat.js +24 -6
- package/dist/generic/FireAndForgetHeartbeat.js.map +1 -1
- package/dist/generic/OrphanedConversationDetailReconciler.d.ts +31 -0
- package/dist/generic/OrphanedConversationDetailReconciler.d.ts.map +1 -0
- package/dist/generic/OrphanedConversationDetailReconciler.js +215 -0
- package/dist/generic/OrphanedConversationDetailReconciler.js.map +1 -0
- package/dist/generic/PushStatusResolver.d.ts +48 -1
- package/dist/generic/PushStatusResolver.d.ts.map +1 -1
- package/dist/generic/PushStatusResolver.js +95 -4
- package/dist/generic/PushStatusResolver.js.map +1 -1
- package/dist/generic/ResolverBase.d.ts +18 -2
- package/dist/generic/ResolverBase.d.ts.map +1 -1
- package/dist/generic/ResolverBase.js +64 -55
- package/dist/generic/ResolverBase.js.map +1 -1
- package/dist/index.d.ts +9 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +120 -11
- package/dist/index.js.map +1 -1
- package/dist/integration/CustomColumnPromoter.d.ts +2 -0
- package/dist/integration/CustomColumnPromoter.d.ts.map +1 -1
- package/dist/integration/CustomColumnPromoter.js +5 -1
- package/dist/integration/CustomColumnPromoter.js.map +1 -1
- package/dist/integration/EntityMapLifecycle.d.ts +4 -0
- package/dist/integration/EntityMapLifecycle.d.ts.map +1 -1
- package/dist/integration/EntityMapLifecycle.js +10 -2
- package/dist/integration/EntityMapLifecycle.js.map +1 -1
- package/dist/logging/NoLog.d.ts +4 -0
- package/dist/logging/NoLog.d.ts.map +1 -1
- package/dist/logging/NoLog.js +10 -2
- package/dist/logging/NoLog.js.map +1 -1
- package/dist/logging/StartupLogger.d.ts +2 -0
- package/dist/logging/StartupLogger.d.ts.map +1 -1
- package/dist/logging/StartupLogger.js +5 -1
- package/dist/logging/StartupLogger.js.map +1 -1
- package/dist/logging/bootAudit.d.ts +11 -7
- package/dist/logging/bootAudit.d.ts.map +1 -1
- package/dist/logging/bootAudit.js +15 -7
- package/dist/logging/bootAudit.js.map +1 -1
- package/dist/logging/boundaryLogPayload.d.ts +4 -0
- package/dist/logging/boundaryLogPayload.d.ts.map +1 -1
- package/dist/logging/boundaryLogPayload.js +5 -1
- package/dist/logging/boundaryLogPayload.js.map +1 -1
- package/dist/logging/secretRedactor.d.ts +2 -0
- package/dist/logging/secretRedactor.d.ts.map +1 -1
- package/dist/logging/secretRedactor.js +8 -4
- package/dist/logging/secretRedactor.js.map +1 -1
- package/dist/logging/shortenForLog.d.ts +2 -0
- package/dist/logging/shortenForLog.d.ts.map +1 -1
- package/dist/logging/shortenForLog.js +7 -3
- package/dist/logging/shortenForLog.js.map +1 -1
- package/dist/logging/variablesLoggingMiddleware.d.ts +2 -0
- package/dist/logging/variablesLoggingMiddleware.d.ts.map +1 -1
- package/dist/logging/variablesLoggingMiddleware.js +8 -6
- package/dist/logging/variablesLoggingMiddleware.js.map +1 -1
- package/dist/metadataRefreshSignal.d.ts +19 -0
- package/dist/metadataRefreshSignal.d.ts.map +1 -0
- package/dist/metadataRefreshSignal.js +45 -0
- package/dist/metadataRefreshSignal.js.map +1 -0
- package/dist/middleware/MJTenantFilterMiddleware.js +4 -4
- package/dist/multiTenancy/index.d.ts +8 -0
- package/dist/multiTenancy/index.d.ts.map +1 -1
- package/dist/multiTenancy/index.js +21 -5
- package/dist/multiTenancy/index.js.map +1 -1
- package/dist/realtimeWidget/WidgetRouter.d.ts +5 -0
- package/dist/realtimeWidget/WidgetRouter.d.ts.map +1 -1
- package/dist/realtimeWidget/WidgetRouter.js +14 -10
- package/dist/realtimeWidget/WidgetRouter.js.map +1 -1
- package/dist/realtimeWidget/WidgetSessionService.d.ts +6 -6
- package/dist/realtimeWidget/WidgetSessionService.js +27 -27
- package/dist/realtimeWidget/host-identity.d.ts +5 -1
- package/dist/realtimeWidget/host-identity.d.ts.map +1 -1
- package/dist/realtimeWidget/host-identity.js +11 -3
- package/dist/realtimeWidget/host-identity.js.map +1 -1
- package/dist/realtimeWidget/index.d.ts +2 -2
- package/dist/realtimeWidget/index.d.ts.map +1 -1
- package/dist/realtimeWidget/index.js +2 -2
- package/dist/realtimeWidget/index.js.map +1 -1
- package/dist/realtimeWidget/visitorIdentity.d.ts +21 -1
- package/dist/realtimeWidget/visitorIdentity.d.ts.map +1 -1
- package/dist/realtimeWidget/visitorIdentity.js +16 -4
- package/dist/realtimeWidget/visitorIdentity.js.map +1 -1
- package/dist/realtimeWidget/widgetCore.d.ts +48 -0
- package/dist/realtimeWidget/widgetCore.d.ts.map +1 -1
- package/dist/realtimeWidget/widgetCore.js +38 -10
- package/dist/realtimeWidget/widgetCore.js.map +1 -1
- package/dist/realtimeWidget/widgetGuestElevation.d.ts +10 -6
- package/dist/realtimeWidget/widgetGuestElevation.d.ts.map +1 -1
- package/dist/realtimeWidget/widgetGuestElevation.js +14 -6
- package/dist/realtimeWidget/widgetGuestElevation.js.map +1 -1
- package/dist/resolvers/AdhocQueryResolver.js +3 -3
- package/dist/resolvers/AgentRunStatusPublisher.d.ts +55 -0
- package/dist/resolvers/AgentRunStatusPublisher.d.ts.map +1 -0
- package/dist/resolvers/AgentRunStatusPublisher.js +141 -0
- package/dist/resolvers/AgentRunStatusPublisher.js.map +1 -0
- package/dist/resolvers/ConversationRunEventsResolver.d.ts +90 -0
- package/dist/resolvers/ConversationRunEventsResolver.d.ts.map +1 -0
- package/dist/resolvers/ConversationRunEventsResolver.js +283 -0
- package/dist/resolvers/ConversationRunEventsResolver.js.map +1 -0
- package/dist/resolvers/DuplicateEntryCheckResolver.d.ts +98 -0
- package/dist/resolvers/DuplicateEntryCheckResolver.d.ts.map +1 -0
- package/dist/resolvers/DuplicateEntryCheckResolver.js +227 -0
- package/dist/resolvers/DuplicateEntryCheckResolver.js.map +1 -0
- package/dist/resolvers/FetchEntityVectorsResolver.d.ts.map +1 -1
- package/dist/resolvers/FetchEntityVectorsResolver.js +2 -1
- package/dist/resolvers/FetchEntityVectorsResolver.js.map +1 -1
- package/dist/resolvers/FileResolver.js +3 -3
- package/dist/resolvers/GeoResolver.d.ts +2 -2
- package/dist/resolvers/GeoResolver.js +4 -4
- package/dist/resolvers/GetDataResolver.d.ts +14 -0
- package/dist/resolvers/GetDataResolver.d.ts.map +1 -1
- package/dist/resolvers/GetDataResolver.js +43 -15
- package/dist/resolvers/GetDataResolver.js.map +1 -1
- package/dist/resolvers/IntegrationDiscoveryResolver.js +2 -2
- package/dist/resolvers/ListOperationsResolver.d.ts +20 -0
- package/dist/resolvers/ListOperationsResolver.d.ts.map +1 -1
- package/dist/resolvers/ListOperationsResolver.js +68 -28
- package/dist/resolvers/ListOperationsResolver.js.map +1 -1
- package/dist/resolvers/MCPResolver.d.ts +11 -1
- package/dist/resolvers/MCPResolver.d.ts.map +1 -1
- package/dist/resolvers/MCPResolver.js +7 -3
- package/dist/resolvers/MCPResolver.js.map +1 -1
- package/dist/resolvers/MergeRecordsResolver.d.ts +7 -0
- package/dist/resolvers/MergeRecordsResolver.d.ts.map +1 -1
- package/dist/resolvers/MergeRecordsResolver.js +16 -2
- package/dist/resolvers/MergeRecordsResolver.js.map +1 -1
- package/dist/resolvers/RealtimeBridgeResolver.js +3 -3
- package/dist/resolvers/RealtimeClientSessionResolver.d.ts +44 -6
- package/dist/resolvers/RealtimeClientSessionResolver.d.ts.map +1 -1
- package/dist/resolvers/RealtimeClientSessionResolver.js +93 -37
- package/dist/resolvers/RealtimeClientSessionResolver.js.map +1 -1
- package/dist/resolvers/RemoteBrowserActionResolver.js +5 -5
- package/dist/resolvers/RunAIAgentResolver.d.ts +8 -18
- package/dist/resolvers/RunAIAgentResolver.d.ts.map +1 -1
- package/dist/resolvers/RunAIAgentResolver.js +85 -184
- package/dist/resolvers/RunAIAgentResolver.js.map +1 -1
- package/dist/resolvers/RunAIPromptResolver.d.ts +1 -1
- package/dist/resolvers/RunAIPromptResolver.js +2 -2
- package/dist/resolvers/RunDecisionResolver.d.ts +149 -0
- package/dist/resolvers/RunDecisionResolver.d.ts.map +1 -0
- package/dist/resolvers/RunDecisionResolver.js +396 -0
- package/dist/resolvers/RunDecisionResolver.js.map +1 -0
- package/dist/resolvers/RunTestResolver.js +5 -5
- package/dist/resolvers/SqlLoggingConfigResolver.d.ts +8 -4
- package/dist/resolvers/SqlLoggingConfigResolver.d.ts.map +1 -1
- package/dist/resolvers/SqlLoggingConfigResolver.js +5 -5
- package/dist/resolvers/TaskGraphFrameResolver.d.ts +8 -1
- package/dist/resolvers/TaskGraphFrameResolver.d.ts.map +1 -1
- package/dist/resolvers/TaskGraphFrameResolver.js +6 -2
- package/dist/resolvers/TaskGraphFrameResolver.js.map +1 -1
- package/dist/resolvers/VectorizeEntityResolver.d.ts +1 -1
- package/dist/resolvers/VectorizeEntityResolver.d.ts.map +1 -1
- package/dist/resolvers/VectorizeEntityResolver.js +14 -10
- package/dist/resolvers/VectorizeEntityResolver.js.map +1 -1
- package/dist/resolvers/adhoc-query-helpers.d.ts +6 -0
- package/dist/resolvers/adhoc-query-helpers.d.ts.map +1 -1
- package/dist/resolvers/adhoc-query-helpers.js +10 -2
- package/dist/resolvers/adhoc-query-helpers.js.map +1 -1
- package/dist/resolvers/artifact-routing.d.ts +8 -8
- package/dist/resolvers/artifact-routing.js +2 -2
- package/dist/resolvers/artifact-routing.js.map +1 -1
- package/dist/resolvers/meetingRecordingRegistration.d.ts +10 -2
- package/dist/resolvers/meetingRecordingRegistration.d.ts.map +1 -1
- package/dist/resolvers/meetingRecordingRegistration.js +24 -8
- package/dist/resolvers/meetingRecordingRegistration.js.map +1 -1
- package/dist/resolvers/peaksSidecar.d.ts +4 -0
- package/dist/resolvers/peaksSidecar.d.ts.map +1 -1
- package/dist/resolvers/peaksSidecar.js +10 -2
- package/dist/resolvers/peaksSidecar.js.map +1 -1
- package/dist/rest/EntityCRUDHandler.d.ts +28 -0
- package/dist/rest/EntityCRUDHandler.d.ts.map +1 -1
- package/dist/rest/EntityCRUDHandler.js +20 -4
- package/dist/rest/EntityCRUDHandler.js.map +1 -1
- package/dist/rest/MediaStreamHandler.d.ts +2 -0
- package/dist/rest/MediaStreamHandler.d.ts.map +1 -1
- package/dist/rest/MediaStreamHandler.js +10 -6
- package/dist/rest/MediaStreamHandler.js.map +1 -1
- package/dist/rest/OAuthCallbackHandler.d.ts +9 -0
- package/dist/rest/OAuthCallbackHandler.d.ts.map +1 -1
- package/dist/rest/OAuthCallbackHandler.js +15 -3
- package/dist/rest/OAuthCallbackHandler.js.map +1 -1
- package/dist/rest/RESTEndpointHandler.d.ts +6 -4
- package/dist/rest/RESTEndpointHandler.d.ts.map +1 -1
- package/dist/rest/RESTEndpointHandler.js +15 -11
- package/dist/rest/RESTEndpointHandler.js.map +1 -1
- package/dist/rest/RealtimeSdpBrokerHandler.d.ts +5 -1
- package/dist/rest/RealtimeSdpBrokerHandler.d.ts.map +1 -1
- package/dist/rest/RealtimeSdpBrokerHandler.js +12 -4
- package/dist/rest/RealtimeSdpBrokerHandler.js.map +1 -1
- package/dist/rest/SignatureWebhookHandler.d.ts +2 -0
- package/dist/rest/SignatureWebhookHandler.d.ts.map +1 -1
- package/dist/rest/SignatureWebhookHandler.js +5 -1
- package/dist/rest/SignatureWebhookHandler.js.map +1 -1
- package/dist/rest/UploadTokenManager.d.ts +24 -8
- package/dist/rest/UploadTokenManager.d.ts.map +1 -1
- package/dist/rest/UploadTokenManager.js +53 -21
- package/dist/rest/UploadTokenManager.js.map +1 -1
- package/dist/rest/ViewOperationsHandler.d.ts +20 -0
- package/dist/rest/ViewOperationsHandler.d.ts.map +1 -1
- package/dist/rest/ViewOperationsHandler.js +20 -4
- package/dist/rest/ViewOperationsHandler.js.map +1 -1
- package/dist/rest/mediaRange.d.ts +4 -0
- package/dist/rest/mediaRange.d.ts.map +1 -1
- package/dist/rest/mediaRange.js +10 -2
- package/dist/rest/mediaRange.js.map +1 -1
- package/dist/rest/setupRESTEndpoints.d.ts +4 -0
- package/dist/rest/setupRESTEndpoints.d.ts.map +1 -1
- package/dist/rest/setupRESTEndpoints.js +13 -7
- package/dist/rest/setupRESTEndpoints.js.map +1 -1
- package/dist/serverExtensionReservedRoots.d.ts +2 -0
- package/dist/serverExtensionReservedRoots.d.ts.map +1 -1
- package/dist/serverExtensionReservedRoots.js +5 -1
- package/dist/serverExtensionReservedRoots.js.map +1 -1
- package/dist/services/TaskGraphActionRunner.d.ts +13 -8
- package/dist/services/TaskGraphActionRunner.d.ts.map +1 -1
- package/dist/services/TaskGraphActionRunner.js +16 -15
- package/dist/services/TaskGraphActionRunner.js.map +1 -1
- package/dist/types.d.ts +2 -0
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js +7 -3
- package/dist/types.js.map +1 -1
- package/dist/util.d.ts +6 -0
- package/dist/util.d.ts.map +1 -1
- package/dist/util.js +13 -5
- package/dist/util.js.map +1 -1
- package/package.json +94 -92
- package/src/__tests__/AgentRunStatusPublisher.test.ts +175 -0
- package/src/__tests__/DeleteOptionsInput.wireShape.test.ts +62 -0
- package/src/__tests__/DuplicateEntryCheckResolver.test.ts +300 -0
- package/src/__tests__/FileResolverPeaks.test.ts +13 -13
- package/src/__tests__/ListOperationsResolver.test.ts +17 -17
- package/src/__tests__/MediaStreamHandler.test.ts +28 -28
- package/src/__tests__/NoLog.test.ts +11 -11
- package/src/__tests__/PrimaryKeyAlwaysMapped.test.ts +10 -10
- package/src/__tests__/RESTEndpointHandler.test.ts +14 -14
- package/src/__tests__/RealtimeBridgeResolver.test.ts +4 -2
- package/src/__tests__/RealtimeClientSessionResolver.test.ts +216 -2
- package/src/__tests__/RealtimeSdpBrokerHandler.test.ts +6 -6
- package/src/__tests__/RefreshAdoptsNewColumns.test.ts +8 -8
- package/src/__tests__/RemoteBrowserActionRecovery.test.ts +7 -1
- package/src/__tests__/RemoteBrowserAudioStream.test.ts +7 -1
- package/src/__tests__/RemoteBrowserGoalEngine.test.ts +18 -18
- package/src/__tests__/RemoteBrowserSnapshot.test.ts +7 -1
- package/src/__tests__/ResolverBase.clientOldValues.test.ts +52 -0
- package/src/__tests__/RunAIAgentResolver.historyFrom.test.ts +398 -0
- package/src/__tests__/RunAIAgentResolver.streaming.test.ts +18 -27
- package/src/__tests__/RunDecisionResolver.test.ts +699 -0
- package/src/__tests__/TaskGraphActionRunner.durablePayload.test.ts +131 -0
- package/src/__tests__/TaskGraphFrameResolver.test.ts +2 -2
- package/src/__tests__/VectorizeEntityResolver.test.ts +106 -0
- package/src/__tests__/WidgetSessionService.test.ts +8 -4
- package/src/__tests__/adhoc-query-helpers.test.ts +21 -21
- package/src/__tests__/bootAudit.test.ts +11 -11
- package/src/__tests__/boundaryLogPayload.test.ts +6 -6
- package/src/__tests__/cacheInvalidationRecordData.test.ts +177 -0
- package/src/__tests__/conversationRunEvents.test.ts +399 -0
- package/src/__tests__/databaseAbstraction.test.ts +12 -6
- package/src/__tests__/getDataTokenRedaction.test.ts +7 -7
- package/src/__tests__/initializeProviders.refresh.test.ts +4 -4
- package/src/__tests__/magicLink.test.ts +73 -134
- package/src/__tests__/magicLinkService.consume.test.ts +224 -0
- package/src/__tests__/meetingRecordingRegistration.test.ts +12 -12
- package/src/__tests__/metadataRefreshSignal.test.ts +78 -0
- package/src/__tests__/multiTenancy.security.test.ts +40 -40
- package/src/__tests__/multiTenancy.test.ts +18 -18
- package/src/__tests__/newUsers.test.ts +24 -23
- package/src/__tests__/orphanedConversationDetailReconciler.test.ts +283 -0
- package/src/__tests__/principals.test.ts +22 -22
- package/src/__tests__/pushStatusFanOut.test.ts +206 -0
- package/src/__tests__/pushStatusResolver.filter.test.ts +8 -8
- package/src/__tests__/secretRedactor.failOpen.test.ts +12 -12
- package/src/__tests__/secretRedactor.test.ts +12 -12
- package/src/__tests__/serverExtensionReservedRoots.test.ts +7 -7
- package/src/__tests__/subscriptionRedaction.test.ts +5 -5
- package/src/__tests__/unifiedAuth.test.ts +15 -9
- package/src/__tests__/visitorIdentity.resolve.test.ts +6 -6
- package/src/__tests__/widget.test.ts +45 -45
- package/src/__tests__/widgetGuestElevation.test.ts +7 -7
- package/src/__tests__/widgetHostIdentity.test.ts +14 -14
- package/src/agentSessions/ReturningVisitorRecap.ts +12 -1
- package/src/agentSessions/SessionManager.ts +2 -2
- package/src/agentSessions/remoteBrowserGoalEngine.ts +30 -5
- package/src/auth/AuthProviderCatalogRouter.ts +6 -1
- package/src/auth/__tests__/backward-compatibility.test.ts +4 -3
- package/src/auth/index.ts +43 -28
- package/src/auth/initializeProviders.ts +25 -5
- package/src/auth/magicLink/MagicLinkRouter.ts +28 -10
- package/src/auth/magicLink/MagicLinkService.ts +71 -52
- package/src/auth/magicLink/index.ts +7 -7
- package/src/auth/magicLink/magicLinkCore.ts +96 -64
- package/src/auth/magicLink/redeemLanding.ts +14 -4
- package/src/auth/magicLink/types.ts +54 -54
- package/src/auth/newUsers.ts +1 -1
- package/src/auth/principals.ts +11 -2
- package/src/cache.ts +4 -1
- package/src/config.ts +37 -4
- package/src/context.ts +37 -24
- package/src/directives/Public.ts +4 -1
- package/src/directives/RequireSystemUser.ts +4 -1
- package/src/generated/graphql-schemas/__mj.ts +3674 -4
- package/src/generic/CacheInvalidationResolver.ts +148 -4
- package/src/generic/DeleteOptionsInput.ts +9 -2
- package/src/generic/FireAndForgetHeartbeat.ts +35 -16
- package/src/generic/OrphanedConversationDetailReconciler.ts +267 -0
- package/src/generic/PushStatusResolver.ts +118 -8
- package/src/generic/ResolverBase.ts +65 -57
- package/src/generic/RunViewResolver.ts +22 -22
- package/src/generic/__tests__/FireAndForgetHeartbeat.test.ts +7 -7
- package/src/index.ts +137 -11
- package/src/integration/CustomColumnPromoter.ts +6 -1
- package/src/integration/EntityMapLifecycle.ts +20 -2
- package/src/logging/NoLog.ts +16 -2
- package/src/logging/StartupLogger.ts +6 -1
- package/src/logging/bootAudit.ts +26 -16
- package/src/logging/boundaryLogPayload.ts +8 -1
- package/src/logging/secretRedactor.ts +14 -9
- package/src/logging/shortenForLog.ts +8 -3
- package/src/logging/variablesLoggingMiddleware.ts +9 -6
- package/src/metadataRefreshSignal.ts +45 -0
- package/src/middleware/MJTenantFilterMiddleware.ts +4 -4
- package/src/multiTenancy/index.ts +29 -5
- package/src/realtimeWidget/WidgetRouter.ts +15 -10
- package/src/realtimeWidget/WidgetSessionService.ts +76 -76
- package/src/realtimeWidget/host-identity.ts +24 -10
- package/src/realtimeWidget/index.ts +3 -3
- package/src/realtimeWidget/visitorIdentity.ts +39 -8
- package/src/realtimeWidget/widgetCore.ts +75 -10
- package/src/realtimeWidget/widgetGuestElevation.ts +25 -12
- package/src/resolvers/AdhocQueryResolver.ts +3 -3
- package/src/resolvers/AgentRunStatusPublisher.ts +175 -0
- package/src/resolvers/AgentSessionResolver.ts +3 -3
- package/src/resolvers/ColorResolver.ts +6 -6
- package/src/resolvers/ComponentRegistryResolver.ts +36 -36
- package/src/resolvers/ConversationRunEventsResolver.ts +308 -0
- package/src/resolvers/DuplicateEntryCheckResolver.ts +232 -0
- package/src/resolvers/EntityCommunicationsResolver.ts +4 -4
- package/src/resolvers/ExecuteRemoteOperationResolver.ts +9 -9
- package/src/resolvers/FetchEntityVectorsResolver.ts +2 -1
- package/src/resolvers/FileResolver.ts +42 -42
- package/src/resolvers/GeoResolver.ts +4 -4
- package/src/resolvers/GetDataResolver.ts +50 -15
- package/src/resolvers/IntegrationDiscoveryResolver.ts +2 -2
- package/src/resolvers/ListOperationsResolver.ts +78 -28
- package/src/resolvers/MCPResolver.ts +30 -15
- package/src/resolvers/MergeRecordsResolver.ts +14 -2
- package/src/resolvers/QueryResolver.ts +13 -13
- package/src/resolvers/RealtimeBridgeResolver.ts +3 -3
- package/src/resolvers/RealtimeClientSessionResolver.ts +96 -38
- package/src/resolvers/RemoteBrowserActionResolver.ts +5 -5
- package/src/resolvers/RunAIAgentResolver.ts +134 -239
- package/src/resolvers/RunAIPromptResolver.ts +22 -22
- package/src/resolvers/RunDecisionResolver.ts +435 -0
- package/src/resolvers/RunTemplateResolver.ts +4 -4
- package/src/resolvers/RunTestResolver.ts +25 -25
- package/src/resolvers/SqlLoggingConfigResolver.ts +56 -56
- package/src/resolvers/TaskGraphFrameResolver.ts +37 -28
- package/src/resolvers/TelemetryResolver.ts +79 -79
- package/src/resolvers/VectorizeEntityResolver.ts +16 -11
- package/src/resolvers/__tests__/GetDataResolver.tokens.test.ts +40 -38
- package/src/resolvers/__tests__/MergeRecordsResolver.test.ts +93 -0
- package/src/resolvers/__tests__/artifact-routing.test.ts +23 -23
- package/src/resolvers/adhoc-query-helpers.ts +19 -2
- package/src/resolvers/artifact-routing.ts +19 -19
- package/src/resolvers/meetingRecordingRegistration.ts +44 -10
- package/src/resolvers/peaksSidecar.ts +12 -2
- package/src/rest/EntityCRUDHandler.ts +24 -4
- package/src/rest/MediaStreamHandler.ts +11 -6
- package/src/rest/OAuthCallbackHandler.ts +25 -7
- package/src/rest/RESTEndpointHandler.ts +20 -15
- package/src/rest/RealtimeSdpBrokerHandler.ts +14 -4
- package/src/rest/SignatureWebhookHandler.ts +6 -1
- package/src/rest/UploadTokenManager.ts +66 -30
- package/src/rest/ViewOperationsHandler.ts +24 -4
- package/src/rest/mediaRange.ts +16 -6
- package/src/rest/setupRESTEndpoints.ts +24 -12
- package/src/serverExtensionReservedRoots.ts +6 -1
- package/src/services/TaskGraphActionRunner.ts +16 -15
- package/src/types.ts +21 -16
- package/src/util.ts +16 -6
|
@@ -18,10 +18,11 @@ import { AgentRunner, ArtifactToolManager } from '@memberjunction/ai-agents';
|
|
|
18
18
|
import { ConversationUtility } from '@memberjunction/ai-core-plus';
|
|
19
19
|
import { AIEngine } from '@memberjunction/aiengine';
|
|
20
20
|
import { ResolverBase } from '../generic/ResolverBase.js';
|
|
21
|
-
import {
|
|
21
|
+
import { AgentRunStatusPublisher } from './AgentRunStatusPublisher.js';
|
|
22
|
+
import { StartLivenessPulse } from '../generic/FireAndForgetHeartbeat.js';
|
|
22
23
|
import { RequireSystemUser } from '../directives/RequireSystemUser.js';
|
|
23
24
|
import { GetReadWriteProvider } from '../util.js';
|
|
24
|
-
import {
|
|
25
|
+
import { ResolveWidgetGuestRunContext, ElevateUserPayload } from '../realtimeWidget/widgetGuestElevation.js';
|
|
25
26
|
import { SafeJSONParse, UUIDsEqual } from '@memberjunction/global';
|
|
26
27
|
import { GetAttachmentService } from '@memberjunction/aiengine';
|
|
27
28
|
import { NotificationEngine } from '@memberjunction/notifications';
|
|
@@ -33,6 +34,10 @@ import { NotificationEngine } from '@memberjunction/notifications';
|
|
|
33
34
|
* pre-existing per-call MAX_INLINE_ARTIFACT_CHARS / maxInlineChars constants.
|
|
34
35
|
*/
|
|
35
36
|
const INLINE_SIZE_CAP = 100 * 1024;
|
|
37
|
+
/** Progress metadata is an untyped bag. A run is an object that carries an ID field. */
|
|
38
|
+
function isAgentRunEntity(value) {
|
|
39
|
+
return typeof value === 'object' && value !== null && 'ID' in value;
|
|
40
|
+
}
|
|
36
41
|
let AIAgentRunResult = class AIAgentRunResult {
|
|
37
42
|
};
|
|
38
43
|
__decorate([
|
|
@@ -277,101 +282,6 @@ let RunAIAgentResolver = class RunAIAgentResolver extends ResolverBase {
|
|
|
277
282
|
}
|
|
278
283
|
return agentEntity;
|
|
279
284
|
}
|
|
280
|
-
/**
|
|
281
|
-
* Create streaming progress callback
|
|
282
|
-
*/
|
|
283
|
-
createProgressCallback(pubSub, sessionId, userPayload, agentRunRef) {
|
|
284
|
-
return (progress) => {
|
|
285
|
-
// Capture the agent run into the ref as soon as any progress event carries it (even
|
|
286
|
-
// "noise" steps), so the fire-and-forget liveness pulse can read its id/status mid-run
|
|
287
|
-
// rather than only after RunAgentInConversation returns.
|
|
288
|
-
if (progress.metadata?.agentRun) {
|
|
289
|
-
agentRunRef.current = progress.metadata.agentRun;
|
|
290
|
-
}
|
|
291
|
-
// Only publish progress for significant steps (not initialization noise)
|
|
292
|
-
const significantSteps = ['prompt_execution', 'action_execution', 'subagent_execution', 'decision_processing'];
|
|
293
|
-
if (!significantSteps.includes(progress.step)) {
|
|
294
|
-
console.log(`🔇 Skipping noise progress: ${progress.step}`);
|
|
295
|
-
return;
|
|
296
|
-
}
|
|
297
|
-
// Get the agent run from the progress metadata or use the ref
|
|
298
|
-
const agentRun = progress.metadata?.agentRun || agentRunRef.current;
|
|
299
|
-
if (!agentRun) {
|
|
300
|
-
console.error('❌ No agent run available for progress callback');
|
|
301
|
-
return;
|
|
302
|
-
}
|
|
303
|
-
console.log('📡 Publishing progress update:', {
|
|
304
|
-
step: progress.step,
|
|
305
|
-
percentage: progress.percentage,
|
|
306
|
-
message: progress.message,
|
|
307
|
-
sessionId,
|
|
308
|
-
agentRunId: agentRun.ID
|
|
309
|
-
});
|
|
310
|
-
// Publish progress updates with the full serialized agent run
|
|
311
|
-
const progressMsg = {
|
|
312
|
-
sessionId,
|
|
313
|
-
agentRunId: agentRun.ID,
|
|
314
|
-
type: 'progress',
|
|
315
|
-
agentRun: agentRun.GetAll(), // Serialize the full agent run
|
|
316
|
-
progress: {
|
|
317
|
-
currentStep: progress.step,
|
|
318
|
-
percentage: progress.percentage,
|
|
319
|
-
message: progress.message,
|
|
320
|
-
agentName: progress.metadata?.agentName || undefined,
|
|
321
|
-
agentType: progress.metadata?.agentType || undefined,
|
|
322
|
-
stepCount: progress.metadata?.stepCount || undefined,
|
|
323
|
-
hierarchicalStep: progress.metadata?.hierarchicalStep || undefined
|
|
324
|
-
},
|
|
325
|
-
timestamp: new Date()
|
|
326
|
-
};
|
|
327
|
-
this.PublishProgressUpdate(pubSub, progressMsg, userPayload);
|
|
328
|
-
};
|
|
329
|
-
}
|
|
330
|
-
PublishProgressUpdate(pubSub, data, userPayload) {
|
|
331
|
-
this.PublishStatusUpdate(pubSub, userPayload.sessionId, JSON.stringify({
|
|
332
|
-
resolver: 'RunAIAgentResolver',
|
|
333
|
-
type: 'ExecutionProgress',
|
|
334
|
-
status: 'ok',
|
|
335
|
-
data,
|
|
336
|
-
}), userPayload);
|
|
337
|
-
}
|
|
338
|
-
PublishStreamingUpdate(pubSub, data, userPayload) {
|
|
339
|
-
this.PublishStatusUpdate(pubSub, userPayload.sessionId, JSON.stringify({
|
|
340
|
-
resolver: 'RunAIAgentResolver',
|
|
341
|
-
type: 'StreamingContent',
|
|
342
|
-
status: 'ok',
|
|
343
|
-
data,
|
|
344
|
-
}), userPayload);
|
|
345
|
-
}
|
|
346
|
-
/**
|
|
347
|
-
* Create streaming content callback
|
|
348
|
-
*/
|
|
349
|
-
createStreamingCallback(pubSub, sessionId, userPayload, agentRunRef) {
|
|
350
|
-
return (chunk) => {
|
|
351
|
-
// Use the agent run from the ref
|
|
352
|
-
const agentRun = agentRunRef.current;
|
|
353
|
-
if (!agentRun) {
|
|
354
|
-
console.error('❌ No agent run available for streaming callback');
|
|
355
|
-
return;
|
|
356
|
-
}
|
|
357
|
-
// Publish streaming content with the full serialized agent run
|
|
358
|
-
const streamMsg = {
|
|
359
|
-
sessionId,
|
|
360
|
-
agentRunId: agentRun.ID,
|
|
361
|
-
type: 'streaming',
|
|
362
|
-
agentRun: agentRun.GetAll(), // Include the full serialized agent run
|
|
363
|
-
streaming: {
|
|
364
|
-
content: chunk.content,
|
|
365
|
-
isPartial: !chunk.isComplete,
|
|
366
|
-
stepName: chunk.stepType,
|
|
367
|
-
agentName: chunk.modelName,
|
|
368
|
-
kind: chunk.kind
|
|
369
|
-
},
|
|
370
|
-
timestamp: new Date()
|
|
371
|
-
};
|
|
372
|
-
this.PublishStreamingUpdate(pubSub, streamMsg, userPayload);
|
|
373
|
-
};
|
|
374
|
-
}
|
|
375
285
|
/**
|
|
376
286
|
* Internal method that handles the core AI agent execution logic.
|
|
377
287
|
* This method is called by both the regular and system user resolvers.
|
|
@@ -389,7 +299,10 @@ let RunAIAgentResolver = class RunAIAgentResolver extends ResolverBase {
|
|
|
389
299
|
* The framework intersects them with the agent's accepted skills AND the user's Run permission. */
|
|
390
300
|
requestedSkillIDs,
|
|
391
301
|
/** JSON `{ paused?: boolean }` — seeds `$.debug` on a submitted task graph at insert. */
|
|
392
|
-
taskGraphDebug
|
|
302
|
+
taskGraphDebug,
|
|
303
|
+
/** History floor for a conversation run — threaded into ExecuteAgentParams.ConversationHistoryFrom,
|
|
304
|
+
* so the framework's own conversation reads (retrieval tools, artifacts, compaction) honour it too. */
|
|
305
|
+
conversationHistoryFrom) {
|
|
393
306
|
const startTime = Date.now();
|
|
394
307
|
// Best-effort handle for persistInFlightAgentFailure. Populated from a
|
|
395
308
|
// progress event carrying metadata.agentRun, or from the successful
|
|
@@ -421,6 +334,10 @@ let RunAIAgentResolver = class RunAIAgentResolver extends ResolverBase {
|
|
|
421
334
|
// singleton's transaction state with concurrent requests (e.g. conversation deletes).
|
|
422
335
|
const agentRunner = new AgentRunner(p);
|
|
423
336
|
console.log(`🚀 Starting agent execution with sessionId: ${sessionId}`);
|
|
337
|
+
// The publisher owns every status message. The resolver still copies the run into
|
|
338
|
+
// agentRunRef, including noise steps, for the fire-and-forget liveness pulse.
|
|
339
|
+
const statusPublisher = new AgentRunStatusPublisher(pubSub, userPayload, sessionId);
|
|
340
|
+
const publishProgress = statusPublisher.OnProgress;
|
|
424
341
|
// Execute the agent in conversation context - handles conversation, artifacts, etc.
|
|
425
342
|
const conversationResult = await agentRunner.RunAgentInConversation({
|
|
426
343
|
agent: agentEntity,
|
|
@@ -428,14 +345,21 @@ let RunAIAgentResolver = class RunAIAgentResolver extends ResolverBase {
|
|
|
428
345
|
payload: payload ? SafeJSONParse(payload) : undefined,
|
|
429
346
|
contextUser: currentUser,
|
|
430
347
|
sessionID: sessionId,
|
|
431
|
-
onProgress:
|
|
432
|
-
|
|
348
|
+
onProgress: (progress) => {
|
|
349
|
+
const fromEvent = progress.metadata?.agentRun;
|
|
350
|
+
if (isAgentRunEntity(fromEvent)) {
|
|
351
|
+
agentRunRef.current = fromEvent;
|
|
352
|
+
}
|
|
353
|
+
publishProgress(progress);
|
|
354
|
+
},
|
|
355
|
+
onStreaming: statusPublisher.OnStreaming,
|
|
433
356
|
lastRunId: lastRunId,
|
|
434
357
|
autoPopulateLastRunPayload: autoPopulateLastRunPayload,
|
|
435
358
|
configurationId: configurationId,
|
|
436
359
|
planMode: planMode,
|
|
437
360
|
requestedSkillIDs: requestedSkillIDs,
|
|
438
361
|
taskGraphDebug: parseTaskGraphDebug(taskGraphDebug),
|
|
362
|
+
ConversationHistoryFrom: conversationHistoryFrom,
|
|
439
363
|
data: parsedData,
|
|
440
364
|
context: {
|
|
441
365
|
dataSource: dataSource
|
|
@@ -488,7 +412,7 @@ let RunAIAgentResolver = class RunAIAgentResolver extends ResolverBase {
|
|
|
488
412
|
const sanitizedResult = this.sanitizeAgentResult(result);
|
|
489
413
|
const returnResult = JSON.stringify(sanitizedResult);
|
|
490
414
|
// Publish final events with enriched result data for fire-and-forget clients
|
|
491
|
-
|
|
415
|
+
statusPublisher.PublishFinal(result, result.agentRun?.ConversationDetailID, returnResult);
|
|
492
416
|
// Log completion
|
|
493
417
|
if (result.success) {
|
|
494
418
|
LogStatus(`=== AI AGENT RUN COMPLETED FOR: ${agentEntity.Name} (${executionTime}ms) ===`);
|
|
@@ -550,7 +474,8 @@ let RunAIAgentResolver = class RunAIAgentResolver extends ResolverBase {
|
|
|
550
474
|
detail.Message = errorMessage;
|
|
551
475
|
detail.Error = errorMessage;
|
|
552
476
|
if (!(await detail.Save())) {
|
|
553
|
-
LogError(`Failed to persist Error on conversation detail ${conversationDetailId}`
|
|
477
|
+
LogError(`Failed to persist Error on conversation detail ${conversationDetailId}: ` +
|
|
478
|
+
`${detail.LatestResult?.CompleteMessage?.trim() || 'no failure detail recorded'}`);
|
|
554
479
|
}
|
|
555
480
|
}
|
|
556
481
|
}
|
|
@@ -559,48 +484,6 @@ let RunAIAgentResolver = class RunAIAgentResolver extends ResolverBase {
|
|
|
559
484
|
LogError(`persistInFlightAgentFailure failed: ${persistError}`, undefined, persistError);
|
|
560
485
|
}
|
|
561
486
|
}
|
|
562
|
-
/**
|
|
563
|
-
* Publish final streaming events (partial result and completion).
|
|
564
|
-
* The completion event includes the full result JSON so clients using
|
|
565
|
-
* fire-and-forget mode can receive the result via WebSocket.
|
|
566
|
-
*/
|
|
567
|
-
publishFinalEvents(pubSub, sessionId, userPayload, result, resultJson) {
|
|
568
|
-
if (result.agentRun) {
|
|
569
|
-
// Get the last step from agent run
|
|
570
|
-
let lastStep = 'Completed';
|
|
571
|
-
if (result.agentRun?.Steps && result.agentRun.Steps.length > 0) {
|
|
572
|
-
// Get the last step from the Steps array
|
|
573
|
-
const lastStepEntity = result.agentRun.Steps[result.agentRun.Steps.length - 1];
|
|
574
|
-
lastStep = lastStepEntity?.StepName || 'Completed';
|
|
575
|
-
}
|
|
576
|
-
// Publish partial result
|
|
577
|
-
const partialResult = {
|
|
578
|
-
currentStep: lastStep,
|
|
579
|
-
partialOutput: result.payload || undefined
|
|
580
|
-
};
|
|
581
|
-
const partialMsg = {
|
|
582
|
-
sessionId,
|
|
583
|
-
agentRunId: result.agentRun.ID,
|
|
584
|
-
type: 'partial_result',
|
|
585
|
-
partialResult,
|
|
586
|
-
timestamp: new Date()
|
|
587
|
-
};
|
|
588
|
-
this.PublishStreamingUpdate(pubSub, partialMsg, userPayload);
|
|
589
|
-
}
|
|
590
|
-
// Publish completion with conversationDetailId for client-side routing.
|
|
591
|
-
// Include result data so fire-and-forget clients can receive the full result via WebSocket.
|
|
592
|
-
const completionData = {
|
|
593
|
-
sessionId,
|
|
594
|
-
agentRunId: result.agentRun?.ID || 'unknown',
|
|
595
|
-
type: 'complete',
|
|
596
|
-
timestamp: new Date(),
|
|
597
|
-
conversationDetailId: result.agentRun?.ConversationDetailID,
|
|
598
|
-
success: result.success,
|
|
599
|
-
errorMessage: result.agentRun?.ErrorMessage || undefined,
|
|
600
|
-
result: resultJson || undefined
|
|
601
|
-
};
|
|
602
|
-
this.PublishStreamingUpdate(pubSub, completionData, userPayload);
|
|
603
|
-
}
|
|
604
487
|
/**
|
|
605
488
|
* Public mutation for regular users to run AI agents with authentication.
|
|
606
489
|
* Supports fire-and-forget mode to avoid Azure proxy timeouts on long-running agent executions.
|
|
@@ -808,7 +691,7 @@ let RunAIAgentResolver = class RunAIAgentResolver extends ResolverBase {
|
|
|
808
691
|
* @param agentId - The agent to execute
|
|
809
692
|
* @param maxHistoryMessages - Maximum number of history messages to include (default: 20)
|
|
810
693
|
*/
|
|
811
|
-
async RunAIAgentFromConversationDetail(conversationDetailId, agentId, { userPayload, providers, dataSource }, sessionId, pubSub, maxHistoryMessages, data, payload, lastRunId, autoPopulateLastRunPayload, configurationId, createArtifacts, createNotification, sourceArtifactId, sourceArtifactVersionId, fireAndForget, planMode, requestedSkillIDs) {
|
|
694
|
+
async RunAIAgentFromConversationDetail(conversationDetailId, agentId, { userPayload, providers, dataSource }, sessionId, pubSub, maxHistoryMessages, data, payload, lastRunId, autoPopulateLastRunPayload, configurationId, createArtifacts, createNotification, sourceArtifactId, sourceArtifactVersionId, fireAndForget, planMode, requestedSkillIDs, agentHistoryFrom) {
|
|
812
695
|
// Check API key scope authorization for agent execution
|
|
813
696
|
await this.CheckAPIKeyScopeAuthorization('agent:execute', agentId, userPayload);
|
|
814
697
|
const p = GetReadWriteProvider(providers);
|
|
@@ -827,10 +710,12 @@ let RunAIAgentResolver = class RunAIAgentResolver extends ResolverBase {
|
|
|
827
710
|
// Conversation OWNERSHIP is still enforced under the guest principal below: the guest loads its
|
|
828
711
|
// own ConversationDetail through the Widget Guest RLS filters, so a detail id from another
|
|
829
712
|
// session resolves to "not found" before any elevated work happens.
|
|
830
|
-
const widgetElevation = await
|
|
831
|
-
const effectiveAgentId = widgetElevation ? widgetElevation.
|
|
832
|
-
const effectiveUserPayload = widgetElevation ?
|
|
713
|
+
const widgetElevation = await ResolveWidgetGuestRunContext(userPayload, p);
|
|
714
|
+
const effectiveAgentId = widgetElevation ? widgetElevation.PinnedAgentId : agentId;
|
|
715
|
+
const effectiveUserPayload = widgetElevation ? ElevateUserPayload(userPayload, widgetElevation.ElevatedUser) : userPayload;
|
|
833
716
|
try {
|
|
717
|
+
// Parsed before anything loads: a floor the caller asked for must never be dropped.
|
|
718
|
+
const historyFrom = parseAgentHistoryFrom(agentHistoryFrom);
|
|
834
719
|
// LATENCY OPTIMIZATION (Opt #2 + #3): Load ConversationDetail once here to extract
|
|
835
720
|
// conversationId, then pass it downstream. Previously this record was loaded multiple
|
|
836
721
|
// times: once in loadConversationHistoryWithAttachments (just to get conversationId),
|
|
@@ -845,13 +730,14 @@ let RunAIAgentResolver = class RunAIAgentResolver extends ResolverBase {
|
|
|
845
730
|
const messages = await this.loadConversationHistoryWithAttachments(conversationId, currentUser, maxHistoryMessages || 20, p,
|
|
846
731
|
// The UI creates the agent-response placeholder row ('⏳ ...') before invoking
|
|
847
732
|
// this mutation — exclude it so the model never sees an empty assistant turn.
|
|
848
|
-
[conversationDetailId]);
|
|
733
|
+
[conversationDetailId], historyFrom);
|
|
849
734
|
// Convert to JSON string for the existing executeAIAgent method
|
|
850
735
|
const messagesJson = JSON.stringify(messages);
|
|
851
736
|
if (fireAndForget) {
|
|
852
737
|
// Fire-and-forget mode: start execution in background, return immediately.
|
|
853
738
|
// The client will receive the result via WebSocket PubSub completion event.
|
|
854
|
-
this.executeAgentInBackground(p, dataSource, effectiveAgentId, effectiveUserPayload, messagesJson, sessionId, pubSub, data, payload, lastRunId, autoPopulateLastRunPayload, configurationId, conversationDetailId, createArtifacts || false, createNotification || false, sourceArtifactId, sourceArtifactVersionId, conversationId, planMode, requestedSkillIDs
|
|
739
|
+
this.executeAgentInBackground(p, dataSource, effectiveAgentId, effectiveUserPayload, messagesJson, sessionId, pubSub, data, payload, lastRunId, autoPopulateLastRunPayload, configurationId, conversationDetailId, createArtifacts || false, createNotification || false, sourceArtifactId, sourceArtifactVersionId, conversationId, planMode, requestedSkillIDs, undefined, // taskGraphDebug
|
|
740
|
+
historyFrom);
|
|
855
741
|
LogStatus(`🔥 Fire-and-forget: Agent ${effectiveAgentId} execution started in background for session ${sessionId}`);
|
|
856
742
|
return {
|
|
857
743
|
success: true,
|
|
@@ -862,7 +748,8 @@ let RunAIAgentResolver = class RunAIAgentResolver extends ResolverBase {
|
|
|
862
748
|
return this.executeAIAgent(p, dataSource, effectiveAgentId, effectiveUserPayload, messagesJson, sessionId, pubSub, data, payload, undefined, // templateData
|
|
863
749
|
lastRunId, autoPopulateLastRunPayload, configurationId, conversationDetailId, createArtifacts || false, createNotification || false, sourceArtifactId, sourceArtifactVersionId, conversationId, // LATENCY OPT #2: pass pre-resolved conversationId
|
|
864
750
|
undefined, // runRef
|
|
865
|
-
planMode, requestedSkillIDs
|
|
751
|
+
planMode, requestedSkillIDs, undefined, // taskGraphDebug
|
|
752
|
+
historyFrom);
|
|
866
753
|
}
|
|
867
754
|
catch (error) {
|
|
868
755
|
const errorMessage = error.message || 'Unknown error loading conversation history';
|
|
@@ -1028,10 +915,12 @@ let RunAIAgentResolver = class RunAIAgentResolver extends ResolverBase {
|
|
|
1028
915
|
/** Per-request Plan Mode toggle — threaded through to ExecuteAgentParams.planMode. */
|
|
1029
916
|
planMode,
|
|
1030
917
|
/** Skill IDs the user requested — threaded through to ExecuteAgentParams.requestedSkillIDs. */
|
|
1031
|
-
requestedSkillIDs, taskGraphDebug
|
|
918
|
+
requestedSkillIDs, taskGraphDebug,
|
|
919
|
+
/** History floor — threaded through to ExecuteAgentParams.ConversationHistoryFrom. */
|
|
920
|
+
conversationHistoryFrom) {
|
|
1032
921
|
// Ref the liveness pulse reads to enrich heartbeats once the run is created.
|
|
1033
922
|
const runRef = { current: null };
|
|
1034
|
-
const pulse =
|
|
923
|
+
const pulse = StartLivenessPulse({
|
|
1035
924
|
pubSub,
|
|
1036
925
|
sessionId,
|
|
1037
926
|
ownerUserId: userPayload.userRecord.ID,
|
|
@@ -1041,24 +930,15 @@ let RunAIAgentResolver = class RunAIAgentResolver extends ResolverBase {
|
|
|
1041
930
|
: undefined,
|
|
1042
931
|
});
|
|
1043
932
|
// Execute in background - errors are handled within, not propagated
|
|
1044
|
-
this.executeAIAgent(p, dataSource, agentId, userPayload, messagesJson, sessionId, pubSub, data, payload, undefined, lastRunId, autoPopulateLastRunPayload, configurationId, conversationDetailId, createArtifacts, createNotification, sourceArtifactId, sourceArtifactVersionId, conversationId, runRef, planMode, requestedSkillIDs, taskGraphDebug).catch((error) => {
|
|
933
|
+
this.executeAIAgent(p, dataSource, agentId, userPayload, messagesJson, sessionId, pubSub, data, payload, undefined, lastRunId, autoPopulateLastRunPayload, configurationId, conversationDetailId, createArtifacts, createNotification, sourceArtifactId, sourceArtifactVersionId, conversationId, runRef, planMode, requestedSkillIDs, taskGraphDebug, conversationHistoryFrom).catch((error) => {
|
|
1045
934
|
// Background execution failed unexpectedly (executeAIAgent has its own try-catch,
|
|
1046
935
|
// so this would only fire for truly unexpected errors).
|
|
1047
936
|
const errorMessage = (error instanceof Error) ? error.message : 'Unknown background execution error';
|
|
1048
937
|
LogError(`🔥 Fire-and-forget background execution failed: ${errorMessage}`, undefined, error);
|
|
1049
|
-
// Publish error completion event so the client knows the agent failed
|
|
1050
|
-
|
|
1051
|
-
|
|
1052
|
-
|
|
1053
|
-
type: 'complete',
|
|
1054
|
-
timestamp: new Date(),
|
|
1055
|
-
conversationDetailId,
|
|
1056
|
-
success: false,
|
|
1057
|
-
errorMessage,
|
|
1058
|
-
result: JSON.stringify({ success: false, errorMessage })
|
|
1059
|
-
};
|
|
1060
|
-
this.PublishStreamingUpdate(pubSub, errorCompletionData, userPayload);
|
|
1061
|
-
}).finally(() => pulse.stop());
|
|
938
|
+
// Publish error completion event so the client knows the agent failed.
|
|
939
|
+
// The publisher is created inside executeAIAgent, which rejected before returning one.
|
|
940
|
+
new AgentRunStatusPublisher(pubSub, userPayload, sessionId).PublishFailure(conversationDetailId, errorMessage);
|
|
941
|
+
}).finally(() => pulse.Stop());
|
|
1062
942
|
}
|
|
1063
943
|
/**
|
|
1064
944
|
* Load conversation history with attachments from database.
|
|
@@ -1074,18 +954,20 @@ let RunAIAgentResolver = class RunAIAgentResolver extends ResolverBase {
|
|
|
1074
954
|
*
|
|
1075
955
|
* Opt #8: Switched from ResultType 'entity_object' to 'simple' with explicit Fields.
|
|
1076
956
|
* The history query only needs the window-assembly fields (ConversationWindowFields:
|
|
1077
|
-
* ID, Sequence, Role, Message, SummaryOfEarlierConversation) from each
|
|
957
|
+
* ID, Sequence, Role, Message, SummaryOfEarlierConversation, __mj_CreatedAt) from each
|
|
1078
958
|
* ConversationDetail record. Using 'entity_object' created full BaseEntity instances
|
|
1079
959
|
* with getters/setters, dirty tracking, and validation — none of which are needed for
|
|
1080
960
|
* read-only history assembly. The 'simple' result type returns plain JS objects,
|
|
1081
961
|
* reducing per-record overhead (~30ms total savings).
|
|
1082
962
|
*/
|
|
1083
|
-
async loadConversationHistoryWithAttachments(conversationId, contextUser, maxMessages, provider, excludeDetailIds
|
|
963
|
+
async loadConversationHistoryWithAttachments(conversationId, contextUser, maxMessages, provider, excludeDetailIds,
|
|
964
|
+
/** History floor: only rows written at or after it are loaded, and no summary is used. */
|
|
965
|
+
historyFrom) {
|
|
1084
966
|
// Context windowing (summary boundary + raw tail, or legacy last-N when no
|
|
1085
967
|
// summary exists) shares ONE fold implementation with all other callers —
|
|
1086
968
|
// ConversationEngine.AssembleContextWindow — and the ROWS come from the
|
|
1087
969
|
// single-sourced fresh-per-request loader (same one the compaction pass uses).
|
|
1088
|
-
//
|
|
970
|
+
// Four deliberate properties vs. the engine's cached GetAgentContextWindow:
|
|
1089
971
|
// 1. Entity RLS applies (the engine path loads via a stored query with no
|
|
1090
972
|
// row-level security — wrong for guest/widget-scoped users), and the
|
|
1091
973
|
// process-global per-conversation cache — keyed by conversation, not user —
|
|
@@ -1094,10 +976,13 @@ let RunAIAgentResolver = class RunAIAgentResolver extends ResolverBase {
|
|
|
1094
976
|
// cross-server staleness (a warm cache misses rows written by other nodes).
|
|
1095
977
|
// 3. Load failure THROWS → the mutation fails, instead of silently running
|
|
1096
978
|
// the agent against zero history.
|
|
1097
|
-
|
|
979
|
+
// 4. A history floor (`historyFrom`) is applied in the query, so rows before it never
|
|
980
|
+
// leave the database, and again in the assembly, which then skips the summary.
|
|
981
|
+
const rows = await ConversationEngine.LoadWindowRowsFresh(conversationId, contextUser, provider, historyFrom);
|
|
1098
982
|
const window = ConversationEngine.AssembleContextWindow(rows, {
|
|
1099
983
|
maxTailMessages: maxMessages,
|
|
1100
|
-
excludeDetailIds
|
|
984
|
+
excludeDetailIds,
|
|
985
|
+
historyFrom
|
|
1101
986
|
});
|
|
1102
987
|
// Batch load input artifacts for the windowed messages. Since the backfill migration
|
|
1103
988
|
// (V202605271400__Backfill_Attachment_Artifacts) converted all legacy
|
|
@@ -1144,19 +1029,19 @@ let RunAIAgentResolver = class RunAIAgentResolver extends ResolverBase {
|
|
|
1144
1029
|
const ext = fileName.includes('.') ? fileName.split('.').pop() : undefined;
|
|
1145
1030
|
const artifactType = ArtifactMetadataEngine.Instance.GetArtifactTypeByMimeType(artifactMime, ext);
|
|
1146
1031
|
const decision = RouteArtifact({
|
|
1147
|
-
|
|
1148
|
-
|
|
1032
|
+
TypeDefault: artifactType?.DefaultDeliveryMode ?? 'ToolsOnly',
|
|
1033
|
+
ForceToolsOnly: artifactVersion.ForceToolsOnly,
|
|
1149
1034
|
mimeType: artifactMime,
|
|
1150
|
-
|
|
1151
|
-
|
|
1152
|
-
|
|
1153
|
-
|
|
1154
|
-
|
|
1035
|
+
SizeBytes: artifactVersion.ContentSizeBytes ?? 0,
|
|
1036
|
+
InlineSizeCap: INLINE_SIZE_CAP,
|
|
1037
|
+
ModelSupportsModality: () => true,
|
|
1038
|
+
ModelName: '<resolver>',
|
|
1039
|
+
ArtifactTypeName: artifactType?.Name ?? artifactMime,
|
|
1155
1040
|
});
|
|
1156
1041
|
if (artifactVersion.ContentMode === 'File' && artifactVersion.FileID) {
|
|
1157
1042
|
if (decision.delivery !== 'inline') {
|
|
1158
|
-
if (decision.delivery === 'tools' && decision.
|
|
1159
|
-
LogStatus(`[RunAIAgentResolver] ${decision.
|
|
1043
|
+
if (decision.delivery === 'tools' && decision.Annotation) {
|
|
1044
|
+
LogStatus(`[RunAIAgentResolver] ${decision.Annotation}`);
|
|
1160
1045
|
}
|
|
1161
1046
|
continue;
|
|
1162
1047
|
}
|
|
@@ -1175,8 +1060,8 @@ let RunAIAgentResolver = class RunAIAgentResolver extends ResolverBase {
|
|
|
1175
1060
|
// Text-mode artifact (ContentMode = 'Text'). Honor the
|
|
1176
1061
|
// routing decision the same way as for file-mode.
|
|
1177
1062
|
if (decision.delivery !== 'inline') {
|
|
1178
|
-
if (decision.delivery === 'tools' && decision.
|
|
1179
|
-
LogStatus(`[RunAIAgentResolver] ${decision.
|
|
1063
|
+
if (decision.delivery === 'tools' && decision.Annotation) {
|
|
1064
|
+
LogStatus(`[RunAIAgentResolver] ${decision.Annotation}`);
|
|
1180
1065
|
}
|
|
1181
1066
|
continue;
|
|
1182
1067
|
}
|
|
@@ -1365,8 +1250,9 @@ __decorate([
|
|
|
1365
1250
|
__param(15, Arg('fireAndForget', { nullable: true })),
|
|
1366
1251
|
__param(16, Arg('planMode', { nullable: true })),
|
|
1367
1252
|
__param(17, Arg('requestedSkillIDs', () => [String], { nullable: true })),
|
|
1253
|
+
__param(18, Arg('agentHistoryFrom', { nullable: true })),
|
|
1368
1254
|
__metadata("design:type", Function),
|
|
1369
|
-
__metadata("design:paramtypes", [String, String, Object, String, PubSubEngine, Number, String, String, String, Boolean, String, Boolean, Boolean, String, String, Boolean, Boolean, Array]),
|
|
1255
|
+
__metadata("design:paramtypes", [String, String, Object, String, PubSubEngine, Number, String, String, String, Boolean, String, Boolean, Boolean, String, String, Boolean, Boolean, Array, String]),
|
|
1370
1256
|
__metadata("design:returntype", Promise)
|
|
1371
1257
|
], RunAIAgentResolver.prototype, "RunAIAgentFromConversationDetail", null);
|
|
1372
1258
|
__decorate([
|
|
@@ -1395,6 +1281,21 @@ RunAIAgentResolver = __decorate([
|
|
|
1395
1281
|
Resolver()
|
|
1396
1282
|
], RunAIAgentResolver);
|
|
1397
1283
|
export { RunAIAgentResolver };
|
|
1284
|
+
/**
|
|
1285
|
+
* Reads the `agentHistoryFrom` argument of `RunAIAgentFromConversationDetail`: an ISO-8601
|
|
1286
|
+
* timestamp. Absent means no floor. A value that is present but not a timestamp throws — a
|
|
1287
|
+
* floor the caller asked for must fail the request, never be dropped, since dropping it lets
|
|
1288
|
+
* the run read the history it was meant to keep out.
|
|
1289
|
+
*/
|
|
1290
|
+
function parseAgentHistoryFrom(raw) {
|
|
1291
|
+
if (raw == null)
|
|
1292
|
+
return undefined;
|
|
1293
|
+
const parsed = new Date(raw);
|
|
1294
|
+
if (Number.isNaN(parsed.getTime())) {
|
|
1295
|
+
throw new Error(`agentHistoryFrom must be an ISO-8601 timestamp; received "${raw}"`);
|
|
1296
|
+
}
|
|
1297
|
+
return parsed;
|
|
1298
|
+
}
|
|
1398
1299
|
function parseTaskGraphDebug(raw) {
|
|
1399
1300
|
if (!raw)
|
|
1400
1301
|
return undefined;
|