@juspay/neurolink 9.5.3 → 9.7.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 (423) hide show
  1. package/CHANGELOG.md +16 -0
  2. package/README.md +29 -25
  3. package/dist/adapters/video/vertexVideoHandler.js +3 -3
  4. package/dist/agent/directTools.d.ts +5 -5
  5. package/dist/cli/commands/config.d.ts +9 -9
  6. package/dist/cli/commands/serve.d.ts +37 -0
  7. package/dist/cli/commands/serve.js +302 -229
  8. package/dist/cli/commands/setup-anthropic.d.ts +2 -2
  9. package/dist/cli/commands/setup-azure.d.ts +2 -2
  10. package/dist/cli/commands/setup-bedrock.d.ts +2 -2
  11. package/dist/cli/commands/setup-gcp.d.ts +2 -2
  12. package/dist/cli/commands/setup-google-ai.d.ts +2 -2
  13. package/dist/cli/commands/setup-huggingface.d.ts +2 -2
  14. package/dist/cli/commands/setup-mistral.d.ts +2 -2
  15. package/dist/cli/commands/setup-openai.d.ts +2 -2
  16. package/dist/cli/commands/setup.d.ts +2 -2
  17. package/dist/cli/factories/commandFactory.js +16 -2
  18. package/dist/cli/loop/optionsSchema.d.ts +2 -2
  19. package/dist/cli/loop/optionsSchema.js +4 -0
  20. package/dist/cli/loop/session.d.ts +4 -0
  21. package/dist/cli/loop/session.js +49 -4
  22. package/dist/cli/utils/interactiveSetup.d.ts +4 -4
  23. package/dist/config/conversationMemory.d.ts +2 -0
  24. package/dist/config/conversationMemory.js +5 -5
  25. package/dist/constants/contextWindows.d.ts +46 -0
  26. package/dist/constants/contextWindows.js +156 -0
  27. package/dist/context/budgetChecker.d.ts +18 -0
  28. package/dist/context/budgetChecker.js +71 -0
  29. package/dist/context/contextCompactor.d.ts +22 -0
  30. package/dist/context/contextCompactor.js +106 -0
  31. package/dist/context/effectiveHistory.d.ts +52 -0
  32. package/dist/context/effectiveHistory.js +105 -0
  33. package/dist/context/errorDetection.d.ts +14 -0
  34. package/dist/context/errorDetection.js +124 -0
  35. package/dist/context/fileSummarizationService.d.ts +54 -0
  36. package/dist/context/fileSummarizationService.js +255 -0
  37. package/dist/context/fileSummarizer.d.ts +56 -0
  38. package/dist/context/fileSummarizer.js +145 -0
  39. package/dist/context/fileTokenBudget.d.ts +53 -0
  40. package/dist/context/fileTokenBudget.js +127 -0
  41. package/dist/context/prompts/summarizationPrompt.d.ts +17 -0
  42. package/dist/context/prompts/summarizationPrompt.js +110 -0
  43. package/dist/context/stages/fileReadDeduplicator.d.ts +10 -0
  44. package/dist/context/stages/fileReadDeduplicator.js +66 -0
  45. package/dist/context/stages/slidingWindowTruncator.d.ts +11 -0
  46. package/dist/context/stages/slidingWindowTruncator.js +42 -0
  47. package/dist/context/stages/structuredSummarizer.d.ts +10 -0
  48. package/dist/context/stages/structuredSummarizer.js +49 -0
  49. package/dist/context/stages/toolOutputPruner.d.ts +10 -0
  50. package/dist/context/stages/toolOutputPruner.js +52 -0
  51. package/dist/context/summarizationEngine.d.ts +45 -0
  52. package/dist/context/summarizationEngine.js +110 -0
  53. package/dist/context/toolOutputLimits.d.ts +17 -0
  54. package/dist/context/toolOutputLimits.js +84 -0
  55. package/dist/context/toolPairRepair.d.ts +16 -0
  56. package/dist/context/toolPairRepair.js +66 -0
  57. package/dist/core/analytics.js +11 -4
  58. package/dist/core/baseProvider.d.ts +6 -0
  59. package/dist/core/baseProvider.js +83 -14
  60. package/dist/core/conversationMemoryManager.d.ts +14 -11
  61. package/dist/core/conversationMemoryManager.js +36 -68
  62. package/dist/core/dynamicModels.js +3 -2
  63. package/dist/core/modules/GenerationHandler.js +2 -0
  64. package/dist/core/modules/MessageBuilder.d.ts +1 -1
  65. package/dist/core/modules/MessageBuilder.js +2 -0
  66. package/dist/core/modules/TelemetryHandler.d.ts +2 -3
  67. package/dist/core/modules/TelemetryHandler.js +3 -3
  68. package/dist/core/modules/ToolsManager.d.ts +2 -2
  69. package/dist/core/redisConversationMemoryManager.d.ts +19 -14
  70. package/dist/core/redisConversationMemoryManager.js +94 -86
  71. package/dist/factories/providerFactory.d.ts +2 -2
  72. package/dist/files/fileReferenceRegistry.d.ts +276 -0
  73. package/dist/files/fileReferenceRegistry.js +1543 -0
  74. package/dist/files/fileTools.d.ts +423 -0
  75. package/dist/files/fileTools.js +449 -0
  76. package/dist/files/index.d.ts +14 -0
  77. package/dist/files/index.js +13 -0
  78. package/dist/files/streamingReader.d.ts +93 -0
  79. package/dist/files/streamingReader.js +321 -0
  80. package/dist/files/types.d.ts +23 -0
  81. package/dist/files/types.js +23 -0
  82. package/dist/image-gen/imageGenTools.d.ts +2 -2
  83. package/dist/image-gen/types.d.ts +12 -12
  84. package/dist/index.d.ts +4 -0
  85. package/dist/index.js +5 -0
  86. package/dist/lib/adapters/video/vertexVideoHandler.js +3 -3
  87. package/dist/lib/agent/directTools.d.ts +7 -7
  88. package/dist/lib/config/conversationMemory.d.ts +2 -0
  89. package/dist/lib/config/conversationMemory.js +5 -5
  90. package/dist/lib/constants/contextWindows.d.ts +46 -0
  91. package/dist/lib/constants/contextWindows.js +157 -0
  92. package/dist/lib/context/budgetChecker.d.ts +18 -0
  93. package/dist/lib/context/budgetChecker.js +72 -0
  94. package/dist/lib/context/contextCompactor.d.ts +22 -0
  95. package/dist/lib/context/contextCompactor.js +107 -0
  96. package/dist/lib/context/effectiveHistory.d.ts +52 -0
  97. package/dist/lib/context/effectiveHistory.js +106 -0
  98. package/dist/lib/context/errorDetection.d.ts +14 -0
  99. package/dist/lib/context/errorDetection.js +125 -0
  100. package/dist/lib/context/fileSummarizationService.d.ts +54 -0
  101. package/dist/lib/context/fileSummarizationService.js +256 -0
  102. package/dist/lib/context/fileSummarizer.d.ts +56 -0
  103. package/dist/lib/context/fileSummarizer.js +146 -0
  104. package/dist/lib/context/fileTokenBudget.d.ts +53 -0
  105. package/dist/lib/context/fileTokenBudget.js +128 -0
  106. package/dist/lib/context/prompts/summarizationPrompt.d.ts +17 -0
  107. package/dist/lib/context/prompts/summarizationPrompt.js +111 -0
  108. package/dist/lib/context/stages/fileReadDeduplicator.d.ts +10 -0
  109. package/dist/lib/context/stages/fileReadDeduplicator.js +67 -0
  110. package/dist/lib/context/stages/slidingWindowTruncator.d.ts +11 -0
  111. package/dist/lib/context/stages/slidingWindowTruncator.js +43 -0
  112. package/dist/lib/context/stages/structuredSummarizer.d.ts +10 -0
  113. package/dist/lib/context/stages/structuredSummarizer.js +50 -0
  114. package/dist/lib/context/stages/toolOutputPruner.d.ts +10 -0
  115. package/dist/lib/context/stages/toolOutputPruner.js +53 -0
  116. package/dist/lib/context/summarizationEngine.d.ts +45 -0
  117. package/dist/lib/context/summarizationEngine.js +111 -0
  118. package/dist/lib/context/toolOutputLimits.d.ts +17 -0
  119. package/dist/lib/context/toolOutputLimits.js +85 -0
  120. package/dist/lib/context/toolPairRepair.d.ts +16 -0
  121. package/dist/lib/context/toolPairRepair.js +67 -0
  122. package/dist/lib/core/analytics.js +11 -4
  123. package/dist/lib/core/baseProvider.d.ts +6 -0
  124. package/dist/lib/core/baseProvider.js +83 -14
  125. package/dist/lib/core/conversationMemoryManager.d.ts +14 -11
  126. package/dist/lib/core/conversationMemoryManager.js +36 -68
  127. package/dist/lib/core/dynamicModels.js +3 -2
  128. package/dist/lib/core/modules/GenerationHandler.js +2 -0
  129. package/dist/lib/core/modules/MessageBuilder.d.ts +1 -1
  130. package/dist/lib/core/modules/MessageBuilder.js +2 -0
  131. package/dist/lib/core/modules/TelemetryHandler.d.ts +2 -3
  132. package/dist/lib/core/modules/TelemetryHandler.js +3 -3
  133. package/dist/lib/core/modules/ToolsManager.d.ts +2 -2
  134. package/dist/lib/core/redisConversationMemoryManager.d.ts +19 -14
  135. package/dist/lib/core/redisConversationMemoryManager.js +94 -86
  136. package/dist/lib/factories/providerFactory.d.ts +2 -2
  137. package/dist/lib/files/fileReferenceRegistry.d.ts +276 -0
  138. package/dist/lib/files/fileReferenceRegistry.js +1544 -0
  139. package/dist/lib/files/fileTools.d.ts +423 -0
  140. package/dist/lib/files/fileTools.js +450 -0
  141. package/dist/lib/files/index.d.ts +14 -0
  142. package/dist/lib/files/index.js +14 -0
  143. package/dist/lib/files/streamingReader.d.ts +93 -0
  144. package/dist/lib/files/streamingReader.js +322 -0
  145. package/dist/lib/files/types.d.ts +23 -0
  146. package/dist/lib/files/types.js +24 -0
  147. package/dist/lib/image-gen/imageGenTools.d.ts +2 -2
  148. package/dist/lib/image-gen/types.d.ts +12 -12
  149. package/dist/lib/index.d.ts +4 -0
  150. package/dist/lib/index.js +5 -0
  151. package/dist/lib/mcp/httpRetryHandler.js +6 -2
  152. package/dist/lib/memory/mem0Initializer.d.ts +2 -2
  153. package/dist/lib/neurolink.d.ts +66 -2
  154. package/dist/lib/neurolink.js +777 -315
  155. package/dist/lib/processors/archive/ArchiveProcessor.d.ts +327 -0
  156. package/dist/lib/processors/archive/ArchiveProcessor.js +1309 -0
  157. package/dist/lib/processors/archive/index.d.ts +33 -0
  158. package/dist/lib/processors/archive/index.js +43 -0
  159. package/dist/lib/processors/base/BaseFileProcessor.js +2 -1
  160. package/dist/lib/processors/base/types.d.ts +70 -64
  161. package/dist/lib/processors/base/types.js +6 -0
  162. package/dist/lib/processors/cli/fileProcessorCli.d.ts +8 -8
  163. package/dist/lib/processors/cli/fileProcessorCli.js +5 -5
  164. package/dist/lib/processors/config/mimeTypes.js +25 -0
  165. package/dist/lib/processors/config/sizeLimits.d.ts +52 -40
  166. package/dist/lib/processors/config/sizeLimits.js +56 -44
  167. package/dist/lib/processors/document/ExcelProcessor.d.ts +14 -0
  168. package/dist/lib/processors/document/ExcelProcessor.js +72 -1
  169. package/dist/lib/processors/document/PptxProcessor.d.ts +63 -0
  170. package/dist/lib/processors/document/PptxProcessor.js +158 -0
  171. package/dist/lib/processors/document/index.d.ts +1 -0
  172. package/dist/lib/processors/document/index.js +6 -0
  173. package/dist/lib/processors/errors/FileErrorCode.d.ts +2 -2
  174. package/dist/lib/processors/errors/errorHelpers.d.ts +2 -2
  175. package/dist/lib/processors/errors/errorHelpers.js +12 -4
  176. package/dist/lib/processors/errors/errorSerializer.d.ts +4 -4
  177. package/dist/lib/processors/index.d.ts +8 -2
  178. package/dist/lib/processors/index.js +5 -2
  179. package/dist/lib/processors/integration/FileProcessorIntegration.d.ts +8 -8
  180. package/dist/lib/processors/integration/FileProcessorIntegration.js +7 -7
  181. package/dist/lib/processors/media/AudioProcessor.d.ts +328 -0
  182. package/dist/lib/processors/media/AudioProcessor.js +708 -0
  183. package/dist/lib/processors/media/VideoProcessor.d.ts +350 -0
  184. package/dist/lib/processors/media/VideoProcessor.js +992 -0
  185. package/dist/lib/processors/media/index.d.ts +27 -0
  186. package/dist/lib/processors/media/index.js +37 -0
  187. package/dist/lib/processors/registry/ProcessorRegistry.d.ts +19 -5
  188. package/dist/lib/processors/registry/ProcessorRegistry.js +103 -8
  189. package/dist/lib/processors/registry/index.d.ts +1 -1
  190. package/dist/lib/processors/registry/index.js +1 -1
  191. package/dist/lib/processors/registry/types.d.ts +2 -2
  192. package/dist/lib/providers/amazonBedrock.js +2 -1
  193. package/dist/lib/providers/anthropic.js +2 -2
  194. package/dist/lib/providers/anthropicBaseProvider.js +10 -4
  195. package/dist/lib/providers/azureOpenai.js +14 -25
  196. package/dist/lib/providers/googleAiStudio.js +136 -457
  197. package/dist/lib/providers/googleNativeGemini3.d.ts +119 -0
  198. package/dist/lib/providers/googleNativeGemini3.js +264 -0
  199. package/dist/lib/providers/googleVertex.d.ts +15 -1
  200. package/dist/lib/providers/googleVertex.js +341 -775
  201. package/dist/lib/providers/huggingFace.js +20 -5
  202. package/dist/lib/providers/litellm.js +6 -4
  203. package/dist/lib/providers/mistral.js +3 -2
  204. package/dist/lib/providers/openAI.js +2 -2
  205. package/dist/lib/providers/openRouter.js +8 -7
  206. package/dist/lib/providers/openaiCompatible.js +10 -4
  207. package/dist/lib/providers/sagemaker/detection.d.ts +6 -6
  208. package/dist/lib/providers/sagemaker/diagnostics.d.ts +4 -4
  209. package/dist/lib/providers/sagemaker/parsers.d.ts +4 -4
  210. package/dist/lib/rag/chunkers/RecursiveChunker.js +2 -2
  211. package/dist/lib/rag/document/loaders.d.ts +6 -71
  212. package/dist/lib/rag/document/loaders.js +5 -5
  213. package/dist/lib/rag/graphRag/graphRAG.js +26 -9
  214. package/dist/lib/rag/metadata/MetadataExtractorFactory.d.ts +5 -55
  215. package/dist/lib/rag/metadata/metadataExtractor.js +6 -3
  216. package/dist/lib/rag/pipeline/RAGPipeline.d.ts +8 -126
  217. package/dist/lib/rag/pipeline/RAGPipeline.js +11 -11
  218. package/dist/lib/rag/pipeline/contextAssembly.d.ts +3 -42
  219. package/dist/lib/rag/pipeline/contextAssembly.js +6 -3
  220. package/dist/lib/rag/reranker/RerankerFactory.d.ts +5 -60
  221. package/dist/lib/rag/resilience/CircuitBreaker.d.ts +3 -33
  222. package/dist/lib/rag/resilience/RetryHandler.d.ts +2 -21
  223. package/dist/lib/rag/resilience/RetryHandler.js +6 -2
  224. package/dist/lib/rag/retrieval/hybridSearch.d.ts +3 -41
  225. package/dist/lib/rag/retrieval/vectorQueryTool.d.ts +2 -13
  226. package/dist/lib/rag/retrieval/vectorQueryTool.js +4 -3
  227. package/dist/lib/rag/types.d.ts +3 -3
  228. package/dist/lib/sdk/toolRegistration.d.ts +2 -2
  229. package/dist/lib/server/middleware/cache.d.ts +2 -2
  230. package/dist/lib/server/middleware/rateLimit.d.ts +2 -2
  231. package/dist/lib/server/routes/mcpRoutes.js +277 -249
  232. package/dist/lib/server/routes/memoryRoutes.js +287 -281
  233. package/dist/lib/server/utils/validation.d.ts +10 -10
  234. package/dist/lib/services/server/ai/observability/instrumentation.d.ts +24 -2
  235. package/dist/lib/services/server/ai/observability/instrumentation.js +12 -1
  236. package/dist/lib/session/globalSessionState.d.ts +2 -2
  237. package/dist/lib/telemetry/telemetryService.d.ts +2 -2
  238. package/dist/lib/types/common.d.ts +39 -0
  239. package/dist/lib/types/contextTypes.d.ts +255 -0
  240. package/dist/lib/types/contextTypes.js +0 -2
  241. package/dist/lib/types/conversation.d.ts +62 -0
  242. package/dist/lib/types/conversationMemoryInterface.d.ts +27 -0
  243. package/dist/lib/types/conversationMemoryInterface.js +7 -0
  244. package/dist/lib/types/fileReferenceTypes.d.ts +222 -0
  245. package/dist/lib/types/fileReferenceTypes.js +9 -0
  246. package/dist/lib/types/fileTypes.d.ts +26 -3
  247. package/dist/lib/types/generateTypes.d.ts +50 -1
  248. package/dist/lib/types/index.d.ts +4 -5
  249. package/dist/lib/types/index.js +8 -10
  250. package/dist/lib/types/modelTypes.d.ts +2 -2
  251. package/dist/lib/types/processorTypes.d.ts +597 -0
  252. package/dist/lib/types/processorTypes.js +91 -0
  253. package/dist/lib/types/ragTypes.d.ts +489 -0
  254. package/dist/lib/types/ragTypes.js +8 -0
  255. package/dist/lib/types/sdkTypes.d.ts +17 -18
  256. package/dist/lib/types/streamTypes.d.ts +24 -1
  257. package/dist/lib/utils/async/retry.d.ts +2 -2
  258. package/dist/lib/utils/async/withTimeout.js +3 -1
  259. package/dist/lib/utils/conversationMemory.d.ts +12 -6
  260. package/dist/lib/utils/conversationMemory.js +91 -36
  261. package/dist/lib/utils/errorHandling.d.ts +5 -0
  262. package/dist/lib/utils/errorHandling.js +19 -0
  263. package/dist/lib/utils/fileDetector.d.ts +62 -0
  264. package/dist/lib/utils/fileDetector.js +1014 -14
  265. package/dist/lib/utils/json/safeParse.d.ts +2 -2
  266. package/dist/lib/utils/messageBuilder.js +806 -153
  267. package/dist/lib/utils/modelChoices.d.ts +2 -2
  268. package/dist/lib/utils/multimodalOptionsBuilder.d.ts +2 -1
  269. package/dist/lib/utils/multimodalOptionsBuilder.js +1 -0
  270. package/dist/lib/utils/pricing.d.ts +12 -0
  271. package/dist/lib/utils/pricing.js +134 -0
  272. package/dist/lib/utils/rateLimiter.d.ts +2 -2
  273. package/dist/lib/utils/redis.d.ts +17 -0
  274. package/dist/lib/utils/redis.js +105 -0
  275. package/dist/lib/utils/sanitizers/filename.d.ts +4 -4
  276. package/dist/lib/utils/sanitizers/svg.d.ts +2 -2
  277. package/dist/lib/utils/thinkingConfig.d.ts +6 -6
  278. package/dist/lib/utils/timeout.d.ts +10 -0
  279. package/dist/lib/utils/timeout.js +15 -0
  280. package/dist/lib/utils/tokenEstimation.d.ts +68 -0
  281. package/dist/lib/utils/tokenEstimation.js +113 -0
  282. package/dist/lib/utils/tokenUtils.d.ts +4 -4
  283. package/dist/lib/utils/ttsProcessor.d.ts +2 -2
  284. package/dist/lib/workflow/config.d.ts +150 -150
  285. package/dist/mcp/httpRetryHandler.js +6 -2
  286. package/dist/memory/mem0Initializer.d.ts +2 -2
  287. package/dist/neurolink.d.ts +66 -2
  288. package/dist/neurolink.js +777 -315
  289. package/dist/processors/archive/ArchiveProcessor.d.ts +327 -0
  290. package/dist/processors/archive/ArchiveProcessor.js +1308 -0
  291. package/dist/processors/archive/index.d.ts +33 -0
  292. package/dist/processors/archive/index.js +42 -0
  293. package/dist/processors/base/BaseFileProcessor.js +2 -1
  294. package/dist/processors/base/types.d.ts +70 -64
  295. package/dist/processors/base/types.js +6 -0
  296. package/dist/processors/cli/fileProcessorCli.d.ts +8 -8
  297. package/dist/processors/cli/fileProcessorCli.js +5 -5
  298. package/dist/processors/config/mimeTypes.js +25 -0
  299. package/dist/processors/config/sizeLimits.d.ts +52 -40
  300. package/dist/processors/config/sizeLimits.js +56 -44
  301. package/dist/processors/document/ExcelProcessor.d.ts +14 -0
  302. package/dist/processors/document/ExcelProcessor.js +72 -1
  303. package/dist/processors/document/PptxProcessor.d.ts +63 -0
  304. package/dist/processors/document/PptxProcessor.js +157 -0
  305. package/dist/processors/document/index.d.ts +1 -0
  306. package/dist/processors/document/index.js +6 -0
  307. package/dist/processors/errors/FileErrorCode.d.ts +2 -2
  308. package/dist/processors/errors/errorHelpers.d.ts +2 -2
  309. package/dist/processors/errors/errorHelpers.js +12 -4
  310. package/dist/processors/errors/errorSerializer.d.ts +4 -4
  311. package/dist/processors/index.d.ts +8 -2
  312. package/dist/processors/index.js +5 -2
  313. package/dist/processors/integration/FileProcessorIntegration.d.ts +8 -8
  314. package/dist/processors/integration/FileProcessorIntegration.js +7 -7
  315. package/dist/processors/media/AudioProcessor.d.ts +328 -0
  316. package/dist/processors/media/AudioProcessor.js +707 -0
  317. package/dist/processors/media/VideoProcessor.d.ts +350 -0
  318. package/dist/processors/media/VideoProcessor.js +991 -0
  319. package/dist/processors/media/ffprobe-static.d.ts +4 -0
  320. package/dist/processors/media/index.d.ts +27 -0
  321. package/dist/processors/media/index.js +36 -0
  322. package/dist/processors/registry/ProcessorRegistry.d.ts +19 -5
  323. package/dist/processors/registry/ProcessorRegistry.js +103 -8
  324. package/dist/processors/registry/index.d.ts +1 -1
  325. package/dist/processors/registry/index.js +1 -1
  326. package/dist/processors/registry/types.d.ts +2 -2
  327. package/dist/providers/amazonBedrock.js +2 -1
  328. package/dist/providers/anthropic.js +2 -2
  329. package/dist/providers/anthropicBaseProvider.js +10 -4
  330. package/dist/providers/azureOpenai.js +14 -25
  331. package/dist/providers/googleAiStudio.js +136 -457
  332. package/dist/providers/googleNativeGemini3.d.ts +119 -0
  333. package/dist/providers/googleNativeGemini3.js +263 -0
  334. package/dist/providers/googleVertex.d.ts +15 -1
  335. package/dist/providers/googleVertex.js +341 -775
  336. package/dist/providers/huggingFace.js +20 -5
  337. package/dist/providers/litellm.js +6 -4
  338. package/dist/providers/mistral.js +3 -2
  339. package/dist/providers/openAI.js +2 -2
  340. package/dist/providers/openRouter.js +8 -7
  341. package/dist/providers/openaiCompatible.js +10 -4
  342. package/dist/providers/sagemaker/detection.d.ts +6 -6
  343. package/dist/providers/sagemaker/diagnostics.d.ts +4 -4
  344. package/dist/providers/sagemaker/parsers.d.ts +4 -4
  345. package/dist/rag/chunkers/RecursiveChunker.js +2 -2
  346. package/dist/rag/document/loaders.d.ts +6 -71
  347. package/dist/rag/document/loaders.js +5 -5
  348. package/dist/rag/graphRag/graphRAG.js +26 -9
  349. package/dist/rag/metadata/MetadataExtractorFactory.d.ts +5 -55
  350. package/dist/rag/metadata/metadataExtractor.js +6 -3
  351. package/dist/rag/pipeline/RAGPipeline.d.ts +8 -126
  352. package/dist/rag/pipeline/RAGPipeline.js +11 -11
  353. package/dist/rag/pipeline/contextAssembly.d.ts +3 -42
  354. package/dist/rag/pipeline/contextAssembly.js +6 -3
  355. package/dist/rag/reranker/RerankerFactory.d.ts +5 -60
  356. package/dist/rag/resilience/CircuitBreaker.d.ts +3 -33
  357. package/dist/rag/resilience/RetryHandler.d.ts +2 -21
  358. package/dist/rag/resilience/RetryHandler.js +6 -2
  359. package/dist/rag/retrieval/hybridSearch.d.ts +3 -41
  360. package/dist/rag/retrieval/vectorQueryTool.d.ts +2 -13
  361. package/dist/rag/retrieval/vectorQueryTool.js +4 -3
  362. package/dist/rag/types.d.ts +3 -3
  363. package/dist/sdk/toolRegistration.d.ts +2 -2
  364. package/dist/server/middleware/cache.d.ts +2 -2
  365. package/dist/server/middleware/rateLimit.d.ts +2 -2
  366. package/dist/server/routes/mcpRoutes.js +277 -249
  367. package/dist/server/routes/memoryRoutes.js +287 -281
  368. package/dist/server/utils/validation.d.ts +4 -4
  369. package/dist/services/server/ai/observability/instrumentation.d.ts +24 -2
  370. package/dist/services/server/ai/observability/instrumentation.js +12 -1
  371. package/dist/session/globalSessionState.d.ts +2 -2
  372. package/dist/telemetry/telemetryService.d.ts +2 -2
  373. package/dist/types/common.d.ts +39 -0
  374. package/dist/types/contextTypes.d.ts +255 -0
  375. package/dist/types/contextTypes.js +0 -2
  376. package/dist/types/conversation.d.ts +62 -0
  377. package/dist/types/conversationMemoryInterface.d.ts +27 -0
  378. package/dist/types/conversationMemoryInterface.js +6 -0
  379. package/dist/types/fileReferenceTypes.d.ts +222 -0
  380. package/dist/types/fileReferenceTypes.js +8 -0
  381. package/dist/types/fileTypes.d.ts +26 -3
  382. package/dist/types/generateTypes.d.ts +50 -1
  383. package/dist/types/index.d.ts +4 -5
  384. package/dist/types/index.js +8 -10
  385. package/dist/types/processorTypes.d.ts +597 -0
  386. package/dist/types/processorTypes.js +90 -0
  387. package/dist/types/ragTypes.d.ts +489 -0
  388. package/dist/types/ragTypes.js +7 -0
  389. package/dist/types/sdkTypes.d.ts +17 -18
  390. package/dist/types/streamTypes.d.ts +24 -1
  391. package/dist/utils/async/retry.d.ts +2 -2
  392. package/dist/utils/async/withTimeout.js +3 -1
  393. package/dist/utils/conversationMemory.d.ts +12 -6
  394. package/dist/utils/conversationMemory.js +91 -36
  395. package/dist/utils/errorHandling.d.ts +5 -0
  396. package/dist/utils/errorHandling.js +19 -0
  397. package/dist/utils/fileDetector.d.ts +62 -0
  398. package/dist/utils/fileDetector.js +1014 -14
  399. package/dist/utils/json/safeParse.d.ts +2 -2
  400. package/dist/utils/messageBuilder.js +806 -153
  401. package/dist/utils/modelChoices.d.ts +2 -2
  402. package/dist/utils/multimodalOptionsBuilder.d.ts +2 -1
  403. package/dist/utils/multimodalOptionsBuilder.js +1 -0
  404. package/dist/utils/pricing.d.ts +12 -0
  405. package/dist/utils/pricing.js +133 -0
  406. package/dist/utils/rateLimiter.d.ts +2 -2
  407. package/dist/utils/redis.d.ts +17 -0
  408. package/dist/utils/redis.js +105 -0
  409. package/dist/utils/sanitizers/filename.d.ts +4 -4
  410. package/dist/utils/sanitizers/svg.d.ts +2 -2
  411. package/dist/utils/thinkingConfig.d.ts +6 -6
  412. package/dist/utils/timeout.d.ts +10 -0
  413. package/dist/utils/timeout.js +15 -0
  414. package/dist/utils/tokenEstimation.d.ts +68 -0
  415. package/dist/utils/tokenEstimation.js +112 -0
  416. package/dist/utils/tokenUtils.d.ts +4 -4
  417. package/dist/utils/ttsProcessor.d.ts +2 -2
  418. package/dist/workflow/config.d.ts +104 -104
  419. package/package.json +18 -6
  420. package/dist/lib/utils/conversationMemoryUtils.d.ts +0 -25
  421. package/dist/lib/utils/conversationMemoryUtils.js +0 -138
  422. package/dist/utils/conversationMemoryUtils.d.ts +0 -25
  423. package/dist/utils/conversationMemoryUtils.js +0 -137
