@juspay/neurolink 6.0.0 → 6.2.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 (283) hide show
  1. package/CHANGELOG.md +14 -3
  2. package/dist/cli/commands/config.d.ts +13 -13
  3. package/dist/cli/index.js +3 -9
  4. package/dist/core/analytics.d.ts +11 -1
  5. package/dist/core/analytics.js +2 -2
  6. package/dist/core/base-provider.js +4 -18
  7. package/dist/core/dynamic-models.d.ts +8 -8
  8. package/dist/core/factory.js +3 -11
  9. package/dist/index.d.ts +2 -4
  10. package/dist/index.js +2 -11
  11. package/dist/lib/core/analytics.d.ts +11 -1
  12. package/dist/lib/core/analytics.js +2 -2
  13. package/dist/lib/core/base-provider.js +4 -18
  14. package/dist/lib/core/dynamic-models.d.ts +8 -8
  15. package/dist/lib/core/factory.js +3 -11
  16. package/dist/lib/index.d.ts +2 -4
  17. package/dist/lib/index.js +2 -11
  18. package/dist/lib/mcp/factory.d.ts +1 -1
  19. package/dist/lib/mcp/index.d.ts +7 -19
  20. package/dist/lib/mcp/index.js +15 -56
  21. package/dist/lib/neurolink.d.ts +1 -9
  22. package/dist/lib/neurolink.js +21 -70
  23. package/dist/lib/providers/amazon-bedrock.js +5 -16
  24. package/dist/lib/providers/anthropic-baseprovider.js +3 -21
  25. package/dist/lib/providers/anthropic.js +4 -7
  26. package/dist/lib/providers/azure-openai.js +4 -2
  27. package/dist/lib/providers/google-vertex.js +5 -9
  28. package/dist/lib/providers/huggingFace.js +5 -10
  29. package/dist/lib/providers/mistral.js +5 -8
  30. package/dist/lib/providers/openAI.js +4 -7
  31. package/dist/lib/utils/providerConfig.d.ts +117 -0
  32. package/dist/lib/utils/providerConfig.js +353 -0
  33. package/dist/lib/utils/providerUtils.d.ts +2 -1
  34. package/dist/lib/utils/providerUtils.js +53 -36
  35. package/dist/lib/utils/timeout.d.ts +72 -1
  36. package/dist/lib/utils/timeout.js +203 -2
  37. package/dist/mcp/factory.d.ts +1 -1
  38. package/dist/mcp/index.d.ts +7 -19
  39. package/dist/mcp/index.js +15 -56
  40. package/dist/neurolink.d.ts +1 -9
  41. package/dist/neurolink.js +21 -70
  42. package/dist/providers/amazon-bedrock.js +5 -16
  43. package/dist/providers/anthropic-baseprovider.js +3 -21
  44. package/dist/providers/anthropic.js +4 -7
  45. package/dist/providers/azure-openai.js +4 -2
  46. package/dist/providers/google-vertex.js +5 -9
  47. package/dist/providers/huggingFace.js +5 -10
  48. package/dist/providers/mistral.js +5 -8
  49. package/dist/providers/openAI.js +4 -7
  50. package/dist/utils/providerConfig.d.ts +117 -0
  51. package/dist/utils/providerConfig.js +353 -0
  52. package/dist/utils/providerUtils.d.ts +2 -1
  53. package/dist/utils/providerUtils.js +53 -36
  54. package/dist/utils/timeout.d.ts +72 -1
  55. package/dist/utils/timeout.js +203 -2
  56. package/package.json +2 -1
  57. package/dist/chat/client-utils.d.ts +0 -95
  58. package/dist/chat/client-utils.js +0 -315
  59. package/dist/chat/index.d.ts +0 -24
  60. package/dist/chat/index.js +0 -33
  61. package/dist/chat/session-storage.d.ts +0 -77
  62. package/dist/chat/session-storage.js +0 -233
  63. package/dist/chat/session.d.ts +0 -96
  64. package/dist/chat/session.js +0 -257
  65. package/dist/chat/sse-handler.d.ts +0 -49
  66. package/dist/chat/sse-handler.js +0 -259
  67. package/dist/chat/types.d.ts +0 -74
  68. package/dist/chat/types.js +0 -5
  69. package/dist/chat/websocket-chat-handler.d.ts +0 -37
  70. package/dist/chat/websocket-chat-handler.js +0 -262
  71. package/dist/cli/commands/mcp.d.ts +0 -20
  72. package/dist/cli/commands/mcp.js +0 -1272
  73. package/dist/core/defaults.d.ts +0 -19
  74. package/dist/core/defaults.js +0 -29
  75. package/dist/core/evaluation-config.d.ts +0 -29
  76. package/dist/core/evaluation-config.js +0 -144
  77. package/dist/factories/compatibility-factory.d.ts +0 -35
  78. package/dist/factories/compatibility-factory.js +0 -71
  79. package/dist/factories/provider-generate-factory.d.ts +0 -20
  80. package/dist/factories/provider-generate-factory.js +0 -93
  81. package/dist/lib/chat/client-utils.d.ts +0 -95
  82. package/dist/lib/chat/client-utils.js +0 -315
  83. package/dist/lib/chat/index.d.ts +0 -24
  84. package/dist/lib/chat/index.js +0 -33
  85. package/dist/lib/chat/session-storage.d.ts +0 -77
  86. package/dist/lib/chat/session-storage.js +0 -233
  87. package/dist/lib/chat/session.d.ts +0 -96
  88. package/dist/lib/chat/session.js +0 -257
  89. package/dist/lib/chat/sse-handler.d.ts +0 -49
  90. package/dist/lib/chat/sse-handler.js +0 -259
  91. package/dist/lib/chat/types.d.ts +0 -74
  92. package/dist/lib/chat/types.js +0 -5
  93. package/dist/lib/chat/websocket-chat-handler.d.ts +0 -37
  94. package/dist/lib/chat/websocket-chat-handler.js +0 -262
  95. package/dist/lib/core/defaults.d.ts +0 -19
  96. package/dist/lib/core/defaults.js +0 -29
  97. package/dist/lib/core/evaluation-config.d.ts +0 -29
  98. package/dist/lib/core/evaluation-config.js +0 -144
  99. package/dist/lib/factories/compatibility-factory.d.ts +0 -35
  100. package/dist/lib/factories/compatibility-factory.js +0 -71
  101. package/dist/lib/factories/provider-generate-factory.d.ts +0 -20
  102. package/dist/lib/factories/provider-generate-factory.js +0 -93
  103. package/dist/lib/mcp/adapters/plugin-bridge.d.ts +0 -40
  104. package/dist/lib/mcp/adapters/plugin-bridge.js +0 -89
  105. package/dist/lib/mcp/auto-discovery.d.ts +0 -62
  106. package/dist/lib/mcp/auto-discovery.js +0 -149
  107. package/dist/lib/mcp/client.d.ts +0 -68
  108. package/dist/lib/mcp/client.js +0 -248
  109. package/dist/lib/mcp/config.d.ts +0 -31
  110. package/dist/lib/mcp/config.js +0 -99
  111. package/dist/lib/mcp/context-manager.d.ts +0 -171
  112. package/dist/lib/mcp/context-manager.js +0 -362
  113. package/dist/lib/mcp/contracts/mcp-contract.d.ts +0 -169
  114. package/dist/lib/mcp/contracts/mcp-contract.js +0 -58
  115. package/dist/lib/mcp/core/plugin-manager.d.ts +0 -46
  116. package/dist/lib/mcp/core/plugin-manager.js +0 -110
  117. package/dist/lib/mcp/demo/plugin-demo.d.ts +0 -20
  118. package/dist/lib/mcp/demo/plugin-demo.js +0 -118
  119. package/dist/lib/mcp/dynamic-chain-executor.d.ts +0 -225
  120. package/dist/lib/mcp/dynamic-chain-executor.js +0 -489
  121. package/dist/lib/mcp/dynamic-orchestrator.d.ts +0 -115
  122. package/dist/lib/mcp/dynamic-orchestrator.js +0 -351
  123. package/dist/lib/mcp/ecosystem.d.ts +0 -75
  124. package/dist/lib/mcp/ecosystem.js +0 -161
  125. package/dist/lib/mcp/error-manager.d.ts +0 -254
  126. package/dist/lib/mcp/error-manager.js +0 -501
  127. package/dist/lib/mcp/error-recovery.d.ts +0 -159
  128. package/dist/lib/mcp/error-recovery.js +0 -405
  129. package/dist/lib/mcp/external-client.d.ts +0 -88
  130. package/dist/lib/mcp/external-client.js +0 -331
  131. package/dist/lib/mcp/external-manager.d.ts +0 -112
  132. package/dist/lib/mcp/external-manager.js +0 -308
  133. package/dist/lib/mcp/function-calling.d.ts +0 -65
  134. package/dist/lib/mcp/function-calling.js +0 -642
  135. package/dist/lib/mcp/health-monitor.d.ts +0 -257
  136. package/dist/lib/mcp/health-monitor.js +0 -630
  137. package/dist/lib/mcp/initialize-tools.d.ts +0 -29
  138. package/dist/lib/mcp/initialize-tools.js +0 -261
  139. package/dist/lib/mcp/initialize.d.ts +0 -18
  140. package/dist/lib/mcp/initialize.js +0 -62
  141. package/dist/lib/mcp/manager.d.ts +0 -68
  142. package/dist/lib/mcp/manager.js +0 -176
  143. package/dist/lib/mcp/neurolink-mcp-client.d.ts +0 -97
  144. package/dist/lib/mcp/neurolink-mcp-client.js +0 -462
  145. package/dist/lib/mcp/orchestrator.d.ts +0 -302
  146. package/dist/lib/mcp/orchestrator.js +0 -703
  147. package/dist/lib/mcp/plugin-manager.d.ts +0 -98
  148. package/dist/lib/mcp/plugin-manager.js +0 -296
  149. package/dist/lib/mcp/plugins/core/filesystem-mcp.d.ts +0 -36
  150. package/dist/lib/mcp/plugins/core/filesystem-mcp.js +0 -142
  151. package/dist/lib/mcp/plugins/filesystem-mcp.d.ts +0 -37
  152. package/dist/lib/mcp/plugins/filesystem-mcp.js +0 -54
  153. package/dist/lib/mcp/security-manager.d.ts +0 -87
  154. package/dist/lib/mcp/security-manager.js +0 -344
  155. package/dist/lib/mcp/semaphore-manager.d.ts +0 -137
  156. package/dist/lib/mcp/semaphore-manager.js +0 -329
  157. package/dist/lib/mcp/session-manager.d.ts +0 -187
  158. package/dist/lib/mcp/session-manager.js +0 -400
  159. package/dist/lib/mcp/session-persistence.d.ts +0 -93
  160. package/dist/lib/mcp/session-persistence.js +0 -301
  161. package/dist/lib/mcp/tool-integration.d.ts +0 -58
  162. package/dist/lib/mcp/tool-integration.js +0 -203
  163. package/dist/lib/mcp/transport-manager.d.ts +0 -154
  164. package/dist/lib/mcp/transport-manager.js +0 -334
  165. package/dist/lib/mcp/unified-mcp.d.ts +0 -133
  166. package/dist/lib/mcp/unified-mcp.js +0 -251
  167. package/dist/lib/mcp/unified-registry.d.ts +0 -165
  168. package/dist/lib/mcp/unified-registry.js +0 -538
  169. package/dist/lib/providers/analytics-helper.d.ts +0 -38
  170. package/dist/lib/providers/analytics-helper.js +0 -216
  171. package/dist/lib/providers/function-calling-provider.d.ts +0 -142
  172. package/dist/lib/providers/function-calling-provider.js +0 -630
  173. package/dist/lib/providers/mcp-provider.d.ts +0 -75
  174. package/dist/lib/providers/mcp-provider.js +0 -283
  175. package/dist/lib/providers/timeout-wrapper.d.ts +0 -40
  176. package/dist/lib/providers/timeout-wrapper.js +0 -100
  177. package/dist/lib/sdk/tool-extension.d.ts +0 -181
  178. package/dist/lib/sdk/tool-extension.js +0 -284
  179. package/dist/lib/services/streaming/streaming-manager.d.ts +0 -29
  180. package/dist/lib/services/streaming/streaming-manager.js +0 -245
  181. package/dist/lib/services/types.d.ts +0 -156
  182. package/dist/lib/services/types.js +0 -2
  183. package/dist/lib/services/websocket/websocket-server.d.ts +0 -34
  184. package/dist/lib/services/websocket/websocket-server.js +0 -305
  185. package/dist/lib/utils/provider-validation.d.ts +0 -36
  186. package/dist/lib/utils/provider-validation.js +0 -625
  187. package/dist/lib/utils/providerUtils-fixed.d.ts +0 -8
  188. package/dist/lib/utils/providerUtils-fixed.js +0 -94
  189. package/dist/lib/utils/streaming-utils.d.ts +0 -79
  190. package/dist/lib/utils/streaming-utils.js +0 -198
  191. package/dist/lib/utils/timeout-manager.d.ts +0 -75
  192. package/dist/lib/utils/timeout-manager.js +0 -244
  193. package/dist/mcp/adapters/plugin-bridge.d.ts +0 -40
  194. package/dist/mcp/adapters/plugin-bridge.js +0 -89
  195. package/dist/mcp/auto-discovery.d.ts +0 -62
  196. package/dist/mcp/auto-discovery.js +0 -149
  197. package/dist/mcp/client.d.ts +0 -68
  198. package/dist/mcp/client.js +0 -248
  199. package/dist/mcp/config.d.ts +0 -31
  200. package/dist/mcp/config.js +0 -99
  201. package/dist/mcp/context-manager.d.ts +0 -171
  202. package/dist/mcp/context-manager.js +0 -362
  203. package/dist/mcp/contracts/mcp-contract.d.ts +0 -169
  204. package/dist/mcp/contracts/mcp-contract.js +0 -58
  205. package/dist/mcp/core/plugin-manager.d.ts +0 -46
  206. package/dist/mcp/core/plugin-manager.js +0 -110
  207. package/dist/mcp/demo/plugin-demo.d.ts +0 -20
  208. package/dist/mcp/demo/plugin-demo.js +0 -118
  209. package/dist/mcp/dynamic-chain-executor.d.ts +0 -225
  210. package/dist/mcp/dynamic-chain-executor.js +0 -489
  211. package/dist/mcp/dynamic-orchestrator.d.ts +0 -115
  212. package/dist/mcp/dynamic-orchestrator.js +0 -351
  213. package/dist/mcp/ecosystem.d.ts +0 -75
  214. package/dist/mcp/ecosystem.js +0 -162
  215. package/dist/mcp/error-manager.d.ts +0 -254
  216. package/dist/mcp/error-manager.js +0 -501
  217. package/dist/mcp/error-recovery.d.ts +0 -159
  218. package/dist/mcp/error-recovery.js +0 -405
  219. package/dist/mcp/external-client.d.ts +0 -88
  220. package/dist/mcp/external-client.js +0 -331
  221. package/dist/mcp/external-manager.d.ts +0 -112
  222. package/dist/mcp/external-manager.js +0 -308
  223. package/dist/mcp/function-calling.d.ts +0 -65
  224. package/dist/mcp/function-calling.js +0 -642
  225. package/dist/mcp/health-monitor.d.ts +0 -257
  226. package/dist/mcp/health-monitor.js +0 -630
  227. package/dist/mcp/initialize-tools.d.ts +0 -29
  228. package/dist/mcp/initialize-tools.js +0 -262
  229. package/dist/mcp/initialize.d.ts +0 -18
  230. package/dist/mcp/initialize.js +0 -62
  231. package/dist/mcp/manager.d.ts +0 -68
  232. package/dist/mcp/manager.js +0 -176
  233. package/dist/mcp/neurolink-mcp-client.d.ts +0 -97
  234. package/dist/mcp/neurolink-mcp-client.js +0 -462
  235. package/dist/mcp/orchestrator.d.ts +0 -302
  236. package/dist/mcp/orchestrator.js +0 -703
  237. package/dist/mcp/plugin-manager.d.ts +0 -98
  238. package/dist/mcp/plugin-manager.js +0 -297
  239. package/dist/mcp/plugins/core/filesystem-mcp.d.ts +0 -36
  240. package/dist/mcp/plugins/core/filesystem-mcp.js +0 -142
  241. package/dist/mcp/plugins/core/neurolink-mcp.json +0 -17
  242. package/dist/mcp/plugins/filesystem-mcp.d.ts +0 -37
  243. package/dist/mcp/plugins/filesystem-mcp.js +0 -54
  244. package/dist/mcp/security-manager.d.ts +0 -87
  245. package/dist/mcp/security-manager.js +0 -344
  246. package/dist/mcp/semaphore-manager.d.ts +0 -137
  247. package/dist/mcp/semaphore-manager.js +0 -329
  248. package/dist/mcp/session-manager.d.ts +0 -187
  249. package/dist/mcp/session-manager.js +0 -400
  250. package/dist/mcp/session-persistence.d.ts +0 -93
  251. package/dist/mcp/session-persistence.js +0 -302
  252. package/dist/mcp/tool-integration.d.ts +0 -58
  253. package/dist/mcp/tool-integration.js +0 -203
  254. package/dist/mcp/transport-manager.d.ts +0 -154
  255. package/dist/mcp/transport-manager.js +0 -335
  256. package/dist/mcp/unified-mcp.d.ts +0 -133
  257. package/dist/mcp/unified-mcp.js +0 -251
  258. package/dist/mcp/unified-registry.d.ts +0 -165
  259. package/dist/mcp/unified-registry.js +0 -539
  260. package/dist/providers/analytics-helper.d.ts +0 -38
  261. package/dist/providers/analytics-helper.js +0 -216
  262. package/dist/providers/function-calling-provider.d.ts +0 -142
  263. package/dist/providers/function-calling-provider.js +0 -630
  264. package/dist/providers/mcp-provider.d.ts +0 -75
  265. package/dist/providers/mcp-provider.js +0 -283
  266. package/dist/providers/timeout-wrapper.d.ts +0 -40
  267. package/dist/providers/timeout-wrapper.js +0 -100
  268. package/dist/sdk/tool-extension.d.ts +0 -181
  269. package/dist/sdk/tool-extension.js +0 -284
  270. package/dist/services/streaming/streaming-manager.d.ts +0 -29
  271. package/dist/services/streaming/streaming-manager.js +0 -245
  272. package/dist/services/types.d.ts +0 -156
  273. package/dist/services/types.js +0 -2
  274. package/dist/services/websocket/websocket-server.d.ts +0 -34
  275. package/dist/services/websocket/websocket-server.js +0 -306
  276. package/dist/utils/provider-validation.d.ts +0 -36
  277. package/dist/utils/provider-validation.js +0 -625
  278. package/dist/utils/providerUtils-fixed.d.ts +0 -8
  279. package/dist/utils/providerUtils-fixed.js +0 -94
  280. package/dist/utils/streaming-utils.d.ts +0 -79
  281. package/dist/utils/streaming-utils.js +0 -198
  282. package/dist/utils/timeout-manager.d.ts +0 -75
  283. 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>;