@juspay/neurolink 9.29.1 → 9.31.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (981) 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 +6 -3
  525. package/dist/index.js +21 -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 +6 -3
  602. package/dist/lib/index.js +21 -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.d.ts +11 -0
  619. package/dist/lib/middleware/builtin/lifecycle.js +169 -0
  620. package/dist/lib/middleware/factory.d.ts +3 -3
  621. package/dist/lib/middleware/factory.js +6 -2
  622. package/dist/lib/middleware/index.d.ts +2 -1
  623. package/dist/lib/middleware/index.js +2 -0
  624. package/dist/lib/middleware/registry.d.ts +2 -2
  625. package/dist/lib/middleware/registry.js +1 -0
  626. package/dist/lib/middleware/utils/guardrailsUtils.d.ts +5 -6
  627. package/dist/lib/middleware/utils/guardrailsUtils.js +15 -6
  628. package/dist/lib/neurolink.d.ts +9 -20
  629. package/dist/lib/neurolink.js +319 -187
  630. package/dist/lib/observability/retryPolicy.d.ts +2 -13
  631. package/dist/lib/observability/sampling/samplers.d.ts +2 -11
  632. package/dist/lib/observability/spanProcessor.d.ts +2 -14
  633. package/dist/lib/processors/base/BaseFileProcessor.js +1 -1
  634. package/dist/lib/processors/document/OpenDocumentProcessor.js +5 -3
  635. package/dist/lib/processors/media/VideoProcessor.js +157 -101
  636. package/dist/lib/providers/amazonBedrock.js +12 -5
  637. package/dist/lib/providers/amazonSagemaker.d.ts +5 -5
  638. package/dist/lib/providers/amazonSagemaker.js +6 -2
  639. package/dist/lib/providers/anthropic.d.ts +3 -3
  640. package/dist/lib/providers/anthropic.js +23 -192
  641. package/dist/lib/providers/anthropicBaseProvider.d.ts +4 -4
  642. package/dist/lib/providers/anthropicBaseProvider.js +24 -13
  643. package/dist/lib/providers/azureOpenai.d.ts +2 -2
  644. package/dist/lib/providers/azureOpenai.js +6 -6
  645. package/dist/lib/providers/googleAiStudio.d.ts +2 -2
  646. package/dist/lib/providers/googleAiStudio.js +15 -7
  647. package/dist/lib/providers/googleNativeGemini3.d.ts +3 -54
  648. package/dist/lib/providers/googleNativeGemini3.js +14 -10
  649. package/dist/lib/providers/googleVertex.d.ts +6 -6
  650. package/dist/lib/providers/googleVertex.js +32 -26
  651. package/dist/lib/providers/huggingFace.d.ts +4 -4
  652. package/dist/lib/providers/huggingFace.js +15 -5
  653. package/dist/lib/providers/litellm.d.ts +4 -4
  654. package/dist/lib/providers/litellm.js +54 -42
  655. package/dist/lib/providers/mistral.d.ts +2 -2
  656. package/dist/lib/providers/mistral.js +5 -4
  657. package/dist/lib/providers/ollama.d.ts +7 -4
  658. package/dist/lib/providers/ollama.js +30 -8
  659. package/dist/lib/providers/openAI.d.ts +2 -2
  660. package/dist/lib/providers/openAI.js +46 -21
  661. package/dist/lib/providers/openRouter.d.ts +4 -4
  662. package/dist/lib/providers/openRouter.js +63 -35
  663. package/dist/lib/providers/openaiCompatible.d.ts +2 -2
  664. package/dist/lib/providers/openaiCompatible.js +18 -9
  665. package/dist/lib/providers/providerTypeUtils.d.ts +28 -0
  666. package/dist/lib/providers/providerTypeUtils.js +47 -0
  667. package/dist/lib/providers/sagemaker/config.js +5 -5
  668. package/dist/lib/providers/sagemaker/language-model.d.ts +23 -13
  669. package/dist/lib/providers/sagemaker/language-model.js +20 -8
  670. package/dist/lib/proxy/accountQuota.d.ts +33 -0
  671. package/dist/lib/proxy/accountQuota.js +163 -0
  672. package/dist/lib/proxy/claudeFormat.d.ts +143 -0
  673. package/dist/lib/proxy/claudeFormat.js +596 -0
  674. package/dist/lib/proxy/cloaking/index.d.ts +44 -0
  675. package/dist/lib/proxy/cloaking/index.js +87 -0
  676. package/dist/lib/proxy/cloaking/plugins/headerScrubber.d.ts +9 -0
  677. package/dist/lib/proxy/cloaking/plugins/headerScrubber.js +87 -0
  678. package/dist/lib/proxy/cloaking/plugins/sessionIdentity.d.ts +15 -0
  679. package/dist/lib/proxy/cloaking/plugins/sessionIdentity.js +66 -0
  680. package/dist/lib/proxy/cloaking/plugins/systemPromptInjector.d.ts +11 -0
  681. package/dist/lib/proxy/cloaking/plugins/systemPromptInjector.js +84 -0
  682. package/dist/lib/proxy/cloaking/plugins/tlsFingerprint.d.ts +14 -0
  683. package/dist/lib/proxy/cloaking/plugins/tlsFingerprint.js +39 -0
  684. package/dist/lib/proxy/cloaking/plugins/wordObfuscator.d.ts +9 -0
  685. package/dist/lib/proxy/cloaking/plugins/wordObfuscator.js +122 -0
  686. package/dist/lib/proxy/cloaking/types.d.ts +1 -0
  687. package/dist/lib/proxy/cloaking/types.js +2 -0
  688. package/dist/lib/proxy/modelRouter.d.ts +10 -0
  689. package/dist/lib/proxy/modelRouter.js +30 -0
  690. package/dist/lib/proxy/oauthFetch.d.ts +36 -0
  691. package/dist/lib/proxy/oauthFetch.js +368 -0
  692. package/dist/lib/proxy/proxyConfig.d.ts +42 -0
  693. package/dist/lib/proxy/proxyConfig.js +500 -0
  694. package/dist/lib/proxy/proxyFetch.js +2 -1
  695. package/dist/lib/proxy/requestLogger.d.ts +50 -0
  696. package/dist/lib/proxy/requestLogger.js +208 -0
  697. package/dist/lib/proxy/tokenRefresh.d.ts +4 -0
  698. package/dist/lib/proxy/tokenRefresh.js +125 -0
  699. package/dist/lib/proxy/usageStats.d.ts +13 -0
  700. package/dist/lib/proxy/usageStats.js +75 -0
  701. package/dist/lib/rag/document/loaders.js +1 -1
  702. package/dist/lib/rag/pipeline/contextAssembly.d.ts +4 -7
  703. package/dist/lib/rag/ragIntegration.d.ts +2 -14
  704. package/dist/lib/rag/ragIntegration.js +1 -1
  705. package/dist/lib/rag/resilience/CircuitBreaker.d.ts +5 -44
  706. package/dist/lib/rag/resilience/RetryHandler.js +1 -1
  707. package/dist/lib/rag/retrieval/vectorQueryTool.d.ts +1 -9
  708. package/dist/lib/rag/retrieval/vectorQueryTool.js +1 -1
  709. package/dist/lib/sdk/toolRegistration.js +12 -1
  710. package/dist/lib/server/abstract/baseServerAdapter.js +2 -2
  711. package/dist/lib/server/adapters/honoAdapter.d.ts +6 -0
  712. package/dist/lib/server/adapters/honoAdapter.js +76 -10
  713. package/dist/lib/server/middleware/cache.js +3 -0
  714. package/dist/lib/server/routes/claudeProxyRoutes.d.ts +44 -0
  715. package/dist/lib/server/routes/claudeProxyRoutes.js +1601 -0
  716. package/dist/lib/server/routes/healthRoutes.js +18 -1
  717. package/dist/lib/server/routes/index.d.ts +7 -0
  718. package/dist/lib/server/routes/index.js +8 -0
  719. package/dist/lib/server/streaming/dataStream.d.ts +1 -5
  720. package/dist/lib/server/streaming/dataStream.js +3 -0
  721. package/dist/lib/server/utils/validation.d.ts +24 -124
  722. package/dist/lib/server/utils/validation.js +2 -2
  723. package/dist/lib/services/server/ai/observability/instrumentation.js +4 -0
  724. package/dist/lib/telemetry/attributes.d.ts +38 -0
  725. package/dist/lib/telemetry/attributes.js +40 -0
  726. package/dist/lib/telemetry/tracers.d.ts +1 -0
  727. package/dist/lib/telemetry/tracers.js +1 -0
  728. package/dist/lib/types/authTypes.d.ts +56 -0
  729. package/dist/lib/types/authTypes.js +9 -0
  730. package/dist/lib/types/circuitBreakerErrors.d.ts +30 -0
  731. package/dist/lib/types/circuitBreakerErrors.js +35 -0
  732. package/dist/lib/types/cli.d.ts +258 -0
  733. package/dist/lib/types/clientTypes.d.ts +1050 -0
  734. package/dist/lib/types/clientTypes.js +11 -0
  735. package/dist/lib/types/common.d.ts +123 -0
  736. package/dist/lib/types/configTypes.d.ts +49 -0
  737. package/dist/lib/types/configTypes.js +4 -0
  738. package/dist/lib/types/conversation.d.ts +0 -5
  739. package/dist/lib/types/evaluationTypes.d.ts +2 -2
  740. package/dist/lib/types/fileTypes.d.ts +47 -0
  741. package/dist/lib/types/generateTypes.d.ts +14 -4
  742. package/dist/lib/types/guardrails.d.ts +2 -2
  743. package/dist/lib/types/index.d.ts +4 -1
  744. package/dist/lib/types/index.js +5 -0
  745. package/dist/lib/types/middlewareTypes.d.ts +57 -4
  746. package/dist/lib/types/modelTypes.d.ts +7 -97
  747. package/dist/lib/types/modelTypes.js +3 -3
  748. package/dist/lib/types/observability.d.ts +37 -0
  749. package/dist/lib/types/providers.d.ts +107 -0
  750. package/dist/lib/types/proxyTypes.d.ts +536 -0
  751. package/dist/lib/types/proxyTypes.js +17 -0
  752. package/dist/lib/types/ragTypes.d.ts +49 -1
  753. package/dist/lib/types/streamTypes.d.ts +44 -14
  754. package/dist/lib/types/subscriptionTypes.d.ts +77 -0
  755. package/dist/lib/types/subscriptionTypes.js +2 -0
  756. package/dist/lib/types/tools.d.ts +45 -1
  757. package/dist/lib/types/typeAliases.d.ts +8 -0
  758. package/dist/lib/types/typeAliases.js +1 -0
  759. package/dist/lib/utils/async/retry.d.ts +4 -33
  760. package/dist/lib/utils/asyncMutex.d.ts +14 -0
  761. package/dist/lib/utils/asyncMutex.js +61 -0
  762. package/dist/lib/utils/errorHandling.d.ts +7 -1
  763. package/dist/lib/utils/errorHandling.js +52 -6
  764. package/dist/lib/utils/fileDetector.d.ts +13 -1
  765. package/dist/lib/utils/fileDetector.js +114 -32
  766. package/dist/lib/utils/imageProcessor.js +7 -7
  767. package/dist/lib/utils/json/safeParse.d.ts +1 -8
  768. package/dist/lib/utils/mcpDefaults.d.ts +1 -1
  769. package/dist/lib/utils/mcpDefaults.js +11 -2
  770. package/dist/lib/utils/messageBuilder.d.ts +5 -5
  771. package/dist/lib/utils/messageBuilder.js +106 -80
  772. package/dist/lib/utils/modelChoices.d.ts +1 -8
  773. package/dist/lib/utils/pdfProcessor.d.ts +1 -25
  774. package/dist/lib/utils/pdfProcessor.js +5 -4
  775. package/dist/lib/utils/pricing.js +28 -5
  776. package/dist/lib/utils/providerHealth.d.ts +1 -1
  777. package/dist/lib/utils/rateLimiter.d.ts +1 -15
  778. package/dist/lib/utils/redis.d.ts +1 -1
  779. package/dist/lib/utils/redis.js +3 -3
  780. package/dist/lib/utils/sanitizers/filename.d.ts +2 -22
  781. package/dist/lib/utils/sanitizers/index.d.ts +4 -2
  782. package/dist/lib/utils/sanitizers/svg.d.ts +1 -11
  783. package/dist/lib/utils/schemaConversion.js +4 -1
  784. package/dist/lib/utils/thinkingConfig.d.ts +1 -33
  785. package/dist/lib/utils/tokenUtils.d.ts +1 -39
  786. package/dist/lib/utils/videoAnalysisProcessor.d.ts +5 -5
  787. package/dist/lib/utils/videoAnalysisProcessor.js +2 -2
  788. package/dist/lib/workflow/config.d.ts +89 -1257
  789. package/dist/lib/workflow/utils/workflowValidation.js +1 -1
  790. package/dist/mcp/batching/requestBatcher.js +1 -1
  791. package/dist/mcp/externalServerManager.js +5 -2
  792. package/dist/mcp/factory.js +1 -1
  793. package/dist/mcp/index.d.ts +1 -1
  794. package/dist/mcp/index.js +1 -1
  795. package/dist/mcp/mcpCircuitBreaker.d.ts +1 -0
  796. package/dist/mcp/mcpCircuitBreaker.js +30 -4
  797. package/dist/mcp/mcpClientFactory.js +33 -4
  798. package/dist/mcp/toolDiscoveryService.js +52 -5
  799. package/dist/mcp/toolRegistry.js +7 -1
  800. package/dist/memory/memoryRetrievalTools.d.ts +5 -89
  801. package/dist/memory/memoryRetrievalTools.js +1 -1
  802. package/dist/middleware/builtin/analytics.js +3 -0
  803. package/dist/middleware/builtin/autoEvaluation.js +46 -24
  804. package/dist/middleware/builtin/guardrails.js +4 -0
  805. package/dist/middleware/builtin/lifecycle.d.ts +11 -0
  806. package/dist/middleware/builtin/lifecycle.js +168 -0
  807. package/dist/middleware/factory.d.ts +3 -3
  808. package/dist/middleware/factory.js +6 -2
  809. package/dist/middleware/index.d.ts +2 -1
  810. package/dist/middleware/index.js +2 -0
  811. package/dist/middleware/registry.d.ts +2 -2
  812. package/dist/middleware/registry.js +1 -0
  813. package/dist/middleware/utils/guardrailsUtils.d.ts +5 -6
  814. package/dist/middleware/utils/guardrailsUtils.js +15 -6
  815. package/dist/neurolink.d.ts +9 -20
  816. package/dist/neurolink.js +319 -187
  817. package/dist/observability/retryPolicy.d.ts +2 -13
  818. package/dist/observability/sampling/samplers.d.ts +2 -11
  819. package/dist/observability/spanProcessor.d.ts +2 -14
  820. package/dist/processors/base/BaseFileProcessor.js +1 -1
  821. package/dist/processors/document/OpenDocumentProcessor.js +5 -3
  822. package/dist/processors/media/VideoProcessor.js +157 -101
  823. package/dist/providers/amazonBedrock.js +12 -5
  824. package/dist/providers/amazonSagemaker.d.ts +5 -5
  825. package/dist/providers/amazonSagemaker.js +6 -2
  826. package/dist/providers/anthropic.d.ts +3 -3
  827. package/dist/providers/anthropic.js +23 -192
  828. package/dist/providers/anthropicBaseProvider.d.ts +4 -4
  829. package/dist/providers/anthropicBaseProvider.js +24 -13
  830. package/dist/providers/azureOpenai.d.ts +2 -2
  831. package/dist/providers/azureOpenai.js +6 -6
  832. package/dist/providers/googleAiStudio.d.ts +2 -2
  833. package/dist/providers/googleAiStudio.js +15 -7
  834. package/dist/providers/googleNativeGemini3.d.ts +3 -54
  835. package/dist/providers/googleNativeGemini3.js +14 -10
  836. package/dist/providers/googleVertex.d.ts +6 -6
  837. package/dist/providers/googleVertex.js +32 -26
  838. package/dist/providers/huggingFace.d.ts +4 -4
  839. package/dist/providers/huggingFace.js +15 -5
  840. package/dist/providers/litellm.d.ts +4 -4
  841. package/dist/providers/litellm.js +54 -42
  842. package/dist/providers/mistral.d.ts +2 -2
  843. package/dist/providers/mistral.js +5 -4
  844. package/dist/providers/ollama.d.ts +7 -4
  845. package/dist/providers/ollama.js +30 -8
  846. package/dist/providers/openAI.d.ts +2 -2
  847. package/dist/providers/openAI.js +46 -21
  848. package/dist/providers/openRouter.d.ts +4 -4
  849. package/dist/providers/openRouter.js +63 -35
  850. package/dist/providers/openaiCompatible.d.ts +2 -2
  851. package/dist/providers/openaiCompatible.js +18 -9
  852. package/dist/providers/providerTypeUtils.d.ts +28 -0
  853. package/dist/providers/providerTypeUtils.js +46 -0
  854. package/dist/providers/sagemaker/config.js +5 -5
  855. package/dist/providers/sagemaker/language-model.d.ts +23 -13
  856. package/dist/providers/sagemaker/language-model.js +20 -8
  857. package/dist/proxy/accountQuota.d.ts +33 -0
  858. package/dist/proxy/accountQuota.js +162 -0
  859. package/dist/proxy/claudeFormat.d.ts +143 -0
  860. package/dist/proxy/claudeFormat.js +595 -0
  861. package/dist/proxy/cloaking/index.d.ts +44 -0
  862. package/dist/proxy/cloaking/index.js +86 -0
  863. package/dist/proxy/cloaking/plugins/headerScrubber.d.ts +9 -0
  864. package/dist/proxy/cloaking/plugins/headerScrubber.js +86 -0
  865. package/dist/proxy/cloaking/plugins/sessionIdentity.d.ts +15 -0
  866. package/dist/proxy/cloaking/plugins/sessionIdentity.js +65 -0
  867. package/dist/proxy/cloaking/plugins/systemPromptInjector.d.ts +11 -0
  868. package/dist/proxy/cloaking/plugins/systemPromptInjector.js +83 -0
  869. package/dist/proxy/cloaking/plugins/tlsFingerprint.d.ts +14 -0
  870. package/dist/proxy/cloaking/plugins/tlsFingerprint.js +38 -0
  871. package/dist/proxy/cloaking/plugins/wordObfuscator.d.ts +9 -0
  872. package/dist/proxy/cloaking/plugins/wordObfuscator.js +121 -0
  873. package/dist/proxy/cloaking/types.d.ts +1 -0
  874. package/dist/proxy/cloaking/types.js +1 -0
  875. package/dist/proxy/modelRouter.d.ts +10 -0
  876. package/dist/proxy/modelRouter.js +29 -0
  877. package/dist/proxy/oauthFetch.d.ts +36 -0
  878. package/dist/proxy/oauthFetch.js +367 -0
  879. package/dist/proxy/proxyConfig.d.ts +42 -0
  880. package/dist/proxy/proxyConfig.js +499 -0
  881. package/dist/proxy/proxyFetch.js +2 -1
  882. package/dist/proxy/requestLogger.d.ts +50 -0
  883. package/dist/proxy/requestLogger.js +207 -0
  884. package/dist/proxy/tokenRefresh.d.ts +4 -0
  885. package/dist/proxy/tokenRefresh.js +124 -0
  886. package/dist/proxy/usageStats.d.ts +13 -0
  887. package/dist/proxy/usageStats.js +74 -0
  888. package/dist/rag/document/loaders.js +1 -1
  889. package/dist/rag/pipeline/contextAssembly.d.ts +4 -7
  890. package/dist/rag/ragIntegration.d.ts +2 -14
  891. package/dist/rag/ragIntegration.js +1 -1
  892. package/dist/rag/resilience/CircuitBreaker.d.ts +5 -44
  893. package/dist/rag/resilience/RetryHandler.js +1 -1
  894. package/dist/rag/retrieval/vectorQueryTool.d.ts +1 -9
  895. package/dist/rag/retrieval/vectorQueryTool.js +1 -1
  896. package/dist/sdk/toolRegistration.js +12 -1
  897. package/dist/server/abstract/baseServerAdapter.js +2 -2
  898. package/dist/server/adapters/honoAdapter.d.ts +6 -0
  899. package/dist/server/adapters/honoAdapter.js +76 -10
  900. package/dist/server/middleware/cache.js +3 -0
  901. package/dist/server/routes/claudeProxyRoutes.d.ts +44 -0
  902. package/dist/server/routes/claudeProxyRoutes.js +1600 -0
  903. package/dist/server/routes/healthRoutes.js +18 -1
  904. package/dist/server/routes/index.d.ts +7 -0
  905. package/dist/server/routes/index.js +8 -0
  906. package/dist/server/streaming/dataStream.d.ts +1 -5
  907. package/dist/server/streaming/dataStream.js +3 -0
  908. package/dist/server/utils/validation.d.ts +24 -124
  909. package/dist/server/utils/validation.js +2 -2
  910. package/dist/services/server/ai/observability/instrumentation.js +4 -0
  911. package/dist/telemetry/attributes.d.ts +38 -0
  912. package/dist/telemetry/attributes.js +40 -0
  913. package/dist/telemetry/tracers.d.ts +1 -0
  914. package/dist/telemetry/tracers.js +1 -0
  915. package/dist/types/authTypes.d.ts +56 -0
  916. package/dist/types/authTypes.js +8 -0
  917. package/dist/types/circuitBreakerErrors.d.ts +30 -0
  918. package/dist/types/circuitBreakerErrors.js +34 -0
  919. package/dist/types/cli.d.ts +258 -0
  920. package/dist/types/clientTypes.d.ts +1050 -0
  921. package/dist/types/clientTypes.js +10 -0
  922. package/dist/types/common.d.ts +123 -0
  923. package/dist/types/configTypes.d.ts +49 -0
  924. package/dist/types/configTypes.js +4 -0
  925. package/dist/types/conversation.d.ts +0 -5
  926. package/dist/types/evaluationTypes.d.ts +2 -2
  927. package/dist/types/fileTypes.d.ts +47 -0
  928. package/dist/types/generateTypes.d.ts +14 -4
  929. package/dist/types/guardrails.d.ts +2 -2
  930. package/dist/types/index.d.ts +4 -1
  931. package/dist/types/index.js +5 -0
  932. package/dist/types/middlewareTypes.d.ts +57 -4
  933. package/dist/types/modelTypes.d.ts +7 -97
  934. package/dist/types/modelTypes.js +3 -3
  935. package/dist/types/observability.d.ts +37 -0
  936. package/dist/types/providers.d.ts +107 -0
  937. package/dist/types/proxyTypes.d.ts +536 -0
  938. package/dist/types/proxyTypes.js +16 -0
  939. package/dist/types/ragTypes.d.ts +49 -1
  940. package/dist/types/streamTypes.d.ts +44 -14
  941. package/dist/types/subscriptionTypes.d.ts +77 -0
  942. package/dist/types/subscriptionTypes.js +2 -0
  943. package/dist/types/tools.d.ts +45 -1
  944. package/dist/types/typeAliases.d.ts +8 -0
  945. package/dist/types/typeAliases.js +1 -0
  946. package/dist/utils/async/retry.d.ts +4 -33
  947. package/dist/utils/asyncMutex.d.ts +14 -0
  948. package/dist/utils/asyncMutex.js +60 -0
  949. package/dist/utils/errorHandling.d.ts +7 -1
  950. package/dist/utils/errorHandling.js +52 -6
  951. package/dist/utils/fileDetector.d.ts +13 -1
  952. package/dist/utils/fileDetector.js +114 -32
  953. package/dist/utils/imageProcessor.js +7 -7
  954. package/dist/utils/json/safeParse.d.ts +1 -8
  955. package/dist/utils/mcpDefaults.d.ts +1 -1
  956. package/dist/utils/mcpDefaults.js +11 -2
  957. package/dist/utils/messageBuilder.d.ts +5 -5
  958. package/dist/utils/messageBuilder.js +106 -80
  959. package/dist/utils/modelChoices.d.ts +1 -8
  960. package/dist/utils/pdfProcessor.d.ts +1 -25
  961. package/dist/utils/pdfProcessor.js +5 -4
  962. package/dist/utils/pricing.js +28 -5
  963. package/dist/utils/rateLimiter.d.ts +1 -15
  964. package/dist/utils/redis.d.ts +1 -1
  965. package/dist/utils/redis.js +3 -3
  966. package/dist/utils/sanitizers/filename.d.ts +2 -22
  967. package/dist/utils/sanitizers/index.d.ts +4 -2
  968. package/dist/utils/sanitizers/svg.d.ts +1 -11
  969. package/dist/utils/schemaConversion.js +4 -1
  970. package/dist/utils/thinkingConfig.d.ts +1 -33
  971. package/dist/utils/tokenUtils.d.ts +1 -39
  972. package/dist/utils/videoAnalysisProcessor.d.ts +5 -5
  973. package/dist/utils/videoAnalysisProcessor.js +2 -2
  974. package/dist/workflow/config.d.ts +89 -1257
  975. package/dist/workflow/utils/workflowValidation.js +1 -1
  976. package/docs-site/mcp-server/index.js +2 -3
  977. package/package.json +139 -105
  978. package/dist/lib/memory/mem0Initializer.d.ts +0 -46
  979. package/dist/lib/memory/mem0Initializer.js +0 -85
  980. package/dist/memory/mem0Initializer.d.ts +0 -46
  981. package/dist/memory/mem0Initializer.js +0 -84
