@juspay/neurolink 7.36.0 → 7.37.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (87) hide show
  1. package/CHANGELOG.md +12 -0
  2. package/dist/cli/commands/config.d.ts +18 -18
  3. package/dist/cli/factories/commandFactory.d.ts +24 -0
  4. package/dist/cli/factories/commandFactory.js +297 -245
  5. package/dist/config/taskClassificationConfig.d.ts +51 -0
  6. package/dist/config/taskClassificationConfig.js +148 -0
  7. package/dist/core/baseProvider.d.ts +40 -3
  8. package/dist/core/baseProvider.js +689 -352
  9. package/dist/core/constants.d.ts +2 -30
  10. package/dist/core/constants.js +15 -43
  11. package/dist/factories/providerFactory.js +23 -6
  12. package/dist/index.d.ts +3 -2
  13. package/dist/index.js +4 -3
  14. package/dist/lib/config/taskClassificationConfig.d.ts +51 -0
  15. package/dist/lib/config/taskClassificationConfig.js +148 -0
  16. package/dist/lib/core/baseProvider.d.ts +40 -3
  17. package/dist/lib/core/baseProvider.js +689 -352
  18. package/dist/lib/core/constants.d.ts +2 -30
  19. package/dist/lib/core/constants.js +15 -43
  20. package/dist/lib/factories/providerFactory.js +23 -6
  21. package/dist/lib/index.d.ts +3 -2
  22. package/dist/lib/index.js +4 -3
  23. package/dist/lib/mcp/externalServerManager.js +2 -2
  24. package/dist/lib/mcp/registry.js +2 -2
  25. package/dist/lib/mcp/servers/agent/directToolsServer.js +19 -10
  26. package/dist/lib/mcp/toolRegistry.js +4 -8
  27. package/dist/lib/neurolink.d.ts +82 -27
  28. package/dist/lib/neurolink.js +672 -713
  29. package/dist/lib/providers/amazonBedrock.js +2 -2
  30. package/dist/lib/providers/googleVertex.d.ts +3 -23
  31. package/dist/lib/providers/googleVertex.js +14 -342
  32. package/dist/lib/providers/openAI.d.ts +23 -0
  33. package/dist/lib/providers/openAI.js +313 -6
  34. package/dist/lib/providers/sagemaker/language-model.d.ts +2 -2
  35. package/dist/lib/sdk/toolRegistration.js +18 -1
  36. package/dist/lib/types/common.d.ts +98 -0
  37. package/dist/lib/types/index.d.ts +2 -0
  38. package/dist/lib/types/index.js +2 -0
  39. package/dist/lib/types/streamTypes.d.ts +13 -6
  40. package/dist/lib/types/taskClassificationTypes.d.ts +52 -0
  41. package/dist/lib/types/taskClassificationTypes.js +5 -0
  42. package/dist/lib/types/typeAliases.d.ts +3 -2
  43. package/dist/lib/utils/modelRouter.d.ts +107 -0
  44. package/dist/lib/utils/modelRouter.js +292 -0
  45. package/dist/lib/utils/parameterValidation.js +6 -25
  46. package/dist/lib/utils/promptRedaction.d.ts +29 -0
  47. package/dist/lib/utils/promptRedaction.js +62 -0
  48. package/dist/lib/utils/schemaConversion.d.ts +14 -0
  49. package/dist/lib/utils/schemaConversion.js +140 -0
  50. package/dist/lib/utils/taskClassificationUtils.d.ts +55 -0
  51. package/dist/lib/utils/taskClassificationUtils.js +149 -0
  52. package/dist/lib/utils/taskClassifier.d.ts +23 -0
  53. package/dist/lib/utils/taskClassifier.js +94 -0
  54. package/dist/lib/utils/transformationUtils.js +143 -5
  55. package/dist/mcp/externalServerManager.js +2 -2
  56. package/dist/mcp/registry.js +2 -2
  57. package/dist/mcp/servers/agent/directToolsServer.js +19 -10
  58. package/dist/mcp/toolRegistry.js +4 -8
  59. package/dist/neurolink.d.ts +82 -27
  60. package/dist/neurolink.js +672 -713
  61. package/dist/providers/amazonBedrock.js +2 -2
  62. package/dist/providers/googleVertex.d.ts +3 -23
  63. package/dist/providers/googleVertex.js +14 -342
  64. package/dist/providers/openAI.d.ts +23 -0
  65. package/dist/providers/openAI.js +313 -6
  66. package/dist/providers/sagemaker/language-model.d.ts +2 -2
  67. package/dist/sdk/toolRegistration.js +18 -1
  68. package/dist/types/common.d.ts +98 -0
  69. package/dist/types/index.d.ts +2 -0
  70. package/dist/types/index.js +2 -0
  71. package/dist/types/streamTypes.d.ts +13 -6
  72. package/dist/types/taskClassificationTypes.d.ts +52 -0
  73. package/dist/types/taskClassificationTypes.js +5 -0
  74. package/dist/types/typeAliases.d.ts +3 -2
  75. package/dist/utils/modelRouter.d.ts +107 -0
  76. package/dist/utils/modelRouter.js +292 -0
  77. package/dist/utils/parameterValidation.js +6 -25
  78. package/dist/utils/promptRedaction.d.ts +29 -0
  79. package/dist/utils/promptRedaction.js +62 -0
  80. package/dist/utils/schemaConversion.d.ts +14 -0
  81. package/dist/utils/schemaConversion.js +140 -0
  82. package/dist/utils/taskClassificationUtils.d.ts +55 -0
  83. package/dist/utils/taskClassificationUtils.js +149 -0
  84. package/dist/utils/taskClassifier.d.ts +23 -0
  85. package/dist/utils/taskClassifier.js +94 -0
  86. package/dist/utils/transformationUtils.js +143 -5
  87. package/package.json +3 -2
