@juspay/neurolink 7.14.0 → 7.14.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 (111) hide show
  1. package/CHANGELOG.md +6 -0
  2. package/dist/agent/directTools.d.ts +3 -3
  3. package/dist/agent/directTools.js +1 -1
  4. package/dist/cli/commands/mcp.js +67 -207
  5. package/dist/cli/factories/commandFactory.js +7 -1
  6. package/dist/cli/utils/interactiveSetup.js +1 -1
  7. package/dist/core/baseProvider.d.ts +6 -40
  8. package/dist/core/baseProvider.js +102 -75
  9. package/dist/core/dynamicModels.d.ts +14 -14
  10. package/dist/core/dynamicModels.js +1 -1
  11. package/dist/core/evaluation.js +1 -1
  12. package/dist/core/factory.js +1 -12
  13. package/dist/index.d.ts +5 -4
  14. package/dist/index.js +1 -1
  15. package/dist/lib/agent/directTools.js +1 -1
  16. package/dist/lib/core/baseProvider.d.ts +6 -40
  17. package/dist/lib/core/baseProvider.js +102 -75
  18. package/dist/lib/core/dynamicModels.js +1 -1
  19. package/dist/lib/core/evaluation.js +1 -1
  20. package/dist/lib/core/factory.js +1 -12
  21. package/dist/lib/index.d.ts +5 -4
  22. package/dist/lib/index.js +1 -1
  23. package/dist/lib/mcp/externalServerManager.d.ts +46 -13
  24. package/dist/lib/mcp/externalServerManager.js +393 -32
  25. package/dist/lib/mcp/mcpClientFactory.d.ts +5 -4
  26. package/dist/lib/mcp/mcpClientFactory.js +8 -3
  27. package/dist/lib/mcp/toolDiscoveryService.d.ts +1 -0
  28. package/dist/lib/mcp/toolDiscoveryService.js +76 -8
  29. package/dist/lib/mcp/toolRegistry.d.ts +15 -11
  30. package/dist/lib/mcp/toolRegistry.js +118 -55
  31. package/dist/lib/models/modelResolver.js +1 -1
  32. package/dist/lib/neurolink.d.ts +32 -31
  33. package/dist/lib/neurolink.js +173 -210
  34. package/dist/lib/providers/googleVertex.d.ts +6 -0
  35. package/dist/lib/providers/googleVertex.js +11 -0
  36. package/dist/lib/providers/huggingFace.js +1 -1
  37. package/dist/lib/providers/mistral.js +3 -3
  38. package/dist/lib/providers/ollama.js +1 -1
  39. package/dist/lib/providers/openAI.d.ts +3 -2
  40. package/dist/lib/providers/openAI.js +2 -2
  41. package/dist/lib/providers/openaiCompatible.d.ts +1 -1
  42. package/dist/lib/providers/openaiCompatible.js +2 -2
  43. package/dist/lib/providers/sagemaker/config.js +1 -1
  44. package/dist/lib/sdk/toolRegistration.d.ts +4 -13
  45. package/dist/lib/sdk/toolRegistration.js +19 -66
  46. package/dist/lib/types/cli.d.ts +0 -1
  47. package/dist/lib/types/cli.js +0 -1
  48. package/dist/lib/types/common.d.ts +1 -2
  49. package/dist/lib/types/common.js +0 -1
  50. package/dist/lib/types/contextTypes.d.ts +1 -1
  51. package/dist/lib/types/contextTypes.js +3 -3
  52. package/dist/lib/types/externalMcp.d.ts +6 -0
  53. package/dist/lib/types/externalMcp.js +1 -0
  54. package/dist/lib/types/index.d.ts +2 -3
  55. package/dist/lib/types/index.js +0 -1
  56. package/dist/lib/types/mcpTypes.d.ts +53 -99
  57. package/dist/lib/types/providers.d.ts +0 -1
  58. package/dist/lib/types/providers.js +0 -1
  59. package/dist/lib/types/tools.d.ts +2 -2
  60. package/dist/lib/types/tools.js +2 -2
  61. package/dist/lib/utils/factoryProcessing.js +1 -1
  62. package/dist/lib/utils/mcpDefaults.d.ts +54 -0
  63. package/dist/lib/utils/mcpDefaults.js +125 -0
  64. package/dist/lib/utils/providerConfig.d.ts +1 -1
  65. package/dist/lib/utils/providerConfig.js +2 -2
  66. package/dist/lib/utils/providerHealth.js +6 -6
  67. package/dist/mcp/externalServerManager.d.ts +46 -13
  68. package/dist/mcp/externalServerManager.js +393 -32
  69. package/dist/mcp/mcpClientFactory.d.ts +5 -4
  70. package/dist/mcp/mcpClientFactory.js +8 -3
  71. package/dist/mcp/toolDiscoveryService.d.ts +1 -0
  72. package/dist/mcp/toolDiscoveryService.js +76 -8
  73. package/dist/mcp/toolRegistry.d.ts +15 -11
  74. package/dist/mcp/toolRegistry.js +118 -55
  75. package/dist/models/modelResolver.js +1 -1
  76. package/dist/neurolink.d.ts +32 -31
  77. package/dist/neurolink.js +173 -210
  78. package/dist/providers/googleVertex.d.ts +6 -0
  79. package/dist/providers/googleVertex.js +11 -0
  80. package/dist/providers/huggingFace.js +1 -1
  81. package/dist/providers/mistral.js +3 -3
  82. package/dist/providers/ollama.js +1 -1
  83. package/dist/providers/openAI.d.ts +3 -2
  84. package/dist/providers/openAI.js +2 -2
  85. package/dist/providers/openaiCompatible.d.ts +1 -1
  86. package/dist/providers/openaiCompatible.js +2 -2
  87. package/dist/providers/sagemaker/config.js +1 -1
  88. package/dist/sdk/toolRegistration.d.ts +4 -13
  89. package/dist/sdk/toolRegistration.js +19 -66
  90. package/dist/types/cli.d.ts +0 -1
  91. package/dist/types/cli.js +0 -1
  92. package/dist/types/common.d.ts +1 -2
  93. package/dist/types/common.js +0 -1
  94. package/dist/types/contextTypes.d.ts +1 -1
  95. package/dist/types/contextTypes.js +3 -3
  96. package/dist/types/externalMcp.d.ts +6 -0
  97. package/dist/types/externalMcp.js +1 -0
  98. package/dist/types/index.d.ts +2 -3
  99. package/dist/types/index.js +0 -1
  100. package/dist/types/mcpTypes.d.ts +53 -99
  101. package/dist/types/providers.d.ts +0 -1
  102. package/dist/types/providers.js +0 -1
  103. package/dist/types/tools.d.ts +2 -2
  104. package/dist/types/tools.js +2 -2
  105. package/dist/utils/factoryProcessing.js +1 -1
  106. package/dist/utils/mcpDefaults.d.ts +54 -0
  107. package/dist/utils/mcpDefaults.js +125 -0
  108. package/dist/utils/providerConfig.d.ts +1 -1
  109. package/dist/utils/providerConfig.js +2 -2
  110. package/dist/utils/providerHealth.js +6 -6
  111. package/package.json +1 -1