@@ -9,14 +9,14 @@
9
9
  * neurolink serve status
10
10
  */
11
11
  import chalk from "chalk";
12
- import ora from "ora";
13
12
  import fs from "fs";
13
+ import ora from "ora";
14
14
  import path from "path";
15
- import { logger } from "../../lib/utils/logger.js";
16
15
  import { NeuroLink } from "../../lib/neurolink.js";
17
- import { withTimeout } from "../../lib/utils/errorHandling.js";
18
- import { isProcessRunning, formatUptime, StateFileManager, } from "../utils/serverUtils.js";
19
16
  import { ConfigurationError, ServerStartError, } from "../../lib/server/errors.js";
17
+ import { withTimeout } from "../../lib/utils/errorHandling.js";
18
+ import { logger } from "../../lib/utils/logger.js";
19
+ import { formatUptime, isProcessRunning, StateFileManager, } from "../utils/serverUtils.js";
20
20
  // ============================================
21
21
  // State Management
22
22
  // ============================================
@@ -46,7 +46,10 @@ function loadConfigFile(configPath) {
46
46
  if (absolutePath.endsWith(".json")) {
47
47
  return JSON.parse(content);
48
48
  }
49
- throw new ConfigurationError("Only JSON config files are supported. Use .json extension.", { configPath, absolutePath });
49
+ throw new ConfigurationError("Only JSON config files are supported. Use .json extension.", {
50
+ configPath,
51
+ absolutePath,
52
+ });
50
53
  }