@@ -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;
@@ -2209,6 +2205,26 @@ Current user's request: ${currentInput}`;
2209
2205
  },
2210
2206
  });
2211
2207
  }
2208
+ // Auto-inject lifecycle middleware when callbacks are provided
2209
+ // (must happen before workflow/PPT early returns so those paths get middleware too)
2210
+ if (options.onFinish || options.onError) {
2211
+ options.middleware = {
2212
+ ...options.middleware,
2213
+ middlewareConfig: {
2214
+ ...options.middleware?.middlewareConfig,
2215
+ lifecycle: {
2216
+ ...options.middleware?.middlewareConfig?.lifecycle,
2217
+ enabled: true,
2218
+ config: {
2219
+ ...options.middleware?.middlewareConfig?.lifecycle
2220
+ ?.config,
2221
+ onFinish: options.onFinish,
2222
+ onError: options.onError,
2223
+ },
2224
+ },
2225
+ },
2226
+ };
2227
+ }
2212
2228
  // Check if workflow is requested
2213
2229
  if (options.workflow || options.workflowConfig) {
2214
2230
  return await this.generateWithWorkflow(options);
@@ -2227,30 +2243,6 @@ Current user's request: ${currentInput}`;
2227
2243
  }
2228
2244
  // Set session and user IDs from context for Langfuse spans and execute with proper async scoping
