@juspay/neurolink 9.30.0 → 9.31.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (977) hide show
  1. package/CHANGELOG.md +20 -0
  2. package/README.md +2 -3
  3. package/dist/adapters/providerImageAdapter.js +13 -22
  4. package/dist/adapters/video/videoAnalyzer.d.ts +4 -4
  5. package/dist/adapters/video/videoAnalyzer.js +3 -3
  6. package/dist/agent/directTools.d.ts +20 -289
  7. package/dist/agent/directTools.js +11 -10
  8. package/dist/auth/accountPool.d.ts +68 -0
  9. package/dist/auth/accountPool.js +178 -0
  10. package/dist/auth/anthropicOAuth.d.ts +15 -5
  11. package/dist/auth/anthropicOAuth.js +117 -57
  12. package/dist/auth/index.d.ts +7 -5
  13. package/dist/auth/index.js +6 -2
  14. package/dist/auth/tokenStore.d.ts +71 -27
  15. package/dist/auth/tokenStore.js +342 -64
  16. package/dist/cli/commands/auth.d.ts +39 -2
  17. package/dist/cli/commands/auth.js +585 -36
  18. package/dist/cli/commands/config.d.ts +47 -574
  19. package/dist/cli/commands/config.js +142 -24
  20. package/dist/cli/commands/docs.d.ts +1 -5
  21. package/dist/cli/commands/observability.d.ts +1 -17
  22. package/dist/cli/commands/ollama.js +1 -1
  23. package/dist/cli/commands/proxy.d.ts +20 -0
  24. package/dist/cli/commands/proxy.js +1254 -0
  25. package/dist/cli/commands/setup-anthropic.js +1 -1
  26. package/dist/cli/commands/setup-azure.js +1 -1
  27. package/dist/cli/commands/setup-bedrock.js +2 -2
  28. package/dist/cli/commands/setup-gcp.js +1 -1
  29. package/dist/cli/commands/setup-google-ai.js +1 -1
  30. package/dist/cli/commands/setup-huggingface.js +2 -2
  31. package/dist/cli/commands/setup-mistral.js +1 -1
  32. package/dist/cli/commands/setup-openai.js +1 -1
  33. package/dist/cli/commands/setup.js +3 -3
  34. package/dist/cli/commands/telemetry.d.ts +1 -22
  35. package/dist/cli/factories/authCommandFactory.d.ts +16 -11
  36. package/dist/cli/factories/authCommandFactory.js +96 -1
  37. package/dist/cli/factories/ollamaCommandFactory.js +1 -1
  38. package/dist/cli/factories/sagemakerCommandFactory.js +25 -6
  39. package/dist/cli/index.d.ts +0 -6
  40. package/dist/cli/index.js +5 -2
  41. package/dist/cli/loop/conversationSelector.js +7 -2
  42. package/dist/cli/parser.js +19 -1
  43. package/dist/cli/utils/envManager.js +2 -2
  44. package/dist/cli/utils/ollamaUtils.d.ts +1 -2
  45. package/dist/client/adapters/providerImageAdapter.js +588 -0
  46. package/dist/client/adapters/tts/googleTTSHandler.js +344 -0
  47. package/dist/client/adapters/video/directorPipeline.js +516 -0
  48. package/dist/client/adapters/video/ffmpegAdapter.js +206 -0
  49. package/dist/client/adapters/video/frameExtractor.js +143 -0
  50. package/dist/client/adapters/video/vertexVideoHandler.js +763 -0
  51. package/dist/client/adapters/video/videoAnalyzer.js +238 -0
  52. package/dist/client/adapters/video/videoMerger.js +171 -0
  53. package/dist/client/agent/directTools.js +840 -0
  54. package/dist/client/aiSdkAdapter.d.ts +196 -0
  55. package/dist/client/aiSdkAdapter.js +487 -0
  56. package/dist/client/auth/anthropicOAuth.js +974 -0
  57. package/dist/client/auth/tokenStore.js +799 -0
  58. package/dist/client/auth.d.ts +248 -0
  59. package/dist/client/auth.js +473 -0
  60. package/dist/client/client/aiSdkAdapter.js +487 -0
  61. package/dist/client/client/auth.js +473 -0
  62. package/dist/client/client/errors.js +552 -0
  63. package/dist/client/client/httpClient.js +837 -0
  64. package/dist/client/client/index.js +172 -0
  65. package/dist/client/client/interceptors.js +601 -0
  66. package/dist/client/client/reactHooks.js +1159 -0
  67. package/dist/client/client/sseClient.js +545 -0
  68. package/dist/client/client/streamingClient.js +917 -0
  69. package/dist/client/client/wsClient.js +369 -0
  70. package/dist/client/config/configManager.js +303 -0
  71. package/dist/client/config/conversationMemory.js +86 -0
  72. package/dist/client/config/taskClassificationConfig.js +148 -0
  73. package/dist/client/constants/contextWindows.js +295 -0
  74. package/dist/client/constants/enums.js +853 -0
  75. package/dist/client/constants/index.js +207 -0
  76. package/dist/client/constants/performance.js +389 -0
  77. package/dist/client/constants/retry.js +266 -0
  78. package/dist/client/constants/timeouts.js +182 -0
  79. package/dist/client/constants/tokens.js +380 -0
  80. package/dist/client/constants/videoErrors.js +46 -0
  81. package/dist/client/context/budgetChecker.js +98 -0
  82. package/dist/client/context/contextCompactor.js +205 -0
  83. package/dist/client/context/emergencyTruncation.js +88 -0
  84. package/dist/client/context/errorDetection.js +171 -0
  85. package/dist/client/context/errors.js +21 -0
  86. package/dist/client/context/fileTokenBudget.js +127 -0
  87. package/dist/client/context/prompts/summarizationPrompt.js +117 -0
  88. package/dist/client/context/stages/fileReadDeduplicator.js +66 -0
  89. package/dist/client/context/stages/slidingWindowTruncator.js +190 -0
  90. package/dist/client/context/stages/structuredSummarizer.js +99 -0
  91. package/dist/client/context/stages/toolOutputPruner.js +52 -0
  92. package/dist/client/context/summarizationEngine.js +136 -0
  93. package/dist/client/context/toolOutputLimits.js +78 -0
  94. package/dist/client/context/toolPairRepair.js +66 -0
  95. package/dist/client/core/analytics.js +88 -0
  96. package/dist/client/core/baseProvider.js +1385 -0
  97. package/dist/client/core/constants.js +140 -0
  98. package/dist/client/core/conversationMemoryFactory.js +141 -0
  99. package/dist/client/core/conversationMemoryInitializer.js +128 -0
  100. package/dist/client/core/conversationMemoryManager.js +344 -0
  101. package/dist/client/core/dynamicModels.js +358 -0
  102. package/dist/client/core/evaluation.js +309 -0
  103. package/dist/client/core/evaluationProviders.js +248 -0
  104. package/dist/client/core/factory.js +412 -0
  105. package/dist/client/core/infrastructure/baseError.js +22 -0
  106. package/dist/client/core/infrastructure/baseFactory.js +54 -0
  107. package/dist/client/core/infrastructure/baseRegistry.js +49 -0
  108. package/dist/client/core/infrastructure/index.js +5 -0
  109. package/dist/client/core/infrastructure/retry.js +20 -0
  110. package/dist/client/core/infrastructure/typedEventEmitter.js +23 -0
  111. package/dist/client/core/modelConfiguration.js +851 -0
  112. package/dist/client/core/modules/GenerationHandler.js +588 -0
  113. package/dist/client/core/modules/MessageBuilder.js +273 -0
  114. package/dist/client/core/modules/StreamHandler.js +185 -0
  115. package/dist/client/core/modules/TelemetryHandler.js +203 -0
  116. package/dist/client/core/modules/ToolsManager.js +499 -0
  117. package/dist/client/core/modules/Utilities.js +331 -0
  118. package/dist/client/core/redisConversationMemoryManager.js +1435 -0
  119. package/dist/client/core/streamAnalytics.js +131 -0
  120. package/dist/client/errors.d.ts +299 -0
  121. package/dist/client/errors.js +552 -0
  122. package/dist/client/evaluation/contextBuilder.js +134 -0
  123. package/dist/client/evaluation/index.js +61 -0
  124. package/dist/client/evaluation/prompts.js +73 -0
  125. package/dist/client/evaluation/ragasEvaluator.js +110 -0
  126. package/dist/client/evaluation/retryManager.js +78 -0
  127. package/dist/client/evaluation/scoring.js +61 -0
  128. package/dist/client/factories/providerFactory.js +166 -0
  129. package/dist/client/factories/providerRegistry.js +166 -0
  130. package/dist/client/features/ppt/constants.js +896 -0
  131. package/dist/client/features/ppt/contentPlanner.js +529 -0
  132. package/dist/client/features/ppt/presentationOrchestrator.js +236 -0
  133. package/dist/client/features/ppt/slideGenerator.js +532 -0
  134. package/dist/client/features/ppt/slideRenderers.js +2383 -0
  135. package/dist/client/features/ppt/slideTypeInference.js +405 -0
  136. package/dist/client/features/ppt/types.js +13 -0
  137. package/dist/client/features/ppt/utils.js +443 -0
  138. package/dist/client/files/fileReferenceRegistry.js +1543 -0
  139. package/dist/client/files/fileTools.js +450 -0
  140. package/dist/client/files/streamingReader.js +321 -0
  141. package/dist/client/files/types.js +23 -0
  142. package/dist/client/hitl/hitlErrors.js +54 -0
  143. package/dist/client/hitl/hitlManager.js +460 -0
  144. package/dist/client/httpClient.d.ts +297 -0
  145. package/dist/client/httpClient.js +837 -0
  146. package/dist/client/index.d.ts +111 -0
  147. package/dist/client/index.js +511 -0
  148. package/dist/client/interceptors.d.ts +283 -0
  149. package/dist/client/interceptors.js +601 -0
  150. package/dist/client/mcp/agentExposure.js +356 -0
  151. package/dist/client/mcp/auth/index.js +11 -0
  152. package/dist/client/mcp/auth/oauthClientProvider.js +325 -0
  153. package/dist/client/mcp/auth/tokenStorage.js +134 -0
  154. package/dist/client/mcp/batching/index.js +10 -0
  155. package/dist/client/mcp/batching/requestBatcher.js +441 -0
  156. package/dist/client/mcp/caching/index.js +10 -0
  157. package/dist/client/mcp/caching/toolCache.js +433 -0
  158. package/dist/client/mcp/elicitation/elicitationManager.js +376 -0
  159. package/dist/client/mcp/elicitation/index.js +11 -0
  160. package/dist/client/mcp/elicitation/types.js +10 -0
  161. package/dist/client/mcp/elicitationProtocol.js +375 -0
  162. package/dist/client/mcp/enhancedToolDiscovery.js +481 -0
  163. package/dist/client/mcp/externalServerManager.js +1478 -0
  164. package/dist/client/mcp/factory.js +161 -0
  165. package/dist/client/mcp/flexibleToolValidator.js +161 -0
  166. package/dist/client/mcp/httpRateLimiter.js +391 -0
  167. package/dist/client/mcp/httpRetryHandler.js +178 -0
  168. package/dist/client/mcp/index.js +74 -0
  169. package/dist/client/mcp/mcpCircuitBreaker.js +427 -0
  170. package/dist/client/mcp/mcpClientFactory.js +708 -0
  171. package/dist/client/mcp/mcpRegistryClient.js +488 -0
  172. package/dist/client/mcp/mcpServerBase.js +373 -0
  173. package/dist/client/mcp/multiServerManager.js +579 -0
  174. package/dist/client/mcp/registry.js +158 -0
  175. package/dist/client/mcp/routing/index.js +10 -0
  176. package/dist/client/mcp/routing/toolRouter.js +416 -0
  177. package/dist/client/mcp/serverCapabilities.js +502 -0
  178. package/dist/client/mcp/servers/agent/directToolsServer.js +150 -0
  179. package/dist/client/mcp/toolAnnotations.js +239 -0
  180. package/dist/client/mcp/toolConverter.js +258 -0
  181. package/dist/client/mcp/toolDiscoveryService.js +798 -0
  182. package/dist/client/mcp/toolIntegration.js +334 -0
  183. package/dist/client/mcp/toolRegistry.js +719 -0
  184. package/dist/client/memory/hippocampusInitializer.js +19 -0
  185. package/dist/client/memory/memoryRetrievalTools.js +166 -0
  186. package/dist/client/middleware/builtin/analytics.js +132 -0
  187. package/dist/client/middleware/builtin/autoEvaluation.js +203 -0
  188. package/dist/client/middleware/builtin/guardrails.js +109 -0
  189. package/dist/client/middleware/builtin/lifecycle.js +168 -0
  190. package/dist/client/middleware/factory.js +327 -0
  191. package/dist/client/middleware/registry.js +295 -0
  192. package/dist/client/middleware/utils/guardrailsUtils.js +396 -0
  193. package/dist/client/models/anthropicModels.js +527 -0
  194. package/dist/client/neurolink.js +8015 -0
  195. package/dist/client/observability/exporterRegistry.js +413 -0
  196. package/dist/client/observability/exporters/arizeExporter.js +138 -0
  197. package/dist/client/observability/exporters/baseExporter.js +190 -0
  198. package/dist/client/observability/exporters/braintrustExporter.js +154 -0
  199. package/dist/client/observability/exporters/datadogExporter.js +196 -0
  200. package/dist/client/observability/exporters/laminarExporter.js +302 -0
  201. package/dist/client/observability/exporters/langfuseExporter.js +209 -0
  202. package/dist/client/observability/exporters/langsmithExporter.js +143 -0
  203. package/dist/client/observability/exporters/otelExporter.js +164 -0
  204. package/dist/client/observability/exporters/posthogExporter.js +287 -0
  205. package/dist/client/observability/exporters/sentryExporter.js +165 -0
  206. package/dist/client/observability/index.js +31 -0
  207. package/dist/client/observability/metricsAggregator.js +556 -0
  208. package/dist/client/observability/otelBridge.js +131 -0
  209. package/dist/client/observability/retryPolicy.js +383 -0
  210. package/dist/client/observability/sampling/samplers.js +216 -0
  211. package/dist/client/observability/spanProcessor.js +303 -0
  212. package/dist/client/observability/tokenTracker.js +413 -0
  213. package/dist/client/observability/types/exporterTypes.js +5 -0
  214. package/dist/client/observability/types/index.js +4 -0
  215. package/dist/client/observability/types/spanTypes.js +92 -0
  216. package/dist/client/observability/utils/safeMetadata.js +25 -0
  217. package/dist/client/observability/utils/spanSerializer.js +292 -0
  218. package/dist/client/processors/archive/ArchiveProcessor.js +1308 -0
  219. package/dist/client/processors/base/BaseFileProcessor.js +614 -0
  220. package/dist/client/processors/base/types.js +82 -0
  221. package/dist/client/processors/config/fileTypes.js +520 -0
  222. package/dist/client/processors/config/index.js +92 -0
  223. package/dist/client/processors/config/languageMap.js +410 -0
  224. package/dist/client/processors/config/mimeTypes.js +363 -0
  225. package/dist/client/processors/config/sizeLimits.js +258 -0
  226. package/dist/client/processors/document/ExcelProcessor.js +590 -0
  227. package/dist/client/processors/document/OpenDocumentProcessor.js +212 -0
  228. package/dist/client/processors/document/PptxProcessor.js +157 -0
  229. package/dist/client/processors/document/RtfProcessor.js +361 -0
  230. package/dist/client/processors/document/WordProcessor.js +353 -0
  231. package/dist/client/processors/errors/FileErrorCode.js +255 -0
  232. package/dist/client/processors/errors/errorHelpers.js +386 -0
  233. package/dist/client/processors/errors/errorSerializer.js +507 -0
  234. package/dist/client/processors/errors/index.js +49 -0
  235. package/dist/client/processors/markup/SvgProcessor.js +240 -0
  236. package/dist/client/processors/media/AudioProcessor.js +707 -0
  237. package/dist/client/processors/media/VideoProcessor.js +1045 -0
  238. package/dist/client/providers/amazonBedrock.js +1512 -0
  239. package/dist/client/providers/amazonSagemaker.js +162 -0
  240. package/dist/client/providers/anthropic.js +831 -0
  241. package/dist/client/providers/azureOpenai.js +143 -0
  242. package/dist/client/providers/googleAiStudio.js +1200 -0
  243. package/dist/client/providers/googleNativeGemini3.js +543 -0
  244. package/dist/client/providers/googleVertex.js +2936 -0
  245. package/dist/client/providers/huggingFace.js +315 -0
  246. package/dist/client/providers/litellm.js +488 -0
  247. package/dist/client/providers/mistral.js +157 -0
  248. package/dist/client/providers/ollama.js +1579 -0
  249. package/dist/client/providers/openAI.js +627 -0
  250. package/dist/client/providers/openRouter.js +543 -0
  251. package/dist/client/providers/openaiCompatible.js +290 -0
  252. package/dist/client/providers/providerTypeUtils.js +46 -0
  253. package/dist/client/providers/sagemaker/adaptive-semaphore.js +215 -0
  254. package/dist/client/providers/sagemaker/client.js +472 -0
  255. package/dist/client/providers/sagemaker/config.js +317 -0
  256. package/dist/client/providers/sagemaker/detection.js +606 -0
  257. package/dist/client/providers/sagemaker/error-constants.js +227 -0
  258. package/dist/client/providers/sagemaker/errors.js +299 -0
  259. package/dist/client/providers/sagemaker/language-model.js +775 -0
  260. package/dist/client/providers/sagemaker/parsers.js +634 -0
  261. package/dist/client/providers/sagemaker/streaming.js +331 -0
  262. package/dist/client/providers/sagemaker/structured-parser.js +625 -0
  263. package/dist/client/proxy/accountQuota.js +162 -0
  264. package/dist/client/proxy/claudeFormat.js +595 -0
  265. package/dist/client/proxy/modelRouter.js +29 -0
  266. package/dist/client/proxy/oauthFetch.js +367 -0
  267. package/dist/client/proxy/proxyFetch.js +586 -0
  268. package/dist/client/proxy/requestLogger.js +207 -0
  269. package/dist/client/proxy/tokenRefresh.js +124 -0
  270. package/dist/client/proxy/usageStats.js +74 -0
  271. package/dist/client/proxy/utils/noProxyUtils.js +149 -0
  272. package/dist/client/rag/ChunkerFactory.js +320 -0
  273. package/dist/client/rag/ChunkerRegistry.js +421 -0
  274. package/dist/client/rag/chunkers/BaseChunker.js +143 -0
  275. package/dist/client/rag/chunkers/CharacterChunker.js +28 -0
  276. package/dist/client/rag/chunkers/HTMLChunker.js +38 -0
  277. package/dist/client/rag/chunkers/JSONChunker.js +68 -0
  278. package/dist/client/rag/chunkers/LaTeXChunker.js +63 -0
  279. package/dist/client/rag/chunkers/MarkdownChunker.js +306 -0
  280. package/dist/client/rag/chunkers/RecursiveChunker.js +139 -0
  281. package/dist/client/rag/chunkers/SemanticMarkdownChunker.js +138 -0
  282. package/dist/client/rag/chunkers/SentenceChunker.js +66 -0
  283. package/dist/client/rag/chunkers/TokenChunker.js +61 -0
  284. package/dist/client/rag/chunkers/index.js +15 -0
  285. package/dist/client/rag/chunking/characterChunker.js +142 -0
  286. package/dist/client/rag/chunking/chunkerRegistry.js +194 -0
  287. package/dist/client/rag/chunking/htmlChunker.js +247 -0
  288. package/dist/client/rag/chunking/index.js +17 -0
  289. package/dist/client/rag/chunking/jsonChunker.js +281 -0
  290. package/dist/client/rag/chunking/latexChunker.js +251 -0
  291. package/dist/client/rag/chunking/markdownChunker.js +373 -0
  292. package/dist/client/rag/chunking/recursiveChunker.js +148 -0
  293. package/dist/client/rag/chunking/semanticChunker.js +306 -0
  294. package/dist/client/rag/chunking/sentenceChunker.js +230 -0
  295. package/dist/client/rag/chunking/tokenChunker.js +183 -0
  296. package/dist/client/rag/document/MDocument.js +392 -0
  297. package/dist/client/rag/document/index.js +5 -0
  298. package/dist/client/rag/document/loaders.js +500 -0
  299. package/dist/client/rag/errors/RAGError.js +274 -0
  300. package/dist/client/rag/errors/index.js +6 -0
  301. package/dist/client/rag/graphRag/graphRAG.js +401 -0
  302. package/dist/client/rag/graphRag/index.js +4 -0
  303. package/dist/client/rag/index.js +141 -0
  304. package/dist/client/rag/metadata/MetadataExtractorFactory.js +418 -0
  305. package/dist/client/rag/metadata/MetadataExtractorRegistry.js +362 -0
  306. package/dist/client/rag/metadata/index.js +9 -0
  307. package/dist/client/rag/metadata/metadataExtractor.js +280 -0
  308. package/dist/client/rag/pipeline/RAGPipeline.js +436 -0
  309. package/dist/client/rag/pipeline/contextAssembly.js +341 -0
  310. package/dist/client/rag/pipeline/index.js +5 -0
  311. package/dist/client/rag/ragIntegration.js +321 -0
  312. package/dist/client/rag/reranker/RerankerFactory.js +430 -0
  313. package/dist/client/rag/reranker/RerankerRegistry.js +402 -0
  314. package/dist/client/rag/reranker/index.js +9 -0
  315. package/dist/client/rag/reranker/reranker.js +277 -0
  316. package/dist/client/rag/resilience/CircuitBreaker.js +431 -0
  317. package/dist/client/rag/resilience/RetryHandler.js +304 -0
  318. package/dist/client/rag/resilience/index.js +7 -0
  319. package/dist/client/rag/retrieval/hybridSearch.js +335 -0
  320. package/dist/client/rag/retrieval/index.js +5 -0
  321. package/dist/client/rag/retrieval/vectorQueryTool.js +307 -0
  322. package/dist/client/rag/types.js +8 -0
  323. package/dist/client/reactHooks.d.ts +239 -0
  324. package/dist/client/reactHooks.tsx +1483 -0
  325. package/dist/client/sdk/toolRegistration.js +377 -0
  326. package/dist/client/server/abstract/baseServerAdapter.js +575 -0
  327. package/dist/client/server/adapters/expressAdapter.js +486 -0
  328. package/dist/client/server/adapters/fastifyAdapter.js +472 -0
  329. package/dist/client/server/adapters/honoAdapter.js +632 -0
  330. package/dist/client/server/adapters/koaAdapter.js +510 -0
  331. package/dist/client/server/errors.js +486 -0
  332. package/dist/client/server/factory/serverAdapterFactory.js +160 -0
  333. package/dist/client/server/index.js +108 -0
  334. package/dist/client/server/middleware/abortSignal.js +111 -0
  335. package/dist/client/server/middleware/auth.js +388 -0
  336. package/dist/client/server/middleware/cache.js +359 -0
  337. package/dist/client/server/middleware/common.js +281 -0
  338. package/dist/client/server/middleware/deprecation.js +190 -0
  339. package/dist/client/server/middleware/mcpBodyAttachment.js +63 -0
  340. package/dist/client/server/middleware/rateLimit.js +227 -0
  341. package/dist/client/server/middleware/validation.js +388 -0
  342. package/dist/client/server/openapi/generator.js +398 -0
  343. package/dist/client/server/openapi/index.js +36 -0
  344. package/dist/client/server/openapi/schemas.js +695 -0
  345. package/dist/client/server/openapi/templates.js +374 -0
  346. package/dist/client/server/routes/agentRoutes.js +171 -0
  347. package/dist/client/server/routes/claudeProxyRoutes.js +1600 -0
  348. package/dist/client/server/routes/healthRoutes.js +187 -0
  349. package/dist/client/server/routes/index.js +57 -0
  350. package/dist/client/server/routes/mcpRoutes.js +342 -0
  351. package/dist/client/server/routes/memoryRoutes.js +350 -0
  352. package/dist/client/server/routes/openApiRoutes.js +126 -0
  353. package/dist/client/server/routes/toolRoutes.js +199 -0
  354. package/dist/client/server/streaming/dataStream.js +486 -0
  355. package/dist/client/server/streaming/index.js +11 -0
  356. package/dist/client/server/types.js +67 -0
  357. package/dist/client/server/utils/redaction.js +334 -0
  358. package/dist/client/server/utils/validation.js +243 -0
  359. package/dist/client/server/websocket/WebSocketHandler.js +383 -0
  360. package/dist/client/server/websocket/index.js +4 -0
  361. package/dist/client/services/server/ai/observability/instrumentation.js +808 -0
  362. package/dist/client/sseClient.d.ts +156 -0
  363. package/dist/client/sseClient.js +545 -0
  364. package/dist/client/streamingClient.d.ts +327 -0
  365. package/dist/client/streamingClient.js +917 -0
  366. package/dist/client/telemetry/attributes.js +100 -0
  367. package/dist/client/telemetry/index.js +26 -0
  368. package/dist/client/telemetry/telemetryService.js +308 -0
  369. package/dist/client/telemetry/tracers.js +17 -0
  370. package/dist/client/telemetry/withSpan.js +34 -0
  371. package/dist/client/types/actionTypes.js +6 -0
  372. package/dist/client/types/analytics.js +5 -0
  373. package/dist/client/types/authTypes.js +8 -0
  374. package/dist/client/types/circuitBreakerErrors.js +34 -0
  375. package/dist/client/types/cli.js +21 -0
  376. package/dist/client/types/clientTypes.js +10 -0
  377. package/dist/client/types/common.js +51 -0
  378. package/dist/client/types/configTypes.js +49 -0
  379. package/dist/client/types/content.js +19 -0
  380. package/dist/client/types/contextTypes.js +400 -0
  381. package/dist/client/types/conversation.js +47 -0
  382. package/dist/client/types/conversationMemoryInterface.js +6 -0
  383. package/dist/client/types/domainTypes.js +5 -0
  384. package/dist/client/types/errors.js +167 -0
  385. package/dist/client/types/evaluation.js +5 -0
  386. package/dist/client/types/evaluationProviders.js +5 -0
  387. package/dist/client/types/evaluationTypes.js +1 -0
  388. package/dist/client/types/externalMcp.js +6 -0
  389. package/dist/client/types/fileReferenceTypes.js +8 -0
  390. package/dist/client/types/fileTypes.js +4 -0
  391. package/dist/client/types/generateTypes.js +1 -0
  392. package/dist/client/types/guardrails.js +1 -0
  393. package/dist/client/types/hitlTypes.js +8 -0
  394. package/dist/client/types/index.js +57 -0
  395. package/dist/client/types/mcpTypes.js +5 -0
  396. package/dist/client/types/middlewareTypes.js +1 -0
  397. package/dist/client/types/modelTypes.js +30 -0
  398. package/dist/client/types/multimodal.js +135 -0
  399. package/dist/client/types/observability.js +6 -0
  400. package/dist/client/types/pptTypes.js +82 -0
  401. package/dist/client/types/providers.js +111 -0
  402. package/dist/client/types/proxyTypes.js +16 -0
  403. package/dist/client/types/ragTypes.js +7 -0
  404. package/dist/client/types/sdkTypes.js +8 -0
  405. package/dist/client/types/serviceTypes.js +5 -0
  406. package/dist/client/types/streamTypes.js +1 -0
  407. package/dist/client/types/subscriptionTypes.js +9 -0
  408. package/dist/client/types/taskClassificationTypes.js +5 -0
  409. package/dist/client/types/tools.js +24 -0
  410. package/dist/client/types/ttsTypes.js +57 -0
  411. package/dist/client/types/typeAliases.js +48 -0
  412. package/dist/client/types/utilities.js +4 -0
  413. package/dist/client/types/workflowTypes.js +30 -0
  414. package/dist/client/utils/async/withTimeout.js +98 -0
  415. package/dist/client/utils/asyncMutex.js +60 -0
  416. package/dist/client/utils/conversationMemory.js +431 -0
  417. package/dist/client/utils/csvProcessor.js +846 -0
  418. package/dist/client/utils/errorHandling.js +936 -0
  419. package/dist/client/utils/evaluationUtils.js +131 -0
  420. package/dist/client/utils/factoryProcessing.js +589 -0
  421. package/dist/client/utils/fileDetector.js +2161 -0
  422. package/dist/client/utils/imageCache.js +376 -0
  423. package/dist/client/utils/imageProcessor.js +704 -0
  424. package/dist/client/utils/logger.js +491 -0
  425. package/dist/client/utils/mcpDefaults.js +134 -0
  426. package/dist/client/utils/messageBuilder.js +1653 -0
  427. package/dist/client/utils/modelAliasResolver.js +54 -0
  428. package/dist/client/utils/modelDetection.js +80 -0
  429. package/dist/client/utils/modelRouter.js +292 -0
  430. package/dist/client/utils/multimodalOptionsBuilder.js +65 -0
  431. package/dist/client/utils/observabilityHelpers.js +47 -0
  432. package/dist/client/utils/parameterValidation.js +966 -0
  433. package/dist/client/utils/pdfProcessor.js +410 -0
  434. package/dist/client/utils/performance.js +222 -0
  435. package/dist/client/utils/pricing.js +340 -0
  436. package/dist/client/utils/promptRedaction.js +62 -0
  437. package/dist/client/utils/providerConfig.js +1009 -0
  438. package/dist/client/utils/providerHealth.js +1237 -0
  439. package/dist/client/utils/providerRetry.js +112 -0
  440. package/dist/client/utils/providerUtils.js +434 -0
  441. package/dist/client/utils/rateLimiter.js +200 -0
  442. package/dist/client/utils/redis.js +368 -0
  443. package/dist/client/utils/retryHandler.js +269 -0
  444. package/dist/client/utils/retryability.js +22 -0
  445. package/dist/client/utils/sanitizers/svg.js +481 -0
  446. package/dist/client/utils/schemaConversion.js +255 -0
  447. package/dist/client/utils/taskClassificationUtils.js +149 -0
  448. package/dist/client/utils/taskClassifier.js +94 -0
  449. package/dist/client/utils/thinkingConfig.js +104 -0
  450. package/dist/client/utils/timeout.js +359 -0
  451. package/dist/client/utils/tokenEstimation.js +142 -0
  452. package/dist/client/utils/tokenLimits.js +125 -0
  453. package/dist/client/utils/tokenUtils.js +239 -0
  454. package/dist/client/utils/toolUtils.js +75 -0
  455. package/dist/client/utils/transformationUtils.js +554 -0
  456. package/dist/client/utils/ttsProcessor.js +286 -0
  457. package/dist/client/utils/typeUtils.js +97 -0
  458. package/dist/client/utils/videoAnalysisProcessor.js +67 -0
  459. package/dist/client/workflow/config.js +398 -0
  460. package/dist/client/workflow/core/ensembleExecutor.js +407 -0
  461. package/dist/client/workflow/core/judgeScorer.js +544 -0
  462. package/dist/client/workflow/core/responseConditioner.js +225 -0
  463. package/dist/client/workflow/core/types/conditionerTypes.js +7 -0
  464. package/dist/client/workflow/core/types/ensembleTypes.js +7 -0
  465. package/dist/client/workflow/core/types/index.js +7 -0
  466. package/dist/client/workflow/core/types/judgeTypes.js +7 -0
  467. package/dist/client/workflow/core/types/layerTypes.js +7 -0
  468. package/dist/client/workflow/core/types/registryTypes.js +7 -0
  469. package/dist/client/workflow/core/workflowRegistry.js +304 -0
  470. package/dist/client/workflow/core/workflowRunner.js +586 -0
  471. package/dist/client/workflow/index.js +50 -0
  472. package/dist/client/workflow/types.js +9 -0
  473. package/dist/client/workflow/utils/types/index.js +7 -0
  474. package/dist/client/workflow/utils/workflowMetrics.js +311 -0
  475. package/dist/client/workflow/utils/workflowValidation.js +420 -0
  476. package/dist/client/workflow/workflows/adaptiveWorkflow.js +366 -0
  477. package/dist/client/workflow/workflows/consensusWorkflow.js +192 -0
  478. package/dist/client/workflow/workflows/fallbackWorkflow.js +225 -0
  479. package/dist/client/workflow/workflows/multiJudgeWorkflow.js +351 -0
  480. package/dist/client/wsClient.d.ts +130 -0
  481. package/dist/client/wsClient.js +369 -0
  482. package/dist/config/configManager.js +2 -2
  483. package/dist/constants/contextWindows.js +15 -13
  484. package/dist/constants/enums.d.ts +10 -16
  485. package/dist/constants/enums.js +12 -18
  486. package/dist/constants/index.d.ts +0 -10
  487. package/dist/constants/index.js +1 -1
  488. package/dist/constants/tokens.d.ts +29 -16
  489. package/dist/constants/tokens.js +23 -16
  490. package/dist/core/baseProvider.d.ts +5 -5
  491. package/dist/core/baseProvider.js +6 -6
  492. package/dist/core/constants.js +6 -1
  493. package/dist/core/dynamicModels.js +10 -6
  494. package/dist/core/evaluationProviders.js +1 -1
  495. package/dist/core/infrastructure/baseError.d.ts +1 -1
  496. package/dist/core/infrastructure/baseFactory.d.ts +1 -6
  497. package/dist/core/infrastructure/baseRegistry.d.ts +6 -5
  498. package/dist/core/infrastructure/index.d.ts +6 -4
  499. package/dist/core/infrastructure/index.js +2 -2
  500. package/dist/core/modelConfiguration.js +3 -1
  501. package/dist/core/modules/GenerationHandler.d.ts +3 -3
  502. package/dist/core/modules/GenerationHandler.js +49 -41
  503. package/dist/core/modules/MessageBuilder.d.ts +5 -5
  504. package/dist/core/modules/MessageBuilder.js +4 -6
  505. package/dist/core/modules/StreamHandler.js +26 -12
  506. package/dist/core/modules/TelemetryHandler.d.ts +4 -6
  507. package/dist/core/modules/TelemetryHandler.js +7 -6
  508. package/dist/core/modules/ToolsManager.d.ts +2 -12
  509. package/dist/core/modules/ToolsManager.js +20 -4
  510. package/dist/core/modules/Utilities.js +3 -1
  511. package/dist/core/redisConversationMemoryManager.js +3 -3
  512. package/dist/core/streamAnalytics.js +23 -9
  513. package/dist/evaluation/contextBuilder.d.ts +2 -2
  514. package/dist/evaluation/contextBuilder.js +2 -2
  515. package/dist/evaluation/index.d.ts +2 -2
  516. package/dist/evaluation/retryManager.js +1 -1
  517. package/dist/factories/providerFactory.js +2 -2
  518. package/dist/features/ppt/constants.js +1 -1
  519. package/dist/features/ppt/presentationOrchestrator.js +7 -3
  520. package/dist/features/ppt/slideGenerator.d.ts +2 -1
  521. package/dist/features/ppt/slideGenerator.js +6 -1
  522. package/dist/files/fileTools.d.ts +16 -247
  523. package/dist/files/fileTools.js +16 -15
  524. package/dist/index.d.ts +5 -3
  525. package/dist/index.js +20 -3
  526. package/dist/lib/adapters/providerImageAdapter.js +13 -22
  527. package/dist/lib/adapters/video/videoAnalyzer.d.ts +4 -4
  528. package/dist/lib/adapters/video/videoAnalyzer.js +3 -3
  529. package/dist/lib/agent/directTools.d.ts +20 -289
  530. package/dist/lib/agent/directTools.js +11 -10
  531. package/dist/lib/auth/accountPool.d.ts +68 -0
  532. package/dist/lib/auth/accountPool.js +179 -0
  533. package/dist/lib/auth/anthropicOAuth.d.ts +15 -5
  534. package/dist/lib/auth/anthropicOAuth.js +117 -57
  535. package/dist/lib/auth/index.d.ts +7 -5
  536. package/dist/lib/auth/index.js +6 -2
  537. package/dist/lib/auth/tokenStore.d.ts +71 -27
  538. package/dist/lib/auth/tokenStore.js +342 -64
  539. package/dist/lib/client/aiSdkAdapter.d.ts +196 -0
  540. package/dist/lib/client/aiSdkAdapter.js +488 -0
  541. package/dist/lib/client/auth.d.ts +248 -0
  542. package/dist/lib/client/auth.js +474 -0
  543. package/dist/lib/client/errors.d.ts +299 -0
  544. package/dist/lib/client/errors.js +553 -0
  545. package/dist/lib/client/httpClient.d.ts +297 -0
  546. package/dist/lib/client/httpClient.js +838 -0
  547. package/dist/lib/client/index.d.ts +111 -0
  548. package/dist/lib/client/index.js +173 -0
  549. package/dist/lib/client/interceptors.d.ts +283 -0
  550. package/dist/lib/client/interceptors.js +602 -0
  551. package/dist/lib/client/reactHooks.d.ts +239 -0
  552. package/dist/lib/client/reactHooks.js +1160 -0
  553. package/dist/lib/client/sseClient.d.ts +156 -0
  554. package/dist/lib/client/sseClient.js +546 -0
  555. package/dist/lib/client/streamingClient.d.ts +327 -0
  556. package/dist/lib/client/streamingClient.js +918 -0
  557. package/dist/lib/client/wsClient.d.ts +130 -0
  558. package/dist/lib/client/wsClient.js +370 -0
  559. package/dist/lib/config/configManager.js +2 -2
  560. package/dist/lib/constants/contextWindows.js +15 -13
  561. package/dist/lib/constants/enums.d.ts +10 -16
  562. package/dist/lib/constants/enums.js +12 -18
  563. package/dist/lib/constants/index.d.ts +0 -10
  564. package/dist/lib/constants/index.js +1 -1
  565. package/dist/lib/constants/tokens.d.ts +29 -16
  566. package/dist/lib/constants/tokens.js +23 -16
  567. package/dist/lib/core/baseProvider.d.ts +5 -5
  568. package/dist/lib/core/baseProvider.js +6 -6
  569. package/dist/lib/core/constants.js +6 -1
  570. package/dist/lib/core/dynamicModels.js +10 -6
  571. package/dist/lib/core/evaluationProviders.js +1 -1
  572. package/dist/lib/core/infrastructure/baseError.d.ts +1 -1
  573. package/dist/lib/core/infrastructure/baseFactory.d.ts +1 -6
  574. package/dist/lib/core/infrastructure/baseRegistry.d.ts +6 -5
  575. package/dist/lib/core/infrastructure/index.d.ts +6 -4
  576. package/dist/lib/core/infrastructure/index.js +2 -2
  577. package/dist/lib/core/modelConfiguration.js +3 -1
  578. package/dist/lib/core/modules/GenerationHandler.d.ts +3 -3
  579. package/dist/lib/core/modules/GenerationHandler.js +49 -41
  580. package/dist/lib/core/modules/MessageBuilder.d.ts +5 -5
  581. package/dist/lib/core/modules/MessageBuilder.js +4 -6
  582. package/dist/lib/core/modules/StreamHandler.js +26 -12
  583. package/dist/lib/core/modules/TelemetryHandler.d.ts +4 -6
  584. package/dist/lib/core/modules/TelemetryHandler.js +7 -6
  585. package/dist/lib/core/modules/ToolsManager.d.ts +2 -12
  586. package/dist/lib/core/modules/ToolsManager.js +20 -4
  587. package/dist/lib/core/modules/Utilities.js +3 -1
  588. package/dist/lib/core/redisConversationMemoryManager.js +3 -3
  589. package/dist/lib/core/streamAnalytics.js +23 -9
  590. package/dist/lib/evaluation/contextBuilder.d.ts +2 -2
  591. package/dist/lib/evaluation/contextBuilder.js +2 -2
  592. package/dist/lib/evaluation/index.d.ts +2 -2
  593. package/dist/lib/evaluation/retryManager.js +1 -1
  594. package/dist/lib/factories/providerFactory.js +2 -2
  595. package/dist/lib/features/ppt/constants.js +1 -1
  596. package/dist/lib/features/ppt/presentationOrchestrator.js +7 -3
  597. package/dist/lib/features/ppt/slideGenerator.d.ts +2 -1
  598. package/dist/lib/features/ppt/slideGenerator.js +6 -1
  599. package/dist/lib/files/fileTools.d.ts +16 -247
  600. package/dist/lib/files/fileTools.js +16 -15
  601. package/dist/lib/index.d.ts +5 -3
  602. package/dist/lib/index.js +20 -3
  603. package/dist/lib/mcp/batching/requestBatcher.js +1 -1
  604. package/dist/lib/mcp/externalServerManager.js +5 -2
  605. package/dist/lib/mcp/factory.js +1 -1
  606. package/dist/lib/mcp/index.d.ts +1 -1
  607. package/dist/lib/mcp/index.js +1 -1
  608. package/dist/lib/mcp/mcpCircuitBreaker.d.ts +1 -0
  609. package/dist/lib/mcp/mcpCircuitBreaker.js +30 -4
  610. package/dist/lib/mcp/mcpClientFactory.js +33 -4
  611. package/dist/lib/mcp/toolDiscoveryService.js +52 -5
  612. package/dist/lib/mcp/toolRegistry.js +7 -1
  613. package/dist/lib/memory/memoryRetrievalTools.d.ts +5 -89
  614. package/dist/lib/memory/memoryRetrievalTools.js +1 -1
  615. package/dist/lib/middleware/builtin/analytics.js +3 -0
  616. package/dist/lib/middleware/builtin/autoEvaluation.js +46 -24
  617. package/dist/lib/middleware/builtin/guardrails.js +4 -0
  618. package/dist/lib/middleware/builtin/lifecycle.js +10 -6
  619. package/dist/lib/middleware/factory.d.ts +3 -3
  620. package/dist/lib/middleware/factory.js +3 -2
  621. package/dist/lib/middleware/index.d.ts +1 -1
  622. package/dist/lib/middleware/registry.d.ts +2 -2
  623. package/dist/lib/middleware/registry.js +1 -0
  624. package/dist/lib/middleware/utils/guardrailsUtils.d.ts +5 -6
  625. package/dist/lib/middleware/utils/guardrailsUtils.js +15 -6
  626. package/dist/lib/neurolink.d.ts +9 -20
  627. package/dist/lib/neurolink.js +278 -186
  628. package/dist/lib/observability/retryPolicy.d.ts +2 -13
  629. package/dist/lib/observability/sampling/samplers.d.ts +2 -11
  630. package/dist/lib/observability/spanProcessor.d.ts +2 -14
  631. package/dist/lib/processors/base/BaseFileProcessor.js +1 -1
  632. package/dist/lib/processors/document/OpenDocumentProcessor.js +5 -3
  633. package/dist/lib/processors/media/VideoProcessor.js +157 -101
  634. package/dist/lib/providers/amazonBedrock.js +12 -5
  635. package/dist/lib/providers/amazonSagemaker.d.ts +5 -5
  636. package/dist/lib/providers/amazonSagemaker.js +6 -2
  637. package/dist/lib/providers/anthropic.d.ts +3 -3
  638. package/dist/lib/providers/anthropic.js +23 -192
  639. package/dist/lib/providers/anthropicBaseProvider.d.ts +4 -4
  640. package/dist/lib/providers/anthropicBaseProvider.js +24 -13
  641. package/dist/lib/providers/azureOpenai.d.ts +2 -2
  642. package/dist/lib/providers/azureOpenai.js +6 -6
  643. package/dist/lib/providers/googleAiStudio.d.ts +2 -2
  644. package/dist/lib/providers/googleAiStudio.js +15 -7
  645. package/dist/lib/providers/googleNativeGemini3.d.ts +3 -54
  646. package/dist/lib/providers/googleNativeGemini3.js +14 -10
  647. package/dist/lib/providers/googleVertex.d.ts +6 -6
  648. package/dist/lib/providers/googleVertex.js +32 -26
  649. package/dist/lib/providers/huggingFace.d.ts +4 -4
  650. package/dist/lib/providers/huggingFace.js +15 -5
  651. package/dist/lib/providers/litellm.d.ts +4 -4
  652. package/dist/lib/providers/litellm.js +54 -42
  653. package/dist/lib/providers/mistral.d.ts +2 -2
  654. package/dist/lib/providers/mistral.js +5 -4
  655. package/dist/lib/providers/ollama.d.ts +7 -4
  656. package/dist/lib/providers/ollama.js +30 -8
  657. package/dist/lib/providers/openAI.d.ts +2 -2
  658. package/dist/lib/providers/openAI.js +46 -21
  659. package/dist/lib/providers/openRouter.d.ts +4 -4
  660. package/dist/lib/providers/openRouter.js +63 -35
  661. package/dist/lib/providers/openaiCompatible.d.ts +2 -2
  662. package/dist/lib/providers/openaiCompatible.js +18 -9
  663. package/dist/lib/providers/providerTypeUtils.d.ts +28 -0
  664. package/dist/lib/providers/providerTypeUtils.js +47 -0
  665. package/dist/lib/providers/sagemaker/config.js +5 -5
  666. package/dist/lib/providers/sagemaker/language-model.d.ts +23 -13
  667. package/dist/lib/providers/sagemaker/language-model.js +20 -8
  668. package/dist/lib/proxy/accountQuota.d.ts +33 -0
  669. package/dist/lib/proxy/accountQuota.js +163 -0
  670. package/dist/lib/proxy/claudeFormat.d.ts +143 -0
  671. package/dist/lib/proxy/claudeFormat.js +596 -0
  672. package/dist/lib/proxy/cloaking/index.d.ts +44 -0
  673. package/dist/lib/proxy/cloaking/index.js +87 -0
  674. package/dist/lib/proxy/cloaking/plugins/headerScrubber.d.ts +9 -0
  675. package/dist/lib/proxy/cloaking/plugins/headerScrubber.js +87 -0
  676. package/dist/lib/proxy/cloaking/plugins/sessionIdentity.d.ts +15 -0
  677. package/dist/lib/proxy/cloaking/plugins/sessionIdentity.js +66 -0
  678. package/dist/lib/proxy/cloaking/plugins/systemPromptInjector.d.ts +11 -0
  679. package/dist/lib/proxy/cloaking/plugins/systemPromptInjector.js +84 -0
  680. package/dist/lib/proxy/cloaking/plugins/tlsFingerprint.d.ts +14 -0
  681. package/dist/lib/proxy/cloaking/plugins/tlsFingerprint.js +39 -0
  682. package/dist/lib/proxy/cloaking/plugins/wordObfuscator.d.ts +9 -0
  683. package/dist/lib/proxy/cloaking/plugins/wordObfuscator.js +122 -0
  684. package/dist/lib/proxy/cloaking/types.d.ts +1 -0
  685. package/dist/lib/proxy/cloaking/types.js +2 -0
  686. package/dist/lib/proxy/modelRouter.d.ts +10 -0
  687. package/dist/lib/proxy/modelRouter.js +30 -0
  688. package/dist/lib/proxy/oauthFetch.d.ts +36 -0
  689. package/dist/lib/proxy/oauthFetch.js +368 -0
  690. package/dist/lib/proxy/proxyConfig.d.ts +42 -0
  691. package/dist/lib/proxy/proxyConfig.js +500 -0
  692. package/dist/lib/proxy/proxyFetch.js +2 -1
  693. package/dist/lib/proxy/requestLogger.d.ts +50 -0
  694. package/dist/lib/proxy/requestLogger.js +208 -0
  695. package/dist/lib/proxy/tokenRefresh.d.ts +4 -0
  696. package/dist/lib/proxy/tokenRefresh.js +125 -0
  697. package/dist/lib/proxy/usageStats.d.ts +13 -0
  698. package/dist/lib/proxy/usageStats.js +75 -0
  699. package/dist/lib/rag/document/loaders.js +1 -1
  700. package/dist/lib/rag/pipeline/contextAssembly.d.ts +4 -7
  701. package/dist/lib/rag/ragIntegration.d.ts +2 -14
  702. package/dist/lib/rag/ragIntegration.js +1 -1
  703. package/dist/lib/rag/resilience/CircuitBreaker.d.ts +5 -44
  704. package/dist/lib/rag/resilience/RetryHandler.js +1 -1
  705. package/dist/lib/rag/retrieval/vectorQueryTool.d.ts +1 -9
  706. package/dist/lib/rag/retrieval/vectorQueryTool.js +1 -1
  707. package/dist/lib/sdk/toolRegistration.js +12 -1
  708. package/dist/lib/server/abstract/baseServerAdapter.js +2 -2
  709. package/dist/lib/server/adapters/honoAdapter.d.ts +6 -0
  710. package/dist/lib/server/adapters/honoAdapter.js +76 -10
  711. package/dist/lib/server/middleware/cache.js +3 -0
  712. package/dist/lib/server/routes/claudeProxyRoutes.d.ts +44 -0
  713. package/dist/lib/server/routes/claudeProxyRoutes.js +1601 -0
  714. package/dist/lib/server/routes/healthRoutes.js +18 -1
  715. package/dist/lib/server/routes/index.d.ts +7 -0
  716. package/dist/lib/server/routes/index.js +8 -0
  717. package/dist/lib/server/streaming/dataStream.d.ts +1 -5
  718. package/dist/lib/server/streaming/dataStream.js +3 -0
  719. package/dist/lib/server/utils/validation.d.ts +24 -124
  720. package/dist/lib/server/utils/validation.js +2 -2
  721. package/dist/lib/services/server/ai/observability/instrumentation.js +4 -0
  722. package/dist/lib/telemetry/attributes.d.ts +38 -0
  723. package/dist/lib/telemetry/attributes.js +40 -0
  724. package/dist/lib/telemetry/tracers.d.ts +1 -0
  725. package/dist/lib/telemetry/tracers.js +1 -0
  726. package/dist/lib/types/authTypes.d.ts +56 -0
  727. package/dist/lib/types/authTypes.js +9 -0
  728. package/dist/lib/types/circuitBreakerErrors.d.ts +30 -0
  729. package/dist/lib/types/circuitBreakerErrors.js +35 -0
  730. package/dist/lib/types/cli.d.ts +258 -0
  731. package/dist/lib/types/clientTypes.d.ts +1050 -0
  732. package/dist/lib/types/clientTypes.js +11 -0
  733. package/dist/lib/types/common.d.ts +123 -0
  734. package/dist/lib/types/configTypes.d.ts +49 -0
  735. package/dist/lib/types/configTypes.js +4 -0
  736. package/dist/lib/types/conversation.d.ts +0 -5
  737. package/dist/lib/types/evaluationTypes.d.ts +2 -2
  738. package/dist/lib/types/fileTypes.d.ts +47 -0
  739. package/dist/lib/types/generateTypes.d.ts +7 -3
  740. package/dist/lib/types/guardrails.d.ts +2 -2
  741. package/dist/lib/types/index.d.ts +4 -1
  742. package/dist/lib/types/index.js +5 -0
  743. package/dist/lib/types/middlewareTypes.d.ts +3 -3
  744. package/dist/lib/types/modelTypes.d.ts +7 -97
  745. package/dist/lib/types/modelTypes.js +3 -3
  746. package/dist/lib/types/observability.d.ts +37 -0
  747. package/dist/lib/types/providers.d.ts +107 -0
  748. package/dist/lib/types/proxyTypes.d.ts +536 -0
  749. package/dist/lib/types/proxyTypes.js +17 -0
  750. package/dist/lib/types/ragTypes.d.ts +49 -1
  751. package/dist/lib/types/streamTypes.d.ts +37 -13
  752. package/dist/lib/types/subscriptionTypes.d.ts +77 -0
  753. package/dist/lib/types/subscriptionTypes.js +2 -0
  754. package/dist/lib/types/tools.d.ts +45 -1
  755. package/dist/lib/types/typeAliases.d.ts +8 -0
  756. package/dist/lib/types/typeAliases.js +1 -0
  757. package/dist/lib/utils/async/retry.d.ts +4 -33
  758. package/dist/lib/utils/asyncMutex.d.ts +14 -0
  759. package/dist/lib/utils/asyncMutex.js +61 -0
  760. package/dist/lib/utils/errorHandling.d.ts +2 -1
  761. package/dist/lib/utils/errorHandling.js +14 -6
  762. package/dist/lib/utils/fileDetector.d.ts +13 -1
  763. package/dist/lib/utils/fileDetector.js +114 -32
  764. package/dist/lib/utils/imageProcessor.js +7 -7
  765. package/dist/lib/utils/json/safeParse.d.ts +1 -8
  766. package/dist/lib/utils/mcpDefaults.d.ts +1 -1
  767. package/dist/lib/utils/mcpDefaults.js +11 -2
  768. package/dist/lib/utils/messageBuilder.d.ts +5 -5
  769. package/dist/lib/utils/messageBuilder.js +106 -80
  770. package/dist/lib/utils/modelChoices.d.ts +1 -8
  771. package/dist/lib/utils/pdfProcessor.d.ts +1 -25
  772. package/dist/lib/utils/pdfProcessor.js +5 -4
  773. package/dist/lib/utils/pricing.js +28 -5
  774. package/dist/lib/utils/providerHealth.d.ts +1 -1
  775. package/dist/lib/utils/rateLimiter.d.ts +1 -15
  776. package/dist/lib/utils/redis.d.ts +1 -1
  777. package/dist/lib/utils/redis.js +3 -3
  778. package/dist/lib/utils/sanitizers/filename.d.ts +2 -22
  779. package/dist/lib/utils/sanitizers/index.d.ts +4 -2
  780. package/dist/lib/utils/sanitizers/svg.d.ts +1 -11
  781. package/dist/lib/utils/schemaConversion.js +4 -1
  782. package/dist/lib/utils/thinkingConfig.d.ts +1 -33
  783. package/dist/lib/utils/tokenUtils.d.ts +1 -39
  784. package/dist/lib/utils/videoAnalysisProcessor.d.ts +5 -5
  785. package/dist/lib/utils/videoAnalysisProcessor.js +2 -2
  786. package/dist/lib/workflow/config.d.ts +89 -1257
  787. package/dist/lib/workflow/utils/workflowValidation.js +1 -1
  788. package/dist/mcp/batching/requestBatcher.js +1 -1
  789. package/dist/mcp/externalServerManager.js +5 -2
  790. package/dist/mcp/factory.js +1 -1
  791. package/dist/mcp/index.d.ts +1 -1
  792. package/dist/mcp/index.js +1 -1
  793. package/dist/mcp/mcpCircuitBreaker.d.ts +1 -0
  794. package/dist/mcp/mcpCircuitBreaker.js +30 -4
  795. package/dist/mcp/mcpClientFactory.js +33 -4
  796. package/dist/mcp/toolDiscoveryService.js +52 -5
  797. package/dist/mcp/toolRegistry.js +7 -1
  798. package/dist/memory/memoryRetrievalTools.d.ts +5 -89
  799. package/dist/memory/memoryRetrievalTools.js +1 -1
  800. package/dist/middleware/builtin/analytics.js +3 -0
  801. package/dist/middleware/builtin/autoEvaluation.js +46 -24
  802. package/dist/middleware/builtin/guardrails.js +4 -0
  803. package/dist/middleware/builtin/lifecycle.js +10 -6
  804. package/dist/middleware/factory.d.ts +3 -3
  805. package/dist/middleware/factory.js +3 -2
  806. package/dist/middleware/index.d.ts +1 -1
  807. package/dist/middleware/registry.d.ts +2 -2
  808. package/dist/middleware/registry.js +1 -0
  809. package/dist/middleware/utils/guardrailsUtils.d.ts +5 -6
  810. package/dist/middleware/utils/guardrailsUtils.js +15 -6
  811. package/dist/neurolink.d.ts +9 -20
  812. package/dist/neurolink.js +278 -186
  813. package/dist/observability/retryPolicy.d.ts +2 -13
  814. package/dist/observability/sampling/samplers.d.ts +2 -11
  815. package/dist/observability/spanProcessor.d.ts +2 -14
  816. package/dist/processors/base/BaseFileProcessor.js +1 -1
  817. package/dist/processors/document/OpenDocumentProcessor.js +5 -3
  818. package/dist/processors/media/VideoProcessor.js +157 -101
  819. package/dist/providers/amazonBedrock.js +12 -5
  820. package/dist/providers/amazonSagemaker.d.ts +5 -5
  821. package/dist/providers/amazonSagemaker.js +6 -2
  822. package/dist/providers/anthropic.d.ts +3 -3
  823. package/dist/providers/anthropic.js +23 -192
  824. package/dist/providers/anthropicBaseProvider.d.ts +4 -4
  825. package/dist/providers/anthropicBaseProvider.js +24 -13
  826. package/dist/providers/azureOpenai.d.ts +2 -2
  827. package/dist/providers/azureOpenai.js +6 -6
  828. package/dist/providers/googleAiStudio.d.ts +2 -2
  829. package/dist/providers/googleAiStudio.js +15 -7
  830. package/dist/providers/googleNativeGemini3.d.ts +3 -54
  831. package/dist/providers/googleNativeGemini3.js +14 -10
  832. package/dist/providers/googleVertex.d.ts +6 -6
  833. package/dist/providers/googleVertex.js +32 -26
  834. package/dist/providers/huggingFace.d.ts +4 -4
  835. package/dist/providers/huggingFace.js +15 -5
  836. package/dist/providers/litellm.d.ts +4 -4
  837. package/dist/providers/litellm.js +54 -42
  838. package/dist/providers/mistral.d.ts +2 -2
  839. package/dist/providers/mistral.js +5 -4
  840. package/dist/providers/ollama.d.ts +7 -4
  841. package/dist/providers/ollama.js +30 -8
  842. package/dist/providers/openAI.d.ts +2 -2
  843. package/dist/providers/openAI.js +46 -21
  844. package/dist/providers/openRouter.d.ts +4 -4
  845. package/dist/providers/openRouter.js +63 -35
  846. package/dist/providers/openaiCompatible.d.ts +2 -2
  847. package/dist/providers/openaiCompatible.js +18 -9
  848. package/dist/providers/providerTypeUtils.d.ts +28 -0
  849. package/dist/providers/providerTypeUtils.js +46 -0
  850. package/dist/providers/sagemaker/config.js +5 -5
  851. package/dist/providers/sagemaker/language-model.d.ts +23 -13
  852. package/dist/providers/sagemaker/language-model.js +20 -8
  853. package/dist/proxy/accountQuota.d.ts +33 -0
  854. package/dist/proxy/accountQuota.js +162 -0
  855. package/dist/proxy/claudeFormat.d.ts +143 -0
  856. package/dist/proxy/claudeFormat.js +595 -0
  857. package/dist/proxy/cloaking/index.d.ts +44 -0
  858. package/dist/proxy/cloaking/index.js +86 -0
  859. package/dist/proxy/cloaking/plugins/headerScrubber.d.ts +9 -0
  860. package/dist/proxy/cloaking/plugins/headerScrubber.js +86 -0
  861. package/dist/proxy/cloaking/plugins/sessionIdentity.d.ts +15 -0
  862. package/dist/proxy/cloaking/plugins/sessionIdentity.js +65 -0
  863. package/dist/proxy/cloaking/plugins/systemPromptInjector.d.ts +11 -0
  864. package/dist/proxy/cloaking/plugins/systemPromptInjector.js +83 -0
  865. package/dist/proxy/cloaking/plugins/tlsFingerprint.d.ts +14 -0
  866. package/dist/proxy/cloaking/plugins/tlsFingerprint.js +38 -0
  867. package/dist/proxy/cloaking/plugins/wordObfuscator.d.ts +9 -0
  868. package/dist/proxy/cloaking/plugins/wordObfuscator.js +121 -0
  869. package/dist/proxy/cloaking/types.d.ts +1 -0
  870. package/dist/proxy/cloaking/types.js +1 -0
  871. package/dist/proxy/modelRouter.d.ts +10 -0
  872. package/dist/proxy/modelRouter.js +29 -0
  873. package/dist/proxy/oauthFetch.d.ts +36 -0
  874. package/dist/proxy/oauthFetch.js +367 -0
  875. package/dist/proxy/proxyConfig.d.ts +42 -0
  876. package/dist/proxy/proxyConfig.js +499 -0
  877. package/dist/proxy/proxyFetch.js +2 -1
  878. package/dist/proxy/requestLogger.d.ts +50 -0
  879. package/dist/proxy/requestLogger.js +207 -0
  880. package/dist/proxy/tokenRefresh.d.ts +4 -0
  881. package/dist/proxy/tokenRefresh.js +124 -0
  882. package/dist/proxy/usageStats.d.ts +13 -0
  883. package/dist/proxy/usageStats.js +74 -0
  884. package/dist/rag/document/loaders.js +1 -1
  885. package/dist/rag/pipeline/contextAssembly.d.ts +4 -7
  886. package/dist/rag/ragIntegration.d.ts +2 -14
  887. package/dist/rag/ragIntegration.js +1 -1
  888. package/dist/rag/resilience/CircuitBreaker.d.ts +5 -44
  889. package/dist/rag/resilience/RetryHandler.js +1 -1
  890. package/dist/rag/retrieval/vectorQueryTool.d.ts +1 -9
  891. package/dist/rag/retrieval/vectorQueryTool.js +1 -1
  892. package/dist/sdk/toolRegistration.js +12 -1
  893. package/dist/server/abstract/baseServerAdapter.js +2 -2
  894. package/dist/server/adapters/honoAdapter.d.ts +6 -0
  895. package/dist/server/adapters/honoAdapter.js +76 -10
  896. package/dist/server/middleware/cache.js +3 -0
  897. package/dist/server/routes/claudeProxyRoutes.d.ts +44 -0
  898. package/dist/server/routes/claudeProxyRoutes.js +1600 -0
  899. package/dist/server/routes/healthRoutes.js +18 -1
  900. package/dist/server/routes/index.d.ts +7 -0
  901. package/dist/server/routes/index.js +8 -0
  902. package/dist/server/streaming/dataStream.d.ts +1 -5
  903. package/dist/server/streaming/dataStream.js +3 -0
  904. package/dist/server/utils/validation.d.ts +24 -124
  905. package/dist/server/utils/validation.js +2 -2
  906. package/dist/services/server/ai/observability/instrumentation.js +4 -0
  907. package/dist/telemetry/attributes.d.ts +38 -0
  908. package/dist/telemetry/attributes.js +40 -0
  909. package/dist/telemetry/tracers.d.ts +1 -0
  910. package/dist/telemetry/tracers.js +1 -0
  911. package/dist/types/authTypes.d.ts +56 -0
  912. package/dist/types/authTypes.js +8 -0
  913. package/dist/types/circuitBreakerErrors.d.ts +30 -0
  914. package/dist/types/circuitBreakerErrors.js +34 -0
  915. package/dist/types/cli.d.ts +258 -0
  916. package/dist/types/clientTypes.d.ts +1050 -0
  917. package/dist/types/clientTypes.js +10 -0
  918. package/dist/types/common.d.ts +123 -0
  919. package/dist/types/configTypes.d.ts +49 -0
  920. package/dist/types/configTypes.js +4 -0
  921. package/dist/types/conversation.d.ts +0 -5
  922. package/dist/types/evaluationTypes.d.ts +2 -2
  923. package/dist/types/fileTypes.d.ts +47 -0
  924. package/dist/types/generateTypes.d.ts +7 -3
  925. package/dist/types/guardrails.d.ts +2 -2
  926. package/dist/types/index.d.ts +4 -1
  927. package/dist/types/index.js +5 -0
  928. package/dist/types/middlewareTypes.d.ts +3 -3
  929. package/dist/types/modelTypes.d.ts +7 -97
  930. package/dist/types/modelTypes.js +3 -3
  931. package/dist/types/observability.d.ts +37 -0
  932. package/dist/types/providers.d.ts +107 -0
  933. package/dist/types/proxyTypes.d.ts +536 -0
  934. package/dist/types/proxyTypes.js +16 -0
  935. package/dist/types/ragTypes.d.ts +49 -1
  936. package/dist/types/streamTypes.d.ts +37 -13
  937. package/dist/types/subscriptionTypes.d.ts +77 -0
  938. package/dist/types/subscriptionTypes.js +2 -0
  939. package/dist/types/tools.d.ts +45 -1
  940. package/dist/types/typeAliases.d.ts +8 -0
  941. package/dist/types/typeAliases.js +1 -0
  942. package/dist/utils/async/retry.d.ts +4 -33
  943. package/dist/utils/asyncMutex.d.ts +14 -0
  944. package/dist/utils/asyncMutex.js +60 -0
  945. package/dist/utils/errorHandling.d.ts +2 -1
  946. package/dist/utils/errorHandling.js +14 -6
  947. package/dist/utils/fileDetector.d.ts +13 -1
  948. package/dist/utils/fileDetector.js +114 -32
  949. package/dist/utils/imageProcessor.js +7 -7
  950. package/dist/utils/json/safeParse.d.ts +1 -8
  951. package/dist/utils/mcpDefaults.d.ts +1 -1
  952. package/dist/utils/mcpDefaults.js +11 -2
  953. package/dist/utils/messageBuilder.d.ts +5 -5
  954. package/dist/utils/messageBuilder.js +106 -80
  955. package/dist/utils/modelChoices.d.ts +1 -8
  956. package/dist/utils/pdfProcessor.d.ts +1 -25
  957. package/dist/utils/pdfProcessor.js +5 -4
  958. package/dist/utils/pricing.js +28 -5
  959. package/dist/utils/rateLimiter.d.ts +1 -15
  960. package/dist/utils/redis.d.ts +1 -1
  961. package/dist/utils/redis.js +3 -3
  962. package/dist/utils/sanitizers/filename.d.ts +2 -22
  963. package/dist/utils/sanitizers/index.d.ts +4 -2
  964. package/dist/utils/sanitizers/svg.d.ts +1 -11
  965. package/dist/utils/schemaConversion.js +4 -1
  966. package/dist/utils/thinkingConfig.d.ts +1 -33
  967. package/dist/utils/tokenUtils.d.ts +1 -39
  968. package/dist/utils/videoAnalysisProcessor.d.ts +5 -5
  969. package/dist/utils/videoAnalysisProcessor.js +2 -2
  970. package/dist/workflow/config.d.ts +89 -1257
  971. package/dist/workflow/utils/workflowValidation.js +1 -1
  972. package/docs-site/mcp-server/index.js +2 -3
  973. package/package.json +138 -105
  974. package/dist/lib/memory/mem0Initializer.d.ts +0 -46
  975. package/dist/lib/memory/mem0Initializer.js +0 -85
  976. package/dist/memory/mem0Initializer.d.ts +0 -46
  977. package/dist/memory/mem0Initializer.js +0 -84
