@juspay/neurolink 6.1.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 +10 -6
  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 +1 -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,301 +0,0 @@
1
- /**
2
- * NeuroLink Session Persistence Layer
3
- * Provides file-based persistence for sessions with atomic writes and recovery
4
- */
5
- import fs from "fs/promises";
6
- import path from "path";
7
- import crypto from "crypto";
8
- /**
9
- * Session Persistence Manager
10
- * Handles saving and loading sessions to/from disk with recovery mechanisms
11
- */
12
- export class SessionPersistence {
13
- directory;
14
- snapshotInterval;
15
- retentionPeriod;
16
- enableChecksum;
17
- maxRetries;
18
- snapshotTimer = null;
19
- sessionMap;
20
- constructor(sessionMap, options = {}) {
21
- this.sessionMap = sessionMap;
22
- this.directory = options.directory || ".neurolink/sessions";
23
- this.snapshotInterval = options.snapshotInterval || 30000; // 30 seconds
24
- this.retentionPeriod = options.retentionPeriod || 86400000; // 24 hours
25
- this.enableChecksum = options.enableChecksum ?? true;
26
- this.maxRetries = options.maxRetries || 3;
27
- }
28
- /**
29
- * Initialize persistence layer
30
- */
31
- async initialize() {
32
- // Create sessions directory if it doesn't exist
33
- await this.ensureDirectory();
34
- // Load existing sessions
35
- await this.loadSessions();
36
- // Start snapshot timer
37
- this.startSnapshotTimer();
38
- if (process.env.NEUROLINK_DEBUG === "true") {
39
- console.log(`[SessionPersistence] Initialized with directory: ${this.directory}`);
40
- }
41
- }
42
- /**
43
- * Ensure sessions directory exists
44
- */
45
- async ensureDirectory() {
46
- await fs.mkdir(this.directory, { recursive: true });
47
- }
48
- /**
49
- * Calculate checksum for data integrity
50
- */
51
- calculateChecksum(data) {
52
- return crypto.createHash("sha256").update(data).digest("hex");
53
- }
54
- /**
55
- * Serialize session to JSON with metadata
56
- */
57
- serializeSession(session) {
58
- // Convert Map to array for JSON serialization
59
- const sessionData = {
60
- ...session,
61
- state: Array.from(session.state.entries()),
62
- };
63
- const fileData = {
64
- session: sessionData,
65
- checksum: "",
66
- version: "1.0",
67
- lastSaved: Date.now(),
68
- };
69
- if (this.enableChecksum) {
70
- // First serialization without checksum
71
- const tempJsonData = JSON.stringify(fileData, null, 2);
72
- // Calculate checksum based on the first serialization
73
- fileData.checksum = this.calculateChecksum(tempJsonData);
74
- }
75
- // Final serialization with checksum included
76
- return JSON.stringify(fileData, null, 2);
77
- }
78
- /**
79
- * Deserialize session from JSON
80
- */
81
- deserializeSession(data) {
82
- try {
83
- const fileData = JSON.parse(data);
84
- // Verify checksum if enabled
85
- if (this.enableChecksum && fileData.checksum) {
86
- const tempData = { ...fileData, checksum: "" };
87
- const expectedChecksum = this.calculateChecksum(JSON.stringify(tempData, null, 2));
88
- if (fileData.checksum !== expectedChecksum) {
89
- console.error("[SessionPersistence] Checksum mismatch, session corrupted");
90
- return null;
91
- }
92
- }
93
- // Convert state array back to Map
94
- const serializedSession = fileData.session;
95
- const session = {
96
- ...serializedSession,
97
- state: new Map(serializedSession.state),
98
- };
99
- return session;
100
- }
101
- catch (error) {
102
- console.error("[SessionPersistence] Failed to deserialize session:", error);
103
- return null;
104
- }
105
- }
106
- /**
107
- * Save single session with atomic write
108
- */
109
- async saveSession(sessionId, session) {
110
- const filename = `${sessionId}.json`;
111
- const filepath = path.join(this.directory, filename);
112
- const tempPath = `${filepath}.tmp`;
113
- let retries = 0;
114
- while (retries < this.maxRetries) {
115
- try {
116
- // Serialize session
117
- const data = this.serializeSession(session);
118
- // Write to temporary file first (atomic write pattern)
119
- await fs.writeFile(tempPath, data, "utf8");
120
- // Rename temp file to final location (atomic operation)
121
- await fs.rename(tempPath, filepath);
122
- if (process.env.NEUROLINK_DEBUG === "true") {
123
- console.log(`[SessionPersistence] Saved session ${sessionId}`);
124
- }
125
- return true;
126
- }
127
- catch (error) {
128
- retries++;
129
- console.error(`[SessionPersistence] Failed to save session (attempt ${retries}):`, error);
130
- // Clean up temp file if it exists
131
- try {
132
- await fs.unlink(tempPath);
133
- }
134
- catch {
135
- // Ignore errors when cleaning up temp file
136
- }
137
- if (retries < this.maxRetries) {
138
- // Exponential backoff
139
- await new Promise((resolve) => setTimeout(resolve, Math.pow(2, retries) * 100));
140
- }
141
- }
142
- }
143
- return false;
144
- }
145
- /**
146
- * Load single session from disk
147
- */
148
- async loadSession(sessionId) {
149
- const filename = `${sessionId}.json`;
150
- const filepath = path.join(this.directory, filename);
151
- try {
152
- const data = await fs.readFile(filepath, "utf8");
153
- return this.deserializeSession(data);
154
- }
155
- catch (error) {
156
- if (error.code !== "ENOENT") {
157
- console.error(`[SessionPersistence] Failed to load session ${sessionId}:`, error);
158
- }
159
- return null;
160
- }
161
- }
162
- /**
163
- * Load all sessions from disk on startup
164
- */
165
- async loadSessions() {
166
- try {
167
- const files = await fs.readdir(this.directory);
168
- const sessionFiles = files.filter((f) => f.endsWith(".json"));
169
- let loaded = 0;
170
- let expired = 0;
171
- for (const file of sessionFiles) {
172
- const sessionId = file.replace(".json", "");
173
- const session = await this.loadSession(sessionId);
174
- if (session) {
175
- // Check if session is expired
176
- if (session.expiresAt < Date.now()) {
177
- expired++;
178
- // Clean up expired session file
179
- await this.deleteSession(sessionId);
180
- }
181
- else {
182
- // Restore to memory
183
- this.sessionMap.set(sessionId, session);
184
- loaded++;
185
- }
186
- }
187
- }
188
- console.log(`[SessionPersistence] Loaded ${loaded} sessions, cleaned ${expired} expired sessions`);
189
- }
190
- catch (error) {
191
- console.error("[SessionPersistence] Failed to load sessions:", error);
192
- }
193
- }
194
- /**
195
- * Save all active sessions (snapshot)
196
- */
197
- async saveAllSessions() {
198
- const sessions = Array.from(this.sessionMap.entries());
199
- // Filter out expired sessions and create save promises
200
- const savePromises = sessions
201
- .filter(([_, session]) => session.expiresAt >= Date.now())
202
- .map(async ([sessionId, session]) => {
203
- return (await this.saveSession(sessionId, session)) ? 1 : 0;
204
- });
205
- // Execute all save operations concurrently
206
- const results = await Promise.all(savePromises);
207
- const saved = results.reduce((sum, result) => sum + result, 0);
208
- if (process.env.NEUROLINK_DEBUG === "true") {
209
- console.log(`[SessionPersistence] Snapshot: saved ${saved}/${sessions.length} sessions`);
210
- }
211
- }
212
- /**
213
- * Delete session file
214
- */
215
- async deleteSession(sessionId) {
216
- const filename = `${sessionId}.json`;
217
- const filepath = path.join(this.directory, filename);
218
- try {
219
- await fs.unlink(filepath);
220
- // Keep memory and disk state in sync
221
- this.sessionMap.delete(sessionId);
222
- }
223
- catch (error) {
224
- if (error.code !== "ENOENT") {
225
- console.error(`[SessionPersistence] Failed to delete session ${sessionId}:`, error);
226
- }
227
- }
228
- }
229
- /**
230
- * Clean up old session files
231
- */
232
- async cleanupOldSessions() {
233
- try {
234
- const files = await fs.readdir(this.directory);
235
- const now = Date.now();
236
- let cleaned = 0;
237
- for (const file of files) {
238
- if (!file.endsWith(".json")) {
239
- continue;
240
- }
241
- const filepath = path.join(this.directory, file);
242
- const stats = await fs.stat(filepath);
243
- // Remove files older than retention period
244
- if (now - stats.mtimeMs > this.retentionPeriod) {
245
- await fs.unlink(filepath);
246
- cleaned++;
247
- }
248
- }
249
- if (cleaned > 0) {
250
- console.log(`[SessionPersistence] Cleaned up ${cleaned} old session files`);
251
- }
252
- }
253
- catch (error) {
254
- console.error("[SessionPersistence] Cleanup failed:", error);
255
- }
256
- }
257
- /**
258
- * Start periodic snapshot timer
259
- */
260
- startSnapshotTimer() {
261
- if (this.snapshotTimer) {
262
- clearInterval(this.snapshotTimer);
263
- }
264
- this.snapshotTimer = setInterval(async () => {
265
- await this.saveAllSessions();
266
- await this.cleanupOldSessions();
267
- }, this.snapshotInterval);
268
- }
269
- /**
270
- * Stop snapshot timer
271
- */
272
- stopSnapshotTimer() {
273
- if (this.snapshotTimer) {
274
- clearInterval(this.snapshotTimer);
275
- this.snapshotTimer = null;
276
- }
277
- }
278
- /**
279
- * Shutdown persistence layer
280
- */
281
- async shutdown() {
282
- this.stopSnapshotTimer();
283
- // Final snapshot before shutdown
284
- await this.saveAllSessions();
285
- console.log("[SessionPersistence] Shutdown complete");
286
- }
287
- }
288
- /**
289
- * Default session persistence instance
290
- */
291
- export let defaultSessionPersistence = null;
292
- /**
293
- * Initialize default session persistence
294
- */
295
- export async function initializeSessionPersistence(sessionMap, options) {
296
- if (!defaultSessionPersistence) {
297
- defaultSessionPersistence = new SessionPersistence(sessionMap, options);
298
- await defaultSessionPersistence.initialize();
299
- }
300
- return defaultSessionPersistence;
301
- }
@@ -1,58 +0,0 @@
1
- /**
2
- * MCP Tool Integration Layer
3
- * Connects MCP tools to NeuroLink AI providers following Lighthouse patterns
4
- */
5
- import type { Unknown } from "../types/common.js";
6
- import type { NeuroLinkExecutionContext, ToolResult } from "./factory.js";
7
- /**
8
- * Tool Integration System
9
- * Provides natural language tool discovery and execution
10
- */
11
- export declare class MCPToolIntegration {
12
- private registry;
13
- private context;
14
- constructor(context?: Partial<NeuroLinkExecutionContext>);
15
- /**
16
- * Initialize tools from all active servers
17
- */
18
- private initializeTools;
19
- /**
20
- * Get all available tools
21
- */
22
- getAvailableTools(): Promise<import("./tool-registry.js").ToolInfo[]>;
23
- /**
24
- * Find tools that match a query
25
- */
26
- findTools(query: string): Promise<Array<{
27
- name: string;
28
- description: string;
29
- serverId: string;
30
- relevance: number;
31
- }>>;
32
- /**
33
- * Execute a tool by name
34
- */
35
- executeTool(toolName: string, params: Unknown, serverId?: string): Promise<ToolResult>;
36
- /**
37
- * Enhance AI prompt with tool context
38
- */
39
- createToolAwarePrompt(userPrompt: string): Promise<string>;
40
- /**
41
- * Analyze AI response for tool usage requests
42
- */
43
- analyzeForToolUsage(aiResponse: string): Array<{
44
- toolName: string;
45
- params: Unknown;
46
- confidence: number;
47
- }>;
48
- /**
49
- * Update context for tool execution
50
- */
51
- updateContext(updates: Partial<NeuroLinkExecutionContext>): void;
52
- }
53
- export declare function getToolIntegration(context?: Partial<NeuroLinkExecutionContext>): MCPToolIntegration;
54
- /**
55
- * Initialize MCP tools for a session
56
- * Following Lighthouse's initialization pattern
57
- */
58
- export declare function initializeMCPTools(sessionId: string, context?: Partial<NeuroLinkExecutionContext>): Promise<MCPToolIntegration>;
@@ -1,203 +0,0 @@
1
- /**
2
- * MCP Tool Integration Layer
3
- * Connects MCP tools to NeuroLink AI providers following Lighthouse patterns
4
- */
5
- import { mcpConfig } from "./config.js";
6
- import { logger } from "../utils/logger.js";
7
- import { MCPToolRegistry } from "./tool-registry.js";
8
- /**
9
- * Tool Integration System
10
- * Provides natural language tool discovery and execution
11
- */
12
- export class MCPToolIntegration {
13
- registry;
14
- context;
15
- constructor(context) {
16
- this.registry = new MCPToolRegistry();
17
- this.context = {
18
- sessionId: context?.sessionId || `session-${Date.now()}`,
19
- userId: context?.userId || "anonymous",
20
- aiProvider: context?.aiProvider || "unknown",
21
- ...context,
22
- // Ensure secureFS is properly typed
23
- secureFS: context?.secureFS || {
24
- readFile: async () => {
25
- throw new Error("secureFS not configured");
26
- },
27
- writeFile: async () => {
28
- throw new Error("secureFS not configured");
29
- },
30
- readdir: async () => {
31
- throw new Error("secureFS not configured");
32
- },
33
- stat: async () => {
34
- throw new Error("secureFS not configured");
35
- },
36
- mkdir: async () => {
37
- throw new Error("secureFS not configured");
38
- },
39
- exists: async () => false,
40
- rmdir: async () => {
41
- throw new Error("secureFS not configured");
42
- },
43
- unlink: async () => {
44
- throw new Error("secureFS not configured");
45
- },
46
- },
47
- };
48
- // Initialize with all active servers
49
- this.initializeTools();
50
- }
51
- /**
52
- * Initialize tools from all active servers
53
- */
54
- async initializeTools() {
55
- const servers = await mcpConfig.getServers();
56
- for (const server of servers) {
57
- await this.registry.registerServer(server.id ||
58
- server.name ||
59
- "unknown", server);
60
- }
61
- const tools = await this.registry.listTools();
62
- logger.debug("[Tool Integration] Initialized with servers:", {
63
- serverCount: servers.length,
64
- toolCount: tools.length,
65
- });
66
- }
67
- /**
68
- * Get all available tools
69
- */
70
- getAvailableTools() {
71
- return this.registry.listTools();
72
- }
73
- /**
74
- * Find tools that match a query
75
- */
76
- async findTools(query) {
77
- const allTools = await this.registry.listTools();
78
- const queryLower = query.toLowerCase();
79
- const results = [];
80
- for (const toolInfo of allTools) {
81
- let relevance = 0;
82
- // Check tool name
83
- if (toolInfo.name.toLowerCase().includes(queryLower)) {
84
- relevance += 10;
85
- }
86
- // Check tool description
87
- if (toolInfo.description?.toLowerCase().includes(queryLower)) {
88
- relevance += 5;
89
- }
90
- // Check category if present (category might not exist on ToolInfo)
91
- // if (toolInfo.category?.toLowerCase().includes(queryLower)) {
92
- // relevance += 3;
93
- // }
94
- if (relevance > 0) {
95
- results.push({
96
- name: toolInfo.name,
97
- description: toolInfo.description || "No description available",
98
- serverId: toolInfo.serverId || "unknown",
99
- relevance,
100
- });
101
- }
102
- }
103
- // Sort by relevance
104
- return results.sort((a, b) => b.relevance - a.relevance);
105
- }
106
- /**
107
- * Execute a tool by name
108
- */
109
- async executeTool(toolName, params, serverId) {
110
- try {
111
- // If serverId is provided, use qualified name
112
- const qualifiedName = serverId ? `${serverId}.${toolName}` : toolName;
113
- const result = await this.registry.executeTool(qualifiedName, params, this.context);
114
- return result;
115
- }
116
- catch (error) {
117
- logger.error("[Tool Integration] Tool execution failed:", error);
118
- return {
119
- success: false,
120
- error: error instanceof Error ? error.message : String(error),
121
- metadata: {
122
- toolName,
123
- serverId,
124
- timestamp: Date.now(),
125
- },
126
- };
127
- }
128
- }
129
- /**
130
- * Enhance AI prompt with tool context
131
- */
132
- async createToolAwarePrompt(userPrompt) {
133
- const tools = await this.getAvailableTools();
134
- const toolDescriptions = tools
135
- .map((t) => `- ${t.name}: ${t.description}`)
136
- .join("\n");
137
- return `${userPrompt}
138
-
139
- Available tools:
140
- ${toolDescriptions}
141
-
142
- You can use these tools to provide more accurate and real-time information.`;
143
- }
144
- /**
145
- * Analyze AI response for tool usage requests
146
- */
147
- analyzeForToolUsage(aiResponse) {
148
- const toolRequests = [];
149
- // Simple pattern matching for tool requests
150
- // This can be enhanced with more sophisticated NLP
151
- const toolPattern = /<tool[^>]*>([^<]+)<\/tool>/g;
152
- let match;
153
- while ((match = toolPattern.exec(aiResponse)) !== null) {
154
- try {
155
- const toolData = JSON.parse(match[1]);
156
- toolRequests.push({
157
- toolName: toolData.name,
158
- params: toolData.params || {},
159
- confidence: 1.0,
160
- });
161
- }
162
- catch (error) {
163
- logger.warn("[Tool Integration] Failed to parse tool request:", match[1]);
164
- }
165
- }
166
- return toolRequests;
167
- }
168
- /**
169
- * Update context for tool execution
170
- */
171
- updateContext(updates) {
172
- this.context = {
173
- ...this.context,
174
- ...updates,
175
- };
176
- }
177
- }
178
- /**
179
- * Create a global tool integration instance
180
- * This can be initialized once and reused
181
- */
182
- let globalToolIntegration = null;
183
- export function getToolIntegration(context) {
184
- if (!globalToolIntegration) {
185
- globalToolIntegration = new MCPToolIntegration(context);
186
- }
187
- else if (context) {
188
- globalToolIntegration.updateContext(context);
189
- }
190
- return globalToolIntegration;
191
- }
192
- /**
193
- * Initialize MCP tools for a session
194
- * Following Lighthouse's initialization pattern
195
- */
196
- export async function initializeMCPTools(sessionId, context) {
197
- const integration = getToolIntegration({
198
- sessionId,
199
- ...context,
200
- });
201
- logger.debug("[Tool Integration] MCP tools initialized for session:", sessionId);
202
- return integration;
203
- }