@juspay/neurolink 9.29.1 → 9.31.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 +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 +6 -3
- package/dist/index.js +21 -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 +6 -3
- package/dist/lib/index.js +21 -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.d.ts +11 -0
- package/dist/lib/middleware/builtin/lifecycle.js +169 -0
- package/dist/lib/middleware/factory.d.ts +3 -3
- package/dist/lib/middleware/factory.js +6 -2
- package/dist/lib/middleware/index.d.ts +2 -1
- package/dist/lib/middleware/index.js +2 -0
- 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 +319 -187
- 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 +14 -4
- 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 +57 -4
- 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 +44 -14
- 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 +7 -1
- package/dist/lib/utils/errorHandling.js +52 -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.d.ts +11 -0
- package/dist/middleware/builtin/lifecycle.js +168 -0
- package/dist/middleware/factory.d.ts +3 -3
- package/dist/middleware/factory.js +6 -2
- package/dist/middleware/index.d.ts +2 -1
- package/dist/middleware/index.js +2 -0
- 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 +319 -187
- 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 +14 -4
- 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 +57 -4
- 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 +44 -14
- 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 +7 -1
- package/dist/utils/errorHandling.js +52 -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 +139 -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/lib/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;
|
|
@@ -2209,6 +2205,26 @@ Current user's request: ${currentInput}`;
|
|
|
2209
2205
|
},
|
|
2210
2206
|
});
|
|
2211
2207
|
}
|
|
2208
|
+
// Auto-inject lifecycle middleware when callbacks are provided
|
|
2209
|
+
// (must happen before workflow/PPT early returns so those paths get middleware too)
|
|
2210
|
+
if (options.onFinish || options.onError) {
|
|
2211
|
+
options.middleware = {
|
|
2212
|
+
...options.middleware,
|
|
2213
|
+
middlewareConfig: {
|
|
2214
|
+
...options.middleware?.middlewareConfig,
|
|
2215
|
+
lifecycle: {
|
|
2216
|
+
...options.middleware?.middlewareConfig?.lifecycle,
|
|
2217
|
+
enabled: true,
|
|
2218
|
+
config: {
|
|
2219
|
+
...options.middleware?.middlewareConfig?.lifecycle
|
|
2220
|
+
?.config,
|
|
2221
|
+
onFinish: options.onFinish,
|
|
2222
|
+
onError: options.onError,
|
|
2223
|
+
},
|
|
2224
|
+
},
|
|
2225
|
+
},
|
|
2226
|
+
};
|
|
2227
|
+
}
|
|
2212
2228
|
// Check if workflow is requested
|
|
2213
2229
|
if (options.workflow || options.workflowConfig) {
|
|
2214
2230
|
return await this.generateWithWorkflow(options);
|
|
@@ -2227,30 +2243,6 @@ Current user's request: ${currentInput}`;
|
|
|
2227
2243
|
}
|
|
2228
2244
|
// Set session and user IDs from context for Langfuse spans and execute with proper async scoping
|
|
2229
2245
|
return await this.setLangfuseContextFromOptions(options, async () => {
|
|
2230
|
-
if (this.conversationMemoryConfig?.conversationMemory
|
|
2231
|
-
?.mem0Enabled &&
|
|
2232
|
-
options.context?.userId) {
|
|
2233
|
-
try {
|
|
2234
|
-
const mem0 = await this.ensureMem0Ready();
|
|
2235
|
-
if (!mem0) {
|
|
2236
|
-
logger.debug("Mem0 not available, continuing without memory retrieval");
|
|
2237
|
-
}
|
|
2238
|
-
else {
|
|
2239
|
-
const memories = await mem0.search(options.input.text, {
|
|
2240
|
-
user_id: options.context.userId,
|
|
2241
|
-
limit: 5,
|
|
2242
|
-
});
|
|
2243
|
-
if (memories && memories.length > 0) {
|
|
2244
|
-
// Enhance the input with memory context
|
|
2245
|
-
const memoryContext = this.extractMemoryContext(memories);
|
|
2246
|
-
options.input.text = this.formatMemoryContext(memoryContext, options.input.text);
|
|
2247
|
-
}
|
|
2248
|
-
}
|
|
2249
|
-
}
|
|
2250
|
-
catch (error) {
|
|
2251
|
-
logger.warn("Mem0 memory retrieval failed:", error);
|
|
2252
|
-
}
|
|
2253
|
-
}
|
|
2254
2246
|
const startTime = Date.now();
|
|
2255
2247
|
// Apply orchestration if enabled and no specific provider/model requested
|
|
2256
2248
|
if (this.enableOrchestration &&
|
|
@@ -2364,6 +2356,7 @@ Current user's request: ${currentInput}`;
|
|
|
2364
2356
|
fileRegistry: this.fileRegistry,
|
|
2365
2357
|
abortSignal: options.abortSignal,
|
|
2366
2358
|
skipToolPromptInjection: options.skipToolPromptInjection,
|
|
2359
|
+
middleware: options.middleware,
|
|
2367
2360
|
};
|
|
2368
2361
|
// Auto-map top-level sessionId/userId to context for convenience
|
|
2369
2362
|
// Tests and users may pass sessionId/userId as top-level options
|
|
@@ -2400,7 +2393,6 @@ Current user's request: ${currentInput}`;
|
|
|
2400
2393
|
toolResults: toolResults.length,
|
|
2401
2394
|
});
|
|
2402
2395
|
}
|
|
2403
|
-
// Use redesigned generation logic
|
|
2404
2396
|
const textResult = await this.generateTextInternal(textOptions);
|
|
2405
2397
|
// Emit generation completion event (NeuroLink format - enhanced with content)
|
|
2406
2398
|
this.emitter.emit("generation:end", {
|
|
@@ -2465,7 +2457,7 @@ Current user's request: ${currentInput}`;
|
|
|
2465
2457
|
generateResult.analytics.cost > 0) {
|
|
2466
2458
|
this._sessionCostUsd += generateResult.analytics.cost;
|
|
2467
2459
|
}
|
|
2468
|
-
this.
|
|
2460
|
+
this.scheduleGenerateMemoryStorage(options, originalPrompt, generateResult);
|
|
2469
2461
|
// Set completion span attributes
|
|
2470
2462
|
generateSpan.setAttribute("neurolink.output_length", generateResult.content?.length || 0);
|
|
2471
2463
|
generateSpan.setAttribute("neurolink.tokens.input", generateResult.usage?.input || 0);
|
|
@@ -2515,27 +2507,9 @@ Current user's request: ${currentInput}`;
|
|
|
2515
2507
|
});
|
|
2516
2508
|
}
|
|
2517
2509
|
/**
|
|
2518
|
-
* Schedule non-blocking
|
|
2510
|
+
* Schedule non-blocking memory storage after generate completes.
|
|
2519
2511
|
*/
|
|
2520
|
-
|
|
2521
|
-
if (this.conversationMemoryConfig?.conversationMemory?.mem0Enabled &&
|
|
2522
|
-
options.context?.userId &&
|
|
2523
|
-
generateResult.content.trim()) {
|
|
2524
|
-
setImmediate(async () => {
|
|
2525
|
-
try {
|
|
2526
|
-
const mem0 = await this.ensureMem0Ready();
|
|
2527
|
-
if (mem0) {
|
|
2528
|
-
await this.storeMem0ConversationTurn(mem0, originalPrompt ?? "", generateResult.content.trim(), options.context?.userId, {
|
|
2529
|
-
timestamp: new Date().toISOString(),
|
|
2530
|
-
type: "conversation_turn_generate",
|
|
2531
|
-
});
|
|
2532
|
-
}
|
|
2533
|
-
}
|
|
2534
|
-
catch (error) {
|
|
2535
|
-
logger.warn("Mem0 memory storage failed:", error);
|
|
2536
|
-
}
|
|
2537
|
-
});
|
|
2538
|
-
}
|
|
2512
|
+
scheduleGenerateMemoryStorage(options, originalPrompt, generateResult) {
|
|
2539
2513
|
// Memory storage
|
|
2540
2514
|
if (this.conversationMemoryConfig?.conversationMemory?.memory?.enabled &&
|
|
2541
2515
|
options.context?.userId &&
|
|
@@ -4024,6 +3998,26 @@ Current user's request: ${currentInput}`;
|
|
|
4024
3998
|
});
|
|
4025
3999
|
}
|
|
4026
4000
|
this.emitStreamStartEvents(options, startTime);
|
|
4001
|
+
// Auto-inject lifecycle middleware when callbacks are provided
|
|
4002
|
+
// (must happen before workflow early return so that path gets middleware too)
|
|
4003
|
+
if (options.onFinish || options.onError || options.onChunk) {
|
|
4004
|
+
options.middleware = {
|
|
4005
|
+
...options.middleware,
|
|
4006
|
+
middlewareConfig: {
|
|
4007
|
+
...options.middleware?.middlewareConfig,
|
|
4008
|
+
lifecycle: {
|
|
4009
|
+
...options.middleware?.middlewareConfig?.lifecycle,
|
|
4010
|
+
enabled: true,
|
|
4011
|
+
config: {
|
|
4012
|
+
...options.middleware?.middlewareConfig?.lifecycle?.config,
|
|
4013
|
+
onFinish: options.onFinish,
|
|
4014
|
+
onError: options.onError,
|
|
4015
|
+
onChunk: options.onChunk,
|
|
4016
|
+
},
|
|
4017
|
+
},
|
|
4018
|
+
},
|
|
4019
|
+
};
|
|
4020
|
+
}
|
|
4027
4021
|
// Check if workflow is requested
|
|
4028
4022
|
if (options.workflow || options.workflowConfig) {
|
|
4029
4023
|
const result = await this.streamWithWorkflow(options, startTime);
|
|
@@ -4055,7 +4049,7 @@ Current user's request: ${currentInput}`;
|
|
|
4055
4049
|
// Set session and user IDs from context for Langfuse spans and execute with proper async scoping
|
|
4056
4050
|
return await this.setLangfuseContextFromOptions(options, async () => {
|
|
4057
4051
|
try {
|
|
4058
|
-
// Prepare options: init memory, MCP,
|
|
4052
|
+
// Prepare options: init memory, MCP, orchestration, Ollama auto-disable, tool detection
|
|
4059
4053
|
const { enhancedOptions, factoryResult } = await this.prepareStreamOptions(options, streamId, startTime, hrTimeStart);
|
|
4060
4054
|
const { stream: mcpStream, provider: providerName, usage: streamUsage, model: streamModel, analytics: streamAnalytics, } = await this.createMCPStream(enhancedOptions);
|
|
4061
4055
|
// Update span with resolved provider name
|
|
@@ -4251,7 +4245,7 @@ Current user's request: ${currentInput}`;
|
|
|
4251
4245
|
}); // end metricsTraceContextStorage.run
|
|
4252
4246
|
}
|
|
4253
4247
|
/**
|
|
4254
|
-
* Prepare stream options: initialize memory, MCP,
|
|
4248
|
+
* Prepare stream options: initialize memory, MCP, retrieval, orchestration,
|
|
4255
4249
|
* Ollama tool auto-disable, factory processing, and tool detection.
|
|
4256
4250
|
*/
|
|
4257
4251
|
async prepareStreamOptions(options, streamId, startTime, hrTimeStart) {
|
|
@@ -4259,31 +4253,6 @@ Current user's request: ${currentInput}`;
|
|
|
4259
4253
|
await this.initializeConversationMemoryForGeneration(streamId, startTime, hrTimeStart);
|
|
4260
4254
|
// Initialize MCP
|
|
4261
4255
|
await this.initializeMCP();
|
|
4262
|
-
if (this.conversationMemoryConfig?.conversationMemory?.mem0Enabled &&
|
|
4263
|
-
options.context?.userId) {
|
|
4264
|
-
try {
|
|
4265
|
-
const mem0 = await this.ensureMem0Ready();
|
|
4266
|
-
if (!mem0) {
|
|
4267
|
-
// Continue without memories if mem0 is not available
|
|
4268
|
-
logger.debug("Mem0 not available, continuing without memory retrieval");
|
|
4269
|
-
}
|
|
4270
|
-
else {
|
|
4271
|
-
const memories = await mem0.search(options.input.text, {
|
|
4272
|
-
user_id: options.context.userId,
|
|
4273
|
-
limit: 5,
|
|
4274
|
-
});
|
|
4275
|
-
if (memories && memories.length > 0) {
|
|
4276
|
-
// Enhance the input with memory context
|
|
4277
|
-
const memoryContext = this.extractMemoryContext(memories);
|
|
4278
|
-
options.input.text = this.formatMemoryContext(memoryContext, options.input.text);
|
|
4279
|
-
}
|
|
4280
|
-
}
|
|
4281
|
-
}
|
|
4282
|
-
catch (error) {
|
|
4283
|
-
// Non-blocking: Log error but continue with streaming
|
|
4284
|
-
logger.warn("Mem0 memory retrieval failed:", error);
|
|
4285
|
-
}
|
|
4286
|
-
}
|
|
4287
4256
|
// Memory retrieval
|
|
4288
4257
|
if (this.conversationMemoryConfig?.conversationMemory?.memory?.enabled &&
|
|
4289
4258
|
options.context?.userId) {
|
|
@@ -4498,11 +4467,16 @@ Current user's request: ${currentInput}`;
|
|
|
4498
4467
|
disableToolCache: enhancedOptions.disableToolCache,
|
|
4499
4468
|
}),
|
|
4500
4469
|
}, "NeuroLink.fallbackStream");
|
|
4501
|
-
//
|
|
4502
|
-
|
|
4503
|
-
|
|
4504
|
-
|
|
4505
|
-
|
|
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
|
+
});
|
|
4506
4480
|
const fallbackResult = await fallbackProvider.stream({
|
|
4507
4481
|
...enhancedOptions,
|
|
4508
4482
|
model: fallbackRoute.model,
|
|
@@ -4541,7 +4515,7 @@ Current user's request: ${currentInput}`;
|
|
|
4541
4515
|
}
|
|
4542
4516
|
/**
|
|
4543
4517
|
* Store conversation memory after stream consumption is complete (called from finally block).
|
|
4544
|
-
* Handles
|
|
4518
|
+
* Handles conversation memory storage in the background.
|
|
4545
4519
|
*/
|
|
4546
4520
|
async storeStreamConversationMemory(params) {
|
|
4547
4521
|
const { enhancedOptions, providerName, originalPrompt, accumulatedContent, startTime, eventSequence, } = params;
|
|
@@ -4595,24 +4569,6 @@ Current user's request: ${currentInput}`;
|
|
|
4595
4569
|
});
|
|
4596
4570
|
}
|
|
4597
4571
|
}
|
|
4598
|
-
if (this.conversationMemoryConfig?.conversationMemory?.mem0Enabled &&
|
|
4599
|
-
enhancedOptions.context?.userId &&
|
|
4600
|
-
accumulatedContent.trim()) {
|
|
4601
|
-
setImmediate(async () => {
|
|
4602
|
-
try {
|
|
4603
|
-
const mem0 = await this.ensureMem0Ready();
|
|
4604
|
-
if (mem0) {
|
|
4605
|
-
await this.storeMem0ConversationTurn(mem0, originalPrompt ?? "", accumulatedContent.trim(), enhancedOptions.context?.userId, {
|
|
4606
|
-
timestamp: new Date().toISOString(),
|
|
4607
|
-
type: "conversation_turn_stream",
|
|
4608
|
-
});
|
|
4609
|
-
}
|
|
4610
|
-
}
|
|
4611
|
-
catch (error) {
|
|
4612
|
-
logger.warn("Mem0 memory storage failed:", error);
|
|
4613
|
-
}
|
|
4614
|
-
});
|
|
4615
|
-
}
|
|
4616
4572
|
if (this.conversationMemoryConfig?.conversationMemory?.memory?.enabled &&
|
|
4617
4573
|
enhancedOptions.context?.userId &&
|
|
4618
4574
|
accumulatedContent?.trim()) {
|
|
@@ -4677,12 +4633,24 @@ Current user's request: ${currentInput}`;
|
|
|
4677
4633
|
const enhancedSystemPrompt = options.skipToolPromptInjection
|
|
4678
4634
|
? options.systemPrompt || ""
|
|
4679
4635
|
: this.createToolAwareSystemPrompt(options.systemPrompt, availableTools);
|
|
4680
|
-
// Get conversation messages for context
|
|
4681
|
-
|
|
4682
|
-
|
|
4683
|
-
|
|
4684
|
-
|
|
4685
|
-
|
|
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;
|
|
4686
4654
|
// Pre-generation budget check for streaming
|
|
4687
4655
|
const streamBudget = checkContextBudget({
|
|
4688
4656
|
provider: providerName,
|
|
@@ -4696,7 +4664,7 @@ Current user's request: ${currentInput}`;
|
|
|
4696
4664
|
const streamMessageCount = conversationMessages?.length || 0;
|
|
4697
4665
|
const streamCompactionSessionId = this.getCompactionSessionId(options);
|
|
4698
4666
|
if (streamBudget.shouldCompact &&
|
|
4699
|
-
this.conversationMemory &&
|
|
4667
|
+
(hasCallerConversationHistory || this.conversationMemory) &&
|
|
4700
4668
|
streamMessageCount >
|
|
4701
4669
|
(this.lastCompactionMessageCount.get(streamCompactionSessionId) ?? 0)) {
|
|
4702
4670
|
const compactor = new ContextCompactor({
|
|
@@ -4709,6 +4677,10 @@ Current user's request: ${currentInput}`;
|
|
|
4709
4677
|
if (compactionResult.compacted) {
|
|
4710
4678
|
const repairedResult = repairToolPairs(compactionResult.messages);
|
|
4711
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;
|
|
4712
4684
|
this.lastCompactionMessageCount.set(streamCompactionSessionId, conversationMessages.length);
|
|
4713
4685
|
}
|
|
4714
4686
|
// POST-COMPACTION BUDGET RE-CHECK (mirrors tryMCPGeneration / directProviderGeneration)
|
|
@@ -4728,6 +4700,9 @@ Current user's request: ${currentInput}`;
|
|
|
4728
4700
|
overagePercent: Math.round((postCompactBudget.usageRatio - 1.0) * 100),
|
|
4729
4701
|
});
|
|
4730
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;
|
|
4731
4706
|
const finalBudget = checkContextBudget({
|
|
4732
4707
|
provider: providerName,
|
|
4733
4708
|
model: options.model,
|
|
@@ -5251,7 +5226,7 @@ Current user's request: ${currentInput}`;
|
|
|
5251
5226
|
* @param name - Unique name for the tool
|
|
5252
5227
|
* @param tool - Tool in MCPExecutableTool format (unified MCP protocol type)
|
|
5253
5228
|
*/
|
|
5254
|
-
registerTool(name, tool) {
|
|
5229
|
+
registerTool(name, tool, options) {
|
|
5255
5230
|
this.invalidateToolCache(); // Invalidate cache when a tool is registered
|
|
5256
5231
|
// Emit tool registration start event
|
|
5257
5232
|
this.emitter.emit("tools-register:start", {
|
|
@@ -5300,8 +5275,46 @@ Current user's request: ${currentInput}`;
|
|
|
5300
5275
|
return fallbackSchema;
|
|
5301
5276
|
})(),
|
|
5302
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
|
+
}
|
|
5303
5316
|
// SMART DEFAULTS: Use utility to eliminate boilerplate creation
|
|
5304
|
-
const mcpServerInfo = createCustomToolServerInfo(name, convertedTool);
|
|
5317
|
+
const mcpServerInfo = createCustomToolServerInfo(name, convertedTool, options?.timeout, options?.maxRetries);
|
|
5305
5318
|
// Register with toolRegistry using MCPServerInfo directly
|
|
5306
5319
|
this.toolRegistry.registerServer(mcpServerInfo);
|
|
5307
5320
|
// Emit tool registration success event
|
|
@@ -5309,6 +5322,7 @@ Current user's request: ${currentInput}`;
|
|
|
5309
5322
|
toolName: name,
|
|
5310
5323
|
success: true,
|
|
5311
5324
|
timestamp: Date.now(),
|
|
5325
|
+
timeoutMs: options?.timeout,
|
|
5312
5326
|
});
|
|
5313
5327
|
}
|
|
5314
5328
|
catch (error) {
|
|
@@ -5480,7 +5494,11 @@ Current user's request: ${currentInput}`;
|
|
|
5480
5494
|
toolMap.set(tool.name, {
|
|
5481
5495
|
name: tool.name,
|
|
5482
5496
|
description: tool.description || "",
|
|
5483
|
-
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
|
+
: {},
|
|
5484
5502
|
execute: async (params, context) => {
|
|
5485
5503
|
// CONTEXT MERGING: Combine all available contexts for maximum information
|
|
5486
5504
|
const storedContext = this.toolExecutionContext || {};
|
|
@@ -5527,12 +5545,14 @@ Current user's request: ${currentInput}`;
|
|
|
5527
5545
|
const fileTools = this.cachedFileTools;
|
|
5528
5546
|
for (const [toolName, toolDef] of Object.entries(fileTools)) {
|
|
5529
5547
|
if (!toolMap.has(toolName)) {
|
|
5530
|
-
|
|
5531
|
-
const toolParams =
|
|
5548
|
+
const toolDefRecord = toolDef;
|
|
5549
|
+
const toolParams = toolDefRecord.inputSchema ?? toolDefRecord.parameters;
|
|
5532
5550
|
toolMap.set(toolName, {
|
|
5533
5551
|
name: toolName,
|
|
5534
5552
|
description: toolDef.description || `File tool: ${toolName}`,
|
|
5535
|
-
inputSchema: toolParams
|
|
5553
|
+
inputSchema: typeof toolParams === "object" && toolParams !== null
|
|
5554
|
+
? toolParams
|
|
5555
|
+
: { type: "object", properties: {} },
|
|
5536
5556
|
execute: async (params) => {
|
|
5537
5557
|
return await toolDef.execute(params, {
|
|
5538
5558
|
toolCallId: `file-tool-${Date.now()}`,
|
|
@@ -5631,6 +5651,12 @@ Current user's request: ${currentInput}`;
|
|
|
5631
5651
|
const functionTag = "NeuroLink.executeTool";
|
|
5632
5652
|
const executionStartTime = Date.now();
|
|
5633
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.
|
|
5634
5660
|
if (this.mcpToolBatcher && !options?.bypassBatcher) {
|
|
5635
5661
|
return this.mcpToolBatcher.execute(toolName, params);
|
|
5636
5662
|
}
|
|
@@ -5695,19 +5721,27 @@ Current user's request: ${currentInput}`;
|
|
|
5695
5721
|
timestamp: executionStartTime,
|
|
5696
5722
|
input: params, // Enhanced: add input parameters
|
|
5697
5723
|
});
|
|
5698
|
-
//
|
|
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;
|
|
5699
5731
|
const finalOptions = {
|
|
5700
|
-
timeout: options?.timeout
|
|
5701
|
-
|
|
5702
|
-
|
|
5703
|
-
|
|
5704
|
-
|
|
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,
|
|
5705
5741
|
};
|
|
5706
5742
|
// Track memory usage for tool execution
|
|
5707
5743
|
const { MemoryManager } = await import("./utils/performance.js");
|
|
5708
5744
|
const startMemory = MemoryManager.getMemoryUsageMB();
|
|
5709
|
-
// NL-004: Use composite key (serverId.toolName) to avoid cross-server collisions
|
|
5710
|
-
const toolInfo = this.toolRegistry.getToolInfo(toolName);
|
|
5711
5745
|
const breakerServerId = externalTool?.serverId || toolInfo?.tool?.serverId || "unknown";
|
|
5712
5746
|
const breakerKey = `${breakerServerId}.${toolName}`;
|
|
5713
5747
|
// Get or create circuit breaker for this tool
|
|
@@ -5723,6 +5757,7 @@ Current user's request: ${currentInput}`;
|
|
|
5723
5757
|
failedExecutions: 0,
|
|
5724
5758
|
averageExecutionTime: 0,
|
|
5725
5759
|
lastExecutionTime: 0,
|
|
5760
|
+
errorCategories: {},
|
|
5726
5761
|
});
|
|
5727
5762
|
}
|
|
5728
5763
|
const metrics = this.toolExecutionMetrics.get(toolName);
|
|
@@ -5783,14 +5818,18 @@ Current user's request: ${currentInput}`;
|
|
|
5783
5818
|
memoryDelta,
|
|
5784
5819
|
circuitBreakerState: circuitBreaker?.getState(),
|
|
5785
5820
|
});
|
|
5786
|
-
// Emit tool end event using the helper method
|
|
5787
|
-
this.emitToolEndEvent(toolName, executionStartTime, true, result);
|
|
5788
5821
|
// Set span success attributes
|
|
5789
5822
|
// Check if result has isError flag (MCP tool error result)
|
|
5790
|
-
|
|
5791
|
-
|
|
5792
|
-
|
|
5793
|
-
|
|
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);
|
|
5794
5833
|
// NL-001: Count isError:true results as circuit breaker failures
|
|
5795
5834
|
// This ensures tools that return error results (not just thrown errors) are tracked
|
|
5796
5835
|
// TODO(NL-009): This records a failure AFTER the circuit breaker already recorded
|
|
@@ -5845,7 +5884,29 @@ Current user's request: ${currentInput}`;
|
|
|
5845
5884
|
code: SpanStatusCode.ERROR,
|
|
5846
5885
|
message: `MCP tool returned isError: ${errorText.substring(0, 200)}`,
|
|
5847
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
|
+
}
|
|
5848
5907
|
}
|
|
5908
|
+
// Emit tool end event AFTER isError check so success flag is correct
|
|
5909
|
+
this.emitToolEndEvent(toolName, executionStartTime, !isToolError, result);
|
|
5849
5910
|
toolSpan.setAttribute("tool.result.status", isToolError ? "error" : "success");
|
|
5850
5911
|
toolSpan.setAttribute("tool.duration_ms", executionTime);
|
|
5851
5912
|
return result;
|
|
@@ -5856,6 +5917,51 @@ Current user's request: ${currentInput}`;
|
|
|
5856
5917
|
metrics.failedExecutions++;
|
|
5857
5918
|
}
|
|
5858
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
|
+
}
|
|
5859
5965
|
// Create structured error
|
|
5860
5966
|
let structuredError;
|
|
5861
5967
|
if (error instanceof NeuroLinkError) {
|
|
@@ -5885,10 +5991,17 @@ Current user's request: ${currentInput}`;
|
|
|
5885
5991
|
else {
|
|
5886
5992
|
structuredError = ErrorFactory.toolExecutionFailed(toolName, new Error(String(error)));
|
|
5887
5993
|
}
|
|
5888
|
-
|
|
5889
|
-
|
|
5890
|
-
|
|
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.
|
|
5891
6002
|
this.emitToolEndEvent(toolName, executionStartTime, false, undefined, structuredError);
|
|
6003
|
+
// Centralized error event emission
|
|
6004
|
+
this.emitter.emit("error", structuredError);
|
|
5892
6005
|
// Add execution context to structured error
|
|
5893
6006
|
structuredError = new NeuroLinkError({
|
|
5894
6007
|
...structuredError,
|
|
@@ -6702,6 +6815,7 @@ Current user's request: ${currentInput}`;
|
|
|
6702
6815
|
for (const [toolName, toolMetrics] of this.toolExecutionMetrics.entries()) {
|
|
6703
6816
|
metrics[toolName] = {
|
|
6704
6817
|
...toolMetrics,
|
|
6818
|
+
errorCategories: { ...toolMetrics.errorCategories },
|
|
6705
6819
|
successRate: toolMetrics.totalExecutions > 0
|
|
6706
6820
|
? toolMetrics.successfulExecutions / toolMetrics.totalExecutions
|
|
6707
6821
|
: 0,
|
|
@@ -6796,6 +6910,21 @@ Current user's request: ${currentInput}`;
|
|
|
6796
6910
|
issues.push("High average execution time");
|
|
6797
6911
|
recommendations.push("Optimize tool performance or increase timeout");
|
|
6798
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
|
+
}
|
|
6799
6928
|
tools[toolName] = {
|
|
6800
6929
|
name: toolName,
|
|
6801
6930
|
isHealthy,
|
|
@@ -6804,6 +6933,9 @@ Current user's request: ${currentInput}`;
|
|
|
6804
6933
|
successRate,
|
|
6805
6934
|
averageExecutionTime: metrics?.averageExecutionTime || 0,
|
|
6806
6935
|
lastExecutionTime: metrics?.lastExecutionTime || 0,
|
|
6936
|
+
errorCategories: metrics?.errorCategories
|
|
6937
|
+
? { ...metrics.errorCategories }
|
|
6938
|
+
: {},
|
|
6807
6939
|
},
|
|
6808
6940
|
circuitBreaker: {
|
|
6809
6941
|
state: circuitBreaker?.getState() || "closed",
|