@juspay/neurolink 7.11.1 → 7.13.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 (67) hide show
  1. package/CHANGELOG.md +12 -0
  2. package/README.md +16 -0
  3. package/dist/config/conversationMemoryConfig.d.ts +27 -0
  4. package/dist/config/conversationMemoryConfig.js +39 -0
  5. package/dist/context/ContextManager.d.ts +28 -0
  6. package/dist/context/ContextManager.js +102 -0
  7. package/dist/context/config.d.ts +5 -0
  8. package/dist/context/config.js +38 -0
  9. package/dist/context/types.d.ts +20 -0
  10. package/dist/context/types.js +1 -0
  11. package/dist/context/utils.d.ts +7 -0
  12. package/dist/context/utils.js +8 -0
  13. package/dist/core/baseProvider.js +4 -2
  14. package/dist/core/conversationMemoryManager.d.ts +41 -0
  15. package/dist/core/conversationMemoryManager.js +152 -0
  16. package/dist/core/types.d.ts +2 -0
  17. package/dist/lib/config/conversationMemoryConfig.d.ts +27 -0
  18. package/dist/lib/config/conversationMemoryConfig.js +39 -0
  19. package/dist/lib/context/ContextManager.d.ts +28 -0
  20. package/dist/lib/context/ContextManager.js +102 -0
  21. package/dist/lib/context/config.d.ts +5 -0
  22. package/dist/lib/context/config.js +38 -0
  23. package/dist/lib/context/types.d.ts +20 -0
  24. package/dist/lib/context/types.js +1 -0
  25. package/dist/lib/context/utils.d.ts +7 -0
  26. package/dist/lib/context/utils.js +8 -0
  27. package/dist/lib/core/baseProvider.js +4 -2
  28. package/dist/lib/core/conversationMemoryManager.d.ts +41 -0
  29. package/dist/lib/core/conversationMemoryManager.js +152 -0
  30. package/dist/lib/core/types.d.ts +2 -0
  31. package/dist/lib/neurolink.d.ts +39 -4
  32. package/dist/lib/neurolink.js +106 -5
  33. package/dist/lib/providers/amazonBedrock.js +4 -2
  34. package/dist/lib/providers/anthropic.js +4 -2
  35. package/dist/lib/providers/azureOpenai.js +4 -2
  36. package/dist/lib/providers/googleAiStudio.js +4 -2
  37. package/dist/lib/providers/googleVertex.js +4 -2
  38. package/dist/lib/providers/huggingFace.js +4 -2
  39. package/dist/lib/providers/litellm.js +4 -2
  40. package/dist/lib/providers/mistral.js +3 -2
  41. package/dist/lib/providers/openAI.js +4 -2
  42. package/dist/lib/types/conversationTypes.d.ts +95 -0
  43. package/dist/lib/types/conversationTypes.js +17 -0
  44. package/dist/lib/types/streamTypes.d.ts +2 -0
  45. package/dist/lib/utils/conversationMemoryUtils.d.ts +22 -0
  46. package/dist/lib/utils/conversationMemoryUtils.js +77 -0
  47. package/dist/lib/utils/messageBuilder.d.ts +13 -0
  48. package/dist/lib/utils/messageBuilder.js +48 -0
  49. package/dist/neurolink.d.ts +39 -4
  50. package/dist/neurolink.js +106 -5
  51. package/dist/providers/amazonBedrock.js +4 -2
  52. package/dist/providers/anthropic.js +4 -2
  53. package/dist/providers/azureOpenai.js +4 -2
  54. package/dist/providers/googleAiStudio.js +4 -2
  55. package/dist/providers/googleVertex.js +4 -2
  56. package/dist/providers/huggingFace.js +4 -2
  57. package/dist/providers/litellm.js +4 -2
  58. package/dist/providers/mistral.js +3 -2
  59. package/dist/providers/openAI.js +4 -2
  60. package/dist/types/conversationTypes.d.ts +95 -0
  61. package/dist/types/conversationTypes.js +17 -0
  62. package/dist/types/streamTypes.d.ts +2 -0
  63. package/dist/utils/conversationMemoryUtils.d.ts +22 -0
  64. package/dist/utils/conversationMemoryUtils.js +77 -0
  65. package/dist/utils/messageBuilder.d.ts +13 -0
  66. package/dist/utils/messageBuilder.js +48 -0
  67. package/package.json +1 -1