@@ -13,7 +13,7 @@ export class MCPRegistry {
13
13
  */
14
14
  register(plugin) {
15
15
  this.plugins.set(plugin.metadata.name, plugin);
16
- registryLogger.info(`Registered plugin: ${plugin.metadata.name}`);
16
+ registryLogger.debug(`Registered plugin: ${plugin.metadata.name}`);
17
17
  }
18
18
  /**
19
19
  * Unregister a plugin
@@ -21,7 +21,7 @@ export class MCPRegistry {
21
21
  unregister(name) {
22
22
  const removed = this.plugins.delete(name);
23
23
  if (removed) {
24
- registryLogger.info(`Unregistered plugin: ${name}`);
24
+ registryLogger.debug(`Unregistered plugin: ${name}`);
25
25
  }
26
26
  return removed;
27
27
  }
@@ -46,8 +46,24 @@ if (!shouldDisableBuiltinTools()) {
46
46
  execute: async (params, context) => {
47
47
  const startTime = Date.now();
48
48
  try {
49
- logger.debug(`[Direct Tools] Executing ${toolName} with params:`, params);
50
- // Execute the direct tool
49
+ if (Object.keys(params || {}).length === 0) {
50
+ return {
51
+ success: false,
52
+ data: null,
53
+ error: "Tool execution blocked: Empty parameters not allowed during startup",
54
+ usage: {
55
+ executionTime: Date.now() - startTime,
56
+ },
57
+ metadata: {
58
+ toolName,
59
+ serverId: "neurolink-direct",
60
+ sessionId: context.sessionId,
61
+ blocked: true,
62
+ reason: "empty_parameters_startup_prevention",
63
+ timestamp: Date.now(),
64
+ },
65
+ };
66
+ }
51
67
  if (!execute || typeof execute !== "function") {
52
68
  throw new Error(`Tool ${toolName} has no execute function`);
53
69
  }
@@ -104,7 +120,7 @@ if (!shouldDisableBuiltinTools()) {
104
120
  });
105
121
  }
106
122
  else {
107
- logger.info("[Direct Tools] Built-in tools disabled via configuration");
123
+ logger.debug("Built-in tools disabled via configuration");
108
124
  }
109
125
  /**
110
126
  * Get tool category based on tool name
@@ -126,10 +142,3 @@ function getToolCategory(toolName) {
126
142
  return "utility";
127
143
  }
128
144
  }
129
- // Log successful registration or disable status
130
- if (!shouldDisableBuiltinTools()) {
131
- logger.info(`[Direct Tools] Registered ${Object.keys(directAgentTools).length} direct tools`);
132
- }
133
- else {
134
- logger.info("[Direct Tools] 0 direct tools registered (disabled via environment variable)");
135
- }
@@ -16,13 +16,9 @@ export class MCPToolRegistry extends MCPRegistry {
16
16
  builtInServerInfos = []; // DIRECT storage for MCPServerInfo
17
17
  constructor() {
18
18
  super();
19
- // 🔧 CONDITIONAL: Only auto-register direct tools if not disabled via configuration
20
19
  if (!shouldDisableBuiltinTools()) {
21
20
  this.registerDirectTools();
22
21
  }
23
- else {
24
- registryLogger.debug("Built-in direct tools disabled via configuration");
25
- }
26
22
  }
27
23
  /**
28
24
  * Register all direct tools from directAgentTools
@@ -100,7 +96,6 @@ export class MCPToolRegistry extends MCPRegistry {
100
96
  _finalContext = serverConfigOrContext;
101
97
  }
102
98
  const serverId = serverInfo.id;
103
- registryLogger.info(`Registering MCPServerInfo directly: ${serverId}`);
104
99
  // Use MCPServerInfo.tools array directly - ZERO conversions!
105
100
  const toolsObject = {};
106
101
  for (const tool of serverInfo.tools) {
@@ -133,7 +128,6 @@ export class MCPToolRegistry extends MCPRegistry {
133
128
  this.register(plugin);
134
129
  // Use MCPServerInfo.tools array directly - ZERO conversions!
135
130
  const tools = serverInfo.tools;
136
- registryLogger.debug(`Registering ${tools.length} tools for server ${serverId}:`, tools.map((t) => t.name));
137
131
  for (const tool of tools) {
138
132
  // For custom tools, use just the tool name to avoid redundant serverId.toolName format
139
133
  // For other tools, use fully-qualified serverId.toolName to avoid collisions
@@ -166,7 +160,7 @@ export class MCPToolRegistry extends MCPRegistry {
166
160
  serverId: serverInfo.id,
167
161
  }),
168
162
  });
169
- registryLogger.debug(`Registered tool '${tool.name}' with execute function:`, typeof tool.execute);
163
+ // Tool registered successfully
170
164
  }
171
165
  // Store MCPServerInfo directly - NO recreation needed!
172
166
  if (tools.length > 0) {
@@ -211,9 +205,11 @@ export class MCPToolRegistry extends MCPRegistry {
211
205
  async executeTool(toolName, args, context) {
212
206
  const startTime = Date.now();
213
207
  try {
214
- registryLogger.info(`Executing tool: ${toolName}`);
208
+ registryLogger.info(`🔧 [TOOL_EXECUTION] Starting execution: ${toolName}`);
209
+ registryLogger.info(`🔧 [TOOL_EXECUTION] Starting execution: ${toolName}`, { args, context });
215
210
  // Try to find the tool by fully-qualified name first
216
211
  let tool = this.tools.get(toolName);
212
+ registryLogger.info(`🔍 [TOOL_LOOKUP] Direct lookup result for '${toolName}':`, !!tool);
217
213
  // If not found, search for tool by name across all entries (for backward compatibility)
218
214
  let toolId = toolName;
219
215
  if (!tool) {
@@ -10,9 +10,9 @@ import type { GenerateOptions, GenerateResult } from "./types/generateTypes.js";
10
10
  import type { StreamOptions, StreamResult } from "./types/streamTypes.js";
11
11
  import type { MCPServerInfo, MCPExecutableTool } from "./types/mcpTypes.js";
12
12
  import type { ToolInfo } from "./mcp/contracts/mcpContract.js";
13
+ import type { NeuroLinkEvents, TypedEventEmitter, ToolExecutionContext, ToolExecutionSummary } from "./types/common.js";
13
14
  import type { JsonObject } from "./types/common.js";
14
15
  import type { BatchOperationResult } from "./types/typeAliases.js";
15
- import { EventEmitter } from "events";
16
16
  import type { ConversationMemoryConfig, ChatMessage } from "./types/conversation.js";
17
17
  import type { ExternalMCPServerInstance, ExternalMCPOperationResult, ExternalMCPToolInfo } from "./types/externalMcp.js";
18
18
  export interface ProviderStatus {
@@ -49,6 +49,9 @@ export declare class NeuroLink {
49
49
  private readonly toolCacheDuration;
50
50
  private toolCircuitBreakers;
51
51
  private toolExecutionMetrics;
52
+ private currentStreamToolExecutions;
53
+ private toolExecutionHistory;
54
+ private activeToolExecutions;
52
55
  /**
53
56
  * Helper method to emit tool end event in a consistent way
54
57
  * Used by executeTool in both success and error paths
@@ -62,6 +65,12 @@ export declare class NeuroLink {
62
65
  private conversationMemory?;
63
66
  private conversationMemoryNeedsInit;
64
67
  private conversationMemoryConfig?;
68
+ private enableOrchestration;
69
+ /**
70
+ * Context storage for tool execution
71
+ * This context will be merged with any runtime context passed by the AI model
72
+ */
73
+ private toolExecutionContext?;
65
74
  /**
66
75
  * Creates a new NeuroLink instance for AI text generation with MCP tool integration.
67
76
  *
@@ -70,6 +79,7 @@ export declare class NeuroLink {
70
79
  * @param config.conversationMemory.enabled - Whether to enable conversation memory (default: false)
71
80
  * @param config.conversationMemory.maxSessions - Maximum number of concurrent sessions (default: 100)
72
81
  * @param config.conversationMemory.maxTurnsPerSession - Maximum conversation turns per session (default: 50)
82
+ * @param config.enableOrchestration - Whether to enable smart model orchestration (default: false)
73
83
  *
74
84
  * @example
75
85
  * ```typescript
@@ -84,6 +94,11 @@ export declare class NeuroLink {
84
94
  * maxTurnsPerSession: 20
85
95
  * }
86
96
  * });
97
+ *
98
+ * // With orchestration enabled
99
+ * const neurolink = new NeuroLink({
100
+ * enableOrchestration: true
101
+ * });
87
102
  * ```
88
103
  *
89
104
  * @throws {Error} When provider registry setup fails
@@ -92,11 +107,8 @@ export declare class NeuroLink {
92
107
  */
93
108
  constructor(config?: {
94
109
  conversationMemory?: Partial<ConversationMemoryConfig>;
110
+ enableOrchestration?: boolean;
95
111
  });
96
- /**
97
- * Log constructor start with comprehensive environment analysis
98
- */
99
- private logConstructorStart;
100
112
  /**
101
113
  * Initialize provider registry with security settings
102
114
  */
@@ -122,14 +134,6 @@ export declare class NeuroLink {
122
134
  * Uses isolated async context to prevent hanging
123
135
  */
124
136
  private initializeMCP;
125
- /**
126
- * Log MCP initialization start
127
- */
128
- private logMCPInitStart;
129
- /**
130
- * Log MCP already initialized
131
- */
132
- private logMCPAlreadyInitialized;
133
137
  /**
134
138
  * Import performance manager with error handling
135
139
  */
@@ -158,6 +162,18 @@ export declare class NeuroLink {
158
162
  * Log MCP initialization completion
159
163
  */
160
164
  private logMCPInitComplete;
165
+ /**
166
+ * Apply orchestration to determine optimal provider and model
167
+ * @param options - Original GenerateOptions
168
+ * @returns Modified options with orchestrated provider marked in context, or empty object if validation fails
169
+ */
170
+ private applyOrchestration;
171
+ /**
172
+ * Apply orchestration to determine optimal provider and model for streaming
173
+ * @param options - Original StreamOptions
174
+ * @returns Modified options with orchestrated provider marked in context, or empty object if validation fails
175
+ */
176
+ private applyStreamOrchestration;
161
177
  /**
162
178
  * MAIN ENTRY POINT: Enhanced generate method with new function signature
163
179
  * Replaces both generateText and legacy methods
@@ -273,10 +289,6 @@ export declare class NeuroLink {
273
289
  * Simplified approach without domain detection - relies on tool registry
274
290
  */
275
291
  private detectAndExecuteTools;
276
- /**
277
- * Enhance prompt with tool results (domain-agnostic)
278
- */
279
- private enhancePromptWithToolResults;
280
292
  /**
281
293
  * BACKWARD COMPATIBILITY: Legacy streamText method
282
294
  * Internally calls stream() and converts result format
@@ -334,14 +346,6 @@ export declare class NeuroLink {
334
346
  * @throws {Error} When conversation memory operations fail (if enabled)
335
347
  */
336
348
  stream(options: StreamOptions): Promise<StreamResult>;
337
- /**
338
- * Log stream entry point with comprehensive analysis
339
- */
340
- private logStreamEntryPoint;
341
- /**
342
- * Log performance baseline
343
- */
344
- private logPerformanceBaseline;
345
349
  /**
346
350
  * Validate stream input with comprehensive error reporting
347
351
  */
@@ -544,13 +548,58 @@ export declare class NeuroLink {
544
548
  * @see {@link NeuroLink.stream} for events related to streaming
545
549
  * @see {@link NeuroLink.executeTool} for events related to tool execution
546
550
  */
547
- getEventEmitter(): EventEmitter<[never]>;
551
+ getEventEmitter(): TypedEventEmitter<NeuroLinkEvents>;
552
+ /**
553
+ * Emit tool start event with execution tracking
554
+ * @param toolName - Name of the tool being executed
555
+ * @param input - Input parameters for the tool
556
+ * @param startTime - Timestamp when execution started
557
+ * @returns executionId for tracking this specific execution
558
+ */
559
+ emitToolStart(toolName: string, input: unknown, startTime?: number): string;
560
+ /**
561
+ * Emit tool end event with execution summary
562
+ * @param toolName - Name of the tool that finished
563
+ * @param result - Result from the tool execution
564
+ * @param error - Error message if execution failed
565
+ * @param startTime - When execution started
566
+ * @param endTime - When execution finished
567
+ * @param executionId - Optional execution ID for tracking
568
+ */
569
+ emitToolEnd(toolName: string, result?: unknown, error?: string, startTime?: number, endTime?: number, executionId?: string): void;
570
+ /**
571
+ * Get current tool execution contexts for stream metadata
572
+ */
573
+ getCurrentToolExecutions(): ToolExecutionContext[];
574
+ /**
575
+ * Get tool execution history
576
+ */
577
+ getToolExecutionHistory(): ToolExecutionSummary[];
578
+ /**
579
+ * Clear current stream tool executions (called at stream start)
580
+ */
581
+ clearCurrentStreamExecutions(): void;
548
582
  /**
549
583
  * Register a custom tool that will be available to all AI providers
550
584
  * @param name - Unique name for the tool
551
585
  * @param tool - Tool in MCPExecutableTool format (unified MCP protocol type)
552
586
  */
553
587
  registerTool(name: string, tool: MCPExecutableTool): void;
588
+ /**
589
+ * Set the context that will be passed to tools during execution
590
+ * This context will be merged with any runtime context passed by the AI model
591
+ * @param context - Context object containing session info, tokens, shop data, etc.
592
+ */
593
+ setToolContext(context: Record<string, unknown>): void;
594
+ /**
595
+ * Get the current tool execution context
596
+ * @returns Current context or undefined if not set
597
+ */
598
+ getToolContext(): Record<string, unknown> | undefined;
599
+ /**
600
+ * Clear the tool execution context
601
+ */
602
+ clearToolContext(): void;
554
603
  /**
555
604
  * Register multiple tools at once - Supports both object and array formats
556
605
  * @param tools - Object mapping tool names to MCPExecutableTool format OR Array of tools with names
@@ -601,13 +650,19 @@ export declare class NeuroLink {
601
650
  * Supports both custom tools and MCP server tools with timeout, retry, and circuit breaker patterns
602
651
  * @param toolName - Name of the tool to execute
603
652
  * @param params - Parameters to pass to the tool
604
- * @param options - Execution options
653
+ * @param options - Execution options including optional authentication context
605
654
  * @returns Tool execution result
606
655
  */
607
656
  executeTool<T = unknown>(toolName: string, params?: unknown, options?: {
608
657
  timeout?: number;
609
658
  maxRetries?: number;
610
659
  retryDelayMs?: number;
660
+ authContext?: {
661
+ userId?: string;
662
+ sessionId?: string;
663
+ user?: Record<string, unknown>;
664
+ [key: string]: unknown;
665
+ };
611
666
  }): Promise<T>;
612
667
  /**
613
668
  * Internal tool execution method (extracted for better error handling)