@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
|
@@ -27,14 +27,12 @@ import { v4 as uuidv4 } from 'uuid';
|
|
|
27
27
|
import { Logger } from '../utils/Logger.js';
|
|
28
28
|
import { EventBus } from '../events/EventBus.js';
|
|
29
29
|
import { Events } from '../events/EventNames.js';
|
|
30
|
-
import { AgentPerformanceService } from './AgentPerformanceService.js';
|
|
31
30
|
import { TaskEffectivenessModel } from '../models/taskEffectiveness.js';
|
|
32
31
|
/**
|
|
33
32
|
* Service for tracking and analyzing task effectiveness
|
|
34
33
|
*/
|
|
35
34
|
export class TaskEffectivenessService {
|
|
36
35
|
logger;
|
|
37
|
-
performanceService;
|
|
38
36
|
static instance;
|
|
39
37
|
// Active task tracking
|
|
40
38
|
activeTasks = new Map();
|
|
@@ -59,7 +57,6 @@ export class TaskEffectivenessService {
|
|
|
59
57
|
};
|
|
60
58
|
constructor() {
|
|
61
59
|
this.logger = new Logger('info', 'TaskEffectivenessService', 'server');
|
|
62
|
-
this.performanceService = AgentPerformanceService.getInstance();
|
|
63
60
|
this.setupEventListeners();
|
|
64
61
|
}
|
|
65
62
|
static getInstance() {
|
|
@@ -68,15 +65,35 @@ export class TaskEffectivenessService {
|
|
|
68
65
|
}
|
|
69
66
|
return TaskEffectivenessService.instance;
|
|
70
67
|
}
|
|
68
|
+
getTaskKey(taskId, agentId, channelId) {
|
|
69
|
+
return JSON.stringify([agentId, channelId, taskId]);
|
|
70
|
+
}
|
|
71
|
+
requireTenantIdentity(agentId, channelId) {
|
|
72
|
+
if (!agentId?.trim() || !channelId?.trim() ||
|
|
73
|
+
agentId !== agentId.trim() || channelId !== channelId.trim()) {
|
|
74
|
+
throw new Error('Agent ID and channel ID are required');
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
requireTaskIdentity(taskId) {
|
|
78
|
+
if (!taskId?.trim() || taskId !== taskId.trim()) {
|
|
79
|
+
throw new Error('A canonical task ID is required');
|
|
80
|
+
}
|
|
81
|
+
}
|
|
71
82
|
/**
|
|
72
83
|
* Start tracking a new task
|
|
73
84
|
*/
|
|
74
85
|
startTask(definition) {
|
|
75
86
|
try {
|
|
76
|
-
if (!definition.channelId || !definition.taskType || !definition.description) {
|
|
87
|
+
if (!definition.agentId || !definition.channelId || !definition.taskType || !definition.description) {
|
|
77
88
|
throw new Error('Missing required task definition fields');
|
|
78
89
|
}
|
|
90
|
+
this.requireTenantIdentity(definition.agentId, definition.channelId);
|
|
79
91
|
const taskId = definition.taskId || uuidv4();
|
|
92
|
+
this.requireTaskIdentity(taskId);
|
|
93
|
+
const taskKey = this.getTaskKey(taskId, definition.agentId, definition.channelId);
|
|
94
|
+
if (this.activeTasks.has(taskKey)) {
|
|
95
|
+
throw new Error(`Task ${taskId} is already being tracked for this agent and channel`);
|
|
96
|
+
}
|
|
80
97
|
const metrics = {
|
|
81
98
|
taskId,
|
|
82
99
|
metadata: {
|
|
@@ -91,7 +108,7 @@ export class TaskEffectivenessService {
|
|
|
91
108
|
uniqueTools: [],
|
|
92
109
|
agentInteractions: 0,
|
|
93
110
|
humanInterventions: 0,
|
|
94
|
-
autonomyScore: 1.0
|
|
111
|
+
autonomyScore: 1.0
|
|
95
112
|
},
|
|
96
113
|
quality: {
|
|
97
114
|
goalAchieved: false,
|
|
@@ -106,26 +123,28 @@ export class TaskEffectivenessService {
|
|
|
106
123
|
memoryOperations: 0
|
|
107
124
|
},
|
|
108
125
|
collaboration: {
|
|
109
|
-
participatingAgents: [],
|
|
126
|
+
participatingAgents: [definition.agentId],
|
|
110
127
|
messageCount: 0,
|
|
111
128
|
coordinationCount: 0,
|
|
112
129
|
knowledgeTransfers: 0,
|
|
113
130
|
collaborationScore: 0
|
|
114
131
|
}
|
|
115
132
|
};
|
|
116
|
-
this.activeTasks.set(
|
|
117
|
-
this.taskDefinitions.set(
|
|
118
|
-
this.taskEvents.set(
|
|
119
|
-
// Emit task started event
|
|
133
|
+
this.activeTasks.set(taskKey, metrics);
|
|
134
|
+
this.taskDefinitions.set(taskKey, definition);
|
|
135
|
+
this.taskEvents.set(taskKey, []);
|
|
120
136
|
this.recordEvent({
|
|
121
137
|
eventId: uuidv4(),
|
|
122
138
|
taskId,
|
|
139
|
+
agentId: definition.agentId,
|
|
140
|
+
channelId: definition.channelId,
|
|
123
141
|
timestamp: Date.now(),
|
|
124
142
|
type: 'start',
|
|
125
143
|
details: { definition }
|
|
126
144
|
});
|
|
127
|
-
EventBus.server.emit(Events.Analytics.TASK_STARTED, createBaseEventPayload(Events.Analytics.TASK_STARTED,
|
|
145
|
+
EventBus.server.emit(Events.Analytics.TASK_STARTED, createBaseEventPayload(Events.Analytics.TASK_STARTED, definition.agentId, definition.channelId, {
|
|
128
146
|
taskId,
|
|
147
|
+
agentId: definition.agentId,
|
|
129
148
|
channelId: definition.channelId,
|
|
130
149
|
taskType: definition.taskType,
|
|
131
150
|
timestamp: new Date()
|
|
@@ -141,60 +160,57 @@ export class TaskEffectivenessService {
|
|
|
141
160
|
* Record a task execution event
|
|
142
161
|
*/
|
|
143
162
|
recordEvent(event) {
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
details: event.details,
|
|
166
|
-
timestamp: new Date()
|
|
167
|
-
}));
|
|
168
|
-
}
|
|
169
|
-
catch (error) {
|
|
170
|
-
this.logger.error(`Failed to record event: ${error}`);
|
|
171
|
-
}
|
|
163
|
+
if (!event.taskId || !event.type) {
|
|
164
|
+
throw new Error('Task ID and event type are required');
|
|
165
|
+
}
|
|
166
|
+
this.requireTaskIdentity(event.taskId);
|
|
167
|
+
this.requireTenantIdentity(event.agentId, event.channelId);
|
|
168
|
+
const taskKey = this.getTaskKey(event.taskId, event.agentId, event.channelId);
|
|
169
|
+
const events = this.taskEvents.get(taskKey);
|
|
170
|
+
const metrics = this.activeTasks.get(taskKey);
|
|
171
|
+
if (!events || !metrics) {
|
|
172
|
+
throw new Error(`Active task ${event.taskId} was not found for this agent and channel`);
|
|
173
|
+
}
|
|
174
|
+
events.push(event);
|
|
175
|
+
this.updateMetricsFromEvent(metrics, event);
|
|
176
|
+
EventBus.server.emit(Events.Analytics.TASK_EFFECTIVENESS_EVENT, createBaseEventPayload(Events.Analytics.TASK_EFFECTIVENESS_EVENT, event.agentId, event.channelId, {
|
|
177
|
+
taskId: event.taskId,
|
|
178
|
+
agentId: event.agentId,
|
|
179
|
+
channelId: event.channelId,
|
|
180
|
+
eventType: event.type,
|
|
181
|
+
details: event.details,
|
|
182
|
+
timestamp: new Date()
|
|
183
|
+
}));
|
|
172
184
|
}
|
|
173
185
|
/**
|
|
174
186
|
* Update task quality metrics
|
|
175
187
|
*/
|
|
176
|
-
updateQuality(taskId,
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
const
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
EventBus.server.emit(Events.Analytics.TASK_EFFECTIVENESS_QUALITY_UPDATE, createBaseEventPayload(Events.Analytics.TASK_EFFECTIVENESS_QUALITY_UPDATE, agentId || 'unknown', 'global', {
|
|
184
|
-
taskId,
|
|
185
|
-
agentId: agentId || 'unknown',
|
|
186
|
-
qualityUpdates: updates,
|
|
187
|
-
timestamp: new Date()
|
|
188
|
-
}));
|
|
188
|
+
updateQuality(taskId, agentId, channelId, updates) {
|
|
189
|
+
this.requireTenantIdentity(agentId, channelId);
|
|
190
|
+
this.requireTaskIdentity(taskId);
|
|
191
|
+
const taskKey = this.getTaskKey(taskId, agentId, channelId);
|
|
192
|
+
const metrics = this.activeTasks.get(taskKey);
|
|
193
|
+
if (!metrics) {
|
|
194
|
+
throw new Error(`Active task ${taskId} was not found for this agent and channel`);
|
|
189
195
|
}
|
|
196
|
+
metrics.quality = { ...metrics.quality, ...updates };
|
|
197
|
+
EventBus.server.emit(Events.Analytics.TASK_EFFECTIVENESS_QUALITY_UPDATE, createBaseEventPayload(Events.Analytics.TASK_EFFECTIVENESS_QUALITY_UPDATE, agentId, channelId, {
|
|
198
|
+
taskId,
|
|
199
|
+
agentId,
|
|
200
|
+
channelId,
|
|
201
|
+
qualityUpdates: updates,
|
|
202
|
+
timestamp: new Date()
|
|
203
|
+
}));
|
|
190
204
|
}
|
|
191
205
|
/**
|
|
192
206
|
* Complete a task and calculate final metrics
|
|
193
207
|
*/
|
|
194
|
-
async completeTask(taskId, success, customMetrics) {
|
|
195
|
-
|
|
208
|
+
async completeTask(taskId, agentId, channelId, success, customMetrics) {
|
|
209
|
+
this.requireTenantIdentity(agentId, channelId);
|
|
210
|
+
this.requireTaskIdentity(taskId);
|
|
211
|
+
const taskKey = this.getTaskKey(taskId, agentId, channelId);
|
|
212
|
+
const metrics = this.activeTasks.get(taskKey);
|
|
196
213
|
if (!metrics) {
|
|
197
|
-
this.logger.warn(`Cannot complete unknown task ${taskId}`);
|
|
198
214
|
return null;
|
|
199
215
|
}
|
|
200
216
|
// Update final metrics
|
|
@@ -211,11 +227,13 @@ export class TaskEffectivenessService {
|
|
|
211
227
|
}
|
|
212
228
|
// Persist to MongoDB, then drop from the active set. Persist first: if
|
|
213
229
|
// it throws, the task stays active rather than disappearing entirely.
|
|
214
|
-
await this.persistTaskToDB(taskId, metrics);
|
|
215
|
-
this.activeTasks.delete(
|
|
230
|
+
await this.persistTaskToDB(taskId, agentId, channelId, metrics);
|
|
231
|
+
this.activeTasks.delete(taskKey);
|
|
216
232
|
// Emit completion event
|
|
217
|
-
EventBus.server.emit(Events.Analytics.TASK_COMPLETED, createBaseEventPayload(Events.Analytics.TASK_COMPLETED,
|
|
233
|
+
EventBus.server.emit(Events.Analytics.TASK_COMPLETED, createBaseEventPayload(Events.Analytics.TASK_COMPLETED, agentId, channelId, {
|
|
218
234
|
taskId,
|
|
235
|
+
agentId,
|
|
236
|
+
channelId,
|
|
219
237
|
metrics,
|
|
220
238
|
success,
|
|
221
239
|
timestamp: new Date()
|
|
@@ -230,11 +248,14 @@ export class TaskEffectivenessService {
|
|
|
230
248
|
*
|
|
231
249
|
* @returns null when the task or its definition is unknown
|
|
232
250
|
*/
|
|
233
|
-
async compareWithBaseline(taskId) {
|
|
234
|
-
|
|
235
|
-
|
|
251
|
+
async compareWithBaseline(taskId, agentId, channelId) {
|
|
252
|
+
this.requireTenantIdentity(agentId, channelId);
|
|
253
|
+
this.requireTaskIdentity(taskId);
|
|
254
|
+
const taskKey = this.getTaskKey(taskId, agentId, channelId);
|
|
255
|
+
let metrics = this.activeTasks.get(taskKey);
|
|
256
|
+
let definition = this.taskDefinitions.get(taskKey);
|
|
236
257
|
if (!metrics || !definition) {
|
|
237
|
-
const taskDoc = await TaskEffectivenessModel.findOne({ taskId }).exec();
|
|
258
|
+
const taskDoc = await TaskEffectivenessModel.findOne({ taskId, agentId, channelId }).exec();
|
|
238
259
|
if (taskDoc) {
|
|
239
260
|
metrics = metrics ?? taskDoc.metrics;
|
|
240
261
|
definition = definition ?? taskDoc.definition;
|
|
@@ -278,25 +299,28 @@ export class TaskEffectivenessService {
|
|
|
278
299
|
// Generate insights
|
|
279
300
|
comparison.summary.achievements = this.identifyAchievements(metrics, baseline);
|
|
280
301
|
comparison.summary.improvements = this.identifyImprovements(metrics);
|
|
281
|
-
comparison.summary.recommendations = this.generateRecommendations(metrics);
|
|
302
|
+
comparison.summary.recommendations = this.generateRecommendations(metrics, taskKey);
|
|
282
303
|
return comparison;
|
|
283
304
|
}
|
|
284
|
-
/**
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
async
|
|
305
|
+
/** Effectiveness analytics for one exact agent and channel. */
|
|
306
|
+
async getAnalytics(startTime, endTime, agentId, channelId, taskType) {
|
|
307
|
+
this.requireTenantIdentity(agentId, channelId);
|
|
308
|
+
const tasks = await this.findCompletedTasks({
|
|
309
|
+
startTime,
|
|
310
|
+
endTime,
|
|
311
|
+
agentId,
|
|
312
|
+
channelId,
|
|
313
|
+
taskType
|
|
314
|
+
});
|
|
315
|
+
return this.computeAnalyticsFromRecords(tasks, startTime, endTime);
|
|
316
|
+
}
|
|
317
|
+
/** Channel-wide analytics intended only for the admin-authenticated REST surface. */
|
|
318
|
+
async getAdministrativeChannelAnalytics(startTime, endTime, channelId, taskType) {
|
|
319
|
+
if (!channelId?.trim()) {
|
|
320
|
+
throw new Error('Channel ID is required');
|
|
321
|
+
}
|
|
298
322
|
const tasks = await this.findCompletedTasks({ startTime, endTime, channelId, taskType });
|
|
299
|
-
return this.
|
|
323
|
+
return this.computeAnalyticsFromRecords(tasks, startTime, endTime);
|
|
300
324
|
}
|
|
301
325
|
/**
|
|
302
326
|
* Query persisted task effectiveness records.
|
|
@@ -307,6 +331,9 @@ export class TaskEffectivenessService {
|
|
|
307
331
|
const query = {
|
|
308
332
|
'metrics.metadata.startTime': { $gte: filter.startTime, $lte: filter.endTime }
|
|
309
333
|
};
|
|
334
|
+
if (!Number.isFinite(filter.startTime) || !Number.isFinite(filter.endTime) || filter.startTime > filter.endTime) {
|
|
335
|
+
throw new Error('A valid effectiveness analytics time range is required');
|
|
336
|
+
}
|
|
310
337
|
if (filter.channelId) {
|
|
311
338
|
query.channelId = filter.channelId;
|
|
312
339
|
}
|
|
@@ -314,11 +341,20 @@ export class TaskEffectivenessService {
|
|
|
314
341
|
query['metrics.metadata.type'] = filter.taskType;
|
|
315
342
|
}
|
|
316
343
|
if (filter.agentId) {
|
|
317
|
-
query.
|
|
344
|
+
query.agentId = filter.agentId;
|
|
318
345
|
}
|
|
319
346
|
try {
|
|
320
347
|
const docs = await TaskEffectivenessModel.find(query).exec();
|
|
321
|
-
return docs.map(doc =>
|
|
348
|
+
return docs.map(doc => {
|
|
349
|
+
if (!doc.agentId || !doc.channelId) {
|
|
350
|
+
throw new Error(`Task effectiveness record ${doc.taskId} has no tenant identity`);
|
|
351
|
+
}
|
|
352
|
+
return {
|
|
353
|
+
agentId: doc.agentId,
|
|
354
|
+
channelId: doc.channelId,
|
|
355
|
+
metrics: doc.metrics
|
|
356
|
+
};
|
|
357
|
+
});
|
|
322
358
|
}
|
|
323
359
|
catch (error) {
|
|
324
360
|
const message = error instanceof Error ? error.message : String(error);
|
|
@@ -333,21 +369,24 @@ export class TaskEffectivenessService {
|
|
|
333
369
|
* that is not written down is history that is simply gone; the caller
|
|
334
370
|
* needs to know.
|
|
335
371
|
*/
|
|
336
|
-
async persistTaskToDB(taskId, metrics) {
|
|
337
|
-
const
|
|
372
|
+
async persistTaskToDB(taskId, agentId, channelId, metrics) {
|
|
373
|
+
const taskKey = this.getTaskKey(taskId, agentId, channelId);
|
|
374
|
+
const definition = this.taskDefinitions.get(taskKey);
|
|
338
375
|
if (!definition) {
|
|
339
376
|
throw new Error(`Cannot persist task ${taskId}: no task definition was registered for it`);
|
|
340
377
|
}
|
|
341
378
|
try {
|
|
342
|
-
await TaskEffectivenessModel.findOneAndUpdate({ taskId }, {
|
|
379
|
+
await TaskEffectivenessModel.findOneAndUpdate({ taskId, agentId, channelId }, {
|
|
343
380
|
$set: {
|
|
344
|
-
|
|
381
|
+
agentId,
|
|
382
|
+
channelId,
|
|
345
383
|
agentIds: metrics.collaboration.participatingAgents,
|
|
346
384
|
definition,
|
|
347
385
|
metrics,
|
|
386
|
+
completedAt: new Date(),
|
|
348
387
|
updatedAt: new Date()
|
|
349
388
|
}
|
|
350
|
-
}, { upsert: true, new: true }).exec();
|
|
389
|
+
}, { upsert: true, new: true, runValidators: true, setDefaultsOnInsert: true }).exec();
|
|
351
390
|
}
|
|
352
391
|
catch (error) {
|
|
353
392
|
const message = error instanceof Error ? error.message : String(error);
|
|
@@ -358,7 +397,7 @@ export class TaskEffectivenessService {
|
|
|
358
397
|
/**
|
|
359
398
|
* Compute analytics from metrics array
|
|
360
399
|
*/
|
|
361
|
-
|
|
400
|
+
computeAnalyticsFromRecords(records, startTime, endTime) {
|
|
362
401
|
// Initialize analytics (similar to existing getAnalytics method)
|
|
363
402
|
const analytics = {
|
|
364
403
|
period: { start: startTime, end: endTime },
|
|
@@ -375,8 +414,7 @@ export class TaskEffectivenessService {
|
|
|
375
414
|
effectiveTeams: []
|
|
376
415
|
}
|
|
377
416
|
};
|
|
378
|
-
|
|
379
|
-
for (const task of tasks) {
|
|
417
|
+
for (const { metrics: task } of records) {
|
|
380
418
|
const type = task.metadata.type;
|
|
381
419
|
if (!analytics.byTaskType[type]) {
|
|
382
420
|
analytics.byTaskType[type] = {
|
|
@@ -404,10 +442,53 @@ export class TaskEffectivenessService {
|
|
|
404
442
|
}
|
|
405
443
|
// Calculate success rates
|
|
406
444
|
for (const [type, stats] of Object.entries(analytics.byTaskType)) {
|
|
407
|
-
const typeTasks =
|
|
445
|
+
const typeTasks = records
|
|
446
|
+
.map(record => record.metrics)
|
|
447
|
+
.filter(task => task.metadata.type === type);
|
|
408
448
|
const successful = typeTasks.filter(t => t.quality.goalAchieved).length;
|
|
409
449
|
stats.successRate = typeTasks.length > 0 ? successful / typeTasks.length : 0;
|
|
410
450
|
}
|
|
451
|
+
const channelIds = Array.from(new Set(records.map(record => record.channelId)));
|
|
452
|
+
for (const channelId of channelIds) {
|
|
453
|
+
const channelRecords = records.filter(record => record.channelId === channelId);
|
|
454
|
+
const agentScores = new Map();
|
|
455
|
+
for (const record of channelRecords) {
|
|
456
|
+
const scores = agentScores.get(record.agentId) ?? [];
|
|
457
|
+
scores.push(this.calculateOverallScore(record.metrics));
|
|
458
|
+
agentScores.set(record.agentId, scores);
|
|
459
|
+
}
|
|
460
|
+
analytics.byChannel[channelId] = {
|
|
461
|
+
totalTasks: channelRecords.length,
|
|
462
|
+
completedTasks: channelRecords.filter(record => record.metrics.metadata.status === 'completed').length,
|
|
463
|
+
avgEffectivenessScore: channelRecords.length === 0
|
|
464
|
+
? 0
|
|
465
|
+
: channelRecords.reduce((sum, record) => sum + this.calculateOverallScore(record.metrics), 0) / channelRecords.length,
|
|
466
|
+
topPerformingAgents: Array.from(agentScores.entries())
|
|
467
|
+
.sort(([, left], [, right]) => {
|
|
468
|
+
const leftAverage = left.reduce((sum, score) => sum + score, 0) / left.length;
|
|
469
|
+
const rightAverage = right.reduce((sum, score) => sum + score, 0) / right.length;
|
|
470
|
+
return rightAverage - leftAverage;
|
|
471
|
+
})
|
|
472
|
+
.map(([agentId]) => agentId)
|
|
473
|
+
};
|
|
474
|
+
}
|
|
475
|
+
analytics.trends.effectivenessOverTime = records
|
|
476
|
+
.map(record => ({
|
|
477
|
+
timestamp: record.metrics.metadata.startTime,
|
|
478
|
+
avgScore: this.calculateOverallScore(record.metrics),
|
|
479
|
+
taskCount: 1
|
|
480
|
+
}))
|
|
481
|
+
.sort((left, right) => left.timestamp - right.timestamp);
|
|
482
|
+
if (analytics.trends.effectivenessOverTime.length > 1) {
|
|
483
|
+
const first = analytics.trends.effectivenessOverTime[0].avgScore;
|
|
484
|
+
const last = analytics.trends.effectivenessOverTime.at(-1).avgScore;
|
|
485
|
+
if (last > first) {
|
|
486
|
+
analytics.trends.improving.push('overall_effectiveness');
|
|
487
|
+
}
|
|
488
|
+
else if (last < first) {
|
|
489
|
+
analytics.trends.declining.push('overall_effectiveness');
|
|
490
|
+
}
|
|
491
|
+
}
|
|
411
492
|
// Identify patterns
|
|
412
493
|
analytics.patterns.highPerformanceTasks = Object.entries(analytics.byTaskType)
|
|
413
494
|
.filter(([_, stats]) => stats.successRate > 0.8 && stats.avgAutonomyScore > 0.7)
|
|
@@ -415,6 +496,12 @@ export class TaskEffectivenessService {
|
|
|
415
496
|
analytics.patterns.lowPerformanceTasks = Object.entries(analytics.byTaskType)
|
|
416
497
|
.filter(([_, stats]) => stats.successRate < 0.5 || stats.avgAutonomyScore < 0.3)
|
|
417
498
|
.map(([type]) => type);
|
|
499
|
+
const teamRecords = records.filter(record => record.metrics.collaboration.participatingAgents.length > 1);
|
|
500
|
+
analytics.patterns.effectiveTeams = teamRecords.map(record => ({
|
|
501
|
+
agents: [...record.metrics.collaboration.participatingAgents].sort(),
|
|
502
|
+
taskTypes: [record.metrics.metadata.type],
|
|
503
|
+
avgScore: this.calculateOverallScore(record.metrics)
|
|
504
|
+
}));
|
|
418
505
|
return analytics;
|
|
419
506
|
}
|
|
420
507
|
/**
|
|
@@ -425,13 +512,14 @@ export class TaskEffectivenessService {
|
|
|
425
512
|
case 'step':
|
|
426
513
|
metrics.performance.stepCount++;
|
|
427
514
|
break;
|
|
428
|
-
case 'tool_use':
|
|
515
|
+
case 'tool_use': {
|
|
429
516
|
metrics.performance.toolsUsed++;
|
|
430
517
|
const toolName = event.details.toolName;
|
|
431
518
|
if (toolName && !metrics.performance.uniqueTools.includes(toolName)) {
|
|
432
519
|
metrics.performance.uniqueTools.push(toolName);
|
|
433
520
|
}
|
|
434
521
|
break;
|
|
522
|
+
}
|
|
435
523
|
case 'agent_join':
|
|
436
524
|
if (event.agentId && !metrics.collaboration.participatingAgents.includes(event.agentId)) {
|
|
437
525
|
metrics.collaboration.participatingAgents.push(event.agentId);
|
|
@@ -533,7 +621,7 @@ export class TaskEffectivenessService {
|
|
|
533
621
|
/**
|
|
534
622
|
* Generate optimization recommendations
|
|
535
623
|
*/
|
|
536
|
-
generateRecommendations(metrics) {
|
|
624
|
+
generateRecommendations(metrics, taskKey) {
|
|
537
625
|
const recommendations = [];
|
|
538
626
|
if (metrics.performance.humanInterventions > 0) {
|
|
539
627
|
recommendations.push('Enhance agent training for similar tasks to reduce interventions');
|
|
@@ -542,7 +630,7 @@ export class TaskEffectivenessService {
|
|
|
542
630
|
recommendations.push('Consider tool consolidation for efficiency');
|
|
543
631
|
}
|
|
544
632
|
if (metrics.quality.errorCount > 0) {
|
|
545
|
-
const commonErrors = this.analyzeCommonErrors(
|
|
633
|
+
const commonErrors = this.analyzeCommonErrors(taskKey);
|
|
546
634
|
if (commonErrors.length > 0) {
|
|
547
635
|
recommendations.push(`Address common errors: ${commonErrors.join(', ')}`);
|
|
548
636
|
}
|
|
@@ -552,8 +640,8 @@ export class TaskEffectivenessService {
|
|
|
552
640
|
/**
|
|
553
641
|
* Analyze common errors for a task
|
|
554
642
|
*/
|
|
555
|
-
analyzeCommonErrors(
|
|
556
|
-
const events = this.taskEvents.get(
|
|
643
|
+
analyzeCommonErrors(taskKey) {
|
|
644
|
+
const events = this.taskEvents.get(taskKey) || [];
|
|
557
645
|
const errors = events.filter(e => e.type === 'error');
|
|
558
646
|
// Group by error type
|
|
559
647
|
const errorTypes = new Map();
|
|
@@ -571,57 +659,66 @@ export class TaskEffectivenessService {
|
|
|
571
659
|
* Setup event listeners
|
|
572
660
|
*/
|
|
573
661
|
setupEventListeners() {
|
|
574
|
-
// Track tool usage
|
|
575
662
|
EventBus.server.on(Events.Mcp.TOOL_CALL, (payload) => {
|
|
576
|
-
|
|
663
|
+
const taskId = payload.data?.taskId ?? payload.taskId;
|
|
664
|
+
if (taskId && payload.agentId && payload.channelId) {
|
|
665
|
+
const taskKey = this.getTaskKey(taskId, payload.agentId, payload.channelId);
|
|
666
|
+
if (!this.activeTasks.has(taskKey)) {
|
|
667
|
+
return;
|
|
668
|
+
}
|
|
577
669
|
this.recordEvent({
|
|
578
670
|
eventId: uuidv4(),
|
|
579
|
-
taskId
|
|
671
|
+
taskId,
|
|
580
672
|
timestamp: Date.now(),
|
|
581
673
|
type: 'tool_use',
|
|
582
674
|
agentId: payload.agentId,
|
|
583
|
-
|
|
675
|
+
channelId: payload.channelId,
|
|
676
|
+
details: { toolName: payload.data?.toolName ?? payload.toolName }
|
|
584
677
|
});
|
|
585
678
|
}
|
|
586
679
|
});
|
|
587
|
-
// Track errors
|
|
588
680
|
EventBus.server.on(Events.Mcp.TOOL_ERROR, (payload) => {
|
|
589
|
-
|
|
681
|
+
const taskId = payload.data?.taskId ?? payload.taskId;
|
|
682
|
+
if (taskId && payload.agentId && payload.channelId) {
|
|
683
|
+
const taskKey = this.getTaskKey(taskId, payload.agentId, payload.channelId);
|
|
684
|
+
if (!this.activeTasks.has(taskKey)) {
|
|
685
|
+
return;
|
|
686
|
+
}
|
|
590
687
|
this.recordEvent({
|
|
591
688
|
eventId: uuidv4(),
|
|
592
|
-
taskId
|
|
689
|
+
taskId,
|
|
593
690
|
timestamp: Date.now(),
|
|
594
691
|
type: 'error',
|
|
595
692
|
agentId: payload.agentId,
|
|
693
|
+
channelId: payload.channelId,
|
|
596
694
|
details: {
|
|
597
695
|
errorType: 'tool_error',
|
|
598
|
-
toolName: payload.toolName,
|
|
599
|
-
error: payload.error
|
|
696
|
+
toolName: payload.data?.toolName ?? payload.toolName,
|
|
697
|
+
error: payload.data?.error ?? payload.error
|
|
600
698
|
}
|
|
601
699
|
});
|
|
602
700
|
}
|
|
603
701
|
});
|
|
604
|
-
// Track agent collaboration
|
|
605
702
|
EventBus.server.on(Events.Message.CHANNEL_MESSAGE, (payload) => {
|
|
606
|
-
|
|
607
|
-
|
|
703
|
+
const taskId = payload.data?.taskId ?? payload.taskId;
|
|
704
|
+
if (taskId && payload.agentId && payload.channelId) {
|
|
705
|
+
const metrics = this.activeTasks.get(this.getTaskKey(taskId, payload.agentId, payload.channelId));
|
|
608
706
|
if (metrics) {
|
|
609
707
|
metrics.collaboration.messageCount++;
|
|
610
708
|
}
|
|
611
709
|
}
|
|
612
710
|
});
|
|
613
711
|
}
|
|
614
|
-
/**
|
|
615
|
-
|
|
616
|
-
|
|
617
|
-
|
|
618
|
-
|
|
619
|
-
const activeTask = this.activeTasks.get(taskId);
|
|
712
|
+
/** Get task metrics for one exact tenant task. */
|
|
713
|
+
async getTaskMetrics(taskId, agentId, channelId) {
|
|
714
|
+
this.requireTenantIdentity(agentId, channelId);
|
|
715
|
+
this.requireTaskIdentity(taskId);
|
|
716
|
+
const activeTask = this.activeTasks.get(this.getTaskKey(taskId, agentId, channelId));
|
|
620
717
|
if (activeTask) {
|
|
621
718
|
return activeTask;
|
|
622
719
|
}
|
|
623
720
|
try {
|
|
624
|
-
const taskDoc = await TaskEffectivenessModel.findOne({ taskId }).exec();
|
|
721
|
+
const taskDoc = await TaskEffectivenessModel.findOne({ taskId, agentId, channelId }).exec();
|
|
625
722
|
return taskDoc ? taskDoc.metrics : null;
|
|
626
723
|
}
|
|
627
724
|
catch (error) {
|
|
@@ -630,18 +727,29 @@ export class TaskEffectivenessService {
|
|
|
630
727
|
throw new Error(`Failed to load task ${taskId}: ${message}`);
|
|
631
728
|
}
|
|
632
729
|
}
|
|
633
|
-
/**
|
|
634
|
-
|
|
635
|
-
|
|
636
|
-
|
|
730
|
+
/** Get effectiveness trends for one exact agent and channel. */
|
|
731
|
+
async getEffectivenessTrends(startTime, endTime, intervalMs, agentId, channelId) {
|
|
732
|
+
this.requireTenantIdentity(agentId, channelId);
|
|
733
|
+
const records = await this.findCompletedTasks({ startTime, endTime, agentId, channelId });
|
|
734
|
+
return this.computeEffectivenessTrends(records, startTime, endTime, intervalMs);
|
|
735
|
+
}
|
|
736
|
+
/** Trend analytics intended only for the admin-authenticated REST surface. */
|
|
737
|
+
async getAdministrativeEffectivenessTrends(startTime, endTime, intervalMs, channelId) {
|
|
738
|
+
const records = await this.findCompletedTasks({ startTime, endTime, channelId });
|
|
739
|
+
return this.computeEffectivenessTrends(records, startTime, endTime, intervalMs);
|
|
740
|
+
}
|
|
741
|
+
computeEffectivenessTrends(records, startTime, endTime, intervalMs) {
|
|
742
|
+
if (!Number.isFinite(intervalMs) || intervalMs <= 0) {
|
|
743
|
+
throw new Error('A positive trend interval is required');
|
|
744
|
+
}
|
|
637
745
|
const dataPoints = [];
|
|
638
746
|
const intervals = Math.floor((endTime - startTime) / intervalMs);
|
|
639
|
-
// One query for the whole window, then bucket in memory.
|
|
640
|
-
const tasks = await this.findCompletedTasks({ startTime, endTime, channelId });
|
|
641
747
|
for (let i = 0; i < intervals; i++) {
|
|
642
748
|
const intervalStart = startTime + (i * intervalMs);
|
|
643
749
|
const intervalEnd = intervalStart + intervalMs;
|
|
644
|
-
const intervalTasks =
|
|
750
|
+
const intervalTasks = records
|
|
751
|
+
.map(record => record.metrics)
|
|
752
|
+
.filter(task => task.metadata.startTime >= intervalStart &&
|
|
645
753
|
task.metadata.startTime < intervalEnd);
|
|
646
754
|
if (intervalTasks.length > 0) {
|
|
647
755
|
const avgScore = intervalTasks.reduce((sum, task) => sum + this.calculateOverallScore(task), 0) / intervalTasks.length;
|
|
@@ -663,12 +771,22 @@ export class TaskEffectivenessService {
|
|
|
663
771
|
timeRange: { start: startTime, end: endTime }
|
|
664
772
|
};
|
|
665
773
|
}
|
|
666
|
-
/**
|
|
667
|
-
* Get agent-specific effectiveness
|
|
668
|
-
*/
|
|
774
|
+
/** Get agent-specific effectiveness in one exact channel. */
|
|
669
775
|
async getAgentEffectiveness(agentId, startTime, endTime, channelId) {
|
|
670
|
-
|
|
671
|
-
const
|
|
776
|
+
this.requireTenantIdentity(agentId, channelId);
|
|
777
|
+
const records = await this.findCompletedTasks({ startTime, endTime, channelId, agentId });
|
|
778
|
+
return this.computeAgentEffectiveness(agentId, records, startTime, endTime);
|
|
779
|
+
}
|
|
780
|
+
/** Agent analytics intended only for the admin-authenticated REST surface. */
|
|
781
|
+
async getAdministrativeAgentEffectiveness(agentId, startTime, endTime, channelId) {
|
|
782
|
+
if (!agentId?.trim()) {
|
|
783
|
+
throw new Error('Agent ID is required');
|
|
784
|
+
}
|
|
785
|
+
const records = await this.findCompletedTasks({ startTime, endTime, channelId, agentId });
|
|
786
|
+
return this.computeAgentEffectiveness(agentId, records, startTime, endTime);
|
|
787
|
+
}
|
|
788
|
+
computeAgentEffectiveness(agentId, records, startTime, endTime) {
|
|
789
|
+
const agentTasks = records.map(record => record.metrics);
|
|
672
790
|
const totalTasks = agentTasks.length;
|
|
673
791
|
const successfulTasks = agentTasks.filter(t => t.quality.goalAchieved).length;
|
|
674
792
|
const successRate = totalTasks > 0 ? successfulTasks / totalTasks : 0;
|