@juspay/neurolink 6.1.0 → 6.2.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 (303) hide show
  1. package/CHANGELOG.md +16 -6
  2. package/dist/agent/direct-tools.js +6 -5
  3. package/dist/cli/commands/config.d.ts +13 -13
  4. package/dist/cli/index.js +3 -9
  5. package/dist/config/configManager.js +11 -10
  6. package/dist/core/analytics.d.ts +11 -1
  7. package/dist/core/analytics.js +2 -2
  8. package/dist/core/base-provider.js +4 -18
  9. package/dist/core/dynamic-models.d.ts +8 -8
  10. package/dist/core/factory.js +3 -11
  11. package/dist/index.d.ts +2 -4
  12. package/dist/index.js +2 -11
  13. package/dist/lib/agent/direct-tools.js +6 -5
  14. package/dist/lib/config/configManager.js +11 -10
  15. package/dist/lib/core/analytics.d.ts +11 -1
  16. package/dist/lib/core/analytics.js +2 -2
  17. package/dist/lib/core/base-provider.js +4 -18
  18. package/dist/lib/core/dynamic-models.d.ts +8 -8
  19. package/dist/lib/core/factory.js +3 -11
  20. package/dist/lib/index.d.ts +2 -4
  21. package/dist/lib/index.js +2 -11
  22. package/dist/lib/mcp/factory.d.ts +1 -1
  23. package/dist/lib/mcp/index.d.ts +9 -21
  24. package/dist/lib/mcp/index.js +16 -57
  25. package/dist/lib/mcp/registry.js +1 -1
  26. package/dist/lib/mcp/servers/ai-providers/ai-analysis-tools.js +2 -1
  27. package/dist/lib/mcp/tool-registry.js +1 -1
  28. package/dist/lib/neurolink.d.ts +1 -9
  29. package/dist/lib/neurolink.js +22 -71
  30. package/dist/lib/providers/amazon-bedrock.js +5 -16
  31. package/dist/lib/providers/anthropic-baseprovider.js +3 -21
  32. package/dist/lib/providers/anthropic.js +4 -7
  33. package/dist/lib/providers/azure-openai.js +6 -3
  34. package/dist/lib/providers/google-vertex.js +5 -9
  35. package/dist/lib/providers/huggingFace.js +5 -10
  36. package/dist/lib/providers/mistral.js +5 -8
  37. package/dist/lib/providers/openAI.js +4 -7
  38. package/dist/lib/telemetry/index.js +2 -1
  39. package/dist/lib/utils/logger.d.ts +62 -2
  40. package/dist/lib/utils/logger.js +174 -9
  41. package/dist/lib/utils/providerConfig.d.ts +117 -0
  42. package/dist/lib/utils/providerConfig.js +353 -0
  43. package/dist/lib/utils/providerUtils.d.ts +2 -1
  44. package/dist/lib/utils/providerUtils.js +53 -36
  45. package/dist/lib/utils/timeout.d.ts +72 -1
  46. package/dist/lib/utils/timeout.js +203 -2
  47. package/dist/mcp/factory.d.ts +1 -1
  48. package/dist/mcp/index.d.ts +9 -21
  49. package/dist/mcp/index.js +16 -57
  50. package/dist/mcp/registry.js +1 -1
  51. package/dist/mcp/servers/ai-providers/ai-analysis-tools.js +2 -1
  52. package/dist/mcp/tool-registry.js +1 -1
  53. package/dist/neurolink.d.ts +1 -9
  54. package/dist/neurolink.js +22 -71
  55. package/dist/providers/amazon-bedrock.js +5 -16
  56. package/dist/providers/anthropic-baseprovider.js +3 -21
  57. package/dist/providers/anthropic.js +4 -7
  58. package/dist/providers/azure-openai.js +6 -3
  59. package/dist/providers/google-vertex.js +5 -9
  60. package/dist/providers/huggingFace.js +5 -10
  61. package/dist/providers/mistral.js +5 -8
  62. package/dist/providers/openAI.js +4 -7
  63. package/dist/telemetry/index.js +2 -1
  64. package/dist/utils/logger.d.ts +62 -2
  65. package/dist/utils/logger.js +174 -9
  66. package/dist/utils/providerConfig.d.ts +117 -0
  67. package/dist/utils/providerConfig.js +353 -0
  68. package/dist/utils/providerUtils.d.ts +2 -1
  69. package/dist/utils/providerUtils.js +53 -36
  70. package/dist/utils/timeout.d.ts +72 -1
  71. package/dist/utils/timeout.js +203 -2
  72. package/package.json +1 -1
  73. package/dist/chat/client-utils.d.ts +0 -95
  74. package/dist/chat/client-utils.js +0 -315
  75. package/dist/chat/index.d.ts +0 -24
  76. package/dist/chat/index.js +0 -33
  77. package/dist/chat/session-storage.d.ts +0 -77
  78. package/dist/chat/session-storage.js +0 -233
  79. package/dist/chat/session.d.ts +0 -96
  80. package/dist/chat/session.js +0 -257
  81. package/dist/chat/sse-handler.d.ts +0 -49
  82. package/dist/chat/sse-handler.js +0 -259
  83. package/dist/chat/types.d.ts +0 -74
  84. package/dist/chat/types.js +0 -5
  85. package/dist/chat/websocket-chat-handler.d.ts +0 -37
  86. package/dist/chat/websocket-chat-handler.js +0 -262
  87. package/dist/cli/commands/mcp.d.ts +0 -20
  88. package/dist/cli/commands/mcp.js +0 -1272
  89. package/dist/core/defaults.d.ts +0 -19
  90. package/dist/core/defaults.js +0 -29
  91. package/dist/core/evaluation-config.d.ts +0 -29
  92. package/dist/core/evaluation-config.js +0 -144
  93. package/dist/factories/compatibility-factory.d.ts +0 -35
  94. package/dist/factories/compatibility-factory.js +0 -71
  95. package/dist/factories/provider-generate-factory.d.ts +0 -20
  96. package/dist/factories/provider-generate-factory.js +0 -93
  97. package/dist/lib/chat/client-utils.d.ts +0 -95
  98. package/dist/lib/chat/client-utils.js +0 -315
  99. package/dist/lib/chat/index.d.ts +0 -24
  100. package/dist/lib/chat/index.js +0 -33
  101. package/dist/lib/chat/session-storage.d.ts +0 -77
  102. package/dist/lib/chat/session-storage.js +0 -233
  103. package/dist/lib/chat/session.d.ts +0 -96
  104. package/dist/lib/chat/session.js +0 -257
  105. package/dist/lib/chat/sse-handler.d.ts +0 -49
  106. package/dist/lib/chat/sse-handler.js +0 -259
  107. package/dist/lib/chat/types.d.ts +0 -74
  108. package/dist/lib/chat/types.js +0 -5
  109. package/dist/lib/chat/websocket-chat-handler.d.ts +0 -37
  110. package/dist/lib/chat/websocket-chat-handler.js +0 -262
  111. package/dist/lib/core/defaults.d.ts +0 -19
  112. package/dist/lib/core/defaults.js +0 -29
  113. package/dist/lib/core/evaluation-config.d.ts +0 -29
  114. package/dist/lib/core/evaluation-config.js +0 -144
  115. package/dist/lib/factories/compatibility-factory.d.ts +0 -35
  116. package/dist/lib/factories/compatibility-factory.js +0 -71
  117. package/dist/lib/factories/provider-generate-factory.d.ts +0 -20
  118. package/dist/lib/factories/provider-generate-factory.js +0 -93
  119. package/dist/lib/mcp/adapters/plugin-bridge.d.ts +0 -40
  120. package/dist/lib/mcp/adapters/plugin-bridge.js +0 -89
  121. package/dist/lib/mcp/auto-discovery.d.ts +0 -62
  122. package/dist/lib/mcp/auto-discovery.js +0 -149
  123. package/dist/lib/mcp/client.d.ts +0 -68
  124. package/dist/lib/mcp/client.js +0 -248
  125. package/dist/lib/mcp/config.d.ts +0 -31
  126. package/dist/lib/mcp/config.js +0 -99
  127. package/dist/lib/mcp/context-manager.d.ts +0 -171
  128. package/dist/lib/mcp/context-manager.js +0 -362
  129. package/dist/lib/mcp/contracts/mcp-contract.d.ts +0 -169
  130. package/dist/lib/mcp/contracts/mcp-contract.js +0 -58
  131. package/dist/lib/mcp/core/plugin-manager.d.ts +0 -46
  132. package/dist/lib/mcp/core/plugin-manager.js +0 -110
  133. package/dist/lib/mcp/demo/plugin-demo.d.ts +0 -20
  134. package/dist/lib/mcp/demo/plugin-demo.js +0 -118
  135. package/dist/lib/mcp/dynamic-chain-executor.d.ts +0 -225
  136. package/dist/lib/mcp/dynamic-chain-executor.js +0 -489
  137. package/dist/lib/mcp/dynamic-orchestrator.d.ts +0 -115
  138. package/dist/lib/mcp/dynamic-orchestrator.js +0 -351
  139. package/dist/lib/mcp/ecosystem.d.ts +0 -75
  140. package/dist/lib/mcp/ecosystem.js +0 -161
  141. package/dist/lib/mcp/error-manager.d.ts +0 -254
  142. package/dist/lib/mcp/error-manager.js +0 -501
  143. package/dist/lib/mcp/error-recovery.d.ts +0 -159
  144. package/dist/lib/mcp/error-recovery.js +0 -405
  145. package/dist/lib/mcp/external-client.d.ts +0 -88
  146. package/dist/lib/mcp/external-client.js +0 -331
  147. package/dist/lib/mcp/external-manager.d.ts +0 -112
  148. package/dist/lib/mcp/external-manager.js +0 -308
  149. package/dist/lib/mcp/function-calling.d.ts +0 -65
  150. package/dist/lib/mcp/function-calling.js +0 -642
  151. package/dist/lib/mcp/health-monitor.d.ts +0 -257
  152. package/dist/lib/mcp/health-monitor.js +0 -630
  153. package/dist/lib/mcp/initialize-tools.d.ts +0 -29
  154. package/dist/lib/mcp/initialize-tools.js +0 -261
  155. package/dist/lib/mcp/initialize.d.ts +0 -18
  156. package/dist/lib/mcp/initialize.js +0 -62
  157. package/dist/lib/mcp/logging.d.ts +0 -38
  158. package/dist/lib/mcp/logging.js +0 -100
  159. package/dist/lib/mcp/manager.d.ts +0 -68
  160. package/dist/lib/mcp/manager.js +0 -176
  161. package/dist/lib/mcp/neurolink-mcp-client.d.ts +0 -97
  162. package/dist/lib/mcp/neurolink-mcp-client.js +0 -462
  163. package/dist/lib/mcp/orchestrator.d.ts +0 -302
  164. package/dist/lib/mcp/orchestrator.js +0 -703
  165. package/dist/lib/mcp/plugin-manager.d.ts +0 -98
  166. package/dist/lib/mcp/plugin-manager.js +0 -296
  167. package/dist/lib/mcp/plugins/core/filesystem-mcp.d.ts +0 -36
  168. package/dist/lib/mcp/plugins/core/filesystem-mcp.js +0 -142
  169. package/dist/lib/mcp/plugins/filesystem-mcp.d.ts +0 -37
  170. package/dist/lib/mcp/plugins/filesystem-mcp.js +0 -54
  171. package/dist/lib/mcp/security-manager.d.ts +0 -87
  172. package/dist/lib/mcp/security-manager.js +0 -344
  173. package/dist/lib/mcp/semaphore-manager.d.ts +0 -137
  174. package/dist/lib/mcp/semaphore-manager.js +0 -329
  175. package/dist/lib/mcp/session-manager.d.ts +0 -187
  176. package/dist/lib/mcp/session-manager.js +0 -400
  177. package/dist/lib/mcp/session-persistence.d.ts +0 -93
  178. package/dist/lib/mcp/session-persistence.js +0 -301
  179. package/dist/lib/mcp/tool-integration.d.ts +0 -58
  180. package/dist/lib/mcp/tool-integration.js +0 -203
  181. package/dist/lib/mcp/transport-manager.d.ts +0 -154
  182. package/dist/lib/mcp/transport-manager.js +0 -334
  183. package/dist/lib/mcp/unified-mcp.d.ts +0 -133
  184. package/dist/lib/mcp/unified-mcp.js +0 -251
  185. package/dist/lib/mcp/unified-registry.d.ts +0 -165
  186. package/dist/lib/mcp/unified-registry.js +0 -538
  187. package/dist/lib/providers/analytics-helper.d.ts +0 -38
  188. package/dist/lib/providers/analytics-helper.js +0 -216
  189. package/dist/lib/providers/function-calling-provider.d.ts +0 -142
  190. package/dist/lib/providers/function-calling-provider.js +0 -630
  191. package/dist/lib/providers/mcp-provider.d.ts +0 -75
  192. package/dist/lib/providers/mcp-provider.js +0 -283
  193. package/dist/lib/providers/timeout-wrapper.d.ts +0 -40
  194. package/dist/lib/providers/timeout-wrapper.js +0 -100
  195. package/dist/lib/sdk/tool-extension.d.ts +0 -181
  196. package/dist/lib/sdk/tool-extension.js +0 -284
  197. package/dist/lib/services/streaming/streaming-manager.d.ts +0 -29
  198. package/dist/lib/services/streaming/streaming-manager.js +0 -245
  199. package/dist/lib/services/types.d.ts +0 -156
  200. package/dist/lib/services/types.js +0 -2
  201. package/dist/lib/services/websocket/websocket-server.d.ts +0 -34
  202. package/dist/lib/services/websocket/websocket-server.js +0 -305
  203. package/dist/lib/utils/provider-validation.d.ts +0 -36
  204. package/dist/lib/utils/provider-validation.js +0 -625
  205. package/dist/lib/utils/providerUtils-fixed.d.ts +0 -8
  206. package/dist/lib/utils/providerUtils-fixed.js +0 -94
  207. package/dist/lib/utils/streaming-utils.d.ts +0 -79
  208. package/dist/lib/utils/streaming-utils.js +0 -198
  209. package/dist/lib/utils/timeout-manager.d.ts +0 -75
  210. package/dist/lib/utils/timeout-manager.js +0 -244
  211. package/dist/mcp/adapters/plugin-bridge.d.ts +0 -40
  212. package/dist/mcp/adapters/plugin-bridge.js +0 -89
  213. package/dist/mcp/auto-discovery.d.ts +0 -62
  214. package/dist/mcp/auto-discovery.js +0 -149
  215. package/dist/mcp/client.d.ts +0 -68
  216. package/dist/mcp/client.js +0 -248
  217. package/dist/mcp/config.d.ts +0 -31
  218. package/dist/mcp/config.js +0 -99
  219. package/dist/mcp/context-manager.d.ts +0 -171
  220. package/dist/mcp/context-manager.js +0 -362
  221. package/dist/mcp/contracts/mcp-contract.d.ts +0 -169
  222. package/dist/mcp/contracts/mcp-contract.js +0 -58
  223. package/dist/mcp/core/plugin-manager.d.ts +0 -46
  224. package/dist/mcp/core/plugin-manager.js +0 -110
  225. package/dist/mcp/demo/plugin-demo.d.ts +0 -20
  226. package/dist/mcp/demo/plugin-demo.js +0 -118
  227. package/dist/mcp/dynamic-chain-executor.d.ts +0 -225
  228. package/dist/mcp/dynamic-chain-executor.js +0 -489
  229. package/dist/mcp/dynamic-orchestrator.d.ts +0 -115
  230. package/dist/mcp/dynamic-orchestrator.js +0 -351
  231. package/dist/mcp/ecosystem.d.ts +0 -75
  232. package/dist/mcp/ecosystem.js +0 -162
  233. package/dist/mcp/error-manager.d.ts +0 -254
  234. package/dist/mcp/error-manager.js +0 -501
  235. package/dist/mcp/error-recovery.d.ts +0 -159
  236. package/dist/mcp/error-recovery.js +0 -405
  237. package/dist/mcp/external-client.d.ts +0 -88
  238. package/dist/mcp/external-client.js +0 -331
  239. package/dist/mcp/external-manager.d.ts +0 -112
  240. package/dist/mcp/external-manager.js +0 -308
  241. package/dist/mcp/function-calling.d.ts +0 -65
  242. package/dist/mcp/function-calling.js +0 -642
  243. package/dist/mcp/health-monitor.d.ts +0 -257
  244. package/dist/mcp/health-monitor.js +0 -630
  245. package/dist/mcp/initialize-tools.d.ts +0 -29
  246. package/dist/mcp/initialize-tools.js +0 -262
  247. package/dist/mcp/initialize.d.ts +0 -18
  248. package/dist/mcp/initialize.js +0 -62
  249. package/dist/mcp/logging.d.ts +0 -38
  250. package/dist/mcp/logging.js +0 -100
  251. package/dist/mcp/manager.d.ts +0 -68
  252. package/dist/mcp/manager.js +0 -176
  253. package/dist/mcp/neurolink-mcp-client.d.ts +0 -97
  254. package/dist/mcp/neurolink-mcp-client.js +0 -462
  255. package/dist/mcp/orchestrator.d.ts +0 -302
  256. package/dist/mcp/orchestrator.js +0 -703
  257. package/dist/mcp/plugin-manager.d.ts +0 -98
  258. package/dist/mcp/plugin-manager.js +0 -297
  259. package/dist/mcp/plugins/core/filesystem-mcp.d.ts +0 -36
  260. package/dist/mcp/plugins/core/filesystem-mcp.js +0 -142
  261. package/dist/mcp/plugins/core/neurolink-mcp.json +0 -17
  262. package/dist/mcp/plugins/filesystem-mcp.d.ts +0 -37
  263. package/dist/mcp/plugins/filesystem-mcp.js +0 -54
  264. package/dist/mcp/security-manager.d.ts +0 -87
  265. package/dist/mcp/security-manager.js +0 -344
  266. package/dist/mcp/semaphore-manager.d.ts +0 -137
  267. package/dist/mcp/semaphore-manager.js +0 -329
  268. package/dist/mcp/session-manager.d.ts +0 -187
  269. package/dist/mcp/session-manager.js +0 -400
  270. package/dist/mcp/session-persistence.d.ts +0 -93
  271. package/dist/mcp/session-persistence.js +0 -302
  272. package/dist/mcp/tool-integration.d.ts +0 -58
  273. package/dist/mcp/tool-integration.js +0 -203
  274. package/dist/mcp/transport-manager.d.ts +0 -154
  275. package/dist/mcp/transport-manager.js +0 -335
  276. package/dist/mcp/unified-mcp.d.ts +0 -133
  277. package/dist/mcp/unified-mcp.js +0 -251
  278. package/dist/mcp/unified-registry.d.ts +0 -165
  279. package/dist/mcp/unified-registry.js +0 -539
  280. package/dist/providers/analytics-helper.d.ts +0 -38
  281. package/dist/providers/analytics-helper.js +0 -216
  282. package/dist/providers/function-calling-provider.d.ts +0 -142
  283. package/dist/providers/function-calling-provider.js +0 -630
  284. package/dist/providers/mcp-provider.d.ts +0 -75
  285. package/dist/providers/mcp-provider.js +0 -283
  286. package/dist/providers/timeout-wrapper.d.ts +0 -40
  287. package/dist/providers/timeout-wrapper.js +0 -100
  288. package/dist/sdk/tool-extension.d.ts +0 -181
  289. package/dist/sdk/tool-extension.js +0 -284
  290. package/dist/services/streaming/streaming-manager.d.ts +0 -29
  291. package/dist/services/streaming/streaming-manager.js +0 -245
  292. package/dist/services/types.d.ts +0 -156
  293. package/dist/services/types.js +0 -2
  294. package/dist/services/websocket/websocket-server.d.ts +0 -34
  295. package/dist/services/websocket/websocket-server.js +0 -306
  296. package/dist/utils/provider-validation.d.ts +0 -36
  297. package/dist/utils/provider-validation.js +0 -625
  298. package/dist/utils/providerUtils-fixed.d.ts +0 -8
  299. package/dist/utils/providerUtils-fixed.js +0 -94
  300. package/dist/utils/streaming-utils.d.ts +0 -79
  301. package/dist/utils/streaming-utils.js +0 -198
  302. package/dist/utils/timeout-manager.d.ts +0 -75
  303. package/dist/utils/timeout-manager.js +0 -244
