@juspay/neurolink 9.10.1 → 9.12.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 (166) hide show
  1. package/CHANGELOG.md +16 -0
  2. package/dist/agent/directTools.d.ts +3 -3
  3. package/dist/cli/commands/config.d.ts +9 -9
  4. package/dist/cli/loop/optionsSchema.d.ts +1 -1
  5. package/dist/constants/contextWindows.d.ts +6 -3
  6. package/dist/constants/contextWindows.js +30 -3
  7. package/dist/constants/index.d.ts +3 -3
  8. package/dist/constants/retry.d.ts +4 -4
  9. package/dist/constants/retry.js +1 -1
  10. package/dist/context/contextCompactor.d.ts +1 -1
  11. package/dist/context/contextCompactor.js +59 -1
  12. package/dist/context/summarizationEngine.d.ts +2 -2
  13. package/dist/context/summarizationEngine.js +44 -18
  14. package/dist/context/toolOutputLimits.d.ts +22 -13
  15. package/dist/context/toolOutputLimits.js +58 -64
  16. package/dist/core/baseProvider.d.ts +11 -2
  17. package/dist/core/baseProvider.js +16 -1
  18. package/dist/core/conversationMemoryManager.d.ts +13 -1
  19. package/dist/core/conversationMemoryManager.js +36 -5
  20. package/dist/core/modules/GenerationHandler.d.ts +6 -0
  21. package/dist/core/modules/GenerationHandler.js +192 -7
  22. package/dist/core/modules/MessageBuilder.js +42 -4
  23. package/dist/core/modules/TelemetryHandler.js +4 -1
  24. package/dist/core/redisConversationMemoryManager.d.ts +19 -3
  25. package/dist/core/redisConversationMemoryManager.js +253 -58
  26. package/dist/index.d.ts +2 -0
  27. package/dist/index.js +3 -0
  28. package/dist/lib/agent/directTools.d.ts +7 -7
  29. package/dist/lib/constants/contextWindows.d.ts +6 -3
  30. package/dist/lib/constants/contextWindows.js +30 -3
  31. package/dist/lib/constants/index.d.ts +3 -3
  32. package/dist/lib/constants/retry.d.ts +4 -4
  33. package/dist/lib/constants/retry.js +1 -1
  34. package/dist/lib/context/contextCompactor.d.ts +1 -1
  35. package/dist/lib/context/contextCompactor.js +59 -1
  36. package/dist/lib/context/summarizationEngine.d.ts +2 -2
  37. package/dist/lib/context/summarizationEngine.js +44 -18
  38. package/dist/lib/context/toolOutputLimits.d.ts +22 -13
  39. package/dist/lib/context/toolOutputLimits.js +58 -64
  40. package/dist/lib/core/baseProvider.d.ts +11 -2
  41. package/dist/lib/core/baseProvider.js +16 -1
  42. package/dist/lib/core/conversationMemoryManager.d.ts +13 -1
  43. package/dist/lib/core/conversationMemoryManager.js +36 -5
  44. package/dist/lib/core/modules/GenerationHandler.d.ts +6 -0
  45. package/dist/lib/core/modules/GenerationHandler.js +192 -7
  46. package/dist/lib/core/modules/MessageBuilder.js +42 -4
  47. package/dist/lib/core/modules/TelemetryHandler.js +4 -1
  48. package/dist/lib/core/redisConversationMemoryManager.d.ts +19 -3
  49. package/dist/lib/core/redisConversationMemoryManager.js +253 -58
  50. package/dist/lib/files/fileTools.d.ts +3 -3
  51. package/dist/lib/index.d.ts +2 -0
  52. package/dist/lib/index.js +3 -0
  53. package/dist/lib/mcp/externalServerManager.js +46 -10
  54. package/dist/lib/memory/memoryRetrievalTools.d.ts +166 -0
  55. package/dist/lib/memory/memoryRetrievalTools.js +145 -0
  56. package/dist/lib/neurolink.d.ts +35 -1
  57. package/dist/lib/neurolink.js +476 -16
  58. package/dist/lib/providers/amazonBedrock.d.ts +1 -1
  59. package/dist/lib/providers/amazonBedrock.js +78 -45
  60. package/dist/lib/providers/amazonSagemaker.d.ts +1 -1
  61. package/dist/lib/providers/amazonSagemaker.js +1 -1
  62. package/dist/lib/providers/anthropic.d.ts +1 -1
  63. package/dist/lib/providers/anthropic.js +7 -7
  64. package/dist/lib/providers/anthropicBaseProvider.d.ts +1 -1
  65. package/dist/lib/providers/anthropicBaseProvider.js +7 -6
  66. package/dist/lib/providers/azureOpenai.d.ts +1 -1
  67. package/dist/lib/providers/azureOpenai.js +1 -1
  68. package/dist/lib/providers/googleAiStudio.d.ts +1 -1
  69. package/dist/lib/providers/googleAiStudio.js +5 -5
  70. package/dist/lib/providers/googleVertex.d.ts +1 -1
  71. package/dist/lib/providers/googleVertex.js +74 -17
  72. package/dist/lib/providers/huggingFace.d.ts +1 -1
  73. package/dist/lib/providers/huggingFace.js +1 -1
  74. package/dist/lib/providers/litellm.d.ts +1 -1
  75. package/dist/lib/providers/litellm.js +18 -16
  76. package/dist/lib/providers/mistral.d.ts +1 -1
  77. package/dist/lib/providers/mistral.js +1 -1
  78. package/dist/lib/providers/ollama.d.ts +1 -1
  79. package/dist/lib/providers/ollama.js +8 -7
  80. package/dist/lib/providers/openAI.d.ts +1 -1
  81. package/dist/lib/providers/openAI.js +6 -6
  82. package/dist/lib/providers/openRouter.d.ts +1 -1
  83. package/dist/lib/providers/openRouter.js +6 -2
  84. package/dist/lib/providers/openaiCompatible.d.ts +1 -1
  85. package/dist/lib/providers/openaiCompatible.js +1 -1
  86. package/dist/lib/proxy/proxyFetch.js +291 -65
  87. package/dist/lib/server/utils/validation.d.ts +4 -4
  88. package/dist/lib/services/server/ai/observability/instrumentation.js +12 -3
  89. package/dist/lib/telemetry/telemetryService.d.ts +2 -1
  90. package/dist/lib/telemetry/telemetryService.js +8 -1
  91. package/dist/lib/types/contextTypes.d.ts +26 -2
  92. package/dist/lib/types/conversation.d.ts +72 -40
  93. package/dist/lib/types/conversationMemoryInterface.d.ts +5 -1
  94. package/dist/lib/types/generateTypes.d.ts +26 -0
  95. package/dist/lib/types/modelTypes.d.ts +2 -2
  96. package/dist/lib/types/multimodal.d.ts +2 -0
  97. package/dist/lib/types/observability.d.ts +10 -0
  98. package/dist/lib/types/sdkTypes.d.ts +1 -1
  99. package/dist/lib/utils/conversationMemory.d.ts +4 -3
  100. package/dist/lib/utils/conversationMemory.js +44 -6
  101. package/dist/lib/utils/errorHandling.d.ts +5 -0
  102. package/dist/lib/utils/errorHandling.js +7 -2
  103. package/dist/lib/utils/logger.d.ts +8 -0
  104. package/dist/lib/utils/logger.js +56 -1
  105. package/dist/lib/utils/messageBuilder.js +74 -4
  106. package/dist/lib/utils/redis.js +6 -1
  107. package/dist/lib/utils/tokenEstimation.d.ts +2 -2
  108. package/dist/lib/utils/tokenEstimation.js +16 -1
  109. package/dist/lib/workflow/config.d.ts +110 -110
  110. package/dist/mcp/externalServerManager.js +46 -10
  111. package/dist/memory/memoryRetrievalTools.d.ts +166 -0
  112. package/dist/memory/memoryRetrievalTools.js +144 -0
  113. package/dist/neurolink.d.ts +35 -1
  114. package/dist/neurolink.js +476 -16
  115. package/dist/providers/amazonBedrock.d.ts +1 -1
  116. package/dist/providers/amazonBedrock.js +78 -45
  117. package/dist/providers/amazonSagemaker.d.ts +1 -1
  118. package/dist/providers/amazonSagemaker.js +1 -1
  119. package/dist/providers/anthropic.d.ts +1 -1
  120. package/dist/providers/anthropic.js +7 -7
  121. package/dist/providers/anthropicBaseProvider.d.ts +1 -1
  122. package/dist/providers/anthropicBaseProvider.js +7 -6
  123. package/dist/providers/azureOpenai.d.ts +1 -1
  124. package/dist/providers/azureOpenai.js +1 -1
  125. package/dist/providers/googleAiStudio.d.ts +1 -1
  126. package/dist/providers/googleAiStudio.js +5 -5
  127. package/dist/providers/googleVertex.d.ts +1 -1
  128. package/dist/providers/googleVertex.js +74 -17
  129. package/dist/providers/huggingFace.d.ts +1 -1
  130. package/dist/providers/huggingFace.js +1 -1
  131. package/dist/providers/litellm.d.ts +1 -1
  132. package/dist/providers/litellm.js +18 -16
  133. package/dist/providers/mistral.d.ts +1 -1
  134. package/dist/providers/mistral.js +1 -1
  135. package/dist/providers/ollama.d.ts +1 -1
  136. package/dist/providers/ollama.js +8 -7
  137. package/dist/providers/openAI.d.ts +1 -1
  138. package/dist/providers/openAI.js +6 -6
  139. package/dist/providers/openRouter.d.ts +1 -1
  140. package/dist/providers/openRouter.js +6 -2
  141. package/dist/providers/openaiCompatible.d.ts +1 -1
  142. package/dist/providers/openaiCompatible.js +1 -1
  143. package/dist/proxy/proxyFetch.js +291 -65
  144. package/dist/services/server/ai/observability/instrumentation.js +12 -3
  145. package/dist/telemetry/telemetryService.d.ts +2 -1
  146. package/dist/telemetry/telemetryService.js +8 -1
  147. package/dist/types/contextTypes.d.ts +26 -2
  148. package/dist/types/conversation.d.ts +72 -40
  149. package/dist/types/conversationMemoryInterface.d.ts +5 -1
  150. package/dist/types/generateTypes.d.ts +26 -0
  151. package/dist/types/modelTypes.d.ts +10 -10
  152. package/dist/types/multimodal.d.ts +2 -0
  153. package/dist/types/observability.d.ts +10 -0
  154. package/dist/types/sdkTypes.d.ts +1 -1
  155. package/dist/utils/conversationMemory.d.ts +4 -3
  156. package/dist/utils/conversationMemory.js +44 -6
  157. package/dist/utils/errorHandling.d.ts +5 -0
  158. package/dist/utils/errorHandling.js +7 -2
  159. package/dist/utils/logger.d.ts +8 -0
  160. package/dist/utils/logger.js +56 -1
  161. package/dist/utils/messageBuilder.js +74 -4
  162. package/dist/utils/redis.js +6 -1
  163. package/dist/utils/tokenEstimation.d.ts +2 -2
  164. package/dist/utils/tokenEstimation.js +16 -1
  165. package/dist/workflow/config.d.ts +12 -12
  166. package/package.json +1 -1
