@juspay/neurolink 9.5.3 → 9.6.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 (356) hide show
  1. package/CHANGELOG.md +10 -0
  2. package/README.md +29 -25
  3. package/dist/agent/directTools.d.ts +5 -5
  4. package/dist/cli/commands/config.d.ts +9 -9
  5. package/dist/cli/commands/serve.d.ts +37 -0
  6. package/dist/cli/commands/serve.js +302 -229
  7. package/dist/cli/commands/setup-anthropic.d.ts +2 -2
  8. package/dist/cli/commands/setup-azure.d.ts +2 -2
  9. package/dist/cli/commands/setup-bedrock.d.ts +2 -2
  10. package/dist/cli/commands/setup-gcp.d.ts +2 -2
  11. package/dist/cli/commands/setup-google-ai.d.ts +2 -2
  12. package/dist/cli/commands/setup-huggingface.d.ts +2 -2
  13. package/dist/cli/commands/setup-mistral.d.ts +2 -2
  14. package/dist/cli/commands/setup-openai.d.ts +2 -2
  15. package/dist/cli/commands/setup.d.ts +2 -2
  16. package/dist/cli/factories/commandFactory.js +16 -2
  17. package/dist/cli/loop/optionsSchema.d.ts +2 -2
  18. package/dist/cli/loop/session.d.ts +4 -0
  19. package/dist/cli/loop/session.js +49 -4
  20. package/dist/cli/utils/interactiveSetup.d.ts +4 -4
  21. package/dist/config/conversationMemory.d.ts +2 -0
  22. package/dist/config/conversationMemory.js +5 -5
  23. package/dist/constants/contextWindows.d.ts +46 -0
  24. package/dist/constants/contextWindows.js +156 -0
  25. package/dist/context/budgetChecker.d.ts +18 -0
  26. package/dist/context/budgetChecker.js +71 -0
  27. package/dist/context/contextCompactor.d.ts +22 -0
  28. package/dist/context/contextCompactor.js +106 -0
  29. package/dist/context/effectiveHistory.d.ts +52 -0
  30. package/dist/context/effectiveHistory.js +105 -0
  31. package/dist/context/errorDetection.d.ts +14 -0
  32. package/dist/context/errorDetection.js +124 -0
  33. package/dist/context/fileSummarizationService.d.ts +54 -0
  34. package/dist/context/fileSummarizationService.js +255 -0
  35. package/dist/context/fileSummarizer.d.ts +56 -0
  36. package/dist/context/fileSummarizer.js +145 -0
  37. package/dist/context/fileTokenBudget.d.ts +53 -0
  38. package/dist/context/fileTokenBudget.js +127 -0
  39. package/dist/context/prompts/summarizationPrompt.d.ts +17 -0
  40. package/dist/context/prompts/summarizationPrompt.js +110 -0
  41. package/dist/context/stages/fileReadDeduplicator.d.ts +10 -0
  42. package/dist/context/stages/fileReadDeduplicator.js +66 -0
  43. package/dist/context/stages/slidingWindowTruncator.d.ts +11 -0
  44. package/dist/context/stages/slidingWindowTruncator.js +42 -0
  45. package/dist/context/stages/structuredSummarizer.d.ts +10 -0
  46. package/dist/context/stages/structuredSummarizer.js +49 -0
  47. package/dist/context/stages/toolOutputPruner.d.ts +10 -0
  48. package/dist/context/stages/toolOutputPruner.js +52 -0
  49. package/dist/context/summarizationEngine.d.ts +45 -0
  50. package/dist/context/summarizationEngine.js +110 -0
  51. package/dist/context/toolOutputLimits.d.ts +17 -0
  52. package/dist/context/toolOutputLimits.js +84 -0
  53. package/dist/context/toolPairRepair.d.ts +16 -0
  54. package/dist/context/toolPairRepair.js +66 -0
  55. package/dist/core/conversationMemoryManager.d.ts +5 -15
  56. package/dist/core/conversationMemoryManager.js +15 -75
  57. package/dist/core/modules/MessageBuilder.d.ts +1 -1
  58. package/dist/core/modules/MessageBuilder.js +2 -0
  59. package/dist/core/modules/TelemetryHandler.d.ts +2 -3
  60. package/dist/core/modules/TelemetryHandler.js +3 -3
  61. package/dist/core/modules/ToolsManager.d.ts +2 -2
  62. package/dist/core/redisConversationMemoryManager.d.ts +8 -14
  63. package/dist/core/redisConversationMemoryManager.js +69 -78
  64. package/dist/factories/providerFactory.d.ts +2 -2
  65. package/dist/files/fileReferenceRegistry.d.ts +276 -0
  66. package/dist/files/fileReferenceRegistry.js +1543 -0
  67. package/dist/files/fileTools.d.ts +423 -0
  68. package/dist/files/fileTools.js +449 -0
  69. package/dist/files/index.d.ts +14 -0
  70. package/dist/files/index.js +13 -0
  71. package/dist/files/streamingReader.d.ts +93 -0
  72. package/dist/files/streamingReader.js +321 -0
  73. package/dist/files/types.d.ts +23 -0
  74. package/dist/files/types.js +23 -0
  75. package/dist/image-gen/imageGenTools.d.ts +2 -2
  76. package/dist/image-gen/types.d.ts +12 -12
  77. package/dist/lib/agent/directTools.d.ts +7 -7
  78. package/dist/lib/config/conversationMemory.d.ts +2 -0
  79. package/dist/lib/config/conversationMemory.js +5 -5
  80. package/dist/lib/constants/contextWindows.d.ts +46 -0
  81. package/dist/lib/constants/contextWindows.js +157 -0
  82. package/dist/lib/context/budgetChecker.d.ts +18 -0
  83. package/dist/lib/context/budgetChecker.js +72 -0
  84. package/dist/lib/context/contextCompactor.d.ts +22 -0
  85. package/dist/lib/context/contextCompactor.js +107 -0
  86. package/dist/lib/context/effectiveHistory.d.ts +52 -0
  87. package/dist/lib/context/effectiveHistory.js +106 -0
  88. package/dist/lib/context/errorDetection.d.ts +14 -0
  89. package/dist/lib/context/errorDetection.js +125 -0
  90. package/dist/lib/context/fileSummarizationService.d.ts +54 -0
  91. package/dist/lib/context/fileSummarizationService.js +256 -0
  92. package/dist/lib/context/fileSummarizer.d.ts +56 -0
  93. package/dist/lib/context/fileSummarizer.js +146 -0
  94. package/dist/lib/context/fileTokenBudget.d.ts +53 -0
  95. package/dist/lib/context/fileTokenBudget.js +128 -0
  96. package/dist/lib/context/prompts/summarizationPrompt.d.ts +17 -0
  97. package/dist/lib/context/prompts/summarizationPrompt.js +111 -0
  98. package/dist/lib/context/stages/fileReadDeduplicator.d.ts +10 -0
  99. package/dist/lib/context/stages/fileReadDeduplicator.js +67 -0
  100. package/dist/lib/context/stages/slidingWindowTruncator.d.ts +11 -0
  101. package/dist/lib/context/stages/slidingWindowTruncator.js +43 -0
  102. package/dist/lib/context/stages/structuredSummarizer.d.ts +10 -0
  103. package/dist/lib/context/stages/structuredSummarizer.js +50 -0
  104. package/dist/lib/context/stages/toolOutputPruner.d.ts +10 -0
  105. package/dist/lib/context/stages/toolOutputPruner.js +53 -0
  106. package/dist/lib/context/summarizationEngine.d.ts +45 -0
  107. package/dist/lib/context/summarizationEngine.js +111 -0
  108. package/dist/lib/context/toolOutputLimits.d.ts +17 -0
  109. package/dist/lib/context/toolOutputLimits.js +85 -0
  110. package/dist/lib/context/toolPairRepair.d.ts +16 -0
  111. package/dist/lib/context/toolPairRepair.js +67 -0
  112. package/dist/lib/core/conversationMemoryManager.d.ts +5 -15
  113. package/dist/lib/core/conversationMemoryManager.js +15 -75
  114. package/dist/lib/core/modules/MessageBuilder.d.ts +1 -1
  115. package/dist/lib/core/modules/MessageBuilder.js +2 -0
  116. package/dist/lib/core/modules/TelemetryHandler.d.ts +2 -3
  117. package/dist/lib/core/modules/TelemetryHandler.js +3 -3
  118. package/dist/lib/core/modules/ToolsManager.d.ts +2 -2
  119. package/dist/lib/core/redisConversationMemoryManager.d.ts +8 -14
  120. package/dist/lib/core/redisConversationMemoryManager.js +69 -78
  121. package/dist/lib/factories/providerFactory.d.ts +2 -2
  122. package/dist/lib/files/fileReferenceRegistry.d.ts +276 -0
  123. package/dist/lib/files/fileReferenceRegistry.js +1544 -0
  124. package/dist/lib/files/fileTools.d.ts +423 -0
  125. package/dist/lib/files/fileTools.js +450 -0
  126. package/dist/lib/files/index.d.ts +14 -0
  127. package/dist/lib/files/index.js +14 -0
  128. package/dist/lib/files/streamingReader.d.ts +93 -0
  129. package/dist/lib/files/streamingReader.js +322 -0
  130. package/dist/lib/files/types.d.ts +23 -0
  131. package/dist/lib/files/types.js +24 -0
  132. package/dist/lib/image-gen/imageGenTools.d.ts +2 -2
  133. package/dist/lib/image-gen/types.d.ts +12 -12
  134. package/dist/lib/memory/mem0Initializer.d.ts +2 -2
  135. package/dist/lib/neurolink.d.ts +61 -2
  136. package/dist/lib/neurolink.js +619 -307
  137. package/dist/lib/processors/archive/ArchiveProcessor.d.ts +327 -0
  138. package/dist/lib/processors/archive/ArchiveProcessor.js +1309 -0
  139. package/dist/lib/processors/archive/index.d.ts +33 -0
  140. package/dist/lib/processors/archive/index.js +43 -0
  141. package/dist/lib/processors/base/types.d.ts +70 -64
  142. package/dist/lib/processors/base/types.js +6 -0
  143. package/dist/lib/processors/cli/fileProcessorCli.d.ts +8 -8
  144. package/dist/lib/processors/cli/fileProcessorCli.js +5 -5
  145. package/dist/lib/processors/config/mimeTypes.js +25 -0
  146. package/dist/lib/processors/config/sizeLimits.d.ts +52 -40
  147. package/dist/lib/processors/config/sizeLimits.js +56 -44
  148. package/dist/lib/processors/document/ExcelProcessor.d.ts +14 -0
  149. package/dist/lib/processors/document/ExcelProcessor.js +72 -1
  150. package/dist/lib/processors/document/PptxProcessor.d.ts +63 -0
  151. package/dist/lib/processors/document/PptxProcessor.js +158 -0
  152. package/dist/lib/processors/document/index.d.ts +1 -0
  153. package/dist/lib/processors/document/index.js +6 -0
  154. package/dist/lib/processors/errors/FileErrorCode.d.ts +2 -2
  155. package/dist/lib/processors/errors/errorHelpers.d.ts +2 -2
  156. package/dist/lib/processors/errors/errorSerializer.d.ts +4 -4
  157. package/dist/lib/processors/index.d.ts +8 -2
  158. package/dist/lib/processors/index.js +5 -2
  159. package/dist/lib/processors/integration/FileProcessorIntegration.d.ts +8 -8
  160. package/dist/lib/processors/integration/FileProcessorIntegration.js +7 -7
  161. package/dist/lib/processors/media/AudioProcessor.d.ts +328 -0
  162. package/dist/lib/processors/media/AudioProcessor.js +708 -0
  163. package/dist/lib/processors/media/VideoProcessor.d.ts +350 -0
  164. package/dist/lib/processors/media/VideoProcessor.js +992 -0
  165. package/dist/lib/processors/media/index.d.ts +27 -0
  166. package/dist/lib/processors/media/index.js +37 -0
  167. package/dist/lib/processors/registry/ProcessorRegistry.d.ts +19 -5
  168. package/dist/lib/processors/registry/ProcessorRegistry.js +103 -8
  169. package/dist/lib/processors/registry/index.d.ts +1 -1
  170. package/dist/lib/processors/registry/index.js +1 -1
  171. package/dist/lib/processors/registry/types.d.ts +2 -2
  172. package/dist/lib/providers/googleAiStudio.d.ts +34 -0
  173. package/dist/lib/providers/googleAiStudio.js +267 -397
  174. package/dist/lib/providers/googleVertex.d.ts +55 -1
  175. package/dist/lib/providers/googleVertex.js +452 -719
  176. package/dist/lib/providers/sagemaker/detection.d.ts +6 -6
  177. package/dist/lib/providers/sagemaker/diagnostics.d.ts +4 -4
  178. package/dist/lib/providers/sagemaker/parsers.d.ts +4 -4
  179. package/dist/lib/rag/chunkers/RecursiveChunker.js +2 -2
  180. package/dist/lib/rag/document/loaders.d.ts +6 -71
  181. package/dist/lib/rag/document/loaders.js +5 -5
  182. package/dist/lib/rag/graphRag/graphRAG.js +26 -9
  183. package/dist/lib/rag/metadata/MetadataExtractorFactory.d.ts +5 -55
  184. package/dist/lib/rag/metadata/metadataExtractor.js +6 -3
  185. package/dist/lib/rag/pipeline/RAGPipeline.d.ts +8 -126
  186. package/dist/lib/rag/pipeline/RAGPipeline.js +11 -11
  187. package/dist/lib/rag/pipeline/contextAssembly.d.ts +3 -42
  188. package/dist/lib/rag/pipeline/contextAssembly.js +6 -3
  189. package/dist/lib/rag/reranker/RerankerFactory.d.ts +5 -60
  190. package/dist/lib/rag/resilience/CircuitBreaker.d.ts +3 -33
  191. package/dist/lib/rag/resilience/RetryHandler.d.ts +2 -21
  192. package/dist/lib/rag/retrieval/hybridSearch.d.ts +3 -41
  193. package/dist/lib/rag/retrieval/vectorQueryTool.d.ts +2 -13
  194. package/dist/lib/rag/retrieval/vectorQueryTool.js +4 -3
  195. package/dist/lib/rag/types.d.ts +3 -3
  196. package/dist/lib/sdk/toolRegistration.d.ts +2 -2
  197. package/dist/lib/server/middleware/cache.d.ts +2 -2
  198. package/dist/lib/server/middleware/rateLimit.d.ts +2 -2
  199. package/dist/lib/server/routes/mcpRoutes.js +277 -249
  200. package/dist/lib/server/routes/memoryRoutes.js +287 -281
  201. package/dist/lib/server/utils/validation.d.ts +10 -10
  202. package/dist/lib/session/globalSessionState.d.ts +2 -2
  203. package/dist/lib/telemetry/telemetryService.d.ts +2 -2
  204. package/dist/lib/types/common.d.ts +39 -0
  205. package/dist/lib/types/contextTypes.d.ts +255 -0
  206. package/dist/lib/types/contextTypes.js +0 -2
  207. package/dist/lib/types/conversation.d.ts +62 -0
  208. package/dist/lib/types/conversationMemoryInterface.d.ts +27 -0
  209. package/dist/lib/types/conversationMemoryInterface.js +7 -0
  210. package/dist/lib/types/fileReferenceTypes.d.ts +222 -0
  211. package/dist/lib/types/fileReferenceTypes.js +9 -0
  212. package/dist/lib/types/fileTypes.d.ts +26 -3
  213. package/dist/lib/types/generateTypes.d.ts +22 -1
  214. package/dist/lib/types/index.d.ts +4 -5
  215. package/dist/lib/types/index.js +8 -10
  216. package/dist/lib/types/modelTypes.d.ts +2 -2
  217. package/dist/lib/types/processorTypes.d.ts +597 -0
  218. package/dist/lib/types/processorTypes.js +91 -0
  219. package/dist/lib/types/ragTypes.d.ts +481 -0
  220. package/dist/lib/types/ragTypes.js +8 -0
  221. package/dist/lib/types/sdkTypes.d.ts +17 -18
  222. package/dist/lib/types/streamTypes.d.ts +11 -1
  223. package/dist/lib/utils/async/retry.d.ts +2 -2
  224. package/dist/lib/utils/async/withTimeout.js +3 -1
  225. package/dist/lib/utils/conversationMemory.d.ts +12 -6
  226. package/dist/lib/utils/conversationMemory.js +76 -36
  227. package/dist/lib/utils/fileDetector.d.ts +62 -0
  228. package/dist/lib/utils/fileDetector.js +1014 -14
  229. package/dist/lib/utils/json/safeParse.d.ts +2 -2
  230. package/dist/lib/utils/messageBuilder.js +806 -153
  231. package/dist/lib/utils/modelChoices.d.ts +2 -2
  232. package/dist/lib/utils/multimodalOptionsBuilder.d.ts +2 -1
  233. package/dist/lib/utils/multimodalOptionsBuilder.js +1 -0
  234. package/dist/lib/utils/rateLimiter.d.ts +2 -2
  235. package/dist/lib/utils/sanitizers/filename.d.ts +4 -4
  236. package/dist/lib/utils/sanitizers/svg.d.ts +2 -2
  237. package/dist/lib/utils/thinkingConfig.d.ts +6 -6
  238. package/dist/lib/utils/tokenEstimation.d.ts +68 -0
  239. package/dist/lib/utils/tokenEstimation.js +113 -0
  240. package/dist/lib/utils/tokenUtils.d.ts +4 -4
  241. package/dist/lib/utils/ttsProcessor.d.ts +2 -2
  242. package/dist/lib/workflow/config.d.ts +150 -150
  243. package/dist/memory/mem0Initializer.d.ts +2 -2
  244. package/dist/neurolink.d.ts +61 -2
  245. package/dist/neurolink.js +619 -307
  246. package/dist/processors/archive/ArchiveProcessor.d.ts +327 -0
  247. package/dist/processors/archive/ArchiveProcessor.js +1308 -0
  248. package/dist/processors/archive/index.d.ts +33 -0
  249. package/dist/processors/archive/index.js +42 -0
  250. package/dist/processors/base/types.d.ts +70 -64
  251. package/dist/processors/base/types.js +6 -0
  252. package/dist/processors/cli/fileProcessorCli.d.ts +8 -8
  253. package/dist/processors/cli/fileProcessorCli.js +5 -5
  254. package/dist/processors/config/mimeTypes.js +25 -0
  255. package/dist/processors/config/sizeLimits.d.ts +52 -40
  256. package/dist/processors/config/sizeLimits.js +56 -44
  257. package/dist/processors/document/ExcelProcessor.d.ts +14 -0
  258. package/dist/processors/document/ExcelProcessor.js +72 -1
  259. package/dist/processors/document/PptxProcessor.d.ts +63 -0
  260. package/dist/processors/document/PptxProcessor.js +157 -0
  261. package/dist/processors/document/index.d.ts +1 -0
  262. package/dist/processors/document/index.js +6 -0
  263. package/dist/processors/errors/FileErrorCode.d.ts +2 -2
  264. package/dist/processors/errors/errorHelpers.d.ts +2 -2
  265. package/dist/processors/errors/errorSerializer.d.ts +4 -4
  266. package/dist/processors/index.d.ts +8 -2
  267. package/dist/processors/index.js +5 -2
  268. package/dist/processors/integration/FileProcessorIntegration.d.ts +8 -8
  269. package/dist/processors/integration/FileProcessorIntegration.js +7 -7
  270. package/dist/processors/media/AudioProcessor.d.ts +328 -0
  271. package/dist/processors/media/AudioProcessor.js +707 -0
  272. package/dist/processors/media/VideoProcessor.d.ts +350 -0
  273. package/dist/processors/media/VideoProcessor.js +991 -0
  274. package/dist/processors/media/ffprobe-static.d.ts +4 -0
  275. package/dist/processors/media/index.d.ts +27 -0
  276. package/dist/processors/media/index.js +36 -0
  277. package/dist/processors/registry/ProcessorRegistry.d.ts +19 -5
  278. package/dist/processors/registry/ProcessorRegistry.js +103 -8
  279. package/dist/processors/registry/index.d.ts +1 -1
  280. package/dist/processors/registry/index.js +1 -1
  281. package/dist/processors/registry/types.d.ts +2 -2
  282. package/dist/providers/googleAiStudio.d.ts +34 -0
  283. package/dist/providers/googleAiStudio.js +267 -397
  284. package/dist/providers/googleVertex.d.ts +55 -1
  285. package/dist/providers/googleVertex.js +452 -719
  286. package/dist/providers/sagemaker/detection.d.ts +6 -6
  287. package/dist/providers/sagemaker/diagnostics.d.ts +4 -4
  288. package/dist/providers/sagemaker/parsers.d.ts +4 -4
  289. package/dist/rag/chunkers/RecursiveChunker.js +2 -2
  290. package/dist/rag/document/loaders.d.ts +6 -71
  291. package/dist/rag/document/loaders.js +5 -5
  292. package/dist/rag/graphRag/graphRAG.js +26 -9
  293. package/dist/rag/metadata/MetadataExtractorFactory.d.ts +5 -55
  294. package/dist/rag/metadata/metadataExtractor.js +6 -3
  295. package/dist/rag/pipeline/RAGPipeline.d.ts +8 -126
  296. package/dist/rag/pipeline/RAGPipeline.js +11 -11
  297. package/dist/rag/pipeline/contextAssembly.d.ts +3 -42
  298. package/dist/rag/pipeline/contextAssembly.js +6 -3
  299. package/dist/rag/reranker/RerankerFactory.d.ts +5 -60
  300. package/dist/rag/resilience/CircuitBreaker.d.ts +3 -33
  301. package/dist/rag/resilience/RetryHandler.d.ts +2 -21
  302. package/dist/rag/retrieval/hybridSearch.d.ts +3 -41
  303. package/dist/rag/retrieval/vectorQueryTool.d.ts +2 -13
  304. package/dist/rag/retrieval/vectorQueryTool.js +4 -3
  305. package/dist/rag/types.d.ts +3 -3
  306. package/dist/sdk/toolRegistration.d.ts +2 -2
  307. package/dist/server/middleware/cache.d.ts +2 -2
  308. package/dist/server/middleware/rateLimit.d.ts +2 -2
  309. package/dist/server/routes/mcpRoutes.js +277 -249
  310. package/dist/server/routes/memoryRoutes.js +287 -281
  311. package/dist/server/utils/validation.d.ts +4 -4
  312. package/dist/session/globalSessionState.d.ts +2 -2
  313. package/dist/telemetry/telemetryService.d.ts +2 -2
  314. package/dist/types/common.d.ts +39 -0
  315. package/dist/types/contextTypes.d.ts +255 -0
  316. package/dist/types/contextTypes.js +0 -2
  317. package/dist/types/conversation.d.ts +62 -0
  318. package/dist/types/conversationMemoryInterface.d.ts +27 -0
  319. package/dist/types/conversationMemoryInterface.js +6 -0
  320. package/dist/types/fileReferenceTypes.d.ts +222 -0
  321. package/dist/types/fileReferenceTypes.js +8 -0
  322. package/dist/types/fileTypes.d.ts +26 -3
  323. package/dist/types/generateTypes.d.ts +22 -1
  324. package/dist/types/index.d.ts +4 -5
  325. package/dist/types/index.js +8 -10
  326. package/dist/types/processorTypes.d.ts +597 -0
  327. package/dist/types/processorTypes.js +90 -0
  328. package/dist/types/ragTypes.d.ts +481 -0
  329. package/dist/types/ragTypes.js +7 -0
  330. package/dist/types/sdkTypes.d.ts +17 -18
  331. package/dist/types/streamTypes.d.ts +11 -1
  332. package/dist/utils/async/retry.d.ts +2 -2
  333. package/dist/utils/async/withTimeout.js +3 -1
  334. package/dist/utils/conversationMemory.d.ts +12 -6
  335. package/dist/utils/conversationMemory.js +76 -36
  336. package/dist/utils/fileDetector.d.ts +62 -0
  337. package/dist/utils/fileDetector.js +1014 -14
  338. package/dist/utils/json/safeParse.d.ts +2 -2
  339. package/dist/utils/messageBuilder.js +806 -153
  340. package/dist/utils/modelChoices.d.ts +2 -2
  341. package/dist/utils/multimodalOptionsBuilder.d.ts +2 -1
  342. package/dist/utils/multimodalOptionsBuilder.js +1 -0
  343. package/dist/utils/rateLimiter.d.ts +2 -2
  344. package/dist/utils/sanitizers/filename.d.ts +4 -4
  345. package/dist/utils/sanitizers/svg.d.ts +2 -2
  346. package/dist/utils/thinkingConfig.d.ts +6 -6
  347. package/dist/utils/tokenEstimation.d.ts +68 -0
  348. package/dist/utils/tokenEstimation.js +112 -0
  349. package/dist/utils/tokenUtils.d.ts +4 -4
  350. package/dist/utils/ttsProcessor.d.ts +2 -2
  351. package/dist/workflow/config.d.ts +104 -104
  352. package/package.json +18 -6
  353. package/dist/lib/utils/conversationMemoryUtils.d.ts +0 -25
  354. package/dist/lib/utils/conversationMemoryUtils.js +0 -138
  355. package/dist/utils/conversationMemoryUtils.d.ts +0 -25
  356. package/dist/utils/conversationMemoryUtils.js +0 -137
