@memberjunction/server 6.2.0-edge.6 → 6.2.0-edge.8
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 +69 -0
- package/dist/.tsbuildinfo +1 -1
- package/dist/agentSessions/BridgeHostInstance.d.ts +8 -3
- package/dist/agentSessions/BridgeHostInstance.d.ts.map +1 -1
- package/dist/agentSessions/BridgeHostInstance.js +14 -4
- package/dist/agentSessions/BridgeHostInstance.js.map +1 -1
- package/dist/agentSessions/HandoffOfferExpiry.d.ts +10 -0
- package/dist/agentSessions/HandoffOfferExpiry.d.ts.map +1 -0
- package/dist/agentSessions/HandoffOfferExpiry.js +18 -0
- package/dist/agentSessions/HandoffOfferExpiry.js.map +1 -0
- package/dist/agentSessions/ReturningVisitorRecap.js +1 -0
- package/dist/agentSessions/ReturningVisitorRecap.js.map +1 -1
- package/dist/agentSessions/SessionJanitor.d.ts +31 -8
- package/dist/agentSessions/SessionJanitor.d.ts.map +1 -1
- package/dist/agentSessions/SessionJanitor.js +85 -41
- package/dist/agentSessions/SessionJanitor.js.map +1 -1
- package/dist/agentSessions/SessionManager.d.ts +14 -4
- package/dist/agentSessions/SessionManager.d.ts.map +1 -1
- package/dist/agentSessions/SessionManager.js +28 -4
- package/dist/agentSessions/SessionManager.js.map +1 -1
- package/dist/agentSessions/conversationBrowsers.d.ts +61 -0
- package/dist/agentSessions/conversationBrowsers.d.ts.map +1 -0
- package/dist/agentSessions/conversationBrowsers.js +118 -0
- package/dist/agentSessions/conversationBrowsers.js.map +1 -0
- package/dist/agentSessions/sessionDeadline.d.ts +43 -0
- package/dist/agentSessions/sessionDeadline.d.ts.map +1 -0
- package/dist/agentSessions/sessionDeadline.js +68 -0
- package/dist/agentSessions/sessionDeadline.js.map +1 -0
- package/dist/auth/APIKeyScopeAuth.d.ts.map +1 -1
- package/dist/auth/APIKeyScopeAuth.js +5 -4
- package/dist/auth/APIKeyScopeAuth.js.map +1 -1
- package/dist/auth/loginEmailResolution.d.ts +41 -0
- package/dist/auth/loginEmailResolution.d.ts.map +1 -0
- package/dist/auth/loginEmailResolution.js +47 -0
- package/dist/auth/loginEmailResolution.js.map +1 -0
- package/dist/auth/magicLink/MagicLinkKeys.d.ts +50 -2
- package/dist/auth/magicLink/MagicLinkKeys.d.ts.map +1 -1
- package/dist/auth/magicLink/MagicLinkKeys.js +129 -12
- package/dist/auth/magicLink/MagicLinkKeys.js.map +1 -1
- package/dist/auth/magicLink/MagicLinkRouter.d.ts +3 -0
- package/dist/auth/magicLink/MagicLinkRouter.d.ts.map +1 -1
- package/dist/auth/magicLink/MagicLinkRouter.js +23 -5
- package/dist/auth/magicLink/MagicLinkRouter.js.map +1 -1
- package/dist/auth/magicLink/MagicLinkService.d.ts +39 -5
- package/dist/auth/magicLink/MagicLinkService.d.ts.map +1 -1
- package/dist/auth/magicLink/MagicLinkService.js +221 -9
- package/dist/auth/magicLink/MagicLinkService.js.map +1 -1
- package/dist/auth/magicLink/index.d.ts +1 -1
- package/dist/auth/magicLink/index.d.ts.map +1 -1
- package/dist/auth/magicLink/index.js +1 -1
- package/dist/auth/magicLink/index.js.map +1 -1
- package/dist/auth/magicLink/redeemLanding.d.ts +2 -2
- package/dist/auth/magicLink/redeemLanding.d.ts.map +1 -1
- package/dist/auth/magicLink/redeemLanding.js +7 -4
- package/dist/auth/magicLink/redeemLanding.js.map +1 -1
- package/dist/auth/magicLink/types.d.ts +27 -3
- package/dist/auth/magicLink/types.d.ts.map +1 -1
- package/dist/auth/magicLink/types.js +0 -4
- package/dist/auth/magicLink/types.js.map +1 -1
- package/dist/auth/newUsers.d.ts.map +1 -1
- package/dist/auth/newUsers.js +1 -0
- package/dist/auth/newUsers.js.map +1 -1
- package/dist/backgroundSweepConfigUnits.d.ts +231 -0
- package/dist/backgroundSweepConfigUnits.d.ts.map +1 -0
- package/dist/backgroundSweepConfigUnits.js +180 -0
- package/dist/backgroundSweepConfigUnits.js.map +1 -0
- package/dist/broadcast/BaseCacheInvalidationBroadcastProvider.d.ts.map +1 -1
- package/dist/broadcast/BaseCacheInvalidationBroadcastProvider.js +2 -1
- package/dist/broadcast/BaseCacheInvalidationBroadcastProvider.js.map +1 -1
- package/dist/config.d.ts +906 -8
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +59 -0
- package/dist/config.js.map +1 -1
- package/dist/context.d.ts +2 -0
- package/dist/context.d.ts.map +1 -1
- package/dist/context.js +41 -12
- package/dist/context.js.map +1 -1
- package/dist/coreRoutes.d.ts +3 -1
- package/dist/coreRoutes.d.ts.map +1 -1
- package/dist/coreRoutes.js +6 -4
- package/dist/coreRoutes.js.map +1 -1
- package/dist/generated/graphql-schemas/__mj.d.ts +1072 -5
- package/dist/generated/graphql-schemas/__mj.d.ts.map +1 -1
- package/dist/generated/graphql-schemas/__mj.js +10174 -4618
- package/dist/generated/graphql-schemas/__mj.js.map +1 -1
- package/dist/generic/OrphanedConversationDetailReconciler.d.ts +11 -0
- package/dist/generic/OrphanedConversationDetailReconciler.d.ts.map +1 -1
- package/dist/generic/OrphanedConversationDetailReconciler.js +27 -1
- package/dist/generic/OrphanedConversationDetailReconciler.js.map +1 -1
- package/dist/generic/ResolverBase.d.ts +50 -5
- package/dist/generic/ResolverBase.d.ts.map +1 -1
- package/dist/generic/ResolverBase.js +329 -132
- package/dist/generic/ResolverBase.js.map +1 -1
- package/dist/generic/RunViewResolver.d.ts +4 -0
- package/dist/generic/RunViewResolver.d.ts.map +1 -1
- package/dist/generic/RunViewResolver.js +47 -7
- package/dist/generic/RunViewResolver.js.map +1 -1
- package/dist/globalCors.d.ts.map +1 -1
- package/dist/globalCors.js +1 -0
- package/dist/globalCors.js.map +1 -1
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +201 -43
- package/dist/index.js.map +1 -1
- package/dist/integration/ConnectionPause.d.ts +121 -0
- package/dist/integration/ConnectionPause.d.ts.map +1 -0
- package/dist/integration/ConnectionPause.js +183 -0
- package/dist/integration/ConnectionPause.js.map +1 -0
- package/dist/integration/CustomColumnPromoter.d.ts +72 -6
- package/dist/integration/CustomColumnPromoter.d.ts.map +1 -1
- package/dist/integration/CustomColumnPromoter.js +87 -46
- package/dist/integration/CustomColumnPromoter.js.map +1 -1
- package/dist/integration/EntityMapLifecycle.d.ts +78 -4
- package/dist/integration/EntityMapLifecycle.d.ts.map +1 -1
- package/dist/integration/EntityMapLifecycle.js +199 -5
- package/dist/integration/EntityMapLifecycle.js.map +1 -1
- package/dist/integration/InactiveRowWarnings.d.ts +31 -0
- package/dist/integration/InactiveRowWarnings.d.ts.map +1 -1
- package/dist/integration/InactiveRowWarnings.js +29 -0
- package/dist/integration/InactiveRowWarnings.js.map +1 -1
- package/dist/integration/ObjectNamesByID.d.ts +28 -0
- package/dist/integration/ObjectNamesByID.d.ts.map +1 -0
- package/dist/integration/ObjectNamesByID.js +87 -0
- package/dist/integration/ObjectNamesByID.js.map +1 -0
- package/dist/integration/PostRestartIntrospect.d.ts +26 -0
- package/dist/integration/PostRestartIntrospect.d.ts.map +1 -0
- package/dist/integration/PostRestartIntrospect.js +27 -0
- package/dist/integration/PostRestartIntrospect.js.map +1 -0
- package/dist/integration/RSUPostRestartProgress.d.ts +176 -0
- package/dist/integration/RSUPostRestartProgress.d.ts.map +1 -0
- package/dist/integration/RSUPostRestartProgress.js +323 -0
- package/dist/integration/RSUPostRestartProgress.js.map +1 -0
- package/dist/integration/RSUProgressBridge.d.ts +41 -2
- package/dist/integration/RSUProgressBridge.d.ts.map +1 -1
- package/dist/integration/RSUProgressBridge.js +84 -1
- package/dist/integration/RSUProgressBridge.js.map +1 -1
- package/dist/integration/RunArtifactAuthorization.d.ts +39 -0
- package/dist/integration/RunArtifactAuthorization.d.ts.map +1 -0
- package/dist/integration/RunArtifactAuthorization.js +45 -0
- package/dist/integration/RunArtifactAuthorization.js.map +1 -0
- package/dist/integration/SchemaRefreshLaunch.d.ts +9 -0
- package/dist/integration/SchemaRefreshLaunch.d.ts.map +1 -1
- package/dist/integration/SchemaRefreshLaunch.js +3 -2
- package/dist/integration/SchemaRefreshLaunch.js.map +1 -1
- package/dist/integration/ScopedFieldsForBuild.d.ts +46 -0
- package/dist/integration/ScopedFieldsForBuild.d.ts.map +1 -0
- package/dist/integration/ScopedFieldsForBuild.js +91 -0
- package/dist/integration/ScopedFieldsForBuild.js.map +1 -0
- package/dist/integration/TargetConfigGuard.d.ts +40 -0
- package/dist/integration/TargetConfigGuard.d.ts.map +1 -0
- package/dist/integration/TargetConfigGuard.js +40 -0
- package/dist/integration/TargetConfigGuard.js.map +1 -0
- package/dist/logging/StartupLogger.d.ts +50 -0
- package/dist/logging/StartupLogger.d.ts.map +1 -1
- package/dist/logging/StartupLogger.js +15 -22
- package/dist/logging/StartupLogger.js.map +1 -1
- package/dist/middleware/BaseServerMiddleware.d.ts +21 -3
- package/dist/middleware/BaseServerMiddleware.d.ts.map +1 -1
- package/dist/middleware/BaseServerMiddleware.js +4 -2
- package/dist/middleware/BaseServerMiddleware.js.map +1 -1
- package/dist/realtimeSessions/ownedRealtimeSession.d.ts.map +1 -1
- package/dist/realtimeSessions/ownedRealtimeSession.js +2 -3
- package/dist/realtimeSessions/ownedRealtimeSession.js.map +1 -1
- package/dist/realtimeSessions/sessionAccess.d.ts +15 -0
- package/dist/realtimeSessions/sessionAccess.d.ts.map +1 -1
- package/dist/realtimeSessions/sessionAccess.js +22 -0
- package/dist/realtimeSessions/sessionAccess.js.map +1 -1
- package/dist/realtimeWidget/WidgetSessionService.d.ts.map +1 -1
- package/dist/realtimeWidget/WidgetSessionService.js +2 -0
- package/dist/realtimeWidget/WidgetSessionService.js.map +1 -1
- package/dist/realtimeWidget/visitorIdentity.d.ts.map +1 -1
- package/dist/realtimeWidget/visitorIdentity.js +1 -0
- package/dist/realtimeWidget/visitorIdentity.js.map +1 -1
- package/dist/realtimeWidget/widgetCore.d.ts.map +1 -1
- package/dist/realtimeWidget/widgetCore.js +4 -7
- package/dist/realtimeWidget/widgetCore.js.map +1 -1
- package/dist/realtimeWidget/widgetGuestElevation.js +1 -0
- package/dist/realtimeWidget/widgetGuestElevation.js.map +1 -1
- package/dist/requestOrigin.d.ts +22 -0
- package/dist/requestOrigin.d.ts.map +1 -0
- package/dist/requestOrigin.js +60 -0
- package/dist/requestOrigin.js.map +1 -0
- package/dist/resolvers/AgentRunStatusPublisher.d.ts +10 -0
- package/dist/resolvers/AgentRunStatusPublisher.d.ts.map +1 -1
- package/dist/resolvers/AgentRunStatusPublisher.js +18 -2
- package/dist/resolvers/AgentRunStatusPublisher.js.map +1 -1
- package/dist/resolvers/AgentSessionResolver.d.ts.map +1 -1
- package/dist/resolvers/AgentSessionResolver.js +6 -2
- package/dist/resolvers/AgentSessionResolver.js.map +1 -1
- package/dist/resolvers/AutotagPipelineResolver.d.ts +1 -1
- package/dist/resolvers/AutotagPipelineResolver.d.ts.map +1 -1
- package/dist/resolvers/AutotagPipelineResolver.js +61 -16
- package/dist/resolvers/AutotagPipelineResolver.js.map +1 -1
- package/dist/resolvers/ConversationRunEventsResolver.d.ts.map +1 -1
- package/dist/resolvers/ConversationRunEventsResolver.js +2 -0
- package/dist/resolvers/ConversationRunEventsResolver.js.map +1 -1
- package/dist/resolvers/ExecuteRemoteOperationResolver.d.ts +6 -0
- package/dist/resolvers/ExecuteRemoteOperationResolver.d.ts.map +1 -1
- package/dist/resolvers/ExecuteRemoteOperationResolver.js +30 -7
- package/dist/resolvers/ExecuteRemoteOperationResolver.js.map +1 -1
- package/dist/resolvers/GetDataResolver.d.ts.map +1 -1
- package/dist/resolvers/GetDataResolver.js +34 -13
- package/dist/resolvers/GetDataResolver.js.map +1 -1
- package/dist/resolvers/InfoResolver.js +1 -1
- package/dist/resolvers/InfoResolver.js.map +1 -1
- package/dist/resolvers/IntegrationDiscoveryResolver.d.ts +401 -11
- package/dist/resolvers/IntegrationDiscoveryResolver.d.ts.map +1 -1
- package/dist/resolvers/IntegrationDiscoveryResolver.js +2690 -1305
- package/dist/resolvers/IntegrationDiscoveryResolver.js.map +1 -1
- package/dist/resolvers/MCPResolver.d.ts.map +1 -1
- package/dist/resolvers/MCPResolver.js +13 -2
- package/dist/resolvers/MCPResolver.js.map +1 -1
- package/dist/resolvers/QuerySystemUserResolver.d.ts +38 -1
- package/dist/resolvers/QuerySystemUserResolver.d.ts.map +1 -1
- package/dist/resolvers/QuerySystemUserResolver.js +181 -88
- package/dist/resolvers/QuerySystemUserResolver.js.map +1 -1
- package/dist/resolvers/RealtimeBridgeResolver.d.ts.map +1 -1
- package/dist/resolvers/RealtimeBridgeResolver.js +1 -0
- package/dist/resolvers/RealtimeBridgeResolver.js.map +1 -1
- package/dist/resolvers/RealtimeClientSessionResolver.d.ts +6 -0
- package/dist/resolvers/RealtimeClientSessionResolver.d.ts.map +1 -1
- package/dist/resolvers/RealtimeClientSessionResolver.js +36 -5
- package/dist/resolvers/RealtimeClientSessionResolver.js.map +1 -1
- package/dist/resolvers/RemoteBrowserActionResolver.d.ts +62 -10
- package/dist/resolvers/RemoteBrowserActionResolver.d.ts.map +1 -1
- package/dist/resolvers/RemoteBrowserActionResolver.js +217 -34
- package/dist/resolvers/RemoteBrowserActionResolver.js.map +1 -1
- package/dist/resolvers/RunAIAgentResolver.d.ts +24 -8
- package/dist/resolvers/RunAIAgentResolver.d.ts.map +1 -1
- package/dist/resolvers/RunAIAgentResolver.js +185 -67
- package/dist/resolvers/RunAIAgentResolver.js.map +1 -1
- package/dist/resolvers/RunAIPromptResolver.d.ts +5 -3
- package/dist/resolvers/RunAIPromptResolver.d.ts.map +1 -1
- package/dist/resolvers/RunAIPromptResolver.js +19 -18
- package/dist/resolvers/RunAIPromptResolver.js.map +1 -1
- package/dist/resolvers/RunTemplateResolver.d.ts.map +1 -1
- package/dist/resolvers/RunTemplateResolver.js +3 -1
- package/dist/resolvers/RunTemplateResolver.js.map +1 -1
- package/dist/resolvers/SqlLoggingConfigResolver.d.ts.map +1 -1
- package/dist/resolvers/SqlLoggingConfigResolver.js +7 -8
- package/dist/resolvers/SqlLoggingConfigResolver.js.map +1 -1
- package/dist/resolvers/TagGovernanceResolver.d.ts +12 -0
- package/dist/resolvers/TagGovernanceResolver.d.ts.map +1 -1
- package/dist/resolvers/TagGovernanceResolver.js +84 -0
- package/dist/resolvers/TagGovernanceResolver.js.map +1 -1
- package/dist/resolvers/TelemetryResolver.d.ts +13 -8
- package/dist/resolvers/TelemetryResolver.d.ts.map +1 -1
- package/dist/resolvers/TelemetryResolver.js +40 -9
- package/dist/resolvers/TelemetryResolver.js.map +1 -1
- package/dist/resolvers/meetingRecordingRegistration.d.ts.map +1 -1
- package/dist/resolvers/meetingRecordingRegistration.js +2 -0
- package/dist/resolvers/meetingRecordingRegistration.js.map +1 -1
- package/dist/resolvers/meetings/meetingMutations.d.ts.map +1 -1
- package/dist/resolvers/meetings/meetingMutations.js +34 -4
- package/dist/resolvers/meetings/meetingMutations.js.map +1 -1
- package/dist/rest/MediaAccessKeys.d.ts.map +1 -1
- package/dist/rest/MediaAccessKeys.js +6 -2
- package/dist/rest/MediaAccessKeys.js.map +1 -1
- package/dist/rest/OAuthCallbackHandler.d.ts.map +1 -1
- package/dist/rest/OAuthCallbackHandler.js +11 -5
- package/dist/rest/OAuthCallbackHandler.js.map +1 -1
- package/dist/rest/RealtimeRecordingHandler.d.ts +3 -3
- package/dist/rest/RealtimeRecordingHandler.d.ts.map +1 -1
- package/dist/rest/RealtimeRecordingHandler.js +2 -4
- package/dist/rest/RealtimeRecordingHandler.js.map +1 -1
- package/dist/rest/ViewOperationsHandler.d.ts.map +1 -1
- package/dist/rest/ViewOperationsHandler.js +2 -1
- package/dist/rest/ViewOperationsHandler.js.map +1 -1
- package/dist/rest/setupRESTEndpoints.d.ts +3 -1
- package/dist/rest/setupRESTEndpoints.d.ts.map +1 -1
- package/dist/rest/setupRESTEndpoints.js +11 -2
- package/dist/rest/setupRESTEndpoints.js.map +1 -1
- package/dist/services/DurableEntityActionTaskSubmitter.d.ts.map +1 -1
- package/dist/services/DurableEntityActionTaskSubmitter.js +6 -1
- package/dist/services/DurableEntityActionTaskSubmitter.js.map +1 -1
- package/dist/services/TaskGraphActionRunner.d.ts.map +1 -1
- package/dist/services/TaskGraphActionRunner.js +2 -26
- package/dist/services/TaskGraphActionRunner.js.map +1 -1
- package/dist/services/TaskGraphAgentRunner.d.ts +6 -0
- package/dist/services/TaskGraphAgentRunner.d.ts.map +1 -1
- package/dist/services/TaskGraphAgentRunner.js +38 -0
- package/dist/services/TaskGraphAgentRunner.js.map +1 -1
- package/dist/services/TaskGraphContinuationDeliverer.d.ts.map +1 -1
- package/dist/services/TaskGraphContinuationDeliverer.js +1 -0
- package/dist/services/TaskGraphContinuationDeliverer.js.map +1 -1
- package/dist/services/WorkQueueHostService.d.ts +2 -1
- package/dist/services/WorkQueueHostService.d.ts.map +1 -1
- package/dist/services/WorkQueueHostService.js +19 -4
- package/dist/services/WorkQueueHostService.js.map +1 -1
- package/dist/services/workQueueConfig.d.ts +2 -2
- package/dist/services/workQueueConfig.js +5 -5
- package/dist/services/workQueueConfig.js.map +1 -1
- package/dist/sharedCache.js +1 -1
- package/dist/sharedCache.js.map +1 -1
- package/dist/types.d.ts +17 -0
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js.map +1 -1
- package/dist/util.d.ts.map +1 -1
- package/dist/util.js +55 -2
- package/dist/util.js.map +1 -1
- package/package.json +107 -100
- package/src/__tests__/APIKeyScopeAuth.test.ts +4 -8
- package/src/__tests__/ActiveOperations.test.ts +68 -0
- package/src/__tests__/AgentSessionResolver.ownership.test.ts +13 -0
- package/src/__tests__/AssertTargetConfigs.test.ts +75 -0
- package/src/__tests__/BatchApplyParity.test.ts +109 -0
- package/src/__tests__/BridgeHostInstance.test.ts +42 -0
- package/src/__tests__/CollectInactiveRowWarnings.test.ts +115 -0
- package/src/__tests__/ConnectionPause.test.ts +192 -0
- package/src/__tests__/ConnectionPauseResolver.test.ts +166 -0
- package/src/__tests__/ConnectionPauseSave.test.ts +143 -0
- package/src/__tests__/CustomColumnPromoterCompletion.test.ts +142 -0
- package/src/__tests__/DeleteConnectionRemovesPerConnectionCatalog.test.ts +51 -0
- package/src/__tests__/DetachedDiscoveryStart.test.ts +65 -0
- package/src/__tests__/DurableEntityActionTaskSubmitter.test.ts +73 -0
- package/src/__tests__/EntityMapLifecycle.rekey.test.ts +252 -0
- package/src/__tests__/ExecuteRemoteOperationResolver.test.ts +213 -0
- package/src/__tests__/HandoffOfferExpiry.test.ts +40 -0
- package/src/__tests__/IntegrationRunArtifactAuthorization.test.ts +126 -0
- package/src/__tests__/MagicLinkKeys.test.ts +102 -0
- package/src/__tests__/MediaAccessKeys.test.ts +57 -10
- package/src/__tests__/NewArrivalsDefaultDisabled.test.ts +50 -0
- package/src/__tests__/ObjectNamesByID.test.ts +176 -0
- package/src/__tests__/PostRestartMapsInCatalogScope.test.ts +146 -0
- package/src/__tests__/QuerySystemUserResolver.childRows.test.ts +80 -0
- package/src/__tests__/QuerySystemUserResolver.collision.test.ts +200 -0
- package/src/__tests__/QuerySystemUserResolver.permissions.test.ts +132 -0
- package/src/__tests__/RSUPostRestartProgress.test.ts +343 -0
- package/src/__tests__/RSUProgressBridge.test.ts +188 -5
- package/src/__tests__/RSUStartupSweepWiring.test.ts +30 -0
- package/src/__tests__/ReactivateRefreshMessage.test.ts +10 -3
- package/src/__tests__/RealtimeClientSessionResolver.test.ts +22 -0
- package/src/__tests__/{RefreshAdoptsNewColumns.test.ts → RefreshReportsNewColumns.test.ts} +25 -16
- package/src/__tests__/RemoteBrowserActionRecovery.test.ts +287 -0
- package/src/__tests__/RemoteBrowserActionResolver.goalRunLink.test.ts +3 -0
- package/src/__tests__/RemoteBrowserActionResolver.ownership.test.ts +6 -4
- package/src/__tests__/RemoteBrowserAudioStream.test.ts +3 -0
- package/src/__tests__/RemoteBrowserSnapshot.test.ts +3 -0
- package/src/__tests__/ResolverBase.clientOldValues.test.ts +327 -26
- package/src/__tests__/ResolverBase.diagnosticSenderRegistrations.test.ts +26 -0
- package/src/__tests__/ResolverBase.encryptedApiZeroReencrypt.test.ts +307 -0
- package/src/__tests__/ResolverBase.entityMessageRelay.test.ts +53 -2
- package/src/__tests__/ResolverBase.includeBinaryFields.test.ts +60 -0
- package/src/__tests__/RunAIAgentResolver.branch.test.ts +4 -0
- package/src/__tests__/RunAIAgentResolver.consultPredecessor.test.ts +289 -0
- package/src/__tests__/RunAIAgentResolver.handoff.test.ts +649 -0
- package/src/__tests__/RunAIAgentResolver.historyFrom.test.ts +2 -0
- package/src/__tests__/RunAIAgentResolver.runDataGuard.test.ts +2 -0
- package/src/__tests__/RunAIAgentResolver.stoppedPredecessor.test.ts +87 -12
- package/src/__tests__/RunAIAgentResolver.streaming.test.ts +28 -4
- package/src/__tests__/SchemaEvolutionCustomColumns.test.ts +119 -0
- package/src/__tests__/SchemaRefreshLaunch.test.ts +24 -2
- package/src/__tests__/ScopedFieldsForBuild.test.ts +192 -0
- package/src/__tests__/SessionJanitor.test.ts +195 -4
- package/src/__tests__/SessionManager.test.ts +69 -0
- package/src/__tests__/TagGovernanceAndAutotagResolvers.test.ts +261 -0
- package/src/__tests__/TagGovernanceResolver.test.ts +60 -2
- package/src/__tests__/TaskGraphActionRunner.durablePayload.test.ts +2 -2
- package/src/__tests__/TaskGraphAgentRunner.test.ts +272 -16
- package/src/__tests__/ViewOperationsHandler.test.ts +2 -5
- package/src/__tests__/WorkQueueHostService.test.ts +25 -7
- package/src/__tests__/backgroundSweepConfigUnits.test.ts +153 -0
- package/src/__tests__/contextRequestOrigin.test.ts +105 -0
- package/src/__tests__/conversationBrowsers.test.ts +62 -0
- package/src/__tests__/globalCors.test.ts +12 -0
- package/src/__tests__/magicLinkExtensionCapabilities.test.ts +413 -0
- package/src/__tests__/orphanedConversationDetailReconciler.start.test.ts +82 -0
- package/src/__tests__/ownedRealtimeSession.test.ts +14 -0
- package/src/__tests__/realtimeRecordingHandler.test.ts +7 -2
- package/src/__tests__/realtimeSessions/sessionAccess.test.ts +79 -1
- package/src/__tests__/requestOrigin.test.ts +104 -0
- package/src/__tests__/review-capture-valid-token-log.test.ts +98 -0
- package/src/__tests__/runStreams.fieldSecurity.test.ts +5 -5
- package/src/__tests__/securityHardeningPr6034.test.ts +120 -0
- package/src/__tests__/sessionDeadline.test.ts +51 -0
- package/src/__tests__/sharedCache.test.ts +11 -0
- package/src/__tests__/unifiedAuth.test.ts +73 -1
- package/src/agentSessions/BridgeHostInstance.ts +20 -5
- package/src/agentSessions/HandoffOfferExpiry.ts +18 -0
- package/src/agentSessions/ReturningVisitorRecap.ts +1 -0
- package/src/agentSessions/SessionJanitor.ts +92 -42
- package/src/agentSessions/SessionManager.ts +38 -8
- package/src/agentSessions/conversationBrowsers.ts +143 -0
- package/src/agentSessions/sessionDeadline.ts +81 -0
- package/src/auth/APIKeyScopeAuth.ts +5 -4
- package/src/auth/__tests__/loginEmailResolution.test.ts +67 -0
- package/src/auth/loginEmailResolution.ts +67 -0
- package/src/auth/magicLink/MagicLinkKeys.ts +146 -14
- package/src/auth/magicLink/MagicLinkRouter.ts +33 -6
- package/src/auth/magicLink/MagicLinkService.ts +250 -10
- package/src/auth/magicLink/index.ts +1 -1
- package/src/auth/magicLink/redeemLanding.ts +7 -4
- package/src/auth/magicLink/types.ts +28 -3
- package/src/auth/newUsers.ts +1 -0
- package/src/backgroundSweepConfigUnits.ts +213 -0
- package/src/broadcast/BaseCacheInvalidationBroadcastProvider.ts +2 -1
- package/src/config.ts +69 -0
- package/src/context.ts +46 -15
- package/src/coreRoutes.ts +14 -7
- package/src/generated/graphql-schemas/__mj.ts +10360 -6479
- package/src/generic/OrphanedConversationDetailReconciler.ts +32 -1
- package/src/generic/ResolverBase.ts +422 -143
- package/src/generic/RunViewResolver.ts +96 -49
- package/src/globalCors.ts +1 -0
- package/src/index.ts +246 -44
- package/src/integration/ConnectionPause.ts +222 -0
- package/src/integration/CustomColumnPromoter.ts +123 -53
- package/src/integration/EntityMapLifecycle.ts +229 -6
- package/src/integration/InactiveRowWarnings.ts +50 -0
- package/src/integration/ObjectNamesByID.ts +97 -0
- package/src/integration/PostRestartIntrospect.ts +49 -0
- package/src/integration/RSUPostRestartProgress.ts +359 -0
- package/src/integration/RSUProgressBridge.ts +85 -2
- package/src/integration/RunArtifactAuthorization.ts +65 -0
- package/src/integration/SchemaRefreshLaunch.ts +12 -2
- package/src/integration/ScopedFieldsForBuild.ts +113 -0
- package/src/integration/TargetConfigGuard.ts +71 -0
- package/src/logging/StartupLogger.ts +24 -0
- package/src/middleware/BaseServerMiddleware.ts +20 -3
- package/src/realtimeSessions/ownedRealtimeSession.ts +2 -6
- package/src/realtimeSessions/sessionAccess.ts +30 -0
- package/src/realtimeWidget/WidgetSessionService.ts +2 -0
- package/src/realtimeWidget/visitorIdentity.ts +1 -0
- package/src/realtimeWidget/widgetCore.ts +4 -8
- package/src/realtimeWidget/widgetGuestElevation.ts +1 -0
- package/src/requestOrigin.ts +64 -0
- package/src/resolvers/AgentRunStatusPublisher.ts +27 -2
- package/src/resolvers/AgentSessionResolver.ts +6 -2
- package/src/resolvers/AutotagPipelineResolver.ts +59 -14
- package/src/resolvers/ConversationRunEventsResolver.ts +2 -0
- package/src/resolvers/ExecuteRemoteOperationResolver.ts +41 -9
- package/src/resolvers/GetDataResolver.ts +35 -13
- package/src/resolvers/InfoResolver.ts +1 -1
- package/src/resolvers/IntegrationDiscoveryResolver.ts +1522 -203
- package/src/resolvers/MCPResolver.ts +15 -2
- package/src/resolvers/QuerySystemUserResolver.ts +211 -100
- package/src/resolvers/RealtimeBridgeResolver.ts +1 -0
- package/src/resolvers/RealtimeClientSessionResolver.ts +40 -7
- package/src/resolvers/RemoteBrowserActionResolver.ts +242 -32
- package/src/resolvers/RunAIAgentResolver.ts +265 -86
- package/src/resolvers/RunAIPromptResolver.ts +18 -18
- package/src/resolvers/RunTemplateResolver.ts +3 -1
- package/src/resolvers/SqlLoggingConfigResolver.ts +7 -9
- package/src/resolvers/TagGovernanceResolver.ts +65 -0
- package/src/resolvers/TelemetryResolver.ts +44 -9
- package/src/resolvers/__tests__/GetDataResolver.tokens.test.ts +52 -0
- package/src/resolvers/meetingRecordingRegistration.ts +2 -0
- package/src/resolvers/meetings/meetingMutations.ts +37 -7
- package/src/rest/MediaAccessKeys.ts +6 -2
- package/src/rest/OAuthCallbackHandler.ts +13 -5
- package/src/rest/RealtimeRecordingHandler.ts +5 -9
- package/src/rest/ViewOperationsHandler.ts +2 -1
- package/src/rest/setupRESTEndpoints.ts +11 -2
- package/src/services/DurableEntityActionTaskSubmitter.ts +10 -2
- package/src/services/TaskGraphActionRunner.ts +2 -23
- package/src/services/TaskGraphAgentRunner.ts +43 -0
- package/src/services/TaskGraphContinuationDeliverer.ts +1 -0
- package/src/services/WorkQueueHostService.ts +26 -4
- package/src/services/workQueueConfig.ts +5 -5
- package/src/sharedCache.ts +1 -1
- package/src/types.ts +18 -0
- package/src/util.ts +55 -3
- package/src/services/TaskOrchestration-Integration.md +0 -188
|
@@ -43,6 +43,25 @@ export class TaskGraphAgentRunner implements TaskAgentRunner {
|
|
|
43
43
|
};
|
|
44
44
|
}
|
|
45
45
|
}
|
|
46
|
+
|
|
47
|
+
let configurationId: string | undefined;
|
|
48
|
+
const requestedPreset = params.ConfigurationPresetName?.trim();
|
|
49
|
+
if (requestedPreset) {
|
|
50
|
+
const matched = AIEngine.Instance.FindActiveAgentConfigurationPreset(agent.ID, requestedPreset);
|
|
51
|
+
if (!matched) {
|
|
52
|
+
const presets = AIEngine.Instance.GetAgentConfigurationPresets(agent.ID, true);
|
|
53
|
+
const available = presets.map((p) => p.Name).join(', ') || 'none';
|
|
54
|
+
return {
|
|
55
|
+
Success: false,
|
|
56
|
+
ErrorMessage: `Agent '${agent.Name || params.AgentID}' has no active preset '${requestedPreset}'. Available: ${available}.`,
|
|
57
|
+
};
|
|
58
|
+
}
|
|
59
|
+
configurationId = matched.AIConfigurationID ?? undefined;
|
|
60
|
+
} else {
|
|
61
|
+
configurationId = parentRun?.ConfigurationID ?? undefined;
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
const parentAgentHierarchy = this.buildParentAgentHierarchy(parentRun, params);
|
|
46
65
|
const taskContext = await this.resolveTaskContext(params);
|
|
47
66
|
const conversationDetailId =
|
|
48
67
|
parentRun?.ConversationDetailID ?? taskContext.conversationDetailId ?? undefined;
|
|
@@ -66,6 +85,8 @@ export class TaskGraphAgentRunner implements TaskAgentRunner {
|
|
|
66
85
|
// rather than starting the chain over. Without it MAX_REINVOKE_DEPTH never fires.
|
|
67
86
|
continuationDepth: params.ContinuationDepth ?? 0,
|
|
68
87
|
parentRun,
|
|
88
|
+
parentAgentHierarchy,
|
|
89
|
+
configurationId,
|
|
69
90
|
// The bridge from the agent's own progress stream up to graph-level observers: the
|
|
70
91
|
// dispatcher turns these into rate-limited `NodeProgress` frames, which is how a
|
|
71
92
|
// running Agent step shows "what it is doing right now" on the workflow canvas.
|
|
@@ -221,6 +242,28 @@ export class TaskGraphAgentRunner implements TaskAgentRunner {
|
|
|
221
242
|
}
|
|
222
243
|
}
|
|
223
244
|
|
|
245
|
+
/**
|
|
246
|
+
* Reads the root-first ancestor agent name hierarchy carried on the task from when its graph was
|
|
247
|
+
* submitted (`params.ParentAgentHierarchy`), falling back to the submitting run's own agent name
|
|
248
|
+
* when no hierarchy was persisted on the parent task.
|
|
249
|
+
*/
|
|
250
|
+
private buildParentAgentHierarchy(
|
|
251
|
+
parentRun: MJAIAgentRunEntityExtended | undefined,
|
|
252
|
+
params: TaskAgentRunParams,
|
|
253
|
+
): string[] | undefined {
|
|
254
|
+
if (Array.isArray(params.ParentAgentHierarchy)) {
|
|
255
|
+
const carried = params.ParentAgentHierarchy
|
|
256
|
+
.filter((name): name is string => typeof name === 'string')
|
|
257
|
+
.map((name) => name.trim())
|
|
258
|
+
.filter((name) => name.length > 0);
|
|
259
|
+
if (carried.length > 0) {
|
|
260
|
+
return carried;
|
|
261
|
+
}
|
|
262
|
+
}
|
|
263
|
+
const submittingAgentName = parentRun?.Agent?.trim();
|
|
264
|
+
return submittingAgentName ? [submittingAgentName] : undefined;
|
|
265
|
+
}
|
|
266
|
+
|
|
224
267
|
/**
|
|
225
268
|
* Builds the agent's instruction from the task's name/description, its structured input payload,
|
|
226
269
|
* and its dependencies' outputs.
|
|
@@ -28,13 +28,25 @@ export interface StartableWorkQueueHost {
|
|
|
28
28
|
export interface WorkQueueHostStartDependencies {
|
|
29
29
|
Env: EnvironmentVariables;
|
|
30
30
|
FindUserByEmail(email: string): UserInfo | undefined;
|
|
31
|
+
FindSystemUser?(): UserInfo | undefined;
|
|
31
32
|
ConfigureEngine(user: UserInfo, provider: DatabaseProviderBase): Promise<WorkQueueEngine>;
|
|
32
33
|
CreateHost(config: WorkQueueHostConfig, engine: WorkQueueEngine, user: UserInfo, provider: DatabaseProviderBase, providerSource: WorkQueueProviderSource): StartableWorkQueueHost;
|
|
33
34
|
}
|
|
34
35
|
|
|
36
|
+
const DEFAULT_SYSTEM_USER_EMAILS = new Set(['system@memberjunction.org', 'not.set@nowhere.com']);
|
|
37
|
+
|
|
38
|
+
type IndependentProviderCapable = IMetadataProvider & {
|
|
39
|
+
CreateIndependentInstance(): Promise<IMetadataProvider>;
|
|
40
|
+
};
|
|
41
|
+
|
|
42
|
+
function hasCreateIndependentInstance(provider: IMetadataProvider): provider is IndependentProviderCapable {
|
|
43
|
+
return 'CreateIndependentInstance' in provider && typeof provider.CreateIndependentInstance === 'function';
|
|
44
|
+
}
|
|
45
|
+
|
|
35
46
|
export const DEFAULT_WORK_QUEUE_HOST_START_DEPENDENCIES: WorkQueueHostStartDependencies = {
|
|
36
47
|
Env: process.env,
|
|
37
48
|
FindUserByEmail: email => UserCache.Users.find(user => user.Email?.trim().toLowerCase() === email.trim().toLowerCase()),
|
|
49
|
+
FindSystemUser: () => UserCache.Instance.GetSystemUser(),
|
|
38
50
|
ConfigureEngine: async (user, provider) => {
|
|
39
51
|
await WorkQueueEngine.Instance.Config(false, user, provider);
|
|
40
52
|
await ReportTopologyIssues(WorkQueueEngine.Instance);
|
|
@@ -89,7 +101,7 @@ export function BuildWorkQueueHostConfig(config: WorkQueueConfig, instanceID: st
|
|
|
89
101
|
};
|
|
90
102
|
}
|
|
91
103
|
|
|
92
|
-
/** A fresh SQL Server provider per delivery over the shared pool; the server provider otherwise. */
|
|
104
|
+
/** A fresh SQL Server or PostgreSQL provider per delivery over the shared pool; the server provider otherwise. */
|
|
93
105
|
export class MJServerWorkQueueProviderSource implements WorkQueueProviderSource {
|
|
94
106
|
private readonly factory: TaskGraphProviderFactory | null;
|
|
95
107
|
|
|
@@ -97,8 +109,14 @@ export class MJServerWorkQueueProviderSource implements WorkQueueProviderSource
|
|
|
97
109
|
this.factory = pool ? new TaskGraphProviderFactory(pool) : null;
|
|
98
110
|
}
|
|
99
111
|
|
|
100
|
-
public CreateProvider(): Promise<IMetadataProvider> {
|
|
101
|
-
|
|
112
|
+
public async CreateProvider(): Promise<IMetadataProvider> {
|
|
113
|
+
if (this.factory) {
|
|
114
|
+
return this.factory.CreateProvider();
|
|
115
|
+
}
|
|
116
|
+
if (hasCreateIndependentInstance(this.fallback)) {
|
|
117
|
+
return this.fallback.CreateIndependentInstance();
|
|
118
|
+
}
|
|
119
|
+
return this.fallback;
|
|
102
120
|
}
|
|
103
121
|
}
|
|
104
122
|
|
|
@@ -116,7 +134,11 @@ export async function StartWorkQueueHost(
|
|
|
116
134
|
LogStatus(`[WorkQueue] Host disabled by ${WORK_QUEUE_DISABLE_ENV}=1 — this process publishes but runs no subscriptions.`);
|
|
117
135
|
return null;
|
|
118
136
|
}
|
|
119
|
-
const
|
|
137
|
+
const configuredEmail = config.systemUserEmail?.trim() ?? '';
|
|
138
|
+
let user = configuredEmail ? dependencies.FindUserByEmail(configuredEmail) : undefined;
|
|
139
|
+
if (!user && (!configuredEmail || DEFAULT_SYSTEM_USER_EMAILS.has(configuredEmail.toLowerCase()))) {
|
|
140
|
+
user = dependencies.FindSystemUser?.();
|
|
141
|
+
}
|
|
120
142
|
if (!user) {
|
|
121
143
|
throw new Error(`[WorkQueue] System user not found with email: ${config.systemUserEmail} — set workQueue.systemUserEmail in mj.config.cjs`);
|
|
122
144
|
}
|
|
@@ -18,7 +18,7 @@ export const WorkQueueSubscriptionEntrySchema = z.object({
|
|
|
18
18
|
*/
|
|
19
19
|
export const WorkQueueSchema = z
|
|
20
20
|
.object({
|
|
21
|
-
enabled: z.boolean().optional().default(
|
|
21
|
+
enabled: z.boolean().optional().default(true),
|
|
22
22
|
systemUserEmail: z.string().optional().default('system@memberjunction.org'),
|
|
23
23
|
subscriptions: z.array(WorkQueueSubscriptionEntrySchema).optional().default([{ name: '*', concurrency: 4 }]),
|
|
24
24
|
idlePollMinMs: z.number().int().positive().optional().default(250),
|
|
@@ -36,12 +36,12 @@ export const WorkQueueSchema = z
|
|
|
36
36
|
export type WorkQueueConfig = z.infer<typeof WorkQueueSchema>;
|
|
37
37
|
|
|
38
38
|
/**
|
|
39
|
-
* The merge base for mj.config.cjs.
|
|
40
|
-
*
|
|
39
|
+
* The merge base for mj.config.cjs. Enabled by default with the Database transport out of the box; StartWorkQueueHost
|
|
40
|
+
* resolves `systemUserEmail` first and falls back to `UserCache.Instance.GetSystemUser()` when the default is unchanged.
|
|
41
41
|
*/
|
|
42
42
|
export const DEFAULT_WORK_QUEUE_CONFIG: WorkQueueConfig = {
|
|
43
|
-
enabled:
|
|
44
|
-
systemUserEmail: '
|
|
43
|
+
enabled: true,
|
|
44
|
+
systemUserEmail: 'system@memberjunction.org',
|
|
45
45
|
subscriptions: [{ name: '*', concurrency: 4 }],
|
|
46
46
|
idlePollMinMs: 250,
|
|
47
47
|
idlePollMaxMs: 5000,
|
package/src/sharedCache.ts
CHANGED
|
@@ -238,7 +238,7 @@ function relayRunViewChangeToBrowsers(event: CacheChangedEvent): void {
|
|
|
238
238
|
PubSubManager.Instance.Publish(CACHE_INVALIDATION_TOPIC, {
|
|
239
239
|
entityName,
|
|
240
240
|
primaryKeyValues: null, // entity-level invalidation
|
|
241
|
-
action: event.Action,
|
|
241
|
+
action: event.Action === 'row_delta' ? 'set' : event.Action,
|
|
242
242
|
sourceServerId: event.SourceServerId || 'unknown',
|
|
243
243
|
timestamp: new Date(),
|
|
244
244
|
});
|
package/src/types.ts
CHANGED
|
@@ -73,6 +73,19 @@ export type AppContext = {
|
|
|
73
73
|
* Used only to key abuse limits (e.g. realtime verification sends) — never as an identity.
|
|
74
74
|
*/
|
|
75
75
|
ClientIp?: string;
|
|
76
|
+
|
|
77
|
+
/**
|
|
78
|
+
* The request's `Origin` header as a normalized origin — scheme, host and port, lowercased, no
|
|
79
|
+
* trailing slash (e.g. `https://app.example.com:8443`). Normalized by `NormalizeOrigin`, the same
|
|
80
|
+
* helper the realtime widget allowlist uses, so it compares to allowlist entries normalized the
|
|
81
|
+
* same way with plain string equality. Ports are kept as sent; browsers omit default ports.
|
|
82
|
+
*
|
|
83
|
+
* Undefined when the request sent no `Origin` (server-to-server calls, many same-origin GETs),
|
|
84
|
+
* sent the opaque `null` origin, or sent a value that is not an http(s) origin. Always absent on
|
|
85
|
+
* WebSocket (subscription) contexts. Treat undefined as "origin unknown": an allowlist check
|
|
86
|
+
* must fail closed on it.
|
|
87
|
+
*/
|
|
88
|
+
RequestOrigin?: string;
|
|
76
89
|
};
|
|
77
90
|
|
|
78
91
|
export class ProviderInfo {
|
|
@@ -145,6 +158,11 @@ export type RunViewGenericParams = {
|
|
|
145
158
|
* Propagated to `RunViewParams.IncludeBinaryFields`.
|
|
146
159
|
*/
|
|
147
160
|
includeBinaryFields?: boolean;
|
|
161
|
+
/**
|
|
162
|
+
* When true, no count runs to populate `TotalRowCount`, which comes back undefined.
|
|
163
|
+
* Propagated to `RunViewParams.SkipTotalRowCount`.
|
|
164
|
+
*/
|
|
165
|
+
skipTotalRowCount?: boolean;
|
|
148
166
|
/**
|
|
149
167
|
* Optional registered Alternate Base View logical Name (from `EntityAlternateBaseView.Name`)
|
|
150
168
|
* for this entity. Propagated to `RunViewParams.AlternateBaseView`.
|
package/src/util.ts
CHANGED
|
@@ -6,7 +6,8 @@ import { URL } from 'url';
|
|
|
6
6
|
import { z } from 'zod';
|
|
7
7
|
import { DataSourceInfo, ProviderInfo } from './types';
|
|
8
8
|
import sql from 'mssql';
|
|
9
|
-
import { DatabaseProviderBase } from '@memberjunction/core';
|
|
9
|
+
import { DatabaseProviderBase, GetDiagnosticContext, IsDiagnosticCaptureSuppressed } from '@memberjunction/core';
|
|
10
|
+
import { GetGlobalObjectStore } from '@memberjunction/global';
|
|
10
11
|
|
|
11
12
|
const gzip = promisify(gzipCallback);
|
|
12
13
|
|
|
@@ -249,8 +250,59 @@ export async function sendPostRequest(url: string, payload: any, useCompression:
|
|
|
249
250
|
sqlQuery = sqlQuery.replace(/\?/g, () => `@p${paramIndex++}`);
|
|
250
251
|
}
|
|
251
252
|
}
|
|
252
|
-
const
|
|
253
|
-
|
|
253
|
+
const startTime = performance.now();
|
|
254
|
+
const notifyPoolSqlObservers = (rowCount: number, errorMessage?: string): void => {
|
|
255
|
+
if (typeof IsDiagnosticCaptureSuppressed === 'function' && IsDiagnosticCaptureSuppressed()) {
|
|
256
|
+
return;
|
|
257
|
+
}
|
|
258
|
+
const observers = GetGlobalObjectStore()?.['___MJ_SQL_OBSERVERS___'] as
|
|
259
|
+
| Set<{ onSqlExecuted: (obs: Record<string, unknown>) => void }>
|
|
260
|
+
| undefined;
|
|
261
|
+
if (!observers || observers.size === 0) {
|
|
262
|
+
return;
|
|
263
|
+
}
|
|
264
|
+
const ctx = typeof GetDiagnosticContext === 'function' ? GetDiagnosticContext() : undefined;
|
|
265
|
+
const obs: Record<string, unknown> = {
|
|
266
|
+
ts: Date.now(),
|
|
267
|
+
sql: sqlQuery,
|
|
268
|
+
parameterTypes: Array.isArray(parameters)
|
|
269
|
+
? parameters.map((v, idx) => ({
|
|
270
|
+
name: `p${idx}`,
|
|
271
|
+
sqlType: v === null ? 'null' : typeof v,
|
|
272
|
+
byteLength: typeof v === 'string' ? v.length : 0,
|
|
273
|
+
}))
|
|
274
|
+
: [],
|
|
275
|
+
durationMs: performance.now() - startTime,
|
|
276
|
+
rowCount,
|
|
277
|
+
isMutation: false,
|
|
278
|
+
description: 'ConnectionPool.query',
|
|
279
|
+
...(errorMessage ? { errorMessage } : {}),
|
|
280
|
+
...(ctx
|
|
281
|
+
? {
|
|
282
|
+
diagnosticContext: ctx,
|
|
283
|
+
sessionId: ctx.sessionId ?? ctx.SessionID,
|
|
284
|
+
traceId: ctx.traceId ?? ctx.TraceID,
|
|
285
|
+
spanId: ctx.spanId ?? ctx.SpanID,
|
|
286
|
+
}
|
|
287
|
+
: {}),
|
|
288
|
+
};
|
|
289
|
+
for (const observer of observers) {
|
|
290
|
+
try {
|
|
291
|
+
observer.onSqlExecuted(obs);
|
|
292
|
+
} catch {
|
|
293
|
+
// Observer errors must never affect SQL execution
|
|
294
|
+
}
|
|
295
|
+
}
|
|
296
|
+
};
|
|
297
|
+
try {
|
|
298
|
+
const result = await request.query(sqlQuery);
|
|
299
|
+
const rows = result.recordset || [];
|
|
300
|
+
notifyPoolSqlObservers(rows.length);
|
|
301
|
+
return rows;
|
|
302
|
+
} catch (err) {
|
|
303
|
+
notifyPoolSqlObservers(0, err instanceof Error ? err.message : String(err));
|
|
304
|
+
throw err;
|
|
305
|
+
}
|
|
254
306
|
};
|
|
255
307
|
return extendedPool;
|
|
256
308
|
}
|
|
@@ -1,188 +0,0 @@
|
|
|
1
|
-
# Task Orchestration Integration Guide
|
|
2
|
-
|
|
3
|
-
## Overview
|
|
4
|
-
This document explains how to integrate the TaskOrchestrator into the Conversation Manager agent flow.
|
|
5
|
-
|
|
6
|
-
## Components Created
|
|
7
|
-
|
|
8
|
-
1. **TaskOrchestrator** (`/services/TaskOrchestrator.ts`)
|
|
9
|
-
- Creates tasks from LLM task graphs
|
|
10
|
-
- Manages task dependencies
|
|
11
|
-
- Executes tasks in proper order
|
|
12
|
-
- Passes outputs between tasks
|
|
13
|
-
|
|
14
|
-
2. **Updated Conversation Manager Prompt** (`/metadata/prompts/templates/conversations/conversation-manager-agent.template.md`)
|
|
15
|
-
- Now supports returning task graphs
|
|
16
|
-
- Backward compatible with simple agent delegation
|
|
17
|
-
|
|
18
|
-
## Integration Points
|
|
19
|
-
|
|
20
|
-
### 1. Where to Add Task Orchestration Logic
|
|
21
|
-
|
|
22
|
-
When the Conversation Manager agent returns a response, check the `payloadChangeRequest.newElements` for either:
|
|
23
|
-
|
|
24
|
-
**Simple delegation (existing):**
|
|
25
|
-
```typescript
|
|
26
|
-
if (newElements.invokeAgent) {
|
|
27
|
-
// Existing flow - delegate to single agent
|
|
28
|
-
const agentName = newElements.invokeAgent;
|
|
29
|
-
// ... invoke agent ...
|
|
30
|
-
}
|
|
31
|
-
```
|
|
32
|
-
|
|
33
|
-
**Multi-step orchestration (new):**
|
|
34
|
-
```typescript
|
|
35
|
-
if (newElements.taskGraph) {
|
|
36
|
-
const taskGraph = newElements.taskGraph;
|
|
37
|
-
|
|
38
|
-
if (taskGraph.isMultiStep) {
|
|
39
|
-
// Create tasks in database
|
|
40
|
-
const orchestrator = new TaskOrchestrator(contextUser);
|
|
41
|
-
const taskIdMap = await orchestrator.createTasksFromGraph(
|
|
42
|
-
taskGraph,
|
|
43
|
-
conversationDetailId,
|
|
44
|
-
environmentId
|
|
45
|
-
);
|
|
46
|
-
|
|
47
|
-
// Execute tasks (respecting dependencies)
|
|
48
|
-
const results = await orchestrator.executeTasksForConversation(
|
|
49
|
-
conversationDetailId
|
|
50
|
-
);
|
|
51
|
-
|
|
52
|
-
// Send results back to conversation
|
|
53
|
-
// ... format and return results ...
|
|
54
|
-
}
|
|
55
|
-
}
|
|
56
|
-
```
|
|
57
|
-
|
|
58
|
-
### 2. Suggested Integration Location
|
|
59
|
-
|
|
60
|
-
**Option A: In RunAIAgent Resolver**
|
|
61
|
-
- File: `/packages/MJServer/src/resolvers/RunAIAgentResolver.ts`
|
|
62
|
-
- After agent execution, check the result payload for taskGraph
|
|
63
|
-
- Create and execute tasks if multi-step
|
|
64
|
-
|
|
65
|
-
**Option B: In AskSkip Resolver**
|
|
66
|
-
- File: `/packages/MJServer/src/resolvers/AskSkipResolver.ts`
|
|
67
|
-
- When processing conversation manager responses
|
|
68
|
-
- Check for taskGraph in the response payload
|
|
69
|
-
|
|
70
|
-
**Option C: New Task Resolver (Recommended)**
|
|
71
|
-
- Create `/packages/MJServer/src/resolvers/TaskResolver.ts`
|
|
72
|
-
- Add mutation: `ExecuteTaskGraph(taskGraph, conversationDetailId, environmentId)`
|
|
73
|
-
- Keep task orchestration logic separate and reusable
|
|
74
|
-
|
|
75
|
-
### 3. Example Integration Code
|
|
76
|
-
|
|
77
|
-
```typescript
|
|
78
|
-
import { TaskOrchestrator, TaskGraphResponse } from '../services/TaskOrchestrator.js';
|
|
79
|
-
|
|
80
|
-
// In your resolver after Conversation Manager responds
|
|
81
|
-
async handleConversationManagerResponse(
|
|
82
|
-
agentResult: ExecuteAgentResult,
|
|
83
|
-
conversationDetailId: string,
|
|
84
|
-
environmentId: string,
|
|
85
|
-
contextUser: UserInfo
|
|
86
|
-
): Promise<void> {
|
|
87
|
-
// Check if response contains a task graph
|
|
88
|
-
if (agentResult.payload?.taskGraph) {
|
|
89
|
-
const taskGraph: TaskGraphResponse = agentResult.payload.taskGraph;
|
|
90
|
-
|
|
91
|
-
if (taskGraph.isMultiStep) {
|
|
92
|
-
LogStatus(`Multi-step workflow detected: ${taskGraph.tasks.length} tasks`);
|
|
93
|
-
|
|
94
|
-
// Create task orchestrator
|
|
95
|
-
const orchestrator = new TaskOrchestrator(contextUser);
|
|
96
|
-
|
|
97
|
-
// Create tasks and dependencies
|
|
98
|
-
const taskIdMap = await orchestrator.createTasksFromGraph(
|
|
99
|
-
taskGraph,
|
|
100
|
-
conversationDetailId,
|
|
101
|
-
environmentId
|
|
102
|
-
);
|
|
103
|
-
|
|
104
|
-
LogStatus(`Created ${taskIdMap.size} tasks with dependencies`);
|
|
105
|
-
|
|
106
|
-
// Execute tasks in proper order
|
|
107
|
-
const results = await orchestrator.executeTasksForConversation(
|
|
108
|
-
conversationDetailId
|
|
109
|
-
);
|
|
110
|
-
|
|
111
|
-
// Log results
|
|
112
|
-
for (const result of results) {
|
|
113
|
-
if (result.success) {
|
|
114
|
-
LogStatus(`Task ${result.taskId} completed successfully`);
|
|
115
|
-
} else {
|
|
116
|
-
LogError(`Task ${result.taskId} failed: ${result.error}`);
|
|
117
|
-
}
|
|
118
|
-
}
|
|
119
|
-
|
|
120
|
-
// Return task completion summary to user
|
|
121
|
-
return {
|
|
122
|
-
success: true,
|
|
123
|
-
message: `Completed ${results.filter(r => r.success).length} of ${results.length} tasks`,
|
|
124
|
-
results: results
|
|
125
|
-
};
|
|
126
|
-
}
|
|
127
|
-
}
|
|
128
|
-
|
|
129
|
-
// Simple agent delegation (existing flow)
|
|
130
|
-
if (agentResult.payload?.invokeAgent) {
|
|
131
|
-
// ... existing single-agent delegation logic ...
|
|
132
|
-
}
|
|
133
|
-
}
|
|
134
|
-
```
|
|
135
|
-
|
|
136
|
-
### 4. UI Integration
|
|
137
|
-
|
|
138
|
-
The existing task UI components already work with TaskEntity:
|
|
139
|
-
- `/packages/Angular/Generic/conversations/src/lib/components/task/task-list.component.ts`
|
|
140
|
-
- Tasks will automatically appear in the task list
|
|
141
|
-
- Users can see progress, dependencies, and results
|
|
142
|
-
|
|
143
|
-
### 5. Testing
|
|
144
|
-
|
|
145
|
-
**Test Single-Step (Backward Compatibility):**
|
|
146
|
-
```
|
|
147
|
-
User: "Analyze our sales data"
|
|
148
|
-
Expected: Conversation Manager delegates to Analysis Agent (existing behavior)
|
|
149
|
-
```
|
|
150
|
-
|
|
151
|
-
**Test Multi-Step:**
|
|
152
|
-
```
|
|
153
|
-
User: "Research associations with 5-30M revenue in USA, then create a GTM report"
|
|
154
|
-
Expected:
|
|
155
|
-
- Conversation Manager returns taskGraph
|
|
156
|
-
- Task 1 (Research) executes
|
|
157
|
-
- Task 2 (GTM Report) waits for Task 1
|
|
158
|
-
- Task 2 receives Task 1 output
|
|
159
|
-
- Both complete successfully
|
|
160
|
-
```
|
|
161
|
-
|
|
162
|
-
## Database Schema
|
|
163
|
-
|
|
164
|
-
No changes needed! TaskEntity and TaskDependencyEntity already exist with all required fields.
|
|
165
|
-
|
|
166
|
-
**Note:** For production, consider adding these optional columns to Task table:
|
|
167
|
-
- `InputPayload` NVARCHAR(MAX) - Better than embedding in Description
|
|
168
|
-
- `OutputPayload` NVARCHAR(MAX) - Better than embedding in Description
|
|
169
|
-
|
|
170
|
-
Current implementation uses Description field with `__TASK_METADATA__` and `__TASK_OUTPUT__` markers as a workaround.
|
|
171
|
-
|
|
172
|
-
## Future Enhancements
|
|
173
|
-
|
|
174
|
-
1. **Parallel Execution**: Modify executeTasksForConversation() to run independent tasks concurrently
|
|
175
|
-
2. **Progress Streaming**: Use WebSockets to stream task progress to UI
|
|
176
|
-
3. **Task Templates**: Save common workflows as reusable templates
|
|
177
|
-
4. **Error Recovery**: Add retry logic and error handling strategies
|
|
178
|
-
5. **Task Cancellation**: Allow users to cancel in-progress task chains
|
|
179
|
-
6. **Visualization**: Show task dependency graph in UI
|
|
180
|
-
|
|
181
|
-
## Questions?
|
|
182
|
-
|
|
183
|
-
- TaskOrchestrator handles all task lifecycle management
|
|
184
|
-
- Conversation Manager LLM determines when to use multi-step
|
|
185
|
-
- Existing UI components display tasks automatically
|
|
186
|
-
- Fully backward compatible with simple delegation
|
|
187
|
-
|
|
188
|
-
Integration should take ~1-2 hours for experienced developer familiar with the codebase.
|