@juspay/neurolink 7.8.0 → 7.10.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 (52) hide show
  1. package/CHANGELOG.md +22 -5
  2. package/README.md +22 -7
  3. package/dist/agent/directTools.d.ts +23 -843
  4. package/dist/agent/directTools.js +1 -3
  5. package/dist/cli/commands/mcp.js +66 -27
  6. package/dist/cli/commands/ollama.js +7 -3
  7. package/dist/cli/commands/sagemaker.js +145 -144
  8. package/dist/cli/factories/commandFactory.js +10 -6
  9. package/dist/core/dynamicModels.js +6 -0
  10. package/dist/core/types.d.ts +15 -4
  11. package/dist/core/types.js +23 -3
  12. package/dist/factories/providerFactory.js +10 -1
  13. package/dist/factories/providerRegistry.js +1 -1
  14. package/dist/lib/agent/directTools.d.ts +23 -843
  15. package/dist/lib/agent/directTools.js +1 -3
  16. package/dist/lib/core/dynamicModels.js +6 -0
  17. package/dist/lib/core/types.d.ts +15 -4
  18. package/dist/lib/core/types.js +23 -3
  19. package/dist/lib/factories/providerFactory.js +10 -1
  20. package/dist/lib/factories/providerRegistry.js +1 -1
  21. package/dist/lib/neurolink.d.ts +15 -0
  22. package/dist/lib/neurolink.js +73 -1
  23. package/dist/lib/providers/googleVertex.d.ts +4 -0
  24. package/dist/lib/providers/googleVertex.js +44 -3
  25. package/dist/lib/providers/sagemaker/client.js +2 -2
  26. package/dist/lib/sdk/toolRegistration.d.ts +1 -1
  27. package/dist/lib/sdk/toolRegistration.js +13 -5
  28. package/dist/lib/utils/providerHealth.js +20 -5
  29. package/dist/mcp/servers/agent/directToolsServer.js +0 -1
  30. package/dist/mcp/servers/aiProviders/aiCoreServer.js +0 -1
  31. package/dist/models/modelResolver.js +0 -1
  32. package/dist/neurolink.d.ts +15 -0
  33. package/dist/neurolink.js +73 -1
  34. package/dist/providers/amazonBedrock.js +2 -2
  35. package/dist/providers/anthropic.js +2 -2
  36. package/dist/providers/anthropicBaseProvider.js +2 -2
  37. package/dist/providers/googleAiStudio.js +2 -3
  38. package/dist/providers/googleVertex.d.ts +4 -0
  39. package/dist/providers/googleVertex.js +44 -3
  40. package/dist/providers/litellm.js +4 -4
  41. package/dist/providers/ollama.js +1 -2
  42. package/dist/providers/openAI.js +2 -2
  43. package/dist/providers/openaiCompatible.js +1 -2
  44. package/dist/providers/sagemaker/client.js +2 -2
  45. package/dist/providers/sagemaker/errors.js +1 -1
  46. package/dist/providers/sagemaker/language-model.js +1 -1
  47. package/dist/sdk/toolRegistration.d.ts +1 -1
  48. package/dist/sdk/toolRegistration.js +13 -6
  49. package/dist/telemetry/telemetryService.js +0 -2
  50. package/dist/types/tools.js +0 -1
  51. package/dist/utils/providerHealth.js +20 -5
  52. package/package.json +43 -5
@@ -325,9 +325,7 @@ export const directAgentTools = {
325
325
  },
326
326
  }),
327
327
  };