@@ -0,0 +1,166 @@
1
+ /**
2
+ * Memory retrieval tools for LLM access to conversation history.
3
+ * Enables the AI to retrieve full tool outputs, review previous messages,
4
+ * and search conversation memory.
5
+ *
6
+ * Follows the createFileTools() factory pattern from files/fileTools.ts.
7
+ * @module
8
+ */
9
+ import { z } from "zod";
10
+ import type { RedisConversationMemoryManager } from "../core/redisConversationMemoryManager.js";
11
+ /**
12
+ * Factory function that creates memory retrieval tools bound to a memory manager.
13
+ * @param memoryManager - The Redis conversation memory manager instance
14
+ * @returns Record of tool name to Vercel AI SDK tool definition
15
+ */
16
+ export declare function createMemoryRetrievalTools(memoryManager: RedisConversationMemoryManager): {
17
+ retrieve_context: import("ai").Tool<z.ZodObject<{
18
+ sessionId: z.ZodString;
19
+ messageId: z.ZodOptional<z.ZodString>;
20
+ role: z.ZodOptional<z.ZodEnum<["user", "assistant", "system", "tool_call", "tool_result"]>>;
21
+ lastN: z.ZodOptional<z.ZodNumber>;
22
+ offset: z.ZodOptional<z.ZodNumber>;
23
+ limit: z.ZodOptional<z.ZodNumber>;
24
+ search: z.ZodOptional<z.ZodString>;
25
+ }, "strip", z.ZodTypeAny, {
26
+ sessionId: string;
27
+ search?: string | undefined;
28
+ role?: "system" | "user" | "assistant" | "tool_call" | "tool_result" | undefined;
29
+ offset?: number | undefined;
30
+ limit?: number | undefined;
31
+ messageId?: string | undefined;
32
+ lastN?: number | undefined;
33
+ }, {
34
+ sessionId: string;
35
+ search?: string | undefined;
36
+ role?: "system" | "user" | "assistant" | "tool_call" | "tool_result" | undefined;
37
+ offset?: number | undefined;
38
+ limit?: number | undefined;
39
+ messageId?: string | undefined;
40
+ lastN?: number | undefined;
41
+ }>, {
42
+ error: string;
43
+ sessionId: string;
44
+ messageId?: undefined;
45
+ messages?: undefined;
46
+ totalMessages?: undefined;
47
+ } | {
48
+ error: string;
49
+ messageId: string;
50
+ sessionId?: undefined;
51
+ messages?: undefined;
52
+ totalMessages?: undefined;
53
+ } | {
54
+ messages: ({
55
+ id: string;
56
+ error: string;
57
+ role?: undefined;
58
+ tool?: undefined;
59
+ matchCount?: undefined;
60
+ matches?: undefined;
61
+ totalSize?: undefined;
62
+ content?: undefined;
63
+ hasMore?: undefined;
64
+ } | {
65
+ id: string;
66
+ role: "system" | "user" | "assistant" | "tool_call" | "tool_result";
67
+ tool: string | undefined;
68
+ matchCount: number;
69
+ matches: {
70
+ line: number;
71
+ text: string;
72
+ }[];
73
+ totalSize: number;
74
+ error?: undefined;
75
+ content?: undefined;
76
+ hasMore?: undefined;
77
+ } | {
78
+ id: string;
79
+ role: "system" | "user" | "assistant" | "tool_call" | "tool_result";
80
+ tool: string | undefined;
81
+ content: string;
82
+ totalSize: number;
83
+ hasMore: boolean;
84
+ error?: undefined;
85
+ matchCount?: undefined;
86
+ matches?: undefined;
87
+ })[];
88
+ totalMessages: number;
89
+ error?: undefined;
90
+ sessionId?: undefined;
91
+ messageId?: undefined;
92
+ } | {
93
+ error: string;
94
+ sessionId?: undefined;
95
+ messageId?: undefined;
96
+ messages?: undefined;
97
+ totalMessages?: undefined;
98
+ }> & {
99
+ execute: (args: {
100
+ sessionId: string;
101
+ search?: string | undefined;
102
+ role?: "system" | "user" | "assistant" | "tool_call" | "tool_result" | undefined;
103
+ offset?: number | undefined;
104
+ limit?: number | undefined;
105
+ messageId?: string | undefined;
106
+ lastN?: number | undefined;
107
+ }, options: import("ai").ToolExecutionOptions) => PromiseLike<{
108
+ error: string;
109
+ sessionId: string;
110
+ messageId?: undefined;
111
+ messages?: undefined;
112
+ totalMessages?: undefined;
113
+ } | {
114
+ error: string;
115
+ messageId: string;
116
+ sessionId?: undefined;
117
+ messages?: undefined;
118
+ totalMessages?: undefined;
119
+ } | {
120
+ messages: ({
121
+ id: string;
122
+ error: string;
123
+ role?: undefined;
124
+ tool?: undefined;
125
+ matchCount?: undefined;
126
+ matches?: undefined;
127
+ totalSize?: undefined;
128
+ content?: undefined;
129
+ hasMore?: undefined;
130
+ } | {
131
+ id: string;
132
+ role: "system" | "user" | "assistant" | "tool_call" | "tool_result";
133
+ tool: string | undefined;
134
+ matchCount: number;
135
+ matches: {
136
+ line: number;
137
+ text: string;
138
+ }[];
139
+ totalSize: number;
140
+ error?: undefined;
141
+ content?: undefined;
142
+ hasMore?: undefined;
143
+ } | {
144
+ id: string;
145
+ role: "system" | "user" | "assistant" | "tool_call" | "tool_result";
146
+ tool: string | undefined;
147
+ content: string;
148
+ totalSize: number;
149
+ hasMore: boolean;
150
+ error?: undefined;
151
+ matchCount?: undefined;
152
+ matches?: undefined;
153
+ })[];
154
+ totalMessages: number;
155
+ error?: undefined;
156
+ sessionId?: undefined;
157
+ messageId?: undefined;
158
+ } | {
159
+ error: string;
160
+ sessionId?: undefined;
161
+ messageId?: undefined;
162
+ messages?: undefined;
163
+ totalMessages?: undefined;
164
+ }>;
165
+ };
166
+ };
@@ -0,0 +1,145 @@
1
+ /**
2
+ * Memory retrieval tools for LLM access to conversation history.
3
+ * Enables the AI to retrieve full tool outputs, review previous messages,
4
+ * and search conversation memory.
5
+ *
6
+ * Follows the createFileTools() factory pattern from files/fileTools.ts.
7
+ * @module
8
+ */
9
+ import { tool } from "ai";
10
+ import { z } from "zod";
11
+ import { logger } from "../utils/logger.js";
12
+ /** Maximum characters returned per retrieval request */
13
+ const DEFAULT_RETRIEVAL_LIMIT = 50_000;
14
+ /** Hard maximum for user/LLM-supplied limit to prevent massive tool outputs */
15
+ const MAX_RETRIEVAL_LIMIT = 200_000;
16
+ /** Maximum number of search matches returned */
17
+ const MAX_SEARCH_MATCHES = 50;
18
+ /**
19
+ * Factory function that creates memory retrieval tools bound to a memory manager.
20
+ * @param memoryManager - The Redis conversation memory manager instance
21
+ * @returns Record of tool name to Vercel AI SDK tool definition
22
+ */
23
+ export function createMemoryRetrievalTools(memoryManager) {
24
+ return {
25
+ retrieve_context: tool({
26
+ description: "Retrieve messages from conversation memory. Use this to access full tool " +
27
+ "outputs when a result was truncated, review previous assistant responses, " +
28
+ "or search through conversation history. Supports filtering by role, " +
29
+ "pagination for large content, and regex search within messages.",
30
+ parameters: z.object({
31
+ sessionId: z.string().describe("Session ID for the conversation"),
32
+ messageId: z
33
+ .string()
34
+ .optional()
35
+ .describe("Specific message ID to retrieve"),
36
+ role: z
37
+ .enum(["user", "assistant", "system", "tool_call", "tool_result"])
38
+ .optional()
39
+ .describe("Filter messages by role"),
40
+ lastN: z
41
+ .number()
42
+ .int()
43
+ .positive()
44
+ .optional()
45
+ .describe("Retrieve the last N messages matching the filter"),
46
+ offset: z
47
+ .number()
48
+ .int()
49
+ .nonnegative()
50
+ .optional()
51
+ .describe("Character offset for paginated reading of large content (default: 0)"),
52
+ limit: z
53
+ .number()
54
+ .int()
55
+ .positive()
56
+ .optional()
57
+ .describe("Max characters to return per message (default: 50000)"),
58
+ search: z
59
+ .string()
60
+ .optional()
61
+ .describe("Regex pattern to search within message content. " +
62
+ "Returns matching lines with line numbers."),
63
+ }),
64
+ execute: async (args) => {
65
+ try {
66
+ const conversation = await memoryManager.getSessionRaw(args.sessionId);
67
+ if (!conversation) {
68
+ return { error: "Session not found", sessionId: args.sessionId };
69
+ }
70
+ let messages = conversation.messages;
71
+ // Filter by specific messageId
72
+ if (args.messageId) {
73
+ const msg = messages.find((m) => m.id === args.messageId);
74
+ if (!msg) {
75
+ return { error: "Message not found", messageId: args.messageId };
76
+ }
77
+ messages = [msg];
78
+ }
79
+ // Filter by role
80
+ if (args.role) {
81
+ messages = messages.filter((m) => m.role === args.role);
82
+ }
83
+ // Take last N
84
+ if (args.lastN) {
85
+ messages = messages.slice(-args.lastN);
86
+ }
87
+ const charLimit = Math.min(args.limit ?? DEFAULT_RETRIEVAL_LIMIT, MAX_RETRIEVAL_LIMIT);
88
+ const results = messages.map((msg) => {
89
+ const content = msg.content ?? "";
90
+ // Search mode: return matching lines with line numbers
91
+ if (args.search) {
92
+ try {
93
+ const pattern = args.search;
94
+ // Validate regex length to mitigate ReDoS from LLM-provided input
95
+ if (pattern.length > 200) {
96
+ return {
97
+ id: msg.id,
98
+ error: "Search pattern too long (max 200 chars)",
99
+ };
100
+ }
101
+ const regex = new RegExp(pattern, "i"); // no 'g' flag — avoids stateful .test() bug
102
+ const lines = content.split("\n");
103
+ const matches = lines
104
+ .map((line, i) => ({ line: i + 1, text: line }))
105
+ .filter((l) => regex.test(l.text))
106
+ .slice(0, MAX_SEARCH_MATCHES);
107
+ return {
108
+ id: msg.id,
109
+ role: msg.role,
110
+ tool: msg.tool,
111
+ matchCount: matches.length,
112
+ matches,
113
+ totalSize: content.length,
114
+ };
115
+ }
116
+ catch {
117
+ return { id: msg.id, error: "Invalid regex pattern" };
118
+ }
119
+ }
120
+ // Paginated read mode
121
+ const start = args.offset ?? 0;
122
+ const end = start + charLimit;
123
+ const slice = content.slice(start, end);
124
+ return {
125
+ id: msg.id,
126
+ role: msg.role,
127
+ tool: msg.tool,
128
+ content: slice,
129
+ totalSize: content.length,
130
+ hasMore: end < content.length,
131
+ };
132
+ });
133
+ return { messages: results, totalMessages: results.length };
134
+ }
135
+ catch (error) {
136
+ logger.error("[MemoryRetrievalTools] Error retrieving context", {
137
+ error: error instanceof Error ? error.message : String(error),
138
+ });
139
+ return { error: "Failed to retrieve context" };
140
+ }
141
+ },
142
+ }),
143
+ };
144
+ }
145
+ //# sourceMappingURL=memoryRetrievalTools.js.map
@@ -6,7 +6,7 @@
6
6
  * Uses real MCP infrastructure for tool discovery and execution.
