@mxf-dev/core 2.0.5 → 3.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/config/ModelContextLimits.d.ts.map +1 -1
- package/dist/config/ModelContextLimits.js +7 -1
- package/dist/config/ModelContextLimits.js.map +1 -1
- package/dist/constants/CoreTools.d.ts +6 -5
- package/dist/constants/CoreTools.d.ts.map +1 -1
- package/dist/constants/CoreTools.js +6 -5
- package/dist/constants/CoreTools.js.map +1 -1
- package/dist/constants/DefaultPhaseProfiles.d.ts.map +1 -1
- package/dist/constants/DefaultPhaseProfiles.js +29 -0
- package/dist/constants/DefaultPhaseProfiles.js.map +1 -1
- package/dist/constants/ReservedIdentities.d.ts +14 -0
- package/dist/constants/ReservedIdentities.d.ts.map +1 -0
- package/dist/constants/ReservedIdentities.js +42 -0
- package/dist/constants/ReservedIdentities.js.map +1 -0
- package/dist/database/adapters/mongodb/MongoKnowledgeGraphRepository.d.ts +16 -16
- package/dist/database/adapters/mongodb/MongoKnowledgeGraphRepository.d.ts.map +1 -1
- package/dist/database/adapters/mongodb/MongoKnowledgeGraphRepository.js +98 -36
- package/dist/database/adapters/mongodb/MongoKnowledgeGraphRepository.js.map +1 -1
- package/dist/events/ClientEventBus.d.ts +28 -0
- package/dist/events/ClientEventBus.d.ts.map +1 -1
- package/dist/events/ClientEventBus.js +87 -40
- package/dist/events/ClientEventBus.js.map +1 -1
- package/dist/events/EventBus.d.ts +19 -1
- package/dist/events/EventBus.d.ts.map +1 -1
- package/dist/events/EventBus.js +23 -0
- package/dist/events/EventBus.js.map +1 -1
- package/dist/events/EventBusBase.d.ts +37 -6
- package/dist/events/EventBusBase.d.ts.map +1 -1
- package/dist/events/EventBusBase.js +75 -27
- package/dist/events/EventBusBase.js.map +1 -1
- package/dist/events/EventNames.d.ts +49 -36
- package/dist/events/EventNames.d.ts.map +1 -1
- package/dist/events/EventNames.js +38 -36
- package/dist/events/EventNames.js.map +1 -1
- package/dist/events/PublicEvents.d.ts +5 -1
- package/dist/events/PublicEvents.d.ts.map +1 -1
- package/dist/events/PublicEvents.js +7 -0
- package/dist/events/PublicEvents.js.map +1 -1
- package/dist/events/ServerEventBus.d.ts +7 -54
- package/dist/events/ServerEventBus.d.ts.map +1 -1
- package/dist/events/ServerEventBus.js +10 -96
- package/dist/events/ServerEventBus.js.map +1 -1
- package/dist/events/event-definitions/ControlLoopEvents.d.ts +35 -0
- package/dist/events/event-definitions/ControlLoopEvents.d.ts.map +1 -1
- package/dist/events/event-definitions/ControlLoopEvents.js +6 -0
- package/dist/events/event-definitions/ControlLoopEvents.js.map +1 -1
- package/dist/events/event-definitions/SdkEvents.d.ts +55 -0
- package/dist/events/event-definitions/SdkEvents.d.ts.map +1 -0
- package/dist/events/event-definitions/SdkEvents.js +36 -0
- package/dist/events/event-definitions/SdkEvents.js.map +1 -0
- package/dist/events/event-definitions/TaskEvents.d.ts +2 -7
- package/dist/events/event-definitions/TaskEvents.d.ts.map +1 -1
- package/dist/index.d.ts +4 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -1
- package/dist/interfaces/AgentInterfaces.d.ts +5 -0
- package/dist/interfaces/AgentInterfaces.d.ts.map +1 -1
- package/dist/interfaces/ChannelConfig.d.ts +2 -2
- package/dist/interfaces/ChannelConfig.d.ts.map +1 -1
- package/dist/interfaces/ConversationMessage.d.ts +1 -1
- package/dist/interfaces/ConversationMessage.d.ts.map +1 -1
- package/dist/interfaces/IMemoryPersistence.d.ts +47 -1
- package/dist/interfaces/IMemoryPersistence.d.ts.map +1 -1
- package/dist/interfaces/SocketServiceInterface.d.ts +3 -2
- package/dist/interfaces/SocketServiceInterface.d.ts.map +1 -1
- package/dist/interfaces/TaskInterfaces.d.ts +14 -1
- package/dist/interfaces/TaskInterfaces.d.ts.map +1 -1
- package/dist/models/agent.d.ts +0 -1
- package/dist/models/agent.d.ts.map +1 -1
- package/dist/models/agent.js +0 -5
- package/dist/models/agent.js.map +1 -1
- package/dist/models/agentIdentityReservation.d.ts +42 -0
- package/dist/models/agentIdentityReservation.d.ts.map +1 -0
- package/dist/models/agentIdentityReservation.js +52 -0
- package/dist/models/agentIdentityReservation.js.map +1 -0
- package/dist/models/channel.d.ts +2 -0
- package/dist/models/channel.d.ts.map +1 -1
- package/dist/models/channel.js.map +1 -1
- package/dist/models/channelKey.d.ts +1 -0
- package/dist/models/channelKey.d.ts.map +1 -1
- package/dist/models/channelKey.js +5 -0
- package/dist/models/channelKey.js.map +1 -1
- package/dist/models/memory.d.ts +1 -1
- package/dist/models/memory.d.ts.map +1 -1
- package/dist/models/memory.js +9 -12
- package/dist/models/memory.js.map +1 -1
- package/dist/models/memoryStrata.d.ts +3 -16
- package/dist/models/memoryStrata.d.ts.map +1 -1
- package/dist/models/memoryStrata.js +3 -5
- package/dist/models/memoryStrata.js.map +1 -1
- package/dist/models/plan.d.ts +2 -2
- package/dist/models/plan.d.ts.map +1 -1
- package/dist/models/plan.js +1 -1
- package/dist/models/plan.js.map +1 -1
- package/dist/models/taskEffectiveness.d.ts +1 -0
- package/dist/models/taskEffectiveness.d.ts.map +1 -1
- package/dist/models/taskEffectiveness.js +7 -1
- package/dist/models/taskEffectiveness.js.map +1 -1
- package/dist/models/user.d.ts +4 -0
- package/dist/models/user.d.ts.map +1 -1
- package/dist/models/user.js +8 -0
- package/dist/models/user.js.map +1 -1
- package/dist/protocols/mcp/LlmTestEnvironmentGuard.d.ts +16 -0
- package/dist/protocols/mcp/LlmTestEnvironmentGuard.d.ts.map +1 -0
- package/dist/protocols/mcp/LlmTestEnvironmentGuard.js +25 -0
- package/dist/protocols/mcp/LlmTestEnvironmentGuard.js.map +1 -0
- package/dist/protocols/mcp/McpServerTypes.d.ts +9 -0
- package/dist/protocols/mcp/McpServerTypes.d.ts.map +1 -1
- package/dist/protocols/mcp/providers/AnthropicMcpClient.d.ts.map +1 -1
- package/dist/protocols/mcp/providers/AnthropicMcpClient.js +1 -0
- package/dist/protocols/mcp/providers/AnthropicMcpClient.js.map +1 -1
- package/dist/protocols/mcp/providers/AzureOpenAiMcpClient.d.ts.map +1 -1
- package/dist/protocols/mcp/providers/AzureOpenAiMcpClient.js +1 -0
- package/dist/protocols/mcp/providers/AzureOpenAiMcpClient.js.map +1 -1
- package/dist/protocols/mcp/providers/BaseMcpClient.d.ts +4 -0
- package/dist/protocols/mcp/providers/BaseMcpClient.d.ts.map +1 -1
- package/dist/protocols/mcp/providers/BaseMcpClient.js +10 -0
- package/dist/protocols/mcp/providers/BaseMcpClient.js.map +1 -1
- package/dist/protocols/mcp/providers/CustomMcpClient.d.ts.map +1 -1
- package/dist/protocols/mcp/providers/CustomMcpClient.js +7 -0
- package/dist/protocols/mcp/providers/CustomMcpClient.js.map +1 -1
- package/dist/protocols/mcp/providers/GeminiMcpClient.d.ts.map +1 -1
- package/dist/protocols/mcp/providers/GeminiMcpClient.js +1 -0
- package/dist/protocols/mcp/providers/GeminiMcpClient.js.map +1 -1
- package/dist/protocols/mcp/providers/OllamaMcpClient.d.ts +1 -0
- package/dist/protocols/mcp/providers/OllamaMcpClient.d.ts.map +1 -1
- package/dist/protocols/mcp/providers/OllamaMcpClient.js +1 -0
- package/dist/protocols/mcp/providers/OllamaMcpClient.js.map +1 -1
- package/dist/protocols/mcp/providers/OpenAiMcpClient.d.ts.map +1 -1
- package/dist/protocols/mcp/providers/OpenAiMcpClient.js +1 -0
- package/dist/protocols/mcp/providers/OpenAiMcpClient.js.map +1 -1
- package/dist/protocols/mcp/providers/OpenRouterMcpClient.d.ts.map +1 -1
- package/dist/protocols/mcp/providers/OpenRouterMcpClient.js +2 -0
- package/dist/protocols/mcp/providers/OpenRouterMcpClient.js.map +1 -1
- package/dist/protocols/mcp/providers/XaiMcpClient.d.ts.map +1 -1
- package/dist/protocols/mcp/providers/XaiMcpClient.js +1 -0
- package/dist/protocols/mcp/providers/XaiMcpClient.js.map +1 -1
- package/dist/protocols/mcp/security/BrowserTargetGuard.d.ts +14 -0
- package/dist/protocols/mcp/security/BrowserTargetGuard.d.ts.map +1 -0
- package/dist/protocols/mcp/security/BrowserTargetGuard.js +55 -0
- package/dist/protocols/mcp/security/BrowserTargetGuard.js.map +1 -0
- package/dist/protocols/mcp/security/ExternalMcpRegistrationPolicy.d.ts +24 -0
- package/dist/protocols/mcp/security/ExternalMcpRegistrationPolicy.d.ts.map +1 -0
- package/dist/protocols/mcp/security/ExternalMcpRegistrationPolicy.js +33 -0
- package/dist/protocols/mcp/security/ExternalMcpRegistrationPolicy.js.map +1 -0
- package/dist/protocols/mcp/security/HttpTargetGuard.d.ts.map +1 -1
- package/dist/protocols/mcp/security/HttpTargetGuard.js +68 -6
- package/dist/protocols/mcp/security/HttpTargetGuard.js.map +1 -1
- package/dist/protocols/mcp/security/McpSecurityGuard.d.ts.map +1 -1
- package/dist/protocols/mcp/security/McpSecurityGuard.js +7 -5
- package/dist/protocols/mcp/security/McpSecurityGuard.js.map +1 -1
- package/dist/protocols/mcp/security/McpToolPolicy.d.ts +18 -0
- package/dist/protocols/mcp/security/McpToolPolicy.d.ts.map +1 -1
- package/dist/protocols/mcp/security/McpToolPolicy.js +60 -0
- package/dist/protocols/mcp/security/McpToolPolicy.js.map +1 -1
- package/dist/protocols/mcp/services/ExternalMcpServerManager.d.ts +25 -0
- package/dist/protocols/mcp/services/ExternalMcpServerManager.d.ts.map +1 -1
- package/dist/protocols/mcp/services/ExternalMcpServerManager.js +93 -17
- package/dist/protocols/mcp/services/ExternalMcpServerManager.js.map +1 -1
- package/dist/protocols/mcp/services/ExternalServerConfigs.d.ts +2 -2
- package/dist/protocols/mcp/services/ExternalServerConfigs.d.ts.map +1 -1
- package/dist/protocols/mcp/services/ExternalServerConfigs.js +25 -8
- package/dist/protocols/mcp/services/ExternalServerConfigs.js.map +1 -1
- package/dist/protocols/mcp/tools/AnalyticsTools.d.ts +3 -37
- package/dist/protocols/mcp/tools/AnalyticsTools.d.ts.map +1 -1
- package/dist/protocols/mcp/tools/AnalyticsTools.js +134 -614
- package/dist/protocols/mcp/tools/AnalyticsTools.js.map +1 -1
- package/dist/protocols/mcp/tools/CodeAnalysisTools.d.ts.map +1 -1
- package/dist/protocols/mcp/tools/CodeAnalysisTools.js +16 -13
- package/dist/protocols/mcp/tools/CodeAnalysisTools.js.map +1 -1
- package/dist/protocols/mcp/tools/EffectivenessTools.d.ts.map +1 -1
- package/dist/protocols/mcp/tools/EffectivenessTools.js +94 -30
- package/dist/protocols/mcp/tools/EffectivenessTools.js.map +1 -1
- package/dist/protocols/mcp/tools/GitTools.d.ts.map +1 -1
- package/dist/protocols/mcp/tools/GitTools.js +9 -5
- package/dist/protocols/mcp/tools/GitTools.js.map +1 -1
- package/dist/protocols/mcp/tools/InfrastructureTools.d.ts +10 -40
- package/dist/protocols/mcp/tools/InfrastructureTools.d.ts.map +1 -1
- package/dist/protocols/mcp/tools/InfrastructureTools.js +29 -70
- package/dist/protocols/mcp/tools/InfrastructureTools.js.map +1 -1
- package/dist/protocols/mcp/tools/JsonTools.d.ts.map +1 -1
- package/dist/protocols/mcp/tools/JsonTools.js +4 -4
- package/dist/protocols/mcp/tools/JsonTools.js.map +1 -1
- package/dist/protocols/mcp/tools/KnowledgeGraphTools.d.ts +55 -592
- package/dist/protocols/mcp/tools/KnowledgeGraphTools.d.ts.map +1 -1
- package/dist/protocols/mcp/tools/KnowledgeGraphTools.js +169 -119
- package/dist/protocols/mcp/tools/KnowledgeGraphTools.js.map +1 -1
- package/dist/protocols/mcp/tools/MemorySearchTools.d.ts +6 -6
- package/dist/protocols/mcp/tools/MemorySearchTools.d.ts.map +1 -1
- package/dist/protocols/mcp/tools/MemorySearchTools.js +107 -39
- package/dist/protocols/mcp/tools/MemorySearchTools.js.map +1 -1
- package/dist/protocols/mcp/tools/MemoryUtilityTools.d.ts +4 -5
- package/dist/protocols/mcp/tools/MemoryUtilityTools.d.ts.map +1 -1
- package/dist/protocols/mcp/tools/MemoryUtilityTools.js +59 -208
- package/dist/protocols/mcp/tools/MemoryUtilityTools.js.map +1 -1
- package/dist/protocols/mcp/tools/PlanningTools.d.ts +2 -1
- package/dist/protocols/mcp/tools/PlanningTools.d.ts.map +1 -1
- package/dist/protocols/mcp/tools/PlanningTools.js +111 -49
- package/dist/protocols/mcp/tools/PlanningTools.js.map +1 -1
- package/dist/protocols/mcp/tools/ProjectContextTools.d.ts.map +1 -1
- package/dist/protocols/mcp/tools/ProjectContextTools.js +18 -12
- package/dist/protocols/mcp/tools/ProjectContextTools.js.map +1 -1
- package/dist/protocols/mcp/tools/SafetyTools.d.ts.map +1 -1
- package/dist/protocols/mcp/tools/SafetyTools.js +16 -13
- package/dist/protocols/mcp/tools/SafetyTools.js.map +1 -1
- package/dist/protocols/mcp/tools/SearchProjectTools.d.ts +24 -7
- package/dist/protocols/mcp/tools/SearchProjectTools.d.ts.map +1 -1
- package/dist/protocols/mcp/tools/SearchProjectTools.js +226 -126
- package/dist/protocols/mcp/tools/SearchProjectTools.js.map +1 -1
- package/dist/protocols/mcp/tools/TaskPlanningTools.d.ts +0 -32
- package/dist/protocols/mcp/tools/TaskPlanningTools.d.ts.map +1 -1
- package/dist/protocols/mcp/tools/TaskPlanningTools.js +363 -450
- package/dist/protocols/mcp/tools/TaskPlanningTools.js.map +1 -1
- package/dist/protocols/mcp/tools/TestTools.d.ts.map +1 -1
- package/dist/protocols/mcp/tools/TestTools.js +18 -11
- package/dist/protocols/mcp/tools/TestTools.js.map +1 -1
- package/dist/protocols/mcp/tools/TypeScriptTools.d.ts.map +1 -1
- package/dist/protocols/mcp/tools/TypeScriptTools.js +22 -12
- package/dist/protocols/mcp/tools/TypeScriptTools.js.map +1 -1
- package/dist/protocols/mcp/tools/UserInputTools.d.ts.map +1 -1
- package/dist/protocols/mcp/tools/UserInputTools.js +14 -1
- package/dist/protocols/mcp/tools/UserInputTools.js.map +1 -1
- package/dist/protocols/mcp/tools/UserMemoryTools.d.ts +3 -1
- package/dist/protocols/mcp/tools/UserMemoryTools.d.ts.map +1 -1
- package/dist/protocols/mcp/tools/UserMemoryTools.js +27 -62
- package/dist/protocols/mcp/tools/UserMemoryTools.js.map +1 -1
- package/dist/protocols/mcp/tools/shell/ShellExecuteHandler.d.ts.map +1 -1
- package/dist/protocols/mcp/tools/shell/ShellExecuteHandler.js +14 -60
- package/dist/protocols/mcp/tools/shell/ShellExecuteHandler.js.map +1 -1
- package/dist/protocols/mcp/tools/shell/ShellSandbox.d.ts.map +1 -1
- package/dist/protocols/mcp/tools/shell/ShellSandbox.js +9 -27
- package/dist/protocols/mcp/tools/shell/ShellSandbox.js.map +1 -1
- package/dist/repositories/interfaces/IKnowledgeGraphRepository.d.ts +40 -30
- package/dist/repositories/interfaces/IKnowledgeGraphRepository.d.ts.map +1 -1
- package/dist/schemas/EventPayloadSchema.d.ts +28 -0
- package/dist/schemas/EventPayloadSchema.d.ts.map +1 -1
- package/dist/schemas/EventPayloadSchema.js +30 -1
- package/dist/schemas/EventPayloadSchema.js.map +1 -1
- package/dist/schemas/MxpProtocolSchemas.d.ts +6 -6
- package/dist/services/AgentPerformanceService.d.ts +11 -0
- package/dist/services/AgentPerformanceService.d.ts.map +1 -1
- package/dist/services/AgentPerformanceService.js +59 -33
- package/dist/services/AgentPerformanceService.js.map +1 -1
- package/dist/services/AutoCorrectionService.d.ts +3 -0
- package/dist/services/AutoCorrectionService.d.ts.map +1 -1
- package/dist/services/AutoCorrectionService.js +19 -2
- package/dist/services/AutoCorrectionService.js.map +1 -1
- package/dist/services/BackgroundTaskManager.d.ts +23 -7
- package/dist/services/BackgroundTaskManager.d.ts.map +1 -1
- package/dist/services/BackgroundTaskManager.js +137 -57
- package/dist/services/BackgroundTaskManager.js.map +1 -1
- package/dist/services/BrowserManager.d.ts +2 -0
- package/dist/services/BrowserManager.d.ts.map +1 -1
- package/dist/services/BrowserManager.js +18 -15
- package/dist/services/BrowserManager.js.map +1 -1
- package/dist/services/ChannelContextMemoryOperations.d.ts +8 -1
- package/dist/services/ChannelContextMemoryOperations.d.ts.map +1 -1
- package/dist/services/ChannelContextMemoryOperations.js +89 -165
- package/dist/services/ChannelContextMemoryOperations.js.map +1 -1
- package/dist/services/ChannelContextMessageOperations.d.ts +4 -3
- package/dist/services/ChannelContextMessageOperations.d.ts.map +1 -1
- package/dist/services/ChannelContextMessageOperations.js +72 -212
- package/dist/services/ChannelContextMessageOperations.js.map +1 -1
- package/dist/services/MemoryService.d.ts +52 -21
- package/dist/services/MemoryService.d.ts.map +1 -1
- package/dist/services/MemoryService.js +775 -548
- package/dist/services/MemoryService.js.map +1 -1
- package/dist/services/PatternLearningService.d.ts +5 -0
- package/dist/services/PatternLearningService.d.ts.map +1 -1
- package/dist/services/PatternLearningService.js +26 -3
- package/dist/services/PatternLearningService.js.map +1 -1
- package/dist/services/PerformanceOptimizationService.d.ts +2 -1
- package/dist/services/PerformanceOptimizationService.d.ts.map +1 -1
- package/dist/services/PerformanceOptimizationService.js +21 -6
- package/dist/services/PerformanceOptimizationService.js.map +1 -1
- package/dist/services/PredictiveAnalyticsService.d.ts +1 -0
- package/dist/services/PredictiveAnalyticsService.d.ts.map +1 -1
- package/dist/services/PredictiveAnalyticsService.js +18 -6
- package/dist/services/PredictiveAnalyticsService.js.map +1 -1
- package/dist/services/ProactiveValidationService.d.ts +6 -0
- package/dist/services/ProactiveValidationService.d.ts.map +1 -1
- package/dist/services/ProactiveValidationService.js +58 -39
- package/dist/services/ProactiveValidationService.js.map +1 -1
- package/dist/services/TaskEffectivenessService.d.ts +55 -31
- package/dist/services/TaskEffectivenessService.d.ts.map +1 -1
- package/dist/services/TaskEffectivenessService.js +243 -125
- package/dist/services/TaskEffectivenessService.js.map +1 -1
- package/dist/services/ToolExecutionInterceptor.d.ts +4 -0
- package/dist/services/ToolExecutionInterceptor.d.ts.map +1 -1
- package/dist/services/ToolExecutionInterceptor.js +31 -5
- package/dist/services/ToolExecutionInterceptor.js.map +1 -1
- package/dist/services/UserInputRequestManager.d.ts +13 -3
- package/dist/services/UserInputRequestManager.d.ts.map +1 -1
- package/dist/services/UserInputRequestManager.js +42 -6
- package/dist/services/UserInputRequestManager.js.map +1 -1
- package/dist/services/UserMemoryService.d.ts +2 -0
- package/dist/services/UserMemoryService.d.ts.map +1 -1
- package/dist/services/UserMemoryService.js +9 -4
- package/dist/services/UserMemoryService.js.map +1 -1
- package/dist/services/ValidationAnalyticsService.d.ts +4 -0
- package/dist/services/ValidationAnalyticsService.d.ts.map +1 -1
- package/dist/services/ValidationAnalyticsService.js +30 -8
- package/dist/services/ValidationAnalyticsService.js.map +1 -1
- package/dist/services/ValidationCacheService.d.ts +3 -1
- package/dist/services/ValidationCacheService.d.ts.map +1 -1
- package/dist/services/ValidationCacheService.js +25 -4
- package/dist/services/ValidationCacheService.js.map +1 -1
- package/dist/services/ValidationMiddleware.d.ts +7 -0
- package/dist/services/ValidationMiddleware.d.ts.map +1 -1
- package/dist/services/ValidationMiddleware.js +53 -10
- package/dist/services/ValidationMiddleware.js.map +1 -1
- package/dist/services/ValidationPerformanceService.d.ts +3 -0
- package/dist/services/ValidationPerformanceService.d.ts.map +1 -1
- package/dist/services/ValidationPerformanceService.js +28 -11
- package/dist/services/ValidationPerformanceService.js.map +1 -1
- package/dist/services/WebSearchService.d.ts.map +1 -1
- package/dist/services/WebSearchService.js +9 -0
- package/dist/services/WebSearchService.js.map +1 -1
- package/dist/services/dag/TaskDagService.d.ts +3 -0
- package/dist/services/dag/TaskDagService.d.ts.map +1 -1
- package/dist/services/dag/TaskDagService.js +18 -0
- package/dist/services/dag/TaskDagService.js.map +1 -1
- package/dist/services/kg/EntityQValueManager.d.ts +3 -1
- package/dist/services/kg/EntityQValueManager.d.ts.map +1 -1
- package/dist/services/kg/EntityQValueManager.js +10 -10
- package/dist/services/kg/EntityQValueManager.js.map +1 -1
- package/dist/services/kg/GraphSurpriseCalculator.d.ts +0 -4
- package/dist/services/kg/GraphSurpriseCalculator.d.ts.map +1 -1
- package/dist/services/kg/GraphSurpriseCalculator.js +0 -9
- package/dist/services/kg/GraphSurpriseCalculator.js.map +1 -1
- package/dist/services/kg/KnowledgeGraphService.d.ts +12 -12
- package/dist/services/kg/KnowledgeGraphService.d.ts.map +1 -1
- package/dist/services/kg/KnowledgeGraphService.js +43 -51
- package/dist/services/kg/KnowledgeGraphService.js.map +1 -1
- package/dist/services/kg/OrparGraphIntegration.d.ts.map +1 -1
- package/dist/services/kg/OrparGraphIntegration.js +6 -5
- package/dist/services/kg/OrparGraphIntegration.js.map +1 -1
- package/dist/services/orpar-memory/CycleConsolidationTrigger.d.ts +1 -0
- package/dist/services/orpar-memory/CycleConsolidationTrigger.d.ts.map +1 -1
- package/dist/services/orpar-memory/CycleConsolidationTrigger.js +8 -1
- package/dist/services/orpar-memory/CycleConsolidationTrigger.js.map +1 -1
- package/dist/services/orpar-memory/OrparMemoryCoordinator.d.ts +8 -1
- package/dist/services/orpar-memory/OrparMemoryCoordinator.d.ts.map +1 -1
- package/dist/services/orpar-memory/OrparMemoryCoordinator.js +93 -45
- package/dist/services/orpar-memory/OrparMemoryCoordinator.js.map +1 -1
- package/dist/services/orpar-memory/SurpriseOrparAdapter.d.ts +1 -0
- package/dist/services/orpar-memory/SurpriseOrparAdapter.d.ts.map +1 -1
- package/dist/services/orpar-memory/SurpriseOrparAdapter.js +8 -1
- package/dist/services/orpar-memory/SurpriseOrparAdapter.js.map +1 -1
- package/dist/types/ChannelContext.d.ts +2 -1
- package/dist/types/ChannelContext.d.ts.map +1 -1
- package/dist/types/EffectivenessTypes.d.ts +4 -1
- package/dist/types/EffectivenessTypes.d.ts.map +1 -1
- package/dist/types/TaskCompletionTypes.d.ts +7 -5
- package/dist/types/TaskCompletionTypes.d.ts.map +1 -1
- package/dist/types/TaskTypes.d.ts +8 -1
- package/dist/types/TaskTypes.d.ts.map +1 -1
- package/dist/utils/GlobMatcher.d.ts +37 -0
- package/dist/utils/GlobMatcher.d.ts.map +1 -0
- package/dist/utils/GlobMatcher.js +131 -0
- package/dist/utils/GlobMatcher.js.map +1 -0
- package/package.json +1 -1
- package/src/config/ModelContextLimits.ts +7 -1
- package/src/constants/CoreTools.ts +6 -5
- package/src/constants/DefaultPhaseProfiles.ts +29 -0
- package/src/constants/ReservedIdentities.ts +51 -0
- package/src/database/adapters/mongodb/MongoKnowledgeGraphRepository.ts +115 -36
- package/src/events/ClientEventBus.ts +117 -48
- package/src/events/EventBus.ts +32 -2
- package/src/events/EventBusBase.ts +132 -39
- package/src/events/EventNames.ts +43 -36
- package/src/events/PublicEvents.ts +8 -0
- package/src/events/ServerEventBus.ts +9 -128
- package/src/events/event-definitions/ControlLoopEvents.ts +12 -0
- package/src/events/event-definitions/SdkEvents.ts +58 -0
- package/src/events/event-definitions/TaskEvents.ts +2 -2
- package/src/index.ts +15 -0
- package/src/interfaces/AgentInterfaces.ts +5 -0
- package/src/interfaces/ChannelConfig.ts +2 -2
- package/src/interfaces/ConversationMessage.ts +5 -0
- package/src/interfaces/IMemoryPersistence.ts +55 -1
- package/src/interfaces/SocketServiceInterface.ts +3 -2
- package/src/interfaces/TaskInterfaces.ts +16 -1
- package/src/models/agent.ts +0 -6
- package/src/models/agentIdentityReservation.ts +77 -0
- package/src/models/channel.ts +2 -0
- package/src/models/channelKey.ts +10 -0
- package/src/models/memory.ts +18 -19
- package/src/models/memoryStrata.ts +9 -23
- package/src/models/plan.ts +3 -3
- package/src/models/taskEffectiveness.ts +9 -2
- package/src/models/user.ts +12 -0
- package/src/protocols/mcp/LlmTestEnvironmentGuard.ts +30 -0
- package/src/protocols/mcp/McpServerTypes.ts +9 -0
- package/src/protocols/mcp/providers/AnthropicMcpClient.ts +2 -0
- package/src/protocols/mcp/providers/AzureOpenAiMcpClient.ts +1 -0
- package/src/protocols/mcp/providers/BaseMcpClient.ts +13 -0
- package/src/protocols/mcp/providers/CustomMcpClient.ts +7 -0
- package/src/protocols/mcp/providers/GeminiMcpClient.ts +2 -0
- package/src/protocols/mcp/providers/OllamaMcpClient.ts +3 -1
- package/src/protocols/mcp/providers/OpenAiMcpClient.ts +2 -0
- package/src/protocols/mcp/providers/OpenRouterMcpClient.ts +3 -0
- package/src/protocols/mcp/providers/XaiMcpClient.ts +2 -0
- package/src/protocols/mcp/security/BrowserTargetGuard.ts +64 -0
- package/src/protocols/mcp/security/ExternalMcpRegistrationPolicy.ts +38 -0
- package/src/protocols/mcp/security/HttpTargetGuard.ts +77 -6
- package/src/protocols/mcp/security/McpSecurityGuard.ts +7 -5
- package/src/protocols/mcp/security/McpToolPolicy.ts +74 -0
- package/src/protocols/mcp/services/ExternalMcpServerManager.ts +146 -17
- package/src/protocols/mcp/services/ExternalServerConfigs.ts +26 -8
- package/src/protocols/mcp/tools/AnalyticsTools.ts +167 -641
- package/src/protocols/mcp/tools/CodeAnalysisTools.ts +44 -14
- package/src/protocols/mcp/tools/EffectivenessTools.ts +185 -45
- package/src/protocols/mcp/tools/GitTools.ts +15 -5
- package/src/protocols/mcp/tools/InfrastructureTools.ts +42 -90
- package/src/protocols/mcp/tools/JsonTools.ts +7 -4
- package/src/protocols/mcp/tools/KnowledgeGraphTools.ts +313 -164
- package/src/protocols/mcp/tools/MemorySearchTools.ts +158 -46
- package/src/protocols/mcp/tools/MemoryUtilityTools.ts +85 -232
- package/src/protocols/mcp/tools/PlanningTools.ts +137 -59
- package/src/protocols/mcp/tools/ProjectContextTools.ts +33 -12
- package/src/protocols/mcp/tools/SafetyTools.ts +49 -13
- package/src/protocols/mcp/tools/SearchProjectTools.ts +294 -153
- package/src/protocols/mcp/tools/TaskPlanningTools.ts +437 -514
- package/src/protocols/mcp/tools/TestTools.ts +41 -11
- package/src/protocols/mcp/tools/TypeScriptTools.ts +61 -12
- package/src/protocols/mcp/tools/UserInputTools.ts +15 -1
- package/src/protocols/mcp/tools/UserMemoryTools.ts +27 -62
- package/src/protocols/mcp/tools/shell/ShellExecuteHandler.ts +26 -84
- package/src/protocols/mcp/tools/shell/ShellSandbox.ts +13 -31
- package/src/repositories/interfaces/IKnowledgeGraphRepository.ts +45 -27
- package/src/schemas/EventPayloadSchema.ts +45 -1
- package/src/services/AgentPerformanceService.ts +85 -36
- package/src/services/AutoCorrectionService.ts +25 -6
- package/src/services/BackgroundTaskManager.ts +183 -76
- package/src/services/BrowserManager.ts +20 -16
- package/src/services/ChannelContextMemoryOperations.ts +169 -202
- package/src/services/ChannelContextMessageOperations.ts +112 -274
- package/src/services/MemoryService.ts +1053 -760
- package/src/services/PatternLearningService.ts +32 -7
- package/src/services/PerformanceOptimizationService.ts +26 -9
- package/src/services/PredictiveAnalyticsService.ts +23 -10
- package/src/services/ProactiveValidationService.ts +66 -40
- package/src/services/TaskEffectivenessService.ts +421 -206
- package/src/services/ToolExecutionInterceptor.ts +40 -9
- package/src/services/UserInputRequestManager.ts +51 -6
- package/src/services/UserMemoryService.ts +12 -3
- package/src/services/ValidationAnalyticsService.ts +36 -11
- package/src/services/ValidationCacheService.ts +30 -7
- package/src/services/ValidationMiddleware.ts +62 -14
- package/src/services/ValidationPerformanceService.ts +47 -25
- package/src/services/WebSearchService.ts +16 -4
- package/src/services/dag/TaskDagService.ts +20 -1
- package/src/services/kg/EntityQValueManager.ts +21 -10
- package/src/services/kg/GraphSurpriseCalculator.ts +0 -14
- package/src/services/kg/KnowledgeGraphService.ts +56 -48
- package/src/services/kg/OrparGraphIntegration.ts +11 -5
- package/src/services/orpar-memory/CycleConsolidationTrigger.ts +10 -1
- package/src/services/orpar-memory/OrparMemoryCoordinator.ts +142 -71
- package/src/services/orpar-memory/SurpriseOrparAdapter.ts +10 -1
- package/src/types/ChannelContext.ts +3 -1
- package/src/types/EffectivenessTypes.ts +6 -2
- package/src/types/TaskCompletionTypes.ts +9 -9
- package/src/types/TaskTypes.ts +12 -1
- package/src/utils/GlobMatcher.ts +157 -0
|
@@ -29,7 +29,7 @@
|
|
|
29
29
|
* - Prevent infinite correction loops
|
|
30
30
|
*/
|
|
31
31
|
|
|
32
|
-
import { Observable, Subject } from 'rxjs';
|
|
32
|
+
import { Observable, Subject, Subscription } from 'rxjs';
|
|
33
33
|
import { Logger } from '../utils/Logger.js';
|
|
34
34
|
import { EventBus } from '../events/EventBus.js';
|
|
35
35
|
import { Events } from '../events/EventNames.js';
|
|
@@ -96,8 +96,13 @@ export class ToolExecutionInterceptor {
|
|
|
96
96
|
|
|
97
97
|
// Configuration
|
|
98
98
|
private config: InterceptorConfig;
|
|
99
|
-
|
|
100
|
-
private
|
|
99
|
+
private readonly subscriptions: Subscription[] = [];
|
|
100
|
+
private readonly pendingDelays = new Map<
|
|
101
|
+
ReturnType<typeof setTimeout>,
|
|
102
|
+
(reason?: unknown) => void
|
|
103
|
+
>();
|
|
104
|
+
|
|
105
|
+
private static instance: ToolExecutionInterceptor | undefined;
|
|
101
106
|
|
|
102
107
|
private constructor() {
|
|
103
108
|
this.logger = new Logger('info', 'ToolExecutionInterceptor', 'server');
|
|
@@ -340,7 +345,14 @@ export class ToolExecutionInterceptor {
|
|
|
340
345
|
* Add delay for retry attempts
|
|
341
346
|
*/
|
|
342
347
|
private delay(ms: number): Promise<void> {
|
|
343
|
-
return new Promise(
|
|
348
|
+
return new Promise((resolve, reject) => {
|
|
349
|
+
const timer = setTimeout(() => {
|
|
350
|
+
this.pendingDelays.delete(timer);
|
|
351
|
+
resolve();
|
|
352
|
+
}, ms);
|
|
353
|
+
timer.unref?.();
|
|
354
|
+
this.pendingDelays.set(timer, reject);
|
|
355
|
+
});
|
|
344
356
|
}
|
|
345
357
|
|
|
346
358
|
/**
|
|
@@ -362,16 +374,16 @@ export class ToolExecutionInterceptor {
|
|
|
362
374
|
*/
|
|
363
375
|
private setupEventListeners(): void {
|
|
364
376
|
// Listen to auto-correction events for additional processing
|
|
365
|
-
this.autoCorrectionService.correctionEvents.subscribe(
|
|
377
|
+
this.subscriptions.push(this.autoCorrectionService.correctionEvents.subscribe(_attempt => {
|
|
366
378
|
if (this.config.enableLearning) {
|
|
367
379
|
}
|
|
368
|
-
});
|
|
380
|
+
}));
|
|
369
381
|
|
|
370
382
|
// Listen to general tool errors for monitoring
|
|
371
|
-
EventBus.server.on(Events.Mcp.TOOL_ERROR, (
|
|
383
|
+
this.subscriptions.push(EventBus.server.on(Events.Mcp.TOOL_ERROR, (_payload) => {
|
|
372
384
|
if (this.config.logAllInterceptions) {
|
|
373
385
|
}
|
|
374
|
-
});
|
|
386
|
+
}));
|
|
375
387
|
|
|
376
388
|
}
|
|
377
389
|
|
|
@@ -478,6 +490,25 @@ export class ToolExecutionInterceptor {
|
|
|
478
490
|
this.activeExecutions.clear();
|
|
479
491
|
}
|
|
480
492
|
|
|
493
|
+
/** Cancel pending retry delays and detach every owned subscription. */
|
|
494
|
+
public shutdown(): void {
|
|
495
|
+
for (const [timer, reject] of this.pendingDelays) {
|
|
496
|
+
clearTimeout(timer);
|
|
497
|
+
reject(new Error('Tool execution interceptor is shutting down'));
|
|
498
|
+
}
|
|
499
|
+
this.pendingDelays.clear();
|
|
500
|
+
for (const subscription of this.subscriptions) {
|
|
501
|
+
subscription.unsubscribe();
|
|
502
|
+
}
|
|
503
|
+
this.subscriptions.length = 0;
|
|
504
|
+
this.clearExecutionHistory();
|
|
505
|
+
this.interceptionEvents$.complete();
|
|
506
|
+
|
|
507
|
+
if (ToolExecutionInterceptor.instance === this) {
|
|
508
|
+
ToolExecutionInterceptor.instance = undefined;
|
|
509
|
+
}
|
|
510
|
+
}
|
|
511
|
+
|
|
481
512
|
/**
|
|
482
513
|
* Create a wrapped executor function that includes interception
|
|
483
514
|
*/
|
|
@@ -510,4 +541,4 @@ export class ToolExecutionInterceptor {
|
|
|
510
541
|
retryCount
|
|
511
542
|
};
|
|
512
543
|
}
|
|
513
|
-
}
|
|
544
|
+
}
|
|
@@ -103,10 +103,14 @@ export class UserInputRequestManager {
|
|
|
103
103
|
private static readonly CLEANUP_INTERVAL_MS = 60 * 1000;
|
|
104
104
|
|
|
105
105
|
private constructor() {
|
|
106
|
-
// Start periodic cleanup of expired requests
|
|
106
|
+
// Start periodic cleanup of expired requests. The sweep must not be what
|
|
107
|
+
// keeps the process alive: the manager is created lazily by the first
|
|
108
|
+
// forwarded user-input request, and a referenced interval here kept the
|
|
109
|
+
// server running after every shutdown step had completed.
|
|
107
110
|
this.cleanupInterval = setInterval(() => {
|
|
108
111
|
this.cleanupExpired();
|
|
109
112
|
}, UserInputRequestManager.CLEANUP_INTERVAL_MS);
|
|
113
|
+
this.cleanupInterval.unref?.();
|
|
110
114
|
}
|
|
111
115
|
|
|
112
116
|
/**
|
|
@@ -119,6 +123,20 @@ export class UserInputRequestManager {
|
|
|
119
123
|
return UserInputRequestManager.instance;
|
|
120
124
|
}
|
|
121
125
|
|
|
126
|
+
/**
|
|
127
|
+
* Shut down the live manager, if one was ever created, without constructing
|
|
128
|
+
* one solely for teardown.
|
|
129
|
+
*
|
|
130
|
+
* @returns true when a manager existed and was shut down
|
|
131
|
+
*/
|
|
132
|
+
public static shutdownExisting(): boolean {
|
|
133
|
+
if (!UserInputRequestManager.instance) {
|
|
134
|
+
return false;
|
|
135
|
+
}
|
|
136
|
+
UserInputRequestManager.instance.shutdown();
|
|
137
|
+
return true;
|
|
138
|
+
}
|
|
139
|
+
|
|
122
140
|
/**
|
|
123
141
|
* Create a new user input request and return a Promise that resolves when the user responds.
|
|
124
142
|
*
|
|
@@ -187,20 +205,35 @@ export class UserInputRequestManager {
|
|
|
187
205
|
*
|
|
188
206
|
* @param requestId - The request ID to respond to
|
|
189
207
|
* @param value - The user's response value
|
|
190
|
-
* @
|
|
208
|
+
* @param responderAgentId - Authenticated agent submitting the response
|
|
209
|
+
* @param responderChannelId - Authenticated channel of the responder
|
|
210
|
+
* @throws Error if the request is missing, outside the responder's scope,
|
|
211
|
+
* not pending, or the value is invalid
|
|
191
212
|
*/
|
|
192
|
-
public submitResponse(
|
|
213
|
+
public submitResponse(
|
|
214
|
+
requestId: string,
|
|
215
|
+
value: UserInputResponseValue,
|
|
216
|
+
responderAgentId: string,
|
|
217
|
+
responderChannelId: string
|
|
218
|
+
): void {
|
|
193
219
|
const validator = createStrictValidator('UserInputRequestManager.submitResponse');
|
|
194
220
|
validator.assertIsNonEmptyString(requestId, 'requestId is required');
|
|
221
|
+
validator.assertIsNonEmptyString(responderAgentId, 'responderAgentId is required');
|
|
222
|
+
validator.assertIsNonEmptyString(responderChannelId, 'responderChannelId is required');
|
|
195
223
|
|
|
196
224
|
const pending = this.pendingRequests.get(requestId);
|
|
197
225
|
if (!pending) {
|
|
198
226
|
throw new Error(`User input request ${requestId} not found`);
|
|
199
227
|
}
|
|
200
228
|
|
|
229
|
+
if (pending.request.agentId !== responderAgentId ||
|
|
230
|
+
pending.request.channelId !== responderChannelId) {
|
|
231
|
+
throw new Error('User input response is outside the authenticated agent/channel scope');
|
|
232
|
+
}
|
|
233
|
+
|
|
201
234
|
if (pending.status !== 'pending') {
|
|
202
|
-
//
|
|
203
|
-
//
|
|
235
|
+
// Preserve idempotence for client retries or duplicate transport
|
|
236
|
+
// delivery after the exact owner has already responded.
|
|
204
237
|
logger.debug(`User input request ${requestId} is already ${pending.status}, ignoring duplicate response`);
|
|
205
238
|
return;
|
|
206
239
|
}
|
|
@@ -276,16 +309,28 @@ export class UserInputRequestManager {
|
|
|
276
309
|
* @param requestId - The request ID to check
|
|
277
310
|
* @returns Status info, or null if not found
|
|
278
311
|
*/
|
|
279
|
-
public getRequest(requestId: string): {
|
|
312
|
+
public getRequest(requestId: string, requesterAgentId: string, requesterChannelId: string): {
|
|
280
313
|
status: UserInputRequestStatus;
|
|
281
314
|
value?: UserInputResponseValue;
|
|
282
315
|
request: UserInputRequestData;
|
|
283
316
|
} | null {
|
|
317
|
+
const validator = createStrictValidator('UserInputRequestManager.getRequest');
|
|
318
|
+
validator.assertIsNonEmptyString(requestId, 'requestId is required');
|
|
319
|
+
validator.assertIsNonEmptyString(requesterAgentId, 'requesterAgentId is required');
|
|
320
|
+
validator.assertIsNonEmptyString(requesterChannelId, 'requesterChannelId is required');
|
|
321
|
+
|
|
284
322
|
const pending = this.pendingRequests.get(requestId);
|
|
285
323
|
if (!pending) {
|
|
286
324
|
return null;
|
|
287
325
|
}
|
|
288
326
|
|
|
327
|
+
// Return the same result as an unknown id so callers cannot use a
|
|
328
|
+
// leaked or guessed request id to probe another agent's prompt or value.
|
|
329
|
+
if (pending.request.agentId !== requesterAgentId ||
|
|
330
|
+
pending.request.channelId !== requesterChannelId) {
|
|
331
|
+
return null;
|
|
332
|
+
}
|
|
333
|
+
|
|
289
334
|
return {
|
|
290
335
|
status: pending.status,
|
|
291
336
|
value: pending.responseValue,
|
|
@@ -45,6 +45,11 @@ const MEILISEARCH_INDEX = 'mxf-user-memories';
|
|
|
45
45
|
|
|
46
46
|
const logger = new Logger('info', 'UserMemoryService', 'server');
|
|
47
47
|
|
|
48
|
+
/** Escape one string literal embedded in a Meilisearch filter expression. */
|
|
49
|
+
export const escapeUserMemoryFilterLiteral = (value: string): string => (
|
|
50
|
+
value.replace(/\\/g, '\\\\').replace(/"/g, '\\"')
|
|
51
|
+
);
|
|
52
|
+
|
|
48
53
|
// ─── Exported Interfaces ─────────────────────────────────────────────────────
|
|
49
54
|
|
|
50
55
|
/** Result shape returned by recall and getSessionContext */
|
|
@@ -405,7 +410,7 @@ export class UserMemoryService {
|
|
|
405
410
|
try {
|
|
406
411
|
const client = service.getClient();
|
|
407
412
|
await client.index(MEILISEARCH_INDEX).deleteDocuments({
|
|
408
|
-
filter: `userId = "${userId}"`
|
|
413
|
+
filter: `userId = "${escapeUserMemoryFilterLiteral(userId)}"`
|
|
409
414
|
});
|
|
410
415
|
} catch (err) {
|
|
411
416
|
logger.warn('clearUserFromMeilisearch failed', err);
|
|
@@ -430,8 +435,12 @@ export class UserMemoryService {
|
|
|
430
435
|
const client = service.getClient();
|
|
431
436
|
|
|
432
437
|
// Build filter expression: always filter by userId, optionally by type
|
|
433
|
-
const filters = [
|
|
434
|
-
|
|
438
|
+
const filters = [
|
|
439
|
+
`userId = "${escapeUserMemoryFilterLiteral(userId)}"`
|
|
440
|
+
];
|
|
441
|
+
if (type) {
|
|
442
|
+
filters.push(`type = "${escapeUserMemoryFilterLiteral(type)}"`);
|
|
443
|
+
}
|
|
435
444
|
const filter = filters.join(' AND ');
|
|
436
445
|
|
|
437
446
|
const result = await client.index(MEILISEARCH_INDEX).search<UserMemoryMeilisearchDoc>(
|
|
@@ -30,6 +30,7 @@
|
|
|
30
30
|
*/
|
|
31
31
|
|
|
32
32
|
import { EventEmitter } from 'events';
|
|
33
|
+
import type { Subscription } from 'rxjs';
|
|
33
34
|
import { Logger } from '../utils/Logger.js';
|
|
34
35
|
import { EventBus } from '../events/EventBus.js';
|
|
35
36
|
import { Events } from '../events/EventNames.js';
|
|
@@ -203,8 +204,10 @@ export class ValidationAnalyticsService extends EventEmitter {
|
|
|
203
204
|
retentionPeriod: 90 * 24 * 60 * 60 * 1000, // 90 days
|
|
204
205
|
enableRealTimeStreaming: true
|
|
205
206
|
};
|
|
206
|
-
|
|
207
|
-
private
|
|
207
|
+
private readonly eventSubscriptions: Subscription[] = [];
|
|
208
|
+
private aggregationInterval?: ReturnType<typeof setInterval>;
|
|
209
|
+
|
|
210
|
+
private static instance: ValidationAnalyticsService | undefined;
|
|
208
211
|
|
|
209
212
|
private constructor() {
|
|
210
213
|
super();
|
|
@@ -1037,7 +1040,7 @@ export class ValidationAnalyticsService extends EventEmitter {
|
|
|
1037
1040
|
*/
|
|
1038
1041
|
private setupEventListeners(): void {
|
|
1039
1042
|
// Listen to validation events
|
|
1040
|
-
EventBus.server.on(Events.Mcp.TOOL_VALIDATION_ERROR, (event) => {
|
|
1043
|
+
this.eventSubscriptions.push(EventBus.server.on(Events.Mcp.TOOL_VALIDATION_ERROR, (event) => {
|
|
1041
1044
|
this.recordMetric({
|
|
1042
1045
|
name: 'validation_error',
|
|
1043
1046
|
value: 1,
|
|
@@ -1048,9 +1051,9 @@ export class ValidationAnalyticsService extends EventEmitter {
|
|
|
1048
1051
|
errorType: event.errorType
|
|
1049
1052
|
}
|
|
1050
1053
|
});
|
|
1051
|
-
});
|
|
1054
|
+
}));
|
|
1052
1055
|
|
|
1053
|
-
EventBus.server.on(Events.Mcp.TOOL_RESULT, (event) => {
|
|
1056
|
+
this.eventSubscriptions.push(EventBus.server.on(Events.Mcp.TOOL_RESULT, (event) => {
|
|
1054
1057
|
if (event.success) {
|
|
1055
1058
|
this.recordMetric({
|
|
1056
1059
|
name: 'tool_success',
|
|
@@ -1062,10 +1065,10 @@ export class ValidationAnalyticsService extends EventEmitter {
|
|
|
1062
1065
|
}
|
|
1063
1066
|
});
|
|
1064
1067
|
}
|
|
1065
|
-
});
|
|
1068
|
+
}));
|
|
1066
1069
|
|
|
1067
1070
|
// Listen to correction events
|
|
1068
|
-
EventBus.server.on(Events.Mcp.TOOL_RESULT, (event) => {
|
|
1071
|
+
this.eventSubscriptions.push(EventBus.server.on(Events.Mcp.TOOL_RESULT, (event) => {
|
|
1069
1072
|
this.recordMetric({
|
|
1070
1073
|
name: 'auto_correction',
|
|
1071
1074
|
value: 1,
|
|
@@ -1075,16 +1078,17 @@ export class ValidationAnalyticsService extends EventEmitter {
|
|
|
1075
1078
|
tool: event.toolName
|
|
1076
1079
|
}
|
|
1077
1080
|
});
|
|
1078
|
-
});
|
|
1081
|
+
}));
|
|
1079
1082
|
}
|
|
1080
1083
|
|
|
1081
1084
|
/**
|
|
1082
1085
|
* Start aggregation worker
|
|
1083
1086
|
*/
|
|
1084
1087
|
private startAggregationWorker(): void {
|
|
1085
|
-
setInterval(() => {
|
|
1086
|
-
this.performAggregation();
|
|
1088
|
+
this.aggregationInterval = setInterval(() => {
|
|
1089
|
+
void this.performAggregation();
|
|
1087
1090
|
}, this.config.aggregationInterval);
|
|
1091
|
+
this.aggregationInterval.unref?.();
|
|
1088
1092
|
}
|
|
1089
1093
|
|
|
1090
1094
|
/**
|
|
@@ -1170,4 +1174,25 @@ export class ValidationAnalyticsService extends EventEmitter {
|
|
|
1170
1174
|
this.metricsBuffer.length = 0;
|
|
1171
1175
|
this.aggregatedMetrics.clear();
|
|
1172
1176
|
}
|
|
1173
|
-
|
|
1177
|
+
|
|
1178
|
+
/** Release every timer and subscription owned by this singleton. */
|
|
1179
|
+
public shutdown(): void {
|
|
1180
|
+
if (this.aggregationInterval) {
|
|
1181
|
+
clearInterval(this.aggregationInterval);
|
|
1182
|
+
this.aggregationInterval = undefined;
|
|
1183
|
+
}
|
|
1184
|
+
for (const subscription of this.eventSubscriptions) {
|
|
1185
|
+
subscription.unsubscribe();
|
|
1186
|
+
}
|
|
1187
|
+
this.eventSubscriptions.length = 0;
|
|
1188
|
+
this.clearMetrics();
|
|
1189
|
+
this.activeABTests.clear();
|
|
1190
|
+
this.abTestResults.clear();
|
|
1191
|
+
this.customReports.clear();
|
|
1192
|
+
this.removeAllListeners();
|
|
1193
|
+
|
|
1194
|
+
if (ValidationAnalyticsService.instance === this) {
|
|
1195
|
+
ValidationAnalyticsService.instance = undefined;
|
|
1196
|
+
}
|
|
1197
|
+
}
|
|
1198
|
+
}
|
|
@@ -197,9 +197,11 @@ export class ValidationCacheService {
|
|
|
197
197
|
private mongoCollection: any = null;
|
|
198
198
|
|
|
199
199
|
// Background tasks
|
|
200
|
-
private cleanupInterval
|
|
201
|
-
|
|
202
|
-
private
|
|
200
|
+
private cleanupInterval?: ReturnType<typeof setInterval>;
|
|
201
|
+
private mongoCleanupInterval?: ReturnType<typeof setInterval>;
|
|
202
|
+
private statisticsInterval?: ReturnType<typeof setInterval>;
|
|
203
|
+
|
|
204
|
+
private static instance: ValidationCacheService | undefined;
|
|
203
205
|
|
|
204
206
|
private constructor() {
|
|
205
207
|
this.logger = new Logger('info', 'ValidationCacheService', 'server');
|
|
@@ -962,21 +964,24 @@ export class ValidationCacheService {
|
|
|
962
964
|
this.cleanupInterval = setInterval(() => {
|
|
963
965
|
this.cleanupExpiredMemoryEntries();
|
|
964
966
|
}, this.config.memoryCache.cleanupInterval);
|
|
967
|
+
this.cleanupInterval.unref?.();
|
|
965
968
|
}
|
|
966
969
|
|
|
967
970
|
// MongoDB background cleanup
|
|
968
971
|
if (this.config.mongoCache.backgroundCleanup) {
|
|
969
|
-
setInterval(() => {
|
|
972
|
+
this.mongoCleanupInterval = setInterval(() => {
|
|
970
973
|
this.cleanupMongoCache().catch(error => {
|
|
971
974
|
this.logger.warn('MongoDB cache cleanup failed:', error);
|
|
972
975
|
});
|
|
973
976
|
}, 60 * 60 * 1000); // Every hour
|
|
977
|
+
this.mongoCleanupInterval.unref?.();
|
|
974
978
|
}
|
|
975
979
|
|
|
976
980
|
// Statistics reporting
|
|
977
|
-
setInterval(() => {
|
|
981
|
+
this.statisticsInterval = setInterval(() => {
|
|
978
982
|
this.reportCacheStatistics();
|
|
979
983
|
}, 5 * 60 * 1000); // Every 5 minutes
|
|
984
|
+
this.statisticsInterval.unref?.();
|
|
980
985
|
}
|
|
981
986
|
|
|
982
987
|
private cleanupExpiredMemoryEntries(): void {
|
|
@@ -1166,12 +1171,30 @@ export class ValidationCacheService {
|
|
|
1166
1171
|
public shutdown(): void {
|
|
1167
1172
|
if (this.cleanupInterval) {
|
|
1168
1173
|
clearInterval(this.cleanupInterval);
|
|
1169
|
-
this.cleanupInterval =
|
|
1174
|
+
this.cleanupInterval = undefined;
|
|
1175
|
+
}
|
|
1176
|
+
if (this.mongoCleanupInterval) {
|
|
1177
|
+
clearInterval(this.mongoCleanupInterval);
|
|
1178
|
+
this.mongoCleanupInterval = undefined;
|
|
1179
|
+
}
|
|
1180
|
+
if (this.statisticsInterval) {
|
|
1181
|
+
clearInterval(this.statisticsInterval);
|
|
1182
|
+
this.statisticsInterval = undefined;
|
|
1170
1183
|
}
|
|
1171
1184
|
|
|
1172
1185
|
if (this.redisClient) {
|
|
1173
1186
|
// this.redisClient.disconnect();
|
|
1174
1187
|
}
|
|
1175
1188
|
|
|
1189
|
+
this.memoryCache.clear();
|
|
1190
|
+
this.accessOrder.clear();
|
|
1191
|
+
this.accessFrequency.clear();
|
|
1192
|
+
this.memoryCacheSize = 0;
|
|
1193
|
+
this.cacheEvents$.complete();
|
|
1194
|
+
|
|
1195
|
+
if (ValidationCacheService.instance === this) {
|
|
1196
|
+
ValidationCacheService.instance = undefined;
|
|
1197
|
+
}
|
|
1198
|
+
|
|
1176
1199
|
}
|
|
1177
|
-
}
|
|
1200
|
+
}
|
|
@@ -25,7 +25,7 @@
|
|
|
25
25
|
* Integrates with ToolExecutionInterceptor and adds proactive validation layer.
|
|
26
26
|
*/
|
|
27
27
|
|
|
28
|
-
import { Observable, Subject } from 'rxjs';
|
|
28
|
+
import { Observable, Subject, Subscription } from 'rxjs';
|
|
29
29
|
import { Logger } from '../utils/Logger.js';
|
|
30
30
|
import { EventBus } from '../events/EventBus.js';
|
|
31
31
|
import { Events } from '../events/EventNames.js';
|
|
@@ -127,8 +127,16 @@ export class ValidationMiddleware {
|
|
|
127
127
|
|
|
128
128
|
// Emergency bypass tracking
|
|
129
129
|
private emergencyBypassUntil = 0;
|
|
130
|
-
|
|
131
|
-
private
|
|
130
|
+
private readonly subscriptions: Subscription[] = [];
|
|
131
|
+
private readonly pendingValidationTimeouts = new Map<
|
|
132
|
+
ReturnType<typeof setTimeout>,
|
|
133
|
+
(reason?: unknown) => void
|
|
134
|
+
>();
|
|
135
|
+
private metricsInterval?: ReturnType<typeof setInterval>;
|
|
136
|
+
private interceptionCleanupInterval?: ReturnType<typeof setInterval>;
|
|
137
|
+
private healthCheckInterval?: ReturnType<typeof setInterval>;
|
|
138
|
+
|
|
139
|
+
private static instance: ValidationMiddleware | undefined;
|
|
132
140
|
|
|
133
141
|
private constructor() {
|
|
134
142
|
this.logger = new Logger('info', 'ValidationMiddleware', 'server');
|
|
@@ -415,9 +423,9 @@ export class ValidationMiddleware {
|
|
|
415
423
|
// This ensures all tool calls go through both validation and auto-correction
|
|
416
424
|
|
|
417
425
|
// Listen to tool execution interceptor events
|
|
418
|
-
this.toolExecutionInterceptor.interceptionEvents.subscribe(event => {
|
|
426
|
+
this.subscriptions.push(this.toolExecutionInterceptor.interceptionEvents.subscribe(event => {
|
|
419
427
|
this.handleToolExecutionEvent(event);
|
|
420
|
-
});
|
|
428
|
+
}));
|
|
421
429
|
|
|
422
430
|
}
|
|
423
431
|
|
|
@@ -625,13 +633,19 @@ export class ValidationMiddleware {
|
|
|
625
633
|
private async withTimeout<T>(promise: Promise<T>, timeoutMs: number): Promise<T> {
|
|
626
634
|
return new Promise((resolve, reject) => {
|
|
627
635
|
const timer = setTimeout(() => {
|
|
636
|
+
this.pendingValidationTimeouts.delete(timer);
|
|
628
637
|
reject(new Error('TIMEOUT'));
|
|
629
638
|
}, timeoutMs);
|
|
639
|
+
timer.unref?.();
|
|
640
|
+
this.pendingValidationTimeouts.set(timer, reject);
|
|
630
641
|
|
|
631
642
|
promise
|
|
632
643
|
.then(resolve)
|
|
633
644
|
.catch(reject)
|
|
634
|
-
.finally(() =>
|
|
645
|
+
.finally(() => {
|
|
646
|
+
clearTimeout(timer);
|
|
647
|
+
this.pendingValidationTimeouts.delete(timer);
|
|
648
|
+
});
|
|
635
649
|
});
|
|
636
650
|
}
|
|
637
651
|
|
|
@@ -689,31 +703,34 @@ export class ValidationMiddleware {
|
|
|
689
703
|
|
|
690
704
|
private setupEventListeners(): void {
|
|
691
705
|
// Listen to system events for emergency bypass triggers
|
|
692
|
-
EventBus.server.on(Events.System.MAINTENANCE_MODE, () => {
|
|
706
|
+
this.subscriptions.push(EventBus.server.on(Events.System.MAINTENANCE_MODE, () => {
|
|
693
707
|
this.activateEmergencyBypass(30 * 60 * 1000); // 30 minutes
|
|
694
|
-
});
|
|
708
|
+
}));
|
|
695
709
|
|
|
696
710
|
// Listen to validation performance events
|
|
697
|
-
this.proactiveValidationService.validationEvents.subscribe(
|
|
711
|
+
this.subscriptions.push(this.proactiveValidationService.validationEvents.subscribe(_event => {
|
|
698
712
|
// Could use these events for additional learning or optimization
|
|
699
|
-
});
|
|
713
|
+
}));
|
|
700
714
|
}
|
|
701
715
|
|
|
702
716
|
private startPeriodicTasks(): void {
|
|
703
717
|
// Performance reporting
|
|
704
|
-
setInterval(() => {
|
|
718
|
+
this.metricsInterval = setInterval(() => {
|
|
705
719
|
this.reportPerformanceMetrics();
|
|
706
720
|
}, 60 * 1000); // Every minute
|
|
721
|
+
this.metricsInterval.unref?.();
|
|
707
722
|
|
|
708
723
|
// Cleanup expired interceptions
|
|
709
|
-
setInterval(() => {
|
|
724
|
+
this.interceptionCleanupInterval = setInterval(() => {
|
|
710
725
|
this.cleanupExpiredInterceptions();
|
|
711
726
|
}, 5 * 60 * 1000); // Every 5 minutes
|
|
727
|
+
this.interceptionCleanupInterval.unref?.();
|
|
712
728
|
|
|
713
729
|
// Health checks
|
|
714
|
-
setInterval(() => {
|
|
730
|
+
this.healthCheckInterval = setInterval(() => {
|
|
715
731
|
this.performHealthCheck();
|
|
716
732
|
}, 30 * 1000); // Every 30 seconds
|
|
733
|
+
this.healthCheckInterval.unref?.();
|
|
717
734
|
}
|
|
718
735
|
|
|
719
736
|
private reportPerformanceMetrics(): void {
|
|
@@ -873,4 +890,35 @@ export class ValidationMiddleware {
|
|
|
873
890
|
totalValidationTime: 0
|
|
874
891
|
});
|
|
875
892
|
}
|
|
876
|
-
|
|
893
|
+
|
|
894
|
+
/** Release every timer and subscription owned by this singleton. */
|
|
895
|
+
public shutdown(): void {
|
|
896
|
+
if (this.metricsInterval) {
|
|
897
|
+
clearInterval(this.metricsInterval);
|
|
898
|
+
this.metricsInterval = undefined;
|
|
899
|
+
}
|
|
900
|
+
if (this.interceptionCleanupInterval) {
|
|
901
|
+
clearInterval(this.interceptionCleanupInterval);
|
|
902
|
+
this.interceptionCleanupInterval = undefined;
|
|
903
|
+
}
|
|
904
|
+
if (this.healthCheckInterval) {
|
|
905
|
+
clearInterval(this.healthCheckInterval);
|
|
906
|
+
this.healthCheckInterval = undefined;
|
|
907
|
+
}
|
|
908
|
+
for (const [timer, reject] of this.pendingValidationTimeouts) {
|
|
909
|
+
clearTimeout(timer);
|
|
910
|
+
reject(new Error('Validation middleware is shutting down'));
|
|
911
|
+
}
|
|
912
|
+
this.pendingValidationTimeouts.clear();
|
|
913
|
+
for (const subscription of this.subscriptions) {
|
|
914
|
+
subscription.unsubscribe();
|
|
915
|
+
}
|
|
916
|
+
this.subscriptions.length = 0;
|
|
917
|
+
this.activeInterceptions.clear();
|
|
918
|
+
this.middlewareEvents$.complete();
|
|
919
|
+
|
|
920
|
+
if (ValidationMiddleware.instance === this) {
|
|
921
|
+
ValidationMiddleware.instance = undefined;
|
|
922
|
+
}
|
|
923
|
+
}
|
|
924
|
+
}
|
|
@@ -23,7 +23,7 @@
|
|
|
23
23
|
* Phase 1: Extension of AgentPerformanceService for validation metrics
|
|
24
24
|
*/
|
|
25
25
|
|
|
26
|
-
import { Observable, Subject,
|
|
26
|
+
import { Observable, Subject, type Subscription } from 'rxjs';
|
|
27
27
|
import { Logger } from '../utils/Logger.js';
|
|
28
28
|
import { EventBus } from '../events/EventBus.js';
|
|
29
29
|
import { Events } from '../events/EventNames.js';
|
|
@@ -52,8 +52,11 @@ export class ValidationPerformanceService {
|
|
|
52
52
|
|
|
53
53
|
// Observable for validation events
|
|
54
54
|
private readonly validationEvents$ = new Subject<ValidationEvent>();
|
|
55
|
-
|
|
56
|
-
|
|
55
|
+
|
|
56
|
+
// EventBus subscriptions owned by this singleton, released by shutdown()
|
|
57
|
+
private readonly eventSubscriptions: Subscription[] = [];
|
|
58
|
+
|
|
59
|
+
private static instance: ValidationPerformanceService | undefined;
|
|
57
60
|
|
|
58
61
|
private constructor() {
|
|
59
62
|
this.logger = new Logger('info', 'ValidationPerformanceService', 'server');
|
|
@@ -77,42 +80,61 @@ export class ValidationPerformanceService {
|
|
|
77
80
|
// =============================================================================
|
|
78
81
|
|
|
79
82
|
private setupEventListeners(): void {
|
|
83
|
+
// Handlers return their promise so the EventBus shutdown drain waits for
|
|
84
|
+
// in-flight tracking and logs a rejection instead of leaving it unhandled.
|
|
85
|
+
|
|
80
86
|
// Track validation errors
|
|
81
|
-
EventBus.server.on(Events.Mcp.TOOL_ERROR, (payload) => {
|
|
87
|
+
this.eventSubscriptions.push(EventBus.server.on(Events.Mcp.TOOL_ERROR, (payload): Promise<void> | undefined => {
|
|
82
88
|
const error = payload.error || payload.data?.error || payload.data?.errorMessage;
|
|
83
|
-
if (this.isValidationError(error)) {
|
|
84
|
-
|
|
85
|
-
payload.agentId,
|
|
86
|
-
payload.channelId,
|
|
87
|
-
payload.data?.toolName || payload.toolName,
|
|
88
|
-
error,
|
|
89
|
-
payload.data?.parameters
|
|
90
|
-
);
|
|
89
|
+
if (!this.isValidationError(error)) {
|
|
90
|
+
return undefined;
|
|
91
91
|
}
|
|
92
|
-
|
|
92
|
+
return this.trackValidationError(
|
|
93
|
+
payload.agentId,
|
|
94
|
+
payload.channelId,
|
|
95
|
+
payload.data?.toolName || payload.toolName,
|
|
96
|
+
error,
|
|
97
|
+
payload.data?.parameters
|
|
98
|
+
);
|
|
99
|
+
}));
|
|
93
100
|
|
|
94
101
|
// Track successful tool calls (for success rate calculation)
|
|
95
|
-
EventBus.server.on(Events.Mcp.TOOL_RESULT, (payload) =>
|
|
102
|
+
this.eventSubscriptions.push(EventBus.server.on(Events.Mcp.TOOL_RESULT, (payload) =>
|
|
96
103
|
this.trackValidationSuccess(
|
|
97
104
|
payload.agentId,
|
|
98
105
|
payload.channelId,
|
|
99
106
|
payload.data?.toolName || payload.toolName
|
|
100
|
-
)
|
|
101
|
-
|
|
107
|
+
)
|
|
108
|
+
));
|
|
102
109
|
|
|
103
110
|
// Track help tool usage
|
|
104
|
-
EventBus.server.on(Events.Mcp.TOOL_CALL, (payload) => {
|
|
111
|
+
this.eventSubscriptions.push(EventBus.server.on(Events.Mcp.TOOL_CALL, (payload): Promise<void> | undefined => {
|
|
105
112
|
const toolName = payload.data?.toolName || payload.toolName;
|
|
106
|
-
if (this.isHelpTool(toolName)) {
|
|
107
|
-
|
|
108
|
-
payload.agentId,
|
|
109
|
-
payload.channelId,
|
|
110
|
-
toolName,
|
|
111
|
-
payload.data?.parameters
|
|
112
|
-
);
|
|
113
|
+
if (!this.isHelpTool(toolName)) {
|
|
114
|
+
return undefined;
|
|
113
115
|
}
|
|
114
|
-
|
|
116
|
+
return this.trackHelpToolUsage(
|
|
117
|
+
payload.agentId,
|
|
118
|
+
payload.channelId,
|
|
119
|
+
toolName,
|
|
120
|
+
payload.data?.parameters
|
|
121
|
+
);
|
|
122
|
+
}));
|
|
123
|
+
}
|
|
115
124
|
|
|
125
|
+
/** Release every EventBus subscription and cached state owned by this singleton. */
|
|
126
|
+
public shutdown(): void {
|
|
127
|
+
for (const subscription of this.eventSubscriptions) {
|
|
128
|
+
subscription.unsubscribe();
|
|
129
|
+
}
|
|
130
|
+
this.eventSubscriptions.length = 0;
|
|
131
|
+
this.validationMetrics.clear();
|
|
132
|
+
this.errorTimestamps.clear();
|
|
133
|
+
this.validationEvents$.complete();
|
|
134
|
+
|
|
135
|
+
if (ValidationPerformanceService.instance === this) {
|
|
136
|
+
ValidationPerformanceService.instance = undefined;
|
|
137
|
+
}
|
|
116
138
|
}
|
|
117
139
|
|
|
118
140
|
// =============================================================================
|