package/dist/neurolink.js CHANGED
@@ -6,9 +6,11 @@
6
6
  * Uses real MCP infrastructure for tool discovery and execution.
7
7
  */
8
8
  // Load environment variables from .env file (critical for SDK usage)
9
- import { config as dotenvConfig } from "dotenv";
9
+ // Suppress dotenv v17 stdout banner it pollutes CLI JSON output
10
10
  try {
11
- dotenvConfig(); // Load .env from current working directory
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, // Enhanced: include error if present
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: 30000, // Increased from 15s to 30s for proxy latency (e.g., LiteLLM)
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 re-init on every generate call
1124
- if (this.mcpInitialized) {
1103
+ // Skip if already initialized or explicitly skipped — prevents redundant
1104
+ // re-init on every generate call.
1105
+ if (this.mcpInitialized || this.mcpSkipped) {
1125
1106
  return;
1126
1107
  }
1127
1108
  // Deduplicate concurrent initialization attempts — if an init is already
@@ -1130,6 +1111,21 @@ Current user's request: ${currentInput}`;
1130
1111
  if (this.mcpInitPromise) {
1131
1112
  return this.mcpInitPromise;
1132
1113
  }
1114
+ // Environment-level kill switch — skip MCP-specific initialization on cold
1115
+ // start but always ensure providers are registered exactly once.
1116
+ if (process.env.NEUROLINK_SKIP_MCP === "true") {
1117
+ this.mcpInitPromise = (async () => {
1118
+ await this.initializeProviderRegistryInternal();
1119
+ this.mcpSkipped = true;
1120
+ })();
1121
+ try {
1122
+ await this.mcpInitPromise;
1123
+ }
1124
+ finally {
1125
+ this.mcpInitPromise = null;
1126
+ }
1127
+ return;
1128
+ }
1133
1129
  this.mcpInitPromise = this.performMCPInitializationOnce();
1134
1130
  try {
1135
1131
  await this.mcpInitPromise;
@@ -2247,30 +2243,6 @@ Current user's request: ${currentInput}`;
2247
2243
  }
2248
2244
  // Set session and user IDs from context for Langfuse spans and execute with proper async scoping
2249
2245
  return await this.setLangfuseContextFromOptions(options, async () => {
2250
- if (this.conversationMemoryConfig?.conversationMemory
2251
- ?.mem0Enabled &&
2252
- options.context?.userId) {
2253
- try {
2254
- const mem0 = await this.ensureMem0Ready();
2255
- if (!mem0) {
2256
- logger.debug("Mem0 not available, continuing without memory retrieval");
2257
- }
2258
- else {
2259
- const memories = await mem0.search(options.input.text, {
2260
- user_id: options.context.userId,
2261
- limit: 5,
2262
- });
2263
- if (memories && memories.length > 0) {
2264
- // Enhance the input with memory context
2265
- const memoryContext = this.extractMemoryContext(memories);
2266
- options.input.text = this.formatMemoryContext(memoryContext, options.input.text);
2267
- }
2268
- }
2269
- }
2270
- catch (error) {
2271
- logger.warn("Mem0 memory retrieval failed:", error);
2272
- }
2273
- }
2274
2246
  const startTime = Date.now();
2275
2247
  // Apply orchestration if enabled and no specific provider/model requested
2276
2248
  if (this.enableOrchestration &&
@@ -2485,7 +2457,7 @@ Current user's request: ${currentInput}`;
2485
2457
  generateResult.analytics.cost > 0) {
2486
2458
  this._sessionCostUsd += generateResult.analytics.cost;
2487
2459
  }
2488
- this.scheduleGenerateMem0Storage(options, originalPrompt, generateResult);
2460
+ this.scheduleGenerateMemoryStorage(options, originalPrompt, generateResult);
2489
2461
  // Set completion span attributes
2490
2462
  generateSpan.setAttribute("neurolink.output_length", generateResult.content?.length || 0);
2491
2463
  generateSpan.setAttribute("neurolink.tokens.input", generateResult.usage?.input || 0);
@@ -2535,27 +2507,9 @@ Current user's request: ${currentInput}`;
2535
2507
  });
2536
2508
  }
2537
2509
  /**
2538
- * Schedule non-blocking Mem0 memory storage after generate completes.
2510
+ * Schedule non-blocking memory storage after generate completes.
2539
2511
  */
2540
- scheduleGenerateMem0Storage(options, originalPrompt, generateResult) {
2541
- if (this.conversationMemoryConfig?.conversationMemory?.mem0Enabled &&
2542
- options.context?.userId &&
2543
- generateResult.content.trim()) {
2544
- setImmediate(async () => {
2545
- try {
2546
- const mem0 = await this.ensureMem0Ready();
2547
- if (mem0) {
2548
- await this.storeMem0ConversationTurn(mem0, originalPrompt ?? "", generateResult.content.trim(), options.context?.userId, {
2549
- timestamp: new Date().toISOString(),
2550
- type: "conversation_turn_generate",
2551
- });
2552
- }
2553
- }
2554
- catch (error) {
2555
- logger.warn("Mem0 memory storage failed:", error);
2556
- }
2557
- });
2558
- }
2512
+ scheduleGenerateMemoryStorage(options, originalPrompt, generateResult) {
2559
2513
  // Memory storage
2560
2514
  if (this.conversationMemoryConfig?.conversationMemory?.memory?.enabled &&
2561
2515
  options.context?.userId &&
@@ -4095,7 +4049,7 @@ Current user's request: ${currentInput}`;
4095
4049
  // Set session and user IDs from context for Langfuse spans and execute with proper async scoping
4096
4050
  return await this.setLangfuseContextFromOptions(options, async () => {
4097
4051
  try {
4098
- // Prepare options: init memory, MCP, Mem0, orchestration, Ollama auto-disable, tool detection
4052
+ // Prepare options: init memory, MCP, orchestration, Ollama auto-disable, tool detection
4099
4053
  const { enhancedOptions, factoryResult } = await this.prepareStreamOptions(options, streamId, startTime, hrTimeStart);
4100
4054
  const { stream: mcpStream, provider: providerName, usage: streamUsage, model: streamModel, analytics: streamAnalytics, } = await this.createMCPStream(enhancedOptions);
4101
4055
  // Update span with resolved provider name
@@ -4291,7 +4245,7 @@ Current user's request: ${currentInput}`;
4291
4245
  }); // end metricsTraceContextStorage.run
4292
4246
  }
4293
4247
  /**
4294
- * Prepare stream options: initialize memory, MCP, Mem0 retrieval, orchestration,
4248
+ * Prepare stream options: initialize memory, MCP, retrieval, orchestration,
4295
4249
  * Ollama tool auto-disable, factory processing, and tool detection.
4296
4250
  */
4297
4251
  async prepareStreamOptions(options, streamId, startTime, hrTimeStart) {
@@ -4299,31 +4253,6 @@ Current user's request: ${currentInput}`;
4299
4253
  await this.initializeConversationMemoryForGeneration(streamId, startTime, hrTimeStart);
4300
4254
  // Initialize MCP
4301
4255
  await this.initializeMCP();
4302
- if (this.conversationMemoryConfig?.conversationMemory?.mem0Enabled &&
4303
- options.context?.userId) {
4304
- try {
4305
- const mem0 = await this.ensureMem0Ready();
4306
- if (!mem0) {
4307
- // Continue without memories if mem0 is not available
4308
- logger.debug("Mem0 not available, continuing without memory retrieval");
4309
- }
4310
- else {
4311
- const memories = await mem0.search(options.input.text, {
4312
- user_id: options.context.userId,
4313
- limit: 5,
4314
- });
4315
- if (memories && memories.length > 0) {
4316
- // Enhance the input with memory context
4317
- const memoryContext = this.extractMemoryContext(memories);
4318
- options.input.text = this.formatMemoryContext(memoryContext, options.input.text);
4319
- }
4320
- }
4321
- }
4322
- catch (error) {
4323
- // Non-blocking: Log error but continue with streaming
4324
- logger.warn("Mem0 memory retrieval failed:", error);
4325
- }
4326
- }
4327
4256
  // Memory retrieval
4328
4257
  if (this.conversationMemoryConfig?.conversationMemory?.memory?.enabled &&
4329
4258
  options.context?.userId) {
@@ -4538,11 +4467,16 @@ Current user's request: ${currentInput}`;
4538
4467
  disableToolCache: enhancedOptions.disableToolCache,
4539
4468
  }),
4540
4469
  }, "NeuroLink.fallbackStream");
4541
- // Get conversation messages for context (same as primary stream)
4542
- const conversationMessages = await getConversationMessages(this.conversationMemory, {
4543
- prompt: enhancedOptions.input.text,
4544
- context: enhancedOptions.context,
4545
- });
4470
+ // Prefer the caller-supplied / compacted conversation messages that were
4471
+ // threaded through options. Only fall back to memory when no explicit
4472
+ // history was provided — this preserves caller-supplied empty arrays
4473
+ // (which signal "no prior context") and avoids resurrecting stale memory.
4474
+ const conversationMessages = enhancedOptions.conversationMessages !== undefined
4475
+ ? enhancedOptions.conversationMessages
4476
+ : await getConversationMessages(this.conversationMemory, {
4477
+ prompt: enhancedOptions.input.text,
4478
+ context: enhancedOptions.context,
4479
+ });
4546
4480
  const fallbackResult = await fallbackProvider.stream({
4547
4481
  ...enhancedOptions,
4548
4482
  model: fallbackRoute.model,
@@ -4581,7 +4515,7 @@ Current user's request: ${currentInput}`;
4581
4515
  }
4582
4516
  /**
4583
4517
  * Store conversation memory after stream consumption is complete (called from finally block).
4584
- * Handles both conversation memory storage and Mem0 background storage.
4518
+ * Handles conversation memory storage in the background.
4585
4519
  */
4586
4520
  async storeStreamConversationMemory(params) {
4587
4521
  const { enhancedOptions, providerName, originalPrompt, accumulatedContent, startTime, eventSequence, } = params;
@@ -4635,24 +4569,6 @@ Current user's request: ${currentInput}`;
4635
4569
  });
4636
4570
  }
4637
4571
  }