2229
2245
  return await this.setLangfuseContextFromOptions(options, async () => {
2230
- if (this.conversationMemoryConfig?.conversationMemory
2231
- ?.mem0Enabled &&
2232
- options.context?.userId) {
2233
- try {
2234
- const mem0 = await this.ensureMem0Ready();
2235
- if (!mem0) {
2236
- logger.debug("Mem0 not available, continuing without memory retrieval");
2237
- }
2238
- else {
2239
- const memories = await mem0.search(options.input.text, {
2240
- user_id: options.context.userId,
2241
- limit: 5,
2242
- });
2243
- if (memories && memories.length > 0) {
2244
- // Enhance the input with memory context
2245
- const memoryContext = this.extractMemoryContext(memories);
2246
- options.input.text = this.formatMemoryContext(memoryContext, options.input.text);
2247
- }
2248
- }
2249
- }
2250
- catch (error) {
2251
- logger.warn("Mem0 memory retrieval failed:", error);
2252
- }
2253
- }
2254
2246
  const startTime = Date.now();
2255
2247
  // Apply orchestration if enabled and no specific provider/model requested
2256
2248
  if (this.enableOrchestration &&
@@ -2364,6 +2356,7 @@ Current user's request: ${currentInput}`;
2364
2356
  fileRegistry: this.fileRegistry,
2365
2357
  abortSignal: options.abortSignal,
2366
2358
  skipToolPromptInjection: options.skipToolPromptInjection,
2359
+ middleware: options.middleware,
2367
2360
  };
2368
2361
  // Auto-map top-level sessionId/userId to context for convenience
2369
2362
  // Tests and users may pass sessionId/userId as top-level options
@@ -2400,7 +2393,6 @@ Current user's request: ${currentInput}`;
2400
2393
  toolResults: toolResults.length,
2401
2394
  });