@@ -1,3 +1,4 @@
1
+ import { z } from "zod";
1
2
  import { logger } from "../utils/logger.js";
2
3
  import { SYSTEM_LIMITS, DEFAULT_MAX_STEPS } from "../core/constants.js";
3
4
  import { directAgentTools } from "../agent/directTools.js";
@@ -5,19 +6,6 @@ import { getSafeMaxTokens } from "../utils/tokenLimits.js";
5
6
  import { createTimeoutController, TimeoutError } from "../utils/timeout.js";
6
7
  import { shouldDisableBuiltinTools } from "../utils/toolUtils.js";
7
8
  import { buildMessagesArray } from "../utils/messageBuilder.js";
8
- /**
9
- * Validates if a result contains a valid toolsObject structure
10
- * @param result - The result object to validate
11
- * @returns true if the result contains a valid toolsObject, false otherwise
12
- */
13
- function isValidToolsObject(result) {
14
- return (result !== null &&
15
- typeof result === "object" &&
16
- "toolsObject" in result &&
17
- result.toolsObject !== null &&
18
- typeof result.toolsObject === "object" &&
19
- Object.keys(result.toolsObject).length > 0);
20
- }
21
9
  /**
22
10
  * Abstract base class for all AI providers
23
11
  * Tools are integrated as first-class citizens - always available by default
@@ -31,13 +19,15 @@ export class BaseProvider {
31
19
  ? {}
32
20
  : directAgentTools;
33
21
  mcpTools; // MCP tools loaded dynamically when available
22
+ customTools; // Custom tools from registerTool()
23
+ toolExecutor; // Tool executor from setupToolExecutor
34
24
  sessionId;
35
25
  userId;
36
- sdk; // Reference to NeuroLink SDK instance for custom tools
37
- constructor(modelName, providerName, sdk) {
26
+ neurolink; // Reference to actual NeuroLink instance for MCP tools
27
+ constructor(modelName, providerName, neurolink) {
38
28
  this.modelName = modelName || this.getDefaultModel();
39
29
  this.providerName = providerName || this.getProviderName();
40
- this.sdk = sdk;
30
+ this.neurolink = neurolink;
41
31
  }
42
32
  /**
43
33
  * Check if this provider supports tool/function calling
@@ -106,7 +96,7 @@ export class BaseProvider {
106
96
  await new Promise((resolve) => setTimeout(resolve, Math.random() * 9 + 1));
107
97
  }
108
98
  }
109
- // Yield any remaining content
99
+ // Yield all remaining content
110
100
  if (buffer.trim()) {
111
101
  yield { content: buffer };
112
102
  }
@@ -334,37 +324,88 @@ export class BaseProvider {
334
324
  const tools = {
335
325
  ...this.directTools, // Always include direct tools
336
326
  };
337
- logger.debug(`[BaseProvider] getAllTools called, SDK available: ${!!this.sdk}, type: ${typeof this.sdk}`);
327
+ logger.debug(`[BaseProvider] getAllTools called for ${this.providerName}`, {
328
+ neurolinkAvailable: !!this.neurolink,
329
+ neurolinkType: typeof this.neurolink,
330
+ directToolsCount: Object.keys(this.directTools).length,
331
+ });
338
332
  logger.debug(`[BaseProvider] Direct tools: ${Object.keys(this.directTools).join(", ")}`);
339
- // Add custom tools from SDK if available
340
- logger.debug(`[BaseProvider] Checking SDK: ${!!this.sdk}, has getInMemoryServers: ${this.sdk && typeof this.sdk.getInMemoryServers}`);
341
- if (this.sdk && typeof this.sdk.getInMemoryServers === "function") {
342
- logger.debug(`[BaseProvider] SDK check passed, loading custom tools`);
333
+ // Add custom tools from setupToolExecutor if available
334
+ if (this.customTools && this.customTools.size > 0) {
335
+ logger.debug(`[BaseProvider] Loading ${this.customTools.size} custom tools from setupToolExecutor`);
336
+ for (const [toolName, toolDef] of this.customTools.entries()) {
337
+ logger.debug(`[BaseProvider] Processing custom tool: ${toolName}`, {
338
+ toolDef: typeof toolDef,
339
+ hasExecute: toolDef && typeof toolDef === "object" && "execute" in toolDef,
340
+ hasName: toolDef && typeof toolDef === "object" && "name" in toolDef,
341
+ });
342
+ if (toolDef &&
343
+ typeof toolDef === "object" &&
344
+ "execute" in toolDef &&
345
+ typeof toolDef.execute === "function") {
346
+ try {
347
+ const { tool: createAISDKTool } = await import("ai");
348
+ const typedToolDef = toolDef;
349
+ tools[toolName] = createAISDKTool({
350
+ description: typedToolDef.description || `Custom tool ${toolName}`,
351
+ parameters: z.object({}), // Use empty schema for custom tools
352
+ execute: async (args) => {
353
+ logger.debug(`[BaseProvider] Executing custom tool: ${toolName}`, { args });
354
+ // Use the tool executor if available (from setupToolExecutor)
355
+ if (this.toolExecutor) {
356
+ return await this.toolExecutor(toolName, args);
357
+ }
358
+ else {
359
+ return await typedToolDef.execute(args);
360
+ }
361
+ },
362
+ });
363
+ logger.debug(`[BaseProvider] Successfully added custom tool: ${toolName}`);
364
+ }
365
+ catch (error) {
366
+ logger.error(`[BaseProvider] Failed to add custom tool: ${toolName}`, error);
367
+ }
368
+ }
369
+ else {
370
+ logger.warn(`[BaseProvider] Invalid custom tool format: ${toolName}`, {
371
+ toolDef: typeof toolDef,
372
+ hasExecute: toolDef && typeof toolDef === "object" && "execute" in toolDef,
373
+ executeType: toolDef && typeof toolDef === "object" && "execute" in toolDef
374
+ ? typeof toolDef.execute
375
+ : "N/A",
376
+ });
377
+ }
378
+ }
379
+ }
380
+ // Add custom tools from NeuroLink if available
381
+ logger.debug(`[BaseProvider] Checking NeuroLink: ${!!this.neurolink}, has getInMemoryServers: ${this.neurolink && typeof this.neurolink.getInMemoryServers}`);
382
+ if (this.neurolink &&
383
+ typeof this.neurolink.getInMemoryServers === "function") {
384
+ logger.debug(`[BaseProvider] NeuroLink check passed, loading custom tools`);
343
385
  try {
344
- const inMemoryServers = this.sdk.getInMemoryServers();
386
+ const inMemoryServers = this.neurolink.getInMemoryServers();
345
387
  logger.debug(`[BaseProvider] Got servers:`, inMemoryServers.size);
346
388
  logger.debug(`[BaseProvider] Loading custom tools from SDK, found ${inMemoryServers.size} servers`);
347
389
  if (inMemoryServers && inMemoryServers.size > 0) {
348
390
  // Convert in-memory server tools to AI SDK format
349
391
  for (const [serverId, serverConfig] of inMemoryServers) {
350
- const server = serverConfig.server;
351
- if (server && server.tools) {
352
- // Handle both Map and object formats
353
- const toolEntries = server.tools instanceof Map
354
- ? Array.from(server.tools.entries())
355
- : Object.entries(server.tools || {});
392
+ if (serverConfig && serverConfig.tools) {
393
+ // Handle tools array from MCPServerInfo
394
+ const toolEntries = serverConfig.tools.map((tool) => [
395
+ tool.name,
396
+ tool,
397
+ ]);
356
398
  for (const [toolName, toolInfo] of toolEntries) {
357
399
  if (toolInfo && typeof toolInfo.execute === "function") {
358
400
  logger.debug(`[BaseProvider] Converting custom tool: ${toolName}`);
359
401
  try {
360
402
  // Convert to AI SDK tool format
361
403
  const { tool: createAISDKTool } = await import("ai");
362
- const { z } = await import("zod");
363
404
  tools[toolName] = createAISDKTool({
364
405
  description: toolInfo.description || `Tool ${toolName}`,
365
- parameters: toolInfo.inputSchema ||
366
- toolInfo.parameters ||
367
- z.object({}),
406
+ parameters: toolInfo.parameters instanceof z.ZodType
407
+ ? toolInfo.parameters
408
+ : z.object({}),
368
409
  execute: async (args) => {
369
410
  const result = await toolInfo.execute(args);
370
411
  // Handle MCP-style results
@@ -399,55 +440,40 @@ export class BaseProvider {
399
440
  // Not an error - custom tools are optional
400
441
  }
401
442
  }
402
- // ✅ CRITICAL FIX: Add external MCP tools if SDK has external server manager
403
- if (this.sdk &&
404
- this.sdk.externalServerManager &&
405
- typeof this.sdk.externalServerManager.getAllTools === "function") {
443
+ if (this.neurolink &&
444
+ typeof this.neurolink.getExternalMCPTools === "function") {
406
445
  try {
407
- logger.debug(`[BaseProvider] Loading external MCP tools from SDK via externalServerManager`);
408
- const externalTools = this.sdk.externalServerManager.getAllTools();
409
- logger.debug(`[BaseProvider] Found ${externalTools.length} external MCP tools`, {
410
- tools: externalTools.map((t) => ({
411
- name: t.name,
412
- available: t.isAvailable,
413
- server: t.serverId,
414
- })),
415
- });
416
- for (const externalTool of externalTools) {
417
- if (externalTool.isAvailable) {
418
- logger.debug(`[BaseProvider] Converting external MCP tool: ${externalTool.name} from ${externalTool.serverId}`);
446
+ logger.debug(`[BaseProvider] Loading external MCP tools from NeuroLink via direct tool access`);
447
+ const externalTools = this.neurolink.getExternalMCPTools() || [];
448
+ logger.debug(`[BaseProvider] Found ${externalTools.length} external MCP tools`);
449
+ for (const tool of externalTools) {
450
+ logger.debug(`[BaseProvider] Converting external MCP tool: ${tool.name}`);
451
+ try {
419
452
  // Convert to AI SDK tool format
420
453
  const { tool: createAISDKTool } = await import("ai");
421
- const { z } = await import("zod");
422
- tools[externalTool.name] = createAISDKTool({
423
- description: externalTool.description ||
424
- `External MCP tool ${externalTool.name}`,
425
- parameters: await this.convertMCPSchemaToZod(externalTool.inputSchema),
454
+ tools[tool.name] = createAISDKTool({
455
+ description: tool.description || `External MCP tool ${tool.name}`,
456
+ parameters: await this.convertMCPSchemaToZod(tool.inputSchema),
426
457
  execute: async (args) => {
427
- logger.debug(`[BaseProvider] Executing external MCP tool: ${externalTool.name}`, { args });
428
- // Execute via SDK's external server manager
429
- if (this.sdk &&
430
- this.sdk.externalServerManager &&
431
- typeof this.sdk.externalServerManager.executeTool ===
432
- "function") {
433
- return await this.sdk.externalServerManager.executeTool(externalTool.serverId, externalTool.name, args);
458
+ logger.debug(`[BaseProvider] Executing external MCP tool: ${tool.name}`, { args });
459
+ // Execute via NeuroLink's direct tool execution
460
+ if (this.neurolink &&
461
+ typeof this.neurolink.executeExternalMCPTool === "function") {
462
+ return await this.neurolink.executeExternalMCPTool(tool.serverId || "unknown", tool.name, args);
434
463
  }
435
464
  else {
436
- throw new Error(`Cannot execute external MCP tool: SDK externalServerManager.executeTool not available`);
465
+ throw new Error(`Cannot execute external MCP tool: NeuroLink executeExternalMCPTool not available`);
437
466
  }
438
467
  },
439
468
  });
440
- logger.debug(`[BaseProvider] Successfully added external MCP tool: ${externalTool.name}`);
469
+ logger.debug(`[BaseProvider] Successfully added external MCP tool: ${tool.name}`);
441
470
  }
442
- else {
443
- logger.debug(`[BaseProvider] Skipping unavailable external MCP tool: ${externalTool.name}`);
471
+ catch (toolCreationError) {
472
+ logger.error(`Failed to create external MCP tool: ${tool.name}`, toolCreationError);
444
473
  }
445
474
  }
446
475
  logger.debug(`[BaseProvider] External MCP tools loading complete`, {
447
- totalExternalTools: externalTools.length,
448
- availableExternalTools: externalTools.filter((t) => t.isAvailable)
449
- .length,
450
- addedToTools: externalTools.filter((t) => t.isAvailable).length,
476
+ totalToolsAdded: externalTools.length,
451
477
  });
452
478
  }
453
479
  catch (error) {
@@ -456,12 +482,10 @@ export class BaseProvider {
456
482
  }
457
483
  }
458
484
  else {
459
- logger.debug(`[BaseProvider] No external MCP tools interface available`, {
460
- hasSDK: !!this.sdk,
461
- hasExternalServerManager: this.sdk && !!this.sdk.externalServerManager,
462
- hasGetAllTools: this.sdk &&
463
- this.sdk.externalServerManager &&
464
- typeof this.sdk.externalServerManager.getAllTools === "function",
485
+ logger.debug(`[BaseProvider] No external MCP tool interface available`, {
486
+ hasNeuroLink: !!this.neurolink,
487
+ hasGetExternalMCPTools: this.neurolink &&
488
+ typeof this.neurolink.getExternalMCPTools === "function",
465
489
  });
466
490
  }
467
491
  // MCP tools loading simplified - removed functionCalling dependency
@@ -689,6 +713,9 @@ export class BaseProvider {
689
713
  });
690
714
  return;
691
715
  }
716
+ // Store custom tools for use in getAllTools()
717
+ this.customTools = sdk.customTools;
718
+ this.toolExecutor = sdk.executeTool;
692
719
  logger.debug(`[${functionTag}] Setting up tool executor for provider`, {
693
720
  providerType: this.constructor.name,
694
721
  availableCustomTools: sdk.customTools.size,
@@ -20,10 +20,10 @@ declare const ModelConfigSchema: z.ZodObject<{
20
20
  contextWindow: z.ZodNumber;
21
21
  releaseDate: z.ZodString;
22
22
  }, "strip", z.ZodTypeAny, {
23
- id: string;
24
- displayName: string;
25
23
  capabilities: string[];
24
+ id: string;
26
25
  deprecated: boolean;
26
+ displayName: string;
27
27
  pricing: {
28
28
  input: number;
29
29
  output: number;
@@ -31,10 +31,10 @@ declare const ModelConfigSchema: z.ZodObject<{
31
31
  contextWindow: number;
32
32
  releaseDate: string;
33
33
  }, {
34
- id: string;
35
- displayName: string;
36
34
  capabilities: string[];
35
+ id: string;
37
36
  deprecated: boolean;
37
+ displayName: string;
38
38
  pricing: {
39
39
  input: number;
40
40
  output: number;
@@ -63,10 +63,10 @@ declare const ModelRegistrySchema: z.ZodObject<{
63
63
  contextWindow: z.ZodNumber;
64
64
  releaseDate: z.ZodString;
65
65
  }, "strip", z.ZodTypeAny, {
66
- id: string;
67
- displayName: string;
68
66
  capabilities: string[];
67
+ id: string;
69
68
  deprecated: boolean;
69
+ displayName: string;
70
70
  pricing: {
71
71
  input: number;
72
72
  output: number;
@@ -74,10 +74,10 @@ declare const ModelRegistrySchema: z.ZodObject<{
74
74
  contextWindow: number;
75
75
  releaseDate: string;
76
76
  }, {
77
- id: string;
78
- displayName: string;
79
77
  capabilities: string[];
78
+ id: string;
80
79
  deprecated: boolean;
80
+ displayName: string;
81
81
  pricing: {
82
82
  input: number;
83
83
  output: number;
@@ -89,11 +89,12 @@ declare const ModelRegistrySchema: z.ZodObject<{
89
89
  defaults: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
90
90
  }, "strip", z.ZodTypeAny, {
91
91
  version: string;
92
+ lastUpdated: string;
92
93
  models: Record<string, Record<string, {
93
- id: string;
94
- displayName: string;
95
94
  capabilities: string[];
95
+ id: string;
96
96
  deprecated: boolean;
97
+ displayName: string;
97
98
  pricing: {
98
99
  input: number;
99
100
  output: number;
@@ -101,16 +102,16 @@ declare const ModelRegistrySchema: z.ZodObject<{
101
102
  contextWindow: number;
102
103
  releaseDate: string;
103
104
  }>>;
104
- lastUpdated: string;
105
105
  defaults?: Record<string, string> | undefined;
106
106
  aliases?: Record<string, string> | undefined;
107
107
  }, {
108
108
  version: string;
109
+ lastUpdated: string;
109
110
  models: Record<string, Record<string, {
110
- id: string;
111
- displayName: string;
112
111
  capabilities: string[];
112
+ id: string;
113
113
  deprecated: boolean;
114
+ displayName: string;
114
115
  pricing: {
115
116
  input: number;
116
117
  output: number;
@@ -118,7 +119,6 @@ declare const ModelRegistrySchema: z.ZodObject<{
118
119
  contextWindow: number;
119
120
  releaseDate: string;
120
121
  }>>;
121
- lastUpdated: string;
122
122
  defaults?: Record<string, string> | undefined;
123
123
  aliases?: Record<string, string> | undefined;
124
124
  }>;
@@ -89,7 +89,7 @@ export class DynamicModelProvider {
89
89
  }
90
90
  // Log all failures for debugging
91
91
  logger.warn(`[DynamicModelProvider] All model configuration sources failed`, { errors });
92
- throw new Error(`Failed to load model configuration from any source. Attempted: ${errors.map((e) => e.source).join(", ")}`);
92
+ throw new Error(`Failed to load model configuration from all source. Attempted: ${errors.map((e) => e.source).join(", ")}`);
93
93
  }
94
94
  /**
95
95
  * Load configuration from a source with timeout handling
@@ -181,7 +181,7 @@ Relevance: [score]
181
181
  Accuracy: [score]
182
182
  Completeness: [score]
183
183
  Overall: [score]
184
- Reasoning: [Provide a detailed explanation of your evaluation, explaining why you gave these scores. Include specific observations about the response's strengths and any areas for improvement.]
184
+ Reasoning: [Provide a detailed explanation of your evaluation, explaining why you gave these scores. Include specific observations about the response's strengths and all possible areas for improvement.]
185
185
  `;
186
186
  // Generate evaluation
187
187
  const result = await provider.generate(prompt);
@@ -109,19 +109,8 @@ export class AIProviderFactory {
109
109
  const finalModelName = resolvedModelName === "default" || resolvedModelName === null
110
110
  ? undefined
111
111
  : resolvedModelName;
112
- // ✅ CRITICAL FIX: Pass external MCP tools interface to BaseProvider
113
- let finalSdk = sdk;
114
- if (sdk && typeof sdk.getExternalMCPTools === "function") {
115
- finalSdk = {
116
- ...sdk,
117
- externalServerManager: {
118
- getAllTools: () => sdk.getExternalMCPTools(),
119
- executeTool: (serverId, toolName, params) => sdk.executeExternalMCPTool(serverId, toolName, params),
120
- },
121
- };
122
- }
123
112
  // Create provider with enhanced SDK
124
- const provider = await ProviderFactory.createProvider(normalizedName, finalModelName, finalSdk);
113
+ const provider = await ProviderFactory.createProvider(normalizedName, finalModelName, sdk);
125
114
  logger.debug(componentIdentifier, "Pure factory pattern provider created", {
126
115
  providerName: normalizedName,
127
116
  modelName: finalModelName,
package/dist/index.d.ts CHANGED
@@ -10,13 +10,14 @@ import { AIProviderFactory } from "./core/factory.js";
10
10
  export { AIProviderFactory };
11
11
  export type { AIProvider, AIProviderName, ProviderConfig, StreamingOptions, ProviderAttempt, SupportedModelName, } from "./core/types.js";
12
12
  export type { GenerateOptions, GenerateResult, EnhancedProvider, } from "./types/generateTypes.js";
13
- export type { SimpleTool, ToolContext } from "./sdk/toolRegistration.js";
14
- export { createTool, createTypedTool, validateTool, } from "./sdk/toolRegistration.js";
15
- export type { InMemoryMCPServerConfig, InMemoryToolInfo, InMemoryToolResult, } from "./types/mcpTypes.js";
13
+ export type { ToolContext } from "./sdk/toolRegistration.js";
14
+ export { validateTool } from "./sdk/toolRegistration.js";
15
+ export type { ToolResult, ToolDefinition } from "./types/tools.js";
16
16
  export { BedrockModels, OpenAIModels, VertexModels, DEFAULT_PROVIDER_CONFIGS, } from "./core/types.js";
17
17
  export { getBestProvider, getAvailableProviders, isValidProvider, } from "./utils/providerUtils.js";
18
18
  export { NeuroLink } from "./neurolink.js";
19
- export type { ProviderStatus, MCPStatus, MCPServerInfo } from "./neurolink.js";
19
+ export type { ProviderStatus, MCPStatus } from "./neurolink.js";
20
+ export type { MCPServerInfo } from "./types/mcpTypes.js";
20
21
  export declare const VERSION = "1.0.0";
21
22
  /**
22
23
  * Quick start factory function
package/dist/index.js CHANGED
@@ -9,7 +9,7 @@
9
9
  // Core exports
10
10
  import { AIProviderFactory } from "./core/factory.js";
11
11
  export { AIProviderFactory };
12
- export { createTool, createTypedTool, validateTool, } from "./sdk/toolRegistration.js";
12
+ export { validateTool } from "./sdk/toolRegistration.js";
13
13
  // Model enums
14
14
  export { BedrockModels, OpenAIModels, VertexModels, DEFAULT_PROVIDER_CONFIGS, } from "./core/types.js";
15
15
  // Utility exports
@@ -163,7 +163,7 @@ export const directAgentTools = {
163
163
  for (const func of allowedMathFunctions) {
164
164
  safeExpression = safeExpression.replace(new RegExp(func, "g"), func);
165
165
  }
166
- // Remove any remaining non-safe characters except Math functions
166
+ // Remove remaining non-safe characters except Math functions
167
167
  const mathSafe = /^[0-9+\-*/().\s]|Math\.(abs|ceil|floor|round|sqrt|pow|sin|cos|tan|log|exp|PI|E)/g;