@@ -0,0 +1,95 @@
1
+ /**
2
+ * Conversation Memory Types for NeuroLink
3
+ * Provides type-safe conversation storage and context management
4
+ */
5
+ /**
6
+ * Configuration for conversation memory feature
7
+ */
8
+ export interface ConversationMemoryConfig {
9
+ /** Enable conversation memory feature */
10
+ enabled: boolean;
11
+ /** Maximum number of sessions to keep in memory (default: 50) */
12
+ maxSessions?: number;
13
+ /** Maximum number of conversation turns to keep per session (default: 20) */
14
+ maxTurnsPerSession?: number;
15
+ }
16
+ /**
17
+ * Complete memory for a conversation session
18
+ * ULTRA-OPTIMIZED: Direct ChatMessage[] storage - zero conversion overhead
19
+ */
20
+ export interface SessionMemory {
21
+ /** Unique session identifier */
22
+ sessionId: string;
23
+ /** User identifier (optional) */
24
+ userId?: string;
25
+ /** Direct message storage - ready for immediate AI consumption */
26
+ messages: ChatMessage[];
27
+ /** When this session was created */
28
+ createdAt: number;
29
+ /** When this session was last active */
30
+ lastActivity: number;
31
+ /** Optional session metadata */
32
+ metadata?: {
33
+ /** User role or permissions */
34
+ userRole?: string;
35
+ /** Tags for categorizing this session */
36
+ tags?: string[];
37
+ /** Custom data specific to the organization */
38
+ customData?: Record<string, unknown>;
39
+ };
40
+ }
41
+ /**
42
+ * Statistics about conversation memory usage (simplified for pure in-memory storage)
43
+ */
44
+ export interface ConversationMemoryStats {
45
+ /** Total number of active sessions */
46
+ totalSessions: number;
47
+ /** Total number of conversation turns across all sessions */
48
+ totalTurns: number;
49
+ }
50
+ /**
51
+ * Chat message format for conversation history
52
+ */
53
+ export interface ChatMessage {
54
+ /** Role of the message sender */
55
+ role: "user" | "assistant" | "system";
56
+ /** Content of the message */
57
+ content: string;
58
+ }
59
+ /**
60
+ * Events emitted by conversation memory system
61
+ */
62
+ export interface ConversationMemoryEvents {
63
+ /** Emitted when a new session is created */
64
+ "session:created": {
65
+ sessionId: string;
66
+ userId?: string;
67
+ timestamp: number;
68
+ };
69
+ /** Emitted when a conversation turn is stored */
70
+ "turn:stored": {
71
+ sessionId: string;
72
+ turnIndex: number;
73
+ timestamp: number;
74
+ };
75
+ /** Emitted when a session is cleaned up */
76
+ "session:cleanup": {
77
+ sessionId: string;
78
+ reason: "expired" | "limit_exceeded";
79
+ timestamp: number;
80
+ };
81
+ /** Emitted when context is injected */
82
+ "context:injected": {
83
+ sessionId: string;
84
+ turnsIncluded: number;
85
+ timestamp: number;
86
+ };
87
+ }
88
+ /**
89
+ * Error types specific to conversation memory
90
+ */
91
+ export declare class ConversationMemoryError extends Error {
92
+ code: "STORAGE_ERROR" | "CONFIG_ERROR" | "SESSION_NOT_FOUND" | "CLEANUP_ERROR";
93
+ details?: Record<string, unknown> | undefined;
94
+ constructor(message: string, code: "STORAGE_ERROR" | "CONFIG_ERROR" | "SESSION_NOT_FOUND" | "CLEANUP_ERROR", details?: Record<string, unknown> | undefined);
95
+ }
@@ -0,0 +1,17 @@
1
+ /**
2
+ * Conversation Memory Types for NeuroLink
3
+ * Provides type-safe conversation storage and context management
4
+ */
5
+ /**
6
+ * Error types specific to conversation memory
7
+ */
8
+ export class ConversationMemoryError extends Error {
9
+ code;
10
+ details;
11
+ constructor(message, code, details) {
12
+ super(message);
13
+ this.code = code;
14
+ this.details = details;
15
+ this.name = "ConversationMemoryError";
16
+ }
17
+ }
@@ -2,6 +2,7 @@ import type { ZodType, ZodTypeDef } from "zod";
2
2
  import type { Tool, Schema } from "ai";