2402
2395
  }
2403
- // Use redesigned generation logic
2404
2396
  const textResult = await this.generateTextInternal(textOptions);
2405
2397
  // Emit generation completion event (NeuroLink format - enhanced with content)
2406
2398
  this.emitter.emit("generation:end", {
@@ -2465,7 +2457,7 @@ Current user's request: ${currentInput}`;
2465
2457
  generateResult.analytics.cost > 0) {
2466
2458
  this._sessionCostUsd += generateResult.analytics.cost;
2467
2459
  }
2468
- this.scheduleGenerateMem0Storage(options, originalPrompt, generateResult);
2460
+ this.scheduleGenerateMemoryStorage(options, originalPrompt, generateResult);
2469
2461
  // Set completion span attributes
2470
2462
  generateSpan.setAttribute("neurolink.output_length", generateResult.content?.length || 0);
2471
2463
  generateSpan.setAttribute("neurolink.tokens.input", generateResult.usage?.input || 0);
@@ -2515,27 +2507,9 @@ Current user's request: ${currentInput}`;
2515
2507
  });
2516
2508
  }
2517
2509
  /**
2518
- * Schedule non-blocking Mem0 memory storage after generate completes.
2510
+ * Schedule non-blocking memory storage after generate completes.
2519
2511
  */