168
168
  if (!safeExpression
169
169
  .split("")
@@ -3,43 +3,8 @@ import type { Schema } from "ai";
3
3
  import type { Tool, LanguageModelV1 } from "ai";
4
4
  import type { AIProvider, TextGenerationOptions, EnhancedGenerateResult, AnalyticsData, AIProviderName, EvaluationData } from "../core/types.js";
5
5
  import type { StreamOptions, StreamResult } from "../types/streamTypes.js";
6
- import type { JsonValue, UnknownRecord } from "../types/common.js";
7
- import type { ToolResult } from "../types/tools.js";
8
- /**
9
- * Interface for SDK with in-memory MCP servers and external MCP support
10
- */
11
- export interface NeuroLinkSDK {
12
- getInMemoryServers?: () => Map<string, {
13
- server: {
14
- title?: string;
15
- description?: string;
16
- tools?: Map<string, ToolInfo> | Record<string, ToolInfo>;
17
- };
18
- category?: string;
19
- metadata?: UnknownRecord;
20
- }>;
21
- externalServerManager?: {
22
- getAllTools: () => Array<{
23
- name: string;
24
- description: string;
25
- serverId: string;
26
- isAvailable: boolean;
27
- inputSchema?: Record<string, unknown>;
28
- }>;
29
- executeTool: (serverId: string, toolName: string, params: any) => Promise<any>;
30
- };
31
- }
32
- /**
33
- * Interface for tool information in MCP servers
34
- */
35
- interface ToolInfo {
36
- description?: string;
37
- inputSchema?: ZodType<JsonValue>;
38
- parameters?: ZodType<JsonValue>;
39
- execute: (args: JsonValue) => Promise<JsonValue | ToolResult> | JsonValue | ToolResult;
40
- isImplemented?: boolean;
41
- metadata?: UnknownRecord;
42
- }
6
+ import type { UnknownRecord } from "../types/common.js";
7
+ import type { NeuroLink } from "../neurolink.js";
43
8
  /**
44
9
  * Abstract base class for all AI providers
45
10
  * Tools are integrated as first-class citizens - always available by default
@@ -50,10 +15,12 @@ export declare abstract class BaseProvider implements AIProvider {
50
15
  protected readonly defaultTimeout: number;
51
16
  protected readonly directTools: {};
52
17
  protected mcpTools?: Record<string, Tool>;
18
+ protected customTools?: Map<string, unknown>;
19
+ protected toolExecutor?: (toolName: string, params: unknown) => Promise<unknown>;
53
20
  protected sessionId?: string;
54
21
  protected userId?: string;
55
- protected sdk?: NeuroLinkSDK;
56
- constructor(modelName?: string, providerName?: AIProviderName, sdk?: NeuroLinkSDK);
22
+ protected neurolink?: NeuroLink;
23
+ constructor(modelName?: string, providerName?: AIProviderName, neurolink?: NeuroLink);
57
24
  /**
58
25
  * Check if this provider supports tool/function calling
59
26
  * Override in subclasses to disable tools for specific providers or models
@@ -176,4 +143,3 @@ export declare abstract class BaseProvider implements AIProvider {
176
143
  */
177
144
  static chunkPrompt(prompt: string, maxChunkSize?: number, overlap?: number): string[];
178
145
  }
179
- export {};