@juspay/neurolink 7.29.0 → 7.29.2

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 (61) hide show
  1. package/CHANGELOG.md +12 -0
  2. package/dist/cli/commands/config.d.ts +3 -3
  3. package/dist/cli/commands/mcp.js +25 -0
  4. package/dist/cli/factories/commandFactory.d.ts +1 -0
  5. package/dist/cli/factories/commandFactory.js +115 -21
  6. package/dist/cli/index.js +8 -0
  7. package/dist/core/factory.js +77 -4
  8. package/dist/factories/providerFactory.js +3 -0
  9. package/dist/factories/providerRegistry.js +2 -2
  10. package/dist/lib/core/factory.js +77 -4
  11. package/dist/lib/factories/providerFactory.js +3 -0
  12. package/dist/lib/factories/providerRegistry.js +2 -2
  13. package/dist/lib/mcp/externalServerManager.js +13 -14
  14. package/dist/lib/mcp/flexibleToolValidator.d.ts +50 -0
  15. package/dist/lib/mcp/flexibleToolValidator.js +161 -0
  16. package/dist/lib/mcp/toolRegistry.d.ts +2 -2
  17. package/dist/lib/mcp/toolRegistry.js +25 -50
  18. package/dist/lib/neurolink.d.ts +299 -4
  19. package/dist/lib/neurolink.js +434 -73
  20. package/dist/lib/providers/amazonBedrock.d.ts +47 -6
  21. package/dist/lib/providers/amazonBedrock.js +282 -23
  22. package/dist/lib/providers/aws/credentialProvider.d.ts +58 -0
  23. package/dist/lib/providers/aws/credentialProvider.js +267 -0
  24. package/dist/lib/providers/aws/credentialTester.d.ts +49 -0
  25. package/dist/lib/providers/aws/credentialTester.js +394 -0
  26. package/dist/lib/providers/googleVertex.js +13 -4
  27. package/dist/lib/proxy/awsProxyIntegration.d.ts +23 -0
  28. package/dist/lib/proxy/awsProxyIntegration.js +285 -0
  29. package/dist/lib/proxy/proxyFetch.d.ts +9 -5
  30. package/dist/lib/proxy/proxyFetch.js +232 -98
  31. package/dist/lib/proxy/utils/noProxyUtils.d.ts +39 -0
  32. package/dist/lib/proxy/utils/noProxyUtils.js +149 -0
  33. package/dist/lib/types/providers.d.ts +43 -0
  34. package/dist/lib/utils/providerConfig.d.ts +1 -0
  35. package/dist/lib/utils/providerConfig.js +2 -1
  36. package/dist/lib/utils/providerHealth.js +123 -5
  37. package/dist/mcp/externalServerManager.js +13 -14
  38. package/dist/mcp/flexibleToolValidator.d.ts +50 -0
  39. package/dist/mcp/flexibleToolValidator.js +161 -0
  40. package/dist/mcp/toolRegistry.d.ts +2 -2
  41. package/dist/mcp/toolRegistry.js +25 -50
  42. package/dist/neurolink.d.ts +299 -4
  43. package/dist/neurolink.js +434 -73
  44. package/dist/providers/amazonBedrock.d.ts +47 -6
  45. package/dist/providers/amazonBedrock.js +282 -23
  46. package/dist/providers/aws/credentialProvider.d.ts +58 -0
  47. package/dist/providers/aws/credentialProvider.js +267 -0
  48. package/dist/providers/aws/credentialTester.d.ts +49 -0
  49. package/dist/providers/aws/credentialTester.js +394 -0
  50. package/dist/providers/googleVertex.js +13 -4
  51. package/dist/proxy/awsProxyIntegration.d.ts +23 -0
  52. package/dist/proxy/awsProxyIntegration.js +285 -0
  53. package/dist/proxy/proxyFetch.d.ts +9 -5
  54. package/dist/proxy/proxyFetch.js +232 -98
  55. package/dist/proxy/utils/noProxyUtils.d.ts +39 -0
  56. package/dist/proxy/utils/noProxyUtils.js +149 -0
  57. package/dist/types/providers.d.ts +43 -0
  58. package/dist/utils/providerConfig.d.ts +1 -0
  59. package/dist/utils/providerConfig.js +2 -1
  60. package/dist/utils/providerHealth.js +123 -5
  61. package/package.json +5 -1