2520
- scheduleGenerateMem0Storage(options, originalPrompt, generateResult) {
2521
- if (this.conversationMemoryConfig?.conversationMemory?.mem0Enabled &&
2522
- options.context?.userId &&
2523
- generateResult.content.trim()) {
2524
- setImmediate(async () => {
2525
- try {
2526
- const mem0 = await this.ensureMem0Ready();
2527
- if (mem0) {
2528
- await this.storeMem0ConversationTurn(mem0, originalPrompt ?? "", generateResult.content.trim(), options.context?.userId, {
2529
- timestamp: new Date().toISOString(),
2530
- type: "conversation_turn_generate",
2531
- });
2532
- }
2533
- }
2534
- catch (error) {
2535
- logger.warn("Mem0 memory storage failed:", error);
2536
- }
2537
- });
2538
- }
2512
+ scheduleGenerateMemoryStorage(options, originalPrompt, generateResult) {
2539
2513
  // Memory storage
2540
2514
  if (this.conversationMemoryConfig?.conversationMemory?.memory?.enabled &&
2541
2515
  options.context?.userId &&
@@ -4024,6 +3998,26 @@ Current user's request: ${currentInput}`;
4024
3998
  });
4025
3999
  }
4026
4000
  this.emitStreamStartEvents(options, startTime);
4001
+ // Auto-inject lifecycle middleware when callbacks are provided
4002
+ // (must happen before workflow early return so that path gets middleware too)
4003
+ if (options.onFinish || options.onError || options.onChunk) {
4004
+ options.middleware = {
4005
+ ...options.middleware,
4006
+ middlewareConfig: {
4007
+ ...options.middleware?.middlewareConfig,
4008
+ lifecycle: {
4009
+ ...options.middleware?.middlewareConfig?.lifecycle,
4010
+ enabled: true,
4011
+ config: {
4012
+ ...options.middleware?.middlewareConfig?.lifecycle?.config,
4013
+ onFinish: options.onFinish,
4014
+ onError: options.onError,
4015
+ onChunk: options.onChunk,
4016
+ },
4017
+ },
4018
+ },
4019
+ };
4020
+ }
4027
4021
  // Check if workflow is requested
4028
4022
  if (options.workflow || options.workflowConfig) {
4029
4023
  const result = await this.streamWithWorkflow(options, startTime);
@@ -4055,7 +4049,7 @@ Current user's request: ${currentInput}`;
4055
4049
  // Set session and user IDs from context for Langfuse spans and execute with proper async scoping
4056
4050
  return await this.setLangfuseContextFromOptions(options, async () => {
4057
4051
  try {
4058
- // Prepare options: init memory, MCP, Mem0, orchestration, Ollama auto-disable, tool detection
4052
+ // Prepare options: init memory, MCP, orchestration, Ollama auto-disable, tool detection
4059
4053
  const { enhancedOptions, factoryResult } = await this.prepareStreamOptions(options, streamId, startTime, hrTimeStart);
4060
4054
  const { stream: mcpStream, provider: providerName, usage: streamUsage, model: streamModel, analytics: streamAnalytics, } = await this.createMCPStream(enhancedOptions);
4061
4055
  // Update span with resolved provider name
@@ -4251,7 +4245,7 @@ Current user's request: ${currentInput}`;
4251
4245
  }); // end metricsTraceContextStorage.run
4252
4246
  }
4253
4247
  /**
4254
- * Prepare stream options: initialize memory, MCP, Mem0 retrieval, orchestration,
4248
+ * Prepare stream options: initialize memory, MCP, retrieval, orchestration,
4255
4249
  * Ollama tool auto-disable, factory processing, and tool detection.
4256
4250
  */
4257
4251
  async prepareStreamOptions(options, streamId, startTime, hrTimeStart) {
@@ -4259,31 +4253,6 @@ Current user's request: ${currentInput}`;
4259
4253
  await this.initializeConversationMemoryForGeneration(streamId, startTime, hrTimeStart);
4260
4254
  // Initialize MCP
4261
4255
  await this.initializeMCP();
4262
- if (this.conversationMemoryConfig?.conversationMemory?.mem0Enabled &&
4263
- options.context?.userId) {
4264
- try {
4265
- const mem0 = await this.ensureMem0Ready();
4266
- if (!mem0) {
4267
- // Continue without memories if mem0 is not available
4268
- logger.debug("Mem0 not available, continuing without memory retrieval");
4269
- }
4270
- else {
4271
- const memories = await mem0.search(options.input.text, {
4272
- user_id: options.context.userId,
4273
- limit: 5,
4274
- });
4275
- if (memories && memories.length > 0) {
4276
- // Enhance the input with memory context
4277
- const memoryContext = this.extractMemoryContext(memories);
4278
- options.input.text = this.formatMemoryContext(memoryContext, options.input.text);
4279
- }
4280
- }
4281
- }
4282
- catch (error) {
4283
- // Non-blocking: Log error but continue with streaming
4284
- logger.warn("Mem0 memory retrieval failed:", error);
4285
- }
4286
- }
4287
4256
  // Memory retrieval
4288
4257
  if (this.conversationMemoryConfig?.conversationMemory?.memory?.enabled &&
4289
4258
  options.context?.userId) {
@@ -4498,11 +4467,16 @@ Current user's request: ${currentInput}`;
4498
4467
  disableToolCache: enhancedOptions.disableToolCache,
4499
4468
  }),
4500
4469
  }, "NeuroLink.fallbackStream");