@@ -1,400 +0,0 @@
1
- /**
2
- * NeuroLink MCP Session Management System
3
- * Enables continuous tool calling with persistent state across executions
4
- * Based on patterns from Cline's session management implementation
5
- */
6
- import { v4 as uuidv4 } from "uuid";
7
- import { initializeSessionPersistence, } from "./session-persistence.js";
8
- /**
9
- * Session Manager for maintaining state across tool executions
10
- * Implements session lifecycle management with automatic cleanup
11
- */
12
- export class SessionManager {
13
- sessions = new Map();
14
- sessionCounter = 0;
15
- stats = {
16
- activeSessions: 0,
17
- totalSessionsCreated: 0,
18
- totalSessionsExpired: 0,
19
- averageSessionDuration: 0,
20
- averageToolsPerSession: 0,
21
- peakConcurrentSessions: 0,
22
- lastCleanup: Date.now(),
23
- };
24
- cleanupInterval = null;
25
- defaultTTL = 3600000; // 1 hour default
26
- cleanupIntervalMs = 300000; // 5 minutes
27
- persistence = null;
28
- persistenceEnabled = false;
29
- constructor(defaultTTL, cleanupIntervalMs, autoCleanup = true, enablePersistence = true) {
30
- if (defaultTTL) {
31
- this.defaultTTL = defaultTTL;
32
- }
33
- if (cleanupIntervalMs) {
34
- this.cleanupIntervalMs = cleanupIntervalMs;
35
- }
36
- if (autoCleanup) {
37
- this.startAutoCleanup();
38
- }
39
- this.persistenceEnabled = enablePersistence;
40
- }
41
- /**
42
- * Initialize session manager with persistence
43
- */
44
- async initialize(persistenceOptions) {
45
- if (this.persistenceEnabled && !this.persistence) {
46
- this.persistence = await initializeSessionPersistence(this.sessions, persistenceOptions);
47
- if (process.env.NEUROLINK_DEBUG === "true") {
48
- console.log("[SessionManager] Persistence layer initialized");
49
- }
50
- }
51
- }
52
- /**
53
- * Create a new session
54
- *
55
- * @param context Execution context for the session
56
- * @param options Session configuration options
57
- * @returns Created session
58
- */
59
- createSession(context, options = {}) {
60
- const sessionId = options.metadata?.tags?.includes("custom-id") && context.sessionId
61
- ? context.sessionId
62
- : this.generateSessionId();
63
- const now = Date.now();
64
- const ttl = options.ttl || this.defaultTTL;
65
- const session = {
66
- id: sessionId,
67
- context: {
68
- ...context,
69
- sessionId, // Ensure context has the session ID
70
- },
71
- toolHistory: [],
72
- state: new Map(),
73
- metadata: options.metadata || {},
74
- createdAt: now,
75
- lastActivity: now,
76
- expiresAt: now + ttl,
77
- };
78
- this.sessions.set(sessionId, session);
79
- this.updateStats("create");
80
- // Save to disk if persistence is enabled
81
- if (this.persistence) {
82
- this.persistence.saveSession(sessionId, session).catch(console.error);
83
- }
84
- if (process.env.NEUROLINK_DEBUG === "true") {
85
- console.log(`[SessionManager] Created session ${sessionId} with TTL ${ttl}ms`);
86
- }
87
- return session;
88
- }
89
- /**
90
- * Get an existing session
91
- *
92
- * @param sessionId Session identifier
93
- * @param extend Whether to extend the session's expiration
94
- * @returns Session if found and not expired
95
- */
96
- getSession(sessionId, extend = true) {
97
- const session = this.sessions.get(sessionId) || null;
98
- // For sync compatibility, skip disk loading in getSession
99
- // Use async getSessionAsync() for full persistence features
100
- if (!session) {
101
- return null;
102
- }
103
- // Check if expired
104
- if (session.expiresAt < Date.now()) {
105
- this.removeSession(sessionId);
106
- return null;
107
- }
108
- // Update activity and optionally extend expiration
109
- session.lastActivity = Date.now();
110
- if (extend) {
111
- const ttl = session.expiresAt - session.createdAt;
112
- session.expiresAt = Date.now() + ttl;
113
- // Save updated expiration to disk
114
- if (this.persistence) {
115
- this.persistence.saveSession(sessionId, session).catch(console.error);
116
- }
117
- }
118
- return session;
119
- }
120
- /**
121
- * Update session with new tool result
122
- *
123
- * @param sessionId Session identifier
124
- * @param toolResult Result from tool execution
125
- * @returns Updated session or null if not found
126
- */
127
- updateSession(sessionId, toolResult) {
128
- const session = this.getSession(sessionId);
129
- if (!session) {
130
- return null;
131
- }
132
- // Add to tool history
133
- session.toolHistory.push(toolResult);
134
- session.lastActivity = Date.now();
135
- // Update stats
136
- this.updateStats("update", session);
137
- // Save to disk if persistence is enabled
138
- if (this.persistence) {
139
- this.persistence.saveSession(sessionId, session).catch(console.error);
140
- }
141
- if (process.env.NEUROLINK_DEBUG === "true") {
142
- console.log(`[SessionManager] Updated session ${sessionId} with tool result`);
143
- }
144
- return session;
145
- }
146
- /**
147
- * Set session state value
148
- *
149
- * @param sessionId Session identifier
150
- * @param key State key
151
- * @param value State value
152
- * @returns Updated session or null if not found
153
- */
154
- setSessionState(sessionId, key, value) {
155
- const session = this.getSession(sessionId);
156
- if (!session) {
157
- return null;
158
- }
159
- session.state.set(key, value);
160
- session.lastActivity = Date.now();
161
- // Save to disk if persistence is enabled
162
- if (this.persistence) {
163
- this.persistence.saveSession(sessionId, session).catch(console.error);
164
- }
165
- return session;
166
- }
167
- /**
168
- * Get session state value
169
- *
170
- * @param sessionId Session identifier
171
- * @param key State key
172
- * @returns State value or undefined
173
- */
174
- getSessionState(sessionId, key) {
175
- const session = this.getSession(sessionId, false);
176
- return session?.state.get(key);
177
- }
178
- /**
179
- * Remove a session
180
- *
181
- * @param sessionId Session identifier
182
- * @returns True if session was removed
183
- */
184
- removeSession(sessionId) {
185
- const session = this.sessions.get(sessionId);
186
- if (!session) {
187
- return false;
188
- }
189
- this.sessions.delete(sessionId);
190
- this.updateStats("remove", session);
191
- // Delete from disk if persistence is enabled (fire-and-forget)
192
- if (this.persistence) {
193
- this.persistence.deleteSession(sessionId).catch(console.error);
194
- }
195
- if (process.env.NEUROLINK_DEBUG === "true") {
196
- console.log(`[SessionManager] Removed session ${sessionId}`);
197
- }
198
- return true;
199
- }
200
- /**
201
- * Clean up expired sessions
202
- *
203
- * @returns Number of sessions cleaned up
204
- */
205
- async cleanup() {
206
- const now = Date.now();
207
- let cleaned = 0;
208
- for (const [sessionId, session] of this.sessions) {
209
- if (session.expiresAt < now) {
210
- this.removeSession(sessionId);
211
- cleaned++;
212
- }
213
- }
214
- this.stats.lastCleanup = now;
215
- if (cleaned > 0 && process.env.NEUROLINK_DEBUG === "true") {
216
- console.log(`[SessionManager] Cleaned up ${cleaned} expired sessions`);
217
- }
218
- return cleaned;
219
- }
220
- /**
221
- * Get an existing session with async persistence loading
222
- *
223
- * @param sessionId Session identifier
224
- * @param extend Whether to extend the session's expiration
225
- * @returns Session if found and not expired, or null
226
- */
227
- async getSessionAsync(sessionId, extend = true) {
228
- let session = this.sessions.get(sessionId) || null;
229
- // If not in memory and persistence is enabled, try loading from disk
230
- if (!session && this.persistence) {
231
- try {
232
- session = await this.persistence.loadSession(sessionId);
233
- if (session) {
234
- // Add to memory cache
235
- this.sessions.set(sessionId, session);
236
- if (process.env.NEUROLINK_DEBUG === "true") {
237
- console.log(`[SessionManager] Loaded session ${sessionId} from persistence`);
238
- }
239
- }
240
- }
241
- catch (error) {
242
- if (process.env.NEUROLINK_DEBUG === "true") {
243
- console.log(`[SessionManager] Failed to load session ${sessionId} from persistence:`, error);
244
- }
245
- }
246
- }
247
- if (!session) {
248
- return null;
249
- }
250
- // Check if session has expired
251
- if (session.expiresAt < Date.now()) {
252
- this.sessions.delete(sessionId);
253
- if (this.persistence) {
254
- this.persistence.deleteSession(sessionId).catch(console.error);
255
- }
256
- return null;
257
- }
258
- // Extend session if requested
259
- if (extend && session.expiresAt > Date.now()) {
260
- // Calculate remaining TTL and extend by the same amount
261
- const remainingTtl = session.expiresAt - Date.now();
262
- const originalTtl = session.expiresAt - session.createdAt;
263
- if (originalTtl > 0) {
264
- session.expiresAt = Date.now() + originalTtl;
265
- if (this.persistence) {
266
- this.persistence.saveSession(sessionId, session).catch(console.error);
267
- }
268
- }
269
- }
270
- session.lastActivity = Date.now();
271
- return session;
272
- }
273
- /**
274
- * Get all active sessions
275
- *
276
- * @returns Array of active sessions
277
- */
278
- async getActiveSessions() {
279
- await this.cleanup(); // Clean up first
280
- return Array.from(this.sessions.values());
281
- }
282
- /**
283
- * Get session statistics
284
- *
285
- * @returns Session statistics
286
- */
287
- getStats() {
288
- return { ...this.stats };
289
- }
290
- /**
291
- * Clear all sessions
292
- */
293
- clearAll() {
294
- const count = this.sessions.size;
295
- this.sessions.clear();
296
- this.stats.totalSessionsExpired += count;
297
- this.stats.activeSessions = 0;
298
- if (process.env.NEUROLINK_DEBUG === "true") {
299
- console.log(`[SessionManager] Cleared all ${count} sessions`);
300
- }
301
- }
302
- /**
303
- * Start automatic cleanup interval
304
- *
305
- * @private
306
- */
307
- startAutoCleanup() {
308
- if (this.cleanupInterval) {
309
- return;
310
- }
311
- this.cleanupInterval = setInterval(async () => {
312
- await this.cleanup();
313
- }, this.cleanupIntervalMs);
314
- if (process.env.NEUROLINK_DEBUG === "true") {
315
- console.log(`[SessionManager] Started auto-cleanup with ${this.cleanupIntervalMs}ms interval`);
316
- }
317
- }
318
- /**
319
- * Stop automatic cleanup interval
320
- */
321
- stopAutoCleanup() {
322
- if (this.cleanupInterval) {
323
- clearInterval(this.cleanupInterval);
324
- this.cleanupInterval = null;
325
- if (process.env.NEUROLINK_DEBUG === "true") {
326
- console.log("[SessionManager] Stopped auto-cleanup");
327
- }
328
- }
329
- }
330
- /**
331
- * Generate unique session ID
332
- *
333
- * @private
334
- */
335
- generateSessionId() {
336
- this.sessionCounter++;
337
- return `nlsess-${Date.now()}-${this.sessionCounter}-${uuidv4().substring(0, 8)}`;
338
- }
339
- /**
340
- * Update statistics
341
- *
342
- * @private
343
- */
344
- updateStats(action, session) {
345
- switch (action) {
346
- case "create":
347
- this.stats.totalSessionsCreated++;
348
- this.stats.activeSessions = this.sessions.size;
349
- if (this.sessions.size > this.stats.peakConcurrentSessions) {
350
- this.stats.peakConcurrentSessions = this.sessions.size;
351
- }
352
- break;
353
- case "update":
354
- if (session) {
355
- // Update average tools per session
356
- const totalTools = Array.from(this.sessions.values()).reduce((sum, s) => sum + s.toolHistory.length, 0);
357
- this.stats.averageToolsPerSession =
358
- this.sessions.size > 0 ? totalTools / this.sessions.size : 0;
359
- }
360
- break;
361
- case "remove":
362
- this.stats.totalSessionsExpired++;
363
- this.stats.activeSessions = this.sessions.size;
364
- if (session) {
365
- // Update average session duration
366
- const duration = session.lastActivity - session.createdAt;
367
- const totalDuration = this.stats.averageSessionDuration *
368
- (this.stats.totalSessionsExpired - 1) +
369
- duration;
370
- this.stats.averageSessionDuration =
371
- totalDuration / this.stats.totalSessionsExpired;
372
- }
373
- break;
374
- }
375
- }
376
- }
377
- /**
378
- * Default session manager instance
379
- */
380
- export const defaultSessionManager = new SessionManager();
381
- /**
382
- * Utility function to create session with default manager
383
- *
384
- * @param context Execution context
385
- * @param options Session options
386
- * @returns Created session
387
- */
388
- export async function createSession(context, options) {
389
- return defaultSessionManager.createSession(context, options);
390
- }
391
- /**
392
- * Utility function to get session with default manager
393
- *
394
- * @param sessionId Session identifier
395
- * @param extend Whether to extend expiration
396
- * @returns Session or null
397
- */
398
- export async function getSession(sessionId, extend) {
399
- return defaultSessionManager.getSession(sessionId, extend);
400
- }
@@ -1,93 +0,0 @@
1
- /**
2
- * NeuroLink Session Persistence Layer
3
- * Provides file-based persistence for sessions with atomic writes and recovery
4
- */
5
- import type { OrchestratorSession } from "./session-manager.js";
6
- /**
7
- * Persistence options
8
- */
9
- export interface PersistenceOptions {
10
- directory?: string;
11
- snapshotInterval?: number;
12
- retentionPeriod?: number;
13
- enableChecksum?: boolean;
14
- maxRetries?: number;
15
- }
16
- /**
17
- * Session Persistence Manager
18
- * Handles saving and loading sessions to/from disk with recovery mechanisms
19
- */
20
- export declare class SessionPersistence {
21
- private directory;
22
- private snapshotInterval;
23
- private retentionPeriod;
24
- private enableChecksum;
25
- private maxRetries;
26
- private snapshotTimer;
27
- private sessionMap;
28
- constructor(sessionMap: Map<string, OrchestratorSession>, options?: PersistenceOptions);
29
- /**
30
- * Initialize persistence layer
31
- */
32
- initialize(): Promise<void>;
33
- /**
34
- * Ensure sessions directory exists
35
- */
36
- private ensureDirectory;
37
- /**
38
- * Calculate checksum for data integrity
39
- */
40
- private calculateChecksum;
41
- /**
42
- * Serialize session to JSON with metadata
43
- */
44
- private serializeSession;
45
- /**
46
- * Deserialize session from JSON
47
- */
48
- private deserializeSession;
49
- /**
50
- * Save single session with atomic write
51
- */
52
- saveSession(sessionId: string, session: OrchestratorSession): Promise<boolean>;
53
- /**
54
- * Load single session from disk
55
- */
56
- loadSession(sessionId: string): Promise<OrchestratorSession | null>;
57
- /**
58
- * Load all sessions from disk on startup
59
- */
60
- loadSessions(): Promise<void>;
61
- /**
62
- * Save all active sessions (snapshot)
63
- */
64
- saveAllSessions(): Promise<void>;
65
- /**
66
- * Delete session file
67
- */
68
- deleteSession(sessionId: string): Promise<void>;
69
- /**
70
- * Clean up old session files
71
- */
72
- cleanupOldSessions(): Promise<void>;
73
- /**
74
- * Start periodic snapshot timer
75
- */
76
- private startSnapshotTimer;
77
- /**
78
- * Stop snapshot timer
79
- */
80
- stopSnapshotTimer(): void;
81
- /**
82
- * Shutdown persistence layer
83
- */
84
- shutdown(): Promise<void>;
85
- }
86
- /**
87
- * Default session persistence instance
88
- */
89
- export declare let defaultSessionPersistence: SessionPersistence | null;
90
- /**
91
- * Initialize default session persistence
92
- */
93
- export declare function initializeSessionPersistence(sessionMap: Map<string, OrchestratorSession>, options?: PersistenceOptions): Promise<SessionPersistence>;