@mxf-dev/core 2.0.5 → 3.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/config/ModelContextLimits.d.ts.map +1 -1
- package/dist/config/ModelContextLimits.js +7 -1
- package/dist/config/ModelContextLimits.js.map +1 -1
- package/dist/constants/CoreTools.d.ts +6 -5
- package/dist/constants/CoreTools.d.ts.map +1 -1
- package/dist/constants/CoreTools.js +6 -5
- package/dist/constants/CoreTools.js.map +1 -1
- package/dist/constants/DefaultPhaseProfiles.d.ts.map +1 -1
- package/dist/constants/DefaultPhaseProfiles.js +29 -0
- package/dist/constants/DefaultPhaseProfiles.js.map +1 -1
- package/dist/constants/ReservedIdentities.d.ts +14 -0
- package/dist/constants/ReservedIdentities.d.ts.map +1 -0
- package/dist/constants/ReservedIdentities.js +42 -0
- package/dist/constants/ReservedIdentities.js.map +1 -0
- package/dist/database/adapters/mongodb/MongoKnowledgeGraphRepository.d.ts +16 -16
- package/dist/database/adapters/mongodb/MongoKnowledgeGraphRepository.d.ts.map +1 -1
- package/dist/database/adapters/mongodb/MongoKnowledgeGraphRepository.js +98 -36
- package/dist/database/adapters/mongodb/MongoKnowledgeGraphRepository.js.map +1 -1
- package/dist/events/ClientEventBus.d.ts +28 -0
- package/dist/events/ClientEventBus.d.ts.map +1 -1
- package/dist/events/ClientEventBus.js +87 -40
- package/dist/events/ClientEventBus.js.map +1 -1
- package/dist/events/EventBus.d.ts +19 -1
- package/dist/events/EventBus.d.ts.map +1 -1
- package/dist/events/EventBus.js +23 -0
- package/dist/events/EventBus.js.map +1 -1
- package/dist/events/EventBusBase.d.ts +37 -6
- package/dist/events/EventBusBase.d.ts.map +1 -1
- package/dist/events/EventBusBase.js +75 -27
- package/dist/events/EventBusBase.js.map +1 -1
- package/dist/events/EventNames.d.ts +49 -36
- package/dist/events/EventNames.d.ts.map +1 -1
- package/dist/events/EventNames.js +38 -36
- package/dist/events/EventNames.js.map +1 -1
- package/dist/events/PublicEvents.d.ts +5 -1
- package/dist/events/PublicEvents.d.ts.map +1 -1
- package/dist/events/PublicEvents.js +7 -0
- package/dist/events/PublicEvents.js.map +1 -1
- package/dist/events/ServerEventBus.d.ts +7 -54
- package/dist/events/ServerEventBus.d.ts.map +1 -1
- package/dist/events/ServerEventBus.js +10 -96
- package/dist/events/ServerEventBus.js.map +1 -1
- package/dist/events/event-definitions/ControlLoopEvents.d.ts +35 -0
- package/dist/events/event-definitions/ControlLoopEvents.d.ts.map +1 -1
- package/dist/events/event-definitions/ControlLoopEvents.js +6 -0
- package/dist/events/event-definitions/ControlLoopEvents.js.map +1 -1
- package/dist/events/event-definitions/SdkEvents.d.ts +55 -0
- package/dist/events/event-definitions/SdkEvents.d.ts.map +1 -0
- package/dist/events/event-definitions/SdkEvents.js +36 -0
- package/dist/events/event-definitions/SdkEvents.js.map +1 -0
- package/dist/events/event-definitions/TaskEvents.d.ts +2 -7
- package/dist/events/event-definitions/TaskEvents.d.ts.map +1 -1
- package/dist/index.d.ts +4 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -1
- package/dist/interfaces/AgentInterfaces.d.ts +5 -0
- package/dist/interfaces/AgentInterfaces.d.ts.map +1 -1
- package/dist/interfaces/ChannelConfig.d.ts +2 -2
- package/dist/interfaces/ChannelConfig.d.ts.map +1 -1
- package/dist/interfaces/ConversationMessage.d.ts +1 -1
- package/dist/interfaces/ConversationMessage.d.ts.map +1 -1
- package/dist/interfaces/IMemoryPersistence.d.ts +47 -1
- package/dist/interfaces/IMemoryPersistence.d.ts.map +1 -1
- package/dist/interfaces/SocketServiceInterface.d.ts +3 -2
- package/dist/interfaces/SocketServiceInterface.d.ts.map +1 -1
- package/dist/interfaces/TaskInterfaces.d.ts +14 -1
- package/dist/interfaces/TaskInterfaces.d.ts.map +1 -1
- package/dist/models/agent.d.ts +0 -1
- package/dist/models/agent.d.ts.map +1 -1
- package/dist/models/agent.js +0 -5
- package/dist/models/agent.js.map +1 -1
- package/dist/models/agentIdentityReservation.d.ts +42 -0
- package/dist/models/agentIdentityReservation.d.ts.map +1 -0
- package/dist/models/agentIdentityReservation.js +52 -0
- package/dist/models/agentIdentityReservation.js.map +1 -0
- package/dist/models/channel.d.ts +2 -0
- package/dist/models/channel.d.ts.map +1 -1
- package/dist/models/channel.js.map +1 -1
- package/dist/models/channelKey.d.ts +1 -0
- package/dist/models/channelKey.d.ts.map +1 -1
- package/dist/models/channelKey.js +5 -0
- package/dist/models/channelKey.js.map +1 -1
- package/dist/models/memory.d.ts +1 -1
- package/dist/models/memory.d.ts.map +1 -1
- package/dist/models/memory.js +9 -12
- package/dist/models/memory.js.map +1 -1
- package/dist/models/memoryStrata.d.ts +3 -16
- package/dist/models/memoryStrata.d.ts.map +1 -1
- package/dist/models/memoryStrata.js +3 -5
- package/dist/models/memoryStrata.js.map +1 -1
- package/dist/models/plan.d.ts +2 -2
- package/dist/models/plan.d.ts.map +1 -1
- package/dist/models/plan.js +1 -1
- package/dist/models/plan.js.map +1 -1
- package/dist/models/taskEffectiveness.d.ts +1 -0
- package/dist/models/taskEffectiveness.d.ts.map +1 -1
- package/dist/models/taskEffectiveness.js +7 -1
- package/dist/models/taskEffectiveness.js.map +1 -1
- package/dist/models/user.d.ts +4 -0
- package/dist/models/user.d.ts.map +1 -1
- package/dist/models/user.js +8 -0
- package/dist/models/user.js.map +1 -1
- package/dist/protocols/mcp/LlmTestEnvironmentGuard.d.ts +16 -0
- package/dist/protocols/mcp/LlmTestEnvironmentGuard.d.ts.map +1 -0
- package/dist/protocols/mcp/LlmTestEnvironmentGuard.js +25 -0
- package/dist/protocols/mcp/LlmTestEnvironmentGuard.js.map +1 -0
- package/dist/protocols/mcp/McpServerTypes.d.ts +9 -0
- package/dist/protocols/mcp/McpServerTypes.d.ts.map +1 -1
- package/dist/protocols/mcp/providers/AnthropicMcpClient.d.ts.map +1 -1
- package/dist/protocols/mcp/providers/AnthropicMcpClient.js +1 -0
- package/dist/protocols/mcp/providers/AnthropicMcpClient.js.map +1 -1
- package/dist/protocols/mcp/providers/AzureOpenAiMcpClient.d.ts.map +1 -1
- package/dist/protocols/mcp/providers/AzureOpenAiMcpClient.js +1 -0
- package/dist/protocols/mcp/providers/AzureOpenAiMcpClient.js.map +1 -1
- package/dist/protocols/mcp/providers/BaseMcpClient.d.ts +4 -0
- package/dist/protocols/mcp/providers/BaseMcpClient.d.ts.map +1 -1
- package/dist/protocols/mcp/providers/BaseMcpClient.js +10 -0
- package/dist/protocols/mcp/providers/BaseMcpClient.js.map +1 -1
- package/dist/protocols/mcp/providers/CustomMcpClient.d.ts.map +1 -1
- package/dist/protocols/mcp/providers/CustomMcpClient.js +7 -0
- package/dist/protocols/mcp/providers/CustomMcpClient.js.map +1 -1
- package/dist/protocols/mcp/providers/GeminiMcpClient.d.ts.map +1 -1
- package/dist/protocols/mcp/providers/GeminiMcpClient.js +1 -0
- package/dist/protocols/mcp/providers/GeminiMcpClient.js.map +1 -1
- package/dist/protocols/mcp/providers/OllamaMcpClient.d.ts +1 -0
- package/dist/protocols/mcp/providers/OllamaMcpClient.d.ts.map +1 -1
- package/dist/protocols/mcp/providers/OllamaMcpClient.js +1 -0
- package/dist/protocols/mcp/providers/OllamaMcpClient.js.map +1 -1
- package/dist/protocols/mcp/providers/OpenAiMcpClient.d.ts.map +1 -1
- package/dist/protocols/mcp/providers/OpenAiMcpClient.js +1 -0
- package/dist/protocols/mcp/providers/OpenAiMcpClient.js.map +1 -1
- package/dist/protocols/mcp/providers/OpenRouterMcpClient.d.ts.map +1 -1
- package/dist/protocols/mcp/providers/OpenRouterMcpClient.js +2 -0
- package/dist/protocols/mcp/providers/OpenRouterMcpClient.js.map +1 -1
- package/dist/protocols/mcp/providers/XaiMcpClient.d.ts.map +1 -1
- package/dist/protocols/mcp/providers/XaiMcpClient.js +1 -0
- package/dist/protocols/mcp/providers/XaiMcpClient.js.map +1 -1
- package/dist/protocols/mcp/security/BrowserTargetGuard.d.ts +14 -0
- package/dist/protocols/mcp/security/BrowserTargetGuard.d.ts.map +1 -0
- package/dist/protocols/mcp/security/BrowserTargetGuard.js +55 -0
- package/dist/protocols/mcp/security/BrowserTargetGuard.js.map +1 -0
- package/dist/protocols/mcp/security/ExternalMcpRegistrationPolicy.d.ts +24 -0
- package/dist/protocols/mcp/security/ExternalMcpRegistrationPolicy.d.ts.map +1 -0
- package/dist/protocols/mcp/security/ExternalMcpRegistrationPolicy.js +33 -0
- package/dist/protocols/mcp/security/ExternalMcpRegistrationPolicy.js.map +1 -0
- package/dist/protocols/mcp/security/HttpTargetGuard.d.ts.map +1 -1
- package/dist/protocols/mcp/security/HttpTargetGuard.js +68 -6
- package/dist/protocols/mcp/security/HttpTargetGuard.js.map +1 -1
- package/dist/protocols/mcp/security/McpSecurityGuard.d.ts.map +1 -1
- package/dist/protocols/mcp/security/McpSecurityGuard.js +7 -5
- package/dist/protocols/mcp/security/McpSecurityGuard.js.map +1 -1
- package/dist/protocols/mcp/security/McpToolPolicy.d.ts +18 -0
- package/dist/protocols/mcp/security/McpToolPolicy.d.ts.map +1 -1
- package/dist/protocols/mcp/security/McpToolPolicy.js +60 -0
- package/dist/protocols/mcp/security/McpToolPolicy.js.map +1 -1
- package/dist/protocols/mcp/services/ExternalMcpServerManager.d.ts +25 -0
- package/dist/protocols/mcp/services/ExternalMcpServerManager.d.ts.map +1 -1
- package/dist/protocols/mcp/services/ExternalMcpServerManager.js +93 -17
- package/dist/protocols/mcp/services/ExternalMcpServerManager.js.map +1 -1
- package/dist/protocols/mcp/services/ExternalServerConfigs.d.ts +2 -2
- package/dist/protocols/mcp/services/ExternalServerConfigs.d.ts.map +1 -1
- package/dist/protocols/mcp/services/ExternalServerConfigs.js +25 -8
- package/dist/protocols/mcp/services/ExternalServerConfigs.js.map +1 -1
- package/dist/protocols/mcp/tools/AnalyticsTools.d.ts +3 -37
- package/dist/protocols/mcp/tools/AnalyticsTools.d.ts.map +1 -1
- package/dist/protocols/mcp/tools/AnalyticsTools.js +134 -614
- package/dist/protocols/mcp/tools/AnalyticsTools.js.map +1 -1
- package/dist/protocols/mcp/tools/CodeAnalysisTools.d.ts.map +1 -1
- package/dist/protocols/mcp/tools/CodeAnalysisTools.js +16 -13
- package/dist/protocols/mcp/tools/CodeAnalysisTools.js.map +1 -1
- package/dist/protocols/mcp/tools/EffectivenessTools.d.ts.map +1 -1
- package/dist/protocols/mcp/tools/EffectivenessTools.js +94 -30
- package/dist/protocols/mcp/tools/EffectivenessTools.js.map +1 -1
- package/dist/protocols/mcp/tools/GitTools.d.ts.map +1 -1
- package/dist/protocols/mcp/tools/GitTools.js +9 -5
- package/dist/protocols/mcp/tools/GitTools.js.map +1 -1
- package/dist/protocols/mcp/tools/InfrastructureTools.d.ts +10 -40
- package/dist/protocols/mcp/tools/InfrastructureTools.d.ts.map +1 -1
- package/dist/protocols/mcp/tools/InfrastructureTools.js +29 -70
- package/dist/protocols/mcp/tools/InfrastructureTools.js.map +1 -1
- package/dist/protocols/mcp/tools/JsonTools.d.ts.map +1 -1
- package/dist/protocols/mcp/tools/JsonTools.js +4 -4
- package/dist/protocols/mcp/tools/JsonTools.js.map +1 -1
- package/dist/protocols/mcp/tools/KnowledgeGraphTools.d.ts +55 -592
- package/dist/protocols/mcp/tools/KnowledgeGraphTools.d.ts.map +1 -1
- package/dist/protocols/mcp/tools/KnowledgeGraphTools.js +169 -119
- package/dist/protocols/mcp/tools/KnowledgeGraphTools.js.map +1 -1
- package/dist/protocols/mcp/tools/MemorySearchTools.d.ts +6 -6
- package/dist/protocols/mcp/tools/MemorySearchTools.d.ts.map +1 -1
- package/dist/protocols/mcp/tools/MemorySearchTools.js +107 -39
- package/dist/protocols/mcp/tools/MemorySearchTools.js.map +1 -1
- package/dist/protocols/mcp/tools/MemoryUtilityTools.d.ts +4 -5
- package/dist/protocols/mcp/tools/MemoryUtilityTools.d.ts.map +1 -1
- package/dist/protocols/mcp/tools/MemoryUtilityTools.js +59 -208
- package/dist/protocols/mcp/tools/MemoryUtilityTools.js.map +1 -1
- package/dist/protocols/mcp/tools/PlanningTools.d.ts +2 -1
- package/dist/protocols/mcp/tools/PlanningTools.d.ts.map +1 -1
- package/dist/protocols/mcp/tools/PlanningTools.js +111 -49
- package/dist/protocols/mcp/tools/PlanningTools.js.map +1 -1
- package/dist/protocols/mcp/tools/ProjectContextTools.d.ts.map +1 -1
- package/dist/protocols/mcp/tools/ProjectContextTools.js +18 -12
- package/dist/protocols/mcp/tools/ProjectContextTools.js.map +1 -1
- package/dist/protocols/mcp/tools/SafetyTools.d.ts.map +1 -1
- package/dist/protocols/mcp/tools/SafetyTools.js +16 -13
- package/dist/protocols/mcp/tools/SafetyTools.js.map +1 -1
- package/dist/protocols/mcp/tools/SearchProjectTools.d.ts +24 -7
- package/dist/protocols/mcp/tools/SearchProjectTools.d.ts.map +1 -1
- package/dist/protocols/mcp/tools/SearchProjectTools.js +226 -126
- package/dist/protocols/mcp/tools/SearchProjectTools.js.map +1 -1
- package/dist/protocols/mcp/tools/TaskPlanningTools.d.ts +0 -32
- package/dist/protocols/mcp/tools/TaskPlanningTools.d.ts.map +1 -1
- package/dist/protocols/mcp/tools/TaskPlanningTools.js +363 -450
- package/dist/protocols/mcp/tools/TaskPlanningTools.js.map +1 -1
- package/dist/protocols/mcp/tools/TestTools.d.ts.map +1 -1
- package/dist/protocols/mcp/tools/TestTools.js +18 -11
- package/dist/protocols/mcp/tools/TestTools.js.map +1 -1
- package/dist/protocols/mcp/tools/TypeScriptTools.d.ts.map +1 -1
- package/dist/protocols/mcp/tools/TypeScriptTools.js +22 -12
- package/dist/protocols/mcp/tools/TypeScriptTools.js.map +1 -1
- package/dist/protocols/mcp/tools/UserInputTools.d.ts.map +1 -1
- package/dist/protocols/mcp/tools/UserInputTools.js +14 -1
- package/dist/protocols/mcp/tools/UserInputTools.js.map +1 -1
- package/dist/protocols/mcp/tools/UserMemoryTools.d.ts +3 -1
- package/dist/protocols/mcp/tools/UserMemoryTools.d.ts.map +1 -1
- package/dist/protocols/mcp/tools/UserMemoryTools.js +27 -62
- package/dist/protocols/mcp/tools/UserMemoryTools.js.map +1 -1
- package/dist/protocols/mcp/tools/shell/ShellExecuteHandler.d.ts.map +1 -1
- package/dist/protocols/mcp/tools/shell/ShellExecuteHandler.js +14 -60
- package/dist/protocols/mcp/tools/shell/ShellExecuteHandler.js.map +1 -1
- package/dist/protocols/mcp/tools/shell/ShellSandbox.d.ts.map +1 -1
- package/dist/protocols/mcp/tools/shell/ShellSandbox.js +9 -27
- package/dist/protocols/mcp/tools/shell/ShellSandbox.js.map +1 -1
- package/dist/repositories/interfaces/IKnowledgeGraphRepository.d.ts +40 -30
- package/dist/repositories/interfaces/IKnowledgeGraphRepository.d.ts.map +1 -1
- package/dist/schemas/EventPayloadSchema.d.ts +28 -0
- package/dist/schemas/EventPayloadSchema.d.ts.map +1 -1
- package/dist/schemas/EventPayloadSchema.js +30 -1
- package/dist/schemas/EventPayloadSchema.js.map +1 -1
- package/dist/schemas/MxpProtocolSchemas.d.ts +6 -6
- package/dist/services/AgentPerformanceService.d.ts +11 -0
- package/dist/services/AgentPerformanceService.d.ts.map +1 -1
- package/dist/services/AgentPerformanceService.js +59 -33
- package/dist/services/AgentPerformanceService.js.map +1 -1
- package/dist/services/AutoCorrectionService.d.ts +3 -0
- package/dist/services/AutoCorrectionService.d.ts.map +1 -1
- package/dist/services/AutoCorrectionService.js +19 -2
- package/dist/services/AutoCorrectionService.js.map +1 -1
- package/dist/services/BackgroundTaskManager.d.ts +23 -7
- package/dist/services/BackgroundTaskManager.d.ts.map +1 -1
- package/dist/services/BackgroundTaskManager.js +137 -57
- package/dist/services/BackgroundTaskManager.js.map +1 -1
- package/dist/services/BrowserManager.d.ts +2 -0
- package/dist/services/BrowserManager.d.ts.map +1 -1
- package/dist/services/BrowserManager.js +18 -15
- package/dist/services/BrowserManager.js.map +1 -1
- package/dist/services/ChannelContextMemoryOperations.d.ts +8 -1
- package/dist/services/ChannelContextMemoryOperations.d.ts.map +1 -1
- package/dist/services/ChannelContextMemoryOperations.js +89 -165
- package/dist/services/ChannelContextMemoryOperations.js.map +1 -1
- package/dist/services/ChannelContextMessageOperations.d.ts +4 -3
- package/dist/services/ChannelContextMessageOperations.d.ts.map +1 -1
- package/dist/services/ChannelContextMessageOperations.js +72 -212
- package/dist/services/ChannelContextMessageOperations.js.map +1 -1
- package/dist/services/MemoryService.d.ts +52 -21
- package/dist/services/MemoryService.d.ts.map +1 -1
- package/dist/services/MemoryService.js +775 -548
- package/dist/services/MemoryService.js.map +1 -1
- package/dist/services/PatternLearningService.d.ts +5 -0
- package/dist/services/PatternLearningService.d.ts.map +1 -1
- package/dist/services/PatternLearningService.js +26 -3
- package/dist/services/PatternLearningService.js.map +1 -1
- package/dist/services/PerformanceOptimizationService.d.ts +2 -1
- package/dist/services/PerformanceOptimizationService.d.ts.map +1 -1
- package/dist/services/PerformanceOptimizationService.js +21 -6
- package/dist/services/PerformanceOptimizationService.js.map +1 -1
- package/dist/services/PredictiveAnalyticsService.d.ts +1 -0
- package/dist/services/PredictiveAnalyticsService.d.ts.map +1 -1
- package/dist/services/PredictiveAnalyticsService.js +18 -6
- package/dist/services/PredictiveAnalyticsService.js.map +1 -1
- package/dist/services/ProactiveValidationService.d.ts +6 -0
- package/dist/services/ProactiveValidationService.d.ts.map +1 -1
- package/dist/services/ProactiveValidationService.js +58 -39
- package/dist/services/ProactiveValidationService.js.map +1 -1
- package/dist/services/TaskEffectivenessService.d.ts +55 -31
- package/dist/services/TaskEffectivenessService.d.ts.map +1 -1
- package/dist/services/TaskEffectivenessService.js +243 -125
- package/dist/services/TaskEffectivenessService.js.map +1 -1
- package/dist/services/ToolExecutionInterceptor.d.ts +4 -0
- package/dist/services/ToolExecutionInterceptor.d.ts.map +1 -1
- package/dist/services/ToolExecutionInterceptor.js +31 -5
- package/dist/services/ToolExecutionInterceptor.js.map +1 -1
- package/dist/services/UserInputRequestManager.d.ts +13 -3
- package/dist/services/UserInputRequestManager.d.ts.map +1 -1
- package/dist/services/UserInputRequestManager.js +42 -6
- package/dist/services/UserInputRequestManager.js.map +1 -1
- package/dist/services/UserMemoryService.d.ts +2 -0
- package/dist/services/UserMemoryService.d.ts.map +1 -1
- package/dist/services/UserMemoryService.js +9 -4
- package/dist/services/UserMemoryService.js.map +1 -1
- package/dist/services/ValidationAnalyticsService.d.ts +4 -0
- package/dist/services/ValidationAnalyticsService.d.ts.map +1 -1
- package/dist/services/ValidationAnalyticsService.js +30 -8
- package/dist/services/ValidationAnalyticsService.js.map +1 -1
- package/dist/services/ValidationCacheService.d.ts +3 -1
- package/dist/services/ValidationCacheService.d.ts.map +1 -1
- package/dist/services/ValidationCacheService.js +25 -4
- package/dist/services/ValidationCacheService.js.map +1 -1
- package/dist/services/ValidationMiddleware.d.ts +7 -0
- package/dist/services/ValidationMiddleware.d.ts.map +1 -1
- package/dist/services/ValidationMiddleware.js +53 -10
- package/dist/services/ValidationMiddleware.js.map +1 -1
- package/dist/services/ValidationPerformanceService.d.ts +3 -0
- package/dist/services/ValidationPerformanceService.d.ts.map +1 -1
- package/dist/services/ValidationPerformanceService.js +28 -11
- package/dist/services/ValidationPerformanceService.js.map +1 -1
- package/dist/services/WebSearchService.d.ts.map +1 -1
- package/dist/services/WebSearchService.js +9 -0
- package/dist/services/WebSearchService.js.map +1 -1
- package/dist/services/dag/TaskDagService.d.ts +3 -0
- package/dist/services/dag/TaskDagService.d.ts.map +1 -1
- package/dist/services/dag/TaskDagService.js +18 -0
- package/dist/services/dag/TaskDagService.js.map +1 -1
- package/dist/services/kg/EntityQValueManager.d.ts +3 -1
- package/dist/services/kg/EntityQValueManager.d.ts.map +1 -1
- package/dist/services/kg/EntityQValueManager.js +10 -10
- package/dist/services/kg/EntityQValueManager.js.map +1 -1
- package/dist/services/kg/GraphSurpriseCalculator.d.ts +0 -4
- package/dist/services/kg/GraphSurpriseCalculator.d.ts.map +1 -1
- package/dist/services/kg/GraphSurpriseCalculator.js +0 -9
- package/dist/services/kg/GraphSurpriseCalculator.js.map +1 -1
- package/dist/services/kg/KnowledgeGraphService.d.ts +12 -12
- package/dist/services/kg/KnowledgeGraphService.d.ts.map +1 -1
- package/dist/services/kg/KnowledgeGraphService.js +43 -51
- package/dist/services/kg/KnowledgeGraphService.js.map +1 -1
- package/dist/services/kg/OrparGraphIntegration.d.ts.map +1 -1
- package/dist/services/kg/OrparGraphIntegration.js +6 -5
- package/dist/services/kg/OrparGraphIntegration.js.map +1 -1
- package/dist/services/orpar-memory/CycleConsolidationTrigger.d.ts +1 -0
- package/dist/services/orpar-memory/CycleConsolidationTrigger.d.ts.map +1 -1
- package/dist/services/orpar-memory/CycleConsolidationTrigger.js +8 -1
- package/dist/services/orpar-memory/CycleConsolidationTrigger.js.map +1 -1
- package/dist/services/orpar-memory/OrparMemoryCoordinator.d.ts +8 -1
- package/dist/services/orpar-memory/OrparMemoryCoordinator.d.ts.map +1 -1
- package/dist/services/orpar-memory/OrparMemoryCoordinator.js +93 -45
- package/dist/services/orpar-memory/OrparMemoryCoordinator.js.map +1 -1
- package/dist/services/orpar-memory/SurpriseOrparAdapter.d.ts +1 -0
- package/dist/services/orpar-memory/SurpriseOrparAdapter.d.ts.map +1 -1
- package/dist/services/orpar-memory/SurpriseOrparAdapter.js +8 -1
- package/dist/services/orpar-memory/SurpriseOrparAdapter.js.map +1 -1
- package/dist/types/ChannelContext.d.ts +2 -1
- package/dist/types/ChannelContext.d.ts.map +1 -1
- package/dist/types/EffectivenessTypes.d.ts +4 -1
- package/dist/types/EffectivenessTypes.d.ts.map +1 -1
- package/dist/types/TaskCompletionTypes.d.ts +7 -5
- package/dist/types/TaskCompletionTypes.d.ts.map +1 -1
- package/dist/types/TaskTypes.d.ts +8 -1
- package/dist/types/TaskTypes.d.ts.map +1 -1
- package/dist/utils/GlobMatcher.d.ts +37 -0
- package/dist/utils/GlobMatcher.d.ts.map +1 -0
- package/dist/utils/GlobMatcher.js +131 -0
- package/dist/utils/GlobMatcher.js.map +1 -0
- package/package.json +1 -1
- package/src/config/ModelContextLimits.ts +7 -1
- package/src/constants/CoreTools.ts +6 -5
- package/src/constants/DefaultPhaseProfiles.ts +29 -0
- package/src/constants/ReservedIdentities.ts +51 -0
- package/src/database/adapters/mongodb/MongoKnowledgeGraphRepository.ts +115 -36
- package/src/events/ClientEventBus.ts +117 -48
- package/src/events/EventBus.ts +32 -2
- package/src/events/EventBusBase.ts +132 -39
- package/src/events/EventNames.ts +43 -36
- package/src/events/PublicEvents.ts +8 -0
- package/src/events/ServerEventBus.ts +9 -128
- package/src/events/event-definitions/ControlLoopEvents.ts +12 -0
- package/src/events/event-definitions/SdkEvents.ts +58 -0
- package/src/events/event-definitions/TaskEvents.ts +2 -2
- package/src/index.ts +15 -0
- package/src/interfaces/AgentInterfaces.ts +5 -0
- package/src/interfaces/ChannelConfig.ts +2 -2
- package/src/interfaces/ConversationMessage.ts +5 -0
- package/src/interfaces/IMemoryPersistence.ts +55 -1
- package/src/interfaces/SocketServiceInterface.ts +3 -2
- package/src/interfaces/TaskInterfaces.ts +16 -1
- package/src/models/agent.ts +0 -6
- package/src/models/agentIdentityReservation.ts +77 -0
- package/src/models/channel.ts +2 -0
- package/src/models/channelKey.ts +10 -0
- package/src/models/memory.ts +18 -19
- package/src/models/memoryStrata.ts +9 -23
- package/src/models/plan.ts +3 -3
- package/src/models/taskEffectiveness.ts +9 -2
- package/src/models/user.ts +12 -0
- package/src/protocols/mcp/LlmTestEnvironmentGuard.ts +30 -0
- package/src/protocols/mcp/McpServerTypes.ts +9 -0
- package/src/protocols/mcp/providers/AnthropicMcpClient.ts +2 -0
- package/src/protocols/mcp/providers/AzureOpenAiMcpClient.ts +1 -0
- package/src/protocols/mcp/providers/BaseMcpClient.ts +13 -0
- package/src/protocols/mcp/providers/CustomMcpClient.ts +7 -0
- package/src/protocols/mcp/providers/GeminiMcpClient.ts +2 -0
- package/src/protocols/mcp/providers/OllamaMcpClient.ts +3 -1
- package/src/protocols/mcp/providers/OpenAiMcpClient.ts +2 -0
- package/src/protocols/mcp/providers/OpenRouterMcpClient.ts +3 -0
- package/src/protocols/mcp/providers/XaiMcpClient.ts +2 -0
- package/src/protocols/mcp/security/BrowserTargetGuard.ts +64 -0
- package/src/protocols/mcp/security/ExternalMcpRegistrationPolicy.ts +38 -0
- package/src/protocols/mcp/security/HttpTargetGuard.ts +77 -6
- package/src/protocols/mcp/security/McpSecurityGuard.ts +7 -5
- package/src/protocols/mcp/security/McpToolPolicy.ts +74 -0
- package/src/protocols/mcp/services/ExternalMcpServerManager.ts +146 -17
- package/src/protocols/mcp/services/ExternalServerConfigs.ts +26 -8
- package/src/protocols/mcp/tools/AnalyticsTools.ts +167 -641
- package/src/protocols/mcp/tools/CodeAnalysisTools.ts +44 -14
- package/src/protocols/mcp/tools/EffectivenessTools.ts +185 -45
- package/src/protocols/mcp/tools/GitTools.ts +15 -5
- package/src/protocols/mcp/tools/InfrastructureTools.ts +42 -90
- package/src/protocols/mcp/tools/JsonTools.ts +7 -4
- package/src/protocols/mcp/tools/KnowledgeGraphTools.ts +313 -164
- package/src/protocols/mcp/tools/MemorySearchTools.ts +158 -46
- package/src/protocols/mcp/tools/MemoryUtilityTools.ts +85 -232
- package/src/protocols/mcp/tools/PlanningTools.ts +137 -59
- package/src/protocols/mcp/tools/ProjectContextTools.ts +33 -12
- package/src/protocols/mcp/tools/SafetyTools.ts +49 -13
- package/src/protocols/mcp/tools/SearchProjectTools.ts +294 -153
- package/src/protocols/mcp/tools/TaskPlanningTools.ts +437 -514
- package/src/protocols/mcp/tools/TestTools.ts +41 -11
- package/src/protocols/mcp/tools/TypeScriptTools.ts +61 -12
- package/src/protocols/mcp/tools/UserInputTools.ts +15 -1
- package/src/protocols/mcp/tools/UserMemoryTools.ts +27 -62
- package/src/protocols/mcp/tools/shell/ShellExecuteHandler.ts +26 -84
- package/src/protocols/mcp/tools/shell/ShellSandbox.ts +13 -31
- package/src/repositories/interfaces/IKnowledgeGraphRepository.ts +45 -27
- package/src/schemas/EventPayloadSchema.ts +45 -1
- package/src/services/AgentPerformanceService.ts +85 -36
- package/src/services/AutoCorrectionService.ts +25 -6
- package/src/services/BackgroundTaskManager.ts +183 -76
- package/src/services/BrowserManager.ts +20 -16
- package/src/services/ChannelContextMemoryOperations.ts +169 -202
- package/src/services/ChannelContextMessageOperations.ts +112 -274
- package/src/services/MemoryService.ts +1053 -760
- package/src/services/PatternLearningService.ts +32 -7
- package/src/services/PerformanceOptimizationService.ts +26 -9
- package/src/services/PredictiveAnalyticsService.ts +23 -10
- package/src/services/ProactiveValidationService.ts +66 -40
- package/src/services/TaskEffectivenessService.ts +421 -206
- package/src/services/ToolExecutionInterceptor.ts +40 -9
- package/src/services/UserInputRequestManager.ts +51 -6
- package/src/services/UserMemoryService.ts +12 -3
- package/src/services/ValidationAnalyticsService.ts +36 -11
- package/src/services/ValidationCacheService.ts +30 -7
- package/src/services/ValidationMiddleware.ts +62 -14
- package/src/services/ValidationPerformanceService.ts +47 -25
- package/src/services/WebSearchService.ts +16 -4
- package/src/services/dag/TaskDagService.ts +20 -1
- package/src/services/kg/EntityQValueManager.ts +21 -10
- package/src/services/kg/GraphSurpriseCalculator.ts +0 -14
- package/src/services/kg/KnowledgeGraphService.ts +56 -48
- package/src/services/kg/OrparGraphIntegration.ts +11 -5
- package/src/services/orpar-memory/CycleConsolidationTrigger.ts +10 -1
- package/src/services/orpar-memory/OrparMemoryCoordinator.ts +142 -71
- package/src/services/orpar-memory/SurpriseOrparAdapter.ts +10 -1
- package/src/types/ChannelContext.ts +3 -1
- package/src/types/EffectivenessTypes.ts +6 -2
- package/src/types/TaskCompletionTypes.ts +9 -9
- package/src/types/TaskTypes.ts +12 -1
- package/src/utils/GlobMatcher.ts +157 -0
|
@@ -21,181 +21,299 @@
|
|
|
21
21
|
/**
|
|
22
22
|
* Search Project Tools
|
|
23
23
|
*
|
|
24
|
-
*
|
|
25
|
-
*
|
|
26
|
-
*
|
|
27
|
-
*
|
|
28
|
-
* Safety: Validates pattern input against an allowlist to prevent command injection.
|
|
24
|
+
* Scoped content and filename search under MXF_WORKSPACE_ROOT. Content search
|
|
25
|
+
* invokes rg/grep with an argv array (never a shell); filename search uses a
|
|
26
|
+
* bounded filesystem walk and never starts a process.
|
|
29
27
|
*/
|
|
30
28
|
|
|
31
|
-
import {
|
|
32
|
-
import
|
|
29
|
+
import { execFile } from 'child_process';
|
|
30
|
+
import * as fs from 'fs/promises';
|
|
31
|
+
import * as path from 'path';
|
|
32
|
+
import { promisify } from 'util';
|
|
33
|
+
|
|
33
34
|
import { Logger } from '../../../utils/Logger.js';
|
|
34
|
-
import {
|
|
35
|
+
import { createGlobMatcher, MAX_GLOB_WILDCARDS } from '../../../utils/GlobMatcher.js';
|
|
36
|
+
import {
|
|
37
|
+
buildShellChildEnv,
|
|
38
|
+
resolveWorkspacePath
|
|
39
|
+
} from '../security/McpToolPolicy.js';
|
|
35
40
|
|
|
36
41
|
const logger = new Logger('info', 'SearchProjectTools', 'server');
|
|
42
|
+
const execFileAsync = promisify(execFile);
|
|
43
|
+
|
|
44
|
+
const DEFAULT_MAX_RESULTS = 50;
|
|
45
|
+
const MAX_RESULTS = 200;
|
|
46
|
+
const MAX_PATTERN_LENGTH = 512;
|
|
47
|
+
const MAX_FILE_TYPES = 20;
|
|
48
|
+
const MAX_EXTENSION_LENGTH = 16;
|
|
49
|
+
const MAX_SEARCH_OUTPUT_BYTES = 2 * 1024 * 1024;
|
|
50
|
+
const MAX_SCANNED_ENTRIES = 50_000;
|
|
51
|
+
const MAX_DIRECTORY_DEPTH = 50;
|
|
52
|
+
const EXCLUDED_DIRECTORIES = new Set(['.git', 'node_modules', 'dist']);
|
|
53
|
+
|
|
54
|
+
type SearchMode = 'search_content' | 'search_files';
|
|
55
|
+
|
|
56
|
+
export interface SearchProjectInput {
|
|
57
|
+
mode: SearchMode;
|
|
58
|
+
pattern: string;
|
|
59
|
+
workingDirectory?: string;
|
|
60
|
+
fileTypes?: string[];
|
|
61
|
+
maxResults?: number;
|
|
62
|
+
caseSensitive?: boolean;
|
|
63
|
+
}
|
|
37
64
|
|
|
38
|
-
|
|
39
|
-
|
|
65
|
+
interface ProcessFailure extends Error {
|
|
66
|
+
code?: string | number;
|
|
67
|
+
status?: number;
|
|
68
|
+
stdout?: string;
|
|
69
|
+
}
|
|
40
70
|
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
71
|
+
function validatePattern(pattern: unknown): asserts pattern is string {
|
|
72
|
+
if (typeof pattern !== 'string' || pattern.length === 0) {
|
|
73
|
+
throw new Error('pattern must be a non-empty string');
|
|
74
|
+
}
|
|
75
|
+
if (pattern.length > MAX_PATTERN_LENGTH) {
|
|
76
|
+
throw new Error(`pattern must be at most ${MAX_PATTERN_LENGTH} characters`);
|
|
77
|
+
}
|
|
78
|
+
if ([...pattern].some(character => {
|
|
79
|
+
const codePoint = character.codePointAt(0) ?? 0;
|
|
80
|
+
return codePoint <= 0x1f || codePoint === 0x7f;
|
|
81
|
+
})) {
|
|
82
|
+
throw new Error('pattern must not contain control characters');
|
|
50
83
|
}
|
|
51
84
|
}
|
|
52
85
|
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
maxResults: number,
|
|
61
|
-
caseSensitive: boolean,
|
|
62
|
-
fileTypes?: string[]
|
|
63
|
-
): any {
|
|
64
|
-
const caseFlag = caseSensitive ? '' : '-i';
|
|
65
|
-
let output = '';
|
|
66
|
-
|
|
67
|
-
try {
|
|
68
|
-
// Try ripgrep first
|
|
69
|
-
let cmd = `rg -n --max-count ${maxResults} ${caseFlag}`;
|
|
86
|
+
function validateFileTypes(value: unknown): string[] {
|
|
87
|
+
if (value === undefined) {
|
|
88
|
+
return [];
|
|
89
|
+
}
|
|
90
|
+
if (!Array.isArray(value) || value.length > MAX_FILE_TYPES) {
|
|
91
|
+
throw new Error(`fileTypes must be an array of at most ${MAX_FILE_TYPES} extensions`);
|
|
92
|
+
}
|
|
70
93
|
|
|
71
|
-
|
|
72
|
-
if (
|
|
73
|
-
|
|
74
|
-
cmd += ` --type-add 'custom:*.${ext}' --type custom`;
|
|
75
|
-
}
|
|
94
|
+
const normalized = value.map((extension, index) => {
|
|
95
|
+
if (typeof extension !== 'string') {
|
|
96
|
+
throw new Error(`fileTypes[${index}] must be a string`);
|
|
76
97
|
}
|
|
98
|
+
const withoutDot = extension.startsWith('.') ? extension.slice(1) : extension;
|
|
99
|
+
if (
|
|
100
|
+
withoutDot.length === 0 ||
|
|
101
|
+
withoutDot.length > MAX_EXTENSION_LENGTH ||
|
|
102
|
+
!/^[A-Za-z0-9][A-Za-z0-9_+-]*$/u.test(withoutDot)
|
|
103
|
+
) {
|
|
104
|
+
throw new Error(
|
|
105
|
+
`fileTypes[${index}] is not a valid file extension (maximum ${MAX_EXTENSION_LENGTH} characters)`
|
|
106
|
+
);
|
|
107
|
+
}
|
|
108
|
+
return withoutDot.toLowerCase();
|
|
109
|
+
});
|
|
77
110
|
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
cmd += ` "${pattern}" "${dir}"`;
|
|
81
|
-
|
|
82
|
-
logger.info(`Executing ripgrep: ${cmd}`);
|
|
83
|
-
output = execSync(cmd, { cwd: dir, timeout: 15000, encoding: 'utf-8' });
|
|
84
|
-
} catch (rgError: any) {
|
|
85
|
-
// Check if rg is not installed (ENOENT)
|
|
86
|
-
if (rgError.code === 'ENOENT' || (rgError.message && rgError.message.includes('ENOENT'))) {
|
|
87
|
-
logger.info('ripgrep not found, falling back to grep');
|
|
88
|
-
|
|
89
|
-
// Fall back to grep
|
|
90
|
-
let grepCmd = `grep -rn ${caseFlag}`;
|
|
91
|
-
|
|
92
|
-
// Add file type includes for grep
|
|
93
|
-
if (fileTypes && fileTypes.length > 0) {
|
|
94
|
-
for (const ext of fileTypes) {
|
|
95
|
-
grepCmd += ` --include="*.${ext}"`;
|
|
96
|
-
}
|
|
97
|
-
}
|
|
98
|
-
|
|
99
|
-
// Exclude common non-source directories
|
|
100
|
-
grepCmd += ` --exclude-dir=.git --exclude-dir=node_modules --exclude-dir=dist`;
|
|
101
|
-
grepCmd += ` "${pattern}" "${dir}"`;
|
|
111
|
+
return [...new Set(normalized)];
|
|
112
|
+
}
|
|
102
113
|
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
throw rgError;
|
|
110
|
-
}
|
|
114
|
+
function validateMaxResults(value: unknown): number {
|
|
115
|
+
if (value === undefined) {
|
|
116
|
+
return DEFAULT_MAX_RESULTS;
|
|
117
|
+
}
|
|
118
|
+
if (!Number.isInteger(value) || (value as number) < 1 || (value as number) > MAX_RESULTS) {
|
|
119
|
+
throw new Error(`maxResults must be an integer between 1 and ${MAX_RESULTS}`);
|
|
111
120
|
}
|
|
121
|
+
return value as number;
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
function isNoMatch(error: ProcessFailure): boolean {
|
|
125
|
+
return error.code === 1 || error.status === 1;
|
|
126
|
+
}
|
|
112
127
|
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
128
|
+
function isCommandMissing(error: ProcessFailure): boolean {
|
|
129
|
+
return error.code === 'ENOENT' || error.message.includes('ENOENT');
|
|
130
|
+
}
|
|
116
131
|
|
|
117
|
-
|
|
118
|
-
|
|
132
|
+
function parseContentMatches(output: string, maxResults: number): {
|
|
133
|
+
matches: Array<{ file: string; line: number; text: string }>;
|
|
134
|
+
totalFound: number;
|
|
135
|
+
truncated: boolean;
|
|
136
|
+
success: true;
|
|
137
|
+
} {
|
|
138
|
+
const lines = output.split('\n').filter(line => line.trim().length > 0);
|
|
139
|
+
const matches = lines.slice(0, maxResults).map(line => {
|
|
119
140
|
const firstColon = line.indexOf(':');
|
|
120
141
|
const secondColon = line.indexOf(':', firstColon + 1);
|
|
121
142
|
|
|
122
|
-
if (firstColon
|
|
143
|
+
if (firstColon < 0 || secondColon < 0) {
|
|
123
144
|
return { file: line, line: 0, text: '' };
|
|
124
145
|
}
|
|
125
146
|
|
|
126
|
-
|
|
127
|
-
const lineNum = parseInt(line.substring(firstColon + 1, secondColon), 10);
|
|
128
|
-
let text = line.substring(secondColon + 1);
|
|
129
|
-
|
|
130
|
-
// Truncate text to 200 chars
|
|
147
|
+
let text = line.slice(secondColon + 1);
|
|
131
148
|
if (text.length > 200) {
|
|
132
|
-
text = text.
|
|
149
|
+
text = `${text.slice(0, 200)}...`;
|
|
133
150
|
}
|
|
134
|
-
|
|
135
|
-
|
|
151
|
+
return {
|
|
152
|
+
file: line.slice(0, firstColon),
|
|
153
|
+
line: Number.parseInt(line.slice(firstColon + 1, secondColon), 10) || 0,
|
|
154
|
+
text
|
|
155
|
+
};
|
|
136
156
|
});
|
|
137
157
|
|
|
138
158
|
return {
|
|
139
159
|
matches,
|
|
140
|
-
totalFound,
|
|
141
|
-
truncated:
|
|
160
|
+
totalFound: lines.length,
|
|
161
|
+
truncated: lines.length > maxResults,
|
|
142
162
|
success: true
|
|
143
163
|
};
|
|
144
164
|
}
|
|
145
165
|
|
|
146
|
-
|
|
147
|
-
* Handle search_files mode: find files by name/glob pattern.
|
|
148
|
-
* Uses the find command to locate files matching the pattern.
|
|
149
|
-
*/
|
|
150
|
-
function handleSearchFiles(
|
|
166
|
+
async function runContentSearch(
|
|
151
167
|
pattern: string,
|
|
152
|
-
|
|
168
|
+
directory: string,
|
|
153
169
|
maxResults: number,
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
170
|
+
caseSensitive: boolean,
|
|
171
|
+
fileTypes: string[]
|
|
172
|
+
): Promise<ReturnType<typeof parseContentMatches>> {
|
|
173
|
+
const rgArgs = [
|
|
174
|
+
'--line-number',
|
|
175
|
+
'--no-heading',
|
|
176
|
+
'--color', 'never',
|
|
177
|
+
'--max-count', String(maxResults),
|
|
178
|
+
...(caseSensitive ? [] : ['--ignore-case']),
|
|
179
|
+
...fileTypes.flatMap(extension => ['--glob', `*.${extension}`]),
|
|
180
|
+
'--glob', '!.git/**',
|
|
181
|
+
'--glob', '!node_modules/**',
|
|
182
|
+
'--glob', '!dist/**',
|
|
183
|
+
'--', pattern, '.'
|
|
184
|
+
];
|
|
185
|
+
|
|
186
|
+
try {
|
|
187
|
+
const result = await execFileAsync('rg', rgArgs, {
|
|
188
|
+
cwd: directory,
|
|
189
|
+
env: buildShellChildEnv(),
|
|
190
|
+
encoding: 'utf-8',
|
|
191
|
+
timeout: 15_000,
|
|
192
|
+
maxBuffer: MAX_SEARCH_OUTPUT_BYTES
|
|
193
|
+
});
|
|
194
|
+
return parseContentMatches(result.stdout, maxResults);
|
|
195
|
+
} catch (rawError) {
|
|
196
|
+
const rgError = rawError as ProcessFailure;
|
|
197
|
+
if (isNoMatch(rgError)) {
|
|
198
|
+
return parseContentMatches('', maxResults);
|
|
199
|
+
}
|
|
200
|
+
if (!isCommandMissing(rgError)) {
|
|
201
|
+
throw rgError;
|
|
202
|
+
}
|
|
164
203
|
}
|
|
165
204
|
|
|
166
|
-
|
|
205
|
+
const grepArgs = [
|
|
206
|
+
'--recursive',
|
|
207
|
+
'--line-number',
|
|
208
|
+
'--binary-files=without-match',
|
|
209
|
+
...(caseSensitive ? [] : ['--ignore-case']),
|
|
210
|
+
...fileTypes.map(extension => `--include=*.${extension}`),
|
|
211
|
+
'--exclude-dir=.git',
|
|
212
|
+
'--exclude-dir=node_modules',
|
|
213
|
+
'--exclude-dir=dist',
|
|
214
|
+
'--', pattern, '.'
|
|
215
|
+
];
|
|
167
216
|
|
|
168
|
-
let output = '';
|
|
169
217
|
try {
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
218
|
+
const result = await execFileAsync('grep', grepArgs, {
|
|
219
|
+
cwd: directory,
|
|
220
|
+
env: buildShellChildEnv(),
|
|
221
|
+
encoding: 'utf-8',
|
|
222
|
+
timeout: 15_000,
|
|
223
|
+
maxBuffer: MAX_SEARCH_OUTPUT_BYTES
|
|
224
|
+
});
|
|
225
|
+
return parseContentMatches(result.stdout, maxResults);
|
|
226
|
+
} catch (rawError) {
|
|
227
|
+
const grepError = rawError as ProcessFailure;
|
|
228
|
+
if (isNoMatch(grepError)) {
|
|
229
|
+
return parseContentMatches('', maxResults);
|
|
177
230
|
}
|
|
231
|
+
throw grepError;
|
|
178
232
|
}
|
|
233
|
+
}
|
|
179
234
|
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
235
|
+
async function searchFiles(
|
|
236
|
+
pattern: string,
|
|
237
|
+
directory: string,
|
|
238
|
+
maxResults: number,
|
|
239
|
+
caseSensitive: boolean,
|
|
240
|
+
fileTypes: string[]
|
|
241
|
+
): Promise<{ files: string[]; totalFound: number; truncated: boolean; success: true }> {
|
|
242
|
+
// Compiled without a regular expression: a pattern cannot make matching
|
|
243
|
+
// backtrack for seconds per entry while this walk holds the event loop.
|
|
244
|
+
const matcher = createGlobMatcher(pattern, caseSensitive);
|
|
245
|
+
const extensionSet = new Set(fileTypes);
|
|
246
|
+
const files: string[] = [];
|
|
247
|
+
const pending: Array<{ absolutePath: string; relativePath: string; depth: number }> = [
|
|
248
|
+
{ absolutePath: directory, relativePath: '', depth: 0 }
|
|
249
|
+
];
|
|
250
|
+
let totalFound = 0;
|
|
251
|
+
let scannedEntries = 0;
|
|
252
|
+
let scanLimitReached = false;
|
|
253
|
+
|
|
254
|
+
while (pending.length > 0) {
|
|
255
|
+
const current = pending.pop()!;
|
|
256
|
+
const entries = await fs.readdir(current.absolutePath, { withFileTypes: true });
|
|
257
|
+
|
|
258
|
+
for (const entry of entries) {
|
|
259
|
+
scannedEntries += 1;
|
|
260
|
+
if (scannedEntries > MAX_SCANNED_ENTRIES) {
|
|
261
|
+
scanLimitReached = true;
|
|
262
|
+
pending.length = 0;
|
|
263
|
+
break;
|
|
264
|
+
}
|
|
265
|
+
|
|
266
|
+
const relativePath = current.relativePath
|
|
267
|
+
? `${current.relativePath}/${entry.name}`
|
|
268
|
+
: entry.name;
|
|
269
|
+
|
|
270
|
+
if (entry.isSymbolicLink()) {
|
|
271
|
+
continue;
|
|
272
|
+
}
|
|
273
|
+
if (entry.isDirectory()) {
|
|
274
|
+
if (
|
|
275
|
+
!EXCLUDED_DIRECTORIES.has(entry.name) &&
|
|
276
|
+
current.depth < MAX_DIRECTORY_DEPTH
|
|
277
|
+
) {
|
|
278
|
+
pending.push({
|
|
279
|
+
absolutePath: path.join(current.absolutePath, entry.name),
|
|
280
|
+
relativePath,
|
|
281
|
+
depth: current.depth + 1
|
|
282
|
+
});
|
|
283
|
+
}
|
|
284
|
+
continue;
|
|
285
|
+
}
|
|
286
|
+
if (!entry.isFile()) {
|
|
287
|
+
continue;
|
|
288
|
+
}
|
|
289
|
+
|
|
290
|
+
const extension = path.extname(entry.name).slice(1).toLowerCase();
|
|
291
|
+
const extensionMatches = extensionSet.size === 0 || extensionSet.has(extension);
|
|
292
|
+
// A pattern with a separator addresses the path under the search
|
|
293
|
+
// directory; one without addresses the file name.
|
|
294
|
+
const patternMatches = matcher.test(matcher.matchesPath ? relativePath : entry.name);
|
|
295
|
+
if (!extensionMatches || !patternMatches) {
|
|
296
|
+
continue;
|
|
297
|
+
}
|
|
298
|
+
|
|
299
|
+
totalFound += 1;
|
|
300
|
+
if (files.length < maxResults) {
|
|
301
|
+
files.push(relativePath);
|
|
302
|
+
}
|
|
303
|
+
}
|
|
304
|
+
}
|
|
183
305
|
|
|
184
306
|
return {
|
|
185
307
|
files,
|
|
186
308
|
totalFound,
|
|
187
|
-
truncated: totalFound > maxResults,
|
|
309
|
+
truncated: scanLimitReached || totalFound > maxResults,
|
|
188
310
|
success: true
|
|
189
311
|
};
|
|
190
312
|
}
|
|
191
313
|
|
|
192
|
-
/**
|
|
193
|
-
* Search for files or content within the working directory.
|
|
194
|
-
* Two modes: search_content (grep for patterns in file contents) and search_files (find files by name/glob).
|
|
195
|
-
*/
|
|
196
314
|
export const search_project_tool = {
|
|
197
315
|
name: 'search_project',
|
|
198
|
-
description: 'Search for files or content
|
|
316
|
+
description: 'Search for files or content under MXF_WORKSPACE_ROOT without invoking a shell.',
|
|
199
317
|
enabled: true,
|
|
200
318
|
executionSide: 'either' as const,
|
|
201
319
|
inputSchema: {
|
|
@@ -204,26 +322,32 @@ export const search_project_tool = {
|
|
|
204
322
|
mode: {
|
|
205
323
|
type: 'string',
|
|
206
324
|
enum: ['search_content', 'search_files'],
|
|
207
|
-
description: 'search_content
|
|
325
|
+
description: 'search_content searches file contents; search_files finds filenames'
|
|
208
326
|
},
|
|
209
327
|
pattern: {
|
|
210
328
|
type: 'string',
|
|
211
|
-
|
|
329
|
+
minLength: 1,
|
|
330
|
+
maxLength: MAX_PATTERN_LENGTH,
|
|
331
|
+
description: 'Regular expression for content search, or a glob for filename search: ' +
|
|
332
|
+
'* within one segment, ? for one character, ** as a whole segment for any depth ' +
|
|
333
|
+
`(at most ${MAX_GLOB_WILDCARDS} wildcards)`
|
|
212
334
|
},
|
|
213
335
|
workingDirectory: {
|
|
214
336
|
type: 'string',
|
|
215
|
-
description: 'Directory
|
|
337
|
+
description: 'Directory under MXF_WORKSPACE_ROOT (defaults to MXF_WORKSPACE_ROOT)'
|
|
216
338
|
},
|
|
217
339
|
fileTypes: {
|
|
218
340
|
type: 'array',
|
|
219
|
-
|
|
220
|
-
|
|
341
|
+
maxItems: MAX_FILE_TYPES,
|
|
342
|
+
items: { type: 'string', minLength: 1, maxLength: MAX_EXTENSION_LENGTH + 1 },
|
|
343
|
+
description: "File extensions to filter (for example ['ts', 'js'])"
|
|
221
344
|
},
|
|
222
345
|
maxResults: {
|
|
223
|
-
type: '
|
|
224
|
-
description:
|
|
225
|
-
default:
|
|
226
|
-
|
|
346
|
+
type: 'integer',
|
|
347
|
+
description: `Maximum results to return (default: ${DEFAULT_MAX_RESULTS}, max: ${MAX_RESULTS})`,
|
|
348
|
+
default: DEFAULT_MAX_RESULTS,
|
|
349
|
+
minimum: 1,
|
|
350
|
+
maximum: MAX_RESULTS
|
|
227
351
|
},
|
|
228
352
|
caseSensitive: {
|
|
229
353
|
type: 'boolean',
|
|
@@ -246,34 +370,51 @@ export const search_project_tool = {
|
|
|
246
370
|
],
|
|
247
371
|
metadata: {
|
|
248
372
|
category: 'search',
|
|
249
|
-
timeout:
|
|
373
|
+
timeout: 15_000
|
|
250
374
|
},
|
|
251
375
|
|
|
252
|
-
async handler(input:
|
|
376
|
+
async handler(input: SearchProjectInput): Promise<unknown> {
|
|
253
377
|
try {
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
validatePattern(pattern);
|
|
258
|
-
|
|
259
|
-
const
|
|
260
|
-
|
|
261
|
-
|
|
378
|
+
if (input.mode !== 'search_content' && input.mode !== 'search_files') {
|
|
379
|
+
throw new Error('mode must be search_content or search_files');
|
|
380
|
+
}
|
|
381
|
+
validatePattern(input.pattern);
|
|
382
|
+
const fileTypes = validateFileTypes(input.fileTypes);
|
|
383
|
+
const maxResults = validateMaxResults(input.maxResults);
|
|
384
|
+
if (input.caseSensitive !== undefined && typeof input.caseSensitive !== 'boolean') {
|
|
385
|
+
throw new Error('caseSensitive must be a boolean');
|
|
386
|
+
}
|
|
262
387
|
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
388
|
+
const directory = resolveWorkspacePath(
|
|
389
|
+
input.workingDirectory,
|
|
390
|
+
'search_project workingDirectory'
|
|
391
|
+
);
|
|
392
|
+
const stat = await fs.stat(directory);
|
|
393
|
+
if (!stat.isDirectory()) {
|
|
394
|
+
throw new Error('search_project workingDirectory must be a directory');
|
|
267
395
|
}
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
396
|
+
|
|
397
|
+
return input.mode === 'search_content'
|
|
398
|
+
? await runContentSearch(
|
|
399
|
+
input.pattern,
|
|
400
|
+
directory,
|
|
401
|
+
maxResults,
|
|
402
|
+
input.caseSensitive ?? false,
|
|
403
|
+
fileTypes
|
|
404
|
+
)
|
|
405
|
+
: await searchFiles(
|
|
406
|
+
input.pattern,
|
|
407
|
+
directory,
|
|
408
|
+
maxResults,
|
|
409
|
+
input.caseSensitive ?? false,
|
|
410
|
+
fileTypes
|
|
411
|
+
);
|
|
412
|
+
} catch (error) {
|
|
413
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
414
|
+
logger.error('search_project failed', { error: message });
|
|
415
|
+
return { error: message, success: false };
|
|
274
416
|
}
|
|
275
417
|
}
|
|
276
418
|
};
|
|
277
419
|
|
|
278
|
-
/** Exported array of search project tools for registration */
|
|
279
420
|
export const searchProjectTools = [search_project_tool];
|