4501
- // Get conversation messages for context (same as primary stream)
4502
- const conversationMessages = await getConversationMessages(this.conversationMemory, {
4503
- prompt: enhancedOptions.input.text,
4504
- context: enhancedOptions.context,
4505
- });
4470
+ // Prefer the caller-supplied / compacted conversation messages that were
4471
+ // threaded through options. Only fall back to memory when no explicit
4472
+ // history was provided — this preserves caller-supplied empty arrays
4473
+ // (which signal "no prior context") and avoids resurrecting stale memory.
4474
+ const conversationMessages = enhancedOptions.conversationMessages !== undefined
4475
+ ? enhancedOptions.conversationMessages
4476
+ : await getConversationMessages(this.conversationMemory, {
4477
+ prompt: enhancedOptions.input.text,
4478
+ context: enhancedOptions.context,
4479
+ });
4506
4480
  const fallbackResult = await fallbackProvider.stream({
4507
4481
  ...enhancedOptions,
4508
4482
  model: fallbackRoute.model,
@@ -4541,7 +4515,7 @@ Current user's request: ${currentInput}`;
4541
4515
  }
4542
4516
  /**
4543
4517
  * Store conversation memory after stream consumption is complete (called from finally block).
4544
- * Handles both conversation memory storage and Mem0 background storage.
4518
+ * Handles conversation memory storage in the background.
4545
4519
  */
4546
4520
  async storeStreamConversationMemory(params) {
4547
4521
  const { enhancedOptions, providerName, originalPrompt, accumulatedContent, startTime, eventSequence, } = params;
@@ -4595,24 +4569,6 @@ Current user's request: ${currentInput}`;
4595
4569
  });
4596
4570
  }
4597
4571
  }