@@ -3,13 +3,13 @@
3
3
  * Redis-based implementation of conversation storage with same interface as ConversationMemoryManager
4
4
  */
5
5
  import { randomUUID } from "crypto";
6
+ import { MESSAGES_PER_TURN } from "../config/conversationMemory.js";
7
+ import { SummarizationEngine } from "../context/summarizationEngine.js";
8
+ import { NeuroLink } from "../neurolink.js";
6
9
  import { ConversationMemoryError } from "../types/conversation.js";
7
- import { MESSAGES_PER_TURN, RECENT_MESSAGES_RATIO, } from "../config/conversationMemory.js";
10
+ import { buildContextFromPointer, getEffectiveTokenThreshold, } from "../utils/conversationMemory.js";
8
11
  import { logger } from "../utils/logger.js";
9
- import { NeuroLink } from "../neurolink.js";
10
- import { createRedisClient, getSessionKey, getUserSessionsKey, getNormalizedConfig, serializeConversation, deserializeConversation, scanKeys, } from "../utils/redis.js";
11
- import { TokenUtils } from "../constants/tokens.js";
12
- import { buildContextFromPointer, getEffectiveTokenThreshold, generateSummary, } from "../utils/conversationMemory.js";
12
+ import { createRedisClient, deserializeConversation, getNormalizedConfig, getSessionKey, getUserSessionsKey, scanKeys, serializeConversation, } from "../utils/redis.js";
13
13
  /**
14
14
  * Redis-based implementation of the ConversationMemoryManager
15
15
  * Uses the same interface but stores data in Redis
@@ -17,6 +17,7 @@ import { buildContextFromPointer, getEffectiveTokenThreshold, generateSummary, }
17
17
  export class RedisConversationMemoryManager {
18
18
  config;
19
19
  isInitialized = false;
20
+ summarizationEngine = new SummarizationEngine();
20
21
  redisConfig;
21
22
  redisClient = null;
22
23
  /**
@@ -76,7 +77,47 @@ export class RedisConversationMemoryManager {
76
77
  port: this.redisConfig.port,
77
78
  },
78
79
  });
79
- throw new ConversationMemoryError("Failed to initialize Redis conversation memory", "CONFIG_ERROR", { error: error instanceof Error ? error.message : String(error) });
80
+ throw new ConversationMemoryError("Failed to initialize Redis conversation memory", "CONFIG_ERROR", {
81
+ error: error instanceof Error ? error.message : String(error),
82
+ });
83
+ }
84
+ }
85
+ /**
86
+ * Get session by ID, reconstructing a SessionMemory from Redis storage.
87
+ */
88
+ async getSession(sessionId, userId) {
89
+ await this.ensureInitialized();
90
+ if (!this.redisClient) {
91
+ return undefined;
92
+ }
93
+ try {
94
+ const redisKey = getSessionKey(this.redisConfig, sessionId, userId);
95
+ const conversationData = await this.redisClient.get(redisKey);
96
+ const conversation = deserializeConversation(conversationData || null);
97
+ if (!conversation) {
98
+ return undefined;
99
+ }
100
+ return {
101
+ sessionId: conversation.sessionId,
102
+ userId: conversation.userId,
103
+ messages: conversation.messages,
104
+ summarizedUpToMessageId: conversation.summarizedUpToMessageId,
105
+ summarizedMessage: conversation.summarizedMessage,
106
+ tokenThreshold: conversation.tokenThreshold,
107
+ lastTokenCount: conversation.lastTokenCount,
108
+ lastCountedAt: conversation.lastCountedAt,
109
+ lastApiTokenCount: conversation.lastApiTokenCount,
110
+ createdAt: new Date(conversation.createdAt).getTime(),
111
+ lastActivity: new Date(conversation.updatedAt).getTime(),
112
+ };
113
+ }
114
+ catch (error) {
115
+ logger.error("[RedisConversationMemoryManager] Failed to get session", {
116
+ sessionId,
117
+ userId,
118
+ error: error instanceof Error ? error.message : String(error),
119
+ });
120
+ return undefined;
80
121
  }
81
122
  }