3
3
  import type { AIProviderName, AnalyticsData, EvaluationData } from "../core/types.js";
4
4
  import type { UnknownRecord, JsonValue } from "./common.js";
5
+ import type { ChatMessage } from "./conversationTypes.js";
5
6
  /**
6
7
  * Interface for tool execution calls (AI SDK compatible)
7
8
  */
@@ -107,6 +108,7 @@ export interface StreamOptions {
107
108
  enableProgress?: boolean;
108
109
  fallbackToGenerate?: boolean;
109
110
  };
111
+ conversationMessages?: ChatMessage[];
110
112
  }
111
113
  /**
112
114
  * Stream function result interface - Primary output format for streaming
@@ -0,0 +1,22 @@
1
+ /**
2
+ * Conversation Memory Utilities
3
+ * Handles configuration merging and conversation memory operations
4
+ */
5
+ import type { ConversationMemoryConfig, ChatMessage } from "../types/conversationTypes.js";
6
+ import type { ConversationMemoryManager } from "../core/conversationMemoryManager.js";
7
+ import type { TextGenerationOptions, TextGenerationResult } from "../core/types.js";
8
+ /**
9
+ * Apply conversation memory defaults to user configuration
10
+ * Merges user config with environment variables and default values
11
+ */
12
+ export declare function applyConversationMemoryDefaults(userConfig?: Partial<ConversationMemoryConfig>): ConversationMemoryConfig;
13
+ /**
14
+ * Get conversation history as message array (PREFERRED METHOD)
15
+ * Returns proper message array format for AI providers
16
+ */
17
+ export declare function getConversationMessages(conversationMemory: ConversationMemoryManager | undefined, options: TextGenerationOptions): Promise<ChatMessage[]>;
18
+ /**
19
+ * Store conversation turn for future context
20
+ * Saves user messages and AI responses for conversation memory
21
+ */
22
+ export declare function storeConversationTurn(conversationMemory: ConversationMemoryManager | undefined, originalOptions: TextGenerationOptions, result: TextGenerationResult): Promise<void>;
@@ -0,0 +1,77 @@
1
+ /**
2
+ * Conversation Memory Utilities
3
+ * Handles configuration merging and conversation memory operations
4
+ */
5
+ import { getConversationMemoryDefaults } from "../config/conversationMemoryConfig.js";
6
+ import { logger } from "./logger.js";
7
+ /**
8
+ * Apply conversation memory defaults to user configuration
9
+ * Merges user config with environment variables and default values
10
+ */
11
+ export function applyConversationMemoryDefaults(userConfig) {
12
+ const defaults = getConversationMemoryDefaults();
13
+ return {
14
+ enabled: userConfig?.enabled ?? defaults.enabled,
15
+ maxSessions: userConfig?.maxSessions ?? defaults.maxSessions,
16
+ maxTurnsPerSession: userConfig?.maxTurnsPerSession ?? defaults.maxTurnsPerSession,
17
+ };
18
+ }
19
+ /**
20
+ * Get conversation history as message array (PREFERRED METHOD)
21
+ * Returns proper message array format for AI providers
22
+ */
23
+ export async function getConversationMessages(conversationMemory, options) {
24
+ if (!conversationMemory || !options.context) {
25
+ return [];
26
+ }
27
+ const sessionId = options.context?.sessionId;
28
+ if (typeof sessionId !== "string" || !sessionId) {
29
+ return [];
30
+ }
31
+ try {
32
+ const messages = conversationMemory.buildContextMessages(sessionId);
33
+ logger.debug("Conversation messages retrieved", {
34
+ sessionId,
35
+ messageCount: messages.length,
36
+ });
37
+ return messages;
38
+ }
39
+ catch (error) {
40
+ logger.warn("Failed to get conversation messages", {
41
+ sessionId,
42
+ error: error instanceof Error ? error.message : String(error),
43
+ });
44
+ return [];
45
+ }
46
+ }
47
+ /**
48
+ * Store conversation turn for future context
49
+ * Saves user messages and AI responses for conversation memory
50
+ */
51
+ export async function storeConversationTurn(conversationMemory, originalOptions, result) {
52
+ if (!conversationMemory || !originalOptions.context) {
53
+ return;
54
+ }
55
+ const context = originalOptions.context;
56
+ const sessionId = context.sessionId;
57
+ const userId = typeof context.userId === "string" ? context.userId : undefined;
58
+ if (typeof sessionId !== "string" || !sessionId) {
59
+ return;
60
+ }
61
+ try {
62
+ await conversationMemory.storeConversationTurn(sessionId, userId, originalOptions.prompt || "", result.content);
63
+ logger.debug("Conversation turn stored", {
64
+ sessionId,
65
+ userId,
66
+ promptLength: originalOptions.prompt?.length || 0,
67
+ responseLength: result.content.length,
68
+ });
69
+ }
70
+ catch (error) {
71
+ logger.warn("Failed to store conversation turn", {
72
+ sessionId,
73
+ userId,
74
+ error: error instanceof Error ? error.message : String(error),
75
+ });
76
+ }
77
+ }
@@ -0,0 +1,13 @@
1
+ /**
2
+ * Message Builder Utility
3
+ * Centralized logic for building message arrays from TextGenerationOptions
4
+ */
5
+ import type { ChatMessage } from "../types/conversationTypes.js";
6
+ import type { TextGenerationOptions } from "../core/types.js";
7
+ import type { StreamOptions } from "../types/streamTypes.js";
8
+ /**
9
+ * Build a properly formatted message array for AI providers
10
+ * Combines system prompt, conversation history, and current user prompt
11
+ * Supports both TextGenerationOptions and StreamOptions
12
+ */
13
+ export declare function buildMessagesArray(options: TextGenerationOptions | StreamOptions): ChatMessage[];
@@ -0,0 +1,48 @@
1
+ /**
2
+ * Message Builder Utility
3
+ * Centralized logic for building message arrays from TextGenerationOptions
4
+ */
5
+ import { CONVERSATION_INSTRUCTIONS } from "../config/conversationMemoryConfig.js";
6
+ /**
7
+ * Build a properly formatted message array for AI providers
8
+ * Combines system prompt, conversation history, and current user prompt
9
+ * Supports both TextGenerationOptions and StreamOptions
10
+ */
11
+ export function buildMessagesArray(options) {
12
+ const messages = [];
13
+ // Check if conversation history exists
14
+ const hasConversationHistory = options.conversationMessages && options.conversationMessages.length > 0;
15
+ // Build enhanced system prompt
16
+ let systemPrompt = options.systemPrompt?.trim() || "";
17
+ // Add conversation-aware instructions when history exists
18
+ if (hasConversationHistory) {
19
+ systemPrompt = `${systemPrompt.trim()}${CONVERSATION_INSTRUCTIONS}`;
20
+ }
21
+ // Add system message if we have one
22
+ if (systemPrompt.trim()) {
23
+ messages.push({
24
+ role: "system",
25
+ content: systemPrompt.trim(),
26
+ });
27
+ }
28
+ // Add conversation history if available
29
+ if (hasConversationHistory && options.conversationMessages) {
30
+ messages.push(...options.conversationMessages);
31
+ }
32
+ // Add current user prompt (required)
33
+ // Handle both TextGenerationOptions (prompt field) and StreamOptions (input.text field)
34
+ let currentPrompt;
35
+ if ("prompt" in options && options.prompt) {
36
+ currentPrompt = options.prompt;
37
+ }
38
+ else if ("input" in options && options.input?.text) {
39
+ currentPrompt = options.input.text;
40
+ }
41
+ if (currentPrompt?.trim()) {
42
+ messages.push({
43
+ role: "user",
44
+ content: currentPrompt.trim(),
45
+ });
46
+ }
47
+ return messages;
48
+ }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@juspay/neurolink",
3
- "version": "7.11.1",
3
+ "version": "7.13.0",
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 9 major providers: OpenAI, Anthropic, Google AI, AWS Bedrock, Azure, Hugging Face, Ollama, and Mistral AI.",
5
5
  "author": {
6
6
  "name": "Juspay Technologies",