4598
- if (this.conversationMemoryConfig?.conversationMemory?.mem0Enabled &&
4599
- enhancedOptions.context?.userId &&
4600
- accumulatedContent.trim()) {
4601
- setImmediate(async () => {
4602
- try {
4603
- const mem0 = await this.ensureMem0Ready();
4604
- if (mem0) {
4605
- await this.storeMem0ConversationTurn(mem0, originalPrompt ?? "", accumulatedContent.trim(), enhancedOptions.context?.userId, {
4606
- timestamp: new Date().toISOString(),
4607
- type: "conversation_turn_stream",
4608
- });
4609
- }
4610
- }
4611
- catch (error) {
4612
- logger.warn("Mem0 memory storage failed:", error);
4613
- }
4614
- });
4615
- }
4616
4572
  if (this.conversationMemoryConfig?.conversationMemory?.memory?.enabled &&
4617
4573
  enhancedOptions.context?.userId &&
4618
4574
  accumulatedContent?.trim()) {
@@ -4677,12 +4633,24 @@ Current user's request: ${currentInput}`;
4677
4633
  const enhancedSystemPrompt = options.skipToolPromptInjection
4678
4634
  ? options.systemPrompt || ""
4679
4635
  : this.createToolAwareSystemPrompt(options.systemPrompt, availableTools);
4680
- // Get conversation messages for context
4681
- let conversationMessages = await getConversationMessages(this.conversationMemory, {
4682
- ...options,
4683
- prompt: options.input.text,
4684
- context: options.context,
4685
- });
4636
+ // Get conversation messages for context.
4637
+ // If the caller already supplied conversationMessages (e.g. proxy routes
4638
+ // forwarding a multi-turn Claude request), honour them — including an
4639
+ // explicit empty array, which signals "no prior context". Otherwise fall
4640
+ // back to the conversation memory store (interactive CLI / SDK sessions).
4641
+ const hasCallerConversationHistory = options.conversationMessages !== undefined;
4642
+ const resolvedConversationMessages = hasCallerConversationHistory
4643
+ ? options.conversationMessages
4644
+ : await getConversationMessages(this.conversationMemory, {
4645
+ ...options,
4646
+ prompt: options.input.text,
4647
+ context: options.context,
4648
+ });
4649
+ // Make the resolved messages the single source of truth so downstream
4650
+ // consumers (compaction, fallback streams) reuse them instead of
4651
+ // reloading from conversationMemory.
4652
+ options.conversationMessages = resolvedConversationMessages;
4653
+ let conversationMessages = resolvedConversationMessages;
4686
4654
  // Pre-generation budget check for streaming
4687
4655
  const streamBudget = checkContextBudget({
4688
4656
  provider: providerName,
@@ -4696,7 +4664,7 @@ Current user's request: ${currentInput}`;
4696
4664
  const streamMessageCount = conversationMessages?.length || 0;
4697
4665
  const streamCompactionSessionId = this.getCompactionSessionId(options);
4698
4666
  if (streamBudget.shouldCompact &&
4699
- this.conversationMemory &&
4667
+ (hasCallerConversationHistory || this.conversationMemory) &&
4700
4668
  streamMessageCount >
4701
4669
  (this.lastCompactionMessageCount.get(streamCompactionSessionId) ?? 0)) {
4702
4670
  const compactor = new ContextCompactor({
@@ -4709,6 +4677,10 @@ Current user's request: ${currentInput}`;
4709
4677
  if (compactionResult.compacted) {
4710
4678
  const repairedResult = repairToolPairs(compactionResult.messages);
4711
4679
  conversationMessages = repairedResult.messages;
4680
+ // Keep options.conversationMessages in sync so downstream consumers
4681
+ // (e.g. handleStreamFallback) use the compacted history rather than
4682
+ // re-reading from conversationMemory.
4683
+ options.conversationMessages = conversationMessages;
4712
4684
  this.lastCompactionMessageCount.set(streamCompactionSessionId, conversationMessages.length);
4713
4685
  }
4714
4686
  // POST-COMPACTION BUDGET RE-CHECK (mirrors tryMCPGeneration / directProviderGeneration)
@@ -4728,6 +4700,9 @@ Current user's request: ${currentInput}`;
4728
4700
  overagePercent: Math.round((postCompactBudget.usageRatio - 1.0) * 100),
4729
4701
  });
4730
4702
  conversationMessages = emergencyContentTruncation(conversationMessages, postCompactBudget.availableInputTokens, postCompactBudget.breakdown, providerName);
4703
+ // Keep options in sync after emergency truncation so fallback paths
4704
+ // use the truncated history.
4705
+ options.conversationMessages = conversationMessages;
4731
4706
  const finalBudget = checkContextBudget({
4732
4707
  provider: providerName,
4733
4708
  model: options.model,
@@ -5251,7 +5226,7 @@ Current user's request: ${currentInput}`;
5251
5226
  * @param name - Unique name for the tool
5252
5227
  * @param tool - Tool in MCPExecutableTool format (unified MCP protocol type)
5253
5228
  */
5254
- registerTool(name, tool) {
5229
+ registerTool(name, tool, options) {
5255
5230
  this.invalidateToolCache(); // Invalidate cache when a tool is registered
5256
5231
  // Emit tool registration start event
5257
5232
  this.emitter.emit("tools-register:start", {
@@ -5300,8 +5275,46 @@ Current user's request: ${currentInput}`;
5300
5275
  return fallbackSchema;
5301
5276
  })(),
5302
5277
  };
5278
+ // Wrap execute with per-tool timeout if specified at registration.
5279
+ // Uses AbortSignal.timeout() composed with any parent signal from the AI SDK.
5280
+ // This ensures the timeout works regardless of the execution path
5281
+ // (direct executeTool() or AI SDK generateText() tool calling).
5282
+ if (options?.timeout !== undefined &&
5283
+ options.timeout > 0 &&
5284
+ Number.isFinite(options.timeout)) {
5285
+ const originalExecute = convertedTool.execute;
5286
+ const toolTimeout = options.timeout;
5287
+ const toolName = name;
5288
+ convertedTool.execute = async (...args) => {
5289
+ const timeoutSignal = AbortSignal.timeout(toolTimeout);
5290
+ // Compose with any parent abortSignal from ToolExecutionOptions
5291
+ const execOptions = args[1];
5292
+ const parentSignal = execOptions?.abortSignal;
5293
+ const composedSignal = parentSignal
5294
+ ? AbortSignal.any([parentSignal, timeoutSignal])
5295
+ : timeoutSignal;
5296
+ // Replace the abortSignal in execution options
5297
+ const augmentedContext = {
5298
+ ...execOptions,
5299
+ abortSignal: composedSignal,
5300
+ };
5301
+ return Promise.race([
5302
+ originalExecute(args[0], augmentedContext),
5303
+ new Promise((_, reject) => {
5304
+ composedSignal.addEventListener("abort", () => {
5305
+ if (timeoutSignal.aborted) {
5306
+ reject(new Error(`Tool '${toolName}' timed out after ${toolTimeout}ms (configured at registration)`));
5307
+ }
5308
+ else {
5309
+ reject(new DOMException("The operation was aborted", "AbortError"));
5310
+ }
5311
+ }, { once: true });
5312
+ }),
5313
+ ]);
5314
+ };
5315
+ }
5303
5316
  // SMART DEFAULTS: Use utility to eliminate boilerplate creation
5304
- const mcpServerInfo = createCustomToolServerInfo(name, convertedTool);
5317
+ const mcpServerInfo = createCustomToolServerInfo(name, convertedTool, options?.timeout, options?.maxRetries);
5305
5318
  // Register with toolRegistry using MCPServerInfo directly
5306
5319
  this.toolRegistry.registerServer(mcpServerInfo);
5307
5320
  // Emit tool registration success event
@@ -5309,6 +5322,7 @@ Current user's request: ${currentInput}`;
5309
5322
  toolName: name,
5310
5323
  success: true,
5311
5324
  timestamp: Date.now(),
5325
+ timeoutMs: options?.timeout,
5312
5326
  });
5313
5327
  }
5314
5328
  catch (error) {
@@ -5480,7 +5494,11 @@ Current user's request: ${currentInput}`;
5480
5494
  toolMap.set(tool.name, {
5481
5495
  name: tool.name,
5482
5496
  description: tool.description || "",
5483
- inputSchema: tool.inputSchema || 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
+ : {},
5484
5502
  execute: async (params, context) => {
5485
5503
  // CONTEXT MERGING: Combine all available contexts for maximum information
5486
5504
  const storedContext = this.toolExecutionContext || {};
@@ -5527,12 +5545,14 @@ Current user's request: ${currentInput}`;
5527
5545
  const fileTools = this.cachedFileTools;
5528
5546
  for (const [toolName, toolDef] of Object.entries(fileTools)) {
5529
5547
  if (!toolMap.has(toolName)) {
5530
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
5531
- const toolParams = toolDef.parameters;
5548
+ const toolDefRecord = toolDef;
5549
+ const toolParams = toolDefRecord.inputSchema ?? toolDefRecord.parameters;
5532
5550
  toolMap.set(toolName, {
5533
5551
  name: toolName,
5534
5552
  description: toolDef.description || `File tool: ${toolName}`,
5535
- inputSchema: toolParams ?? { type: "object", properties: {} },
5553
+ inputSchema: typeof toolParams === "object" && toolParams !== null
5554
+ ? toolParams
5555
+ : { type: "object", properties: {} },
5536
5556
  execute: async (params) => {
5537
5557
  return await toolDef.execute(params, {
5538
5558
  toolCallId: `file-tool-${Date.now()}`,
@@ -5631,6 +5651,12 @@ Current user's request: ${currentInput}`;
5631
5651
  const functionTag = "NeuroLink.executeTool";
5632
5652
  const executionStartTime = Date.now();
5633
5653
  // === MCP ENHANCEMENT: RequestBatcher — batch programmatic tool calls ===
5654
+ // LIMITATION: When the request batcher is enabled, per-tool timeout and retry
5655
+ // settings (from registration options or call-site options) are NOT applied.
5656
+ // The batcher uses its own hardcoded defaults for timeout and retry behavior.
5657
+ // Use `bypassBatcher: true` to ensure per-tool timeout/retry is respected.
5658
+ // Additionally, note that executeToolInternal's safe-tool retry logic may still
5659
+ // trigger even when maxRetries is set to 0, since it operates independently.
5634
5660
  if (this.mcpToolBatcher && !options?.bypassBatcher) {
5635
5661
  return this.mcpToolBatcher.execute(toolName, params);
5636
5662
  }
@@ -5695,19 +5721,27 @@ Current user's request: ${currentInput}`;
5695
5721
  timestamp: executionStartTime,
5696
5722
  input: params, // Enhanced: add input parameters
5697
5723
  });
5698
- // 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;
5699
5731
  const finalOptions = {
5700
- timeout: options?.timeout || TOOL_TIMEOUTS.EXECUTION_DEFAULT_MS, // 30 second default timeout
5701
- maxRetries: options?.maxRetries || RETRY_ATTEMPTS.DEFAULT, // Default 2 retries for retriable errors
5702
- retryDelayMs: options?.retryDelayMs || RETRY_DELAYS.BASE_MS, // 1 second delay between retries
5703
- authContext: options?.authContext, // Pass through authentication context
5704
- 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,
5705
5741
  };
5706
5742
  // Track memory usage for tool execution
5707
5743
  const { MemoryManager } = await import("./utils/performance.js");
5708
5744
  const startMemory = MemoryManager.getMemoryUsageMB();
5709
- // NL-004: Use composite key (serverId.toolName) to avoid cross-server collisions
5710
- const toolInfo = this.toolRegistry.getToolInfo(toolName);
5711
5745
  const breakerServerId = externalTool?.serverId || toolInfo?.tool?.serverId || "unknown";
5712
5746
  const breakerKey = `${breakerServerId}.${toolName}`;
5713
5747
  // Get or create circuit breaker for this tool
@@ -5723,6 +5757,7 @@ Current user's request: ${currentInput}`;
5723
5757
  failedExecutions: 0,
5724
5758
  averageExecutionTime: 0,
5725
5759
  lastExecutionTime: 0,
5760
+ errorCategories: {},
5726
5761
  });
5727
5762
  }
5728
5763
  const metrics = this.toolExecutionMetrics.get(toolName);
@@ -5783,14 +5818,18 @@ Current user's request: ${currentInput}`;
5783
5818
  memoryDelta,
5784
5819
  circuitBreakerState: circuitBreaker?.getState(),
5785
5820
  });
5786
- // Emit tool end event using the helper method
5787
- this.emitToolEndEvent(toolName, executionStartTime, true, result);
5788
5821
  // Set span success attributes
5789
5822
  // Check if result has isError flag (MCP tool error result)
5790
- const isToolError = result &&
5791
- typeof result === "object" &&
5792
- "isError" in result &&
5793
- 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);
5794
5833
  // NL-001: Count isError:true results as circuit breaker failures
5795
5834
  // This ensures tools that return error results (not just thrown errors) are tracked
5796
5835
  // TODO(NL-009): This records a failure AFTER the circuit breaker already recorded
@@ -5845,7 +5884,29 @@ Current user's request: ${currentInput}`;
5845
5884
  code: SpanStatusCode.ERROR,
5846
5885
  message: `MCP tool returned isError: ${errorText.substring(0, 200)}`,
5847
5886
  });
5887
+ if (metrics) {
5888
+ metrics.failedExecutions++;
5889
+ const prevSuccessful = metrics.successfulExecutions;
5890
+ metrics.successfulExecutions = Math.max(0, metrics.successfulExecutions - 1);
5891
+ // Recompute averageExecutionTime: back out this execution's duration
5892
+ // which was incorrectly included as a success
5893
+ if (prevSuccessful > 1) {
5894
+ metrics.averageExecutionTime =
5895
+ (metrics.averageExecutionTime * prevSuccessful -
5896
+ executionTime) /
5897
+ (prevSuccessful - 1);
5898
+ }
5899
+ else {
5900
+ // No remaining successful executions, reset to 0
5901
+ metrics.averageExecutionTime = 0;
5902
+ }
5903
+ const mappedCategory = mcpCategoryToErrorCategory(errorCategory);
5904
+ metrics.errorCategories[mappedCategory] =
5905
+ (metrics.errorCategories[mappedCategory] || 0) + 1;
5906
+ }
5848
5907
  }
5908
+ // Emit tool end event AFTER isError check so success flag is correct
5909
+ this.emitToolEndEvent(toolName, executionStartTime, !isToolError, result);
5849
5910
  toolSpan.setAttribute("tool.result.status", isToolError ? "error" : "success");
5850
5911
  toolSpan.setAttribute("tool.duration_ms", executionTime);
5851
5912
  return result;
@@ -5856,6 +5917,51 @@ Current user's request: ${currentInput}`;
5856
5917
  metrics.failedExecutions++;
5857
5918
  }
5858
5919
  const executionTime = Date.now() - executionStartTime;
5920
+ // Circuit breaker open: return a structured non-retryable isError result
5921
+ // so the AI model understands the tool is temporarily unavailable.
5922
+ // Log at warn (not error) since this is expected circuit breaker behavior.
5923
+ if (error instanceof CircuitBreakerOpenError) {
5924
+ mcpLogger.warn(`[${functionTag}] Tool blocked by circuit breaker: ${toolName}`, {
5925
+ toolName,
5926
+ breakerState: error.breakerState,
5927
+ retryAfter: error.retryAfter,
5928
+ retryAfterMs: error.retryAfterMs,
5929
+ failureCount: error.failureCount,
5930
+ executionTime,
5931
+ });
5932
+ if (metrics) {
5933
+ const category = ErrorCategory.EXECUTION;
5934
+ metrics.errorCategories[category] =
5935
+ (metrics.errorCategories[category] || 0) + 1;
5936
+ }
5937
+ // Emit tool end event for circuit breaker open
5938
+ this.emitToolEndEvent(toolName, executionStartTime, false, undefined);
5939
+ toolSpan.setAttribute("tool.result.status", "circuit_breaker_open");
5940
+ toolSpan.setAttribute("tool.duration_ms", executionTime);
5941
+ toolSpan.setAttribute("tool.circuit_breaker.state", error.breakerState);
5942
+ toolSpan.setAttribute("tool.circuit_breaker.retry_after_ms", error.retryAfterMs);
5943
+ toolSpan.setAttribute("tool.circuit_breaker.failure_count", error.failureCount);
5944
+ toolSpan.setStatus({
5945
+ code: SpanStatusCode.ERROR,
5946
+ message: `Circuit breaker open for ${toolName}: ${error.message}`,
5947
+ });
5948
+ // Return an isError tool result so the AI can inform the user
5949
+ // instead of throwing, which would cause a generic retry
5950
+ return {
5951
+ isError: true,
5952
+ content: [
5953
+ {
5954
+ type: "text",
5955
+ text: `TOOL TEMPORARILY UNAVAILABLE: "${toolName}" has been disabled after ` +
5956
+ `${error.failureCount} failures. ` +
5957
+ `This is a circuit breaker protection — do NOT retry this tool. ` +
5958
+ `It will become available again after ${Math.ceil(error.retryAfterMs / 1000)} seconds ` +
5959
+ `(at ${error.retryAfter}). ` +
5960
+ `Instead, inform the user that the operation failed and suggest trying again later.`,
5961
+ },
5962
+ ],
5963
+ };
5964
+ }
5859
5965
  // Create structured error
5860
5966
  let structuredError;
5861
5967
  if (error instanceof NeuroLinkError) {
@@ -5885,10 +5991,17 @@ Current user's request: ${currentInput}`;
5885
5991
  else {
5886
5992
  structuredError = ErrorFactory.toolExecutionFailed(toolName, new Error(String(error)));
5887
5993
  }
5888
- // ADD: Centralized error event emission
5889
- this.emitter.emit("error", structuredError);
5890
- // 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.
5891
6002
  this.emitToolEndEvent(toolName, executionStartTime, false, undefined, structuredError);
6003
+ // Centralized error event emission
6004
+ this.emitter.emit("error", structuredError);
5892
6005
  // Add execution context to structured error
5893
6006
  structuredError = new NeuroLinkError({
5894
6007
  ...structuredError,
@@ -6702,6 +6815,7 @@ Current user's request: ${currentInput}`;
6702
6815
  for (const [toolName, toolMetrics] of this.toolExecutionMetrics.entries()) {
6703
6816
  metrics[toolName] = {
6704
6817
  ...toolMetrics,
6818
+ errorCategories: { ...toolMetrics.errorCategories },
6705
6819
  successRate: toolMetrics.totalExecutions > 0
6706
6820
  ? toolMetrics.successfulExecutions / toolMetrics.totalExecutions
6707
6821
  : 0,
@@ -6796,6 +6910,21 @@ Current user's request: ${currentInput}`;
6796
6910
  issues.push("High average execution time");
6797
6911
  recommendations.push("Optimize tool performance or increase timeout");
6798
6912
  }
6913
+ if (metrics && metrics.errorCategories) {
6914
+ const categories = metrics.errorCategories;
6915
+ if (categories[ErrorCategory.TIMEOUT] > 0) {
6916
+ issues.push(`Timeout errors: ${categories[ErrorCategory.TIMEOUT]}`);
6917
+ recommendations.push("Consider increasing the tool timeout configuration");
6918
+ }
6919
+ if (categories[ErrorCategory.VALIDATION] > 0) {
6920
+ issues.push(`Validation errors: ${categories[ErrorCategory.VALIDATION]}`);
6921
+ recommendations.push("Review input schemas and parameter validation");
6922
+ }
6923
+ if (categories[ErrorCategory.NETWORK] > 0) {
6924
+ issues.push(`Network errors: ${categories[ErrorCategory.NETWORK]}`);
6925
+ recommendations.push("Check network connectivity and endpoint availability");
6926
+ }
6927
+ }
6799
6928
  tools[toolName] = {
6800
6929
  name: toolName,
6801
6930
  isHealthy,
@@ -6804,6 +6933,9 @@ Current user's request: ${currentInput}`;
6804
6933
  successRate,
6805
6934
  averageExecutionTime: metrics?.averageExecutionTime || 0,
6806
6935
  lastExecutionTime: metrics?.lastExecutionTime || 0,
6936
+ errorCategories: metrics?.errorCategories
6937
+ ? { ...metrics.errorCategories }
6938
+ : {},
6807
6939
  },
6808
6940
  circuitBreaker: {
6809
6941
  state: circuitBreaker?.getState() || "closed",