@juspay/neurolink 9.32.0 → 9.33.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 +12 -0
- package/dist/auth/anthropicOAuth.js +1 -1
- package/dist/cli/commands/proxy.js +18 -5
- package/dist/client/aiSdkAdapter.js +1 -1
- package/dist/client/index.js +137 -501
- package/dist/core/factory.js +0 -1
- package/dist/core/redisConversationMemoryManager.js +1 -1
- package/dist/features/ppt/slideGenerator.js +0 -1
- package/dist/features/ppt/utils.js +0 -1
- package/dist/lib/neurolink.d.ts +10 -0
- package/dist/lib/neurolink.js +41 -7
- package/dist/lib/server/routes/claudeProxyRoutes.js +45 -9
- package/dist/lib/types/generateTypes.d.ts +16 -0
- package/dist/lib/types/streamTypes.d.ts +15 -0
- package/dist/mcp/elicitationProtocol.js +1 -1
- package/dist/mcp/servers/agent/directToolsServer.js +0 -1
- package/dist/neurolink.d.ts +10 -0
- package/dist/neurolink.js +41 -7
- package/dist/providers/azureOpenai.js +1 -1
- package/dist/providers/huggingFace.js +0 -1
- package/dist/providers/openaiCompatible.js +0 -1
- package/dist/sdk/toolRegistration.js +0 -1
- package/dist/server/openapi/generator.js +1 -1
- package/dist/server/routes/claudeProxyRoutes.js +45 -9
- package/dist/types/configTypes.js +0 -5
- package/dist/types/generateTypes.d.ts +16 -0
- package/dist/types/modelTypes.js +0 -1
- package/dist/types/streamTypes.d.ts +15 -0
- package/dist/types/tools.js +0 -1
- package/dist/types/typeAliases.js +0 -1
- package/dist/types/utilities.js +1 -1
- package/dist/types/workflowTypes.js +0 -1
- package/dist/utils/providerRetry.js +0 -1
- package/dist/utils/providerUtils.js +0 -1
- package/package.json +2 -2
- package/dist/client/adapters/providerImageAdapter.js +0 -588
- package/dist/client/adapters/tts/googleTTSHandler.js +0 -344
- package/dist/client/adapters/video/directorPipeline.js +0 -516
- package/dist/client/adapters/video/ffmpegAdapter.js +0 -206
- package/dist/client/adapters/video/frameExtractor.js +0 -143
- package/dist/client/adapters/video/vertexVideoHandler.js +0 -763
- package/dist/client/adapters/video/videoAnalyzer.js +0 -238
- package/dist/client/adapters/video/videoMerger.js +0 -171
- package/dist/client/agent/directTools.js +0 -840
- package/dist/client/auth/AuthProviderFactory.js +0 -111
- package/dist/client/auth/AuthProviderRegistry.js +0 -190
- package/dist/client/auth/RequestContext.js +0 -78
- package/dist/client/auth/accountPool.js +0 -178
- package/dist/client/auth/anthropicOAuth.js +0 -974
- package/dist/client/auth/authContext.js +0 -314
- package/dist/client/auth/errors.js +0 -39
- package/dist/client/auth/index.js +0 -61
- package/dist/client/auth/middleware/AuthMiddleware.js +0 -519
- package/dist/client/auth/middleware/rateLimitByUser.js +0 -554
- package/dist/client/auth/providers/BaseAuthProvider.js +0 -723
- package/dist/client/auth/providers/CognitoProvider.js +0 -304
- package/dist/client/auth/providers/KeycloakProvider.js +0 -393
- package/dist/client/auth/providers/auth0.js +0 -274
- package/dist/client/auth/providers/betterAuth.js +0 -182
- package/dist/client/auth/providers/clerk.js +0 -317
- package/dist/client/auth/providers/custom.js +0 -112
- package/dist/client/auth/providers/firebase.js +0 -226
- package/dist/client/auth/providers/jwt.js +0 -212
- package/dist/client/auth/providers/oauth2.js +0 -303
- package/dist/client/auth/providers/supabase.js +0 -259
- package/dist/client/auth/providers/workos.js +0 -284
- package/dist/client/auth/serverBridge.js +0 -25
- package/dist/client/auth/sessionManager.js +0 -437
- package/dist/client/auth/tokenStore.js +0 -799
- package/dist/client/client/aiSdkAdapter.js +0 -487
- package/dist/client/client/auth.js +0 -473
- package/dist/client/client/errors.js +0 -552
- package/dist/client/client/httpClient.js +0 -837
- package/dist/client/client/index.js +0 -172
- package/dist/client/client/interceptors.js +0 -601
- package/dist/client/client/sseClient.js +0 -545
- package/dist/client/client/streamingClient.js +0 -917
- package/dist/client/client/wsClient.js +0 -369
- package/dist/client/config/configManager.js +0 -303
- package/dist/client/config/conversationMemory.js +0 -86
- package/dist/client/config/taskClassificationConfig.js +0 -148
- package/dist/client/constants/contextWindows.js +0 -295
- package/dist/client/constants/enums.js +0 -853
- package/dist/client/constants/index.js +0 -207
- package/dist/client/constants/performance.js +0 -389
- package/dist/client/constants/retry.js +0 -266
- package/dist/client/constants/timeouts.js +0 -182
- package/dist/client/constants/tokens.js +0 -380
- package/dist/client/constants/videoErrors.js +0 -46
- package/dist/client/context/budgetChecker.js +0 -98
- package/dist/client/context/contextCompactor.js +0 -205
- package/dist/client/context/emergencyTruncation.js +0 -88
- package/dist/client/context/errorDetection.js +0 -171
- package/dist/client/context/errors.js +0 -21
- package/dist/client/context/fileTokenBudget.js +0 -127
- package/dist/client/context/prompts/summarizationPrompt.js +0 -117
- package/dist/client/context/stages/fileReadDeduplicator.js +0 -66
- package/dist/client/context/stages/slidingWindowTruncator.js +0 -190
- package/dist/client/context/stages/structuredSummarizer.js +0 -99
- package/dist/client/context/stages/toolOutputPruner.js +0 -52
- package/dist/client/context/summarizationEngine.js +0 -136
- package/dist/client/context/toolOutputLimits.js +0 -78
- package/dist/client/context/toolPairRepair.js +0 -66
- package/dist/client/core/analytics.js +0 -88
- package/dist/client/core/baseProvider.js +0 -1385
- package/dist/client/core/constants.js +0 -140
- package/dist/client/core/conversationMemoryFactory.js +0 -141
- package/dist/client/core/conversationMemoryInitializer.js +0 -128
- package/dist/client/core/conversationMemoryManager.js +0 -344
- package/dist/client/core/dynamicModels.js +0 -358
- package/dist/client/core/evaluation.js +0 -309
- package/dist/client/core/evaluationProviders.js +0 -248
- package/dist/client/core/factory.js +0 -412
- package/dist/client/core/infrastructure/baseError.js +0 -22
- package/dist/client/core/infrastructure/baseFactory.js +0 -54
- package/dist/client/core/infrastructure/baseRegistry.js +0 -53
- package/dist/client/core/infrastructure/index.js +0 -5
- package/dist/client/core/infrastructure/retry.js +0 -20
- package/dist/client/core/infrastructure/typedEventEmitter.js +0 -23
- package/dist/client/core/modelConfiguration.js +0 -851
- package/dist/client/core/modules/GenerationHandler.js +0 -588
- package/dist/client/core/modules/MessageBuilder.js +0 -273
- package/dist/client/core/modules/StreamHandler.js +0 -185
- package/dist/client/core/modules/TelemetryHandler.js +0 -203
- package/dist/client/core/modules/ToolsManager.js +0 -499
- package/dist/client/core/modules/Utilities.js +0 -331
- package/dist/client/core/redisConversationMemoryManager.js +0 -1435
- package/dist/client/core/streamAnalytics.js +0 -131
- package/dist/client/evaluation/contextBuilder.js +0 -134
- package/dist/client/evaluation/index.js +0 -61
- package/dist/client/evaluation/prompts.js +0 -73
- package/dist/client/evaluation/ragasEvaluator.js +0 -110
- package/dist/client/evaluation/retryManager.js +0 -78
- package/dist/client/evaluation/scoring.js +0 -61
- package/dist/client/factories/providerFactory.js +0 -166
- package/dist/client/factories/providerRegistry.js +0 -166
- package/dist/client/features/ppt/constants.js +0 -896
- package/dist/client/features/ppt/contentPlanner.js +0 -529
- package/dist/client/features/ppt/presentationOrchestrator.js +0 -236
- package/dist/client/features/ppt/slideGenerator.js +0 -532
- package/dist/client/features/ppt/slideRenderers.js +0 -2383
- package/dist/client/features/ppt/slideTypeInference.js +0 -405
- package/dist/client/features/ppt/types.js +0 -13
- package/dist/client/features/ppt/utils.js +0 -443
- package/dist/client/files/fileReferenceRegistry.js +0 -1543
- package/dist/client/files/fileTools.js +0 -450
- package/dist/client/files/streamingReader.js +0 -321
- package/dist/client/files/types.js +0 -23
- package/dist/client/hitl/hitlErrors.js +0 -54
- package/dist/client/hitl/hitlManager.js +0 -460
- package/dist/client/mcp/agentExposure.js +0 -356
- package/dist/client/mcp/auth/index.js +0 -11
- package/dist/client/mcp/auth/oauthClientProvider.js +0 -325
- package/dist/client/mcp/auth/tokenStorage.js +0 -134
- package/dist/client/mcp/batching/index.js +0 -10
- package/dist/client/mcp/batching/requestBatcher.js +0 -441
- package/dist/client/mcp/caching/index.js +0 -10
- package/dist/client/mcp/caching/toolCache.js +0 -433
- package/dist/client/mcp/elicitation/elicitationManager.js +0 -376
- package/dist/client/mcp/elicitation/index.js +0 -11
- package/dist/client/mcp/elicitation/types.js +0 -10
- package/dist/client/mcp/elicitationProtocol.js +0 -375
- package/dist/client/mcp/enhancedToolDiscovery.js +0 -481
- package/dist/client/mcp/externalServerManager.js +0 -1478
- package/dist/client/mcp/factory.js +0 -161
- package/dist/client/mcp/flexibleToolValidator.js +0 -161
- package/dist/client/mcp/httpRateLimiter.js +0 -391
- package/dist/client/mcp/httpRetryHandler.js +0 -178
- package/dist/client/mcp/index.js +0 -74
- package/dist/client/mcp/mcpCircuitBreaker.js +0 -427
- package/dist/client/mcp/mcpClientFactory.js +0 -708
- package/dist/client/mcp/mcpRegistryClient.js +0 -488
- package/dist/client/mcp/mcpServerBase.js +0 -373
- package/dist/client/mcp/multiServerManager.js +0 -579
- package/dist/client/mcp/registry.js +0 -158
- package/dist/client/mcp/routing/index.js +0 -10
- package/dist/client/mcp/routing/toolRouter.js +0 -416
- package/dist/client/mcp/serverCapabilities.js +0 -502
- package/dist/client/mcp/servers/agent/directToolsServer.js +0 -150
- package/dist/client/mcp/toolAnnotations.js +0 -239
- package/dist/client/mcp/toolConverter.js +0 -258
- package/dist/client/mcp/toolDiscoveryService.js +0 -798
- package/dist/client/mcp/toolIntegration.js +0 -334
- package/dist/client/mcp/toolRegistry.js +0 -729
- package/dist/client/memory/hippocampusInitializer.js +0 -19
- package/dist/client/memory/memoryRetrievalTools.js +0 -166
- package/dist/client/middleware/builtin/analytics.js +0 -132
- package/dist/client/middleware/builtin/autoEvaluation.js +0 -203
- package/dist/client/middleware/builtin/guardrails.js +0 -109
- package/dist/client/middleware/builtin/lifecycle.js +0 -168
- package/dist/client/middleware/factory.js +0 -327
- package/dist/client/middleware/registry.js +0 -295
- package/dist/client/middleware/utils/guardrailsUtils.js +0 -396
- package/dist/client/models/anthropicModels.js +0 -527
- package/dist/client/neurolink.js +0 -8233
- package/dist/client/observability/exporterRegistry.js +0 -413
- package/dist/client/observability/exporters/arizeExporter.js +0 -138
- package/dist/client/observability/exporters/baseExporter.js +0 -190
- package/dist/client/observability/exporters/braintrustExporter.js +0 -154
- package/dist/client/observability/exporters/datadogExporter.js +0 -196
- package/dist/client/observability/exporters/laminarExporter.js +0 -302
- package/dist/client/observability/exporters/langfuseExporter.js +0 -209
- package/dist/client/observability/exporters/langsmithExporter.js +0 -143
- package/dist/client/observability/exporters/otelExporter.js +0 -164
- package/dist/client/observability/exporters/posthogExporter.js +0 -287
- package/dist/client/observability/exporters/sentryExporter.js +0 -165
- package/dist/client/observability/index.js +0 -31
- package/dist/client/observability/metricsAggregator.js +0 -556
- package/dist/client/observability/otelBridge.js +0 -131
- package/dist/client/observability/retryPolicy.js +0 -383
- package/dist/client/observability/sampling/samplers.js +0 -216
- package/dist/client/observability/spanProcessor.js +0 -303
- package/dist/client/observability/tokenTracker.js +0 -413
- package/dist/client/observability/types/exporterTypes.js +0 -5
- package/dist/client/observability/types/index.js +0 -4
- package/dist/client/observability/types/spanTypes.js +0 -92
- package/dist/client/observability/utils/safeMetadata.js +0 -25
- package/dist/client/observability/utils/spanSerializer.js +0 -292
- package/dist/client/processors/archive/ArchiveProcessor.js +0 -1308
- package/dist/client/processors/base/BaseFileProcessor.js +0 -614
- package/dist/client/processors/base/types.js +0 -82
- package/dist/client/processors/config/fileTypes.js +0 -520
- package/dist/client/processors/config/index.js +0 -92
- package/dist/client/processors/config/languageMap.js +0 -410
- package/dist/client/processors/config/mimeTypes.js +0 -363
- package/dist/client/processors/config/sizeLimits.js +0 -258
- package/dist/client/processors/document/ExcelProcessor.js +0 -590
- package/dist/client/processors/document/OpenDocumentProcessor.js +0 -212
- package/dist/client/processors/document/PptxProcessor.js +0 -157
- package/dist/client/processors/document/RtfProcessor.js +0 -361
- package/dist/client/processors/document/WordProcessor.js +0 -353
- package/dist/client/processors/errors/FileErrorCode.js +0 -255
- package/dist/client/processors/errors/errorHelpers.js +0 -386
- package/dist/client/processors/errors/errorSerializer.js +0 -507
- package/dist/client/processors/errors/index.js +0 -49
- package/dist/client/processors/markup/SvgProcessor.js +0 -240
- package/dist/client/processors/media/AudioProcessor.js +0 -707
- package/dist/client/processors/media/VideoProcessor.js +0 -1045
- package/dist/client/providers/amazonBedrock.js +0 -1512
- package/dist/client/providers/amazonSagemaker.js +0 -162
- package/dist/client/providers/anthropic.js +0 -831
- package/dist/client/providers/azureOpenai.js +0 -143
- package/dist/client/providers/googleAiStudio.js +0 -1200
- package/dist/client/providers/googleNativeGemini3.js +0 -543
- package/dist/client/providers/googleVertex.js +0 -2936
- package/dist/client/providers/huggingFace.js +0 -315
- package/dist/client/providers/litellm.js +0 -488
- package/dist/client/providers/mistral.js +0 -157
- package/dist/client/providers/ollama.js +0 -1579
- package/dist/client/providers/openAI.js +0 -627
- package/dist/client/providers/openRouter.js +0 -543
- package/dist/client/providers/openaiCompatible.js +0 -290
- package/dist/client/providers/providerTypeUtils.js +0 -46
- package/dist/client/providers/sagemaker/adaptive-semaphore.js +0 -215
- package/dist/client/providers/sagemaker/client.js +0 -472
- package/dist/client/providers/sagemaker/config.js +0 -317
- package/dist/client/providers/sagemaker/detection.js +0 -606
- package/dist/client/providers/sagemaker/error-constants.js +0 -227
- package/dist/client/providers/sagemaker/errors.js +0 -299
- package/dist/client/providers/sagemaker/language-model.js +0 -775
- package/dist/client/providers/sagemaker/parsers.js +0 -634
- package/dist/client/providers/sagemaker/streaming.js +0 -331
- package/dist/client/providers/sagemaker/structured-parser.js +0 -625
- package/dist/client/proxy/accountQuota.js +0 -162
- package/dist/client/proxy/claudeFormat.js +0 -595
- package/dist/client/proxy/modelRouter.js +0 -29
- package/dist/client/proxy/oauthFetch.js +0 -367
- package/dist/client/proxy/proxyFetch.js +0 -586
- package/dist/client/proxy/requestLogger.js +0 -207
- package/dist/client/proxy/tokenRefresh.js +0 -124
- package/dist/client/proxy/usageStats.js +0 -74
- package/dist/client/proxy/utils/noProxyUtils.js +0 -149
- package/dist/client/rag/ChunkerFactory.js +0 -320
- package/dist/client/rag/ChunkerRegistry.js +0 -421
- package/dist/client/rag/chunkers/BaseChunker.js +0 -143
- package/dist/client/rag/chunkers/CharacterChunker.js +0 -28
- package/dist/client/rag/chunkers/HTMLChunker.js +0 -38
- package/dist/client/rag/chunkers/JSONChunker.js +0 -68
- package/dist/client/rag/chunkers/LaTeXChunker.js +0 -63
- package/dist/client/rag/chunkers/MarkdownChunker.js +0 -306
- package/dist/client/rag/chunkers/RecursiveChunker.js +0 -139
- package/dist/client/rag/chunkers/SemanticMarkdownChunker.js +0 -138
- package/dist/client/rag/chunkers/SentenceChunker.js +0 -66
- package/dist/client/rag/chunkers/TokenChunker.js +0 -61
- package/dist/client/rag/chunkers/index.js +0 -15
- package/dist/client/rag/chunking/characterChunker.js +0 -142
- package/dist/client/rag/chunking/chunkerRegistry.js +0 -194
- package/dist/client/rag/chunking/htmlChunker.js +0 -247
- package/dist/client/rag/chunking/index.js +0 -17
- package/dist/client/rag/chunking/jsonChunker.js +0 -281
- package/dist/client/rag/chunking/latexChunker.js +0 -251
- package/dist/client/rag/chunking/markdownChunker.js +0 -373
- package/dist/client/rag/chunking/recursiveChunker.js +0 -148
- package/dist/client/rag/chunking/semanticChunker.js +0 -306
- package/dist/client/rag/chunking/sentenceChunker.js +0 -230
- package/dist/client/rag/chunking/tokenChunker.js +0 -183
- package/dist/client/rag/document/MDocument.js +0 -392
- package/dist/client/rag/document/index.js +0 -5
- package/dist/client/rag/document/loaders.js +0 -500
- package/dist/client/rag/errors/RAGError.js +0 -274
- package/dist/client/rag/errors/index.js +0 -6
- package/dist/client/rag/graphRag/graphRAG.js +0 -401
- package/dist/client/rag/graphRag/index.js +0 -4
- package/dist/client/rag/index.js +0 -141
- package/dist/client/rag/metadata/MetadataExtractorFactory.js +0 -418
- package/dist/client/rag/metadata/MetadataExtractorRegistry.js +0 -362
- package/dist/client/rag/metadata/index.js +0 -9
- package/dist/client/rag/metadata/metadataExtractor.js +0 -280
- package/dist/client/rag/pipeline/RAGPipeline.js +0 -436
- package/dist/client/rag/pipeline/contextAssembly.js +0 -341
- package/dist/client/rag/pipeline/index.js +0 -5
- package/dist/client/rag/ragIntegration.js +0 -321
- package/dist/client/rag/reranker/RerankerFactory.js +0 -430
- package/dist/client/rag/reranker/RerankerRegistry.js +0 -402
- package/dist/client/rag/reranker/index.js +0 -9
- package/dist/client/rag/reranker/reranker.js +0 -277
- package/dist/client/rag/resilience/CircuitBreaker.js +0 -431
- package/dist/client/rag/resilience/RetryHandler.js +0 -304
- package/dist/client/rag/resilience/index.js +0 -7
- package/dist/client/rag/retrieval/hybridSearch.js +0 -335
- package/dist/client/rag/retrieval/index.js +0 -5
- package/dist/client/rag/retrieval/vectorQueryTool.js +0 -307
- package/dist/client/rag/types.js +0 -8
- package/dist/client/sdk/toolRegistration.js +0 -377
- package/dist/client/server/abstract/baseServerAdapter.js +0 -575
- package/dist/client/server/adapters/expressAdapter.js +0 -486
- package/dist/client/server/adapters/fastifyAdapter.js +0 -472
- package/dist/client/server/adapters/honoAdapter.js +0 -632
- package/dist/client/server/adapters/koaAdapter.js +0 -510
- package/dist/client/server/errors.js +0 -486
- package/dist/client/server/factory/serverAdapterFactory.js +0 -160
- package/dist/client/server/index.js +0 -108
- package/dist/client/server/middleware/abortSignal.js +0 -111
- package/dist/client/server/middleware/auth.js +0 -388
- package/dist/client/server/middleware/cache.js +0 -359
- package/dist/client/server/middleware/common.js +0 -281
- package/dist/client/server/middleware/deprecation.js +0 -190
- package/dist/client/server/middleware/mcpBodyAttachment.js +0 -63
- package/dist/client/server/middleware/rateLimit.js +0 -227
- package/dist/client/server/middleware/validation.js +0 -388
- package/dist/client/server/openapi/generator.js +0 -398
- package/dist/client/server/openapi/index.js +0 -36
- package/dist/client/server/openapi/schemas.js +0 -695
- package/dist/client/server/openapi/templates.js +0 -374
- package/dist/client/server/routes/agentRoutes.js +0 -189
- package/dist/client/server/routes/claudeProxyRoutes.js +0 -1600
- package/dist/client/server/routes/healthRoutes.js +0 -187
- package/dist/client/server/routes/index.js +0 -57
- package/dist/client/server/routes/mcpRoutes.js +0 -342
- package/dist/client/server/routes/memoryRoutes.js +0 -350
- package/dist/client/server/routes/openApiRoutes.js +0 -126
- package/dist/client/server/routes/toolRoutes.js +0 -199
- package/dist/client/server/streaming/dataStream.js +0 -486
- package/dist/client/server/streaming/index.js +0 -11
- package/dist/client/server/types.js +0 -67
- package/dist/client/server/utils/redaction.js +0 -334
- package/dist/client/server/utils/validation.js +0 -243
- package/dist/client/server/websocket/WebSocketHandler.js +0 -383
- package/dist/client/server/websocket/index.js +0 -4
- package/dist/client/services/server/ai/observability/instrumentation.js +0 -808
- package/dist/client/telemetry/attributes.js +0 -100
- package/dist/client/telemetry/index.js +0 -26
- package/dist/client/telemetry/telemetryService.js +0 -308
- package/dist/client/telemetry/tracers.js +0 -17
- package/dist/client/telemetry/withSpan.js +0 -34
- package/dist/client/types/actionTypes.js +0 -6
- package/dist/client/types/analytics.js +0 -5
- package/dist/client/types/authTypes.js +0 -9
- package/dist/client/types/circuitBreakerErrors.js +0 -34
- package/dist/client/types/cli.js +0 -21
- package/dist/client/types/clientTypes.js +0 -10
- package/dist/client/types/common.js +0 -51
- package/dist/client/types/configTypes.js +0 -49
- package/dist/client/types/content.js +0 -19
- package/dist/client/types/contextTypes.js +0 -400
- package/dist/client/types/conversation.js +0 -47
- package/dist/client/types/conversationMemoryInterface.js +0 -6
- package/dist/client/types/domainTypes.js +0 -5
- package/dist/client/types/errors.js +0 -167
- package/dist/client/types/evaluation.js +0 -5
- package/dist/client/types/evaluationProviders.js +0 -5
- package/dist/client/types/evaluationTypes.js +0 -1
- package/dist/client/types/externalMcp.js +0 -6
- package/dist/client/types/fileReferenceTypes.js +0 -8
- package/dist/client/types/fileTypes.js +0 -4
- package/dist/client/types/generateTypes.js +0 -1
- package/dist/client/types/guardrails.js +0 -1
- package/dist/client/types/hitlTypes.js +0 -8
- package/dist/client/types/index.js +0 -57
- package/dist/client/types/mcpTypes.js +0 -5
- package/dist/client/types/middlewareTypes.js +0 -1
- package/dist/client/types/modelTypes.js +0 -30
- package/dist/client/types/multimodal.js +0 -135
- package/dist/client/types/observability.js +0 -6
- package/dist/client/types/pptTypes.js +0 -82
- package/dist/client/types/providers.js +0 -111
- package/dist/client/types/proxyTypes.js +0 -16
- package/dist/client/types/ragTypes.js +0 -7
- package/dist/client/types/sdkTypes.js +0 -8
- package/dist/client/types/serviceTypes.js +0 -5
- package/dist/client/types/streamTypes.js +0 -1
- package/dist/client/types/subscriptionTypes.js +0 -9
- package/dist/client/types/taskClassificationTypes.js +0 -5
- package/dist/client/types/tools.js +0 -24
- package/dist/client/types/ttsTypes.js +0 -57
- package/dist/client/types/typeAliases.js +0 -48
- package/dist/client/types/utilities.js +0 -4
- package/dist/client/types/workflowTypes.js +0 -30
- package/dist/client/utils/async/withTimeout.js +0 -98
- package/dist/client/utils/asyncMutex.js +0 -60
- package/dist/client/utils/conversationMemory.js +0 -431
- package/dist/client/utils/csvProcessor.js +0 -846
- package/dist/client/utils/errorHandling.js +0 -936
- package/dist/client/utils/evaluationUtils.js +0 -131
- package/dist/client/utils/factoryProcessing.js +0 -589
- package/dist/client/utils/fileDetector.js +0 -2161
- package/dist/client/utils/imageCache.js +0 -376
- package/dist/client/utils/imageProcessor.js +0 -704
- package/dist/client/utils/logger.js +0 -491
- package/dist/client/utils/mcpDefaults.js +0 -134
- package/dist/client/utils/messageBuilder.js +0 -1653
- package/dist/client/utils/modelAliasResolver.js +0 -54
- package/dist/client/utils/modelDetection.js +0 -80
- package/dist/client/utils/modelRouter.js +0 -292
- package/dist/client/utils/multimodalOptionsBuilder.js +0 -65
- package/dist/client/utils/observabilityHelpers.js +0 -47
- package/dist/client/utils/parameterValidation.js +0 -966
- package/dist/client/utils/pdfProcessor.js +0 -410
- package/dist/client/utils/performance.js +0 -222
- package/dist/client/utils/pricing.js +0 -340
- package/dist/client/utils/promptRedaction.js +0 -62
- package/dist/client/utils/providerConfig.js +0 -1009
- package/dist/client/utils/providerHealth.js +0 -1237
- package/dist/client/utils/providerRetry.js +0 -112
- package/dist/client/utils/providerUtils.js +0 -434
- package/dist/client/utils/rateLimiter.js +0 -200
- package/dist/client/utils/redis.js +0 -368
- package/dist/client/utils/retryHandler.js +0 -269
- package/dist/client/utils/retryability.js +0 -22
- package/dist/client/utils/sanitizers/svg.js +0 -481
- package/dist/client/utils/schemaConversion.js +0 -255
- package/dist/client/utils/taskClassificationUtils.js +0 -149
- package/dist/client/utils/taskClassifier.js +0 -94
- package/dist/client/utils/thinkingConfig.js +0 -104
- package/dist/client/utils/timeout.js +0 -359
- package/dist/client/utils/tokenEstimation.js +0 -142
- package/dist/client/utils/tokenLimits.js +0 -125
- package/dist/client/utils/tokenUtils.js +0 -239
- package/dist/client/utils/toolUtils.js +0 -75
- package/dist/client/utils/transformationUtils.js +0 -554
- package/dist/client/utils/ttsProcessor.js +0 -286
- package/dist/client/utils/typeUtils.js +0 -97
- package/dist/client/utils/videoAnalysisProcessor.js +0 -67
- package/dist/client/workflow/config.js +0 -398
- package/dist/client/workflow/core/ensembleExecutor.js +0 -407
- package/dist/client/workflow/core/judgeScorer.js +0 -544
- package/dist/client/workflow/core/responseConditioner.js +0 -225
- package/dist/client/workflow/core/types/conditionerTypes.js +0 -7
- package/dist/client/workflow/core/types/ensembleTypes.js +0 -7
- package/dist/client/workflow/core/types/index.js +0 -7
- package/dist/client/workflow/core/types/judgeTypes.js +0 -7
- package/dist/client/workflow/core/types/layerTypes.js +0 -7
- package/dist/client/workflow/core/types/registryTypes.js +0 -7
- package/dist/client/workflow/core/workflowRegistry.js +0 -304
- package/dist/client/workflow/core/workflowRunner.js +0 -586
- package/dist/client/workflow/index.js +0 -50
- package/dist/client/workflow/types.js +0 -9
- package/dist/client/workflow/utils/types/index.js +0 -7
- package/dist/client/workflow/utils/workflowMetrics.js +0 -311
- package/dist/client/workflow/utils/workflowValidation.js +0 -420
- package/dist/client/workflow/workflows/adaptiveWorkflow.js +0 -366
- package/dist/client/workflow/workflows/consensusWorkflow.js +0 -192
- package/dist/client/workflow/workflows/fallbackWorkflow.js +0 -225
- package/dist/client/workflow/workflows/multiJudgeWorkflow.js +0 -351
- /package/dist/client/{client/reactHooks.js → reactHooks.js} +0 -0
|
@@ -1,134 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Token Storage for OAuth 2.1 authentication
|
|
3
|
-
* Provides implementations for storing OAuth tokens
|
|
4
|
-
*/
|
|
5
|
-
import { logger } from "../../utils/logger.js";
|
|
6
|
-
/**
|
|
7
|
-
* In-memory token storage implementation
|
|
8
|
-
* Suitable for development and single-session use
|
|
9
|
-
* Tokens are lost when the process terminates
|
|
10
|
-
*/
|
|
11
|
-
export class InMemoryTokenStorage {
|
|
12
|
-
tokens = new Map();
|
|
13
|
-
async getTokens(serverId) {
|
|
14
|
-
return this.tokens.get(serverId) ?? null;
|
|
15
|
-
}
|
|
16
|
-
async saveTokens(serverId, tokens) {
|
|
17
|
-
this.tokens.set(serverId, tokens);
|
|
18
|
-
}
|
|
19
|
-
async deleteTokens(serverId) {
|
|
20
|
-
this.tokens.delete(serverId);
|
|
21
|
-
}
|
|
22
|
-
async hasTokens(serverId) {
|
|
23
|
-
return this.tokens.has(serverId);
|
|
24
|
-
}
|
|
25
|
-
async clearAll() {
|
|
26
|
-
this.tokens.clear();
|
|
27
|
-
}
|
|
28
|
-
/**
|
|
29
|
-
* Get the number of stored token sets
|
|
30
|
-
*/
|
|
31
|
-
get size() {
|
|
32
|
-
return this.tokens.size;
|
|
33
|
-
}
|
|
34
|
-
/**
|
|
35
|
-
* Get all server IDs with stored tokens
|
|
36
|
-
*/
|
|
37
|
-
getServerIds() {
|
|
38
|
-
return Array.from(this.tokens.keys());
|
|
39
|
-
}
|
|
40
|
-
}
|
|
41
|
-
/**
|
|
42
|
-
* File-based token storage implementation
|
|
43
|
-
* Persists tokens to disk for cross-session use
|
|
44
|
-
*/
|
|
45
|
-
export class FileTokenStorage {
|
|
46
|
-
filePath;
|
|
47
|
-
tokens = new Map();
|
|
48
|
-
loaded = false;
|
|
49
|
-
constructor(filePath) {
|
|
50
|
-
this.filePath = filePath;
|
|
51
|
-
}
|
|
52
|
-
async loadTokens() {
|
|
53
|
-
if (this.loaded) {
|
|
54
|
-
return;
|
|
55
|
-
}
|
|
56
|
-
try {
|
|
57
|
-
const fs = await import("fs/promises");
|
|
58
|
-
const data = await fs.readFile(this.filePath, "utf-8");
|
|
59
|
-
const parsed = JSON.parse(data);
|
|
60
|
-
this.tokens = new Map(Object.entries(parsed));
|
|
61
|
-
this.loaded = true;
|
|
62
|
-
}
|
|
63
|
-
catch (error) {
|
|
64
|
-
// File doesn't exist or is invalid, start with empty tokens
|
|
65
|
-
if (error instanceof Error &&
|
|
66
|
-
"code" in error &&
|
|
67
|
-
error.code !== "ENOENT") {
|
|
68
|
-
logger.warn(`[FileTokenStorage] Error loading tokens: ${error.message}`);
|
|
69
|
-
}
|
|
70
|
-
this.tokens = new Map();
|
|
71
|
-
this.loaded = true;
|
|
72
|
-
}
|
|
73
|
-
}
|
|
74
|
-
async saveToFile() {
|
|
75
|
-
try {
|
|
76
|
-
const fs = await import("fs/promises");
|
|
77
|
-
const path = await import("path");
|
|
78
|
-
// Ensure directory exists
|
|
79
|
-
const dir = path.dirname(this.filePath);
|
|
80
|
-
await fs.mkdir(dir, { recursive: true });
|
|
81
|
-
// Write tokens to file
|
|
82
|
-
const data = Object.fromEntries(this.tokens.entries());
|
|
83
|
-
await fs.writeFile(this.filePath, JSON.stringify(data, null, 2), "utf-8");
|
|
84
|
-
}
|
|
85
|
-
catch (error) {
|
|
86
|
-
logger.error(`[FileTokenStorage] Error saving tokens: ${error instanceof Error ? error.message : String(error)}`);
|
|
87
|
-
throw error;
|
|
88
|
-
}
|
|
89
|
-
}
|
|
90
|
-
async getTokens(serverId) {
|
|
91
|
-
await this.loadTokens();
|
|
92
|
-
return this.tokens.get(serverId) ?? null;
|
|
93
|
-
}
|
|
94
|
-
async saveTokens(serverId, tokens) {
|
|
95
|
-
await this.loadTokens();
|
|
96
|
-
this.tokens.set(serverId, tokens);
|
|
97
|
-
await this.saveToFile();
|
|
98
|
-
}
|
|
99
|
-
async deleteTokens(serverId) {
|
|
100
|
-
await this.loadTokens();
|
|
101
|
-
this.tokens.delete(serverId);
|
|
102
|
-
await this.saveToFile();
|
|
103
|
-
}
|
|
104
|
-
async hasTokens(serverId) {
|
|
105
|
-
await this.loadTokens();
|
|
106
|
-
return this.tokens.has(serverId);
|
|
107
|
-
}
|
|
108
|
-
async clearAll() {
|
|
109
|
-
this.tokens.clear();
|
|
110
|
-
await this.saveToFile();
|
|
111
|
-
}
|
|
112
|
-
}
|
|
113
|
-
/**
|
|
114
|
-
* Check if tokens are expired or about to expire
|
|
115
|
-
* @param tokens - OAuth tokens to check
|
|
116
|
-
* @param bufferSeconds - Buffer time in seconds before expiration (default: 60)
|
|
117
|
-
* @returns True if tokens are expired or will expire within buffer time
|
|
118
|
-
*/
|
|
119
|
-
export function isTokenExpired(tokens, bufferSeconds = 60) {
|
|
120
|
-
if (!tokens.expiresAt) {
|
|
121
|
-
return false; // No expiration set, assume valid
|
|
122
|
-
}
|
|
123
|
-
const bufferMs = bufferSeconds * 1000;
|
|
124
|
-
const now = Date.now();
|
|
125
|
-
return tokens.expiresAt - bufferMs <= now;
|
|
126
|
-
}
|
|
127
|
-
/**
|
|
128
|
-
* Calculate token expiration timestamp from expires_in value
|
|
129
|
-
* @param expiresIn - Token lifetime in seconds
|
|
130
|
-
* @returns Expiration timestamp (Unix epoch in milliseconds)
|
|
131
|
-
*/
|
|
132
|
-
export function calculateExpiresAt(expiresIn) {
|
|
133
|
-
return Date.now() + expiresIn * 1000;
|
|
134
|
-
}
|
|
@@ -1,10 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* MCP Batching Module - Request batching for efficiency
|
|
3
|
-
*
|
|
4
|
-
* Provides intelligent batching of MCP tool calls:
|
|
5
|
-
* - Automatic batch size management
|
|
6
|
-
* - Configurable wait times
|
|
7
|
-
* - Server-grouped batching
|
|
8
|
-
* - Parallel batch execution
|
|
9
|
-
*/
|
|
10
|
-
export { createRequestBatcher, createToolCallBatcher, DEFAULT_BATCH_CONFIG, RequestBatcher, ToolCallBatcher, } from "./requestBatcher.js";
|
|
@@ -1,441 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Request Batcher - Batches multiple tool calls for efficiency
|
|
3
|
-
*
|
|
4
|
-
* Provides intelligent batching of MCP tool calls to reduce overhead
|
|
5
|
-
* and improve throughput. Supports automatic flushing based on:
|
|
6
|
-
* - Maximum batch size
|
|
7
|
-
* - Maximum wait time
|
|
8
|
-
* - Manual flush triggers
|
|
9
|
-
*/
|
|
10
|
-
import { EventEmitter } from "events";
|
|
11
|
-
import { logger } from "../../utils/logger.js";
|
|
12
|
-
import { ErrorFactory } from "../../utils/errorHandling.js";
|
|
13
|
-
/**
|
|
14
|
-
* Request Batcher - Efficient batch processing for MCP tool calls
|
|
15
|
-
*
|
|
16
|
-
* @example
|
|
17
|
-
* ```typescript
|
|
18
|
-
* const batcher = new RequestBatcher<ToolResult>({
|
|
19
|
-
* maxBatchSize: 10,
|
|
20
|
-
* maxWaitMs: 100,
|
|
21
|
-
* });
|
|
22
|
-
*
|
|
23
|
-
* // Set the batch executor
|
|
24
|
-
* batcher.setExecutor(async (requests) => {
|
|
25
|
-
* // Execute all requests in a batch
|
|
26
|
-
* return await Promise.all(requests.map(r => executeTool(r.tool, r.args)));
|
|
27
|
-
* });
|
|
28
|
-
*
|
|
29
|
-
* // Add requests - they'll be batched automatically
|
|
30
|
-
* const result1 = await batcher.add('getUserById', { id: 1 });
|
|
31
|
-
* const result2 = await batcher.add('getUserById', { id: 2 });
|
|
32
|
-
* ```
|
|
33
|
-
*/
|
|
34
|
-
export class RequestBatcher extends EventEmitter {
|
|
35
|
-
config;
|
|
36
|
-
pending = new Map();
|
|
37
|
-
serverQueues = new Map();
|
|
38
|
-
flushTimer;
|
|
39
|
-
executor;
|
|
40
|
-
activeBatches = 0;
|
|
41
|
-
batchCounter = 0;
|
|
42
|
-
requestCounter = 0;
|
|
43
|
-
isDestroyed = false;
|
|
44
|
-
constructor(config) {
|
|
45
|
-
super();
|
|
46
|
-
this.config = {
|
|
47
|
-
maxBatchSize: config.maxBatchSize,
|
|
48
|
-
maxWaitMs: config.maxWaitMs,
|
|
49
|
-
enableParallel: config.enableParallel ?? true,
|
|
50
|
-
maxConcurrentBatches: config.maxConcurrentBatches ?? 5,
|
|
51
|
-
groupByServer: config.groupByServer ?? true,
|
|
52
|
-
};
|
|
53
|
-
}
|
|
54
|
-
/**
|
|
55
|
-
* Set the batch executor function
|
|
56
|
-
*/
|
|
57
|
-
setExecutor(executor) {
|
|
58
|
-
this.executor = executor;
|
|
59
|
-
}
|
|
60
|
-
/**
|
|
61
|
-
* Add a request to the batch queue
|
|
62
|
-
*/
|
|
63
|
-
async add(tool, args, serverId) {
|
|
64
|
-
if (this.isDestroyed) {
|
|
65
|
-
throw ErrorFactory.invalidConfiguration("batcher", "Batcher has been destroyed");
|
|
66
|
-
}
|
|
67
|
-
if (!this.executor) {
|
|
68
|
-
throw ErrorFactory.missingConfiguration("batchExecutor", {
|
|
69
|
-
hint: "Call setExecutor() before adding requests",
|
|
70
|
-
});
|
|
71
|
-
}
|
|
72
|
-
const requestId = this.generateRequestId();
|
|
73
|
-
return new Promise((resolve, reject) => {
|
|
74
|
-
const request = {
|
|
75
|
-
id: requestId,
|
|
76
|
-
tool,
|
|
77
|
-
args,
|
|
78
|
-
serverId,
|
|
79
|
-
resolve,
|
|
80
|
-
reject,
|
|
81
|
-
addedAt: Date.now(),
|
|
82
|
-
};
|
|
83
|
-
this.pending.set(requestId, request);
|
|
84
|
-
// Track by server if grouping is enabled
|
|
85
|
-
if (this.config.groupByServer && serverId) {
|
|
86
|
-
if (!this.serverQueues.has(serverId)) {
|
|
87
|
-
this.serverQueues.set(serverId, new Set());
|
|
88
|
-
}
|
|
89
|
-
const queue = this.serverQueues.get(serverId);
|
|
90
|
-
if (queue) {
|
|
91
|
-
queue.add(requestId);
|
|
92
|
-
}
|
|
93
|
-
}
|
|
94
|
-
this.emit("requestQueued", {
|
|
95
|
-
requestId,
|
|
96
|
-
queueSize: this.pending.size,
|
|
97
|
-
});
|
|
98
|
-
// Check if we should flush immediately
|
|
99
|
-
if (this.pending.size >= this.config.maxBatchSize) {
|
|
100
|
-
this.scheduleFlush("size");
|
|
101
|
-
}
|
|
102
|
-
else if (!this.flushTimer) {
|
|
103
|
-
// Start the timer for delayed flush
|
|
104
|
-
this.flushTimer = setTimeout(() => {
|
|
105
|
-
this.scheduleFlush("timeout");
|
|
106
|
-
}, this.config.maxWaitMs);
|
|
107
|
-
}
|
|
108
|
-
});
|
|
109
|
-
}
|
|
110
|
-
/**
|
|
111
|
-
* Manually flush the current batch
|
|
112
|
-
*/
|
|
113
|
-
async flush() {
|
|
114
|
-
this.clearFlushTimer();
|
|
115
|
-
if (this.pending.size === 0) {
|
|
116
|
-
return;
|
|
117
|
-
}
|
|
118
|
-
this.emit("flushTriggered", {
|
|
119
|
-
reason: "manual",
|
|
120
|
-
queueSize: this.pending.size,
|
|
121
|
-
});
|
|
122
|
-
await this.executeBatch();
|
|
123
|
-
}
|
|
124
|
-
/**
|
|
125
|
-
* Get current queue size
|
|
126
|
-
*/
|
|
127
|
-
get queueSize() {
|
|
128
|
-
return this.pending.size;
|
|
129
|
-
}
|
|
130
|
-
/**
|
|
131
|
-
* Get number of active batches
|
|
132
|
-
*/
|
|
133
|
-
get activeBatchCount() {
|
|
134
|
-
return this.activeBatches;
|
|
135
|
-
}
|
|
136
|
-
/**
|
|
137
|
-
* Check if the batcher is idle (no pending requests)
|
|
138
|
-
*/
|
|
139
|
-
get isIdle() {
|
|
140
|
-
return this.pending.size === 0 && this.activeBatches === 0;
|
|
141
|
-
}
|
|
142
|
-
/**
|
|
143
|
-
* Wait for all pending requests to complete
|
|
144
|
-
*/
|
|
145
|
-
async drain() {
|
|
146
|
-
await this.flush();
|
|
147
|
-
const maxDrainTimeout = 30_000;
|
|
148
|
-
const deadline = Date.now() + maxDrainTimeout;
|
|
149
|
-
// Wait for all queued and active batches to complete
|
|
150
|
-
while (!this.isIdle) {
|
|
151
|
-
if (Date.now() >= deadline) {
|
|
152
|
-
throw ErrorFactory.toolTimeout("batchDrain", maxDrainTimeout);
|
|
153
|
-
}
|
|
154
|
-
await new Promise((resolve) => setTimeout(resolve, 10));
|
|
155
|
-
}
|
|
156
|
-
}
|
|
157
|
-
/**
|
|
158
|
-
* Destroy the batcher and reject all pending requests
|
|
159
|
-
*/
|
|
160
|
-
destroy() {
|
|
161
|
-
this.isDestroyed = true;
|
|
162
|
-
this.clearFlushTimer();
|
|
163
|
-
// Reject all pending requests
|
|
164
|
-
for (const request of this.pending.values()) {
|
|
165
|
-
request.reject(ErrorFactory.invalidConfiguration("batcher", "Batcher was destroyed before request could complete"));
|
|
166
|
-
}
|
|
167
|
-
this.pending.clear();
|
|
168
|
-
this.serverQueues.clear();
|
|
169
|
-
}
|
|
170
|
-
// ==================== Private Methods ====================
|
|
171
|
-
generateRequestId() {
|
|
172
|
-
return `req-${Date.now()}-${++this.requestCounter}`;
|
|
173
|
-
}
|
|
174
|
-
generateBatchId() {
|
|
175
|
-
return `batch-${Date.now()}-${++this.batchCounter}`;
|
|
176
|
-
}
|
|
177
|
-
scheduleFlush(reason) {
|
|
178
|
-
this.clearFlushTimer();
|
|
179
|
-
this.emit("flushTriggered", {
|
|
180
|
-
reason,
|
|
181
|
-
queueSize: this.pending.size,
|
|
182
|
-
});
|
|
183
|
-
// Execute immediately but don't block
|
|
184
|
-
setImmediate(() => {
|
|
185
|
-
this.executeBatch().catch((error) => {
|
|
186
|
-
logger.error("Batch execution failed:", error);
|
|
187
|
-
});
|
|
188
|
-
});
|
|
189
|
-
}
|
|
190
|
-
clearFlushTimer() {
|
|
191
|
-
if (this.flushTimer) {
|
|
192
|
-
clearTimeout(this.flushTimer);
|
|
193
|
-
this.flushTimer = undefined;
|
|
194
|
-
}
|
|
195
|
-
}
|
|
196
|
-
async executeBatch() {
|
|
197
|
-
if (this.pending.size === 0) {
|
|
198
|
-
return;
|
|
199
|
-
}
|
|
200
|
-
// Check concurrent batch limit
|
|
201
|
-
if (this.activeBatches >= this.config.maxConcurrentBatches) {
|
|
202
|
-
// Reschedule for later
|
|
203
|
-
this.clearFlushTimer();
|
|
204
|
-
this.flushTimer = setTimeout(() => {
|
|
205
|
-
this.executeBatch().catch((error) => {
|
|
206
|
-
logger.error("Rescheduled batch execution failed:", error);
|
|
207
|
-
});
|
|
208
|
-
}, 10);
|
|
209
|
-
return;
|
|
210
|
-
}
|
|
211
|
-
// Get requests for this batch
|
|
212
|
-
const batchRequests = this.selectBatchRequests();
|
|
213
|
-
if (batchRequests.length === 0) {
|
|
214
|
-
return;
|
|
215
|
-
}
|
|
216
|
-
const batchId = this.generateBatchId();
|
|
217
|
-
const startTime = Date.now();
|
|
218
|
-
this.activeBatches++;
|
|
219
|
-
this.emit("batchStarted", { batchId, size: batchRequests.length });
|
|
220
|
-
try {
|
|
221
|
-
// Guard against missing executor
|
|
222
|
-
if (!this.executor) {
|
|
223
|
-
throw ErrorFactory.missingConfiguration("batchExecutor", {
|
|
224
|
-
hint: "Call setExecutor() before executing batches",
|
|
225
|
-
});
|
|
226
|
-
}
|
|
227
|
-
// Execute the batch with a timeout to prevent indefinite hangs
|
|
228
|
-
const executorPromise = this.executor(batchRequests.map((r) => ({
|
|
229
|
-
tool: r.tool,
|
|
230
|
-
args: r.args,
|
|
231
|
-
serverId: r.serverId,
|
|
232
|
-
})));
|
|
233
|
-
const timeoutMs = Math.max(5000, Number(process.env.MCP_TOOL_TIMEOUT) || 60000);
|
|
234
|
-
let timeoutHandle;
|
|
235
|
-
const timeoutPromise = new Promise((_, reject) => {
|
|
236
|
-
timeoutHandle = setTimeout(() => reject(ErrorFactory.toolTimeout("batchExecution", timeoutMs)), timeoutMs);
|
|
237
|
-
});
|
|
238
|
-
const results = await Promise.race([
|
|
239
|
-
executorPromise,
|
|
240
|
-
timeoutPromise,
|
|
241
|
-
]).finally(() => {
|
|
242
|
-
if (timeoutHandle) {
|
|
243
|
-
clearTimeout(timeoutHandle);
|
|
244
|
-
}
|
|
245
|
-
});
|
|
246
|
-
// Process results
|
|
247
|
-
const batchResults = [];
|
|
248
|
-
for (let i = 0; i < batchRequests.length; i++) {
|
|
249
|
-
const request = batchRequests[i];
|
|
250
|
-
const result = results[i];
|
|
251
|
-
const executionTime = Date.now() - startTime;
|
|
252
|
-
if (!result) {
|
|
253
|
-
const noResultError = ErrorFactory.toolExecutionFailed(request.tool, new Error(`Batch executor returned no result for request ${i}`));
|
|
254
|
-
request.reject(noResultError);
|
|
255
|
-
batchResults.push({
|
|
256
|
-
id: request.id,
|
|
257
|
-
success: false,
|
|
258
|
-
error: noResultError,
|
|
259
|
-
executionTime,
|
|
260
|
-
});
|
|
261
|
-
continue;
|
|
262
|
-
}
|
|
263
|
-
if (result.success) {
|
|
264
|
-
request.resolve(result.result);
|
|
265
|
-
batchResults.push({
|
|
266
|
-
id: request.id,
|
|
267
|
-
success: true,
|
|
268
|
-
result: result.result,
|
|
269
|
-
executionTime,
|
|
270
|
-
});
|
|
271
|
-
}
|
|
272
|
-
else {
|
|
273
|
-
const error = result.error ??
|
|
274
|
-
ErrorFactory.toolExecutionFailed(request.tool, new Error("Unknown batch execution error"));
|
|
275
|
-
request.reject(error);
|
|
276
|
-
batchResults.push({
|
|
277
|
-
id: request.id,
|
|
278
|
-
success: false,
|
|
279
|
-
error,
|
|
280
|
-
executionTime,
|
|
281
|
-
});
|
|
282
|
-
}
|
|
283
|
-
}
|
|
284
|
-
this.emit("batchCompleted", { batchId, results: batchResults });
|
|
285
|
-
}
|
|
286
|
-
catch (error) {
|
|
287
|
-
// Batch-level failure - reject all requests
|
|
288
|
-
const batchError = error instanceof Error
|
|
289
|
-
? error
|
|
290
|
-
: ErrorFactory.toolExecutionFailed("batch", new Error(String(error)));
|
|
291
|
-
for (const request of batchRequests) {
|
|
292
|
-
request.reject(batchError);
|
|
293
|
-
}
|
|
294
|
-
this.emit("batchFailed", { batchId, error: batchError });
|
|
295
|
-
}
|
|
296
|
-
finally {
|
|
297
|
-
this.activeBatches--;
|
|
298
|
-
}
|
|
299
|
-
// Schedule next batch if there are more pending requests
|
|
300
|
-
if (this.pending.size > 0) {
|
|
301
|
-
this.clearFlushTimer();
|
|
302
|
-
this.flushTimer = setTimeout(() => {
|
|
303
|
-
this.executeBatch().catch((error) => {
|
|
304
|
-
logger.error("Follow-up batch execution failed:", error);
|
|
305
|
-
});
|
|
306
|
-
}, 0);
|
|
307
|
-
}
|
|
308
|
-
}
|
|
309
|
-
selectBatchRequests() {
|
|
310
|
-
const batchRequests = [];
|
|
311
|
-
if (this.config.groupByServer && this.serverQueues.size > 0) {
|
|
312
|
-
// Select from a single server queue for better locality
|
|
313
|
-
const [serverId, requestIds] = this.serverQueues.entries().next()
|
|
314
|
-
.value;
|
|
315
|
-
for (const requestId of requestIds) {
|
|
316
|
-
if (batchRequests.length >= this.config.maxBatchSize) {
|
|
317
|
-
break;
|
|
318
|
-
}
|
|
319
|
-
const request = this.pending.get(requestId);
|
|
320
|
-
if (request) {
|
|
321
|
-
batchRequests.push(request);
|
|
322
|
-
this.pending.delete(requestId);
|
|
323
|
-
requestIds.delete(requestId);
|
|
324
|
-
}
|
|
325
|
-
}
|
|
326
|
-
// Clean up empty server queue
|
|
327
|
-
if (requestIds.size === 0) {
|
|
328
|
-
this.serverQueues.delete(serverId);
|
|
329
|
-
}
|
|
330
|
-
}
|
|
331
|
-
else {
|
|
332
|
-
// Select oldest requests up to batch size
|
|
333
|
-
const sortedRequests = Array.from(this.pending.values()).sort((a, b) => a.addedAt - b.addedAt);
|
|
334
|
-
for (const request of sortedRequests) {
|
|
335
|
-
if (batchRequests.length >= this.config.maxBatchSize) {
|
|
336
|
-
break;
|
|
337
|
-
}
|
|
338
|
-
batchRequests.push(request);
|
|
339
|
-
this.pending.delete(request.id);
|
|
340
|
-
}
|
|
341
|
-
}
|
|
342
|
-
return batchRequests;
|
|
343
|
-
}
|
|
344
|
-
}
|
|
345
|
-
/**
|
|
346
|
-
* Factory function to create a RequestBatcher instance
|
|
347
|
-
*/
|
|
348
|
-
export const createRequestBatcher = (config) => new RequestBatcher(config);
|
|
349
|
-
/**
|
|
350
|
-
* Default batcher configuration
|
|
351
|
-
*/
|
|
352
|
-
export const DEFAULT_BATCH_CONFIG = {
|
|
353
|
-
maxBatchSize: 10,
|
|
354
|
-
maxWaitMs: 100,
|
|
355
|
-
enableParallel: true,
|
|
356
|
-
maxConcurrentBatches: 5,
|
|
357
|
-
groupByServer: true,
|
|
358
|
-
};
|
|
359
|
-
/**
|
|
360
|
-
* Tool Call Batcher - Specialized batcher for MCP tool calls
|
|
361
|
-
*/
|
|
362
|
-
export class ToolCallBatcher {
|
|
363
|
-
batcher;
|
|
364
|
-
toolExecutor;
|
|
365
|
-
constructor(config) {
|
|
366
|
-
this.batcher = new RequestBatcher({
|
|
367
|
-
...DEFAULT_BATCH_CONFIG,
|
|
368
|
-
...config,
|
|
369
|
-
});
|
|
370
|
-
// Set up internal executor that calls individual tool executions
|
|
371
|
-
this.batcher.setExecutor(async (requests) => {
|
|
372
|
-
if (!this.toolExecutor) {
|
|
373
|
-
throw ErrorFactory.missingConfiguration("toolExecutor", {
|
|
374
|
-
hint: "Call setToolExecutor() before executing tool calls",
|
|
375
|
-
});
|
|
376
|
-
}
|
|
377
|
-
const executor = this.toolExecutor;
|
|
378
|
-
const results = await Promise.all(requests.map(async (req) => {
|
|
379
|
-
try {
|
|
380
|
-
const result = await executor(req.tool, req.args, req.serverId);
|
|
381
|
-
return { success: true, result };
|
|
382
|
-
}
|
|
383
|
-
catch (error) {
|
|
384
|
-
return {
|
|
385
|
-
success: false,
|
|
386
|
-
error: error instanceof Error
|
|
387
|
-
? error
|
|
388
|
-
: ErrorFactory.toolExecutionFailed(req.tool, new Error(String(error))),
|
|
389
|
-
};
|
|
390
|
-
}
|
|
391
|
-
}));
|
|
392
|
-
return results;
|
|
393
|
-
});
|
|
394
|
-
}
|
|
395
|
-
/**
|
|
396
|
-
* Set the tool executor function
|
|
397
|
-
*/
|
|
398
|
-
setToolExecutor(executor) {
|
|
399
|
-
this.toolExecutor = executor;
|
|
400
|
-
}
|
|
401
|
-
/**
|
|
402
|
-
* Execute a tool call (will be batched automatically)
|
|
403
|
-
*/
|
|
404
|
-
async execute(tool, args, serverId) {
|
|
405
|
-
return this.batcher.add(tool, args, serverId);
|
|
406
|
-
}
|
|
407
|
-
/**
|
|
408
|
-
* Flush pending tool calls
|
|
409
|
-
*/
|
|
410
|
-
async flush() {
|
|
411
|
-
return this.batcher.flush();
|
|
412
|
-
}
|
|
413
|
-
/**
|
|
414
|
-
* Wait for all pending tool calls to complete
|
|
415
|
-
*/
|
|
416
|
-
async drain() {
|
|
417
|
-
return this.batcher.drain();
|
|
418
|
-
}
|
|
419
|
-
/**
|
|
420
|
-
* Get current queue size
|
|
421
|
-
*/
|
|
422
|
-
get queueSize() {
|
|
423
|
-
return this.batcher.queueSize;
|
|
424
|
-
}
|
|
425
|
-
/**
|
|
426
|
-
* Check if idle
|
|
427
|
-
*/
|
|
428
|
-
get isIdle() {
|
|
429
|
-
return this.batcher.isIdle;
|
|
430
|
-
}
|
|
431
|
-
/**
|
|
432
|
-
* Destroy the batcher
|
|
433
|
-
*/
|
|
434
|
-
destroy() {
|
|
435
|
-
this.batcher.destroy();
|
|
436
|
-
}
|
|
437
|
-
}
|
|
438
|
-
/**
|
|
439
|
-
* Create a tool call batcher instance
|
|
440
|
-
*/
|
|
441
|
-
export const createToolCallBatcher = (config) => new ToolCallBatcher(config);
|
|
@@ -1,10 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* MCP Caching Module - Tool result and response caching
|
|
3
|
-
*
|
|
4
|
-
* Provides intelligent caching for MCP tool calls:
|
|
5
|
-
* - Multiple eviction strategies (LRU, FIFO, LFU)
|
|
6
|
-
* - Automatic cache key generation
|
|
7
|
-
* - Pattern-based invalidation
|
|
8
|
-
* - Cache statistics and monitoring
|
|
9
|
-
*/
|
|
10
|
-
export { createToolCache, createToolResultCache, DEFAULT_CACHE_CONFIG, ToolCache, ToolResultCache, } from "./toolCache.js";
|