82
123
  /**
@@ -300,6 +341,10 @@ export class RedisConversationMemoryManager {
300
341
  events: options.events || undefined,
301
342
  };
302
343
  conversation.messages.push(assistantMsg);
344
+ // Store API-reported token counts if available
345
+ if (options.tokenUsage) {
346
+ conversation.lastApiTokenCount = options.tokenUsage;
347
+ }
303
348
  logger.info("[RedisConversationMemoryManager] Added new messages", {
304
349
  sessionId: conversation.sessionId,
305
350
  userId: conversation.userId,
@@ -359,7 +404,6 @@ export class RedisConversationMemoryManager {
359
404
  async checkAndSummarize(conversation, threshold, sessionId, userId) {
360
405
  const normalizedUserId = userId || "randomUser";
361
406
  const summarizationKey = `${sessionId}:${normalizedUserId}`;
362
- // Acquire lock - if already in progress, skip
363
407
  if (this.summarizationInProgress.has(summarizationKey)) {
364
408
  logger.debug("[RedisConversationMemoryManager] Summarization already in progress, skipping", {
365
409
  sessionId,
@@ -381,12 +425,20 @@ export class RedisConversationMemoryManager {
381
425
  createdAt: new Date(conversation.createdAt).getTime(),
382
426
  lastActivity: new Date(conversation.updatedAt).getTime(),
383
427
  };
384
- const contextMessages = buildContextFromPointer(session);
385
- const tokenCount = this.estimateTokens(contextMessages);
386
- conversation.lastTokenCount = tokenCount;
387
- conversation.lastCountedAt = Date.now();
388
- if (tokenCount >= threshold) {
389
- await this.summarizeSessionTokenBased(conversation, threshold, sessionId, userId);
428
+ const summarized = await this.summarizationEngine.checkAndSummarize(session, threshold, this.config, "[RedisConversationMemoryManager]");
429
+ conversation.lastTokenCount = session.lastTokenCount;
430
+ conversation.lastCountedAt = session.lastCountedAt;
431
+ if (summarized) {
432
+ conversation.summarizedUpToMessageId = session.summarizedUpToMessageId;
433
+ conversation.summarizedMessage = session.summarizedMessage;
434
+ if (this.redisClient) {
435
+ const redisKey = getSessionKey(this.redisConfig, sessionId, userId);
436
+ const serializedData = serializeConversation(conversation);
437
+ await this.redisClient.set(redisKey, serializedData);
438
+ if (this.redisConfig.ttl > 0) {
439
+ await this.redisClient.expire(redisKey, this.redisConfig.ttl);
440
+ }
441
+ }
390
442
  }
391
443
  }
392
444
  catch (error) {
@@ -396,71 +448,9 @@ export class RedisConversationMemoryManager {
396
448
  });
397
449
  }
398
450
  finally {
399
- // Release lock when done
400
451
  this.summarizationInProgress.delete(summarizationKey);
401
452
  }
402
453
  }
403
- /**
404
- * Estimate total tokens for a list of messages
405
- */
406
- estimateTokens(messages) {
407
- return messages.reduce((total, msg) => {
408
- return total + TokenUtils.estimateTokenCount(msg.content);
409
- }, 0);
410
- }
411
- /**
412
- * Token-based summarization (pointer-based, non-destructive)
413
- */
414
- async summarizeSessionTokenBased(conversation, threshold, sessionId, userId) {
415
- const startIndex = conversation.summarizedUpToMessageId
416
- ? conversation.messages.findIndex((m) => m.id === conversation.summarizedUpToMessageId) + 1
417
- : 0;
418
- const recentMessages = conversation.messages.slice(startIndex);
419
- if (recentMessages.length === 0) {
420
- return;
421
- }
422
- // We only want to include user, assistant, and system messages in summarization
423
- const filteredRecentMessages = recentMessages.filter((msg) => msg.role !== "tool_call" && msg.role !== "tool_result");
424
- const targetRecentTokens = threshold * RECENT_MESSAGES_RATIO;
425
- const splitIndex = await this.findSplitIndexByTokens(filteredRecentMessages, targetRecentTokens);
426
- const messagesToSummarize = filteredRecentMessages.slice(0, splitIndex);
427
- if (messagesToSummarize.length === 0) {
428
- return;
429
- }
430
- const summary = await generateSummary(messagesToSummarize, this.config, "[RedisConversationMemoryManager]", conversation.summarizedMessage);
431
- if (!summary) {
432
- logger.warn(`[RedisConversationMemoryManager] Summary generation failed for session ${conversation.sessionId}`);
433
- return;
434
- }
435
- const lastSummarized = messagesToSummarize[messagesToSummarize.length - 1];
436
- conversation.summarizedUpToMessageId = lastSummarized.id;
437
- conversation.summarizedMessage = summary;
438
- if (this.redisClient) {
439
- const redisKey = getSessionKey(this.redisConfig, sessionId, userId);
440
- const serializedData = serializeConversation(conversation);
441
- await this.redisClient.set(redisKey, serializedData);
442
- if (this.redisConfig.ttl > 0) {
443
- await this.redisClient.expire(redisKey, this.redisConfig.ttl);
444
- }
445
- }
446
- }
447
- /**
448
- * Find split index to keep recent messages within target token count
449
- */
450
- async findSplitIndexByTokens(messages, targetRecentTokens) {
451
- let recentTokens = 0;
452
- let splitIndex = messages.length;
453
- for (let i = messages.length - 1; i >= 0; i--) {
454
- const msgTokens = TokenUtils.estimateTokenCount(messages[i].content);
455
- if (recentTokens + msgTokens > targetRecentTokens) {
456
- splitIndex = i + 1;
457
- break;
458
- }
459
- recentTokens += msgTokens;
460
- }
461
- // Ensure we're summarizing at least something
462
- return Math.max(1, splitIndex);
463
- }
464
454
  /**
465
455
  * Build context messages for AI prompt injection (TOKEN-BASED)
466
456
  * Returns messages from pointer onwards (or all if no pointer)
@@ -625,7 +615,10 @@ export class RedisConversationMemoryManager {
625
615
  }
626
616
  await this.ensureInitialized();
627
617
  if (!this.redisClient) {
628
- logger.warn("[RedisConversationMemoryManager] Redis client not available for getUserSessionObject", { userId, sessionId });
618
+ logger.warn("[RedisConversationMemoryManager] Redis client not available for getUserSessionObject", {
619
+ userId,
620
+ sessionId,
621
+ });
629
622
  return null;
630
623
  }
631
624
  try {
@@ -903,8 +896,6 @@ User message: "${userMessage}`;
903
896
  ? sessionError.message
904
897
  : String(sessionError),
905
898
  });
906
- // Continue with other sessions even if one fails
907
- continue;
908
899
  }
909
900
  }
910
901
  return results;
@@ -10,11 +10,11 @@ type ProviderConstructor = {
10
10
  /**
11
11
  * Provider registration entry
12
12
  */