328
- /**
329
- * Get a subset of tools for specific use cases
330
- */
328
+ // eslint-disable-next-line no-redeclare
331
329
  export function getToolsForCategory(category = "all") {
332
330
  switch (category) {
333
331
  case "basic":
@@ -80,6 +80,46 @@ const POPULAR_MCP_SERVERS = {
80
80
  description: "Bitbucket repository management and development workflows",
81
81
  },
82
82
  };
83
+ /**
84
+ * Type guard to check if an object conforms to MCPStatusResponse interface
85
+ */
86
+ function isMCPStatusResponse(obj) {
87
+ if (!obj || typeof obj !== "object") {
88
+ return false;
89
+ }
90
+ const record = obj;
91
+ // Check if autoDiscoveredServers is either undefined or an array
92
+ if (record.autoDiscoveredServers !== undefined) {
93
+ if (!Array.isArray(record.autoDiscoveredServers)) {
94
+ return false;
95
+ }
96
+ // Check each server object in the array
97
+ for (const server of record.autoDiscoveredServers) {
98
+ if (!server || typeof server !== "object") {
99
+ return false;
100
+ }
101
+ const serverRecord = server;
102
+ // Optional properties should be correct type if present
103
+ if (serverRecord.name !== undefined &&
104
+ typeof serverRecord.name !== "string") {
105
+ return false;
106
+ }
107
+ if (serverRecord.id !== undefined &&
108
+ typeof serverRecord.id !== "string") {
109
+ return false;
110
+ }
111
+ if (serverRecord.status !== undefined &&
112
+ typeof serverRecord.status !== "string") {
113
+ return false;
114
+ }
115
+ if (serverRecord.source !== undefined &&
116
+ typeof serverRecord.source !== "string") {
117
+ return false;
118
+ }
119
+ }
120
+ }
121
+ return true;
122
+ }
83
123
  /**
84
124
  * Convert SDK MCPStatus to CLI format with server list
85
125
  */
@@ -98,19 +138,18 @@ sdk) {
98
138
  });
99
139
  });
100
140
  // Add auto-discovered servers
101
- if (status.autoDiscoveredServers &&
102
- Array.isArray(status.autoDiscoveredServers)) {
141
+ // Cache the type guard result to avoid repeated validation
142
+ const isValidStatusResponse = isMCPStatusResponse(status);
143
+ if (isValidStatusResponse && status.autoDiscoveredServers) {
103
144
  status.autoDiscoveredServers.forEach((server) => {
104
145
  servers.push({
105
- name: server.name || server.id,
146
+ name: server.name || server.id || "Unknown",
106
147
  connected: server.status === "connected",
107
148
  description: server.source
108
149
  ? `Auto-discovered from ${server.source}`
109
150
  : `Auto-discovered server`,
110
151
  tools: [],
111
- error: server.status === "failed"
112
- ? "Connection failed"
113
- : undefined,
152
+ error: server.status === "failed" ? "Connection failed" : undefined,
114
153
  });
115
154
  });
116
155
  }
@@ -397,8 +436,8 @@ export class MCPCommandFactory {
397
436
  }
398
437
  }
399
438
  }
400
- catch (error) {
401
- logger.error(chalk.red(`❌ List command failed: ${error.message}`));
439
+ catch (_error) {
440
+ logger.error(chalk.red(`❌ List command failed: ${_error.message}`));
402
441
  process.exit(1);
403
442
  }
404
443
  }
@@ -427,7 +466,7 @@ export class MCPCommandFactory {
427
466
  const parsedEnv = JSON.parse(argv.env);
428
467
  env = { ...env, ...parsedEnv };
429
468
  }