51
54
  // ============================================
52
55
  // Watch Mode Utilities
@@ -141,7 +144,7 @@ export class ServeCommandFactory {
141
144
  describe: "Start NeuroLink HTTP server with server adapters",
142
145
  builder: (yargs) => {
143
146
  return yargs
144
- .command("status", "Show server status", (yargs) => this.buildStatusOptions(yargs), (argv) => this.executeStatus(argv))
147
+ .command("status", "Show server status", (yargs) => ServeCommandFactory.buildStatusOptions(yargs), (argv) => ServeCommandFactory.executeStatus(argv))
145
148
  .option("port", {
146
149
  type: "number",
147
150
  alias: "p",
@@ -219,7 +222,7 @@ export class ServeCommandFactory {
219
222
  // If subcommand is provided (like 'status'), it will be handled by the subcommand
220
223
  // Otherwise, start the server
221
224
  if (!argv.subcommand || argv.subcommand === "serve") {
222
- await this.executeServe(argv);
225
+ await ServeCommandFactory.executeServe(argv);
223
226
  }
224
227
  },
225
228
  };
@@ -250,254 +253,324 @@ export class ServeCommandFactory {
250
253
  : ora("Starting NeuroLink server...").start();
251
254
  try {
252
255
  // Check if server is already running
253
- const existingState = loadServeState();
254
- if (existingState && isProcessRunning(existingState.pid)) {
255
- if (spinner) {
256
- spinner.fail(chalk.red(`Server already running on port ${existingState.port} (PID: ${existingState.pid})`));
257
- }
258
- logger.always(chalk.yellow("Use 'neurolink server stop' or kill the process to stop it first"));
259
- process.exit(1);
260
- }
256
+ ServeCommandFactory.guardAlreadyRunning(spinner);
261
257
  // Load config file if provided
262
- let fileConfig = {};
263
- if (argv.config) {
264
- try {
265
- fileConfig = loadConfigFile(argv.config);
266
- if (spinner) {
267
- spinner.text = `Loading config from ${argv.config}...`;
268
- }
269
- }
270
- catch (configError) {
271
- if (spinner) {
272
- spinner.fail(chalk.red("Failed to load config file"));
273
- }
274
- logger.error(chalk.red(`Error: ${configError instanceof Error ? configError.message : String(configError)}`));
275
- process.exit(1);
276
- }
277
- }
258
+ const fileConfig = ServeCommandFactory.loadFileConfig(argv, spinner);
278
259
  // Merge CLI args with file config (CLI takes precedence)
279
260
  const port = argv.port ?? fileConfig.port ?? 3000;
280
261
  const host = argv.host ?? fileConfig.host ?? "0.0.0.0";
281
262
  const framework = argv.framework ?? fileConfig.framework ?? "hono";
282
263
  const basePath = argv.basePath ?? fileConfig.basePath ?? "/api";
283
- const corsEnabled = argv.cors ?? fileConfig.cors?.enabled ?? true;
284
- // Rate limit: argv.rateLimit is a number (0 to disable, >0 for max requests)
285
- const rateLimitValue = argv.rateLimit ?? fileConfig.rateLimit?.maxRequests ?? 100;
286
- const rateLimitEnabled = rateLimitValue > 0;
287
- // Swagger/OpenAPI documentation
288
- const swaggerEnabled = argv.swagger ?? fileConfig.enableSwagger ?? false;
289
- // Create NeuroLink instance
290
- const neurolink = new NeuroLink();
291
- // Dynamically import server module
292
- const { createServer, registerAllRoutes } = await import("../../lib/server/index.js");
293
- // Build server adapter config
294
- // Default config values
295
- const defaultConfig = {
296
- cors: { enabled: true },
297
- rateLimit: { enabled: true, maxRequests: 100 },
298
- };
299
- const serverConfig = {
264
+ // Build server adapter config from merged values
265
+ const serverConfig = ServeCommandFactory.buildServerConfig(argv, fileConfig, {
300
266
  port,
301
267
  host,
302
268
  basePath,
303
- cors: {
304
- ...defaultConfig.cors,
305
- ...(fileConfig.cors || {}),
306
- // CLI flag should override config file
307
- enabled: argv.cors !== undefined
308
- ? argv.cors
309
- : (fileConfig.cors?.enabled ?? defaultConfig.cors.enabled),
310
- },
311
- rateLimit: {
312
- ...defaultConfig.rateLimit,
313
- ...(fileConfig.rateLimit || {}),
314
- // CLI flags should override config file
315
- enabled: argv.rateLimit !== undefined
316
- ? argv.rateLimit > 0
317
- : (fileConfig.rateLimit?.enabled ??
318
- defaultConfig.rateLimit.enabled),
319
- maxRequests: argv.rateLimit !== undefined
320
- ? argv.rateLimit
321
- : (fileConfig.rateLimit?.maxRequests ??
322
- defaultConfig.rateLimit.maxRequests),
323
- },
324
- bodyParser: fileConfig.bodyParser,
325
- logging: fileConfig.logging,
326
- timeout: fileConfig.timeout,
327
- enableMetrics: fileConfig.enableMetrics ?? true,
328
- enableSwagger: argv.swagger !== undefined
329
- ? argv.swagger
330
- : (fileConfig.enableSwagger ?? false),
331
- disableBuiltInHealth: true, // We register health routes separately
332
- };
269
+ });
333
270
  if (spinner) {
334
271
  spinner.text = `Creating ${framework} server...`;
335
272
  }
336
- // Create server using ServerAdapterFactory
337
- // Use a mutable reference wrapper so signal handlers always access the current server
338
- // This is necessary because watch mode replaces the server on restart
339
- const serverRef = {
340
- current: await createServer(neurolink, {
341
- framework: framework,
342
- config: serverConfig,
343
- }),
344
- };
345
- // Register all routes
346
- registerAllRoutes(serverRef.current, basePath);
347
- if (spinner) {
348
- spinner.text = "Initializing server...";
349
- }
350
- // Initialize and start with timeout
351
- await withTimeout(serverRef.current.initialize(), 30000, new ServerStartError("Server initialization timed out after 30 seconds", undefined, port, host));
352
- await withTimeout(serverRef.current.start(), 30000, new ServerStartError("Server startup timed out after 30 seconds", undefined, port, host));
353
- // Save state
354
- const state = {
355
- pid: process.pid,
356
- port,
357
- host,
273
+ // Create, register routes, initialize and start server
274
+ const serverRef = await ServeCommandFactory.createAndStartServer({ framework, serverConfig, basePath, port, host }, spinner);
275
+ // Save state and print startup banner
276
+ ServeCommandFactory.saveAndPrintStartupInfo({ argv, port, host, framework, basePath, serverConfig }, spinner);
277
+ // Set up watch mode if enabled
278
+ const stopWatcher = ServeCommandFactory.setupWatchMode(argv, {
279
+ serverRef,
358
280
  framework,
359
- startTime: new Date().toISOString(),
281
+ serverConfig,
360
282
  basePath,
361
- configFile: argv.config,
362
- };
363
- saveServeState(state);
283
+ port,
284
+ host,
285
+ });
286
+ // Register signal handlers for graceful shutdown
287
+ ServeCommandFactory.registerSignalHandlers(serverRef, stopWatcher);
288
+ }
289
+ catch (error) {
290
+ ServeCommandFactory.handleStartupError(error, argv, spinner);
291
+ }
292
+ }
293
+ // ============================================
294
+ // executeServe Helpers
295
+ // ============================================
296
+ /**
297
+ * Guard against a server that is already running. Exits the process if so.
298
+ */
299
+ static guardAlreadyRunning(spinner) {
300
+ const existingState = loadServeState();
301
+ if (existingState && isProcessRunning(existingState.pid)) {
364
302
  if (spinner) {
365
- spinner.succeed(chalk.green("NeuroLink server started successfully"));
303
+ spinner.fail(chalk.red(`Server already running on port ${existingState.port} (PID: ${existingState.pid})`));
366
304
  }
367
- const url = `http://${host === "0.0.0.0" ? "localhost" : host}:${port}`;
368
- logger.always("");
369
- logger.always(chalk.bold.cyan("NeuroLink Server"));
370
- logger.always(chalk.gray("=".repeat(50)));
371
- logger.always("");
372
- logger.always(` ${chalk.bold("URL:")} ${chalk.cyan(url)}`);
373
- logger.always(` ${chalk.bold("Framework:")} ${chalk.cyan(framework)}`);
374
- logger.always(` ${chalk.bold("Base Path:")} ${chalk.cyan(basePath)}`);
375
- logger.always(` ${chalk.bold("PID:")} ${chalk.cyan(state.pid)}`);
376
- if (argv.config) {
377
- logger.always(` ${chalk.bold("Config:")} ${chalk.cyan(argv.config)}`);
305
+ logger.always(chalk.yellow("Use 'neurolink server stop' or kill the process to stop it first"));
306
+ process.exit(1);
307
+ }
308
+ }
309
+ /**
310
+ * Load a config file if one was specified in argv. Returns empty object otherwise.
311
+ */
312
+ static loadFileConfig(argv, spinner) {
313
+ if (!argv.config) {
314
+ return {};
315
+ }
316
+ try {
317
+ const config = loadConfigFile(argv.config);
318
+ if (spinner) {
319
+ spinner.text = `Loading config from ${argv.config}...`;
378
320
  }
379
- logger.always("");
380
- logger.always(chalk.bold("Middleware:"));
381
- logger.always(` CORS: ${corsEnabled ? chalk.green("enabled") : chalk.yellow("disabled")}`);
382
- logger.always(` Rate Limit: ${rateLimitEnabled ? chalk.green(`enabled (${rateLimitValue} req/15min)`) : chalk.yellow("disabled")}`);
383
- logger.always(` Swagger: ${swaggerEnabled ? chalk.green("enabled") : chalk.yellow("disabled")}`);
384
- if (argv.watch) {
385
- logger.always(` Watch Mode: ${chalk.green("enabled")}`);
321
+ return config;
322
+ }
323
+ catch (configError) {
324
+ if (spinner) {
325
+ spinner.fail(chalk.red("Failed to load config file"));
386
326
  }
327
+ logger.error(chalk.red(`Error: ${configError instanceof Error ? configError.message : String(configError)}`));
328
+ process.exit(1);
329
+ }
330
+ }
331
+ /**
332
+ * Merge CLI args with file config to produce a ServerAdapterConfig.
333
+ */
334
+ static buildServerConfig(argv, fileConfig, merged) {
335
+ const defaultConfig = {
336
+ cors: { enabled: true },
337
+ rateLimit: { enabled: true, maxRequests: 100 },
338
+ };
339
+ return {
340
+ port: merged.port,
341
+ host: merged.host,
342
+ basePath: merged.basePath,
343
+ cors: {
344
+ ...defaultConfig.cors,
345
+ ...(fileConfig.cors || {}),
346
+ enabled: argv.cors !== undefined
347
+ ? argv.cors
348
+ : (fileConfig.cors?.enabled ?? defaultConfig.cors.enabled),
349
+ },
350
+ rateLimit: {
351
+ ...defaultConfig.rateLimit,
352
+ ...(fileConfig.rateLimit || {}),
353
+ enabled: argv.rateLimit !== undefined
354
+ ? argv.rateLimit > 0
355
+ : (fileConfig.rateLimit?.enabled ??
356
+ defaultConfig.rateLimit.enabled),
357
+ maxRequests: argv.rateLimit !== undefined
358
+ ? argv.rateLimit
359
+ : (fileConfig.rateLimit?.maxRequests ??
360
+ defaultConfig.rateLimit.maxRequests),
361
+ },
362
+ bodyParser: fileConfig.bodyParser,
363
+ logging: fileConfig.logging,
364
+ timeout: fileConfig.timeout,
365
+ enableMetrics: fileConfig.enableMetrics ?? true,
366
+ enableSwagger: argv.swagger !== undefined
367
+ ? argv.swagger
368
+ : (fileConfig.enableSwagger ?? false),
369
+ disableBuiltInHealth: true, // We register health routes separately
370
+ };
371
+ }
372
+ /**
373
+ * Create server, register routes, initialize and start it.
374
+ * Returns a mutable reference wrapper so signal handlers always access the current server.
375
+ */
376
+ static async createAndStartServer(opts, spinner) {
377
+ const { createServer, registerAllRoutes } = await import("../../lib/server/index.js");
378
+ const neurolink = new NeuroLink();
379
+ const serverRef = {
380
+ current: await createServer(neurolink, {
381
+ framework: opts.framework,
382
+ config: opts.serverConfig,
383
+ }),
384
+ };
385
+ registerAllRoutes(serverRef.current, opts.basePath);
386
+ if (spinner) {
387
+ spinner.text = "Initializing server...";
388
+ }
389
+ await withTimeout(serverRef.current.initialize(), 30000, new ServerStartError("Server initialization timed out after 30 seconds", undefined, opts.port, opts.host));
390
+ await withTimeout(serverRef.current.start(), 30000, new ServerStartError("Server startup timed out after 30 seconds", undefined, opts.port, opts.host));
391
+ return serverRef;
392
+ }
393
+ /**
394
+ * Save server state and print the startup info banner.
395
+ */
396
+ static saveAndPrintStartupInfo(opts, spinner) {
397
+ const state = {
398
+ pid: process.pid,
399
+ port: opts.port,
400
+ host: opts.host,
401
+ framework: opts.framework,
402
+ startTime: new Date().toISOString(),
403
+ basePath: opts.basePath,
404
+ configFile: opts.argv.config,
405
+ };
406
+ saveServeState(state);
407
+ if (spinner) {
408
+ spinner.succeed(chalk.green("NeuroLink server started successfully"));
409
+ }
410
+ const url = `http://${opts.host === "0.0.0.0" ? "localhost" : opts.host}:${opts.port}`;
411
+ const corsEnabled = opts.argv.cors ?? opts.serverConfig.cors?.enabled ?? true;
412
+ const rateLimitValue = opts.argv.rateLimit ?? opts.serverConfig.rateLimit?.maxRequests ?? 100;
413
+ const rateLimitEnabled = rateLimitValue > 0;
414
+ const swaggerEnabled = opts.argv.swagger ?? opts.serverConfig.enableSwagger ?? false;
415
+ ServeCommandFactory.printStartupBanner({
416
+ url,
417
+ framework: opts.framework,
418
+ basePath: opts.basePath,
419
+ pid: state.pid,
420
+ configFile: opts.argv.config,
421
+ corsEnabled,
422
+ rateLimitEnabled,
423
+ rateLimitValue,
424
+ swaggerEnabled,
425
+ watchEnabled: opts.argv.watch ?? false,
426
+ });
427
+ return state;
428
+ }
429
+ /**
430
+ * Print the server startup banner with server info, middleware status and endpoints.
431
+ */
432
+ static printStartupBanner(info) {
433
+ logger.always("");
434
+ logger.always(chalk.bold.cyan("NeuroLink Server"));
435
+ logger.always(chalk.gray("=".repeat(50)));
436
+ logger.always("");
437
+ logger.always(` ${chalk.bold("URL:")} ${chalk.cyan(info.url)}`);
438
+ logger.always(` ${chalk.bold("Framework:")} ${chalk.cyan(info.framework)}`);
439
+ logger.always(` ${chalk.bold("Base Path:")} ${chalk.cyan(info.basePath)}`);
440
+ logger.always(` ${chalk.bold("PID:")} ${chalk.cyan(info.pid)}`);
441
+ if (info.configFile) {
442
+ logger.always(` ${chalk.bold("Config:")} ${chalk.cyan(info.configFile)}`);
443
+ }
444
+ logger.always("");
445
+ logger.always(chalk.bold("Middleware:"));
446
+ logger.always(` CORS: ${info.corsEnabled ? chalk.green("enabled") : chalk.yellow("disabled")}`);
447
+ logger.always(` Rate Limit: ${info.rateLimitEnabled ? chalk.green(`enabled (${info.rateLimitValue} req/15min)`) : chalk.yellow("disabled")}`);
448
+ logger.always(` Swagger: ${info.swaggerEnabled ? chalk.green("enabled") : chalk.yellow("disabled")}`);
449
+ if (info.watchEnabled) {
450
+ logger.always(` Watch Mode: ${chalk.green("enabled")}`);
451
+ }
452
+ logger.always("");
453
+ logger.always(chalk.bold("Available Endpoints:"));
454
+ logger.always(chalk.gray(" Health & Monitoring:"));
455
+ logger.always(` ${chalk.green("GET")} ${info.basePath}/health`);
456
+ logger.always(` ${chalk.green("GET")} ${info.basePath}/ready`);
457
+ logger.always(` ${chalk.green("GET")} ${info.basePath}/metrics`);
458
+ logger.always("");
459
+ logger.always(chalk.gray(" Agent API:"));
460
+ logger.always(` ${chalk.blue("POST")} ${info.basePath}/agent/execute`);
461
+ logger.always(` ${chalk.blue("POST")} ${info.basePath}/agent/stream`);
462
+ logger.always(` ${chalk.green("GET")} ${info.basePath}/agent/providers`);
463
+ logger.always("");
464
+ logger.always(chalk.gray(" Tools & MCP:"));
465
+ logger.always(` ${chalk.green("GET")} ${info.basePath}/tools`);
466
+ logger.always(` ${chalk.blue("POST")} ${info.basePath}/tools/:name/execute`);
467
+ logger.always(` ${chalk.green("GET")} ${info.basePath}/mcp/servers`);
468
+ logger.always("");
469
+ logger.always(chalk.gray(" Memory:"));
470
+ logger.always(` ${chalk.green("GET")} ${info.basePath}/memory/sessions`);
471
+ logger.always(` ${chalk.green("GET")} ${info.basePath}/memory/sessions/:id`);
472
+ if (info.swaggerEnabled) {
387
473
  logger.always("");
388
- logger.always(chalk.bold("Available Endpoints:"));
389
- logger.always(chalk.gray(" Health & Monitoring:"));
390
- logger.always(` ${chalk.green("GET")} ${basePath}/health`);
391
- logger.always(` ${chalk.green("GET")} ${basePath}/ready`);
392
- logger.always(` ${chalk.green("GET")} ${basePath}/metrics`);
393
- logger.always("");
394
- logger.always(chalk.gray(" Agent API:"));
395
- logger.always(` ${chalk.blue("POST")} ${basePath}/agent/execute`);
396
- logger.always(` ${chalk.blue("POST")} ${basePath}/agent/stream`);
397
- logger.always(` ${chalk.green("GET")} ${basePath}/agent/providers`);
398
- logger.always("");
399
- logger.always(chalk.gray(" Tools & MCP:"));
400
- logger.always(` ${chalk.green("GET")} ${basePath}/tools`);
401
- logger.always(` ${chalk.blue("POST")} ${basePath}/tools/:name/execute`);
402
- logger.always(` ${chalk.green("GET")} ${basePath}/mcp/servers`);
403
- logger.always("");
404
- logger.always(chalk.gray(" Memory:"));
405
- logger.always(` ${chalk.green("GET")} ${basePath}/memory/sessions`);
406
- logger.always(` ${chalk.green("GET")} ${basePath}/memory/sessions/:id`);
407
- if (swaggerEnabled) {
408
- logger.always("");
409
- logger.always(chalk.gray(" OpenAPI Documentation:"));
410
- logger.always(` ${chalk.green("GET")} ${basePath}/openapi.json`);
411
- logger.always(` ${chalk.cyan("INFO")} Swagger UI available at ${url}${basePath}/docs`);
474
+ logger.always(chalk.gray(" OpenAPI Documentation:"));
475
+ logger.always(` ${chalk.green("GET")} ${info.basePath}/openapi.json`);
476
+ logger.always(` ${chalk.cyan("INFO")} Swagger UI available at ${info.url}${info.basePath}/docs`);
477
+ }
478
+ logger.always("");
479
+ logger.always(chalk.gray("Press Ctrl+C to stop the server"));
480
+ logger.always("");
481
+ }
482
+ /**
483
+ * Set up watch mode if enabled. Returns the stop-watcher function, or null if not enabled.
484
+ */
485
+ static setupWatchMode(argv, ctx) {
486
+ if (!argv.watch) {
487
+ return null;
488
+ }
489
+ const restartServer = async () => {
490
+ try {
491
+ // Stop current server with timeout
492
+ await withTimeout(ctx.serverRef.current.stop(), 30000, new ServerStartError("Server stop timed out during restart", undefined, ctx.port, ctx.host));
493
+ // Re-import server module with cache busting for watch mode
494
+ const timestamp = Date.now();
495
+ const { createServer: createNewServer, registerAllRoutes: registerNewRoutes, } = await import(`../../lib/server/index.js?t=${timestamp}`);
496
+ // Create new server
497
+ const newServer = await createNewServer(new NeuroLink(), {
498
+ framework: ctx.framework,
499
+ config: ctx.serverConfig,
500
+ });
501
+ registerNewRoutes(newServer, ctx.basePath);
502
+ // Initialize and start with timeouts
503
+ await withTimeout(newServer.initialize(), 30000, new ServerStartError("Server initialization timed out during restart", undefined, ctx.port, ctx.host));
504
+ await withTimeout(newServer.start(), 30000, new ServerStartError("Server startup timed out during restart", undefined, ctx.port, ctx.host));
505
+ // Update the reference so signal handlers use the new server instance
506
+ ctx.serverRef.current = newServer;
507
+ logger.always(chalk.green("Server restarted successfully"));
412
508
  }
413
- logger.always("");
414
- logger.always(chalk.gray("Press Ctrl+C to stop the server"));
415
- logger.always("");
416
- // Set up watch mode if enabled
417
- let stopWatcher = null;
418
- if (argv.watch) {
419
- const restartServer = async () => {
420
- try {
421
- // Stop current server with timeout
422
- await withTimeout(serverRef.current.stop(), 30000, new ServerStartError("Server stop timed out during restart", undefined, port, host));
423
- // Re-import server module with cache busting for watch mode
424
- // Append timestamp query to force ESM to re-evaluate the module
425
- const timestamp = Date.now();
426
- const { createServer: createNewServer, registerAllRoutes: registerNewRoutes, } = await import(`../../lib/server/index.js?t=${timestamp}`);
427
- // Create new server
428
- const newServer = await createNewServer(new NeuroLink(), {
429
- framework: framework,
430
- config: serverConfig,
431
- });
432
- registerNewRoutes(newServer, basePath);
433
- // Initialize and start with timeouts
434
- await withTimeout(newServer.initialize(), 30000, new ServerStartError("Server initialization timed out during restart", undefined, port, host));
435
- await withTimeout(newServer.start(), 30000, new ServerStartError("Server startup timed out during restart", undefined, port, host));
436
- // Update the reference so signal handlers use the new server instance
437
- serverRef.current = newServer;
438
- logger.always(chalk.green("Server restarted successfully"));
439
- }
440
- catch (restartError) {
441
- logger.error(chalk.red(`Error restarting server: ${restartError instanceof Error ? restartError.message : String(restartError)}`));
442
- }
443
- };
444
- stopWatcher = createFileWatcher(restartServer, argv.quiet ?? false);
445
- logger.always(chalk.gray("Watching for file changes in src/ and lib/..."));
446
- logger.always("");
509
+ catch (restartError) {
510
+ logger.error(chalk.red(`Error restarting server: ${restartError instanceof Error ? restartError.message : String(restartError)}`));
447
511
  }
448
- // Keep process running and handle graceful shutdown
449
- // Signal handlers access serverRef.current to always get the latest server instance
450
- process.on("SIGINT", async () => {
451
- logger.always("");
452
- logger.always(chalk.yellow("Shutting down server..."));
453
- try {
454
- // Stop file watcher if active
455
- if (stopWatcher) {
456
- stopWatcher();
457
- }
458
- await serverRef.current.stop();
459
- clearServeState();
460
- logger.always(chalk.green("Server stopped gracefully"));
461
- process.exit(0);
462
- }
463
- catch (error) {
464
- logger.error(chalk.red(`Error stopping server: ${error instanceof Error ? error.message : String(error)}`));
465
- process.exit(1);
466
- }
467
- });
468
- process.on("SIGTERM", async () => {
469
- try {
470
- if (stopWatcher) {
471
- stopWatcher();
472
- }
473
- await withTimeout(serverRef.current.stop(), 30000, new Error("Server stop timed out during SIGTERM"));
474
- clearServeState();
475
- process.exit(0);
512
+ };
513
+ const stopWatcher = createFileWatcher(restartServer, argv.quiet ?? false);
514
+ logger.always(chalk.gray("Watching for file changes in src/ and lib/..."));
515
+ logger.always("");
516
+ return stopWatcher;
517
+ }
518
+ /**
519
+ * Register SIGINT and SIGTERM handlers for graceful shutdown.
520
+ */
521
+ static registerSignalHandlers(serverRef, stopWatcher) {
522
+ process.on("SIGINT", async () => {
523
+ logger.always("");
524
+ logger.always(chalk.yellow("Shutting down server..."));
525
+ try {
526
+ if (stopWatcher) {
527
+ stopWatcher();
476
528
  }
477
- catch (error) {
478
- logger.error(chalk.red(`Error stopping server: ${error instanceof Error ? error.message : String(error)}`));
479
- clearServeState();
480
- process.exit(1);
529
+ await serverRef.current.stop();
530
+ clearServeState();
531
+ logger.always(chalk.green("Server stopped gracefully"));
532
+ process.exit(0);
533
+ }
534
+ catch (error) {
535
+ logger.error(chalk.red(`Error stopping server: ${error instanceof Error ? error.message : String(error)}`));
536
+ process.exit(1);
537
+ }
538
+ });
539
+ process.on("SIGTERM", async () => {
540
+ try {
541
+ if (stopWatcher) {
542
+ stopWatcher();
481
543
  }
482
- });
483
- }
484
- catch (error) {
485
- if (spinner) {
486
- spinner.fail(chalk.red("Failed to start server"));
544
+ await withTimeout(serverRef.current.stop(), 30000, new Error("Server stop timed out during SIGTERM"));
545
+ clearServeState();
546
+ process.exit(0);
487
547
  }
488
- logger.error(chalk.red(`Error: ${error instanceof Error ? error.message : String(error)}`));
489
- if (argv.debug && error instanceof Error && error.stack) {
490
- logger.error(chalk.gray(error.stack));
548
+ catch (error) {
549
+ logger.error(chalk.red(`Error stopping server: ${error instanceof Error ? error.message : String(error)}`));
550
+ clearServeState();
551
+ process.exit(1);
491
552
  }
492
- logger.always("");
493
- logger.always(chalk.bold("Troubleshooting:"));
494
- logger.always(" 1. Check if the port is already in use");
495
- logger.always(" 2. Verify the framework is installed (npm install hono/express/fastify/koa)");
496
- logger.always(" 3. Check your config file format if using --config");
497
- logger.always(" 4. Run with --debug for more information");
498
- logger.always("");
499
- process.exit(1);
553
+ });
554
+ }
555
+ /**
556
+ * Handle errors during server startup: print error, troubleshooting tips, and exit.
557
+ */
558
+ static handleStartupError(error, argv, spinner) {
559
+ if (spinner) {
560
+ spinner.fail(chalk.red("Failed to start server"));
561
+ }
562
+ logger.error(chalk.red(`Error: ${error instanceof Error ? error.message : String(error)}`));
563
+ if (argv.debug && error instanceof Error && error.stack) {
564
+ logger.error(chalk.gray(error.stack));
500
565
  }
566
+ logger.always("");
567
+ logger.always(chalk.bold("Troubleshooting:"));
568
+ logger.always(" 1. Check if the port is already in use");
569
+ logger.always(" 2. Verify the framework is installed (npm install hono/express/fastify/koa)");
570
+ logger.always(" 3. Check your config file format if using --config");
571
+ logger.always(" 4. Run with --debug for more information");
572
+ logger.always("");
573
+ process.exit(1);
501
574
  }
502
575
  static async executeStatus(argv) {
503
576
  try {
@@ -8,9 +8,9 @@
8
8
  *
9
9
  * Follows the same UX patterns as setup-openai and setup-google-ai
10
10
  */
11
- interface AnthropicSetupArgv {
11
+ type AnthropicSetupArgv = {
12
12
  check?: boolean;
13
13
  nonInteractive?: boolean;
14
- }
14
+ };
15
15
  export declare function handleAnthropicSetup(argv: AnthropicSetupArgv): Promise<void>;
16
16
  export {};
@@ -9,9 +9,9 @@
9
9
  *
10
10
  * Follows the same UX patterns as other setup commands
11
11
  */
12
- interface AzureSetupArgv {
12
+ type AzureSetupArgv = {
13
13
  check?: boolean;
14
14
  nonInteractive?: boolean;
15
- }
15
+ };
16
16
  export declare function handleAzureSetup(argv: AzureSetupArgv): Promise<void>;
17
17
  export {};
@@ -5,9 +5,9 @@
5
5
  * Checks for AWS_ACCESS_KEY_ID and AWS_SECRET_ACCESS_KEY
6
6
  * Auto-detects AWS CLI configuration, prompts for missing config, updates .env safely
7
7
  */
8
- interface BedrockSetupArgv {
8
+ type BedrockSetupArgv = {
9
9
  check?: boolean;
10
10
  nonInteractive?: boolean;
11
- }
11
+ };
12
12
  export declare function handleBedrockSetup(argv: BedrockSetupArgv): Promise<void>;
13
13
  export {};
@@ -10,9 +10,9 @@
10
10
  * All methods require GOOGLE_VERTEX_PROJECT
11
11
  * Optional: GOOGLE_VERTEX_LOCATION (defaults to 'us-central1')
12
12
  */
13
- interface GCPSetupArgv {
13
+ type GCPSetupArgv = {
14
14
  check?: boolean;
15
15
  nonInteractive?: boolean;
16
- }
16
+ };
17
17
  export declare function handleGCPSetup(argv: GCPSetupArgv): Promise<void>;
18
18
  export {};