13
- interface ProviderRegistration {
13
+ type ProviderRegistration = {
14
14
  constructor: ProviderConstructor;
15
15
  defaultModel?: string;
16
16
  aliases?: string[];
17
- }
17
+ };
18
18
  /**
19
19
  * True Factory Pattern implementation for AI Providers
20
20
  * Uses registration-based approach to eliminate switch statements
@@ -0,0 +1,276 @@
1
+ /**
2
+ * File Reference Registry
3
+ *
4
+ * Central registry for managing file references in on-demand processing mode.
5
+ * Files are registered with lightweight metadata and previews. Full content
6
+ * is processed on-demand when the LLM requests it via tools.
7
+ *
8
+ * This module is the core of the file reference architecture, replacing
9
+ * the previous "load everything upfront" pattern for files that exceed
10
+ * the tiny/small size tiers.
11
+ *
12
+ * @module files/fileReferenceRegistry
13
+ */
14
+ import type { FileSource } from "../types/fileTypes.js";
15
+ import type { FileExtractionParams, FileExtractionResult, FileReadResult, FileReference, FileRegistrationOptions, FileRegistryOptions, FileSearchResult, SizeTier } from "./types.js";
16
+ /**
17
+ * Registry for managing file references with on-demand processing.
18
+ *
19
+ * Design decisions:
20
+ * - One instance per NeuroLink SDK instance (not global singleton)
21
+ * - File buffers persisted to temp dir for later streaming access
22
+ * - LRU eviction when maxFiles exceeded
23
+ * - Thread-safe via sequential async operations (Node.js single-threaded)
24
+ *
25
+ * @example
26
+ * ```typescript
27
+ * const registry = new FileReferenceRegistry();
28
+ * const ref = await registry.register(buffer, {
29
+ * filename: 'report.xlsx',
30
+ * });
31
+ * console.log(ref.sizeTier); // 'medium'
32
+ * console.log(ref.preview); // First 2000 chars of processed content
33
+ * console.log(ref.estimatedTokens); // Type-aware estimate
34
+ *
35
+ * // Later, LLM requests specific section
36
+ * const section = await registry.readSection(ref.id, 1, 50, 5000);
37
+ * ```
38
+ */
39
+ export declare class FileReferenceRegistry {
40
+ private files;
41
+ private tempDir;
42
+ private maxFiles;
43
+ private maxTempBytes;
44
+ private defaultPreviewChars;
45
+ private currentTempBytes;
46
+ private tempDirCreated;
47
+ constructor(options?: FileRegistryOptions);
48
+ /**
49
+ * Register a file from a Buffer.
50
+ *
51
+ * This is the primary registration method. It performs lightweight analysis:
52
+ * 1. Detect file type from magic bytes (first 1KB)
53
+ * 2. Determine size tier
54
+ * 3. Extract preview (first N chars of text, or metadata for binary)
55
+ * 4. Persist buffer to temp directory for later streaming access
56
+ *
57
+ * Total time: ~1-5ms for most files (no full processing).
58
+ *
59
+ * @param buffer - File content as Buffer
60
+ * @param source - How the file was provided ('buffer', 'url', 'path', 'datauri')
61
+ * @param options - Registration options
62
+ * @returns FileReference with metadata and preview
63
+ */
64
+ register(buffer: Buffer, source?: FileSource, options?: FileRegistrationOptions): Promise<FileReference>;
65
+ /**
66
+ * Register a file from a file path on disk.
67
+ *
68
+ * Does NOT read the entire file — only reads the first 1KB for type detection
69
+ * and preview. The file path is stored for later streaming access.
70
+ *
71
+ * @param filePath - Absolute path to the file
72
+ * @param options - Registration options
73
+ * @returns FileReference with metadata and preview
74
+ */
75
+ registerFromPath(filePath: string, options?: FileRegistrationOptions): Promise<FileReference>;
76
+ /**
77
+ * Get a file reference by ID.
78
+ * Updates lastAccessedAt for LRU tracking.
79
+ */
80
+ get(id: string): FileReference | undefined;
81
+ /**
82
+ * Get a file reference by ID or filename.
83
+ * Tries ID lookup first, then falls back to filename match.
84
+ * This handles the common case where an LLM uses the filename
85
+ * instead of the UUID when calling file tools.
86
+ *
87
+ * @param idOrName - UUID or filename to search for
88
+ * @returns File reference if found, undefined otherwise
89
+ */
90
+ getByIdOrFilename(idOrName: string): FileReference | undefined;
91
+ /**
92
+ * Ensure a file has been processed (binary content extracted to text).
93
+ *
94
+ * For text files this is a no-op. For binary files (PDF, XLSX, video, etc.)
95
+ * this triggers on-demand processing if it hasn't happened yet. After this
96
+ * call, ref.processedContent and ref.preview contain extracted text.
97
+ *
98
+ * Used by file tools (get_file_preview) to ensure the preview contains
99
+ * real content instead of placeholder metadata strings.
100
+ */
101
+ ensureProcessed(fileId: string): Promise<void>;
102
+ /**
103
+ * Extract targeted content from a registered file.
104
+ *
105
+ * This is the core dispatch method for the `extract_file_content` tool.
106
+ * Routes extraction to the appropriate processor based on file type and
107
+ * the parameters provided.
108
+ *
109
+ * @param params - Extraction parameters (file_id + type-specific options)
110
+ * @returns Extraction result with text and/or images
111
+ */
112
+ extractContent(params: FileExtractionParams): Promise<FileExtractionResult>;
113
+ private extractVideoTargeted;
114
+ private extractPdfTargeted;
115
+ private extractExcelTargeted;
116
+ private extractPptxTargeted;
117
+ private extractArchiveTargeted;
118
+ private extractAudioTargeted;
119
+ private extractTextTargeted;
120
+ /**
121
+ * List all registered files.
122
+ * Returns a lightweight summary suitable for the LLM.
123
+ */
124
+ list(): FileReference[];
125
+ /**
126
+ * Generate a formatted table of all registered files for the LLM.
127
+ */
128
+ listFormatted(): string;
129
+ /**
130
+ * Read a section of a registered file.
131
+ *
132
+ * Uses StreamingReader for memory-efficient access.
133
+ *
134
+ * @param fileId - File reference ID
135
+ * @param startLine - Starting line (1-indexed)
136
+ * @param endLine - Ending line (1-indexed)
137
+ * @param tokenBudget - Maximum tokens to return
138
+ * @param provider - Provider name for token estimation
139
+ * @returns FileReadResult
140
+ */
141
+ readSection(fileId: string, startLine?: number, endLine?: number, tokenBudget?: number, provider?: string): Promise<FileReadResult>;
142
+ /**
143
+ * Search within a registered file.
144
+ *
145
+ * @param fileId - File reference ID
146
+ * @param pattern - Search pattern (string or regex)
147
+ * @param maxMatches - Maximum matches to return
148
+ * @returns FileSearchResult
149
+ */
150
+ search(fileId: string, pattern: string, maxMatches?: number): Promise<FileSearchResult>;
151
+ /**
152
+ * Search within in-memory content (for tiny files without temp paths).
153
+ */
154
+ private static searchInMemory;
155
+ /**
156
+ * Store a summary for a file reference.
157
+ */
158
+ setSummary(fileId: string, summary: string): void;
159
+ /**
160
+ * Remove a file reference and clean up its temp file.
161
+ */
162
+ remove(fileId: string): Promise<boolean>;
163
+ /**
164
+ * Clear all file references and clean up temp directory.
165
+ */
166
+ clear(): Promise<void>;
167
+ /**
168
+ * Get the number of registered files.
169
+ */
170
+ get size(): number;
171
+ /**
172
+ * Generate the preview text for the initial prompt.
173
+ *
174
+ * Returns a compact summary of all registered files that uses ~50-100 tokens
175
+ * per file instead of full content. The LLM can use file tools to access
176
+ * more content as needed.
177
+ *
178
+ * @returns Formatted string for prompt injection
179
+ */
180
+ generatePromptPreview(): Promise<string>;
181
+ /**
182
+ * Get type-specific extraction hints for the LLM prompt.
183
+ * Tells the LLM what parameters it can use with extract_file_content.
184
+ */
185
+ static getExtractionHint(type: string, sizeStr: string): string | null;
186
+ /**
187
+ * Classify a file into a size tier based on byte size.
188
+ */
189
+ static classifySizeTier(sizeBytes: number): SizeTier;
190
+ /**
191
+ * Process a binary file on-demand, extracting text content via the
192
+ * appropriate processor. This bridges the gap between the lazy registration
193
+ * path (which stores raw binary) and the LLM read tools (which need text).
194
+ *
195
+ * Called lazily on first readSection() or search() for non-text files.
196
+ * Results are cached in ref.processedContent for subsequent reads.
197
+ */
198
+ private processFileOnDemand;
199
+ /**
200
+ * Extract text from a PDF buffer using pdf-parse v2 (pdfjs-dist under the hood).
201
+ *
202
+ * Handles compressed streams (FlateDecode), CMap-encoded text, modern PDFs,
203
+ * and most text-based PDF formats. For scanned/image-only PDFs where no text
204
+ * can be extracted, falls back to a descriptive message.
205
+ */
206
+ private extractPdfText;
207
+ /**
208
+ * Extract text content from an Excel file using ExcelProcessor.
209
+ */
210
+ private extractExcelText;
211
+ /**
212
+ * Extract text content from a Word document using WordProcessor.
213
+ */
214
+ private extractWordText;
215
+ /**
216
+ * Extract text from a PowerPoint file using PptxProcessor.
217
+ */
218
+ private extractPptxText;
219
+ /**
220
+ * Extract metadata and content from a video file using VideoProcessor.
221
+ */
222
+ private extractVideoContent;
223
+ /**
224
+ * Extract metadata and content from an audio file using AudioProcessor.
225
+ */
226
+ private extractAudioContent;
227
+ /**
228
+ * Extract file listing from an archive using ArchiveProcessor.
229
+ */
230
+ private extractArchiveContent;
231
+ /**
232
+ * Extract a preview from a buffer.
233
+ * For text: first N characters.
234
+ * For binary: type-specific metadata.
235
+ */
236
+ private extractPreview;
237
+ /**
238
+ * Detect file type from buffer magic bytes and extension.
239
+ */
240
+ private detectType;
241
+ /**
242
+ * Detect file type from extension alone.
243
+ */
244
+ private detectTypeFromExtension;
245
+ /**
246
+ * Whether a file type contains readable text content.
247
+ * For "unknown" types, optionally checks the buffer for valid UTF-8 text.
248
+ */
249
+ private isTextType;
250
+ /**
251
+ * Heuristic check: does a buffer look like valid text content?
252
+ * Checks the first 512 bytes for mostly printable ASCII/UTF-8 characters.
253
+ * Returns true if >90% of bytes are printable (ASCII 0x20-0x7E, tab, newline, CR).
254
+ */
255
+ private static looksLikeText;
256
+ /**
257
+ * Guess MIME type from file type and extension.
258
+ */
259
+ private guessMimeType;
260
+ /**
261
+ * Guess file extension from magic bytes.
262
+ */
263
+ private guessExtension;
264
+ /**
265
+ * Persist a buffer to the temp directory.
266
+ */
267
+ private persistToTemp;
268
+ /**
269
+ * Evict the least recently used file reference.
270
+ */
271
+ private evictLRU;
272
+ /**
273
+ * Format byte size as human-readable string.
274
+ */
275
+ private formatSize;
276
+ }