@juspay/neurolink 9.5.3 → 9.7.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/CHANGELOG.md +16 -0
- package/README.md +29 -25
- package/dist/adapters/video/vertexVideoHandler.js +3 -3
- package/dist/agent/directTools.d.ts +5 -5
- package/dist/cli/commands/config.d.ts +9 -9
- package/dist/cli/commands/serve.d.ts +37 -0
- package/dist/cli/commands/serve.js +302 -229
- package/dist/cli/commands/setup-anthropic.d.ts +2 -2
- package/dist/cli/commands/setup-azure.d.ts +2 -2
- package/dist/cli/commands/setup-bedrock.d.ts +2 -2
- package/dist/cli/commands/setup-gcp.d.ts +2 -2
- package/dist/cli/commands/setup-google-ai.d.ts +2 -2
- package/dist/cli/commands/setup-huggingface.d.ts +2 -2
- package/dist/cli/commands/setup-mistral.d.ts +2 -2
- package/dist/cli/commands/setup-openai.d.ts +2 -2
- package/dist/cli/commands/setup.d.ts +2 -2
- package/dist/cli/factories/commandFactory.js +16 -2
- package/dist/cli/loop/optionsSchema.d.ts +2 -2
- package/dist/cli/loop/optionsSchema.js +4 -0
- package/dist/cli/loop/session.d.ts +4 -0
- package/dist/cli/loop/session.js +49 -4
- package/dist/cli/utils/interactiveSetup.d.ts +4 -4
- package/dist/config/conversationMemory.d.ts +2 -0
- package/dist/config/conversationMemory.js +5 -5
- package/dist/constants/contextWindows.d.ts +46 -0
- package/dist/constants/contextWindows.js +156 -0
- package/dist/context/budgetChecker.d.ts +18 -0
- package/dist/context/budgetChecker.js +71 -0
- package/dist/context/contextCompactor.d.ts +22 -0
- package/dist/context/contextCompactor.js +106 -0
- package/dist/context/effectiveHistory.d.ts +52 -0
- package/dist/context/effectiveHistory.js +105 -0
- package/dist/context/errorDetection.d.ts +14 -0
- package/dist/context/errorDetection.js +124 -0
- package/dist/context/fileSummarizationService.d.ts +54 -0
- package/dist/context/fileSummarizationService.js +255 -0
- package/dist/context/fileSummarizer.d.ts +56 -0
- package/dist/context/fileSummarizer.js +145 -0
- package/dist/context/fileTokenBudget.d.ts +53 -0
- package/dist/context/fileTokenBudget.js +127 -0
- package/dist/context/prompts/summarizationPrompt.d.ts +17 -0
- package/dist/context/prompts/summarizationPrompt.js +110 -0
- package/dist/context/stages/fileReadDeduplicator.d.ts +10 -0
- package/dist/context/stages/fileReadDeduplicator.js +66 -0
- package/dist/context/stages/slidingWindowTruncator.d.ts +11 -0
- package/dist/context/stages/slidingWindowTruncator.js +42 -0
- package/dist/context/stages/structuredSummarizer.d.ts +10 -0
- package/dist/context/stages/structuredSummarizer.js +49 -0
- package/dist/context/stages/toolOutputPruner.d.ts +10 -0
- package/dist/context/stages/toolOutputPruner.js +52 -0
- package/dist/context/summarizationEngine.d.ts +45 -0
- package/dist/context/summarizationEngine.js +110 -0
- package/dist/context/toolOutputLimits.d.ts +17 -0
- package/dist/context/toolOutputLimits.js +84 -0
- package/dist/context/toolPairRepair.d.ts +16 -0
- package/dist/context/toolPairRepair.js +66 -0
- package/dist/core/analytics.js +11 -4
- package/dist/core/baseProvider.d.ts +6 -0
- package/dist/core/baseProvider.js +83 -14
- package/dist/core/conversationMemoryManager.d.ts +14 -11
- package/dist/core/conversationMemoryManager.js +36 -68
- package/dist/core/dynamicModels.js +3 -2
- package/dist/core/modules/GenerationHandler.js +2 -0
- package/dist/core/modules/MessageBuilder.d.ts +1 -1
- package/dist/core/modules/MessageBuilder.js +2 -0
- package/dist/core/modules/TelemetryHandler.d.ts +2 -3
- package/dist/core/modules/TelemetryHandler.js +3 -3
- package/dist/core/modules/ToolsManager.d.ts +2 -2
- package/dist/core/redisConversationMemoryManager.d.ts +19 -14
- package/dist/core/redisConversationMemoryManager.js +94 -86
- package/dist/factories/providerFactory.d.ts +2 -2
- package/dist/files/fileReferenceRegistry.d.ts +276 -0
- package/dist/files/fileReferenceRegistry.js +1543 -0
- package/dist/files/fileTools.d.ts +423 -0
- package/dist/files/fileTools.js +449 -0
- package/dist/files/index.d.ts +14 -0
- package/dist/files/index.js +13 -0
- package/dist/files/streamingReader.d.ts +93 -0
- package/dist/files/streamingReader.js +321 -0
- package/dist/files/types.d.ts +23 -0
- package/dist/files/types.js +23 -0
- package/dist/image-gen/imageGenTools.d.ts +2 -2
- package/dist/image-gen/types.d.ts +12 -12
- package/dist/index.d.ts +4 -0
- package/dist/index.js +5 -0
- package/dist/lib/adapters/video/vertexVideoHandler.js +3 -3
- package/dist/lib/agent/directTools.d.ts +7 -7
- package/dist/lib/config/conversationMemory.d.ts +2 -0
- package/dist/lib/config/conversationMemory.js +5 -5
- package/dist/lib/constants/contextWindows.d.ts +46 -0
- package/dist/lib/constants/contextWindows.js +157 -0
- package/dist/lib/context/budgetChecker.d.ts +18 -0
- package/dist/lib/context/budgetChecker.js +72 -0
- package/dist/lib/context/contextCompactor.d.ts +22 -0
- package/dist/lib/context/contextCompactor.js +107 -0
- package/dist/lib/context/effectiveHistory.d.ts +52 -0
- package/dist/lib/context/effectiveHistory.js +106 -0
- package/dist/lib/context/errorDetection.d.ts +14 -0
- package/dist/lib/context/errorDetection.js +125 -0
- package/dist/lib/context/fileSummarizationService.d.ts +54 -0
- package/dist/lib/context/fileSummarizationService.js +256 -0
- package/dist/lib/context/fileSummarizer.d.ts +56 -0
- package/dist/lib/context/fileSummarizer.js +146 -0
- package/dist/lib/context/fileTokenBudget.d.ts +53 -0
- package/dist/lib/context/fileTokenBudget.js +128 -0
- package/dist/lib/context/prompts/summarizationPrompt.d.ts +17 -0
- package/dist/lib/context/prompts/summarizationPrompt.js +111 -0
- package/dist/lib/context/stages/fileReadDeduplicator.d.ts +10 -0
- package/dist/lib/context/stages/fileReadDeduplicator.js +67 -0
- package/dist/lib/context/stages/slidingWindowTruncator.d.ts +11 -0
- package/dist/lib/context/stages/slidingWindowTruncator.js +43 -0
- package/dist/lib/context/stages/structuredSummarizer.d.ts +10 -0
- package/dist/lib/context/stages/structuredSummarizer.js +50 -0
- package/dist/lib/context/stages/toolOutputPruner.d.ts +10 -0
- package/dist/lib/context/stages/toolOutputPruner.js +53 -0
- package/dist/lib/context/summarizationEngine.d.ts +45 -0
- package/dist/lib/context/summarizationEngine.js +111 -0
- package/dist/lib/context/toolOutputLimits.d.ts +17 -0
- package/dist/lib/context/toolOutputLimits.js +85 -0
- package/dist/lib/context/toolPairRepair.d.ts +16 -0
- package/dist/lib/context/toolPairRepair.js +67 -0
- package/dist/lib/core/analytics.js +11 -4
- package/dist/lib/core/baseProvider.d.ts +6 -0
- package/dist/lib/core/baseProvider.js +83 -14
- package/dist/lib/core/conversationMemoryManager.d.ts +14 -11
- package/dist/lib/core/conversationMemoryManager.js +36 -68
- package/dist/lib/core/dynamicModels.js +3 -2
- package/dist/lib/core/modules/GenerationHandler.js +2 -0
- package/dist/lib/core/modules/MessageBuilder.d.ts +1 -1
- package/dist/lib/core/modules/MessageBuilder.js +2 -0
- package/dist/lib/core/modules/TelemetryHandler.d.ts +2 -3
- package/dist/lib/core/modules/TelemetryHandler.js +3 -3
- package/dist/lib/core/modules/ToolsManager.d.ts +2 -2
- package/dist/lib/core/redisConversationMemoryManager.d.ts +19 -14
- package/dist/lib/core/redisConversationMemoryManager.js +94 -86
- package/dist/lib/factories/providerFactory.d.ts +2 -2
- package/dist/lib/files/fileReferenceRegistry.d.ts +276 -0
- package/dist/lib/files/fileReferenceRegistry.js +1544 -0
- package/dist/lib/files/fileTools.d.ts +423 -0
- package/dist/lib/files/fileTools.js +450 -0
- package/dist/lib/files/index.d.ts +14 -0
- package/dist/lib/files/index.js +14 -0
- package/dist/lib/files/streamingReader.d.ts +93 -0
- package/dist/lib/files/streamingReader.js +322 -0
- package/dist/lib/files/types.d.ts +23 -0
- package/dist/lib/files/types.js +24 -0
- package/dist/lib/image-gen/imageGenTools.d.ts +2 -2
- package/dist/lib/image-gen/types.d.ts +12 -12
- package/dist/lib/index.d.ts +4 -0
- package/dist/lib/index.js +5 -0
- package/dist/lib/mcp/httpRetryHandler.js +6 -2
- package/dist/lib/memory/mem0Initializer.d.ts +2 -2
- package/dist/lib/neurolink.d.ts +66 -2
- package/dist/lib/neurolink.js +777 -315
- package/dist/lib/processors/archive/ArchiveProcessor.d.ts +327 -0
- package/dist/lib/processors/archive/ArchiveProcessor.js +1309 -0
- package/dist/lib/processors/archive/index.d.ts +33 -0
- package/dist/lib/processors/archive/index.js +43 -0
- package/dist/lib/processors/base/BaseFileProcessor.js +2 -1
- package/dist/lib/processors/base/types.d.ts +70 -64
- package/dist/lib/processors/base/types.js +6 -0
- package/dist/lib/processors/cli/fileProcessorCli.d.ts +8 -8
- package/dist/lib/processors/cli/fileProcessorCli.js +5 -5
- package/dist/lib/processors/config/mimeTypes.js +25 -0
- package/dist/lib/processors/config/sizeLimits.d.ts +52 -40
- package/dist/lib/processors/config/sizeLimits.js +56 -44
- package/dist/lib/processors/document/ExcelProcessor.d.ts +14 -0
- package/dist/lib/processors/document/ExcelProcessor.js +72 -1
- package/dist/lib/processors/document/PptxProcessor.d.ts +63 -0
- package/dist/lib/processors/document/PptxProcessor.js +158 -0
- package/dist/lib/processors/document/index.d.ts +1 -0
- package/dist/lib/processors/document/index.js +6 -0
- package/dist/lib/processors/errors/FileErrorCode.d.ts +2 -2
- package/dist/lib/processors/errors/errorHelpers.d.ts +2 -2
- package/dist/lib/processors/errors/errorHelpers.js +12 -4
- package/dist/lib/processors/errors/errorSerializer.d.ts +4 -4
- package/dist/lib/processors/index.d.ts +8 -2
- package/dist/lib/processors/index.js +5 -2
- package/dist/lib/processors/integration/FileProcessorIntegration.d.ts +8 -8
- package/dist/lib/processors/integration/FileProcessorIntegration.js +7 -7
- package/dist/lib/processors/media/AudioProcessor.d.ts +328 -0
- package/dist/lib/processors/media/AudioProcessor.js +708 -0
- package/dist/lib/processors/media/VideoProcessor.d.ts +350 -0
- package/dist/lib/processors/media/VideoProcessor.js +992 -0
- package/dist/lib/processors/media/index.d.ts +27 -0
- package/dist/lib/processors/media/index.js +37 -0
- package/dist/lib/processors/registry/ProcessorRegistry.d.ts +19 -5
- package/dist/lib/processors/registry/ProcessorRegistry.js +103 -8
- package/dist/lib/processors/registry/index.d.ts +1 -1
- package/dist/lib/processors/registry/index.js +1 -1
- package/dist/lib/processors/registry/types.d.ts +2 -2
- package/dist/lib/providers/amazonBedrock.js +2 -1
- package/dist/lib/providers/anthropic.js +2 -2
- package/dist/lib/providers/anthropicBaseProvider.js +10 -4
- package/dist/lib/providers/azureOpenai.js +14 -25
- package/dist/lib/providers/googleAiStudio.js +136 -457
- package/dist/lib/providers/googleNativeGemini3.d.ts +119 -0
- package/dist/lib/providers/googleNativeGemini3.js +264 -0
- package/dist/lib/providers/googleVertex.d.ts +15 -1
- package/dist/lib/providers/googleVertex.js +341 -775
- package/dist/lib/providers/huggingFace.js +20 -5
- package/dist/lib/providers/litellm.js +6 -4
- package/dist/lib/providers/mistral.js +3 -2
- package/dist/lib/providers/openAI.js +2 -2
- package/dist/lib/providers/openRouter.js +8 -7
- package/dist/lib/providers/openaiCompatible.js +10 -4
- package/dist/lib/providers/sagemaker/detection.d.ts +6 -6
- package/dist/lib/providers/sagemaker/diagnostics.d.ts +4 -4
- package/dist/lib/providers/sagemaker/parsers.d.ts +4 -4
- package/dist/lib/rag/chunkers/RecursiveChunker.js +2 -2
- package/dist/lib/rag/document/loaders.d.ts +6 -71
- package/dist/lib/rag/document/loaders.js +5 -5
- package/dist/lib/rag/graphRag/graphRAG.js +26 -9
- package/dist/lib/rag/metadata/MetadataExtractorFactory.d.ts +5 -55
- package/dist/lib/rag/metadata/metadataExtractor.js +6 -3
- package/dist/lib/rag/pipeline/RAGPipeline.d.ts +8 -126
- package/dist/lib/rag/pipeline/RAGPipeline.js +11 -11
- package/dist/lib/rag/pipeline/contextAssembly.d.ts +3 -42
- package/dist/lib/rag/pipeline/contextAssembly.js +6 -3
- package/dist/lib/rag/reranker/RerankerFactory.d.ts +5 -60
- package/dist/lib/rag/resilience/CircuitBreaker.d.ts +3 -33
- package/dist/lib/rag/resilience/RetryHandler.d.ts +2 -21
- package/dist/lib/rag/resilience/RetryHandler.js +6 -2
- package/dist/lib/rag/retrieval/hybridSearch.d.ts +3 -41
- package/dist/lib/rag/retrieval/vectorQueryTool.d.ts +2 -13
- package/dist/lib/rag/retrieval/vectorQueryTool.js +4 -3
- package/dist/lib/rag/types.d.ts +3 -3
- package/dist/lib/sdk/toolRegistration.d.ts +2 -2
- package/dist/lib/server/middleware/cache.d.ts +2 -2
- package/dist/lib/server/middleware/rateLimit.d.ts +2 -2
- package/dist/lib/server/routes/mcpRoutes.js +277 -249
- package/dist/lib/server/routes/memoryRoutes.js +287 -281
- package/dist/lib/server/utils/validation.d.ts +10 -10
- package/dist/lib/services/server/ai/observability/instrumentation.d.ts +24 -2
- package/dist/lib/services/server/ai/observability/instrumentation.js +12 -1
- package/dist/lib/session/globalSessionState.d.ts +2 -2
- package/dist/lib/telemetry/telemetryService.d.ts +2 -2
- package/dist/lib/types/common.d.ts +39 -0
- package/dist/lib/types/contextTypes.d.ts +255 -0
- package/dist/lib/types/contextTypes.js +0 -2
- package/dist/lib/types/conversation.d.ts +62 -0
- package/dist/lib/types/conversationMemoryInterface.d.ts +27 -0
- package/dist/lib/types/conversationMemoryInterface.js +7 -0
- package/dist/lib/types/fileReferenceTypes.d.ts +222 -0
- package/dist/lib/types/fileReferenceTypes.js +9 -0
- package/dist/lib/types/fileTypes.d.ts +26 -3
- package/dist/lib/types/generateTypes.d.ts +50 -1
- package/dist/lib/types/index.d.ts +4 -5
- package/dist/lib/types/index.js +8 -10
- package/dist/lib/types/modelTypes.d.ts +2 -2
- package/dist/lib/types/processorTypes.d.ts +597 -0
- package/dist/lib/types/processorTypes.js +91 -0
- package/dist/lib/types/ragTypes.d.ts +489 -0
- package/dist/lib/types/ragTypes.js +8 -0
- package/dist/lib/types/sdkTypes.d.ts +17 -18
- package/dist/lib/types/streamTypes.d.ts +24 -1
- package/dist/lib/utils/async/retry.d.ts +2 -2
- package/dist/lib/utils/async/withTimeout.js +3 -1
- package/dist/lib/utils/conversationMemory.d.ts +12 -6
- package/dist/lib/utils/conversationMemory.js +91 -36
- package/dist/lib/utils/errorHandling.d.ts +5 -0
- package/dist/lib/utils/errorHandling.js +19 -0
- package/dist/lib/utils/fileDetector.d.ts +62 -0
- package/dist/lib/utils/fileDetector.js +1014 -14
- package/dist/lib/utils/json/safeParse.d.ts +2 -2
- package/dist/lib/utils/messageBuilder.js +806 -153
- package/dist/lib/utils/modelChoices.d.ts +2 -2
- package/dist/lib/utils/multimodalOptionsBuilder.d.ts +2 -1
- package/dist/lib/utils/multimodalOptionsBuilder.js +1 -0
- package/dist/lib/utils/pricing.d.ts +12 -0
- package/dist/lib/utils/pricing.js +134 -0
- package/dist/lib/utils/rateLimiter.d.ts +2 -2
- package/dist/lib/utils/redis.d.ts +17 -0
- package/dist/lib/utils/redis.js +105 -0
- package/dist/lib/utils/sanitizers/filename.d.ts +4 -4
- package/dist/lib/utils/sanitizers/svg.d.ts +2 -2
- package/dist/lib/utils/thinkingConfig.d.ts +6 -6
- package/dist/lib/utils/timeout.d.ts +10 -0
- package/dist/lib/utils/timeout.js +15 -0
- package/dist/lib/utils/tokenEstimation.d.ts +68 -0
- package/dist/lib/utils/tokenEstimation.js +113 -0
- package/dist/lib/utils/tokenUtils.d.ts +4 -4
- package/dist/lib/utils/ttsProcessor.d.ts +2 -2
- package/dist/lib/workflow/config.d.ts +150 -150
- package/dist/mcp/httpRetryHandler.js +6 -2
- package/dist/memory/mem0Initializer.d.ts +2 -2
- package/dist/neurolink.d.ts +66 -2
- package/dist/neurolink.js +777 -315
- package/dist/processors/archive/ArchiveProcessor.d.ts +327 -0
- package/dist/processors/archive/ArchiveProcessor.js +1308 -0
- package/dist/processors/archive/index.d.ts +33 -0
- package/dist/processors/archive/index.js +42 -0
- package/dist/processors/base/BaseFileProcessor.js +2 -1
- package/dist/processors/base/types.d.ts +70 -64
- package/dist/processors/base/types.js +6 -0
- package/dist/processors/cli/fileProcessorCli.d.ts +8 -8
- package/dist/processors/cli/fileProcessorCli.js +5 -5
- package/dist/processors/config/mimeTypes.js +25 -0
- package/dist/processors/config/sizeLimits.d.ts +52 -40
- package/dist/processors/config/sizeLimits.js +56 -44
- package/dist/processors/document/ExcelProcessor.d.ts +14 -0
- package/dist/processors/document/ExcelProcessor.js +72 -1
- package/dist/processors/document/PptxProcessor.d.ts +63 -0
- package/dist/processors/document/PptxProcessor.js +157 -0
- package/dist/processors/document/index.d.ts +1 -0
- package/dist/processors/document/index.js +6 -0
- package/dist/processors/errors/FileErrorCode.d.ts +2 -2
- package/dist/processors/errors/errorHelpers.d.ts +2 -2
- package/dist/processors/errors/errorHelpers.js +12 -4
- package/dist/processors/errors/errorSerializer.d.ts +4 -4
- package/dist/processors/index.d.ts +8 -2
- package/dist/processors/index.js +5 -2
- package/dist/processors/integration/FileProcessorIntegration.d.ts +8 -8
- package/dist/processors/integration/FileProcessorIntegration.js +7 -7
- package/dist/processors/media/AudioProcessor.d.ts +328 -0
- package/dist/processors/media/AudioProcessor.js +707 -0
- package/dist/processors/media/VideoProcessor.d.ts +350 -0
- package/dist/processors/media/VideoProcessor.js +991 -0
- package/dist/processors/media/ffprobe-static.d.ts +4 -0
- package/dist/processors/media/index.d.ts +27 -0
- package/dist/processors/media/index.js +36 -0
- package/dist/processors/registry/ProcessorRegistry.d.ts +19 -5
- package/dist/processors/registry/ProcessorRegistry.js +103 -8
- package/dist/processors/registry/index.d.ts +1 -1
- package/dist/processors/registry/index.js +1 -1
- package/dist/processors/registry/types.d.ts +2 -2
- package/dist/providers/amazonBedrock.js +2 -1
- package/dist/providers/anthropic.js +2 -2
- package/dist/providers/anthropicBaseProvider.js +10 -4
- package/dist/providers/azureOpenai.js +14 -25
- package/dist/providers/googleAiStudio.js +136 -457
- package/dist/providers/googleNativeGemini3.d.ts +119 -0
- package/dist/providers/googleNativeGemini3.js +263 -0
- package/dist/providers/googleVertex.d.ts +15 -1
- package/dist/providers/googleVertex.js +341 -775
- package/dist/providers/huggingFace.js +20 -5
- package/dist/providers/litellm.js +6 -4
- package/dist/providers/mistral.js +3 -2
- package/dist/providers/openAI.js +2 -2
- package/dist/providers/openRouter.js +8 -7
- package/dist/providers/openaiCompatible.js +10 -4
- package/dist/providers/sagemaker/detection.d.ts +6 -6
- package/dist/providers/sagemaker/diagnostics.d.ts +4 -4
- package/dist/providers/sagemaker/parsers.d.ts +4 -4
- package/dist/rag/chunkers/RecursiveChunker.js +2 -2
- package/dist/rag/document/loaders.d.ts +6 -71
- package/dist/rag/document/loaders.js +5 -5
- package/dist/rag/graphRag/graphRAG.js +26 -9
- package/dist/rag/metadata/MetadataExtractorFactory.d.ts +5 -55
- package/dist/rag/metadata/metadataExtractor.js +6 -3
- package/dist/rag/pipeline/RAGPipeline.d.ts +8 -126
- package/dist/rag/pipeline/RAGPipeline.js +11 -11
- package/dist/rag/pipeline/contextAssembly.d.ts +3 -42
- package/dist/rag/pipeline/contextAssembly.js +6 -3
- package/dist/rag/reranker/RerankerFactory.d.ts +5 -60
- package/dist/rag/resilience/CircuitBreaker.d.ts +3 -33
- package/dist/rag/resilience/RetryHandler.d.ts +2 -21
- package/dist/rag/resilience/RetryHandler.js +6 -2
- package/dist/rag/retrieval/hybridSearch.d.ts +3 -41
- package/dist/rag/retrieval/vectorQueryTool.d.ts +2 -13
- package/dist/rag/retrieval/vectorQueryTool.js +4 -3
- package/dist/rag/types.d.ts +3 -3
- package/dist/sdk/toolRegistration.d.ts +2 -2
- package/dist/server/middleware/cache.d.ts +2 -2
- package/dist/server/middleware/rateLimit.d.ts +2 -2
- package/dist/server/routes/mcpRoutes.js +277 -249
- package/dist/server/routes/memoryRoutes.js +287 -281
- package/dist/server/utils/validation.d.ts +4 -4
- package/dist/services/server/ai/observability/instrumentation.d.ts +24 -2
- package/dist/services/server/ai/observability/instrumentation.js +12 -1
- package/dist/session/globalSessionState.d.ts +2 -2
- package/dist/telemetry/telemetryService.d.ts +2 -2
- package/dist/types/common.d.ts +39 -0
- package/dist/types/contextTypes.d.ts +255 -0
- package/dist/types/contextTypes.js +0 -2
- package/dist/types/conversation.d.ts +62 -0
- package/dist/types/conversationMemoryInterface.d.ts +27 -0
- package/dist/types/conversationMemoryInterface.js +6 -0
- package/dist/types/fileReferenceTypes.d.ts +222 -0
- package/dist/types/fileReferenceTypes.js +8 -0
- package/dist/types/fileTypes.d.ts +26 -3
- package/dist/types/generateTypes.d.ts +50 -1
- package/dist/types/index.d.ts +4 -5
- package/dist/types/index.js +8 -10
- package/dist/types/processorTypes.d.ts +597 -0
- package/dist/types/processorTypes.js +90 -0
- package/dist/types/ragTypes.d.ts +489 -0
- package/dist/types/ragTypes.js +7 -0
- package/dist/types/sdkTypes.d.ts +17 -18
- package/dist/types/streamTypes.d.ts +24 -1
- package/dist/utils/async/retry.d.ts +2 -2
- package/dist/utils/async/withTimeout.js +3 -1
- package/dist/utils/conversationMemory.d.ts +12 -6
- package/dist/utils/conversationMemory.js +91 -36
- package/dist/utils/errorHandling.d.ts +5 -0
- package/dist/utils/errorHandling.js +19 -0
- package/dist/utils/fileDetector.d.ts +62 -0
- package/dist/utils/fileDetector.js +1014 -14
- package/dist/utils/json/safeParse.d.ts +2 -2
- package/dist/utils/messageBuilder.js +806 -153
- package/dist/utils/modelChoices.d.ts +2 -2
- package/dist/utils/multimodalOptionsBuilder.d.ts +2 -1
- package/dist/utils/multimodalOptionsBuilder.js +1 -0
- package/dist/utils/pricing.d.ts +12 -0
- package/dist/utils/pricing.js +133 -0
- package/dist/utils/rateLimiter.d.ts +2 -2
- package/dist/utils/redis.d.ts +17 -0
- package/dist/utils/redis.js +105 -0
- package/dist/utils/sanitizers/filename.d.ts +4 -4
- package/dist/utils/sanitizers/svg.d.ts +2 -2
- package/dist/utils/thinkingConfig.d.ts +6 -6
- package/dist/utils/timeout.d.ts +10 -0
- package/dist/utils/timeout.js +15 -0
- package/dist/utils/tokenEstimation.d.ts +68 -0
- package/dist/utils/tokenEstimation.js +112 -0
- package/dist/utils/tokenUtils.d.ts +4 -4
- package/dist/utils/ttsProcessor.d.ts +2 -2
- package/dist/workflow/config.d.ts +104 -104
- package/package.json +18 -6
- package/dist/lib/utils/conversationMemoryUtils.d.ts +0 -25
- package/dist/lib/utils/conversationMemoryUtils.js +0 -138
- package/dist/utils/conversationMemoryUtils.d.ts +0 -25
- package/dist/utils/conversationMemoryUtils.js +0 -137
|
@@ -11,6 +11,276 @@ const MCPToolExecuteParamsSchema = z.object({
|
|
|
11
11
|
name: z.string().min(1, "Server name is required"),
|
|
12
12
|
toolName: z.string().min(1, "Tool name is required"),
|
|
13
13
|
});
|
|
14
|
+
/**
|
|
15
|
+
* Handler: List all MCP servers
|
|
16
|
+
*/
|
|
17
|
+
async function handleListServers(ctx) {
|
|
18
|
+
const manager = ctx.externalServerManager;
|
|
19
|
+
if (!manager) {
|
|
20
|
+
return {
|
|
21
|
+
servers: [],
|
|
22
|
+
total: 0,
|
|
23
|
+
message: "External server manager not available",
|
|
24
|
+
metadata: {
|
|
25
|
+
timestamp: new Date().toISOString(),
|
|
26
|
+
requestId: ctx.requestId,
|
|
27
|
+
},
|
|
28
|
+
};
|
|
29
|
+
}
|
|
30
|
+
const serverInfos = manager.listServers();
|
|
31
|
+
const statuses = manager.getServerStatuses();
|
|
32
|
+
// Create a map of statuses by serverId for quick lookup
|
|
33
|
+
const statusMap = new Map(statuses.map((s) => [s.serverId, s]));
|
|
34
|
+
const servers = serverInfos.map((info) => {
|
|
35
|
+
const status = statusMap.get(info.name);
|
|
36
|
+
return {
|
|
37
|
+
serverId: info.name,
|
|
38
|
+
name: info.name,
|
|
39
|
+
status: status?.status || "disconnected",
|
|
40
|
+
toolCount: status?.toolCount || 0,
|
|
41
|
+
lastHealthCheck: status?.checkedAt?.toISOString(),
|
|
42
|
+
error: status?.issues?.[0],
|
|
43
|
+
};
|
|
44
|
+
});
|
|
45
|
+
return {
|
|
46
|
+
servers,
|
|
47
|
+
total: servers.length,
|
|
48
|
+
metadata: {
|
|
49
|
+
timestamp: new Date().toISOString(),
|
|
50
|
+
requestId: ctx.requestId,
|
|
51
|
+
},
|
|
52
|
+
};
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* Handler: Get MCP server status
|
|
56
|
+
*/
|
|
57
|
+
async function handleGetServer(ctx) {
|
|
58
|
+
// Validate params
|
|
59
|
+
const paramValidation = validateParams(ServerNameParamSchema, ctx.params, ctx.requestId);
|
|
60
|
+
if (!paramValidation.success) {
|
|
61
|
+
return paramValidation.error;
|
|
62
|
+
}
|
|
63
|
+
const { name } = paramValidation.data;
|
|
64
|
+
const manager = ctx.externalServerManager;
|
|
65
|
+
if (!manager) {
|
|
66
|
+
return createErrorResponse("MCP_UNAVAILABLE", "External server manager not available", undefined, ctx.requestId);
|
|
67
|
+
}
|
|
68
|
+
const serverInfos = manager.listServers();
|
|
69
|
+
const serverInfo = serverInfos.find((s) => s.name === name);
|
|
70
|
+
if (!serverInfo) {
|
|
71
|
+
return createErrorResponse("SERVER_NOT_FOUND", `MCP server '${name}' not found`, undefined, ctx.requestId);
|
|
72
|
+
}
|
|
73
|
+
const statuses = manager.getServerStatuses();
|
|
74
|
+
const status = statuses.find((s) => s.serverId === name);
|
|
75
|
+
// Get tools for this server
|
|
76
|
+
const tools = await ctx.toolRegistry.listTools();
|
|
77
|
+
const serverTools = tools.filter((t) => t.source === name);
|
|
78
|
+
return {
|
|
79
|
+
serverId: name,
|
|
80
|
+
name,
|
|
81
|
+
status: status?.status || "disconnected",
|
|
82
|
+
toolCount: status?.toolCount || 0,
|
|
83
|
+
tools: serverTools.map((t) => ({
|
|
84
|
+
name: t.name,
|
|
85
|
+
description: t.description,
|
|
86
|
+
})),
|
|
87
|
+
lastHealthCheck: status?.checkedAt?.toISOString(),
|
|
88
|
+
error: status?.issues?.[0],
|
|
89
|
+
metadata: {
|
|
90
|
+
timestamp: new Date().toISOString(),
|
|
91
|
+
requestId: ctx.requestId,
|
|
92
|
+
},
|
|
93
|
+
};
|
|
94
|
+
}
|
|
95
|
+
/**
|
|
96
|
+
* Handler: Reconnect to an MCP server
|
|
97
|
+
*/
|
|
98
|
+
async function handleReconnectServer(ctx) {
|
|
99
|
+
// Validate params
|
|
100
|
+
const paramValidation = validateParams(ServerNameParamSchema, ctx.params, ctx.requestId);
|
|
101
|
+
if (!paramValidation.success) {
|
|
102
|
+
return paramValidation.error;
|
|
103
|
+
}
|
|
104
|
+
const { name } = paramValidation.data;
|
|
105
|
+
const manager = ctx.externalServerManager;
|
|
106
|
+
if (!manager) {
|
|
107
|
+
return createErrorResponse("MCP_UNAVAILABLE", "External server manager not available", undefined, ctx.requestId);
|
|
108
|
+
}
|
|
109
|
+
try {
|
|
110
|
+
// To reconnect, we need to get the existing config and re-add
|
|
111
|
+
const serverInfos = manager.listServers();
|
|
112
|
+
const serverInfo = serverInfos.find((s) => s.name === name);
|
|
113
|
+
if (!serverInfo) {
|
|
114
|
+
return createErrorResponse("SERVER_NOT_FOUND", `Server '${name}' not found`, undefined, ctx.requestId);
|
|
115
|
+
}
|
|
116
|
+
// Note: Full reconnect would require storing config
|
|
117
|
+
// For now, return the current status
|
|
118
|
+
const statuses = manager.getServerStatuses();
|
|
119
|
+
const status = statuses.find((s) => s.serverId === name);
|
|
120
|
+
return {
|
|
121
|
+
success: true,
|
|
122
|
+
server: {
|
|
123
|
+
serverId: name,
|
|
124
|
+
name,
|
|
125
|
+
status: status?.status || "disconnected",
|
|
126
|
+
toolCount: status?.toolCount || 0,
|
|
127
|
+
},
|
|
128
|
+
message: "Server status retrieved (full reconnect requires server restart)",
|
|
129
|
+
metadata: {
|
|
130
|
+
timestamp: new Date().toISOString(),
|
|
131
|
+
requestId: ctx.requestId,
|
|
132
|
+
},
|
|
133
|
+
};
|
|
134
|
+
}
|
|
135
|
+
catch (error) {
|
|
136
|
+
return createErrorResponse("RECONNECT_FAILED", error instanceof Error ? error.message : String(error), undefined, ctx.requestId);
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
/**
|
|
140
|
+
* Handler: Remove an MCP server
|
|
141
|
+
*/
|
|
142
|
+
async function handleRemoveServer(ctx) {
|
|
143
|
+
// Validate params
|
|
144
|
+
const paramValidation = validateParams(ServerNameParamSchema, ctx.params, ctx.requestId);
|
|
145
|
+
if (!paramValidation.success) {
|
|
146
|
+
return paramValidation.error;
|
|
147
|
+
}
|
|
148
|
+
const { name } = paramValidation.data;
|
|
149
|
+
const manager = ctx.externalServerManager;
|
|
150
|
+
if (!manager) {
|
|
151
|
+
return createErrorResponse("MCP_UNAVAILABLE", "External server manager not available", undefined, ctx.requestId);
|
|
152
|
+
}
|
|
153
|
+
try {
|
|
154
|
+
const result = await manager.removeServer(name);
|
|
155
|
+
if (!result.success) {
|
|
156
|
+
return createErrorResponse("REMOVE_FAILED", result.error || "Failed to remove server", undefined, ctx.requestId);
|
|
157
|
+
}
|
|
158
|
+
return {
|
|
159
|
+
success: true,
|
|
160
|
+
message: `Server '${name}' removed`,
|
|
161
|
+
metadata: {
|
|
162
|
+
timestamp: new Date().toISOString(),
|
|
163
|
+
requestId: ctx.requestId,
|
|
164
|
+
},
|
|
165
|
+
};
|
|
166
|
+
}
|
|
167
|
+
catch (error) {
|
|
168
|
+
return createErrorResponse("REMOVE_FAILED", error instanceof Error ? error.message : String(error), undefined, ctx.requestId);
|
|
169
|
+
}
|
|
170
|
+
}
|
|
171
|
+
/**
|
|
172
|
+
* Handler: List tools from a specific MCP server
|
|
173
|
+
*/
|
|
174
|
+
async function handleListServerTools(ctx) {
|
|
175
|
+
// Validate params
|
|
176
|
+
const paramValidation = validateParams(ServerNameParamSchema, ctx.params, ctx.requestId);
|
|
177
|
+
if (!paramValidation.success) {
|
|
178
|
+
return paramValidation.error;
|
|
179
|
+
}
|
|
180
|
+
const { name } = paramValidation.data;
|
|
181
|
+
// Get tools from this specific server
|
|
182
|
+
const tools = await ctx.toolRegistry.listTools();
|
|
183
|
+
const serverTools = tools.filter((t) => t.source === name);
|
|
184
|
+
if (serverTools.length === 0) {
|
|
185
|
+
// Check if server exists
|
|
186
|
+
const manager = ctx.externalServerManager;
|
|
187
|
+
if (manager) {
|
|
188
|
+
const serverInfos = manager.listServers();
|
|
189
|
+
const serverInfo = serverInfos.find((s) => s.name === name);
|
|
190
|
+
if (!serverInfo) {
|
|
191
|
+
return createErrorResponse("SERVER_NOT_FOUND", `MCP server '${name}' not found`, undefined, ctx.requestId);
|
|
192
|
+
}
|
|
193
|
+
}
|
|
194
|
+
}
|
|
195
|
+
return {
|
|
196
|
+
serverId: name,
|
|
197
|
+
tools: serverTools.map((tool) => ({
|
|
198
|
+
name: tool.name,
|
|
199
|
+
description: tool.description,
|
|
200
|
+
inputSchema: tool.inputSchema,
|
|
201
|
+
})),
|
|
202
|
+
total: serverTools.length,
|
|
203
|
+
metadata: {
|
|
204
|
+
timestamp: new Date().toISOString(),
|
|
205
|
+
requestId: ctx.requestId,
|
|
206
|
+
},
|
|
207
|
+
};
|
|
208
|
+
}
|
|
209
|
+
/**
|
|
210
|
+
* Handler: Execute a tool from a specific MCP server
|
|
211
|
+
*/
|
|
212
|
+
async function handleExecuteTool(ctx) {
|
|
213
|
+
// Validate params
|
|
214
|
+
const paramValidation = validateParams(MCPToolExecuteParamsSchema, ctx.params, ctx.requestId);
|
|
215
|
+
if (!paramValidation.success) {
|
|
216
|
+
return paramValidation.error;
|
|
217
|
+
}
|
|
218
|
+
const { name, toolName } = paramValidation.data;
|
|
219
|
+
// Validate body (tool arguments)
|
|
220
|
+
const bodyValidation = validateRequest(ToolArgumentsSchema, ctx.body || {}, ctx.requestId);
|
|
221
|
+
if (!bodyValidation.success) {
|
|
222
|
+
return bodyValidation.error;
|
|
223
|
+
}
|
|
224
|
+
const args = bodyValidation.data;
|
|
225
|
+
const startTime = Date.now();
|
|
226
|
+
try {
|
|
227
|
+
// Verify tool exists for this server
|
|
228
|
+
const tools = await ctx.toolRegistry.listTools();
|
|
229
|
+
const tool = tools.find((t) => t.name === toolName && t.source === name);
|
|
230
|
+
if (!tool) {
|
|
231
|
+
return createErrorResponse("TOOL_NOT_FOUND", `Tool '${toolName}' not found on server '${name}'`, undefined, ctx.requestId);
|
|
232
|
+
}
|
|
233
|
+
// Execute the tool
|
|
234
|
+
const result = await ctx.toolRegistry.executeTool(toolName, args);
|
|
235
|
+
return {
|
|
236
|
+
success: true,
|
|
237
|
+
data: result,
|
|
238
|
+
duration: Date.now() - startTime,
|
|
239
|
+
metadata: {
|
|
240
|
+
server: name,
|
|
241
|
+
toolName,
|
|
242
|
+
timestamp: new Date().toISOString(),
|
|
243
|
+
requestId: ctx.requestId,
|
|
244
|
+
},
|
|
245
|
+
};
|
|
246
|
+
}
|
|
247
|
+
catch (error) {
|
|
248
|
+
return createErrorResponse("EXECUTION_FAILED", error instanceof Error ? error.message : String(error), { duration: Date.now() - startTime }, ctx.requestId);
|
|
249
|
+
}
|
|
250
|
+
}
|
|
251
|
+
/**
|
|
252
|
+
* Handler: Health check for all MCP servers
|
|
253
|
+
*/
|
|
254
|
+
async function handleMCPHealth(ctx) {
|
|
255
|
+
const manager = ctx.externalServerManager;
|
|
256
|
+
if (!manager) {
|
|
257
|
+
return {
|
|
258
|
+
healthy: false,
|
|
259
|
+
message: "External server manager not available",
|
|
260
|
+
servers: [],
|
|
261
|
+
};
|
|
262
|
+
}
|
|
263
|
+
const statuses = manager.getServerStatuses();
|
|
264
|
+
const serverStatuses = statuses.map((s) => ({
|
|
265
|
+
name: s.serverId,
|
|
266
|
+
healthy: s.isHealthy,
|
|
267
|
+
error: s.issues?.[0],
|
|
268
|
+
}));
|
|
269
|
+
const allHealthy = serverStatuses.every((s) => s.healthy);
|
|
270
|
+
const someHealthy = serverStatuses.some((s) => s.healthy);
|
|
271
|
+
return {
|
|
272
|
+
healthy: serverStatuses.length === 0 || allHealthy,
|
|
273
|
+
status: serverStatuses.length === 0
|
|
274
|
+
? "no_servers"
|
|
275
|
+
: allHealthy
|
|
276
|
+
? "all_healthy"
|
|
277
|
+
: someHealthy
|
|
278
|
+
? "degraded"
|
|
279
|
+
: "unhealthy",
|
|
280
|
+
servers: serverStatuses,
|
|
281
|
+
timestamp: new Date().toISOString(),
|
|
282
|
+
};
|
|
283
|
+
}
|
|
14
284
|
/**
|
|
15
285
|
* Create MCP server management routes
|
|
16
286
|
*/
|
|
@@ -21,291 +291,49 @@ export function createMCPRoutes(basePath = "/api") {
|
|
|
21
291
|
{
|
|
22
292
|
method: "GET",
|
|
23
293
|
path: `${basePath}/mcp/servers`,
|
|
24
|
-
handler:
|
|
25
|
-
const manager = ctx.externalServerManager;
|
|
26
|
-
if (!manager) {
|
|
27
|
-
return {
|
|
28
|
-
servers: [],
|
|
29
|
-
total: 0,
|
|
30
|
-
message: "External server manager not available",
|
|
31
|
-
metadata: {
|
|
32
|
-
timestamp: new Date().toISOString(),
|
|
33
|
-
requestId: ctx.requestId,
|
|
34
|
-
},
|
|
35
|
-
};
|
|
36
|
-
}
|
|
37
|
-
const serverInfos = manager.listServers();
|
|
38
|
-
const statuses = manager.getServerStatuses();
|
|
39
|
-
// Create a map of statuses by serverId for quick lookup
|
|
40
|
-
const statusMap = new Map(statuses.map((s) => [s.serverId, s]));
|
|
41
|
-
const servers = serverInfos.map((info) => {
|
|
42
|
-
const status = statusMap.get(info.name);
|
|
43
|
-
return {
|
|
44
|
-
serverId: info.name,
|
|
45
|
-
name: info.name,
|
|
46
|
-
status: status?.status || "disconnected",
|
|
47
|
-
toolCount: status?.toolCount || 0,
|
|
48
|
-
lastHealthCheck: status?.checkedAt?.toISOString(),
|
|
49
|
-
error: status?.issues?.[0],
|
|
50
|
-
};
|
|
51
|
-
});
|
|
52
|
-
return {
|
|
53
|
-
servers,
|
|
54
|
-
total: servers.length,
|
|
55
|
-
metadata: {
|
|
56
|
-
timestamp: new Date().toISOString(),
|
|
57
|
-
requestId: ctx.requestId,
|
|
58
|
-
},
|
|
59
|
-
};
|
|
60
|
-
},
|
|
294
|
+
handler: handleListServers,
|
|
61
295
|
description: "List all MCP servers",
|
|
62
296
|
tags: ["mcp"],
|
|
63
297
|
},
|
|
64
298
|
{
|
|
65
299
|
method: "GET",
|
|
66
300
|
path: `${basePath}/mcp/servers/:name`,
|
|
67
|
-
handler:
|
|
68
|
-
// Validate params
|
|
69
|
-
const paramValidation = validateParams(ServerNameParamSchema, ctx.params, ctx.requestId);
|
|
70
|
-
if (!paramValidation.success) {
|
|
71
|
-
return paramValidation.error;
|
|
72
|
-
}
|
|
73
|
-
const { name } = paramValidation.data;
|
|
74
|
-
const manager = ctx.externalServerManager;
|
|
75
|
-
if (!manager) {
|
|
76
|
-
return createErrorResponse("MCP_UNAVAILABLE", "External server manager not available", undefined, ctx.requestId);
|
|
77
|
-
}
|
|
78
|
-
const serverInfos = manager.listServers();
|
|
79
|
-
const serverInfo = serverInfos.find((s) => s.name === name);
|
|
80
|
-
if (!serverInfo) {
|
|
81
|
-
return createErrorResponse("SERVER_NOT_FOUND", `MCP server '${name}' not found`, undefined, ctx.requestId);
|
|
82
|
-
}
|
|
83
|
-
const statuses = manager.getServerStatuses();
|
|
84
|
-
const status = statuses.find((s) => s.serverId === name);
|
|
85
|
-
// Get tools for this server
|
|
86
|
-
const tools = await ctx.toolRegistry.listTools();
|
|
87
|
-
const serverTools = tools.filter((t) => t.source === name);
|
|
88
|
-
return {
|
|
89
|
-
serverId: name,
|
|
90
|
-
name,
|
|
91
|
-
status: status?.status || "disconnected",
|
|
92
|
-
toolCount: status?.toolCount || 0,
|
|
93
|
-
tools: serverTools.map((t) => ({
|
|
94
|
-
name: t.name,
|
|
95
|
-
description: t.description,
|
|
96
|
-
})),
|
|
97
|
-
lastHealthCheck: status?.checkedAt?.toISOString(),
|
|
98
|
-
error: status?.issues?.[0],
|
|
99
|
-
metadata: {
|
|
100
|
-
timestamp: new Date().toISOString(),
|
|
101
|
-
requestId: ctx.requestId,
|
|
102
|
-
},
|
|
103
|
-
};
|
|
104
|
-
},
|
|
301
|
+
handler: handleGetServer,
|
|
105
302
|
description: "Get MCP server status",
|
|
106
303
|
tags: ["mcp"],
|
|
107
304
|
},
|
|
108
305
|
{
|
|
109
306
|
method: "POST",
|
|
110
307
|
path: `${basePath}/mcp/servers/:name/reconnect`,
|
|
111
|
-
handler:
|
|
112
|
-
// Validate params
|
|
113
|
-
const paramValidation = validateParams(ServerNameParamSchema, ctx.params, ctx.requestId);
|
|
114
|
-
if (!paramValidation.success) {
|
|
115
|
-
return paramValidation.error;
|
|
116
|
-
}
|
|
117
|
-
const { name } = paramValidation.data;
|
|
118
|
-
const manager = ctx.externalServerManager;
|
|
119
|
-
if (!manager) {
|
|
120
|
-
return createErrorResponse("MCP_UNAVAILABLE", "External server manager not available", undefined, ctx.requestId);
|
|
121
|
-
}
|
|
122
|
-
try {
|
|
123
|
-
// To reconnect, we need to get the existing config and re-add
|
|
124
|
-
const serverInfos = manager.listServers();
|
|
125
|
-
const serverInfo = serverInfos.find((s) => s.name === name);
|
|
126
|
-
if (!serverInfo) {
|
|
127
|
-
return createErrorResponse("SERVER_NOT_FOUND", `Server '${name}' not found`, undefined, ctx.requestId);
|
|
128
|
-
}
|
|
129
|
-
// Note: Full reconnect would require storing config
|
|
130
|
-
// For now, return the current status
|
|
131
|
-
const statuses = manager.getServerStatuses();
|
|
132
|
-
const status = statuses.find((s) => s.serverId === name);
|
|
133
|
-
return {
|
|
134
|
-
success: true,
|
|
135
|
-
server: {
|
|
136
|
-
serverId: name,
|
|
137
|
-
name,
|
|
138
|
-
status: status?.status || "disconnected",
|
|
139
|
-
toolCount: status?.toolCount || 0,
|
|
140
|
-
},
|
|
141
|
-
message: "Server status retrieved (full reconnect requires server restart)",
|
|
142
|
-
metadata: {
|
|
143
|
-
timestamp: new Date().toISOString(),
|
|
144
|
-
requestId: ctx.requestId,
|
|
145
|
-
},
|
|
146
|
-
};
|
|
147
|
-
}
|
|
148
|
-
catch (error) {
|
|
149
|
-
return createErrorResponse("RECONNECT_FAILED", error instanceof Error ? error.message : String(error), undefined, ctx.requestId);
|
|
150
|
-
}
|
|
151
|
-
},
|
|
308
|
+
handler: handleReconnectServer,
|
|
152
309
|
description: "Reconnect to an MCP server",
|
|
153
310
|
tags: ["mcp"],
|
|
154
311
|
},
|
|
155
312
|
{
|
|
156
313
|
method: "DELETE",
|
|
157
314
|
path: `${basePath}/mcp/servers/:name`,
|
|
158
|
-
handler:
|
|
159
|
-
// Validate params
|
|
160
|
-
const paramValidation = validateParams(ServerNameParamSchema, ctx.params, ctx.requestId);
|
|
161
|
-
if (!paramValidation.success) {
|
|
162
|
-
return paramValidation.error;
|
|
163
|
-
}
|
|
164
|
-
const { name } = paramValidation.data;
|
|
165
|
-
const manager = ctx.externalServerManager;
|
|
166
|
-
if (!manager) {
|
|
167
|
-
return createErrorResponse("MCP_UNAVAILABLE", "External server manager not available", undefined, ctx.requestId);
|
|
168
|
-
}
|
|
169
|
-
try {
|
|
170
|
-
const result = await manager.removeServer(name);
|
|
171
|
-
if (!result.success) {
|
|
172
|
-
return createErrorResponse("REMOVE_FAILED", result.error || "Failed to remove server", undefined, ctx.requestId);
|
|
173
|
-
}
|
|
174
|
-
return {
|
|
175
|
-
success: true,
|
|
176
|
-
message: `Server '${name}' removed`,
|
|
177
|
-
metadata: {
|
|
178
|
-
timestamp: new Date().toISOString(),
|
|
179
|
-
requestId: ctx.requestId,
|
|
180
|
-
},
|
|
181
|
-
};
|
|
182
|
-
}
|
|
183
|
-
catch (error) {
|
|
184
|
-
return createErrorResponse("REMOVE_FAILED", error instanceof Error ? error.message : String(error), undefined, ctx.requestId);
|
|
185
|
-
}
|
|
186
|
-
},
|
|
315
|
+
handler: handleRemoveServer,
|
|
187
316
|
description: "Remove an MCP server",
|
|
188
317
|
tags: ["mcp"],
|
|
189
318
|
},
|
|
190
319
|
{
|
|
191
320
|
method: "GET",
|
|
192
321
|
path: `${basePath}/mcp/servers/:name/tools`,
|
|
193
|
-
handler:
|
|
194
|
-
// Validate params
|
|
195
|
-
const paramValidation = validateParams(ServerNameParamSchema, ctx.params, ctx.requestId);
|
|
196
|
-
if (!paramValidation.success) {
|
|
197
|
-
return paramValidation.error;
|
|
198
|
-
}
|
|
199
|
-
const { name } = paramValidation.data;
|
|
200
|
-
// Get tools from this specific server
|
|
201
|
-
const tools = await ctx.toolRegistry.listTools();
|
|
202
|
-
const serverTools = tools.filter((t) => t.source === name);
|
|
203
|
-
if (serverTools.length === 0) {
|
|
204
|
-
// Check if server exists
|
|
205
|
-
const manager = ctx.externalServerManager;
|
|
206
|
-
if (manager) {
|
|
207
|
-
const serverInfos = manager.listServers();
|
|
208
|
-
const serverInfo = serverInfos.find((s) => s.name === name);
|
|
209
|
-
if (!serverInfo) {
|
|
210
|
-
return createErrorResponse("SERVER_NOT_FOUND", `MCP server '${name}' not found`, undefined, ctx.requestId);
|
|
211
|
-
}
|
|
212
|
-
}
|
|
213
|
-
}
|
|
214
|
-
return {
|
|
215
|
-
serverId: name,
|
|
216
|
-
tools: serverTools.map((tool) => ({
|
|
217
|
-
name: tool.name,
|
|
218
|
-
description: tool.description,
|
|
219
|
-
inputSchema: tool.inputSchema,
|
|
220
|
-
})),
|
|
221
|
-
total: serverTools.length,
|
|
222
|
-
metadata: {
|
|
223
|
-
timestamp: new Date().toISOString(),
|
|
224
|
-
requestId: ctx.requestId,
|
|
225
|
-
},
|
|
226
|
-
};
|
|
227
|
-
},
|
|
322
|
+
handler: handleListServerTools,
|
|
228
323
|
description: "List tools from a specific MCP server",
|
|
229
324
|
tags: ["mcp", "tools"],
|
|
230
325
|
},
|
|
231
326
|
{
|
|
232
327
|
method: "POST",
|
|
233
328
|
path: `${basePath}/mcp/servers/:name/tools/:toolName/execute`,
|
|
234
|
-
handler:
|
|
235
|
-
// Validate params
|
|
236
|
-
const paramValidation = validateParams(MCPToolExecuteParamsSchema, ctx.params, ctx.requestId);
|
|
237
|
-
if (!paramValidation.success) {
|
|
238
|
-
return paramValidation.error;
|
|
239
|
-
}
|
|
240
|
-
const { name, toolName } = paramValidation.data;
|
|
241
|
-
// Validate body (tool arguments)
|
|
242
|
-
const bodyValidation = validateRequest(ToolArgumentsSchema, ctx.body || {}, ctx.requestId);
|
|
243
|
-
if (!bodyValidation.success) {
|
|
244
|
-
return bodyValidation.error;
|
|
245
|
-
}
|
|
246
|
-
const args = bodyValidation.data;
|
|
247
|
-
const startTime = Date.now();
|
|
248
|
-
try {
|
|
249
|
-
// Verify tool exists for this server
|
|
250
|
-
const tools = await ctx.toolRegistry.listTools();
|
|
251
|
-
const tool = tools.find((t) => t.name === toolName && t.source === name);
|
|
252
|
-
if (!tool) {
|
|
253
|
-
return createErrorResponse("TOOL_NOT_FOUND", `Tool '${toolName}' not found on server '${name}'`, undefined, ctx.requestId);
|
|
254
|
-
}
|
|
255
|
-
// Execute the tool
|
|
256
|
-
const result = await ctx.toolRegistry.executeTool(toolName, args);
|
|
257
|
-
return {
|
|
258
|
-
success: true,
|
|
259
|
-
data: result,
|
|
260
|
-
duration: Date.now() - startTime,
|
|
261
|
-
metadata: {
|
|
262
|
-
server: name,
|
|
263
|
-
toolName,
|
|
264
|
-
timestamp: new Date().toISOString(),
|
|
265
|
-
requestId: ctx.requestId,
|
|
266
|
-
},
|
|
267
|
-
};
|
|
268
|
-
}
|
|
269
|
-
catch (error) {
|
|
270
|
-
return createErrorResponse("EXECUTION_FAILED", error instanceof Error ? error.message : String(error), { duration: Date.now() - startTime }, ctx.requestId);
|
|
271
|
-
}
|
|
272
|
-
},
|
|
329
|
+
handler: handleExecuteTool,
|
|
273
330
|
description: "Execute a tool from a specific MCP server",
|
|
274
331
|
tags: ["mcp", "tools"],
|
|
275
332
|
},
|
|
276
333
|
{
|
|
277
334
|
method: "GET",
|
|
278
335
|
path: `${basePath}/mcp/health`,
|
|
279
|
-
handler:
|
|
280
|
-
const manager = ctx.externalServerManager;
|
|
281
|
-
if (!manager) {
|
|
282
|
-
return {
|
|
283
|
-
healthy: false,
|
|
284
|
-
message: "External server manager not available",
|
|
285
|
-
servers: [],
|
|
286
|
-
};
|
|
287
|
-
}
|
|
288
|
-
const statuses = manager.getServerStatuses();
|
|
289
|
-
const serverStatuses = statuses.map((s) => ({
|
|
290
|
-
name: s.serverId,
|
|
291
|
-
healthy: s.isHealthy,
|
|
292
|
-
error: s.issues?.[0],
|
|
293
|
-
}));
|
|
294
|
-
const allHealthy = serverStatuses.every((s) => s.healthy);
|
|
295
|
-
const someHealthy = serverStatuses.some((s) => s.healthy);
|
|
296
|
-
return {
|
|
297
|
-
healthy: serverStatuses.length === 0 || allHealthy,
|
|
298
|
-
status: serverStatuses.length === 0
|
|
299
|
-
? "no_servers"
|
|
300
|
-
: allHealthy
|
|
301
|
-
? "all_healthy"
|
|
302
|
-
: someHealthy
|
|
303
|
-
? "degraded"
|
|
304
|
-
: "unhealthy",
|
|
305
|
-
servers: serverStatuses,
|
|
306
|
-
timestamp: new Date().toISOString(),
|
|
307
|
-
};
|
|
308
|
-
},
|
|
336
|
+
handler: handleMCPHealth,
|
|
309
337
|
description: "Health check for all MCP servers",
|
|
310
338
|
tags: ["mcp", "health"],
|
|
311
339
|
},
|