430
- catch (error) {
469
+ catch (_error) {
431
470
  if (spinner) {
432
471
  spinner.fail();
433
472
  }
@@ -503,8 +542,8 @@ export class MCPCommandFactory {
503
542
  logger.always(chalk.yellow("⚠️ Could not test connection"));
504
543
  }
505
544
  }
506
- catch (error) {
507
- logger.error(chalk.red(`❌ Install command failed: ${error.message}`));
545
+ catch (_error) {
546
+ logger.error(chalk.red(`❌ Install command failed: ${_error.message}`));
508
547
  process.exit(1);
509
548
  }
510
549
  }
@@ -524,7 +563,7 @@ export class MCPCommandFactory {
524
563
  try {
525
564
  env = JSON.parse(argv.env);
526
565
  }
527
- catch (error) {
566
+ catch (_error) {
528
567
  if (spinner) {
529
568
  spinner.fail();
530
569
  }
@@ -574,8 +613,8 @@ export class MCPCommandFactory {
574
613
  }
575
614
  logger.always(`Transport: ${config.transport}`);
576
615
  }
577
- catch (error) {
578
- logger.error(chalk.red(`❌ Add command failed: ${error.message}`));
616
+ catch (_error) {
617
+ logger.error(chalk.red(`❌ Add command failed: ${_error.message}`));
579
618
  process.exit(1);
580
619
  }
581
620
  }
@@ -641,8 +680,8 @@ export class MCPCommandFactory {
641
680
  logger.always(chalk.yellow(`⚠️ ${connected}/${total} servers connected`));
642
681
  }
643
682
  }
644
- catch (error) {
645
- logger.error(chalk.red(`❌ Test command failed: ${error.message}`));
683
+ catch (_error) {
684
+ logger.error(chalk.red(`❌ Test command failed: ${_error.message}`));
646
685
  process.exit(1);
647
686
  }
648
687
  }
@@ -662,7 +701,7 @@ export class MCPCommandFactory {
662
701
  try {
663
702
  params = JSON.parse(argv.params);
664
703
  }
665
- catch (error) {
704
+ catch (_error) {
666
705
  if (spinner) {
667
706
  spinner.fail();
668
707
  }
@@ -764,8 +803,8 @@ export class MCPCommandFactory {
764
803
  process.exit(1);
765
804
  }
766
805
  }
767
- catch (error) {
768
- logger.error(chalk.red(`❌ Exec command failed: ${error.message}`));
806
+ catch (_error) {
807
+ logger.error(chalk.red(`❌ Exec command failed: ${_error.message}`));
769
808
  process.exit(1);
770
809
  }
771
810
  }
@@ -816,8 +855,8 @@ export class MCPCommandFactory {
816
855
  process.exit(1);
817
856
  }
818
857
  }
819
- catch (error) {
820
- logger.error(chalk.red(`❌ Remove command failed: ${error.message}`));
858
+ catch (_error) {
859
+ logger.error(chalk.red(`❌ Remove command failed: ${_error.message}`));
821
860
  process.exit(1);
822
861
  }
823
862
  }
@@ -883,14 +922,14 @@ export class MCPCommandFactory {
883
922
  });
884
923
  logger.always(chalk.green(`✅ Installed ${server.name}`));
885
924
  }
886
- catch (error) {
887
- logger.always(chalk.red(`❌ Failed to install ${server.name}: ${error.message}`));
925
+ catch (_error) {
926
+ logger.always(chalk.red(`❌ Failed to install ${server.name}: ${_error.message}`));
888
927
  }
889
928
  }
890
929
  }
891
930
  }
892
- catch (error) {
893
- logger.error(chalk.red(`❌ Discover command failed: ${error.message}`));
931
+ catch (_error) {
932
+ logger.error(chalk.red(`❌ Discover command failed: ${_error.message}`));
894
933
  process.exit(1);
895
934
  }
896
935
  }
@@ -928,7 +967,7 @@ export class MCPCommandFactory {
928
967
  }
929
968
  }
930
969
  }
931
- catch (error) {
970
+ catch (_error) {
932
971
  // Ignore errors in discovery
933
972
  }
934
973
  return servers;
@@ -968,7 +1007,7 @@ export class MCPCommandFactory {
968
1007
  }
969
1008
  }
970
1009
  }
971
- catch (error) {
1010
+ catch (_error) {
972
1011
  // Ignore errors in discovery
973
1012
  }
974
1013
  return servers;
@@ -107,12 +107,15 @@ async function statusHandler() {
107
107
  logger.always(chalk.green(`\n${data.models.length} models available`));
108
108
  }
109
109
  }
110
- catch {
111
- // Curl might not be available, that's ok
110
+ catch (error) {
111
+ // Curl might not be available, that's ok. Error is ignored.
112
+ logger.debug &&
113
+ logger.debug("Optional curl command failed in statusHandler:", error);
112
114
  }
113
115
  }
114
116
  catch (error) {
115
117
  spinner.fail("Ollama service is not running");
118
+ logger.debug && logger.debug("Ollama status check failed:", error);
116
119
  logger.always(chalk.yellow("\nStart Ollama with: ollama serve"));
117
120
  logger.always(chalk.blue("Or restart the Ollama app if using the desktop version"));
118
121
  process.exit(1);
@@ -200,9 +203,10 @@ async function stopHandler() {
200
203
  }
201
204
  spinner.succeed("Ollama service stopped");
202
205
  }
203
- catch (error) {
206
+ catch (err) {
204
207
  spinner.fail("Failed to stop Ollama service");
205
208
  logger.error(chalk.red("It may not be running or requires manual stop"));
209
+ logger.error(chalk.red(`Error details: ${err}`));
206
210
  }
207
211
  }
208
212
  async function setupHandler() {