@mxf-dev/core 2.0.5 → 3.1.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/ConfigManager.d.ts +64 -0
- package/dist/config/ConfigManager.d.ts.map +1 -1
- package/dist/config/ConfigManager.js +68 -1
- package/dist/config/ConfigManager.js.map +1 -1
- 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/MongoChannelRepository.d.ts.map +1 -1
- package/dist/database/adapters/mongodb/MongoChannelRepository.js +2 -1
- package/dist/database/adapters/mongodb/MongoChannelRepository.js.map +1 -1
- 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 +50 -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/ConfigEvents.d.ts +6 -0
- package/dist/events/event-definitions/ConfigEvents.d.ts.map +1 -1
- package/dist/events/event-definitions/ConfigEvents.js +0 -5
- package/dist/events/event-definitions/ConfigEvents.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/SystemEvents.d.ts +16 -0
- package/dist/events/event-definitions/SystemEvents.d.ts.map +1 -1
- package/dist/events/event-definitions/SystemEvents.js +2 -0
- package/dist/events/event-definitions/SystemEvents.js.map +1 -1
- 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/Channel.d.ts +3 -0
- package/dist/interfaces/Channel.d.ts.map +1 -1
- package/dist/interfaces/ChannelConfig.d.ts +4 -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 +4 -0
- package/dist/models/channel.d.ts.map +1 -1
- package/dist/models/channel.js +8 -0
- 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/prompts/MxfAgentSystemPrompt.d.ts.map +1 -1
- package/dist/prompts/MxfAgentSystemPrompt.js +9 -1
- package/dist/prompts/MxfAgentSystemPrompt.js.map +1 -1
- package/dist/prompts/SystemLlmStanceGuidance.d.ts +37 -0
- package/dist/prompts/SystemLlmStanceGuidance.d.ts.map +1 -0
- package/dist/prompts/SystemLlmStanceGuidance.js +48 -0
- package/dist/prompts/SystemLlmStanceGuidance.js.map +1 -0
- 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/IChannelRepository.d.ts +2 -0
- package/dist/repositories/interfaces/IChannelRepository.d.ts.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 +41 -1
- package/dist/schemas/EventPayloadSchema.d.ts.map +1 -1
- package/dist/schemas/EventPayloadSchema.js +54 -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 +29 -7
- package/dist/services/BackgroundTaskManager.d.ts.map +1 -1
- package/dist/services/BackgroundTaskManager.js +171 -60
- 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/SystemLlmStanceTypes.d.ts +123 -0
- package/dist/types/SystemLlmStanceTypes.d.ts.map +1 -0
- package/dist/types/SystemLlmStanceTypes.js +101 -0
- package/dist/types/SystemLlmStanceTypes.js.map +1 -0
- 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/dist/utils/PromptTemplateReplacer.d.ts +5 -0
- package/dist/utils/PromptTemplateReplacer.d.ts.map +1 -1
- package/dist/utils/PromptTemplateReplacer.js +13 -0
- package/dist/utils/PromptTemplateReplacer.js.map +1 -1
- package/package.json +1 -1
- package/src/config/ConfigManager.ts +126 -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/MongoChannelRepository.ts +2 -1
- 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/ConfigEvents.ts +8 -0
- package/src/events/event-definitions/ControlLoopEvents.ts +12 -0
- package/src/events/event-definitions/SdkEvents.ts +58 -0
- package/src/events/event-definitions/SystemEvents.ts +24 -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/Channel.ts +4 -0
- package/src/interfaces/ChannelConfig.ts +8 -2
- package/src/interfaces/ConversationMessage.ts +6 -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 +12 -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/prompts/MxfAgentSystemPrompt.ts +9 -1
- package/src/prompts/SystemLlmStanceGuidance.ts +67 -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/IChannelRepository.ts +2 -0
- package/src/repositories/interfaces/IKnowledgeGraphRepository.ts +45 -27
- package/src/schemas/EventPayloadSchema.ts +85 -2
- package/src/services/AgentPerformanceService.ts +85 -36
- package/src/services/AutoCorrectionService.ts +25 -6
- package/src/services/BackgroundTaskManager.ts +217 -79
- 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/SystemLlmStanceTypes.ts +162 -0
- package/src/types/TaskCompletionTypes.ts +9 -9
- package/src/types/TaskTypes.ts +12 -1
- package/src/utils/GlobMatcher.ts +157 -0
- package/src/utils/PromptTemplateReplacer.ts +17 -0
|
@@ -39,7 +39,10 @@ import { AgentId, ChannelId } from '../types/ChannelContext.js';
|
|
|
39
39
|
import { Logger } from '../utils/Logger.js';
|
|
40
40
|
import { Events } from '../events/EventNames.js';
|
|
41
41
|
import { EventBus } from '../events/EventBus.js';
|
|
42
|
-
import {
|
|
42
|
+
import {
|
|
43
|
+
buildShellChildEnv,
|
|
44
|
+
resolveWorkspacePath
|
|
45
|
+
} from '../protocols/mcp/security/McpToolPolicy.js';
|
|
43
46
|
import {
|
|
44
47
|
createShellExecutionProgressPayload,
|
|
45
48
|
createShellBackgroundStartedPayload,
|
|
@@ -106,6 +109,12 @@ export interface BackgroundTaskInfo {
|
|
|
106
109
|
channelId: ChannelId;
|
|
107
110
|
}
|
|
108
111
|
|
|
112
|
+
/** Authenticated principal allowed to inspect or mutate a background task. */
|
|
113
|
+
export interface BackgroundTaskPrincipal {
|
|
114
|
+
agentId: AgentId;
|
|
115
|
+
channelId: ChannelId;
|
|
116
|
+
}
|
|
117
|
+
|
|
109
118
|
/** Internal task entry extending BackgroundTask with the child process handle and tracking metadata */
|
|
110
119
|
interface InternalTask extends BackgroundTask {
|
|
111
120
|
/** The spawned child process (cleared after exit) */
|
|
@@ -116,12 +125,19 @@ interface InternalTask extends BackgroundTask {
|
|
|
116
125
|
lastProgressEmit: number;
|
|
117
126
|
/** Timeout timer handle (if a timeout was specified) */
|
|
118
127
|
timeoutTimer?: ReturnType<typeof setTimeout>;
|
|
128
|
+
/** SIGTERM-to-SIGKILL escalation timer. */
|
|
129
|
+
forceKillTimer?: ReturnType<typeof setTimeout>;
|
|
130
|
+
/** Settles after terminal process callbacks and their final event emission complete. */
|
|
131
|
+
completion: Promise<void>;
|
|
132
|
+
resolveCompletion: () => void;
|
|
133
|
+
/** Guards Node's error-then-close sequence from reporting completion twice. */
|
|
134
|
+
terminalFinalized: boolean;
|
|
119
135
|
}
|
|
120
136
|
|
|
121
137
|
// ---- BackgroundTaskManager ----
|
|
122
138
|
|
|
123
139
|
export class BackgroundTaskManager {
|
|
124
|
-
private static instance: BackgroundTaskManager;
|
|
140
|
+
private static instance: BackgroundTaskManager | undefined;
|
|
125
141
|
|
|
126
142
|
/** Map of taskId -> internal task state */
|
|
127
143
|
private tasks: Map<string, InternalTask> = new Map();
|
|
@@ -139,6 +155,8 @@ export class BackgroundTaskManager {
|
|
|
139
155
|
|
|
140
156
|
/** Handle for the periodic cleanup timer */
|
|
141
157
|
private cleanupTimer?: ReturnType<typeof setInterval>;
|
|
158
|
+
private shutdownPromise: Promise<void> | undefined;
|
|
159
|
+
private isShuttingDown = false;
|
|
142
160
|
|
|
143
161
|
private constructor() {
|
|
144
162
|
// Start periodic cleanup of completed tasks older than cleanupIntervalMs
|
|
@@ -157,6 +175,16 @@ export class BackgroundTaskManager {
|
|
|
157
175
|
return BackgroundTaskManager.instance;
|
|
158
176
|
}
|
|
159
177
|
|
|
178
|
+
/** Stop the live singleton without constructing one solely for teardown. */
|
|
179
|
+
static async shutdownExisting(): Promise<boolean> {
|
|
180
|
+
const instance = BackgroundTaskManager.instance;
|
|
181
|
+
if (!instance) {
|
|
182
|
+
return false;
|
|
183
|
+
}
|
|
184
|
+
await instance.shutdown();
|
|
185
|
+
return true;
|
|
186
|
+
}
|
|
187
|
+
|
|
160
188
|
/**
|
|
161
189
|
* Start a command in the background. Returns immediately with a taskId that
|
|
162
190
|
* can be used to query status, retrieve output, or cancel the task.
|
|
@@ -177,6 +205,10 @@ export class BackgroundTaskManager {
|
|
|
177
205
|
},
|
|
178
206
|
context: { agentId: AgentId; channelId: ChannelId; requestId: string }
|
|
179
207
|
): Promise<{ taskId: string }> {
|
|
208
|
+
if (this.isShuttingDown) {
|
|
209
|
+
throw new Error('BackgroundTaskManager is shutting down');
|
|
210
|
+
}
|
|
211
|
+
|
|
180
212
|
// Validate concurrent task limit
|
|
181
213
|
const runningCount = this.getRunningTaskCount();
|
|
182
214
|
if (runningCount >= this.maxConcurrentTasks) {
|
|
@@ -196,13 +228,26 @@ export class BackgroundTaskManager {
|
|
|
196
228
|
// get the same stripped environment the guarded shell path builds.
|
|
197
229
|
const spawnOptions: SpawnOptions = {
|
|
198
230
|
shell: true,
|
|
199
|
-
|
|
231
|
+
// The command runs under `sh -c`. On Linux, dash forks the command
|
|
232
|
+
// rather than exec'ing it, so a signal to the shell's pid left the
|
|
233
|
+
// real work running and holding the stdio pipes — `close` never
|
|
234
|
+
// fired and shutdown() waited on it. Each task gets its own process
|
|
235
|
+
// group and is signalled as a group (see signalTask).
|
|
236
|
+
detached: process.platform !== 'win32',
|
|
237
|
+
cwd: resolveWorkspacePath(
|
|
238
|
+
options.workingDirectory,
|
|
239
|
+
'BackgroundTaskManager.startBackground'
|
|
240
|
+
),
|
|
200
241
|
env: buildShellChildEnv(options.environment),
|
|
201
242
|
};
|
|
202
243
|
|
|
203
244
|
const childProcess = spawn(command, [], spawnOptions);
|
|
204
245
|
|
|
205
246
|
// Create the internal task entry
|
|
247
|
+
let resolveCompletion!: () => void;
|
|
248
|
+
const completion = new Promise<void>(resolve => {
|
|
249
|
+
resolveCompletion = resolve;
|
|
250
|
+
});
|
|
206
251
|
const task: InternalTask = {
|
|
207
252
|
taskId,
|
|
208
253
|
command,
|
|
@@ -217,6 +262,9 @@ export class BackgroundTaskManager {
|
|
|
217
262
|
process: childProcess,
|
|
218
263
|
totalOutputBytes: 0,
|
|
219
264
|
lastProgressEmit: 0,
|
|
265
|
+
completion,
|
|
266
|
+
resolveCompletion,
|
|
267
|
+
terminalFinalized: false,
|
|
220
268
|
};
|
|
221
269
|
|
|
222
270
|
this.tasks.set(taskId, task);
|
|
@@ -257,6 +305,10 @@ export class BackgroundTaskManager {
|
|
|
257
305
|
|
|
258
306
|
// Handle process exit
|
|
259
307
|
childProcess.on('close', (code: number | null) => {
|
|
308
|
+
if (task.terminalFinalized) {
|
|
309
|
+
return;
|
|
310
|
+
}
|
|
311
|
+
task.terminalFinalized = true;
|
|
260
312
|
const exitCode = code ?? 1;
|
|
261
313
|
task.exitCode = exitCode;
|
|
262
314
|
task.endTime = Date.now();
|
|
@@ -271,6 +323,10 @@ export class BackgroundTaskManager {
|
|
|
271
323
|
clearTimeout(task.timeoutTimer);
|
|
272
324
|
task.timeoutTimer = undefined;
|
|
273
325
|
}
|
|
326
|
+
if (task.forceKillTimer) {
|
|
327
|
+
clearTimeout(task.forceKillTimer);
|
|
328
|
+
task.forceKillTimer = undefined;
|
|
329
|
+
}
|
|
274
330
|
|
|
275
331
|
const elapsedSeconds = (task.endTime - task.startTime) / 1000;
|
|
276
332
|
|
|
@@ -280,27 +336,36 @@ export class BackgroundTaskManager {
|
|
|
280
336
|
);
|
|
281
337
|
|
|
282
338
|
// Emit SHELL_BACKGROUND_COMPLETED event
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
339
|
+
try {
|
|
340
|
+
EventBus.server.emit(
|
|
341
|
+
Events.Shell.SHELL_BACKGROUND_COMPLETED,
|
|
342
|
+
createShellBackgroundCompletedPayload(
|
|
343
|
+
task.agentId,
|
|
344
|
+
task.channelId,
|
|
345
|
+
{
|
|
346
|
+
requestId: task.requestId,
|
|
347
|
+
taskId,
|
|
348
|
+
command: task.command,
|
|
349
|
+
exitCode,
|
|
350
|
+
isError: exitCode !== 0,
|
|
351
|
+
executionTime: (task.endTime! - task.startTime),
|
|
352
|
+
outputSize: task.totalOutputBytes
|
|
353
|
+
}
|
|
354
|
+
)
|
|
355
|
+
);
|
|
356
|
+
} finally {
|
|
357
|
+
task.resolveCompletion();
|
|
358
|
+
}
|
|
299
359
|
});
|
|
300
360
|
|
|
301
361
|
// Handle spawn errors (e.g., command not found)
|
|
302
362
|
childProcess.on('error', (error: Error) => {
|
|
363
|
+
if (task.terminalFinalized) {
|
|
364
|
+
return;
|
|
365
|
+
}
|
|
366
|
+
task.terminalFinalized = true;
|
|
303
367
|
task.status = 'failed';
|
|
368
|
+
task.exitCode = 1;
|
|
304
369
|
task.endTime = Date.now();
|
|
305
370
|
task.process = undefined;
|
|
306
371
|
|
|
@@ -309,28 +374,34 @@ export class BackgroundTaskManager {
|
|
|
309
374
|
clearTimeout(task.timeoutTimer);
|
|
310
375
|
task.timeoutTimer = undefined;
|
|
311
376
|
}
|
|
377
|
+
if (task.forceKillTimer) {
|
|
378
|
+
clearTimeout(task.forceKillTimer);
|
|
379
|
+
task.forceKillTimer = undefined;
|
|
380
|
+
}
|
|
312
381
|
|
|
313
382
|
this.logger.error(`Background task error: ${taskId} — ${error.message}`);
|
|
314
383
|
|
|
315
|
-
const elapsedSeconds = (task.endTime - task.startTime) / 1000;
|
|
316
|
-
|
|
317
384
|
// Emit SHELL_BACKGROUND_COMPLETED with failed status
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
|
|
326
|
-
|
|
327
|
-
|
|
328
|
-
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
|
|
332
|
-
|
|
333
|
-
|
|
385
|
+
try {
|
|
386
|
+
EventBus.server.emit(
|
|
387
|
+
Events.Shell.SHELL_BACKGROUND_COMPLETED,
|
|
388
|
+
createShellBackgroundCompletedPayload(
|
|
389
|
+
task.agentId,
|
|
390
|
+
task.channelId,
|
|
391
|
+
{
|
|
392
|
+
requestId: task.requestId,
|
|
393
|
+
taskId,
|
|
394
|
+
command: task.command,
|
|
395
|
+
exitCode: 1,
|
|
396
|
+
isError: true,
|
|
397
|
+
executionTime: (task.endTime! - task.startTime),
|
|
398
|
+
outputSize: task.totalOutputBytes
|
|
399
|
+
}
|
|
400
|
+
)
|
|
401
|
+
);
|
|
402
|
+
} finally {
|
|
403
|
+
task.resolveCompletion();
|
|
404
|
+
}
|
|
334
405
|
});
|
|
335
406
|
|
|
336
407
|
// Set up timeout if specified
|
|
@@ -340,15 +411,11 @@ export class BackgroundTaskManager {
|
|
|
340
411
|
this.logger.warn(
|
|
341
412
|
`Background task timed out after ${options.timeout}s: ${taskId}`
|
|
342
413
|
);
|
|
343
|
-
|
|
344
|
-
|
|
345
|
-
setTimeout(() => {
|
|
346
|
-
if (task.status === 'running' && task.process) {
|
|
347
|
-
task.process.kill('SIGKILL');
|
|
348
|
-
}
|
|
349
|
-
}, 5000);
|
|
414
|
+
this.signalTask(task, 'SIGTERM');
|
|
415
|
+
this.scheduleForceKill(task, taskId);
|
|
350
416
|
}
|
|
351
417
|
}, options.timeout * 1000);
|
|
418
|
+
task.timeoutTimer.unref?.();
|
|
352
419
|
}
|
|
353
420
|
|
|
354
421
|
return { taskId };
|
|
@@ -360,8 +427,8 @@ export class BackgroundTaskManager {
|
|
|
360
427
|
* @param taskId - The task identifier returned by startBackground()
|
|
361
428
|
* @returns BackgroundTaskInfo with current status and output preview, or null if not found
|
|
362
429
|
*/
|
|
363
|
-
getTaskStatus(taskId: string): BackgroundTaskInfo | null {
|
|
364
|
-
const task = this.
|
|
430
|
+
getTaskStatus(taskId: string, principal: BackgroundTaskPrincipal): BackgroundTaskInfo | null {
|
|
431
|
+
const task = this.getOwnedTask(taskId, principal);
|
|
365
432
|
if (!task) {
|
|
366
433
|
return null;
|
|
367
434
|
}
|
|
@@ -375,8 +442,8 @@ export class BackgroundTaskManager {
|
|
|
375
442
|
* @param taskId - The task identifier returned by startBackground()
|
|
376
443
|
* @returns The accumulated stdout output, or null if the task is not found
|
|
377
444
|
*/
|
|
378
|
-
getTaskOutput(taskId: string): string | null {
|
|
379
|
-
const task = this.
|
|
445
|
+
getTaskOutput(taskId: string, principal: BackgroundTaskPrincipal): string | null {
|
|
446
|
+
const task = this.getOwnedTask(taskId, principal);
|
|
380
447
|
if (!task) {
|
|
381
448
|
return null;
|
|
382
449
|
}
|
|
@@ -390,8 +457,8 @@ export class BackgroundTaskManager {
|
|
|
390
457
|
* @param taskId - The task identifier returned by startBackground()
|
|
391
458
|
* @returns true if the task was found and cancellation was initiated, false otherwise
|
|
392
459
|
*/
|
|
393
|
-
cancelTask(taskId: string): boolean {
|
|
394
|
-
const task = this.
|
|
460
|
+
cancelTask(taskId: string, principal: BackgroundTaskPrincipal): boolean {
|
|
461
|
+
const task = this.getOwnedTask(taskId, principal);
|
|
395
462
|
if (!task) {
|
|
396
463
|
this.logger.warn(`Cannot cancel task: ${taskId} — task not found`);
|
|
397
464
|
return false;
|
|
@@ -419,35 +486,24 @@ export class BackgroundTaskManager {
|
|
|
419
486
|
}
|
|
420
487
|
|
|
421
488
|
// Send SIGTERM for graceful shutdown
|
|
422
|
-
|
|
489
|
+
this.signalTask(task, 'SIGTERM');
|
|
423
490
|
|
|
424
491
|
// Escalate to SIGKILL after 5 seconds if still alive
|
|
425
|
-
|
|
426
|
-
if (task.process) {
|
|
427
|
-
this.logger.warn(`Force-killing background task: ${taskId} (SIGKILL)`);
|
|
428
|
-
task.process.kill('SIGKILL');
|
|
429
|
-
}
|
|
430
|
-
}, 5000);
|
|
431
|
-
|
|
432
|
-
// Clean up the kill timer when the process actually exits
|
|
433
|
-
const originalClose = task.process;
|
|
434
|
-
originalClose.on('close', () => {
|
|
435
|
-
clearTimeout(killTimer);
|
|
436
|
-
});
|
|
492
|
+
this.scheduleForceKill(task, taskId);
|
|
437
493
|
|
|
438
494
|
return true;
|
|
439
495
|
}
|
|
440
496
|
|
|
441
497
|
/**
|
|
442
|
-
* List
|
|
498
|
+
* List background tasks owned by the exact authenticated agent/channel pair.
|
|
443
499
|
*
|
|
444
|
-
* @param
|
|
500
|
+
* @param principal - Authenticated agent and channel identity
|
|
445
501
|
* @returns Array of BackgroundTaskInfo for matching tasks
|
|
446
502
|
*/
|
|
447
|
-
listTasks(
|
|
503
|
+
listTasks(principal: BackgroundTaskPrincipal): BackgroundTaskInfo[] {
|
|
448
504
|
const results: BackgroundTaskInfo[] = [];
|
|
449
505
|
for (const task of this.tasks.values()) {
|
|
450
|
-
if (agentId
|
|
506
|
+
if (task.agentId !== principal.agentId || task.channelId !== principal.channelId) {
|
|
451
507
|
continue;
|
|
452
508
|
}
|
|
453
509
|
results.push(this.toTaskInfo(task));
|
|
@@ -459,7 +515,19 @@ export class BackgroundTaskManager {
|
|
|
459
515
|
* Shutdown the manager: cancel all running tasks, clear timers, and release resources.
|
|
460
516
|
* Called during server shutdown to ensure clean process cleanup.
|
|
461
517
|
*/
|
|
462
|
-
shutdown(): void {
|
|
518
|
+
shutdown(): Promise<void> {
|
|
519
|
+
if (!this.shutdownPromise) {
|
|
520
|
+
this.isShuttingDown = true;
|
|
521
|
+
this.shutdownPromise = this.performShutdown().finally((): void => {
|
|
522
|
+
if (BackgroundTaskManager.instance === this) {
|
|
523
|
+
BackgroundTaskManager.instance = undefined;
|
|
524
|
+
}
|
|
525
|
+
});
|
|
526
|
+
}
|
|
527
|
+
return this.shutdownPromise;
|
|
528
|
+
}
|
|
529
|
+
|
|
530
|
+
private async performShutdown(): Promise<void> {
|
|
463
531
|
this.logger.info('Shutting down BackgroundTaskManager...');
|
|
464
532
|
|
|
465
533
|
// Clear the periodic cleanup timer
|
|
@@ -468,27 +536,97 @@ export class BackgroundTaskManager {
|
|
|
468
536
|
this.cleanupTimer = undefined;
|
|
469
537
|
}
|
|
470
538
|
|
|
471
|
-
|
|
539
|
+
const completions: Promise<void>[] = [];
|
|
540
|
+
|
|
541
|
+
// Terminate every live child and retain ownership until its terminal
|
|
542
|
+
// callback has emitted the final lifecycle event. A task can already be
|
|
543
|
+
// marked cancelled while its process is still exiting, so process
|
|
544
|
+
// ownership — not status — defines what shutdown must drain.
|
|
472
545
|
for (const task of this.tasks.values()) {
|
|
473
|
-
if (task.
|
|
474
|
-
|
|
475
|
-
|
|
476
|
-
|
|
477
|
-
|
|
478
|
-
|
|
546
|
+
if (task.timeoutTimer) {
|
|
547
|
+
clearTimeout(task.timeoutTimer);
|
|
548
|
+
task.timeoutTimer = undefined;
|
|
549
|
+
}
|
|
550
|
+
if (task.forceKillTimer) {
|
|
551
|
+
clearTimeout(task.forceKillTimer);
|
|
552
|
+
task.forceKillTimer = undefined;
|
|
553
|
+
}
|
|
479
554
|
|
|
480
|
-
|
|
481
|
-
task.
|
|
482
|
-
|
|
483
|
-
|
|
555
|
+
if (!task.terminalFinalized && task.process) {
|
|
556
|
+
if (task.status === 'running') {
|
|
557
|
+
task.status = 'cancelled';
|
|
558
|
+
}
|
|
559
|
+
task.endTime ??= Date.now();
|
|
560
|
+
completions.push(task.completion);
|
|
561
|
+
this.signalTask(task, 'SIGKILL');
|
|
484
562
|
}
|
|
485
563
|
}
|
|
486
564
|
|
|
565
|
+
await Promise.all(completions);
|
|
566
|
+
|
|
487
567
|
this.logger.info('BackgroundTaskManager shut down successfully');
|
|
488
568
|
}
|
|
489
569
|
|
|
570
|
+
private scheduleForceKill(task: InternalTask, taskId: string): void {
|
|
571
|
+
if (task.forceKillTimer) {
|
|
572
|
+
clearTimeout(task.forceKillTimer);
|
|
573
|
+
}
|
|
574
|
+
task.forceKillTimer = setTimeout(() => {
|
|
575
|
+
task.forceKillTimer = undefined;
|
|
576
|
+
if (task.process) {
|
|
577
|
+
this.logger.warn(`Force-killing background task: ${taskId} (SIGKILL)`);
|
|
578
|
+
this.signalTask(task, 'SIGKILL');
|
|
579
|
+
}
|
|
580
|
+
}, 5000);
|
|
581
|
+
task.forceKillTimer.unref?.();
|
|
582
|
+
}
|
|
583
|
+
|
|
584
|
+
/**
|
|
585
|
+
* Deliver a signal to a task's whole process group — the shell and every
|
|
586
|
+
* process it started — so the work actually stops and its stdio pipes
|
|
587
|
+
* close. A group that has already exited (ESRCH) is not an error.
|
|
588
|
+
*/
|
|
589
|
+
private signalTask(task: InternalTask, signal: NodeJS.Signals): void {
|
|
590
|
+
const child = task.process;
|
|
591
|
+
if (!child) {
|
|
592
|
+
return;
|
|
593
|
+
}
|
|
594
|
+
// No pid means the process never started, so there is no group to
|
|
595
|
+
// signal; Windows has no process groups to signal either.
|
|
596
|
+
if (child.pid === undefined || process.platform === 'win32') {
|
|
597
|
+
child.kill(signal);
|
|
598
|
+
return;
|
|
599
|
+
}
|
|
600
|
+
try {
|
|
601
|
+
process.kill(-child.pid, signal);
|
|
602
|
+
} catch (error) {
|
|
603
|
+
if ((error as NodeJS.ErrnoException).code !== 'ESRCH') {
|
|
604
|
+
throw error;
|
|
605
|
+
}
|
|
606
|
+
}
|
|
607
|
+
}
|
|
608
|
+
|
|
490
609
|
// ---- Private helpers ----
|
|
491
610
|
|
|
611
|
+
/**
|
|
612
|
+
* Resolve a task only when it belongs to the authenticated principal. Returning
|
|
613
|
+
* null for both missing and foreign task IDs avoids leaking task existence.
|
|
614
|
+
*/
|
|
615
|
+
private getOwnedTask(
|
|
616
|
+
taskId: string,
|
|
617
|
+
principal: BackgroundTaskPrincipal
|
|
618
|
+
): InternalTask | null {
|
|
619
|
+
const task = this.tasks.get(taskId);
|
|
620
|
+
if (
|
|
621
|
+
!task ||
|
|
622
|
+
task.agentId !== principal.agentId ||
|
|
623
|
+
task.channelId !== principal.channelId
|
|
624
|
+
) {
|
|
625
|
+
return null;
|
|
626
|
+
}
|
|
627
|
+
return task;
|
|
628
|
+
}
|
|
629
|
+
|
|
492
630
|
/**
|
|
493
631
|
* Append output to a task's buffer with ring-buffer semantics.
|
|
494
632
|
* When the buffer exceeds maxOutputBufferSize, the front is trimmed.
|
|
@@ -74,6 +74,21 @@ export interface BrowserConfig {
|
|
|
74
74
|
userAgent?: string;
|
|
75
75
|
}
|
|
76
76
|
|
|
77
|
+
/** Chromium launch flags that preserve its OS sandbox boundary. */
|
|
78
|
+
export const getSecureBrowserLaunchArgs = (): string[] => [
|
|
79
|
+
'--disable-dev-shm-usage',
|
|
80
|
+
'--disable-gpu',
|
|
81
|
+
'--disable-background-timer-throttling',
|
|
82
|
+
'--disable-backgrounding-occluded-windows',
|
|
83
|
+
'--disable-renderer-backgrounding',
|
|
84
|
+
'--disable-features=TranslateUI',
|
|
85
|
+
'--disable-ipc-flooding-protection',
|
|
86
|
+
'--no-first-run',
|
|
87
|
+
'--no-default-browser-check',
|
|
88
|
+
'--disable-default-apps',
|
|
89
|
+
'--disable-extensions'
|
|
90
|
+
];
|
|
91
|
+
|
|
77
92
|
export class BrowserManager {
|
|
78
93
|
private pools: Map<string, BrowserInstance[]> = new Map();
|
|
79
94
|
private maxPoolSize: number;
|
|
@@ -176,21 +191,10 @@ export class BrowserManager {
|
|
|
176
191
|
const puppeteer = await loadPuppeteer();
|
|
177
192
|
const browser = await puppeteer.launch({
|
|
178
193
|
headless: this.config.headless ?? true,
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
'--disable-gpu',
|
|
184
|
-
'--disable-background-timer-throttling',
|
|
185
|
-
'--disable-backgrounding-occluded-windows',
|
|
186
|
-
'--disable-renderer-backgrounding',
|
|
187
|
-
'--disable-features=TranslateUI',
|
|
188
|
-
'--disable-ipc-flooding-protection',
|
|
189
|
-
'--no-first-run',
|
|
190
|
-
'--no-default-browser-check',
|
|
191
|
-
'--disable-default-apps',
|
|
192
|
-
'--disable-extensions'
|
|
193
|
-
]
|
|
194
|
+
// Never pass --no-sandbox or --disable-setuid-sandbox. A deployment
|
|
195
|
+
// that cannot start Chromium with its OS sandbox intact must fail
|
|
196
|
+
// instead of silently executing hostile pages without isolation.
|
|
197
|
+
args: getSecureBrowserLaunchArgs()
|
|
194
198
|
});
|
|
195
199
|
|
|
196
200
|
const instance: BrowserInstance = {
|
|
@@ -287,4 +291,4 @@ export class BrowserManager {
|
|
|
287
291
|
await Promise.all(closePromises);
|
|
288
292
|
this.logger?.info('Browser cleanup completed');
|
|
289
293
|
}
|
|
290
|
-
}
|
|
294
|
+
}
|