@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
|
@@ -545,6 +545,8 @@ export class GeminiMcpClient extends BaseMcpClient {
|
|
|
545
545
|
context: AgentContext,
|
|
546
546
|
options?: Record<string, any>
|
|
547
547
|
): Promise<McpApiResponse> {
|
|
548
|
+
this.assertExternalLlmCallAllowed();
|
|
549
|
+
|
|
548
550
|
if (!this.genAiClient) {
|
|
549
551
|
throw new Error('Google Gen AI client not initialized');
|
|
550
552
|
}
|
|
@@ -113,6 +113,8 @@ const logger = new Logger('debug', 'OllamaMcpClient', 'server');
|
|
|
113
113
|
* Ollama MCP Client implementation
|
|
114
114
|
*/
|
|
115
115
|
export class OllamaMcpClient extends BaseMcpClient {
|
|
116
|
+
protected isExternalLlmProvider = false;
|
|
117
|
+
|
|
116
118
|
private baseUrl: string;
|
|
117
119
|
private timeout: number;
|
|
118
120
|
|
|
@@ -561,4 +563,4 @@ export class OllamaMcpClient extends BaseMcpClient {
|
|
|
561
563
|
|
|
562
564
|
return ollamaMsg;
|
|
563
565
|
}
|
|
564
|
-
}
|
|
566
|
+
}
|
|
@@ -601,6 +601,8 @@ export class OpenAiMcpClient extends BaseMcpClient {
|
|
|
601
601
|
context: AgentContext,
|
|
602
602
|
options?: Record<string, any>
|
|
603
603
|
): Promise<McpApiResponse> {
|
|
604
|
+
this.assertExternalLlmCallAllowed();
|
|
605
|
+
|
|
604
606
|
// Structure messages for OpenAI based on context
|
|
605
607
|
const openAiMessages = this.structureMessagesFromContext(context);
|
|
606
608
|
|
|
@@ -664,6 +664,7 @@ export class OpenRouterMcpClient extends BaseMcpClient {
|
|
|
664
664
|
context: AgentContext,
|
|
665
665
|
options?: Record<string, any>
|
|
666
666
|
): Promise<McpApiResponse> {
|
|
667
|
+
this.assertExternalLlmCallAllowed();
|
|
667
668
|
|
|
668
669
|
// Structure messages for OpenRouter based on context (returns OpenRouter format)
|
|
669
670
|
const openRouterMessages = this.structureMessagesFromContext(context);
|
|
@@ -729,6 +730,8 @@ export class OpenRouterMcpClient extends BaseMcpClient {
|
|
|
729
730
|
options: Record<string, any>,
|
|
730
731
|
onChunk: (chunk: McpStreamChunk) => void
|
|
731
732
|
): Promise<McpApiResponse> {
|
|
733
|
+
this.assertExternalLlmCallAllowed();
|
|
734
|
+
|
|
732
735
|
// Structure and transform messages same as non-streaming path
|
|
733
736
|
const openRouterMessages = this.structureMessagesFromContext(context);
|
|
734
737
|
const converter = getMessageConverter('client');
|
|
@@ -426,6 +426,8 @@ export class XaiMcpClient extends BaseMcpClient {
|
|
|
426
426
|
context: AgentContext,
|
|
427
427
|
options?: Record<string, any>
|
|
428
428
|
): Promise<McpApiResponse> {
|
|
429
|
+
this.assertExternalLlmCallAllowed();
|
|
430
|
+
|
|
429
431
|
// Structure messages for X.ai based on context
|
|
430
432
|
const xaiMessages = this.structureMessagesFromContext(context);
|
|
431
433
|
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Fail-closed network policy for Puppeteer pages used by MXF web tools.
|
|
3
|
+
*
|
|
4
|
+
* Checking only the top-level URL is insufficient: redirects, scripts, images,
|
|
5
|
+
* frames, and fetch/XHR requests can each target a different host. Every browser
|
|
6
|
+
* request is therefore checked immediately before Puppeteer continues it.
|
|
7
|
+
*/
|
|
8
|
+
|
|
9
|
+
import type { HTTPRequest, Page } from 'puppeteer';
|
|
10
|
+
|
|
11
|
+
import { checkHttpTarget } from './HttpTargetGuard.js';
|
|
12
|
+
|
|
13
|
+
const BROWSER_LOCAL_PROTOCOLS = new Set(['about:', 'blob:', 'data:']);
|
|
14
|
+
|
|
15
|
+
const isBrowserLocalUrl = (rawUrl: string): boolean => {
|
|
16
|
+
try {
|
|
17
|
+
return BROWSER_LOCAL_PROTOCOLS.has(new URL(rawUrl).protocol);
|
|
18
|
+
} catch {
|
|
19
|
+
return rawUrl === 'about:blank';
|
|
20
|
+
}
|
|
21
|
+
};
|
|
22
|
+
|
|
23
|
+
/** Reject a top-level browser target before allocating a browser or page. */
|
|
24
|
+
export const requireAllowedBrowserTarget = async (rawUrl: string): Promise<void> => {
|
|
25
|
+
const decision = await checkHttpTarget(rawUrl);
|
|
26
|
+
if (!decision.allowed) {
|
|
27
|
+
throw new Error(decision.reason ?? `Browser target '${rawUrl}' is not allowed`);
|
|
28
|
+
}
|
|
29
|
+
};
|
|
30
|
+
|
|
31
|
+
export const guardBrowserRequest = async (request: HTTPRequest): Promise<void> => {
|
|
32
|
+
if (request.isInterceptResolutionHandled()) {
|
|
33
|
+
return;
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
const rawUrl = request.url();
|
|
37
|
+
if (isBrowserLocalUrl(rawUrl)) {
|
|
38
|
+
await request.continue();
|
|
39
|
+
return;
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
const decision = await checkHttpTarget(rawUrl);
|
|
43
|
+
if (request.isInterceptResolutionHandled()) {
|
|
44
|
+
return;
|
|
45
|
+
}
|
|
46
|
+
if (!decision.allowed) {
|
|
47
|
+
await request.abort('blockedbyclient');
|
|
48
|
+
return;
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
await request.continue();
|
|
52
|
+
};
|
|
53
|
+
|
|
54
|
+
/** Install the target policy before the first navigation on a Puppeteer page. */
|
|
55
|
+
export const installBrowserTargetGuard = async (page: Page): Promise<void> => {
|
|
56
|
+
await page.setRequestInterception(true);
|
|
57
|
+
page.on('request', (request: HTTPRequest) => {
|
|
58
|
+
void guardBrowserRequest(request).catch(async () => {
|
|
59
|
+
if (!request.isInterceptResolutionHandled()) {
|
|
60
|
+
await request.abort('blockedbyclient');
|
|
61
|
+
}
|
|
62
|
+
}).catch(() => undefined);
|
|
63
|
+
});
|
|
64
|
+
};
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Policy for caller-supplied stdio MCP server registrations.
|
|
3
|
+
*
|
|
4
|
+
* A stdio registration is equivalent to asking the host to execute a command.
|
|
5
|
+
* It is therefore off by default and may only be exposed by a server entry
|
|
6
|
+
* point after that entry point has independently established an administrator
|
|
7
|
+
* principal. Built-in, server-owned configurations do not pass through this
|
|
8
|
+
* policy because their commands come from source-controlled configuration.
|
|
9
|
+
*/
|
|
10
|
+
|
|
11
|
+
export const UNSAFE_STDIO_MCP_ENV = 'MXF_UNSAFE_STDIO_MCP_ENABLED';
|
|
12
|
+
|
|
13
|
+
/**
|
|
14
|
+
* True only for the exact, explicit opt-in value.
|
|
15
|
+
*/
|
|
16
|
+
export const isUnsafeStdioMcpEnabled = (): boolean => {
|
|
17
|
+
return process.env[UNSAFE_STDIO_MCP_ENV] === 'true';
|
|
18
|
+
};
|
|
19
|
+
|
|
20
|
+
/**
|
|
21
|
+
* External server payloads historically omitted transport and were treated as
|
|
22
|
+
* stdio, so an absent transport must remain on the dangerous side of the gate.
|
|
23
|
+
*/
|
|
24
|
+
export const isStdioMcpTransport = (transport: unknown): boolean => {
|
|
25
|
+
return transport === undefined || transport === null || transport === '' || transport === 'stdio';
|
|
26
|
+
};
|
|
27
|
+
|
|
28
|
+
/**
|
|
29
|
+
* Fail closed when a caller-controlled registration would execute a process.
|
|
30
|
+
*/
|
|
31
|
+
export const assertUnsafeStdioMcpEnabled = (transport: unknown): void => {
|
|
32
|
+
if (isStdioMcpTransport(transport) && !isUnsafeStdioMcpEnabled()) {
|
|
33
|
+
throw new Error(
|
|
34
|
+
`Caller-supplied stdio MCP registration is disabled. ` +
|
|
35
|
+
`An administrator must explicitly set ${UNSAFE_STDIO_MCP_ENV}=true to expose this unsafe capability.`
|
|
36
|
+
);
|
|
37
|
+
}
|
|
38
|
+
};
|
|
@@ -117,6 +117,75 @@ function ipv4InCidr(address: string, cidr: string): boolean {
|
|
|
117
117
|
return (addressInt & mask) === (networkInt & mask);
|
|
118
118
|
}
|
|
119
119
|
|
|
120
|
+
/**
|
|
121
|
+
* Decode an IPv6 literal into its eight 16-bit words.
|
|
122
|
+
*
|
|
123
|
+
* Node's `isIP()` tells us that a value is IPv6, but it does not expose the
|
|
124
|
+
* embedded IPv4 address from mapped forms. Browsers and operating systems
|
|
125
|
+
* accept both dotted (`::ffff:127.0.0.1`) and hexadecimal
|
|
126
|
+
* (`::ffff:7f00:1`) spellings, so matching only the dotted text leaves a
|
|
127
|
+
* loopback/metadata bypass.
|
|
128
|
+
*/
|
|
129
|
+
function parseIpv6Words(address: string): number[] | null {
|
|
130
|
+
let normalized = address.toLowerCase();
|
|
131
|
+
const embeddedIpv4 = normalized.match(/^(.*:)(\d{1,3}(?:\.\d{1,3}){3})$/);
|
|
132
|
+
if (embeddedIpv4) {
|
|
133
|
+
const ipv4 = ipv4ToInt(embeddedIpv4[2]);
|
|
134
|
+
if (ipv4 === null) {
|
|
135
|
+
return null;
|
|
136
|
+
}
|
|
137
|
+
normalized = `${embeddedIpv4[1]}${(ipv4 >>> 16).toString(16)}:${(ipv4 & 0xffff).toString(16)}`;
|
|
138
|
+
}
|
|
139
|
+
|
|
140
|
+
const compressedParts = normalized.split('::');
|
|
141
|
+
if (compressedParts.length > 2) {
|
|
142
|
+
return null;
|
|
143
|
+
}
|
|
144
|
+
|
|
145
|
+
const parseSide = (side: string): number[] | null => {
|
|
146
|
+
if (side.length === 0) {
|
|
147
|
+
return [];
|
|
148
|
+
}
|
|
149
|
+
const words = side.split(':');
|
|
150
|
+
if (words.some(word => !/^[0-9a-f]{1,4}$/.test(word))) {
|
|
151
|
+
return null;
|
|
152
|
+
}
|
|
153
|
+
return words.map(word => Number.parseInt(word, 16));
|
|
154
|
+
};
|
|
155
|
+
|
|
156
|
+
const left = parseSide(compressedParts[0]);
|
|
157
|
+
const right = parseSide(compressedParts[1] ?? '');
|
|
158
|
+
if (!left || !right) {
|
|
159
|
+
return null;
|
|
160
|
+
}
|
|
161
|
+
|
|
162
|
+
if (compressedParts.length === 1) {
|
|
163
|
+
return left.length === 8 ? left : null;
|
|
164
|
+
}
|
|
165
|
+
|
|
166
|
+
const omittedWordCount = 8 - left.length - right.length;
|
|
167
|
+
if (omittedWordCount < 1) {
|
|
168
|
+
return null;
|
|
169
|
+
}
|
|
170
|
+
return [...left, ...Array<number>(omittedWordCount).fill(0), ...right];
|
|
171
|
+
}
|
|
172
|
+
|
|
173
|
+
/** Return the dotted IPv4 address carried by an IPv4-mapped IPv6 literal. */
|
|
174
|
+
function mappedIpv4Address(address: string): string | null {
|
|
175
|
+
const words = parseIpv6Words(address);
|
|
176
|
+
if (!words || words.length !== 8 ||
|
|
177
|
+
words.slice(0, 5).some(word => word !== 0) || words[5] !== 0xffff) {
|
|
178
|
+
return null;
|
|
179
|
+
}
|
|
180
|
+
|
|
181
|
+
return [
|
|
182
|
+
words[6] >>> 8,
|
|
183
|
+
words[6] & 0xff,
|
|
184
|
+
words[7] >>> 8,
|
|
185
|
+
words[7] & 0xff
|
|
186
|
+
].join('.');
|
|
187
|
+
}
|
|
188
|
+
|
|
120
189
|
/**
|
|
121
190
|
* Is this address one the server must not be steered into?
|
|
122
191
|
*
|
|
@@ -137,6 +206,14 @@ function matchBlockedRange(address: string): string | null {
|
|
|
137
206
|
if (version === 6) {
|
|
138
207
|
const normalized = address.toLowerCase();
|
|
139
208
|
|
|
209
|
+
// IPv4-mapped addresses have multiple equivalent textual forms. Decode
|
|
210
|
+
// the address instead of applying a dotted-quad-only regex, then run the
|
|
211
|
+
// embedded address through the complete IPv4 policy.
|
|
212
|
+
const mappedIpv4 = mappedIpv4Address(normalized);
|
|
213
|
+
if (mappedIpv4) {
|
|
214
|
+
return matchBlockedRange(mappedIpv4);
|
|
215
|
+
}
|
|
216
|
+
|
|
140
217
|
// IPv6 loopback
|
|
141
218
|
if (normalized === '::1' || normalized === '0:0:0:0:0:0:0:1') {
|
|
142
219
|
return 'IPv6 loopback';
|
|
@@ -153,12 +230,6 @@ function matchBlockedRange(address: string): string | null {
|
|
|
153
230
|
if (/^fe[89ab][0-9a-f]:/.test(normalized)) {
|
|
154
231
|
return 'IPv6 link-local address';
|
|
155
232
|
}
|
|
156
|
-
// IPv4-mapped (::ffff:127.0.0.1) — re-check the embedded IPv4 address,
|
|
157
|
-
// otherwise ::ffff:169.254.169.254 would walk straight past this guard.
|
|
158
|
-
const mapped = normalized.match(/^::ffff:(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})$/);
|
|
159
|
-
if (mapped) {
|
|
160
|
-
return matchBlockedRange(mapped[1]);
|
|
161
|
-
}
|
|
162
233
|
return null;
|
|
163
234
|
}
|
|
164
235
|
|
|
@@ -235,17 +235,19 @@ export class McpSecurityGuard {
|
|
|
235
235
|
const parsed = parseCommand(command);
|
|
236
236
|
const effectiveCommands = extractEffectiveCommands(command);
|
|
237
237
|
|
|
238
|
-
// Subshell constructs ($() or backticks)
|
|
239
|
-
//
|
|
240
|
-
//
|
|
238
|
+
// Subshell constructs ($() or backticks) are run by the shell but never
|
|
239
|
+
// reach this parser, so the commands inside them are checked against
|
|
240
|
+
// neither the block rules nor the configured allowlist. `git status
|
|
241
|
+
// $(bash -c ...)` would pass on the strength of `git`. They are denied
|
|
242
|
+
// outright; an agent that needs a value from one command can run it as
|
|
243
|
+
// its own command first.
|
|
241
244
|
if (parsed.hasSubshells) {
|
|
242
245
|
const destructiveWarnings = getDestructiveWarnings(command);
|
|
243
246
|
const warningMessages = destructiveWarnings.length > 0
|
|
244
247
|
? destructiveWarnings.map(w => w.warning)
|
|
245
248
|
: undefined;
|
|
246
249
|
return {
|
|
247
|
-
allowed:
|
|
248
|
-
requiresConfirmation: true,
|
|
250
|
+
allowed: false,
|
|
249
251
|
reason: 'Command contains subshell constructs ($() or backticks) that cannot be statically validated',
|
|
250
252
|
riskLevel: 'high',
|
|
251
253
|
warnings: warningMessages
|
|
@@ -47,6 +47,8 @@
|
|
|
47
47
|
*/
|
|
48
48
|
|
|
49
49
|
import * as path from 'path';
|
|
50
|
+
import { extractEffectiveCommands } from '../tools/shell/ShellCommandParser.js';
|
|
51
|
+
import * as fs from 'fs';
|
|
50
52
|
|
|
51
53
|
/**
|
|
52
54
|
* Environment variables always forwarded to a shell child.
|
|
@@ -110,6 +112,33 @@ export function getShellAllowedCommands(): string[] {
|
|
|
110
112
|
return parseList(process.env.MXF_SHELL_ALLOWED_COMMANDS);
|
|
111
113
|
}
|
|
112
114
|
|
|
115
|
+
/**
|
|
116
|
+
* Enforce MXF_SHELL_ALLOWED_COMMANDS against a full command line.
|
|
117
|
+
*
|
|
118
|
+
* Applies to every agent-driven command, whether it arrives through
|
|
119
|
+
* shell_execute or through a host tool that calls executeShellCommand.
|
|
120
|
+
* Wrappers and env prefixes (`sudo cmd`, `FOO=bar cmd`, `timeout 5 cmd`) are
|
|
121
|
+
* resolved to the command they run, and compound lines (`a && b`) are checked
|
|
122
|
+
* command by command, so an allowlisted wrapper cannot smuggle another binary.
|
|
123
|
+
*
|
|
124
|
+
* @throws Error when an allowlist is configured and any effective command is not on it
|
|
125
|
+
*/
|
|
126
|
+
export function assertCommandAllowlisted(commandLine: string): void {
|
|
127
|
+
if (!hasShellAllowlist()) {
|
|
128
|
+
return;
|
|
129
|
+
}
|
|
130
|
+
const allowedCommands = getShellAllowedCommands();
|
|
131
|
+
for (const effectiveCommand of extractEffectiveCommands(commandLine)) {
|
|
132
|
+
const baseCommand = effectiveCommand.trim().split(/\s+/)[0];
|
|
133
|
+
if (!allowedCommands.includes(baseCommand)) {
|
|
134
|
+
throw new Error(
|
|
135
|
+
`Command '${baseCommand}' is not in the configured allowlist ` +
|
|
136
|
+
`(MXF_SHELL_ALLOWED_COMMANDS). Allowed: ${allowedCommands.join(', ')}`
|
|
137
|
+
);
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
|
|
113
142
|
/**
|
|
114
143
|
* Is a command allowlist configured at all?
|
|
115
144
|
*/
|
|
@@ -207,6 +236,51 @@ export function requireWorkspaceRoot(consumer: string): string {
|
|
|
207
236
|
return root;
|
|
208
237
|
}
|
|
209
238
|
|
|
239
|
+
const isWithinPath = (root: string, candidate: string): boolean => (
|
|
240
|
+
candidate === root || candidate.startsWith(`${root}${path.sep}`)
|
|
241
|
+
);
|
|
242
|
+
|
|
243
|
+
/**
|
|
244
|
+
* Resolve a caller path under MXF_WORKSPACE_ROOT and reject lexical and symlink
|
|
245
|
+
* escapes. Non-existent leaf paths are checked through their nearest existing
|
|
246
|
+
* ancestor so create/write operations cannot traverse an existing symlink.
|
|
247
|
+
*/
|
|
248
|
+
export function resolveWorkspacePath(
|
|
249
|
+
candidate: string | undefined,
|
|
250
|
+
consumer: string
|
|
251
|
+
): string {
|
|
252
|
+
const configuredRoot = requireWorkspaceRoot(consumer);
|
|
253
|
+
const realRoot = fs.realpathSync(configuredRoot);
|
|
254
|
+
const resolved = candidate && candidate.trim().length > 0
|
|
255
|
+
? path.resolve(realRoot, candidate.trim())
|
|
256
|
+
: realRoot;
|
|
257
|
+
|
|
258
|
+
if (!isWithinPath(realRoot, resolved)) {
|
|
259
|
+
throw new Error(`${consumer} path is outside MXF_WORKSPACE_ROOT`);
|
|
260
|
+
}
|
|
261
|
+
|
|
262
|
+
let existingAncestor = resolved;
|
|
263
|
+
while (!fs.existsSync(existingAncestor)) {
|
|
264
|
+
const parent = path.dirname(existingAncestor);
|
|
265
|
+
if (parent === existingAncestor) {
|
|
266
|
+
throw new Error(`${consumer} path has no existing workspace ancestor`);
|
|
267
|
+
}
|
|
268
|
+
existingAncestor = parent;
|
|
269
|
+
}
|
|
270
|
+
|
|
271
|
+
const realAncestor = fs.realpathSync(existingAncestor);
|
|
272
|
+
if (!isWithinPath(realRoot, realAncestor)) {
|
|
273
|
+
throw new Error(`${consumer} path escapes MXF_WORKSPACE_ROOT through a symlink`);
|
|
274
|
+
}
|
|
275
|
+
|
|
276
|
+
const suffix = path.relative(existingAncestor, resolved);
|
|
277
|
+
const finalPath = path.resolve(realAncestor, suffix);
|
|
278
|
+
if (!isWithinPath(realRoot, finalPath)) {
|
|
279
|
+
throw new Error(`${consumer} path is outside MXF_WORKSPACE_ROOT`);
|
|
280
|
+
}
|
|
281
|
+
return finalPath;
|
|
282
|
+
}
|
|
283
|
+
|
|
210
284
|
/**
|
|
211
285
|
* May api_fetch reach loopback and private-network addresses?
|
|
212
286
|
*
|