4638
- if (this.conversationMemoryConfig?.conversationMemory?.mem0Enabled &&
4639
- enhancedOptions.context?.userId &&
4640
- accumulatedContent.trim()) {
4641
- setImmediate(async () => {
4642
- try {
4643
- const mem0 = await this.ensureMem0Ready();
4644
- if (mem0) {
4645
- await this.storeMem0ConversationTurn(mem0, originalPrompt ?? "", accumulatedContent.trim(), enhancedOptions.context?.userId, {
4646
- timestamp: new Date().toISOString(),
4647
- type: "conversation_turn_stream",
4648
- });
4649
- }
4650
- }
4651
- catch (error) {
4652
- logger.warn("Mem0 memory storage failed:", error);
4653
- }
4654
- });
4655
- }
4656
4572
  if (this.conversationMemoryConfig?.conversationMemory?.memory?.enabled &&
4657
4573
  enhancedOptions.context?.userId &&
4658
4574
  accumulatedContent?.trim()) {
@@ -4717,12 +4633,24 @@ Current user's request: ${currentInput}`;
4717
4633
  const enhancedSystemPrompt = options.skipToolPromptInjection
4718
4634
  ? options.systemPrompt || ""
4719
4635
  : this.createToolAwareSystemPrompt(options.systemPrompt, availableTools);
4720
- // Get conversation messages for context
4721
- let conversationMessages = await getConversationMessages(this.conversationMemory, {
4722
- ...options,
4723
- prompt: options.input.text,
4724
- context: options.context,
4725
- });
4636
+ // Get conversation messages for context.
4637
+ // If the caller already supplied conversationMessages (e.g. proxy routes
4638
+ // forwarding a multi-turn Claude request), honour them — including an
4639
+ // explicit empty array, which signals "no prior context". Otherwise fall
4640
+ // back to the conversation memory store (interactive CLI / SDK sessions).
4641
+ const hasCallerConversationHistory = options.conversationMessages !== undefined;
4642
+ const resolvedConversationMessages = hasCallerConversationHistory
4643
+ ? options.conversationMessages
4644
+ : await getConversationMessages(this.conversationMemory, {
4645
+ ...options,
4646
+ prompt: options.input.text,
4647
+ context: options.context,
4648
+ });
4649
+ // Make the resolved messages the single source of truth so downstream
4650
+ // consumers (compaction, fallback streams) reuse them instead of
4651
+ // reloading from conversationMemory.
4652
+ options.conversationMessages = resolvedConversationMessages;
4653
+ let conversationMessages = resolvedConversationMessages;
4726
4654
  // Pre-generation budget check for streaming
4727
4655
  const streamBudget = checkContextBudget({
4728
4656
  provider: providerName,
@@ -4736,7 +4664,7 @@ Current user's request: ${currentInput}`;
4736
4664
  const streamMessageCount = conversationMessages?.length || 0;
4737
4665
  const streamCompactionSessionId = this.getCompactionSessionId(options);
4738
4666
  if (streamBudget.shouldCompact &&
4739
- this.conversationMemory &&
4667
+ (hasCallerConversationHistory || this.conversationMemory) &&
4740
4668
  streamMessageCount >
4741
4669
  (this.lastCompactionMessageCount.get(streamCompactionSessionId) ?? 0)) {
4742
4670
  const compactor = new ContextCompactor({
@@ -4749,6 +4677,10 @@ Current user's request: ${currentInput}`;
4749
4677
  if (compactionResult.compacted) {
4750
4678
  const repairedResult = repairToolPairs(compactionResult.messages);
4751
4679
  conversationMessages = repairedResult.messages;
4680
+ // Keep options.conversationMessages in sync so downstream consumers
4681
+ // (e.g. handleStreamFallback) use the compacted history rather than
4682
+ // re-reading from conversationMemory.
4683
+ options.conversationMessages = conversationMessages;
4752
4684
  this.lastCompactionMessageCount.set(streamCompactionSessionId, conversationMessages.length);
4753
4685
  }
4754
4686
  // POST-COMPACTION BUDGET RE-CHECK (mirrors tryMCPGeneration / directProviderGeneration)
@@ -4768,6 +4700,9 @@ Current user's request: ${currentInput}`;
4768
4700
  overagePercent: Math.round((postCompactBudget.usageRatio - 1.0) * 100),
4769
4701
  });
4770
4702
  conversationMessages = emergencyContentTruncation(conversationMessages, postCompactBudget.availableInputTokens, postCompactBudget.breakdown, providerName);
4703
+ // Keep options in sync after emergency truncation so fallback paths
4704
+ // use the truncated history.
4705
+ options.conversationMessages = conversationMessages;
4771
4706
  const finalBudget = checkContextBudget({
4772
4707
  provider: providerName,
4773
4708
  model: options.model,
@@ -5291,7 +5226,7 @@ Current user's request: ${currentInput}`;
5291
5226
  * @param name - Unique name for the tool
5292
5227
  * @param tool - Tool in MCPExecutableTool format (unified MCP protocol type)
5293
5228
  */
5294
- registerTool(name, tool) {
5229
+ registerTool(name, tool, options) {
5295
5230
  this.invalidateToolCache(); // Invalidate cache when a tool is registered
5296
5231
  // Emit tool registration start event
5297
5232
  this.emitter.emit("tools-register:start", {
@@ -5340,8 +5275,46 @@ Current user's request: ${currentInput}`;
5340
5275
  return fallbackSchema;
5341
5276
  })(),
5342
5277
  };
5278
+ // Wrap execute with per-tool timeout if specified at registration.
5279
+ // Uses AbortSignal.timeout() composed with any parent signal from the AI SDK.
5280
+ // This ensures the timeout works regardless of the execution path
5281
+ // (direct executeTool() or AI SDK generateText() tool calling).
5282
+ if (options?.timeout !== undefined &&
5283
+ options.timeout > 0 &&
5284
+ Number.isFinite(options.timeout)) {
5285
+ const originalExecute = convertedTool.execute;
5286
+ const toolTimeout = options.timeout;
5287
+ const toolName = name;
5288
+ convertedTool.execute = async (...args) => {
5289
+ const timeoutSignal = AbortSignal.timeout(toolTimeout);
5290
+ // Compose with any parent abortSignal from ToolExecutionOptions
5291
+ const execOptions = args[1];
5292
+ const parentSignal = execOptions?.abortSignal;
5293
+ const composedSignal = parentSignal
5294
+ ? AbortSignal.any([parentSignal, timeoutSignal])
5295
+ : timeoutSignal;
5296
+ // Replace the abortSignal in execution options
5297
+ const augmentedContext = {
5298
+ ...execOptions,
5299
+ abortSignal: composedSignal,
5300
+ };
5301
+ return Promise.race([
5302
+ originalExecute(args[0], augmentedContext),
5303
+ new Promise((_, reject) => {
5304
+ composedSignal.addEventListener("abort", () => {
5305
+ if (timeoutSignal.aborted) {
5306
+ reject(new Error(`Tool '${toolName}' timed out after ${toolTimeout}ms (configured at registration)`));
5307
+ }
5308
+ else {
5309
+ reject(new DOMException("The operation was aborted", "AbortError"));
5310
+ }
5311
+ }, { once: true });
5312
+ }),
5313
+ ]);
5314
+ };
5315
+ }
5343
5316
  // SMART DEFAULTS: Use utility to eliminate boilerplate creation
5344
- const mcpServerInfo = createCustomToolServerInfo(name, convertedTool);
5317
+ const mcpServerInfo = createCustomToolServerInfo(name, convertedTool, options?.timeout, options?.maxRetries);
5345
5318
  // Register with toolRegistry using MCPServerInfo directly
5346
5319
  this.toolRegistry.registerServer(mcpServerInfo);
5347
5320
  // Emit tool registration success event
@@ -5349,6 +5322,7 @@ Current user's request: ${currentInput}`;
5349
5322
  toolName: name,
5350
5323
  success: true,
5351
5324
  timestamp: Date.now(),
5325
+ timeoutMs: options?.timeout,
5352
5326
  });
5353
5327
  }
5354
5328
  catch (error) {
@@ -5520,7 +5494,11 @@ Current user's request: ${currentInput}`;
5520
5494
  toolMap.set(tool.name, {
5521
5495
  name: tool.name,
5522
5496
  description: tool.description || "",
5523
- inputSchema: tool.inputSchema || tool.parameters || {},
5497
+ inputSchema: typeof tool.inputSchema === "object" && tool.inputSchema !== null
5498
+ ? tool.inputSchema
5499
+ : typeof tool.parameters === "object" && tool.parameters !== null
5500
+ ? tool.parameters
5501
+ : {},
5524
5502
  execute: async (params, context) => {
5525
5503
  // CONTEXT MERGING: Combine all available contexts for maximum information
5526
5504
  const storedContext = this.toolExecutionContext || {};
@@ -5567,12 +5545,14 @@ Current user's request: ${currentInput}`;
5567
5545
  const fileTools = this.cachedFileTools;
5568
5546
  for (const [toolName, toolDef] of Object.entries(fileTools)) {
5569
5547
  if (!toolMap.has(toolName)) {
5570
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
5571
- const toolParams = toolDef.parameters;
5548
+ const toolDefRecord = toolDef;
5549
+ const toolParams = toolDefRecord.inputSchema ?? toolDefRecord.parameters;
5572
5550
  toolMap.set(toolName, {
5573
5551
  name: toolName,
5574
5552
  description: toolDef.description || `File tool: ${toolName}`,
5575
- inputSchema: toolParams ?? { type: "object", properties: {} },
5553
+ inputSchema: typeof toolParams === "object" && toolParams !== null
5554
+ ? toolParams
5555
+ : { type: "object", properties: {} },
5576
5556
  execute: async (params) => {
5577
5557
  return await toolDef.execute(params, {
5578
5558
  toolCallId: `file-tool-${Date.now()}`,
@@ -5671,6 +5651,12 @@ Current user's request: ${currentInput}`;
5671
5651
  const functionTag = "NeuroLink.executeTool";
5672
5652
  const executionStartTime = Date.now();
5673
5653
  // === MCP ENHANCEMENT: RequestBatcher — batch programmatic tool calls ===
5654
+ // LIMITATION: When the request batcher is enabled, per-tool timeout and retry
5655
+ // settings (from registration options or call-site options) are NOT applied.
5656
+ // The batcher uses its own hardcoded defaults for timeout and retry behavior.
5657
+ // Use `bypassBatcher: true` to ensure per-tool timeout/retry is respected.
5658
+ // Additionally, note that executeToolInternal's safe-tool retry logic may still
5659
+ // trigger even when maxRetries is set to 0, since it operates independently.
5674
5660
  if (this.mcpToolBatcher && !options?.bypassBatcher) {
5675
5661
  return this.mcpToolBatcher.execute(toolName, params);
5676
5662
  }
@@ -5735,19 +5721,27 @@ Current user's request: ${currentInput}`;
5735
5721
  timestamp: executionStartTime,
5736
5722
  input: params, // Enhanced: add input parameters
5737
5723
  });
5738
- // Set default options
5724
+ // NL-004: Use composite key (serverId.toolName) to avoid cross-server collisions
5725
+ // Fetch toolInfo early so per-tool timeout is available for finalOptions
5726
+ const toolInfo = this.toolRegistry.getToolInfo(toolName);
5727
+ // Set default options — per-tool values from registration take precedence over global defaults.
5728
+ // When not explicitly set at registration, global defaults are preserved for backward compatibility.
5729
+ const registeredTimeout = toolInfo?.tool?.timeoutMs;
5730
+ const registeredMaxRetries = toolInfo?.tool?.maxRetries;
5739
5731
  const finalOptions = {
5740
- timeout: options?.timeout || TOOL_TIMEOUTS.EXECUTION_DEFAULT_MS, // 30 second default timeout
5741
- maxRetries: options?.maxRetries || RETRY_ATTEMPTS.DEFAULT, // Default 2 retries for retriable errors
5742
- retryDelayMs: options?.retryDelayMs || RETRY_DELAYS.BASE_MS, // 1 second delay between retries
5743
- authContext: options?.authContext, // Pass through authentication context
5744
- disableToolCache: options?.disableToolCache, // Pass through cache bypass flag
5732
+ timeout: options?.timeout ??
5733
+ registeredTimeout ??
5734
+ TOOL_TIMEOUTS.EXECUTION_DEFAULT_MS,
5735
+ maxRetries: options?.maxRetries ??
5736
+ registeredMaxRetries ??
5737
+ RETRY_ATTEMPTS.DEFAULT,
5738
+ retryDelayMs: options?.retryDelayMs || RETRY_DELAYS.BASE_MS,
5739
+ authContext: options?.authContext,
5740
+ disableToolCache: options?.disableToolCache,
5745
5741
  };
5746
5742
  // Track memory usage for tool execution
5747
5743
  const { MemoryManager } = await import("./utils/performance.js");
5748
5744
  const startMemory = MemoryManager.getMemoryUsageMB();
5749
- // NL-004: Use composite key (serverId.toolName) to avoid cross-server collisions
5750
- const toolInfo = this.toolRegistry.getToolInfo(toolName);
5751
5745
  const breakerServerId = externalTool?.serverId || toolInfo?.tool?.serverId || "unknown";
5752
5746
  const breakerKey = `${breakerServerId}.${toolName}`;
5753
5747
  // Get or create circuit breaker for this tool
@@ -5763,6 +5757,7 @@ Current user's request: ${currentInput}`;
5763
5757
  failedExecutions: 0,
5764
5758
  averageExecutionTime: 0,
5765
5759
  lastExecutionTime: 0,
5760
+ errorCategories: {},
5766
5761
  });
5767
5762
  }
5768
5763
  const metrics = this.toolExecutionMetrics.get(toolName);
@@ -5823,14 +5818,18 @@ Current user's request: ${currentInput}`;
5823
5818
  memoryDelta,
5824
5819
  circuitBreakerState: circuitBreaker?.getState(),
5825
5820
  });
5826
- // Emit tool end event using the helper method
5827
- this.emitToolEndEvent(toolName, executionStartTime, true, result);
5828
5821
  // Set span success attributes
5829
5822
  // Check if result has isError flag (MCP tool error result)
5830
- const isToolError = result &&
5831
- typeof result === "object" &&
5832
- "isError" in result &&
5833
- result.isError === true;
5823
+ // Also detect toolRegistry-wrapped errors that return { success: false }
5824
+ const resultObj = result && typeof result === "object"
5825
+ ? result
5826
+ : undefined;
5827
+ const isToolError = (resultObj &&
5828
+ "isError" in resultObj &&
5829
+ resultObj.isError === true) ||
5830
+ (resultObj &&
5831
+ "success" in resultObj &&
5832
+ resultObj.success === false);
5834
5833
  // NL-001: Count isError:true results as circuit breaker failures
5835
5834
  // This ensures tools that return error results (not just thrown errors) are tracked
5836
5835
  // TODO(NL-009): This records a failure AFTER the circuit breaker already recorded
@@ -5885,7 +5884,29 @@ Current user's request: ${currentInput}`;
5885
5884
  code: SpanStatusCode.ERROR,
5886
5885
  message: `MCP tool returned isError: ${errorText.substring(0, 200)}`,
5887
5886
  });
5887
+ if (metrics) {
5888
+ metrics.failedExecutions++;
5889
+ const prevSuccessful = metrics.successfulExecutions;
5890
+ metrics.successfulExecutions = Math.max(0, metrics.successfulExecutions - 1);
5891
+ // Recompute averageExecutionTime: back out this execution's duration
5892
+ // which was incorrectly included as a success
5893
+ if (prevSuccessful > 1) {
5894
+ metrics.averageExecutionTime =
5895
+ (metrics.averageExecutionTime * prevSuccessful -
5896
+ executionTime) /
5897
+ (prevSuccessful - 1);
5898
+ }
5899
+ else {
5900
+ // No remaining successful executions, reset to 0
5901
+ metrics.averageExecutionTime = 0;
5902
+ }
5903
+ const mappedCategory = mcpCategoryToErrorCategory(errorCategory);
5904
+ metrics.errorCategories[mappedCategory] =
5905
+ (metrics.errorCategories[mappedCategory] || 0) + 1;
5906
+ }
5888
5907
  }
5908
+ // Emit tool end event AFTER isError check so success flag is correct
5909
+ this.emitToolEndEvent(toolName, executionStartTime, !isToolError, result);
5889
5910
  toolSpan.setAttribute("tool.result.status", isToolError ? "error" : "success");
5890
5911
  toolSpan.setAttribute("tool.duration_ms", executionTime);
5891
5912
  return result;
@@ -5896,6 +5917,51 @@ Current user's request: ${currentInput}`;
5896
5917
  metrics.failedExecutions++;
5897
5918
  }
5898
5919
  const executionTime = Date.now() - executionStartTime;
5920
+ // Circuit breaker open: return a structured non-retryable isError result
5921
+ // so the AI model understands the tool is temporarily unavailable.
5922
+ // Log at warn (not error) since this is expected circuit breaker behavior.
5923
+ if (error instanceof CircuitBreakerOpenError) {
5924
+ mcpLogger.warn(`[${functionTag}] Tool blocked by circuit breaker: ${toolName}`, {
5925
+ toolName,
5926
+ breakerState: error.breakerState,
5927
+ retryAfter: error.retryAfter,
5928
+ retryAfterMs: error.retryAfterMs,
5929
+ failureCount: error.failureCount,
5930
+ executionTime,
5931
+ });
5932
+ if (metrics) {
5933
+ const category = ErrorCategory.EXECUTION;
5934
+ metrics.errorCategories[category] =
5935
+ (metrics.errorCategories[category] || 0) + 1;
5936
+ }
5937
+ // Emit tool end event for circuit breaker open
5938
+ this.emitToolEndEvent(toolName, executionStartTime, false, undefined);
5939
+ toolSpan.setAttribute("tool.result.status", "circuit_breaker_open");
5940
+ toolSpan.setAttribute("tool.duration_ms", executionTime);
5941
+ toolSpan.setAttribute("tool.circuit_breaker.state", error.breakerState);
5942
+ toolSpan.setAttribute("tool.circuit_breaker.retry_after_ms", error.retryAfterMs);
5943
+ toolSpan.setAttribute("tool.circuit_breaker.failure_count", error.failureCount);
5944
+ toolSpan.setStatus({
5945
+ code: SpanStatusCode.ERROR,
5946
+ message: `Circuit breaker open for ${toolName}: ${error.message}`,
5947
+ });
5948
+ // Return an isError tool result so the AI can inform the user
5949
+ // instead of throwing, which would cause a generic retry
5950
+ return {
5951
+ isError: true,
5952
+ content: [
5953
+ {
5954
+ type: "text",
5955
+ text: `TOOL TEMPORARILY UNAVAILABLE: "${toolName}" has been disabled after ` +
5956
+ `${error.failureCount} failures. ` +
5957
+ `This is a circuit breaker protection — do NOT retry this tool. ` +
5958
+ `It will become available again after ${Math.ceil(error.retryAfterMs / 1000)} seconds ` +
5959
+ `(at ${error.retryAfter}). ` +
5960
+ `Instead, inform the user that the operation failed and suggest trying again later.`,
5961
+ },
5962
+ ],
5963
+ };
5964
+ }
5899
5965
  // Create structured error
5900
5966
  let structuredError;
5901
5967
  if (error instanceof NeuroLinkError) {
@@ -5925,10 +5991,17 @@ Current user's request: ${currentInput}`;
5925
5991
  else {
5926
5992
  structuredError = ErrorFactory.toolExecutionFailed(toolName, new Error(String(error)));
5927
5993
  }
5928
- // ADD: Centralized error event emission
5929
- this.emitter.emit("error", structuredError);
5930
- // Emit tool end event using the helper method
5994
+ if (metrics) {
5995
+ const category = structuredError.category || ErrorCategory.EXECUTION;
5996
+ metrics.errorCategories[category] =
5997
+ (metrics.errorCategories[category] || 0) + 1;
5998
+ }
5999
+ // Emit tool end event BEFORE the error event.
6000
+ // Node.js EventEmitter throws on unhandled 'error' events,
6001
+ // which would prevent tool:end from being emitted.
5931
6002
  this.emitToolEndEvent(toolName, executionStartTime, false, undefined, structuredError);
6003
+ // Centralized error event emission
6004
+ this.emitter.emit("error", structuredError);
5932
6005
  // Add execution context to structured error
5933
6006
  structuredError = new NeuroLinkError({
5934
6007
  ...structuredError,
@@ -6742,6 +6815,7 @@ Current user's request: ${currentInput}`;
6742
6815
  for (const [toolName, toolMetrics] of this.toolExecutionMetrics.entries()) {
6743
6816
  metrics[toolName] = {
6744
6817
  ...toolMetrics,
6818
+ errorCategories: { ...toolMetrics.errorCategories },
6745
6819
  successRate: toolMetrics.totalExecutions > 0
6746
6820
  ? toolMetrics.successfulExecutions / toolMetrics.totalExecutions
6747
6821
  : 0,
@@ -6836,6 +6910,21 @@ Current user's request: ${currentInput}`;
6836
6910
  issues.push("High average execution time");
6837
6911
  recommendations.push("Optimize tool performance or increase timeout");
6838
6912
  }
6913
+ if (metrics && metrics.errorCategories) {
6914
+ const categories = metrics.errorCategories;
6915
+ if (categories[ErrorCategory.TIMEOUT] > 0) {
6916
+ issues.push(`Timeout errors: ${categories[ErrorCategory.TIMEOUT]}`);
6917
+ recommendations.push("Consider increasing the tool timeout configuration");
6918
+ }
6919
+ if (categories[ErrorCategory.VALIDATION] > 0) {
6920
+ issues.push(`Validation errors: ${categories[ErrorCategory.VALIDATION]}`);
6921
+ recommendations.push("Review input schemas and parameter validation");
6922
+ }
6923
+ if (categories[ErrorCategory.NETWORK] > 0) {
6924
+ issues.push(`Network errors: ${categories[ErrorCategory.NETWORK]}`);
6925
+ recommendations.push("Check network connectivity and endpoint availability");
6926
+ }
6927
+ }
6839
6928
  tools[toolName] = {
6840
6929
  name: toolName,
6841
6930
  isHealthy,
@@ -6844,6 +6933,9 @@ Current user's request: ${currentInput}`;
6844
6933
  successRate,
6845
6934
  averageExecutionTime: metrics?.averageExecutionTime || 0,
6846
6935
  lastExecutionTime: metrics?.lastExecutionTime || 0,
6936
+ errorCategories: metrics?.errorCategories
6937
+ ? { ...metrics.errorCategories }
6938
+ : {},
6847
6939
  },
6848
6940
  circuitBreaker: {
6849
6941
  state: circuitBreaker?.getState() || "closed",