7
7
  */
8
8
  import { type CompactionConfig, type CompactionResult } from "./context/contextCompactor.js";
9
- import type { ConversationMemoryManager } from "./core/conversationMemoryManager.js";
9
+ import { ConversationMemoryManager } from "./core/conversationMemoryManager.js";
10
10
  import type { RedisConversationMemoryManager } from "./core/redisConversationMemoryManager.js";
11
11
  import { ExternalServerManager } from "./mcp/externalServerManager.js";
12
12
  import { MCPToolRegistry } from "./mcp/toolRegistry.js";
@@ -123,6 +123,7 @@ export declare class NeuroLink {
123
123
  private hitlManager?;
124
124
  private mem0Instance?;
125
125
  private mem0Config?;
126
+ private _sessionCostUsd;
126
127
  private fileRegistry;
127
128
  private cachedFileTools;
128
129
  /**
@@ -215,6 +216,12 @@ export declare class NeuroLink {
215
216
  * and registers them as direct tools so they're available to LLMs.
216
217
  */
217
218
  private registerFileTools;
219
+ /**
220
+ * Register memory retrieval tools that allow the AI to access
221
+ * conversation history, including full tool outputs.
222
+ * Only registered when Redis conversation memory is active.
223
+ */
224
+ private registerMemoryRetrievalTools;
218
225
  /** Format memory context for prompt inclusion */
219
226
  private formatMemoryContext;
220
227
  /** Extract memory context from search results */
@@ -469,6 +476,10 @@ export declare class NeuroLink {
469
476
  * Schedule non-blocking Mem0 memory storage after generate completes.
470
477
  */
471
478
  private scheduleGenerateMem0Storage;
479
+ /**
480
+ * Handle PPT generation mode
481
+ */
482
+ private generateWithPPT;
472
483
  /**
473
484
  * Generate with workflow engine integration
474
485
  * Returns both original and processed responses for AB testing
@@ -1186,6 +1197,29 @@ export declare class NeuroLink {
1186
1197
  * @returns boolean indicating if Redis storage is configured and available
1187
1198
  */
1188
1199
  isToolExecutionStorageAvailable(): boolean;
1200
+ /**
1201
+ * Get the raw messages array for a session.
1202
+ * Returns the full messages list without context filtering or summarization.
1203
+ * @param sessionId - The session ID to retrieve messages for
1204
+ * @returns Array of ChatMessage objects, or empty array if session doesn't exist
1205
+ */
1206
+ getSessionMessages(sessionId: string, userId?: string): Promise<ChatMessage[]>;
1207
+ /**
1208
+ * Replace the entire messages array for a session.
1209
+ * @param sessionId - The session ID to update
1210
+ * @param messages - The new messages array
1211
+ * @param userId - Optional user ID for scoped Redis key lookup
1212
+ */
1213
+ setSessionMessages(sessionId: string, messages: ChatMessage[], userId?: string): Promise<void>;
1214
+ /**
1215
+ * Modify the last assistant message in a session using a transformer function.
1216
+ * Convenience wrapper around getSessionMessages/setSessionMessages.
1217
+ * @param sessionId - The session ID to modify
1218
+ * @param transformer - Function that receives the last assistant message content and returns the modified content
1219
+ * @param userId - Optional user ID for scoped Redis key lookup
1220
+ * @returns true if a message was modified, false if no assistant message was found
1221
+ */
1222
+ modifyLastAssistantMessage(sessionId: string, transformer: (content: string) => string, userId?: string): Promise<boolean>;
1189
1223
  /**
1190
1224
  * Add an external MCP server
1191
1225
  * Automatically discovers and registers tools from the server