@juspay/neurolink 9.30.0 → 9.31.1
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 +20 -0
- package/README.md +2 -3
- package/dist/adapters/providerImageAdapter.js +13 -22
- package/dist/adapters/video/videoAnalyzer.d.ts +4 -4
- package/dist/adapters/video/videoAnalyzer.js +3 -3
- package/dist/agent/directTools.d.ts +20 -289
- package/dist/agent/directTools.js +11 -10
- package/dist/auth/accountPool.d.ts +68 -0
- package/dist/auth/accountPool.js +178 -0
- package/dist/auth/anthropicOAuth.d.ts +15 -5
- package/dist/auth/anthropicOAuth.js +117 -57
- package/dist/auth/index.d.ts +7 -5
- package/dist/auth/index.js +6 -2
- package/dist/auth/tokenStore.d.ts +71 -27
- package/dist/auth/tokenStore.js +342 -64
- package/dist/cli/commands/auth.d.ts +39 -2
- package/dist/cli/commands/auth.js +585 -36
- package/dist/cli/commands/config.d.ts +47 -574
- package/dist/cli/commands/config.js +142 -24
- package/dist/cli/commands/docs.d.ts +1 -5
- package/dist/cli/commands/observability.d.ts +1 -17
- package/dist/cli/commands/ollama.js +1 -1
- package/dist/cli/commands/proxy.d.ts +20 -0
- package/dist/cli/commands/proxy.js +1254 -0
- package/dist/cli/commands/setup-anthropic.js +1 -1
- package/dist/cli/commands/setup-azure.js +1 -1
- package/dist/cli/commands/setup-bedrock.js +2 -2
- package/dist/cli/commands/setup-gcp.js +1 -1
- package/dist/cli/commands/setup-google-ai.js +1 -1
- package/dist/cli/commands/setup-huggingface.js +2 -2
- package/dist/cli/commands/setup-mistral.js +1 -1
- package/dist/cli/commands/setup-openai.js +1 -1
- package/dist/cli/commands/setup.js +3 -3
- package/dist/cli/commands/telemetry.d.ts +1 -22
- package/dist/cli/factories/authCommandFactory.d.ts +16 -11
- package/dist/cli/factories/authCommandFactory.js +96 -1
- package/dist/cli/factories/ollamaCommandFactory.js +1 -1
- package/dist/cli/factories/sagemakerCommandFactory.js +25 -6
- package/dist/cli/index.d.ts +0 -6
- package/dist/cli/index.js +5 -2
- package/dist/cli/loop/conversationSelector.js +7 -2
- package/dist/cli/parser.js +19 -1
- package/dist/cli/utils/envManager.js +2 -2
- package/dist/cli/utils/ollamaUtils.d.ts +1 -2
- package/dist/client/adapters/providerImageAdapter.js +588 -0
- package/dist/client/adapters/tts/googleTTSHandler.js +344 -0
- package/dist/client/adapters/video/directorPipeline.js +516 -0
- package/dist/client/adapters/video/ffmpegAdapter.js +206 -0
- package/dist/client/adapters/video/frameExtractor.js +143 -0
- package/dist/client/adapters/video/vertexVideoHandler.js +763 -0
- package/dist/client/adapters/video/videoAnalyzer.js +238 -0
- package/dist/client/adapters/video/videoMerger.js +171 -0
- package/dist/client/agent/directTools.js +840 -0
- package/dist/client/aiSdkAdapter.d.ts +196 -0
- package/dist/client/aiSdkAdapter.js +487 -0
- package/dist/client/auth/anthropicOAuth.js +974 -0
- package/dist/client/auth/tokenStore.js +799 -0
- package/dist/client/auth.d.ts +248 -0
- package/dist/client/auth.js +473 -0
- package/dist/client/client/aiSdkAdapter.js +487 -0
- package/dist/client/client/auth.js +473 -0
- package/dist/client/client/errors.js +552 -0
- package/dist/client/client/httpClient.js +837 -0
- package/dist/client/client/index.js +172 -0
- package/dist/client/client/interceptors.js +601 -0
- package/dist/client/client/reactHooks.js +1159 -0
- package/dist/client/client/sseClient.js +545 -0
- package/dist/client/client/streamingClient.js +917 -0
- package/dist/client/client/wsClient.js +369 -0
- package/dist/client/config/configManager.js +303 -0
- package/dist/client/config/conversationMemory.js +86 -0
- package/dist/client/config/taskClassificationConfig.js +148 -0
- package/dist/client/constants/contextWindows.js +295 -0
- package/dist/client/constants/enums.js +853 -0
- package/dist/client/constants/index.js +207 -0
- package/dist/client/constants/performance.js +389 -0
- package/dist/client/constants/retry.js +266 -0
- package/dist/client/constants/timeouts.js +182 -0
- package/dist/client/constants/tokens.js +380 -0
- package/dist/client/constants/videoErrors.js +46 -0
- package/dist/client/context/budgetChecker.js +98 -0
- package/dist/client/context/contextCompactor.js +205 -0
- package/dist/client/context/emergencyTruncation.js +88 -0
- package/dist/client/context/errorDetection.js +171 -0
- package/dist/client/context/errors.js +21 -0
- package/dist/client/context/fileTokenBudget.js +127 -0
- package/dist/client/context/prompts/summarizationPrompt.js +117 -0
- package/dist/client/context/stages/fileReadDeduplicator.js +66 -0
- package/dist/client/context/stages/slidingWindowTruncator.js +190 -0
- package/dist/client/context/stages/structuredSummarizer.js +99 -0
- package/dist/client/context/stages/toolOutputPruner.js +52 -0
- package/dist/client/context/summarizationEngine.js +136 -0
- package/dist/client/context/toolOutputLimits.js +78 -0
- package/dist/client/context/toolPairRepair.js +66 -0
- package/dist/client/core/analytics.js +88 -0
- package/dist/client/core/baseProvider.js +1385 -0
- package/dist/client/core/constants.js +140 -0
- package/dist/client/core/conversationMemoryFactory.js +141 -0
- package/dist/client/core/conversationMemoryInitializer.js +128 -0
- package/dist/client/core/conversationMemoryManager.js +344 -0
- package/dist/client/core/dynamicModels.js +358 -0
- package/dist/client/core/evaluation.js +309 -0
- package/dist/client/core/evaluationProviders.js +248 -0
- package/dist/client/core/factory.js +412 -0
- package/dist/client/core/infrastructure/baseError.js +22 -0
- package/dist/client/core/infrastructure/baseFactory.js +54 -0
- package/dist/client/core/infrastructure/baseRegistry.js +49 -0
- package/dist/client/core/infrastructure/index.js +5 -0
- package/dist/client/core/infrastructure/retry.js +20 -0
- package/dist/client/core/infrastructure/typedEventEmitter.js +23 -0
- package/dist/client/core/modelConfiguration.js +851 -0
- package/dist/client/core/modules/GenerationHandler.js +588 -0
- package/dist/client/core/modules/MessageBuilder.js +273 -0
- package/dist/client/core/modules/StreamHandler.js +185 -0
- package/dist/client/core/modules/TelemetryHandler.js +203 -0
- package/dist/client/core/modules/ToolsManager.js +499 -0
- package/dist/client/core/modules/Utilities.js +331 -0
- package/dist/client/core/redisConversationMemoryManager.js +1435 -0
- package/dist/client/core/streamAnalytics.js +131 -0
- package/dist/client/errors.d.ts +299 -0
- package/dist/client/errors.js +552 -0
- package/dist/client/evaluation/contextBuilder.js +134 -0
- package/dist/client/evaluation/index.js +61 -0
- package/dist/client/evaluation/prompts.js +73 -0
- package/dist/client/evaluation/ragasEvaluator.js +110 -0
- package/dist/client/evaluation/retryManager.js +78 -0
- package/dist/client/evaluation/scoring.js +61 -0
- package/dist/client/factories/providerFactory.js +166 -0
- package/dist/client/factories/providerRegistry.js +166 -0
- package/dist/client/features/ppt/constants.js +896 -0
- package/dist/client/features/ppt/contentPlanner.js +529 -0
- package/dist/client/features/ppt/presentationOrchestrator.js +236 -0
- package/dist/client/features/ppt/slideGenerator.js +532 -0
- package/dist/client/features/ppt/slideRenderers.js +2383 -0
- package/dist/client/features/ppt/slideTypeInference.js +405 -0
- package/dist/client/features/ppt/types.js +13 -0
- package/dist/client/features/ppt/utils.js +443 -0
- package/dist/client/files/fileReferenceRegistry.js +1543 -0
- package/dist/client/files/fileTools.js +450 -0
- package/dist/client/files/streamingReader.js +321 -0
- package/dist/client/files/types.js +23 -0
- package/dist/client/hitl/hitlErrors.js +54 -0
- package/dist/client/hitl/hitlManager.js +460 -0
- package/dist/client/httpClient.d.ts +297 -0
- package/dist/client/httpClient.js +837 -0
- package/dist/client/index.d.ts +111 -0
- package/dist/client/index.js +511 -0
- package/dist/client/interceptors.d.ts +283 -0
- package/dist/client/interceptors.js +601 -0
- package/dist/client/mcp/agentExposure.js +356 -0
- package/dist/client/mcp/auth/index.js +11 -0
- package/dist/client/mcp/auth/oauthClientProvider.js +325 -0
- package/dist/client/mcp/auth/tokenStorage.js +134 -0
- package/dist/client/mcp/batching/index.js +10 -0
- package/dist/client/mcp/batching/requestBatcher.js +441 -0
- package/dist/client/mcp/caching/index.js +10 -0
- package/dist/client/mcp/caching/toolCache.js +433 -0
- package/dist/client/mcp/elicitation/elicitationManager.js +376 -0
- package/dist/client/mcp/elicitation/index.js +11 -0
- package/dist/client/mcp/elicitation/types.js +10 -0
- package/dist/client/mcp/elicitationProtocol.js +375 -0
- package/dist/client/mcp/enhancedToolDiscovery.js +481 -0
- package/dist/client/mcp/externalServerManager.js +1478 -0
- package/dist/client/mcp/factory.js +161 -0
- package/dist/client/mcp/flexibleToolValidator.js +161 -0
- package/dist/client/mcp/httpRateLimiter.js +391 -0
- package/dist/client/mcp/httpRetryHandler.js +178 -0
- package/dist/client/mcp/index.js +74 -0
- package/dist/client/mcp/mcpCircuitBreaker.js +427 -0
- package/dist/client/mcp/mcpClientFactory.js +708 -0
- package/dist/client/mcp/mcpRegistryClient.js +488 -0
- package/dist/client/mcp/mcpServerBase.js +373 -0
- package/dist/client/mcp/multiServerManager.js +579 -0
- package/dist/client/mcp/registry.js +158 -0
- package/dist/client/mcp/routing/index.js +10 -0
- package/dist/client/mcp/routing/toolRouter.js +416 -0
- package/dist/client/mcp/serverCapabilities.js +502 -0
- package/dist/client/mcp/servers/agent/directToolsServer.js +150 -0
- package/dist/client/mcp/toolAnnotations.js +239 -0
- package/dist/client/mcp/toolConverter.js +258 -0
- package/dist/client/mcp/toolDiscoveryService.js +798 -0
- package/dist/client/mcp/toolIntegration.js +334 -0
- package/dist/client/mcp/toolRegistry.js +719 -0
- package/dist/client/memory/hippocampusInitializer.js +19 -0
- package/dist/client/memory/memoryRetrievalTools.js +166 -0
- package/dist/client/middleware/builtin/analytics.js +132 -0
- package/dist/client/middleware/builtin/autoEvaluation.js +203 -0
- package/dist/client/middleware/builtin/guardrails.js +109 -0
- package/dist/client/middleware/builtin/lifecycle.js +168 -0
- package/dist/client/middleware/factory.js +327 -0
- package/dist/client/middleware/registry.js +295 -0
- package/dist/client/middleware/utils/guardrailsUtils.js +396 -0
- package/dist/client/models/anthropicModels.js +527 -0
- package/dist/client/neurolink.js +8015 -0
- package/dist/client/observability/exporterRegistry.js +413 -0
- package/dist/client/observability/exporters/arizeExporter.js +138 -0
- package/dist/client/observability/exporters/baseExporter.js +190 -0
- package/dist/client/observability/exporters/braintrustExporter.js +154 -0
- package/dist/client/observability/exporters/datadogExporter.js +196 -0
- package/dist/client/observability/exporters/laminarExporter.js +302 -0
- package/dist/client/observability/exporters/langfuseExporter.js +209 -0
- package/dist/client/observability/exporters/langsmithExporter.js +143 -0
- package/dist/client/observability/exporters/otelExporter.js +164 -0
- package/dist/client/observability/exporters/posthogExporter.js +287 -0
- package/dist/client/observability/exporters/sentryExporter.js +165 -0
- package/dist/client/observability/index.js +31 -0
- package/dist/client/observability/metricsAggregator.js +556 -0
- package/dist/client/observability/otelBridge.js +131 -0
- package/dist/client/observability/retryPolicy.js +383 -0
- package/dist/client/observability/sampling/samplers.js +216 -0
- package/dist/client/observability/spanProcessor.js +303 -0
- package/dist/client/observability/tokenTracker.js +413 -0
- package/dist/client/observability/types/exporterTypes.js +5 -0
- package/dist/client/observability/types/index.js +4 -0
- package/dist/client/observability/types/spanTypes.js +92 -0
- package/dist/client/observability/utils/safeMetadata.js +25 -0
- package/dist/client/observability/utils/spanSerializer.js +292 -0
- package/dist/client/processors/archive/ArchiveProcessor.js +1308 -0
- package/dist/client/processors/base/BaseFileProcessor.js +614 -0
- package/dist/client/processors/base/types.js +82 -0
- package/dist/client/processors/config/fileTypes.js +520 -0
- package/dist/client/processors/config/index.js +92 -0
- package/dist/client/processors/config/languageMap.js +410 -0
- package/dist/client/processors/config/mimeTypes.js +363 -0
- package/dist/client/processors/config/sizeLimits.js +258 -0
- package/dist/client/processors/document/ExcelProcessor.js +590 -0
- package/dist/client/processors/document/OpenDocumentProcessor.js +212 -0
- package/dist/client/processors/document/PptxProcessor.js +157 -0
- package/dist/client/processors/document/RtfProcessor.js +361 -0
- package/dist/client/processors/document/WordProcessor.js +353 -0
- package/dist/client/processors/errors/FileErrorCode.js +255 -0
- package/dist/client/processors/errors/errorHelpers.js +386 -0
- package/dist/client/processors/errors/errorSerializer.js +507 -0
- package/dist/client/processors/errors/index.js +49 -0
- package/dist/client/processors/markup/SvgProcessor.js +240 -0
- package/dist/client/processors/media/AudioProcessor.js +707 -0
- package/dist/client/processors/media/VideoProcessor.js +1045 -0
- package/dist/client/providers/amazonBedrock.js +1512 -0
- package/dist/client/providers/amazonSagemaker.js +162 -0
- package/dist/client/providers/anthropic.js +831 -0
- package/dist/client/providers/azureOpenai.js +143 -0
- package/dist/client/providers/googleAiStudio.js +1200 -0
- package/dist/client/providers/googleNativeGemini3.js +543 -0
- package/dist/client/providers/googleVertex.js +2936 -0
- package/dist/client/providers/huggingFace.js +315 -0
- package/dist/client/providers/litellm.js +488 -0
- package/dist/client/providers/mistral.js +157 -0
- package/dist/client/providers/ollama.js +1579 -0
- package/dist/client/providers/openAI.js +627 -0
- package/dist/client/providers/openRouter.js +543 -0
- package/dist/client/providers/openaiCompatible.js +290 -0
- package/dist/client/providers/providerTypeUtils.js +46 -0
- package/dist/client/providers/sagemaker/adaptive-semaphore.js +215 -0
- package/dist/client/providers/sagemaker/client.js +472 -0
- package/dist/client/providers/sagemaker/config.js +317 -0
- package/dist/client/providers/sagemaker/detection.js +606 -0
- package/dist/client/providers/sagemaker/error-constants.js +227 -0
- package/dist/client/providers/sagemaker/errors.js +299 -0
- package/dist/client/providers/sagemaker/language-model.js +775 -0
- package/dist/client/providers/sagemaker/parsers.js +634 -0
- package/dist/client/providers/sagemaker/streaming.js +331 -0
- package/dist/client/providers/sagemaker/structured-parser.js +625 -0
- package/dist/client/proxy/accountQuota.js +162 -0
- package/dist/client/proxy/claudeFormat.js +595 -0
- package/dist/client/proxy/modelRouter.js +29 -0
- package/dist/client/proxy/oauthFetch.js +367 -0
- package/dist/client/proxy/proxyFetch.js +586 -0
- package/dist/client/proxy/requestLogger.js +207 -0
- package/dist/client/proxy/tokenRefresh.js +124 -0
- package/dist/client/proxy/usageStats.js +74 -0
- package/dist/client/proxy/utils/noProxyUtils.js +149 -0
- package/dist/client/rag/ChunkerFactory.js +320 -0
- package/dist/client/rag/ChunkerRegistry.js +421 -0
- package/dist/client/rag/chunkers/BaseChunker.js +143 -0
- package/dist/client/rag/chunkers/CharacterChunker.js +28 -0
- package/dist/client/rag/chunkers/HTMLChunker.js +38 -0
- package/dist/client/rag/chunkers/JSONChunker.js +68 -0
- package/dist/client/rag/chunkers/LaTeXChunker.js +63 -0
- package/dist/client/rag/chunkers/MarkdownChunker.js +306 -0
- package/dist/client/rag/chunkers/RecursiveChunker.js +139 -0
- package/dist/client/rag/chunkers/SemanticMarkdownChunker.js +138 -0
- package/dist/client/rag/chunkers/SentenceChunker.js +66 -0
- package/dist/client/rag/chunkers/TokenChunker.js +61 -0
- package/dist/client/rag/chunkers/index.js +15 -0
- package/dist/client/rag/chunking/characterChunker.js +142 -0
- package/dist/client/rag/chunking/chunkerRegistry.js +194 -0
- package/dist/client/rag/chunking/htmlChunker.js +247 -0
- package/dist/client/rag/chunking/index.js +17 -0
- package/dist/client/rag/chunking/jsonChunker.js +281 -0
- package/dist/client/rag/chunking/latexChunker.js +251 -0
- package/dist/client/rag/chunking/markdownChunker.js +373 -0
- package/dist/client/rag/chunking/recursiveChunker.js +148 -0
- package/dist/client/rag/chunking/semanticChunker.js +306 -0
- package/dist/client/rag/chunking/sentenceChunker.js +230 -0
- package/dist/client/rag/chunking/tokenChunker.js +183 -0
- package/dist/client/rag/document/MDocument.js +392 -0
- package/dist/client/rag/document/index.js +5 -0
- package/dist/client/rag/document/loaders.js +500 -0
- package/dist/client/rag/errors/RAGError.js +274 -0
- package/dist/client/rag/errors/index.js +6 -0
- package/dist/client/rag/graphRag/graphRAG.js +401 -0
- package/dist/client/rag/graphRag/index.js +4 -0
- package/dist/client/rag/index.js +141 -0
- package/dist/client/rag/metadata/MetadataExtractorFactory.js +418 -0
- package/dist/client/rag/metadata/MetadataExtractorRegistry.js +362 -0
- package/dist/client/rag/metadata/index.js +9 -0
- package/dist/client/rag/metadata/metadataExtractor.js +280 -0
- package/dist/client/rag/pipeline/RAGPipeline.js +436 -0
- package/dist/client/rag/pipeline/contextAssembly.js +341 -0
- package/dist/client/rag/pipeline/index.js +5 -0
- package/dist/client/rag/ragIntegration.js +321 -0
- package/dist/client/rag/reranker/RerankerFactory.js +430 -0
- package/dist/client/rag/reranker/RerankerRegistry.js +402 -0
- package/dist/client/rag/reranker/index.js +9 -0
- package/dist/client/rag/reranker/reranker.js +277 -0
- package/dist/client/rag/resilience/CircuitBreaker.js +431 -0
- package/dist/client/rag/resilience/RetryHandler.js +304 -0
- package/dist/client/rag/resilience/index.js +7 -0
- package/dist/client/rag/retrieval/hybridSearch.js +335 -0
- package/dist/client/rag/retrieval/index.js +5 -0
- package/dist/client/rag/retrieval/vectorQueryTool.js +307 -0
- package/dist/client/rag/types.js +8 -0
- package/dist/client/reactHooks.d.ts +239 -0
- package/dist/client/reactHooks.tsx +1483 -0
- package/dist/client/sdk/toolRegistration.js +377 -0
- package/dist/client/server/abstract/baseServerAdapter.js +575 -0
- package/dist/client/server/adapters/expressAdapter.js +486 -0
- package/dist/client/server/adapters/fastifyAdapter.js +472 -0
- package/dist/client/server/adapters/honoAdapter.js +632 -0
- package/dist/client/server/adapters/koaAdapter.js +510 -0
- package/dist/client/server/errors.js +486 -0
- package/dist/client/server/factory/serverAdapterFactory.js +160 -0
- package/dist/client/server/index.js +108 -0
- package/dist/client/server/middleware/abortSignal.js +111 -0
- package/dist/client/server/middleware/auth.js +388 -0
- package/dist/client/server/middleware/cache.js +359 -0
- package/dist/client/server/middleware/common.js +281 -0
- package/dist/client/server/middleware/deprecation.js +190 -0
- package/dist/client/server/middleware/mcpBodyAttachment.js +63 -0
- package/dist/client/server/middleware/rateLimit.js +227 -0
- package/dist/client/server/middleware/validation.js +388 -0
- package/dist/client/server/openapi/generator.js +398 -0
- package/dist/client/server/openapi/index.js +36 -0
- package/dist/client/server/openapi/schemas.js +695 -0
- package/dist/client/server/openapi/templates.js +374 -0
- package/dist/client/server/routes/agentRoutes.js +171 -0
- package/dist/client/server/routes/claudeProxyRoutes.js +1600 -0
- package/dist/client/server/routes/healthRoutes.js +187 -0
- package/dist/client/server/routes/index.js +57 -0
- package/dist/client/server/routes/mcpRoutes.js +342 -0
- package/dist/client/server/routes/memoryRoutes.js +350 -0
- package/dist/client/server/routes/openApiRoutes.js +126 -0
- package/dist/client/server/routes/toolRoutes.js +199 -0
- package/dist/client/server/streaming/dataStream.js +486 -0
- package/dist/client/server/streaming/index.js +11 -0
- package/dist/client/server/types.js +67 -0
- package/dist/client/server/utils/redaction.js +334 -0
- package/dist/client/server/utils/validation.js +243 -0
- package/dist/client/server/websocket/WebSocketHandler.js +383 -0
- package/dist/client/server/websocket/index.js +4 -0
- package/dist/client/services/server/ai/observability/instrumentation.js +808 -0
- package/dist/client/sseClient.d.ts +156 -0
- package/dist/client/sseClient.js +545 -0
- package/dist/client/streamingClient.d.ts +327 -0
- package/dist/client/streamingClient.js +917 -0
- package/dist/client/telemetry/attributes.js +100 -0
- package/dist/client/telemetry/index.js +26 -0
- package/dist/client/telemetry/telemetryService.js +308 -0
- package/dist/client/telemetry/tracers.js +17 -0
- package/dist/client/telemetry/withSpan.js +34 -0
- package/dist/client/types/actionTypes.js +6 -0
- package/dist/client/types/analytics.js +5 -0
- package/dist/client/types/authTypes.js +8 -0
- package/dist/client/types/circuitBreakerErrors.js +34 -0
- package/dist/client/types/cli.js +21 -0
- package/dist/client/types/clientTypes.js +10 -0
- package/dist/client/types/common.js +51 -0
- package/dist/client/types/configTypes.js +49 -0
- package/dist/client/types/content.js +19 -0
- package/dist/client/types/contextTypes.js +400 -0
- package/dist/client/types/conversation.js +47 -0
- package/dist/client/types/conversationMemoryInterface.js +6 -0
- package/dist/client/types/domainTypes.js +5 -0
- package/dist/client/types/errors.js +167 -0
- package/dist/client/types/evaluation.js +5 -0
- package/dist/client/types/evaluationProviders.js +5 -0
- package/dist/client/types/evaluationTypes.js +1 -0
- package/dist/client/types/externalMcp.js +6 -0
- package/dist/client/types/fileReferenceTypes.js +8 -0
- package/dist/client/types/fileTypes.js +4 -0
- package/dist/client/types/generateTypes.js +1 -0
- package/dist/client/types/guardrails.js +1 -0
- package/dist/client/types/hitlTypes.js +8 -0
- package/dist/client/types/index.js +57 -0
- package/dist/client/types/mcpTypes.js +5 -0
- package/dist/client/types/middlewareTypes.js +1 -0
- package/dist/client/types/modelTypes.js +30 -0
- package/dist/client/types/multimodal.js +135 -0
- package/dist/client/types/observability.js +6 -0
- package/dist/client/types/pptTypes.js +82 -0
- package/dist/client/types/providers.js +111 -0
- package/dist/client/types/proxyTypes.js +16 -0
- package/dist/client/types/ragTypes.js +7 -0
- package/dist/client/types/sdkTypes.js +8 -0
- package/dist/client/types/serviceTypes.js +5 -0
- package/dist/client/types/streamTypes.js +1 -0
- package/dist/client/types/subscriptionTypes.js +9 -0
- package/dist/client/types/taskClassificationTypes.js +5 -0
- package/dist/client/types/tools.js +24 -0
- package/dist/client/types/ttsTypes.js +57 -0
- package/dist/client/types/typeAliases.js +48 -0
- package/dist/client/types/utilities.js +4 -0
- package/dist/client/types/workflowTypes.js +30 -0
- package/dist/client/utils/async/withTimeout.js +98 -0
- package/dist/client/utils/asyncMutex.js +60 -0
- package/dist/client/utils/conversationMemory.js +431 -0
- package/dist/client/utils/csvProcessor.js +846 -0
- package/dist/client/utils/errorHandling.js +936 -0
- package/dist/client/utils/evaluationUtils.js +131 -0
- package/dist/client/utils/factoryProcessing.js +589 -0
- package/dist/client/utils/fileDetector.js +2161 -0
- package/dist/client/utils/imageCache.js +376 -0
- package/dist/client/utils/imageProcessor.js +704 -0
- package/dist/client/utils/logger.js +491 -0
- package/dist/client/utils/mcpDefaults.js +134 -0
- package/dist/client/utils/messageBuilder.js +1653 -0
- package/dist/client/utils/modelAliasResolver.js +54 -0
- package/dist/client/utils/modelDetection.js +80 -0
- package/dist/client/utils/modelRouter.js +292 -0
- package/dist/client/utils/multimodalOptionsBuilder.js +65 -0
- package/dist/client/utils/observabilityHelpers.js +47 -0
- package/dist/client/utils/parameterValidation.js +966 -0
- package/dist/client/utils/pdfProcessor.js +410 -0
- package/dist/client/utils/performance.js +222 -0
- package/dist/client/utils/pricing.js +340 -0
- package/dist/client/utils/promptRedaction.js +62 -0
- package/dist/client/utils/providerConfig.js +1009 -0
- package/dist/client/utils/providerHealth.js +1237 -0
- package/dist/client/utils/providerRetry.js +112 -0
- package/dist/client/utils/providerUtils.js +434 -0
- package/dist/client/utils/rateLimiter.js +200 -0
- package/dist/client/utils/redis.js +368 -0
- package/dist/client/utils/retryHandler.js +269 -0
- package/dist/client/utils/retryability.js +22 -0
- package/dist/client/utils/sanitizers/svg.js +481 -0
- package/dist/client/utils/schemaConversion.js +255 -0
- package/dist/client/utils/taskClassificationUtils.js +149 -0
- package/dist/client/utils/taskClassifier.js +94 -0
- package/dist/client/utils/thinkingConfig.js +104 -0
- package/dist/client/utils/timeout.js +359 -0
- package/dist/client/utils/tokenEstimation.js +142 -0
- package/dist/client/utils/tokenLimits.js +125 -0
- package/dist/client/utils/tokenUtils.js +239 -0
- package/dist/client/utils/toolUtils.js +75 -0
- package/dist/client/utils/transformationUtils.js +554 -0
- package/dist/client/utils/ttsProcessor.js +286 -0
- package/dist/client/utils/typeUtils.js +97 -0
- package/dist/client/utils/videoAnalysisProcessor.js +67 -0
- package/dist/client/workflow/config.js +398 -0
- package/dist/client/workflow/core/ensembleExecutor.js +407 -0
- package/dist/client/workflow/core/judgeScorer.js +544 -0
- package/dist/client/workflow/core/responseConditioner.js +225 -0
- package/dist/client/workflow/core/types/conditionerTypes.js +7 -0
- package/dist/client/workflow/core/types/ensembleTypes.js +7 -0
- package/dist/client/workflow/core/types/index.js +7 -0
- package/dist/client/workflow/core/types/judgeTypes.js +7 -0
- package/dist/client/workflow/core/types/layerTypes.js +7 -0
- package/dist/client/workflow/core/types/registryTypes.js +7 -0
- package/dist/client/workflow/core/workflowRegistry.js +304 -0
- package/dist/client/workflow/core/workflowRunner.js +586 -0
- package/dist/client/workflow/index.js +50 -0
- package/dist/client/workflow/types.js +9 -0
- package/dist/client/workflow/utils/types/index.js +7 -0
- package/dist/client/workflow/utils/workflowMetrics.js +311 -0
- package/dist/client/workflow/utils/workflowValidation.js +420 -0
- package/dist/client/workflow/workflows/adaptiveWorkflow.js +366 -0
- package/dist/client/workflow/workflows/consensusWorkflow.js +192 -0
- package/dist/client/workflow/workflows/fallbackWorkflow.js +225 -0
- package/dist/client/workflow/workflows/multiJudgeWorkflow.js +351 -0
- package/dist/client/wsClient.d.ts +130 -0
- package/dist/client/wsClient.js +369 -0
- package/dist/config/configManager.js +2 -2
- package/dist/constants/contextWindows.js +15 -13
- package/dist/constants/enums.d.ts +10 -16
- package/dist/constants/enums.js +12 -18
- package/dist/constants/index.d.ts +0 -10
- package/dist/constants/index.js +1 -1
- package/dist/constants/tokens.d.ts +29 -16
- package/dist/constants/tokens.js +23 -16
- package/dist/core/baseProvider.d.ts +5 -5
- package/dist/core/baseProvider.js +6 -6
- package/dist/core/constants.js +6 -1
- package/dist/core/dynamicModels.js +10 -6
- package/dist/core/evaluationProviders.js +1 -1
- package/dist/core/infrastructure/baseError.d.ts +1 -1
- package/dist/core/infrastructure/baseFactory.d.ts +1 -6
- package/dist/core/infrastructure/baseRegistry.d.ts +6 -5
- package/dist/core/infrastructure/index.d.ts +6 -4
- package/dist/core/infrastructure/index.js +2 -2
- package/dist/core/modelConfiguration.js +3 -1
- package/dist/core/modules/GenerationHandler.d.ts +3 -3
- package/dist/core/modules/GenerationHandler.js +49 -41
- package/dist/core/modules/MessageBuilder.d.ts +5 -5
- package/dist/core/modules/MessageBuilder.js +4 -6
- package/dist/core/modules/StreamHandler.js +26 -12
- package/dist/core/modules/TelemetryHandler.d.ts +4 -6
- package/dist/core/modules/TelemetryHandler.js +7 -6
- package/dist/core/modules/ToolsManager.d.ts +2 -12
- package/dist/core/modules/ToolsManager.js +20 -4
- package/dist/core/modules/Utilities.js +3 -1
- package/dist/core/redisConversationMemoryManager.js +3 -3
- package/dist/core/streamAnalytics.js +23 -9
- package/dist/evaluation/contextBuilder.d.ts +2 -2
- package/dist/evaluation/contextBuilder.js +2 -2
- package/dist/evaluation/index.d.ts +2 -2
- package/dist/evaluation/retryManager.js +1 -1
- package/dist/factories/providerFactory.js +2 -2
- package/dist/features/ppt/constants.js +1 -1
- package/dist/features/ppt/presentationOrchestrator.js +7 -3
- package/dist/features/ppt/slideGenerator.d.ts +2 -1
- package/dist/features/ppt/slideGenerator.js +6 -1
- package/dist/files/fileTools.d.ts +16 -247
- package/dist/files/fileTools.js +16 -15
- package/dist/index.d.ts +5 -3
- package/dist/index.js +20 -3
- package/dist/lib/adapters/providerImageAdapter.js +13 -22
- package/dist/lib/adapters/video/videoAnalyzer.d.ts +4 -4
- package/dist/lib/adapters/video/videoAnalyzer.js +3 -3
- package/dist/lib/agent/directTools.d.ts +20 -289
- package/dist/lib/agent/directTools.js +11 -10
- package/dist/lib/auth/accountPool.d.ts +68 -0
- package/dist/lib/auth/accountPool.js +179 -0
- package/dist/lib/auth/anthropicOAuth.d.ts +15 -5
- package/dist/lib/auth/anthropicOAuth.js +117 -57
- package/dist/lib/auth/index.d.ts +7 -5
- package/dist/lib/auth/index.js +6 -2
- package/dist/lib/auth/tokenStore.d.ts +71 -27
- package/dist/lib/auth/tokenStore.js +342 -64
- package/dist/lib/client/aiSdkAdapter.d.ts +196 -0
- package/dist/lib/client/aiSdkAdapter.js +488 -0
- package/dist/lib/client/auth.d.ts +248 -0
- package/dist/lib/client/auth.js +474 -0
- package/dist/lib/client/errors.d.ts +299 -0
- package/dist/lib/client/errors.js +553 -0
- package/dist/lib/client/httpClient.d.ts +297 -0
- package/dist/lib/client/httpClient.js +838 -0
- package/dist/lib/client/index.d.ts +111 -0
- package/dist/lib/client/index.js +173 -0
- package/dist/lib/client/interceptors.d.ts +283 -0
- package/dist/lib/client/interceptors.js +602 -0
- package/dist/lib/client/reactHooks.d.ts +239 -0
- package/dist/lib/client/reactHooks.js +1160 -0
- package/dist/lib/client/sseClient.d.ts +156 -0
- package/dist/lib/client/sseClient.js +546 -0
- package/dist/lib/client/streamingClient.d.ts +327 -0
- package/dist/lib/client/streamingClient.js +918 -0
- package/dist/lib/client/wsClient.d.ts +130 -0
- package/dist/lib/client/wsClient.js +370 -0
- package/dist/lib/config/configManager.js +2 -2
- package/dist/lib/constants/contextWindows.js +15 -13
- package/dist/lib/constants/enums.d.ts +10 -16
- package/dist/lib/constants/enums.js +12 -18
- package/dist/lib/constants/index.d.ts +0 -10
- package/dist/lib/constants/index.js +1 -1
- package/dist/lib/constants/tokens.d.ts +29 -16
- package/dist/lib/constants/tokens.js +23 -16
- package/dist/lib/core/baseProvider.d.ts +5 -5
- package/dist/lib/core/baseProvider.js +6 -6
- package/dist/lib/core/constants.js +6 -1
- package/dist/lib/core/dynamicModels.js +10 -6
- package/dist/lib/core/evaluationProviders.js +1 -1
- package/dist/lib/core/infrastructure/baseError.d.ts +1 -1
- package/dist/lib/core/infrastructure/baseFactory.d.ts +1 -6
- package/dist/lib/core/infrastructure/baseRegistry.d.ts +6 -5
- package/dist/lib/core/infrastructure/index.d.ts +6 -4
- package/dist/lib/core/infrastructure/index.js +2 -2
- package/dist/lib/core/modelConfiguration.js +3 -1
- package/dist/lib/core/modules/GenerationHandler.d.ts +3 -3
- package/dist/lib/core/modules/GenerationHandler.js +49 -41
- package/dist/lib/core/modules/MessageBuilder.d.ts +5 -5
- package/dist/lib/core/modules/MessageBuilder.js +4 -6
- package/dist/lib/core/modules/StreamHandler.js +26 -12
- package/dist/lib/core/modules/TelemetryHandler.d.ts +4 -6
- package/dist/lib/core/modules/TelemetryHandler.js +7 -6
- package/dist/lib/core/modules/ToolsManager.d.ts +2 -12
- package/dist/lib/core/modules/ToolsManager.js +20 -4
- package/dist/lib/core/modules/Utilities.js +3 -1
- package/dist/lib/core/redisConversationMemoryManager.js +3 -3
- package/dist/lib/core/streamAnalytics.js +23 -9
- package/dist/lib/evaluation/contextBuilder.d.ts +2 -2
- package/dist/lib/evaluation/contextBuilder.js +2 -2
- package/dist/lib/evaluation/index.d.ts +2 -2
- package/dist/lib/evaluation/retryManager.js +1 -1
- package/dist/lib/factories/providerFactory.js +2 -2
- package/dist/lib/features/ppt/constants.js +1 -1
- package/dist/lib/features/ppt/presentationOrchestrator.js +7 -3
- package/dist/lib/features/ppt/slideGenerator.d.ts +2 -1
- package/dist/lib/features/ppt/slideGenerator.js +6 -1
- package/dist/lib/files/fileTools.d.ts +16 -247
- package/dist/lib/files/fileTools.js +16 -15
- package/dist/lib/index.d.ts +5 -3
- package/dist/lib/index.js +20 -3
- package/dist/lib/mcp/batching/requestBatcher.js +1 -1
- package/dist/lib/mcp/externalServerManager.js +5 -2
- package/dist/lib/mcp/factory.js +1 -1
- package/dist/lib/mcp/index.d.ts +1 -1
- package/dist/lib/mcp/index.js +1 -1
- package/dist/lib/mcp/mcpCircuitBreaker.d.ts +1 -0
- package/dist/lib/mcp/mcpCircuitBreaker.js +30 -4
- package/dist/lib/mcp/mcpClientFactory.js +33 -4
- package/dist/lib/mcp/toolDiscoveryService.js +52 -5
- package/dist/lib/mcp/toolRegistry.js +7 -1
- package/dist/lib/memory/memoryRetrievalTools.d.ts +5 -89
- package/dist/lib/memory/memoryRetrievalTools.js +1 -1
- package/dist/lib/middleware/builtin/analytics.js +3 -0
- package/dist/lib/middleware/builtin/autoEvaluation.js +46 -24
- package/dist/lib/middleware/builtin/guardrails.js +4 -0
- package/dist/lib/middleware/builtin/lifecycle.js +10 -6
- package/dist/lib/middleware/factory.d.ts +3 -3
- package/dist/lib/middleware/factory.js +3 -2
- package/dist/lib/middleware/index.d.ts +1 -1
- package/dist/lib/middleware/registry.d.ts +2 -2
- package/dist/lib/middleware/registry.js +1 -0
- package/dist/lib/middleware/utils/guardrailsUtils.d.ts +5 -6
- package/dist/lib/middleware/utils/guardrailsUtils.js +15 -6
- package/dist/lib/neurolink.d.ts +9 -20
- package/dist/lib/neurolink.js +278 -186
- package/dist/lib/observability/retryPolicy.d.ts +2 -13
- package/dist/lib/observability/sampling/samplers.d.ts +2 -11
- package/dist/lib/observability/spanProcessor.d.ts +2 -14
- package/dist/lib/processors/base/BaseFileProcessor.js +1 -1
- package/dist/lib/processors/document/OpenDocumentProcessor.js +5 -3
- package/dist/lib/processors/media/VideoProcessor.js +157 -101
- package/dist/lib/providers/amazonBedrock.js +12 -5
- package/dist/lib/providers/amazonSagemaker.d.ts +5 -5
- package/dist/lib/providers/amazonSagemaker.js +6 -2
- package/dist/lib/providers/anthropic.d.ts +3 -3
- package/dist/lib/providers/anthropic.js +23 -192
- package/dist/lib/providers/anthropicBaseProvider.d.ts +4 -4
- package/dist/lib/providers/anthropicBaseProvider.js +24 -13
- package/dist/lib/providers/azureOpenai.d.ts +2 -2
- package/dist/lib/providers/azureOpenai.js +6 -6
- package/dist/lib/providers/googleAiStudio.d.ts +2 -2
- package/dist/lib/providers/googleAiStudio.js +15 -7
- package/dist/lib/providers/googleNativeGemini3.d.ts +3 -54
- package/dist/lib/providers/googleNativeGemini3.js +14 -10
- package/dist/lib/providers/googleVertex.d.ts +6 -6
- package/dist/lib/providers/googleVertex.js +32 -26
- package/dist/lib/providers/huggingFace.d.ts +4 -4
- package/dist/lib/providers/huggingFace.js +15 -5
- package/dist/lib/providers/litellm.d.ts +4 -4
- package/dist/lib/providers/litellm.js +54 -42
- package/dist/lib/providers/mistral.d.ts +2 -2
- package/dist/lib/providers/mistral.js +5 -4
- package/dist/lib/providers/ollama.d.ts +7 -4
- package/dist/lib/providers/ollama.js +30 -8
- package/dist/lib/providers/openAI.d.ts +2 -2
- package/dist/lib/providers/openAI.js +46 -21
- package/dist/lib/providers/openRouter.d.ts +4 -4
- package/dist/lib/providers/openRouter.js +63 -35
- package/dist/lib/providers/openaiCompatible.d.ts +2 -2
- package/dist/lib/providers/openaiCompatible.js +18 -9
- package/dist/lib/providers/providerTypeUtils.d.ts +28 -0
- package/dist/lib/providers/providerTypeUtils.js +47 -0
- package/dist/lib/providers/sagemaker/config.js +5 -5
- package/dist/lib/providers/sagemaker/language-model.d.ts +23 -13
- package/dist/lib/providers/sagemaker/language-model.js +20 -8
- package/dist/lib/proxy/accountQuota.d.ts +33 -0
- package/dist/lib/proxy/accountQuota.js +163 -0
- package/dist/lib/proxy/claudeFormat.d.ts +143 -0
- package/dist/lib/proxy/claudeFormat.js +596 -0
- package/dist/lib/proxy/cloaking/index.d.ts +44 -0
- package/dist/lib/proxy/cloaking/index.js +87 -0
- package/dist/lib/proxy/cloaking/plugins/headerScrubber.d.ts +9 -0
- package/dist/lib/proxy/cloaking/plugins/headerScrubber.js +87 -0
- package/dist/lib/proxy/cloaking/plugins/sessionIdentity.d.ts +15 -0
- package/dist/lib/proxy/cloaking/plugins/sessionIdentity.js +66 -0
- package/dist/lib/proxy/cloaking/plugins/systemPromptInjector.d.ts +11 -0
- package/dist/lib/proxy/cloaking/plugins/systemPromptInjector.js +84 -0
- package/dist/lib/proxy/cloaking/plugins/tlsFingerprint.d.ts +14 -0
- package/dist/lib/proxy/cloaking/plugins/tlsFingerprint.js +39 -0
- package/dist/lib/proxy/cloaking/plugins/wordObfuscator.d.ts +9 -0
- package/dist/lib/proxy/cloaking/plugins/wordObfuscator.js +122 -0
- package/dist/lib/proxy/cloaking/types.d.ts +1 -0
- package/dist/lib/proxy/cloaking/types.js +2 -0
- package/dist/lib/proxy/modelRouter.d.ts +10 -0
- package/dist/lib/proxy/modelRouter.js +30 -0
- package/dist/lib/proxy/oauthFetch.d.ts +36 -0
- package/dist/lib/proxy/oauthFetch.js +368 -0
- package/dist/lib/proxy/proxyConfig.d.ts +42 -0
- package/dist/lib/proxy/proxyConfig.js +500 -0
- package/dist/lib/proxy/proxyFetch.js +2 -1
- package/dist/lib/proxy/requestLogger.d.ts +50 -0
- package/dist/lib/proxy/requestLogger.js +208 -0
- package/dist/lib/proxy/tokenRefresh.d.ts +4 -0
- package/dist/lib/proxy/tokenRefresh.js +125 -0
- package/dist/lib/proxy/usageStats.d.ts +13 -0
- package/dist/lib/proxy/usageStats.js +75 -0
- package/dist/lib/rag/document/loaders.js +1 -1
- package/dist/lib/rag/pipeline/contextAssembly.d.ts +4 -7
- package/dist/lib/rag/ragIntegration.d.ts +2 -14
- package/dist/lib/rag/ragIntegration.js +1 -1
- package/dist/lib/rag/resilience/CircuitBreaker.d.ts +5 -44
- package/dist/lib/rag/resilience/RetryHandler.js +1 -1
- package/dist/lib/rag/retrieval/vectorQueryTool.d.ts +1 -9
- package/dist/lib/rag/retrieval/vectorQueryTool.js +1 -1
- package/dist/lib/sdk/toolRegistration.js +12 -1
- package/dist/lib/server/abstract/baseServerAdapter.js +2 -2
- package/dist/lib/server/adapters/honoAdapter.d.ts +6 -0
- package/dist/lib/server/adapters/honoAdapter.js +76 -10
- package/dist/lib/server/middleware/cache.js +3 -0
- package/dist/lib/server/routes/claudeProxyRoutes.d.ts +44 -0
- package/dist/lib/server/routes/claudeProxyRoutes.js +1601 -0
- package/dist/lib/server/routes/healthRoutes.js +18 -1
- package/dist/lib/server/routes/index.d.ts +7 -0
- package/dist/lib/server/routes/index.js +8 -0
- package/dist/lib/server/streaming/dataStream.d.ts +1 -5
- package/dist/lib/server/streaming/dataStream.js +3 -0
- package/dist/lib/server/utils/validation.d.ts +24 -124
- package/dist/lib/server/utils/validation.js +2 -2
- package/dist/lib/services/server/ai/observability/instrumentation.js +4 -0
- package/dist/lib/telemetry/attributes.d.ts +38 -0
- package/dist/lib/telemetry/attributes.js +40 -0
- package/dist/lib/telemetry/tracers.d.ts +1 -0
- package/dist/lib/telemetry/tracers.js +1 -0
- package/dist/lib/types/authTypes.d.ts +56 -0
- package/dist/lib/types/authTypes.js +9 -0
- package/dist/lib/types/circuitBreakerErrors.d.ts +30 -0
- package/dist/lib/types/circuitBreakerErrors.js +35 -0
- package/dist/lib/types/cli.d.ts +258 -0
- package/dist/lib/types/clientTypes.d.ts +1050 -0
- package/dist/lib/types/clientTypes.js +11 -0
- package/dist/lib/types/common.d.ts +123 -0
- package/dist/lib/types/configTypes.d.ts +49 -0
- package/dist/lib/types/configTypes.js +4 -0
- package/dist/lib/types/conversation.d.ts +0 -5
- package/dist/lib/types/evaluationTypes.d.ts +2 -2
- package/dist/lib/types/fileTypes.d.ts +47 -0
- package/dist/lib/types/generateTypes.d.ts +7 -3
- package/dist/lib/types/guardrails.d.ts +2 -2
- package/dist/lib/types/index.d.ts +4 -1
- package/dist/lib/types/index.js +5 -0
- package/dist/lib/types/middlewareTypes.d.ts +3 -3
- package/dist/lib/types/modelTypes.d.ts +7 -97
- package/dist/lib/types/modelTypes.js +3 -3
- package/dist/lib/types/observability.d.ts +37 -0
- package/dist/lib/types/providers.d.ts +107 -0
- package/dist/lib/types/proxyTypes.d.ts +536 -0
- package/dist/lib/types/proxyTypes.js +17 -0
- package/dist/lib/types/ragTypes.d.ts +49 -1
- package/dist/lib/types/streamTypes.d.ts +37 -13
- package/dist/lib/types/subscriptionTypes.d.ts +77 -0
- package/dist/lib/types/subscriptionTypes.js +2 -0
- package/dist/lib/types/tools.d.ts +45 -1
- package/dist/lib/types/typeAliases.d.ts +8 -0
- package/dist/lib/types/typeAliases.js +1 -0
- package/dist/lib/utils/async/retry.d.ts +4 -33
- package/dist/lib/utils/asyncMutex.d.ts +14 -0
- package/dist/lib/utils/asyncMutex.js +61 -0
- package/dist/lib/utils/errorHandling.d.ts +2 -1
- package/dist/lib/utils/errorHandling.js +14 -6
- package/dist/lib/utils/fileDetector.d.ts +13 -1
- package/dist/lib/utils/fileDetector.js +114 -32
- package/dist/lib/utils/imageProcessor.js +7 -7
- package/dist/lib/utils/json/safeParse.d.ts +1 -8
- package/dist/lib/utils/mcpDefaults.d.ts +1 -1
- package/dist/lib/utils/mcpDefaults.js +11 -2
- package/dist/lib/utils/messageBuilder.d.ts +5 -5
- package/dist/lib/utils/messageBuilder.js +106 -80
- package/dist/lib/utils/modelChoices.d.ts +1 -8
- package/dist/lib/utils/pdfProcessor.d.ts +1 -25
- package/dist/lib/utils/pdfProcessor.js +5 -4
- package/dist/lib/utils/pricing.js +28 -5
- package/dist/lib/utils/providerHealth.d.ts +1 -1
- package/dist/lib/utils/rateLimiter.d.ts +1 -15
- package/dist/lib/utils/redis.d.ts +1 -1
- package/dist/lib/utils/redis.js +3 -3
- package/dist/lib/utils/sanitizers/filename.d.ts +2 -22
- package/dist/lib/utils/sanitizers/index.d.ts +4 -2
- package/dist/lib/utils/sanitizers/svg.d.ts +1 -11
- package/dist/lib/utils/schemaConversion.js +4 -1
- package/dist/lib/utils/thinkingConfig.d.ts +1 -33
- package/dist/lib/utils/tokenUtils.d.ts +1 -39
- package/dist/lib/utils/videoAnalysisProcessor.d.ts +5 -5
- package/dist/lib/utils/videoAnalysisProcessor.js +2 -2
- package/dist/lib/workflow/config.d.ts +89 -1257
- package/dist/lib/workflow/utils/workflowValidation.js +1 -1
- package/dist/mcp/batching/requestBatcher.js +1 -1
- package/dist/mcp/externalServerManager.js +5 -2
- package/dist/mcp/factory.js +1 -1
- package/dist/mcp/index.d.ts +1 -1
- package/dist/mcp/index.js +1 -1
- package/dist/mcp/mcpCircuitBreaker.d.ts +1 -0
- package/dist/mcp/mcpCircuitBreaker.js +30 -4
- package/dist/mcp/mcpClientFactory.js +33 -4
- package/dist/mcp/toolDiscoveryService.js +52 -5
- package/dist/mcp/toolRegistry.js +7 -1
- package/dist/memory/memoryRetrievalTools.d.ts +5 -89
- package/dist/memory/memoryRetrievalTools.js +1 -1
- package/dist/middleware/builtin/analytics.js +3 -0
- package/dist/middleware/builtin/autoEvaluation.js +46 -24
- package/dist/middleware/builtin/guardrails.js +4 -0
- package/dist/middleware/builtin/lifecycle.js +10 -6
- package/dist/middleware/factory.d.ts +3 -3
- package/dist/middleware/factory.js +3 -2
- package/dist/middleware/index.d.ts +1 -1
- package/dist/middleware/registry.d.ts +2 -2
- package/dist/middleware/registry.js +1 -0
- package/dist/middleware/utils/guardrailsUtils.d.ts +5 -6
- package/dist/middleware/utils/guardrailsUtils.js +15 -6
- package/dist/neurolink.d.ts +9 -20
- package/dist/neurolink.js +278 -186
- package/dist/observability/retryPolicy.d.ts +2 -13
- package/dist/observability/sampling/samplers.d.ts +2 -11
- package/dist/observability/spanProcessor.d.ts +2 -14
- package/dist/processors/base/BaseFileProcessor.js +1 -1
- package/dist/processors/document/OpenDocumentProcessor.js +5 -3
- package/dist/processors/media/VideoProcessor.js +157 -101
- package/dist/providers/amazonBedrock.js +12 -5
- package/dist/providers/amazonSagemaker.d.ts +5 -5
- package/dist/providers/amazonSagemaker.js +6 -2
- package/dist/providers/anthropic.d.ts +3 -3
- package/dist/providers/anthropic.js +23 -192
- package/dist/providers/anthropicBaseProvider.d.ts +4 -4
- package/dist/providers/anthropicBaseProvider.js +24 -13
- package/dist/providers/azureOpenai.d.ts +2 -2
- package/dist/providers/azureOpenai.js +6 -6
- package/dist/providers/googleAiStudio.d.ts +2 -2
- package/dist/providers/googleAiStudio.js +15 -7
- package/dist/providers/googleNativeGemini3.d.ts +3 -54
- package/dist/providers/googleNativeGemini3.js +14 -10
- package/dist/providers/googleVertex.d.ts +6 -6
- package/dist/providers/googleVertex.js +32 -26
- package/dist/providers/huggingFace.d.ts +4 -4
- package/dist/providers/huggingFace.js +15 -5
- package/dist/providers/litellm.d.ts +4 -4
- package/dist/providers/litellm.js +54 -42
- package/dist/providers/mistral.d.ts +2 -2
- package/dist/providers/mistral.js +5 -4
- package/dist/providers/ollama.d.ts +7 -4
- package/dist/providers/ollama.js +30 -8
- package/dist/providers/openAI.d.ts +2 -2
- package/dist/providers/openAI.js +46 -21
- package/dist/providers/openRouter.d.ts +4 -4
- package/dist/providers/openRouter.js +63 -35
- package/dist/providers/openaiCompatible.d.ts +2 -2
- package/dist/providers/openaiCompatible.js +18 -9
- package/dist/providers/providerTypeUtils.d.ts +28 -0
- package/dist/providers/providerTypeUtils.js +46 -0
- package/dist/providers/sagemaker/config.js +5 -5
- package/dist/providers/sagemaker/language-model.d.ts +23 -13
- package/dist/providers/sagemaker/language-model.js +20 -8
- package/dist/proxy/accountQuota.d.ts +33 -0
- package/dist/proxy/accountQuota.js +162 -0
- package/dist/proxy/claudeFormat.d.ts +143 -0
- package/dist/proxy/claudeFormat.js +595 -0
- package/dist/proxy/cloaking/index.d.ts +44 -0
- package/dist/proxy/cloaking/index.js +86 -0
- package/dist/proxy/cloaking/plugins/headerScrubber.d.ts +9 -0
- package/dist/proxy/cloaking/plugins/headerScrubber.js +86 -0
- package/dist/proxy/cloaking/plugins/sessionIdentity.d.ts +15 -0
- package/dist/proxy/cloaking/plugins/sessionIdentity.js +65 -0
- package/dist/proxy/cloaking/plugins/systemPromptInjector.d.ts +11 -0
- package/dist/proxy/cloaking/plugins/systemPromptInjector.js +83 -0
- package/dist/proxy/cloaking/plugins/tlsFingerprint.d.ts +14 -0
- package/dist/proxy/cloaking/plugins/tlsFingerprint.js +38 -0
- package/dist/proxy/cloaking/plugins/wordObfuscator.d.ts +9 -0
- package/dist/proxy/cloaking/plugins/wordObfuscator.js +121 -0
- package/dist/proxy/cloaking/types.d.ts +1 -0
- package/dist/proxy/cloaking/types.js +1 -0
- package/dist/proxy/modelRouter.d.ts +10 -0
- package/dist/proxy/modelRouter.js +29 -0
- package/dist/proxy/oauthFetch.d.ts +36 -0
- package/dist/proxy/oauthFetch.js +367 -0
- package/dist/proxy/proxyConfig.d.ts +42 -0
- package/dist/proxy/proxyConfig.js +499 -0
- package/dist/proxy/proxyFetch.js +2 -1
- package/dist/proxy/requestLogger.d.ts +50 -0
- package/dist/proxy/requestLogger.js +207 -0
- package/dist/proxy/tokenRefresh.d.ts +4 -0
- package/dist/proxy/tokenRefresh.js +124 -0
- package/dist/proxy/usageStats.d.ts +13 -0
- package/dist/proxy/usageStats.js +74 -0
- package/dist/rag/document/loaders.js +1 -1
- package/dist/rag/pipeline/contextAssembly.d.ts +4 -7
- package/dist/rag/ragIntegration.d.ts +2 -14
- package/dist/rag/ragIntegration.js +1 -1
- package/dist/rag/resilience/CircuitBreaker.d.ts +5 -44
- package/dist/rag/resilience/RetryHandler.js +1 -1
- package/dist/rag/retrieval/vectorQueryTool.d.ts +1 -9
- package/dist/rag/retrieval/vectorQueryTool.js +1 -1
- package/dist/sdk/toolRegistration.js +12 -1
- package/dist/server/abstract/baseServerAdapter.js +2 -2
- package/dist/server/adapters/honoAdapter.d.ts +6 -0
- package/dist/server/adapters/honoAdapter.js +76 -10
- package/dist/server/middleware/cache.js +3 -0
- package/dist/server/routes/claudeProxyRoutes.d.ts +44 -0
- package/dist/server/routes/claudeProxyRoutes.js +1600 -0
- package/dist/server/routes/healthRoutes.js +18 -1
- package/dist/server/routes/index.d.ts +7 -0
- package/dist/server/routes/index.js +8 -0
- package/dist/server/streaming/dataStream.d.ts +1 -5
- package/dist/server/streaming/dataStream.js +3 -0
- package/dist/server/utils/validation.d.ts +24 -124
- package/dist/server/utils/validation.js +2 -2
- package/dist/services/server/ai/observability/instrumentation.js +4 -0
- package/dist/telemetry/attributes.d.ts +38 -0
- package/dist/telemetry/attributes.js +40 -0
- package/dist/telemetry/tracers.d.ts +1 -0
- package/dist/telemetry/tracers.js +1 -0
- package/dist/types/authTypes.d.ts +56 -0
- package/dist/types/authTypes.js +8 -0
- package/dist/types/circuitBreakerErrors.d.ts +30 -0
- package/dist/types/circuitBreakerErrors.js +34 -0
- package/dist/types/cli.d.ts +258 -0
- package/dist/types/clientTypes.d.ts +1050 -0
- package/dist/types/clientTypes.js +10 -0
- package/dist/types/common.d.ts +123 -0
- package/dist/types/configTypes.d.ts +49 -0
- package/dist/types/configTypes.js +4 -0
- package/dist/types/conversation.d.ts +0 -5
- package/dist/types/evaluationTypes.d.ts +2 -2
- package/dist/types/fileTypes.d.ts +47 -0
- package/dist/types/generateTypes.d.ts +7 -3
- package/dist/types/guardrails.d.ts +2 -2
- package/dist/types/index.d.ts +4 -1
- package/dist/types/index.js +5 -0
- package/dist/types/middlewareTypes.d.ts +3 -3
- package/dist/types/modelTypes.d.ts +7 -97
- package/dist/types/modelTypes.js +3 -3
- package/dist/types/observability.d.ts +37 -0
- package/dist/types/providers.d.ts +107 -0
- package/dist/types/proxyTypes.d.ts +536 -0
- package/dist/types/proxyTypes.js +16 -0
- package/dist/types/ragTypes.d.ts +49 -1
- package/dist/types/streamTypes.d.ts +37 -13
- package/dist/types/subscriptionTypes.d.ts +77 -0
- package/dist/types/subscriptionTypes.js +2 -0
- package/dist/types/tools.d.ts +45 -1
- package/dist/types/typeAliases.d.ts +8 -0
- package/dist/types/typeAliases.js +1 -0
- package/dist/utils/async/retry.d.ts +4 -33
- package/dist/utils/asyncMutex.d.ts +14 -0
- package/dist/utils/asyncMutex.js +60 -0
- package/dist/utils/errorHandling.d.ts +2 -1
- package/dist/utils/errorHandling.js +14 -6
- package/dist/utils/fileDetector.d.ts +13 -1
- package/dist/utils/fileDetector.js +114 -32
- package/dist/utils/imageProcessor.js +7 -7
- package/dist/utils/json/safeParse.d.ts +1 -8
- package/dist/utils/mcpDefaults.d.ts +1 -1
- package/dist/utils/mcpDefaults.js +11 -2
- package/dist/utils/messageBuilder.d.ts +5 -5
- package/dist/utils/messageBuilder.js +106 -80
- package/dist/utils/modelChoices.d.ts +1 -8
- package/dist/utils/pdfProcessor.d.ts +1 -25
- package/dist/utils/pdfProcessor.js +5 -4
- package/dist/utils/pricing.js +28 -5
- package/dist/utils/rateLimiter.d.ts +1 -15
- package/dist/utils/redis.d.ts +1 -1
- package/dist/utils/redis.js +3 -3
- package/dist/utils/sanitizers/filename.d.ts +2 -22
- package/dist/utils/sanitizers/index.d.ts +4 -2
- package/dist/utils/sanitizers/svg.d.ts +1 -11
- package/dist/utils/schemaConversion.js +4 -1
- package/dist/utils/thinkingConfig.d.ts +1 -33
- package/dist/utils/tokenUtils.d.ts +1 -39
- package/dist/utils/videoAnalysisProcessor.d.ts +5 -5
- package/dist/utils/videoAnalysisProcessor.js +2 -2
- package/dist/workflow/config.d.ts +89 -1257
- package/dist/workflow/utils/workflowValidation.js +1 -1
- package/docs-site/mcp-server/index.js +2 -3
- package/package.json +138 -105
- package/dist/lib/memory/mem0Initializer.d.ts +0 -46
- package/dist/lib/memory/mem0Initializer.js +0 -85
- package/dist/memory/mem0Initializer.d.ts +0 -46
- package/dist/memory/mem0Initializer.js +0 -84
package/dist/neurolink.js
CHANGED
|
@@ -6,9 +6,11 @@
|
|
|
6
6
|
* Uses real MCP infrastructure for tool discovery and execution.
|
|
7
7
|
*/
|
|
8
8
|
// Load environment variables from .env file (critical for SDK usage)
|
|
9
|
-
|
|
9
|
+
// Suppress dotenv v17 stdout banner — it pollutes CLI JSON output
|
|
10
10
|
try {
|
|
11
|
-
|
|
11
|
+
process.env.DOTENV_CONFIG_QUIET = process.env.DOTENV_CONFIG_QUIET ?? "true";
|
|
12
|
+
const { config: dotenvConfig } = await import("dotenv");
|
|
13
|
+
dotenvConfig({ quiet: true });
|
|
12
14
|
}
|
|
13
15
|
catch {
|
|
14
16
|
// Environment variables should be set externally in production
|
|
@@ -43,7 +45,6 @@ import { directToolsServer } from "./mcp/servers/agent/directToolsServer.js";
|
|
|
43
45
|
import { inferAnnotations, isSafeToRetry } from "./mcp/toolAnnotations.js";
|
|
44
46
|
import { MCPToolRegistry } from "./mcp/toolRegistry.js";
|
|
45
47
|
import { initializeHippocampus, } from "./memory/hippocampusInitializer.js";
|
|
46
|
-
import { initializeMem0 } from "./memory/mem0Initializer.js";
|
|
47
48
|
import { createMemoryRetrievalTools } from "./memory/memoryRetrievalTools.js";
|
|
48
49
|
import { getMetricsAggregator, MetricsAggregator, } from "./observability/metricsAggregator.js";
|
|
49
50
|
import { SpanStatus, SpanType } from "./observability/types/spanTypes.js";
|
|
@@ -56,6 +57,7 @@ import { AuthenticationError, AuthorizationError, InvalidModelError, } from "./t
|
|
|
56
57
|
import { getConversationMessages, storeConversationTurn, } from "./utils/conversationMemory.js";
|
|
57
58
|
// Enhanced error handling imports
|
|
58
59
|
import { CircuitBreaker, ERROR_CODES, ErrorFactory, isAbortError, isRetriableError, logStructuredError, NeuroLinkError, withRetry, withTimeout, } from "./utils/errorHandling.js";
|
|
60
|
+
import { CircuitBreakerOpenError } from "./types/circuitBreakerErrors.js";
|
|
59
61
|
// Factory processing imports
|
|
60
62
|
import { createCleanStreamOptions, enhanceTextGenerationOptions, processFactoryOptions, processStreamingFactoryOptions, validateFactoryConfig, } from "./utils/factoryProcessing.js";
|
|
61
63
|
import { logger, mcpLogger } from "./utils/logger.js";
|
|
@@ -112,6 +114,22 @@ function classifyMcpErrorMessage(text) {
|
|
|
112
114
|
}
|
|
113
115
|
return "unknown";
|
|
114
116
|
}
|
|
117
|
+
function mcpCategoryToErrorCategory(mcpCategory) {
|
|
118
|
+
switch (mcpCategory) {
|
|
119
|
+
case "not_found":
|
|
120
|
+
return ErrorCategory.VALIDATION;
|
|
121
|
+
case "permission_denied":
|
|
122
|
+
return ErrorCategory.PERMISSION;
|
|
123
|
+
case "timeout":
|
|
124
|
+
return ErrorCategory.TIMEOUT;
|
|
125
|
+
case "rate_limited":
|
|
126
|
+
return ErrorCategory.RESOURCE;
|
|
127
|
+
case "validation_error":
|
|
128
|
+
return ErrorCategory.VALIDATION;
|
|
129
|
+
case "unknown":
|
|
130
|
+
return ErrorCategory.EXECUTION;
|
|
131
|
+
}
|
|
132
|
+
}
|
|
115
133
|
/**
|
|
116
134
|
* Check if an error is a non-retryable provider error that should immediately
|
|
117
135
|
* stop the retry/fallback chain. These errors represent permanent failures
|
|
@@ -166,6 +184,7 @@ function isNonRetryableProviderError(error) {
|
|
|
166
184
|
const metricsTraceContextStorage = new AsyncLocalStorage();
|
|
167
185
|
export class NeuroLink {
|
|
168
186
|
mcpInitialized = false;
|
|
187
|
+
mcpSkipped = false;
|
|
169
188
|
mcpInitPromise = null;
|
|
170
189
|
emitter = new EventEmitter();
|
|
171
190
|
toolRegistry;
|
|
@@ -210,13 +229,15 @@ export class NeuroLink {
|
|
|
210
229
|
*/
|
|
211
230
|
emitToolEndEvent(toolName, startTime, success, result, error) {
|
|
212
231
|
// Emit tool end event (NeuroLink format - enhanced with result/error)
|
|
232
|
+
// Serialize error to string for consumer compatibility (event listeners
|
|
233
|
+
// commonly check `typeof event.error === "string"`).
|
|
213
234
|
this.emitter.emit("tool:end", {
|
|
214
235
|
toolName,
|
|
215
236
|
responseTime: Date.now() - startTime,
|
|
216
237
|
success,
|
|
217
238
|
timestamp: Date.now(),
|
|
218
239
|
result: result, // Enhanced: include actual result
|
|
219
|
-
error: error, //
|
|
240
|
+
error: error ? error.message : undefined, // Emit as string, not Error object
|
|
220
241
|
});
|
|
221
242
|
}
|
|
222
243
|
// Conversation memory support
|
|
@@ -227,9 +248,6 @@ export class NeuroLink {
|
|
|
227
248
|
enableOrchestration;
|
|
228
249
|
// HITL (Human-in-the-Loop) support
|
|
229
250
|
hitlManager;
|
|
230
|
-
// Mem0 memory instance and config for conversation context
|
|
231
|
-
mem0Instance;
|
|
232
|
-
mem0Config;
|
|
233
251
|
// Accumulated cost in USD across all generate() calls on this instance
|
|
234
252
|
_sessionCostUsd = 0;
|
|
235
253
|
// File Reference Registry for lazy on-demand file processing
|
|
@@ -312,35 +330,6 @@ export class NeuroLink {
|
|
|
312
330
|
}
|
|
313
331
|
return await callback();
|
|
314
332
|
}
|
|
315
|
-
/**
|
|
316
|
-
* Simple sync config setup for mem0
|
|
317
|
-
*/
|
|
318
|
-
initializeMem0Config() {
|
|
319
|
-
const config = this.conversationMemoryConfig?.conversationMemory;
|
|
320
|
-
if (!config?.mem0Enabled) {
|
|
321
|
-
return false;
|
|
322
|
-
}
|
|
323
|
-
this.mem0Config = config.mem0Config;
|
|
324
|
-
return true;
|
|
325
|
-
}
|
|
326
|
-
/**
|
|
327
|
-
* Async initialization called during generate/stream
|
|
328
|
-
*/
|
|
329
|
-
async ensureMem0Ready() {
|
|
330
|
-
if (this.mem0Instance !== undefined) {
|
|
331
|
-
return this.mem0Instance;
|
|
332
|
-
}
|
|
333
|
-
if (!this.initializeMem0Config()) {
|
|
334
|
-
this.mem0Instance = null;
|
|
335
|
-
return null;
|
|
336
|
-
}
|
|
337
|
-
if (!this.mem0Config) {
|
|
338
|
-
this.mem0Instance = null;
|
|
339
|
-
return null;
|
|
340
|
-
}
|
|
341
|
-
this.mem0Instance = await initializeMem0(this.mem0Config);
|
|
342
|
-
return this.mem0Instance;
|
|
343
|
-
}
|
|
344
333
|
initializeMemoryConfig() {
|
|
345
334
|
const memory = this.conversationMemoryConfig?.conversationMemory?.memory;
|
|
346
335
|
if (!memory?.enabled) {
|
|
@@ -696,6 +685,12 @@ export class NeuroLink {
|
|
|
696
685
|
};
|
|
697
686
|
}
|
|
698
687
|
catch (error) {
|
|
688
|
+
// Known limitation: this non-throwing error path returns
|
|
689
|
+
// { success: false } without recording errorCategories in
|
|
690
|
+
// toolExecutionMetrics. These are internal file-tool failures
|
|
691
|
+
// (low frequency), so the risk of metric gaps is minimal.
|
|
692
|
+
// A full fix would require access to the metrics map here,
|
|
693
|
+
// which is not available in the registration closure.
|
|
699
694
|
return {
|
|
700
695
|
success: false,
|
|
701
696
|
error: error instanceof Error ? error.message : String(error),
|
|
@@ -793,6 +788,12 @@ export class NeuroLink {
|
|
|
793
788
|
return await toolDef.execute(params);
|
|
794
789
|
}
|
|
795
790
|
catch (error) {
|
|
791
|
+
// Known limitation: this non-throwing error path returns
|
|
792
|
+
// { success: false } without recording errorCategories in
|
|
793
|
+
// toolExecutionMetrics. These are internal memory-tool failures
|
|
794
|
+
// (low frequency), so the risk of metric gaps is minimal.
|
|
795
|
+
// A full fix would require access to the metrics map here,
|
|
796
|
+
// which is not available in the registration closure.
|
|
796
797
|
return {
|
|
797
798
|
success: false,
|
|
798
799
|
error: error instanceof Error ? error.message : String(error),
|
|
@@ -816,27 +817,6 @@ ${memoryContext}
|
|
|
816
817
|
|
|
817
818
|
Current user's request: ${currentInput}`;
|
|
818
819
|
}
|
|
819
|
-
/** Extract memory context from search results */
|
|
820
|
-
extractMemoryContext(memories) {
|
|
821
|
-
return memories
|
|
822
|
-
.map((m) => m.memory || "")
|
|
823
|
-
.filter(Boolean)
|
|
824
|
-
.join("\n");
|
|
825
|
-
}
|
|
826
|
-
/** Store conversation turn in mem0 */
|
|
827
|
-
async storeMem0ConversationTurn(mem0, userContent, aiResponse, userId, metadata) {
|
|
828
|
-
// Store both user message and AI response for better context extraction
|
|
829
|
-
const conversationTurn = [
|
|
830
|
-
{ role: "user", content: userContent },
|
|
831
|
-
{ role: "assistant", content: aiResponse },
|
|
832
|
-
];
|
|
833
|
-
await mem0.add(conversationTurn, {
|
|
834
|
-
user_id: userId,
|
|
835
|
-
metadata,
|
|
836
|
-
infer: true,
|
|
837
|
-
async_mode: true,
|
|
838
|
-
});
|
|
839
|
-
}
|
|
840
820
|
/**
|
|
841
821
|
* Retrieve condensed memory for a user.
|
|
842
822
|
* Returns the input text enhanced with memory context, or unchanged if no memory.
|
|
@@ -913,7 +893,7 @@ Current user's request: ${currentInput}`;
|
|
|
913
893
|
try {
|
|
914
894
|
this.externalServerManager = new ExternalServerManager({
|
|
915
895
|
maxServers: 20,
|
|
916
|
-
defaultTimeout:
|
|
896
|
+
defaultTimeout: Math.max(10000, Number(process.env.MCP_CLIENT_TIMEOUT) || 60000),
|
|
917
897
|
enableAutoRestart: true,
|
|
918
898
|
enablePerformanceMonitoring: true,
|
|
919
899
|
}, {
|
|
@@ -1120,8 +1100,9 @@ Current user's request: ${currentInput}`;
|
|
|
1120
1100
|
* Uses isolated async context to prevent hanging
|
|
1121
1101
|
*/
|
|
1122
1102
|
async initializeMCP() {
|
|
1123
|
-
// Skip if already initialized — prevents redundant
|
|
1124
|
-
|
|
1103
|
+
// Skip if already initialized or explicitly skipped — prevents redundant
|
|
1104
|
+
// re-init on every generate call.
|
|
1105
|
+
if (this.mcpInitialized || this.mcpSkipped) {
|
|
1125
1106
|
return;
|
|
1126
1107
|
}
|
|
1127
1108
|
// Deduplicate concurrent initialization attempts — if an init is already
|
|
@@ -1130,6 +1111,21 @@ Current user's request: ${currentInput}`;
|
|
|
1130
1111
|
if (this.mcpInitPromise) {
|
|
1131
1112
|
return this.mcpInitPromise;
|
|
1132
1113
|
}
|
|
1114
|
+
// Environment-level kill switch — skip MCP-specific initialization on cold
|
|
1115
|
+
// start but always ensure providers are registered exactly once.
|
|
1116
|
+
if (process.env.NEUROLINK_SKIP_MCP === "true") {
|
|
1117
|
+
this.mcpInitPromise = (async () => {
|
|
1118
|
+
await this.initializeProviderRegistryInternal();
|
|
1119
|
+
this.mcpSkipped = true;
|
|
1120
|
+
})();
|
|
1121
|
+
try {
|
|
1122
|
+
await this.mcpInitPromise;
|
|
1123
|
+
}
|
|
1124
|
+
finally {
|
|
1125
|
+
this.mcpInitPromise = null;
|
|
1126
|
+
}
|
|
1127
|
+
return;
|
|
1128
|
+
}
|
|
1133
1129
|
this.mcpInitPromise = this.performMCPInitializationOnce();
|
|
1134
1130
|
try {
|
|
1135
1131
|
await this.mcpInitPromise;
|
|
@@ -2247,30 +2243,6 @@ Current user's request: ${currentInput}`;
|
|
|
2247
2243
|
}
|
|
2248
2244
|
// Set session and user IDs from context for Langfuse spans and execute with proper async scoping
|
|
2249
2245
|
return await this.setLangfuseContextFromOptions(options, async () => {
|
|
2250
|
-
if (this.conversationMemoryConfig?.conversationMemory
|
|
2251
|
-
?.mem0Enabled &&
|
|
2252
|
-
options.context?.userId) {
|
|
2253
|
-
try {
|
|
2254
|
-
const mem0 = await this.ensureMem0Ready();
|
|
2255
|
-
if (!mem0) {
|
|
2256
|
-
logger.debug("Mem0 not available, continuing without memory retrieval");
|
|
2257
|
-
}
|
|
2258
|
-
else {
|
|
2259
|
-
const memories = await mem0.search(options.input.text, {
|
|
2260
|
-
user_id: options.context.userId,
|
|
2261
|
-
limit: 5,
|
|
2262
|
-
});
|
|
2263
|
-
if (memories && memories.length > 0) {
|
|
2264
|
-
// Enhance the input with memory context
|
|
2265
|
-
const memoryContext = this.extractMemoryContext(memories);
|
|
2266
|
-
options.input.text = this.formatMemoryContext(memoryContext, options.input.text);
|
|
2267
|
-
}
|
|
2268
|
-
}
|
|
2269
|
-
}
|
|
2270
|
-
catch (error) {
|
|
2271
|
-
logger.warn("Mem0 memory retrieval failed:", error);
|
|
2272
|
-
}
|
|
2273
|
-
}
|
|
2274
2246
|
const startTime = Date.now();
|
|
2275
2247
|
// Apply orchestration if enabled and no specific provider/model requested
|
|
2276
2248
|
if (this.enableOrchestration &&
|
|
@@ -2485,7 +2457,7 @@ Current user's request: ${currentInput}`;
|
|
|
2485
2457
|
generateResult.analytics.cost > 0) {
|
|
2486
2458
|
this._sessionCostUsd += generateResult.analytics.cost;
|
|
2487
2459
|
}
|
|
2488
|
-
this.
|
|
2460
|
+
this.scheduleGenerateMemoryStorage(options, originalPrompt, generateResult);
|
|
2489
2461
|
// Set completion span attributes
|
|
2490
2462
|
generateSpan.setAttribute("neurolink.output_length", generateResult.content?.length || 0);
|
|
2491
2463
|
generateSpan.setAttribute("neurolink.tokens.input", generateResult.usage?.input || 0);
|
|
@@ -2535,27 +2507,9 @@ Current user's request: ${currentInput}`;
|
|
|
2535
2507
|
});
|
|
2536
2508
|
}
|
|
2537
2509
|
/**
|
|
2538
|
-
* Schedule non-blocking
|
|
2510
|
+
* Schedule non-blocking memory storage after generate completes.
|
|
2539
2511
|
*/
|
|
2540
|
-
|
|
2541
|
-
if (this.conversationMemoryConfig?.conversationMemory?.mem0Enabled &&
|
|
2542
|
-
options.context?.userId &&
|
|
2543
|
-
generateResult.content.trim()) {
|
|
2544
|
-
setImmediate(async () => {
|
|
2545
|
-
try {
|
|
2546
|
-
const mem0 = await this.ensureMem0Ready();
|
|
2547
|
-
if (mem0) {
|
|
2548
|
-
await this.storeMem0ConversationTurn(mem0, originalPrompt ?? "", generateResult.content.trim(), options.context?.userId, {
|
|
2549
|
-
timestamp: new Date().toISOString(),
|
|
2550
|
-
type: "conversation_turn_generate",
|
|
2551
|
-
});
|
|
2552
|
-
}
|
|
2553
|
-
}
|
|
2554
|
-
catch (error) {
|
|
2555
|
-
logger.warn("Mem0 memory storage failed:", error);
|
|
2556
|
-
}
|
|
2557
|
-
});
|
|
2558
|
-
}
|
|
2512
|
+
scheduleGenerateMemoryStorage(options, originalPrompt, generateResult) {
|
|
2559
2513
|
// Memory storage
|
|
2560
2514
|
if (this.conversationMemoryConfig?.conversationMemory?.memory?.enabled &&
|
|
2561
2515
|
options.context?.userId &&
|
|
@@ -4095,7 +4049,7 @@ Current user's request: ${currentInput}`;
|
|
|
4095
4049
|
// Set session and user IDs from context for Langfuse spans and execute with proper async scoping
|
|
4096
4050
|
return await this.setLangfuseContextFromOptions(options, async () => {
|
|
4097
4051
|
try {
|
|
4098
|
-
// Prepare options: init memory, MCP,
|
|
4052
|
+
// Prepare options: init memory, MCP, orchestration, Ollama auto-disable, tool detection
|
|
4099
4053
|
const { enhancedOptions, factoryResult } = await this.prepareStreamOptions(options, streamId, startTime, hrTimeStart);
|
|
4100
4054
|
const { stream: mcpStream, provider: providerName, usage: streamUsage, model: streamModel, analytics: streamAnalytics, } = await this.createMCPStream(enhancedOptions);
|
|
4101
4055
|
// Update span with resolved provider name
|
|
@@ -4291,7 +4245,7 @@ Current user's request: ${currentInput}`;
|
|
|
4291
4245
|
}); // end metricsTraceContextStorage.run
|
|
4292
4246
|
}
|
|
4293
4247
|
/**
|
|
4294
|
-
* Prepare stream options: initialize memory, MCP,
|
|
4248
|
+
* Prepare stream options: initialize memory, MCP, retrieval, orchestration,
|
|
4295
4249
|
* Ollama tool auto-disable, factory processing, and tool detection.
|
|
4296
4250
|
*/
|
|
4297
4251
|
async prepareStreamOptions(options, streamId, startTime, hrTimeStart) {
|
|
@@ -4299,31 +4253,6 @@ Current user's request: ${currentInput}`;
|
|
|
4299
4253
|
await this.initializeConversationMemoryForGeneration(streamId, startTime, hrTimeStart);
|
|
4300
4254
|
// Initialize MCP
|
|
4301
4255
|
await this.initializeMCP();
|
|
4302
|
-
if (this.conversationMemoryConfig?.conversationMemory?.mem0Enabled &&
|
|
4303
|
-
options.context?.userId) {
|
|
4304
|
-
try {
|
|
4305
|
-
const mem0 = await this.ensureMem0Ready();
|
|
4306
|
-
if (!mem0) {
|
|
4307
|
-
// Continue without memories if mem0 is not available
|
|
4308
|
-
logger.debug("Mem0 not available, continuing without memory retrieval");
|
|
4309
|
-
}
|
|
4310
|
-
else {
|
|
4311
|
-
const memories = await mem0.search(options.input.text, {
|
|
4312
|
-
user_id: options.context.userId,
|
|
4313
|
-
limit: 5,
|
|
4314
|
-
});
|
|
4315
|
-
if (memories && memories.length > 0) {
|
|
4316
|
-
// Enhance the input with memory context
|
|
4317
|
-
const memoryContext = this.extractMemoryContext(memories);
|
|
4318
|
-
options.input.text = this.formatMemoryContext(memoryContext, options.input.text);
|
|
4319
|
-
}
|
|
4320
|
-
}
|
|
4321
|
-
}
|
|
4322
|
-
catch (error) {
|
|
4323
|
-
// Non-blocking: Log error but continue with streaming
|
|
4324
|
-
logger.warn("Mem0 memory retrieval failed:", error);
|
|
4325
|
-
}
|
|
4326
|
-
}
|
|
4327
4256
|
// Memory retrieval
|
|
4328
4257
|
if (this.conversationMemoryConfig?.conversationMemory?.memory?.enabled &&
|
|
4329
4258
|
options.context?.userId) {
|
|
@@ -4538,11 +4467,16 @@ Current user's request: ${currentInput}`;
|
|
|
4538
4467
|
disableToolCache: enhancedOptions.disableToolCache,
|
|
4539
4468
|
}),
|
|
4540
4469
|
}, "NeuroLink.fallbackStream");
|
|
4541
|
-
//
|
|
4542
|
-
|
|
4543
|
-
|
|
4544
|
-
|
|
4545
|
-
|
|
4470
|
+
// Prefer the caller-supplied / compacted conversation messages that were
|
|
4471
|
+
// threaded through options. Only fall back to memory when no explicit
|
|
4472
|
+
// history was provided — this preserves caller-supplied empty arrays
|
|
4473
|
+
// (which signal "no prior context") and avoids resurrecting stale memory.
|
|
4474
|
+
const conversationMessages = enhancedOptions.conversationMessages !== undefined
|
|
4475
|
+
? enhancedOptions.conversationMessages
|
|
4476
|
+
: await getConversationMessages(this.conversationMemory, {
|
|
4477
|
+
prompt: enhancedOptions.input.text,
|
|
4478
|
+
context: enhancedOptions.context,
|
|
4479
|
+
});
|
|
4546
4480
|
const fallbackResult = await fallbackProvider.stream({
|
|
4547
4481
|
...enhancedOptions,
|
|
4548
4482
|
model: fallbackRoute.model,
|
|
@@ -4581,7 +4515,7 @@ Current user's request: ${currentInput}`;
|
|
|
4581
4515
|
}
|
|
4582
4516
|
/**
|
|
4583
4517
|
* Store conversation memory after stream consumption is complete (called from finally block).
|
|
4584
|
-
* Handles
|
|
4518
|
+
* Handles conversation memory storage in the background.
|
|
4585
4519
|
*/
|
|
4586
4520
|
async storeStreamConversationMemory(params) {
|
|
4587
4521
|
const { enhancedOptions, providerName, originalPrompt, accumulatedContent, startTime, eventSequence, } = params;
|
|
@@ -4635,24 +4569,6 @@ Current user's request: ${currentInput}`;
|
|
|
4635
4569
|
});
|
|
4636
4570
|
}
|
|
4637
4571
|
}
|
|
4638
|
-
if (this.conversationMemoryConfig?.conversationMemory?.mem0Enabled &&
|
|
4639
|
-
enhancedOptions.context?.userId &&
|
|
4640
|
-
accumulatedContent.trim()) {
|
|
4641
|
-
setImmediate(async () => {
|
|
4642
|
-
try {
|
|
4643
|
-
const mem0 = await this.ensureMem0Ready();
|
|
4644
|
-
if (mem0) {
|
|
4645
|
-
await this.storeMem0ConversationTurn(mem0, originalPrompt ?? "", accumulatedContent.trim(), enhancedOptions.context?.userId, {
|
|
4646
|
-
timestamp: new Date().toISOString(),
|
|
4647
|
-
type: "conversation_turn_stream",
|
|
4648
|
-
});
|
|
4649
|
-
}
|
|
4650
|
-
}
|
|
4651
|
-
catch (error) {
|
|
4652
|
-
logger.warn("Mem0 memory storage failed:", error);
|
|
4653
|
-
}
|
|
4654
|
-
});
|
|
4655
|
-
}
|
|
4656
4572
|
if (this.conversationMemoryConfig?.conversationMemory?.memory?.enabled &&
|
|
4657
4573
|
enhancedOptions.context?.userId &&
|
|
4658
4574
|
accumulatedContent?.trim()) {
|
|
@@ -4717,12 +4633,24 @@ Current user's request: ${currentInput}`;
|
|
|
4717
4633
|
const enhancedSystemPrompt = options.skipToolPromptInjection
|
|
4718
4634
|
? options.systemPrompt || ""
|
|
4719
4635
|
: this.createToolAwareSystemPrompt(options.systemPrompt, availableTools);
|
|
4720
|
-
// Get conversation messages for context
|
|
4721
|
-
|
|
4722
|
-
|
|
4723
|
-
|
|
4724
|
-
|
|
4725
|
-
|
|
4636
|
+
// Get conversation messages for context.
|
|
4637
|
+
// If the caller already supplied conversationMessages (e.g. proxy routes
|
|
4638
|
+
// forwarding a multi-turn Claude request), honour them — including an
|
|
4639
|
+
// explicit empty array, which signals "no prior context". Otherwise fall
|
|
4640
|
+
// back to the conversation memory store (interactive CLI / SDK sessions).
|
|
4641
|
+
const hasCallerConversationHistory = options.conversationMessages !== undefined;
|
|
4642
|
+
const resolvedConversationMessages = hasCallerConversationHistory
|
|
4643
|
+
? options.conversationMessages
|
|
4644
|
+
: await getConversationMessages(this.conversationMemory, {
|
|
4645
|
+
...options,
|
|
4646
|
+
prompt: options.input.text,
|
|
4647
|
+
context: options.context,
|
|
4648
|
+
});
|
|
4649
|
+
// Make the resolved messages the single source of truth so downstream
|
|
4650
|
+
// consumers (compaction, fallback streams) reuse them instead of
|
|
4651
|
+
// reloading from conversationMemory.
|
|
4652
|
+
options.conversationMessages = resolvedConversationMessages;
|
|
4653
|
+
let conversationMessages = resolvedConversationMessages;
|
|
4726
4654
|
// Pre-generation budget check for streaming
|
|
4727
4655
|
const streamBudget = checkContextBudget({
|
|
4728
4656
|
provider: providerName,
|
|
@@ -4736,7 +4664,7 @@ Current user's request: ${currentInput}`;
|
|
|
4736
4664
|
const streamMessageCount = conversationMessages?.length || 0;
|
|
4737
4665
|
const streamCompactionSessionId = this.getCompactionSessionId(options);
|
|
4738
4666
|
if (streamBudget.shouldCompact &&
|
|
4739
|
-
this.conversationMemory &&
|
|
4667
|
+
(hasCallerConversationHistory || this.conversationMemory) &&
|
|
4740
4668
|
streamMessageCount >
|
|
4741
4669
|
(this.lastCompactionMessageCount.get(streamCompactionSessionId) ?? 0)) {
|
|
4742
4670
|
const compactor = new ContextCompactor({
|
|
@@ -4749,6 +4677,10 @@ Current user's request: ${currentInput}`;
|
|
|
4749
4677
|
if (compactionResult.compacted) {
|
|
4750
4678
|
const repairedResult = repairToolPairs(compactionResult.messages);
|
|
4751
4679
|
conversationMessages = repairedResult.messages;
|
|
4680
|
+
// Keep options.conversationMessages in sync so downstream consumers
|
|
4681
|
+
// (e.g. handleStreamFallback) use the compacted history rather than
|
|
4682
|
+
// re-reading from conversationMemory.
|
|
4683
|
+
options.conversationMessages = conversationMessages;
|
|
4752
4684
|
this.lastCompactionMessageCount.set(streamCompactionSessionId, conversationMessages.length);
|
|
4753
4685
|
}
|
|
4754
4686
|
// POST-COMPACTION BUDGET RE-CHECK (mirrors tryMCPGeneration / directProviderGeneration)
|
|
@@ -4768,6 +4700,9 @@ Current user's request: ${currentInput}`;
|
|
|
4768
4700
|
overagePercent: Math.round((postCompactBudget.usageRatio - 1.0) * 100),
|
|
4769
4701
|
});
|
|
4770
4702
|
conversationMessages = emergencyContentTruncation(conversationMessages, postCompactBudget.availableInputTokens, postCompactBudget.breakdown, providerName);
|
|
4703
|
+
// Keep options in sync after emergency truncation so fallback paths
|
|
4704
|
+
// use the truncated history.
|
|
4705
|
+
options.conversationMessages = conversationMessages;
|
|
4771
4706
|
const finalBudget = checkContextBudget({
|
|
4772
4707
|
provider: providerName,
|
|
4773
4708
|
model: options.model,
|
|
@@ -5291,7 +5226,7 @@ Current user's request: ${currentInput}`;
|
|
|
5291
5226
|
* @param name - Unique name for the tool
|
|
5292
5227
|
* @param tool - Tool in MCPExecutableTool format (unified MCP protocol type)
|
|
5293
5228
|
*/
|
|
5294
|
-
registerTool(name, tool) {
|
|
5229
|
+
registerTool(name, tool, options) {
|
|
5295
5230
|
this.invalidateToolCache(); // Invalidate cache when a tool is registered
|
|
5296
5231
|
// Emit tool registration start event
|
|
5297
5232
|
this.emitter.emit("tools-register:start", {
|
|
@@ -5340,8 +5275,46 @@ Current user's request: ${currentInput}`;
|
|
|
5340
5275
|
return fallbackSchema;
|
|
5341
5276
|
})(),
|
|
5342
5277
|
};
|
|
5278
|
+
// Wrap execute with per-tool timeout if specified at registration.
|
|
5279
|
+
// Uses AbortSignal.timeout() composed with any parent signal from the AI SDK.
|
|
5280
|
+
// This ensures the timeout works regardless of the execution path
|
|
5281
|
+
// (direct executeTool() or AI SDK generateText() tool calling).
|
|
5282
|
+
if (options?.timeout !== undefined &&
|
|
5283
|
+
options.timeout > 0 &&
|
|
5284
|
+
Number.isFinite(options.timeout)) {
|
|
5285
|
+
const originalExecute = convertedTool.execute;
|
|
5286
|
+
const toolTimeout = options.timeout;
|
|
5287
|
+
const toolName = name;
|
|
5288
|
+
convertedTool.execute = async (...args) => {
|
|
5289
|
+
const timeoutSignal = AbortSignal.timeout(toolTimeout);
|
|
5290
|
+
// Compose with any parent abortSignal from ToolExecutionOptions
|
|
5291
|
+
const execOptions = args[1];
|
|
5292
|
+
const parentSignal = execOptions?.abortSignal;
|
|
5293
|
+
const composedSignal = parentSignal
|
|
5294
|
+
? AbortSignal.any([parentSignal, timeoutSignal])
|
|
5295
|
+
: timeoutSignal;
|
|
5296
|
+
// Replace the abortSignal in execution options
|
|
5297
|
+
const augmentedContext = {
|
|
5298
|
+
...execOptions,
|
|
5299
|
+
abortSignal: composedSignal,
|
|
5300
|
+
};
|
|
5301
|
+
return Promise.race([
|
|
5302
|
+
originalExecute(args[0], augmentedContext),
|
|
5303
|
+
new Promise((_, reject) => {
|
|
5304
|
+
composedSignal.addEventListener("abort", () => {
|
|
5305
|
+
if (timeoutSignal.aborted) {
|
|
5306
|
+
reject(new Error(`Tool '${toolName}' timed out after ${toolTimeout}ms (configured at registration)`));
|
|
5307
|
+
}
|
|
5308
|
+
else {
|
|
5309
|
+
reject(new DOMException("The operation was aborted", "AbortError"));
|
|
5310
|
+
}
|
|
5311
|
+
}, { once: true });
|
|
5312
|
+
}),
|
|
5313
|
+
]);
|
|
5314
|
+
};
|
|
5315
|
+
}
|
|
5343
5316
|
// SMART DEFAULTS: Use utility to eliminate boilerplate creation
|
|
5344
|
-
const mcpServerInfo = createCustomToolServerInfo(name, convertedTool);
|
|
5317
|
+
const mcpServerInfo = createCustomToolServerInfo(name, convertedTool, options?.timeout, options?.maxRetries);
|
|
5345
5318
|
// Register with toolRegistry using MCPServerInfo directly
|
|
5346
5319
|
this.toolRegistry.registerServer(mcpServerInfo);
|
|
5347
5320
|
// Emit tool registration success event
|
|
@@ -5349,6 +5322,7 @@ Current user's request: ${currentInput}`;
|
|
|
5349
5322
|
toolName: name,
|
|
5350
5323
|
success: true,
|
|
5351
5324
|
timestamp: Date.now(),
|
|
5325
|
+
timeoutMs: options?.timeout,
|
|
5352
5326
|
});
|
|
5353
5327
|
}
|
|
5354
5328
|
catch (error) {
|
|
@@ -5520,7 +5494,11 @@ Current user's request: ${currentInput}`;
|
|
|
5520
5494
|
toolMap.set(tool.name, {
|
|
5521
5495
|
name: tool.name,
|
|
5522
5496
|
description: tool.description || "",
|
|
5523
|
-
inputSchema: tool.inputSchema
|
|
5497
|
+
inputSchema: typeof tool.inputSchema === "object" && tool.inputSchema !== null
|
|
5498
|
+
? tool.inputSchema
|
|
5499
|
+
: typeof tool.parameters === "object" && tool.parameters !== null
|
|
5500
|
+
? tool.parameters
|
|
5501
|
+
: {},
|
|
5524
5502
|
execute: async (params, context) => {
|
|
5525
5503
|
// CONTEXT MERGING: Combine all available contexts for maximum information
|
|
5526
5504
|
const storedContext = this.toolExecutionContext || {};
|
|
@@ -5567,12 +5545,14 @@ Current user's request: ${currentInput}`;
|
|
|
5567
5545
|
const fileTools = this.cachedFileTools;
|
|
5568
5546
|
for (const [toolName, toolDef] of Object.entries(fileTools)) {
|
|
5569
5547
|
if (!toolMap.has(toolName)) {
|
|
5570
|
-
|
|
5571
|
-
const toolParams =
|
|
5548
|
+
const toolDefRecord = toolDef;
|
|
5549
|
+
const toolParams = toolDefRecord.inputSchema ?? toolDefRecord.parameters;
|
|
5572
5550
|
toolMap.set(toolName, {
|
|
5573
5551
|
name: toolName,
|
|
5574
5552
|
description: toolDef.description || `File tool: ${toolName}`,
|
|
5575
|
-
inputSchema: toolParams
|
|
5553
|
+
inputSchema: typeof toolParams === "object" && toolParams !== null
|
|
5554
|
+
? toolParams
|
|
5555
|
+
: { type: "object", properties: {} },
|
|
5576
5556
|
execute: async (params) => {
|
|
5577
5557
|
return await toolDef.execute(params, {
|
|
5578
5558
|
toolCallId: `file-tool-${Date.now()}`,
|
|
@@ -5671,6 +5651,12 @@ Current user's request: ${currentInput}`;
|
|
|
5671
5651
|
const functionTag = "NeuroLink.executeTool";
|
|
5672
5652
|
const executionStartTime = Date.now();
|
|
5673
5653
|
// === MCP ENHANCEMENT: RequestBatcher — batch programmatic tool calls ===
|
|
5654
|
+
// LIMITATION: When the request batcher is enabled, per-tool timeout and retry
|
|
5655
|
+
// settings (from registration options or call-site options) are NOT applied.
|
|
5656
|
+
// The batcher uses its own hardcoded defaults for timeout and retry behavior.
|
|
5657
|
+
// Use `bypassBatcher: true` to ensure per-tool timeout/retry is respected.
|
|
5658
|
+
// Additionally, note that executeToolInternal's safe-tool retry logic may still
|
|
5659
|
+
// trigger even when maxRetries is set to 0, since it operates independently.
|
|
5674
5660
|
if (this.mcpToolBatcher && !options?.bypassBatcher) {
|
|
5675
5661
|
return this.mcpToolBatcher.execute(toolName, params);
|
|
5676
5662
|
}
|
|
@@ -5735,19 +5721,27 @@ Current user's request: ${currentInput}`;
|
|
|
5735
5721
|
timestamp: executionStartTime,
|
|
5736
5722
|
input: params, // Enhanced: add input parameters
|
|
5737
5723
|
});
|
|
5738
|
-
//
|
|
5724
|
+
// NL-004: Use composite key (serverId.toolName) to avoid cross-server collisions
|
|
5725
|
+
// Fetch toolInfo early so per-tool timeout is available for finalOptions
|
|
5726
|
+
const toolInfo = this.toolRegistry.getToolInfo(toolName);
|
|
5727
|
+
// Set default options — per-tool values from registration take precedence over global defaults.
|
|
5728
|
+
// When not explicitly set at registration, global defaults are preserved for backward compatibility.
|
|
5729
|
+
const registeredTimeout = toolInfo?.tool?.timeoutMs;
|
|
5730
|
+
const registeredMaxRetries = toolInfo?.tool?.maxRetries;
|
|
5739
5731
|
const finalOptions = {
|
|
5740
|
-
timeout: options?.timeout
|
|
5741
|
-
|
|
5742
|
-
|
|
5743
|
-
|
|
5744
|
-
|
|
5732
|
+
timeout: options?.timeout ??
|
|
5733
|
+
registeredTimeout ??
|
|
5734
|
+
TOOL_TIMEOUTS.EXECUTION_DEFAULT_MS,
|
|
5735
|
+
maxRetries: options?.maxRetries ??
|
|
5736
|
+
registeredMaxRetries ??
|
|
5737
|
+
RETRY_ATTEMPTS.DEFAULT,
|
|
5738
|
+
retryDelayMs: options?.retryDelayMs || RETRY_DELAYS.BASE_MS,
|
|
5739
|
+
authContext: options?.authContext,
|
|
5740
|
+
disableToolCache: options?.disableToolCache,
|
|
5745
5741
|
};
|
|
5746
5742
|
// Track memory usage for tool execution
|
|
5747
5743
|
const { MemoryManager } = await import("./utils/performance.js");
|
|
5748
5744
|
const startMemory = MemoryManager.getMemoryUsageMB();
|
|
5749
|
-
// NL-004: Use composite key (serverId.toolName) to avoid cross-server collisions
|
|
5750
|
-
const toolInfo = this.toolRegistry.getToolInfo(toolName);
|
|
5751
5745
|
const breakerServerId = externalTool?.serverId || toolInfo?.tool?.serverId || "unknown";
|
|
5752
5746
|
const breakerKey = `${breakerServerId}.${toolName}`;
|
|
5753
5747
|
// Get or create circuit breaker for this tool
|
|
@@ -5763,6 +5757,7 @@ Current user's request: ${currentInput}`;
|
|
|
5763
5757
|
failedExecutions: 0,
|
|
5764
5758
|
averageExecutionTime: 0,
|
|
5765
5759
|
lastExecutionTime: 0,
|
|
5760
|
+
errorCategories: {},
|
|
5766
5761
|
});
|
|
5767
5762
|
}
|
|
5768
5763
|
const metrics = this.toolExecutionMetrics.get(toolName);
|
|
@@ -5823,14 +5818,18 @@ Current user's request: ${currentInput}`;
|
|
|
5823
5818
|
memoryDelta,
|
|
5824
5819
|
circuitBreakerState: circuitBreaker?.getState(),
|
|
5825
5820
|
});
|
|
5826
|
-
// Emit tool end event using the helper method
|
|
5827
|
-
this.emitToolEndEvent(toolName, executionStartTime, true, result);
|
|
5828
5821
|
// Set span success attributes
|
|
5829
5822
|
// Check if result has isError flag (MCP tool error result)
|
|
5830
|
-
|
|
5831
|
-
|
|
5832
|
-
|
|
5833
|
-
|
|
5823
|
+
// Also detect toolRegistry-wrapped errors that return { success: false }
|
|
5824
|
+
const resultObj = result && typeof result === "object"
|
|
5825
|
+
? result
|
|
5826
|
+
: undefined;
|
|
5827
|
+
const isToolError = (resultObj &&
|
|
5828
|
+
"isError" in resultObj &&
|
|
5829
|
+
resultObj.isError === true) ||
|
|
5830
|
+
(resultObj &&
|
|
5831
|
+
"success" in resultObj &&
|
|
5832
|
+
resultObj.success === false);
|
|
5834
5833
|
// NL-001: Count isError:true results as circuit breaker failures
|
|
5835
5834
|
// This ensures tools that return error results (not just thrown errors) are tracked
|
|
5836
5835
|
// TODO(NL-009): This records a failure AFTER the circuit breaker already recorded
|
|
@@ -5885,7 +5884,29 @@ Current user's request: ${currentInput}`;
|
|
|
5885
5884
|
code: SpanStatusCode.ERROR,
|
|
5886
5885
|
message: `MCP tool returned isError: ${errorText.substring(0, 200)}`,
|
|
5887
5886
|
});
|
|
5887
|
+
if (metrics) {
|
|
5888
|
+
metrics.failedExecutions++;
|
|
5889
|
+
const prevSuccessful = metrics.successfulExecutions;
|
|
5890
|
+
metrics.successfulExecutions = Math.max(0, metrics.successfulExecutions - 1);
|
|
5891
|
+
// Recompute averageExecutionTime: back out this execution's duration
|
|
5892
|
+
// which was incorrectly included as a success
|
|
5893
|
+
if (prevSuccessful > 1) {
|
|
5894
|
+
metrics.averageExecutionTime =
|
|
5895
|
+
(metrics.averageExecutionTime * prevSuccessful -
|
|
5896
|
+
executionTime) /
|
|
5897
|
+
(prevSuccessful - 1);
|
|
5898
|
+
}
|
|
5899
|
+
else {
|
|
5900
|
+
// No remaining successful executions, reset to 0
|
|
5901
|
+
metrics.averageExecutionTime = 0;
|
|
5902
|
+
}
|
|
5903
|
+
const mappedCategory = mcpCategoryToErrorCategory(errorCategory);
|
|
5904
|
+
metrics.errorCategories[mappedCategory] =
|
|
5905
|
+
(metrics.errorCategories[mappedCategory] || 0) + 1;
|
|
5906
|
+
}
|
|
5888
5907
|
}
|
|
5908
|
+
// Emit tool end event AFTER isError check so success flag is correct
|
|
5909
|
+
this.emitToolEndEvent(toolName, executionStartTime, !isToolError, result);
|
|
5889
5910
|
toolSpan.setAttribute("tool.result.status", isToolError ? "error" : "success");
|
|
5890
5911
|
toolSpan.setAttribute("tool.duration_ms", executionTime);
|
|
5891
5912
|
return result;
|
|
@@ -5896,6 +5917,51 @@ Current user's request: ${currentInput}`;
|
|
|
5896
5917
|
metrics.failedExecutions++;
|
|
5897
5918
|
}
|
|
5898
5919
|
const executionTime = Date.now() - executionStartTime;
|
|
5920
|
+
// Circuit breaker open: return a structured non-retryable isError result
|
|
5921
|
+
// so the AI model understands the tool is temporarily unavailable.
|
|
5922
|
+
// Log at warn (not error) since this is expected circuit breaker behavior.
|
|
5923
|
+
if (error instanceof CircuitBreakerOpenError) {
|
|
5924
|
+
mcpLogger.warn(`[${functionTag}] Tool blocked by circuit breaker: ${toolName}`, {
|
|
5925
|
+
toolName,
|
|
5926
|
+
breakerState: error.breakerState,
|
|
5927
|
+
retryAfter: error.retryAfter,
|
|
5928
|
+
retryAfterMs: error.retryAfterMs,
|
|
5929
|
+
failureCount: error.failureCount,
|
|
5930
|
+
executionTime,
|
|
5931
|
+
});
|
|
5932
|
+
if (metrics) {
|
|
5933
|
+
const category = ErrorCategory.EXECUTION;
|
|
5934
|
+
metrics.errorCategories[category] =
|
|
5935
|
+
(metrics.errorCategories[category] || 0) + 1;
|
|
5936
|
+
}
|
|
5937
|
+
// Emit tool end event for circuit breaker open
|
|
5938
|
+
this.emitToolEndEvent(toolName, executionStartTime, false, undefined);
|
|
5939
|
+
toolSpan.setAttribute("tool.result.status", "circuit_breaker_open");
|
|
5940
|
+
toolSpan.setAttribute("tool.duration_ms", executionTime);
|
|
5941
|
+
toolSpan.setAttribute("tool.circuit_breaker.state", error.breakerState);
|
|
5942
|
+
toolSpan.setAttribute("tool.circuit_breaker.retry_after_ms", error.retryAfterMs);
|
|
5943
|
+
toolSpan.setAttribute("tool.circuit_breaker.failure_count", error.failureCount);
|
|
5944
|
+
toolSpan.setStatus({
|
|
5945
|
+
code: SpanStatusCode.ERROR,
|
|
5946
|
+
message: `Circuit breaker open for ${toolName}: ${error.message}`,
|
|
5947
|
+
});
|
|
5948
|
+
// Return an isError tool result so the AI can inform the user
|
|
5949
|
+
// instead of throwing, which would cause a generic retry
|
|
5950
|
+
return {
|
|
5951
|
+
isError: true,
|
|
5952
|
+
content: [
|
|
5953
|
+
{
|
|
5954
|
+
type: "text",
|
|
5955
|
+
text: `TOOL TEMPORARILY UNAVAILABLE: "${toolName}" has been disabled after ` +
|
|
5956
|
+
`${error.failureCount} failures. ` +
|
|
5957
|
+
`This is a circuit breaker protection — do NOT retry this tool. ` +
|
|
5958
|
+
`It will become available again after ${Math.ceil(error.retryAfterMs / 1000)} seconds ` +
|
|
5959
|
+
`(at ${error.retryAfter}). ` +
|
|
5960
|
+
`Instead, inform the user that the operation failed and suggest trying again later.`,
|
|
5961
|
+
},
|
|
5962
|
+
],
|
|
5963
|
+
};
|
|
5964
|
+
}
|
|
5899
5965
|
// Create structured error
|
|
5900
5966
|
let structuredError;
|
|
5901
5967
|
if (error instanceof NeuroLinkError) {
|
|
@@ -5925,10 +5991,17 @@ Current user's request: ${currentInput}`;
|
|
|
5925
5991
|
else {
|
|
5926
5992
|
structuredError = ErrorFactory.toolExecutionFailed(toolName, new Error(String(error)));
|
|
5927
5993
|
}
|
|
5928
|
-
|
|
5929
|
-
|
|
5930
|
-
|
|
5994
|
+
if (metrics) {
|
|
5995
|
+
const category = structuredError.category || ErrorCategory.EXECUTION;
|
|
5996
|
+
metrics.errorCategories[category] =
|
|
5997
|
+
(metrics.errorCategories[category] || 0) + 1;
|
|
5998
|
+
}
|
|
5999
|
+
// Emit tool end event BEFORE the error event.
|
|
6000
|
+
// Node.js EventEmitter throws on unhandled 'error' events,
|
|
6001
|
+
// which would prevent tool:end from being emitted.
|
|
5931
6002
|
this.emitToolEndEvent(toolName, executionStartTime, false, undefined, structuredError);
|
|
6003
|
+
// Centralized error event emission
|
|
6004
|
+
this.emitter.emit("error", structuredError);
|
|
5932
6005
|
// Add execution context to structured error
|
|
5933
6006
|
structuredError = new NeuroLinkError({
|
|
5934
6007
|
...structuredError,
|
|
@@ -6742,6 +6815,7 @@ Current user's request: ${currentInput}`;
|
|
|
6742
6815
|
for (const [toolName, toolMetrics] of this.toolExecutionMetrics.entries()) {
|
|
6743
6816
|
metrics[toolName] = {
|
|
6744
6817
|
...toolMetrics,
|
|
6818
|
+
errorCategories: { ...toolMetrics.errorCategories },
|
|
6745
6819
|
successRate: toolMetrics.totalExecutions > 0
|
|
6746
6820
|
? toolMetrics.successfulExecutions / toolMetrics.totalExecutions
|
|
6747
6821
|
: 0,
|
|
@@ -6836,6 +6910,21 @@ Current user's request: ${currentInput}`;
|
|
|
6836
6910
|
issues.push("High average execution time");
|
|
6837
6911
|
recommendations.push("Optimize tool performance or increase timeout");
|
|
6838
6912
|
}
|
|
6913
|
+
if (metrics && metrics.errorCategories) {
|
|
6914
|
+
const categories = metrics.errorCategories;
|
|
6915
|
+
if (categories[ErrorCategory.TIMEOUT] > 0) {
|
|
6916
|
+
issues.push(`Timeout errors: ${categories[ErrorCategory.TIMEOUT]}`);
|
|
6917
|
+
recommendations.push("Consider increasing the tool timeout configuration");
|
|
6918
|
+
}
|
|
6919
|
+
if (categories[ErrorCategory.VALIDATION] > 0) {
|
|
6920
|
+
issues.push(`Validation errors: ${categories[ErrorCategory.VALIDATION]}`);
|
|
6921
|
+
recommendations.push("Review input schemas and parameter validation");
|
|
6922
|
+
}
|
|
6923
|
+
if (categories[ErrorCategory.NETWORK] > 0) {
|
|
6924
|
+
issues.push(`Network errors: ${categories[ErrorCategory.NETWORK]}`);
|
|
6925
|
+
recommendations.push("Check network connectivity and endpoint availability");
|
|
6926
|
+
}
|
|
6927
|
+
}
|
|
6839
6928
|
tools[toolName] = {
|
|
6840
6929
|
name: toolName,
|
|
6841
6930
|
isHealthy,
|
|
@@ -6844,6 +6933,9 @@ Current user's request: ${currentInput}`;
|
|
|
6844
6933
|
successRate,
|
|
6845
6934
|
averageExecutionTime: metrics?.averageExecutionTime || 0,
|
|
6846
6935
|
lastExecutionTime: metrics?.lastExecutionTime || 0,
|
|
6936
|
+
errorCategories: metrics?.errorCategories
|
|
6937
|
+
? { ...metrics.errorCategories }
|
|
6938
|
+
: {},
|
|
6847
6939
|
},
|
|
6848
6940
|
circuitBreaker: {
|
|
6849
6941
|
state: circuitBreaker?.getState() || "closed",
|