@@ -54,9 +54,39 @@ export declare class NeuroLink {
54
54
  * @param toolName - Name of the tool
55
55
  * @param startTime - Timestamp when tool execution started
56
56
  * @param success - Whether the tool execution was successful
57
+ * @param result - The result of the tool execution (optional)
58
+ * @param error - The error if execution failed (optional)
57
59
  */
58
60
  private emitToolEndEvent;
59
61
  private conversationMemory?;
62
+ /**
63
+ * Creates a new NeuroLink instance for AI text generation with MCP tool integration.
64
+ *
65
+ * @param config - Optional configuration object
66
+ * @param config.conversationMemory - Configuration for conversation memory features
67
+ * @param config.conversationMemory.enabled - Whether to enable conversation memory (default: false)
68
+ * @param config.conversationMemory.maxSessions - Maximum number of concurrent sessions (default: 100)
69
+ * @param config.conversationMemory.maxTurnsPerSession - Maximum conversation turns per session (default: 50)
70
+ *
71
+ * @example
72
+ * ```typescript
73
+ * // Basic usage
74
+ * const neurolink = new NeuroLink();
75
+ *
76
+ * // With conversation memory
77
+ * const neurolink = new NeuroLink({
78
+ * conversationMemory: {
79
+ * enabled: true,
80
+ * maxSessions: 50,
81
+ * maxTurnsPerSession: 20
82
+ * }
83
+ * });
84
+ * ```
85
+ *
86
+ * @throws {Error} When provider registry setup fails
87
+ * @throws {Error} When conversation memory initialization fails (if enabled)
88
+ * @throws {Error} When external server manager initialization fails
89
+ */
60
90
  constructor(config?: {
61
91
  conversationMemory?: Partial<ConversationMemoryConfig>;
62
92
  });
@@ -84,6 +114,54 @@ export declare class NeuroLink {
84
114
  * @param config Optional configuration to override default summarization settings.
85
115
  */
86
116
  enableContextSummarization(config?: Partial<ContextManagerConfig>): void;
117
+ /**
118
+ * Generate AI content using the best available provider with MCP tool integration.
119
+ * This is the primary method for text generation with full feature support.
120
+ *
121
+ * @param optionsOrPrompt - Either a string prompt or a comprehensive GenerateOptions object
122
+ * @param optionsOrPrompt.input - Input configuration object
123
+ * @param optionsOrPrompt.input.text - The text prompt to send to the AI (required)
124
+ * @param optionsOrPrompt.provider - AI provider to use ('auto', 'openai', 'anthropic', etc.)
125
+ * @param optionsOrPrompt.model - Specific model to use (e.g., 'gpt-4', 'claude-3-opus')
126
+ * @param optionsOrPrompt.temperature - Randomness in response (0.0 = deterministic, 2.0 = very random)
127
+ * @param optionsOrPrompt.maxTokens - Maximum tokens in response
128
+ * @param optionsOrPrompt.systemPrompt - System message to set AI behavior
129
+ * @param optionsOrPrompt.disableTools - Whether to disable MCP tool usage
130
+ * @param optionsOrPrompt.enableAnalytics - Whether to include usage analytics
131
+ * @param optionsOrPrompt.enableEvaluation - Whether to include response quality evaluation
132
+ * @param optionsOrPrompt.context - Additional context for the request
133
+ * @param optionsOrPrompt.evaluationDomain - Domain for specialized evaluation
134
+ * @param optionsOrPrompt.toolUsageContext - Context for tool usage decisions
135
+ *
136
+ * @returns Promise resolving to GenerateResult with content, usage data, and optional analytics
137
+ *
138
+ * @example
139
+ * ```typescript
140
+ * // Simple usage with string prompt
141
+ * const result = await neurolink.generate("What is artificial intelligence?");
142
+ * console.log(result.content);
143
+ *
144
+ * // Advanced usage with options
145
+ * const result = await neurolink.generate({
146
+ * input: { text: "Explain quantum computing" },
147
+ * provider: "openai",
148
+ * model: "gpt-4",
149
+ * temperature: 0.7,
150
+ * maxTokens: 500,
151
+ * enableAnalytics: true,
152
+ * enableEvaluation: true,
153
+ * context: { domain: "science", level: "intermediate" }
154
+ * });
155
+ *
156
+ * // Access analytics and evaluation data
157
+ * console.log(result.analytics?.usage);
158
+ * console.log(result.evaluation?.relevance);
159
+ * ```
160
+ *
161
+ * @throws {Error} When input text is missing or invalid
162
+ * @throws {Error} When all providers fail to generate content
163
+ * @throws {Error} When conversation memory operations fail (if enabled)
164
+ */
87
165
  generate(optionsOrPrompt: GenerateOptions | string): Promise<GenerateResult>;
88
166
  /**
89
167
  * BACKWARD COMPATIBILITY: Legacy generateText method
@@ -128,13 +206,230 @@ export declare class NeuroLink {
128
206
  */
129
207
  streamText(prompt: string, options?: Partial<StreamOptions>): Promise<AsyncIterable<string>>;
130
208
  /**
131
- * PRIMARY METHOD: Stream content using AI (recommended for new code)
132
- * Future-ready for multi-modal capabilities with current text focus
209
+ * Stream AI-generated content in real-time using the best available provider.
210
+ * This method provides real-time streaming of AI responses with full MCP tool integration.
211
+ *
212
+ * @param options - Stream configuration options
213
+ * @param options.input - Input configuration object
214
+ * @param options.input.text - The text prompt to send to the AI (required)
215
+ * @param options.provider - AI provider to use ('auto', 'openai', 'anthropic', etc.)
216
+ * @param options.model - Specific model to use (e.g., 'gpt-4', 'claude-3-opus')
217
+ * @param options.temperature - Randomness in response (0.0 = deterministic, 2.0 = very random)
218
+ * @param options.maxTokens - Maximum tokens in response
219
+ * @param options.systemPrompt - System message to set AI behavior
220
+ * @param options.disableTools - Whether to disable MCP tool usage
221
+ * @param options.enableAnalytics - Whether to include usage analytics
222
+ * @param options.enableEvaluation - Whether to include response quality evaluation
223
+ * @param options.context - Additional context for the request
224
+ * @param options.evaluationDomain - Domain for specialized evaluation
225
+ *
226
+ * @returns Promise resolving to StreamResult with an async iterable stream
227
+ *
228
+ * @example
229
+ * ```typescript
230
+ * // Basic streaming usage
231
+ * const result = await neurolink.stream({
232
+ * input: { text: "Tell me a story about space exploration" }
233
+ * });
234
+ *
235
+ * // Consume the stream
236
+ * for await (const chunk of result.stream) {
237
+ * process.stdout.write(chunk.content);
238
+ * }
239
+ *
240
+ * // Advanced streaming with options
241
+ * const result = await neurolink.stream({
242
+ * input: { text: "Explain machine learning" },
243
+ * provider: "openai",
244
+ * model: "gpt-4",
245
+ * temperature: 0.7,
246
+ * enableAnalytics: true,
247
+ * context: { domain: "education", audience: "beginners" }
248
+ * });
249
+ *
250
+ * // Access metadata and analytics
251
+ * console.log(result.provider);
252
+ * console.log(result.analytics?.usage);
253
+ * ```
254
+ *
255
+ * @throws {Error} When input text is missing or invalid
256
+ * @throws {Error} When all providers fail to generate content
257
+ * @throws {Error} When conversation memory operations fail (if enabled)
133
258
  */
134
259
  stream(options: StreamOptions): Promise<StreamResult>;
135
260
  /**
136
- * Get the EventEmitter to listen to NeuroLink events
137
- * @returns EventEmitter instance
261
+ * Get the EventEmitter instance to listen to NeuroLink events for real-time monitoring and debugging.
262
+ * This method provides access to the internal event system that emits events during AI generation,
263
+ * tool execution, streaming, and other operations for comprehensive observability.
264
+ *
265
+ * @returns EventEmitter instance that emits various NeuroLink operation events
266
+ *
267
+ * @example
268
+ * ```typescript
269
+ * // Basic event listening setup
270
+ * const neurolink = new NeuroLink();
271
+ * const emitter = neurolink.getEventEmitter();
272
+ *
273
+ * // Listen to generation events
274
+ * emitter.on('generation:start', (event) => {
275
+ * console.log(`Generation started with provider: ${event.provider}`);
276
+ * console.log(`Started at: ${new Date(event.timestamp)}`);
277
+ * });
278
+ *
279
+ * emitter.on('generation:end', (event) => {
280
+ * console.log(`Generation completed in ${event.responseTime}ms`);
281
+ * console.log(`Tools used: ${event.toolsUsed?.length || 0}`);
282
+ * });
283
+ *
284
+ * // Listen to streaming events
285
+ * emitter.on('stream:start', (event) => {
286
+ * console.log(`Streaming started with provider: ${event.provider}`);
287
+ * });
288
+ *
289
+ * emitter.on('stream:end', (event) => {
290
+ * console.log(`Streaming completed in ${event.responseTime}ms`);
291
+ * if (event.fallback) console.log('Used fallback streaming');
292
+ * });
293
+ *
294
+ * // Listen to tool execution events
295
+ * emitter.on('tool:start', (event) => {
296
+ * console.log(`Tool execution started: ${event.toolName}`);
297
+ * });
298
+ *
299
+ * emitter.on('tool:end', (event) => {
300
+ * console.log(`Tool ${event.toolName} ${event.success ? 'succeeded' : 'failed'}`);
301
+ * console.log(`Execution time: ${event.responseTime}ms`);
302
+ * });
303
+ *
304
+ * // Listen to tool registration events
305
+ * emitter.on('tools-register:start', (event) => {
306
+ * console.log(`Registering tool: ${event.toolName}`);
307
+ * });
308
+ *
309
+ * emitter.on('tools-register:end', (event) => {
310
+ * console.log(`Tool registration ${event.success ? 'succeeded' : 'failed'}: ${event.toolName}`);
311
+ * });
312
+ *
313
+ * // Listen to external MCP server events
314
+ * emitter.on('externalMCP:serverConnected', (event) => {
315
+ * console.log(`External MCP server connected: ${event.serverId}`);
316
+ * console.log(`Tools available: ${event.toolCount || 0}`);
317
+ * });
318
+ *
319
+ * emitter.on('externalMCP:serverDisconnected', (event) => {
320
+ * console.log(`External MCP server disconnected: ${event.serverId}`);
321
+ * console.log(`Reason: ${event.reason || 'Unknown'}`);
322
+ * });
323
+ *
324
+ * emitter.on('externalMCP:toolDiscovered', (event) => {
325
+ * console.log(`New tool discovered: ${event.toolName} from ${event.serverId}`);
326
+ * });
327
+ *
328
+ * // Advanced usage with error handling
329
+ * emitter.on('error', (error) => {
330
+ * console.error('NeuroLink error:', error);
331
+ * });
332
+ *
333
+ * // Clean up event listeners when done
334
+ * function cleanup() {
335
+ * emitter.removeAllListeners();
336
+ * }
337
+ *
338
+ * process.on('SIGINT', cleanup);
339
+ * process.on('SIGTERM', cleanup);
340
+ * ```
341
+ *
342
+ * @example
343
+ * ```typescript
344
+ * // Advanced monitoring with metrics collection
345
+ * const neurolink = new NeuroLink();
346
+ * const emitter = neurolink.getEventEmitter();
347
+ * const metrics = {
348
+ * generations: 0,
349
+ * totalResponseTime: 0,
350
+ * toolExecutions: 0,
351
+ * failures: 0
352
+ * };
353
+ *
354
+ * // Collect performance metrics
355
+ * emitter.on('generation:end', (event) => {
356
+ * metrics.generations++;
357
+ * metrics.totalResponseTime += event.responseTime;
358
+ * metrics.toolExecutions += event.toolsUsed?.length || 0;
359
+ * });
360
+ *
361
+ * emitter.on('tool:end', (event) => {
362
+ * if (!event.success) {
363
+ * metrics.failures++;
364
+ * }
365
+ * });
366
+ *
367
+ * // Log metrics every 10 seconds
368
+ * setInterval(() => {
369
+ * const avgResponseTime = metrics.generations > 0
370
+ * ? metrics.totalResponseTime / metrics.generations
371
+ * : 0;
372
+ *
373
+ * console.log('NeuroLink Metrics:', {
374
+ * totalGenerations: metrics.generations,
375
+ * averageResponseTime: `${avgResponseTime.toFixed(2)}ms`,
376
+ * totalToolExecutions: metrics.toolExecutions,
377
+ * failureRate: `${((metrics.failures / (metrics.toolExecutions || 1)) * 100).toFixed(2)}%`
378
+ * });
379
+ * }, 10000);
380
+ * ```
381
+ *
382
+ * **Available Events:**
383
+ *
384
+ * **Generation Events:**
385
+ * - `generation:start` - Fired when text generation begins
386
+ * - `{ provider: string, timestamp: number }`
387
+ * - `generation:end` - Fired when text generation completes
388
+ * - `{ provider: string, responseTime: number, toolsUsed?: string[], timestamp: number }`
389
+ *
390
+ * **Streaming Events:**
391
+ * - `stream:start` - Fired when streaming begins
392
+ * - `{ provider: string, timestamp: number }`
393
+ * - `stream:end` - Fired when streaming completes
394
+ * - `{ provider: string, responseTime: number, fallback?: boolean }`
395
+ *
396
+ * **Tool Events:**
397
+ * - `tool:start` - Fired when tool execution begins
398
+ * - `{ toolName: string, timestamp: number }`
399
+ * - `tool:end` - Fired when tool execution completes
400
+ * - `{ toolName: string, responseTime: number, success: boolean, timestamp: number }`
401
+ * - `tools-register:start` - Fired when tool registration begins
402
+ * - `{ toolName: string, timestamp: number }`
403
+ * - `tools-register:end` - Fired when tool registration completes
404
+ * - `{ toolName: string, success: boolean, timestamp: number }`
405
+ *
406
+ * **External MCP Events:**
407
+ * - `externalMCP:serverConnected` - Fired when external MCP server connects
408
+ * - `{ serverId: string, toolCount?: number, timestamp: number }`
409
+ * - `externalMCP:serverDisconnected` - Fired when external MCP server disconnects
410
+ * - `{ serverId: string, reason?: string, timestamp: number }`
411
+ * - `externalMCP:serverFailed` - Fired when external MCP server fails
412
+ * - `{ serverId: string, error: string, timestamp: number }`
413
+ * - `externalMCP:toolDiscovered` - Fired when external MCP tool is discovered
414
+ * - `{ toolName: string, serverId: string, timestamp: number }`
415
+ * - `externalMCP:toolRemoved` - Fired when external MCP tool is removed
416
+ * - `{ toolName: string, serverId: string, timestamp: number }`
417
+ * - `externalMCP:serverAdded` - Fired when external MCP server is added
418
+ * - `{ serverId: string, config: MCPServerInfo, toolCount: number, timestamp: number }`
419
+ * - `externalMCP:serverRemoved` - Fired when external MCP server is removed
420
+ * - `{ serverId: string, timestamp: number }`
421
+ *
422
+ * **Error Events:**
423
+ * - `error` - Fired when an error occurs
424
+ * - `{ error: Error, context?: object }`
425
+ *
426
+ * @throws {Error} This method does not throw errors as it returns the internal EventEmitter
427
+ *
428
+ * @since 1.0.0
429
+ * @see {@link https://nodejs.org/api/events.html} Node.js EventEmitter documentation
430
+ * @see {@link NeuroLink.generate} for events related to text generation
431
+ * @see {@link NeuroLink.stream} for events related to streaming
432
+ * @see {@link NeuroLink.executeTool} for events related to tool execution
138
433
  */
139
434
  getEventEmitter(): EventEmitter<[never]>;
140
435
  /**