@juspay/neurolink 9.11.0 → 9.12.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.
package/CHANGELOG.md CHANGED
@@ -1,3 +1,19 @@
1
+ ## [9.12.1](https://github.com/juspay/neurolink/compare/v9.12.0...v9.12.1) (2026-02-23)
2
+
3
+ ### Bug Fixes
4
+
5
+ - **(core):** lazy-load sharp and stop leaking framework types in .d.ts ([4ecc448](https://github.com/juspay/neurolink/commit/4ecc4482dbf1b0ef30de537a0edd9b6d4ce67a3f))
6
+
7
+ ## [9.12.0](https://github.com/juspay/neurolink/compare/v9.11.0...v9.12.0) (2026-02-23)
8
+
9
+ ### Features
10
+
11
+ - **(core):** implement SDK boundary items — context windows, caching, tool output management ([75a07a4](https://github.com/juspay/neurolink/commit/75a07a4f6d8eaec2fefe577dc62428e759bb52ce))
12
+
13
+ ### Bug Fixes
14
+
15
+ - **(mcp):** missing gap for mcp cli ([79b51a8](https://github.com/juspay/neurolink/commit/79b51a88fa8f79809917e6159106278114f86636))
16
+
1
17
  ## [9.11.0](https://github.com/juspay/neurolink/compare/v9.10.1...v9.11.0) (2026-02-22)
2
18
 
3
19
  ### Features
@@ -541,15 +541,15 @@ export class ExternalServerManager extends EventEmitter {
541
541
  env: config.env,
542
542
  tools: [], // Will be populated after server connection
543
543
  blockedTools: config.blockedTools,
544
+ // Preserve top-level operational fields so startServer can read them
545
+ timeout: config.timeout,
546
+ retries: config.retries,
547
+ healthCheckInterval: config.healthCheckInterval,
548
+ autoRestart: config.autoRestart,
549
+ cwd: config.cwd,
550
+ url: config.url,
544
551
  metadata: {
545
552
  category: "external",
546
- // Store additional ExternalMCPServerConfig fields in metadata
547
- timeout: config.timeout,
548
- retries: config.retries,
549
- healthCheckInterval: config.healthCheckInterval,
550
- autoRestart: config.autoRestart,
551
- cwd: config.cwd,
552
- url: config.url,
553
553
  ...(safeMetadataConversion(config.metadata) || {}),
554
554
  },
555
555
  };
@@ -928,8 +928,9 @@ export class ExternalServerManager extends EventEmitter {
928
928
  reason,
929
929
  timestamp: new Date(),
930
930
  });
931
- // Attempt restart if enabled
932
- if (this.config.enableAutoRestart && !this.isShuttingDown) {
931
+ // Attempt restart if enabled — prefer server-specific setting, fall back to global
932
+ if ((instance.config.autoRestart ?? this.config.enableAutoRestart) &&
933
+ !this.isShuttingDown) {
933
934
  this.scheduleRestart(serverId);
934
935
  }
935
936
  else {
@@ -2538,6 +2538,11 @@ Current user's request: ${currentInput}`;
2538
2538
  skippedToolInjection: !!options.skipToolPromptInjection,
2539
2539
  enhancedPromptPreview: enhancedSystemPrompt.substring(0, 500) + "...",
2540
2540
  });
2541
+ logger.debug("[Observability] Full system prompt", {
2542
+ requestId,
2543
+ systemPromptLength: enhancedSystemPrompt.length,
2544
+ systemPrompt: enhancedSystemPrompt,
2545
+ });
2541
2546
  // Get conversation messages for context
2542
2547
  let conversationMessages = await getConversationMessages(this.conversationMemory, options);
2543
2548
  if (logger.shouldLog("debug")) {
@@ -48,7 +48,6 @@ import ffmpegCommand from "fluent-ffmpeg";
48
48
  import { createWriteStream, existsSync, promises as fs } from "fs";
49
49
  import { tmpdir } from "os";
50
50
  import { join } from "path";
51
- import sharp from "sharp";
52
51
  import { Readable } from "stream";
53
52
  import { pipeline } from "stream/promises";
54
53
  import { BaseFileProcessor } from "../base/BaseFileProcessor.js";
@@ -538,6 +537,7 @@ export class VideoProcessor extends BaseFileProcessor {
538
537
  await fs.access(framePath);
539
538
  const rawFrame = await fs.readFile(framePath);
540
539
  // Resize to fit within max dimension while preserving aspect ratio
540
+ const sharp = (await import("sharp")).default;
541
541
  const resized = await sharp(rawFrame)
542
542
  .resize(VIDEO_CONFIG.FRAME_MAX_DIMENSION, VIDEO_CONFIG.FRAME_MAX_DIMENSION, {
543
543
  fit: "inside",
@@ -878,6 +878,7 @@ export class VideoProcessor extends BaseFileProcessor {
878
878
  try {
879
879
  await fs.access(framePath);
880
880
  const rawFrame = await fs.readFile(framePath);
881
+ const sharp = (await import("sharp")).default;
881
882
  const resized = await sharp(rawFrame)
882
883
  .resize(VIDEO_CONFIG.FRAME_MAX_DIMENSION, VIDEO_CONFIG.FRAME_MAX_DIMENSION, {
883
884
  fit: "inside",
@@ -2,7 +2,6 @@
2
2
  * Express Server Adapter
3
3
  * Server adapter implementation using Express framework
4
4
  */
5
- import type { Express } from "express";
6
5
  import type { NeuroLink } from "../../neurolink.js";
7
6
  import { BaseServerAdapter } from "../abstract/baseServerAdapter.js";
8
7
  import type { MiddlewareDefinition, RouteDefinition, ServerAdapterConfig } from "../types.js";
@@ -67,5 +66,5 @@ export declare class ExpressServerAdapter extends BaseServerAdapter {
67
66
  /**
68
67
  * Get the Express app instance
69
68
  */
70
- getFrameworkInstance(): Express;
69
+ getFrameworkInstance(): unknown;
71
70
  }
@@ -3,7 +3,6 @@
3
3
  * Server adapter implementation using Fastify framework
4
4
  * Fastify is known for its high performance and low overhead
5
5
  */
6
- import type { FastifyInstance } from "fastify";
7
6
  import type { NeuroLink } from "../../neurolink.js";
8
7
  import { BaseServerAdapter } from "../abstract/baseServerAdapter.js";
9
8
  import type { MiddlewareDefinition, RouteDefinition, ServerAdapterConfig } from "../types.js";
@@ -67,5 +66,5 @@ export declare class FastifyServerAdapter extends BaseServerAdapter {
67
66
  /**
68
67
  * Get the Fastify instance
69
68
  */
70
- getFrameworkInstance(): FastifyInstance;
69
+ getFrameworkInstance(): unknown;
71
70
  }
@@ -3,7 +3,6 @@
3
3
  * Primary server adapter implementation using Hono framework
4
4
  * Hono is chosen for its performance, TypeScript-first design, and edge compatibility
5
5
  */
6
- import { Hono } from "hono";
7
6
  import type { NeuroLink } from "../../neurolink.js";
8
7
  import { BaseServerAdapter } from "../abstract/baseServerAdapter.js";
9
8
  import type { MiddlewareDefinition, RouteDefinition, ServerAdapterConfig } from "../types.js";
@@ -65,7 +64,7 @@ export declare class HonoServerAdapter extends BaseServerAdapter {
65
64
  /**
66
65
  * Get the Hono app instance
67
66
  */
68
- getFrameworkInstance(): Hono;
67
+ getFrameworkInstance(): unknown;
69
68
  private extractHeaders;
70
69
  private extractQuery;
71
70
  private extractBody;
@@ -541,15 +541,15 @@ export class ExternalServerManager extends EventEmitter {
541
541
  env: config.env,
542
542
  tools: [], // Will be populated after server connection
543
543
  blockedTools: config.blockedTools,
544
+ // Preserve top-level operational fields so startServer can read them
545
+ timeout: config.timeout,
546
+ retries: config.retries,
547
+ healthCheckInterval: config.healthCheckInterval,
548
+ autoRestart: config.autoRestart,
549
+ cwd: config.cwd,
550
+ url: config.url,
544
551
  metadata: {
545
552
  category: "external",
546
- // Store additional ExternalMCPServerConfig fields in metadata
547
- timeout: config.timeout,
548
- retries: config.retries,
549
- healthCheckInterval: config.healthCheckInterval,
550
- autoRestart: config.autoRestart,
551
- cwd: config.cwd,
552
- url: config.url,
553
553
  ...(safeMetadataConversion(config.metadata) || {}),
554
554
  },
555
555
  };
@@ -928,8 +928,9 @@ export class ExternalServerManager extends EventEmitter {
928
928
  reason,
929
929
  timestamp: new Date(),
930
930
  });
931
- // Attempt restart if enabled
932
- if (this.config.enableAutoRestart && !this.isShuttingDown) {
931
+ // Attempt restart if enabled — prefer server-specific setting, fall back to global
932
+ if ((instance.config.autoRestart ?? this.config.enableAutoRestart) &&
933
+ !this.isShuttingDown) {
933
934
  this.scheduleRestart(serverId);
934
935
  }
935
936
  else {
package/dist/neurolink.js CHANGED
@@ -2538,6 +2538,11 @@ Current user's request: ${currentInput}`;
2538
2538
  skippedToolInjection: !!options.skipToolPromptInjection,
2539
2539
  enhancedPromptPreview: enhancedSystemPrompt.substring(0, 500) + "...",
2540
2540
  });
2541
+ logger.debug("[Observability] Full system prompt", {
2542
+ requestId,
2543
+ systemPromptLength: enhancedSystemPrompt.length,
2544
+ systemPrompt: enhancedSystemPrompt,
2545
+ });
2541
2546
  // Get conversation messages for context
2542
2547
  let conversationMessages = await getConversationMessages(this.conversationMemory, options);
2543
2548
  if (logger.shouldLog("debug")) {
@@ -48,7 +48,6 @@ import ffmpegCommand from "fluent-ffmpeg";
48
48
  import { createWriteStream, existsSync, promises as fs } from "fs";
49
49
  import { tmpdir } from "os";
50
50
  import { join } from "path";
51
- import sharp from "sharp";
52
51
  import { Readable } from "stream";
53
52
  import { pipeline } from "stream/promises";
54
53
  import { BaseFileProcessor } from "../base/BaseFileProcessor.js";
@@ -538,6 +537,7 @@ export class VideoProcessor extends BaseFileProcessor {
538
537
  await fs.access(framePath);
539
538
  const rawFrame = await fs.readFile(framePath);
540
539
  // Resize to fit within max dimension while preserving aspect ratio
540
+ const sharp = (await import("sharp")).default;
541
541
  const resized = await sharp(rawFrame)
542
542
  .resize(VIDEO_CONFIG.FRAME_MAX_DIMENSION, VIDEO_CONFIG.FRAME_MAX_DIMENSION, {
543
543
  fit: "inside",
@@ -878,6 +878,7 @@ export class VideoProcessor extends BaseFileProcessor {
878
878
  try {
879
879
  await fs.access(framePath);
880
880
  const rawFrame = await fs.readFile(framePath);
881
+ const sharp = (await import("sharp")).default;
881
882
  const resized = await sharp(rawFrame)
882
883
  .resize(VIDEO_CONFIG.FRAME_MAX_DIMENSION, VIDEO_CONFIG.FRAME_MAX_DIMENSION, {
883
884
  fit: "inside",
@@ -2,7 +2,6 @@
2
2
  * Express Server Adapter
3
3
  * Server adapter implementation using Express framework
4
4
  */
5
- import type { Express } from "express";
6
5
  import type { NeuroLink } from "../../neurolink.js";
7
6
  import { BaseServerAdapter } from "../abstract/baseServerAdapter.js";
8
7
  import type { MiddlewareDefinition, RouteDefinition, ServerAdapterConfig } from "../types.js";
@@ -67,5 +66,5 @@ export declare class ExpressServerAdapter extends BaseServerAdapter {
67
66
  /**
68
67
  * Get the Express app instance
69
68
  */
70
- getFrameworkInstance(): Express;
69
+ getFrameworkInstance(): unknown;
71
70
  }
@@ -3,7 +3,6 @@
3
3
  * Server adapter implementation using Fastify framework
4
4
  * Fastify is known for its high performance and low overhead
5
5
  */
6
- import type { FastifyInstance } from "fastify";
7
6
  import type { NeuroLink } from "../../neurolink.js";
8
7
  import { BaseServerAdapter } from "../abstract/baseServerAdapter.js";
9
8
  import type { MiddlewareDefinition, RouteDefinition, ServerAdapterConfig } from "../types.js";
@@ -67,5 +66,5 @@ export declare class FastifyServerAdapter extends BaseServerAdapter {
67
66
  /**
68
67
  * Get the Fastify instance
69
68
  */
70
- getFrameworkInstance(): FastifyInstance;
69
+ getFrameworkInstance(): unknown;
71
70
  }
@@ -3,7 +3,6 @@
3
3
  * Primary server adapter implementation using Hono framework
4
4
  * Hono is chosen for its performance, TypeScript-first design, and edge compatibility
5
5
  */
6
- import { Hono } from "hono";
7
6
  import type { NeuroLink } from "../../neurolink.js";
8
7
  import { BaseServerAdapter } from "../abstract/baseServerAdapter.js";
9
8
  import type { MiddlewareDefinition, RouteDefinition, ServerAdapterConfig } from "../types.js";
@@ -65,7 +64,7 @@ export declare class HonoServerAdapter extends BaseServerAdapter {
65
64
  /**
66
65
  * Get the Hono app instance
67
66
  */
68
- getFrameworkInstance(): Hono;
67
+ getFrameworkInstance(): unknown;
69
68
  private extractHeaders;
70
69
  private extractQuery;
71
70
  private extractBody;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@juspay/neurolink",
3
- "version": "9.11.0",
3
+ "version": "9.12.1",
4
4
  "description": "Universal AI Development Platform with working MCP integration, multi-provider support, and professional CLI. Built-in tools operational, 58+ external MCP servers discoverable. Connect to filesystem, GitHub, database operations, and more. Build, test, and deploy AI applications with 13 providers: OpenAI, Anthropic, Google AI, AWS Bedrock, Azure, Hugging Face, Ollama, and Mistral AI.",
5
5
  "author": {
6
6
  "name": "Juspay Technologies",