@juspay/neurolink 3.0.0 → 4.0.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 (192) hide show
  1. package/CHANGELOG.md +62 -4
  2. package/README.md +235 -2
  3. package/dist/agent/direct-tools.d.ts +6 -6
  4. package/dist/chat/client-utils.d.ts +92 -0
  5. package/dist/chat/client-utils.js +298 -0
  6. package/dist/chat/index.d.ts +27 -0
  7. package/dist/chat/index.js +41 -0
  8. package/dist/chat/session-storage.d.ts +77 -0
  9. package/dist/chat/session-storage.js +233 -0
  10. package/dist/chat/session.d.ts +95 -0
  11. package/dist/chat/session.js +257 -0
  12. package/dist/chat/sse-handler.d.ts +49 -0
  13. package/dist/chat/sse-handler.js +266 -0
  14. package/dist/chat/types.d.ts +73 -0
  15. package/dist/chat/types.js +5 -0
  16. package/dist/chat/websocket-chat-handler.d.ts +36 -0
  17. package/dist/chat/websocket-chat-handler.js +262 -0
  18. package/dist/cli/commands/config.js +12 -12
  19. package/dist/cli/commands/mcp.js +3 -4
  20. package/dist/cli/index.d.ts +0 -7
  21. package/dist/cli/index.js +256 -27
  22. package/dist/config/configManager.d.ts +60 -0
  23. package/dist/config/configManager.js +300 -0
  24. package/dist/config/types.d.ts +136 -0
  25. package/dist/config/types.js +43 -0
  26. package/dist/core/analytics.d.ts +23 -0
  27. package/dist/core/analytics.js +131 -0
  28. package/dist/core/constants.d.ts +41 -0
  29. package/dist/core/constants.js +50 -0
  30. package/dist/core/defaults.d.ts +18 -0
  31. package/dist/core/defaults.js +29 -0
  32. package/dist/core/evaluation-config.d.ts +29 -0
  33. package/dist/core/evaluation-config.js +144 -0
  34. package/dist/core/evaluation-providers.d.ts +30 -0
  35. package/dist/core/evaluation-providers.js +187 -0
  36. package/dist/core/evaluation.d.ts +117 -0
  37. package/dist/core/evaluation.js +528 -0
  38. package/dist/core/factory.js +33 -25
  39. package/dist/core/types.d.ts +165 -6
  40. package/dist/core/types.js +3 -4
  41. package/dist/index.d.ts +9 -4
  42. package/dist/index.js +25 -4
  43. package/dist/lib/agent/direct-tools.d.ts +6 -6
  44. package/dist/lib/chat/client-utils.d.ts +92 -0
  45. package/dist/lib/chat/client-utils.js +298 -0
  46. package/dist/lib/chat/index.d.ts +27 -0
  47. package/dist/lib/chat/index.js +41 -0
  48. package/dist/lib/chat/session-storage.d.ts +77 -0
  49. package/dist/lib/chat/session-storage.js +233 -0
  50. package/dist/lib/chat/session.d.ts +95 -0
  51. package/dist/lib/chat/session.js +257 -0
  52. package/dist/lib/chat/sse-handler.d.ts +49 -0
  53. package/dist/lib/chat/sse-handler.js +266 -0
  54. package/dist/lib/chat/types.d.ts +73 -0
  55. package/dist/lib/chat/types.js +5 -0
  56. package/dist/lib/chat/websocket-chat-handler.d.ts +36 -0
  57. package/dist/lib/chat/websocket-chat-handler.js +262 -0
  58. package/dist/lib/config/configManager.d.ts +60 -0
  59. package/dist/lib/config/configManager.js +300 -0
  60. package/dist/lib/config/types.d.ts +136 -0
  61. package/dist/lib/config/types.js +43 -0
  62. package/dist/lib/core/analytics.d.ts +23 -0
  63. package/dist/lib/core/analytics.js +131 -0
  64. package/dist/lib/core/constants.d.ts +41 -0
  65. package/dist/lib/core/constants.js +50 -0
  66. package/dist/lib/core/defaults.d.ts +18 -0
  67. package/dist/lib/core/defaults.js +29 -0
  68. package/dist/lib/core/evaluation-config.d.ts +29 -0
  69. package/dist/lib/core/evaluation-config.js +144 -0
  70. package/dist/lib/core/evaluation-providers.d.ts +30 -0
  71. package/dist/lib/core/evaluation-providers.js +187 -0
  72. package/dist/lib/core/evaluation.d.ts +117 -0
  73. package/dist/lib/core/evaluation.js +528 -0
  74. package/dist/lib/core/factory.js +33 -26
  75. package/dist/lib/core/types.d.ts +165 -6
  76. package/dist/lib/core/types.js +3 -4
  77. package/dist/lib/index.d.ts +9 -4
  78. package/dist/lib/index.js +25 -4
  79. package/dist/lib/mcp/contracts/mcpContract.d.ts +118 -0
  80. package/dist/lib/mcp/contracts/mcpContract.js +5 -0
  81. package/dist/lib/mcp/function-calling.js +11 -3
  82. package/dist/lib/mcp/logging.js +5 -0
  83. package/dist/lib/mcp/neurolink-mcp-client.js +2 -1
  84. package/dist/lib/mcp/orchestrator.js +18 -9
  85. package/dist/lib/mcp/registry.d.ts +49 -16
  86. package/dist/lib/mcp/registry.js +80 -6
  87. package/dist/lib/mcp/servers/ai-providers/ai-workflow-tools.js +5 -4
  88. package/dist/lib/mcp/tool-integration.js +1 -1
  89. package/dist/lib/mcp/tool-registry.d.ts +55 -34
  90. package/dist/lib/mcp/tool-registry.js +111 -97
  91. package/dist/lib/mcp/unified-mcp.js +6 -1
  92. package/dist/lib/mcp/unified-registry.d.ts +12 -4
  93. package/dist/lib/mcp/unified-registry.js +17 -4
  94. package/dist/lib/neurolink.d.ts +28 -0
  95. package/dist/lib/neurolink.js +48 -4
  96. package/dist/lib/providers/agent-enhanced-provider.d.ts +11 -2
  97. package/dist/lib/providers/agent-enhanced-provider.js +86 -15
  98. package/dist/lib/providers/amazonBedrock.d.ts +9 -1
  99. package/dist/lib/providers/amazonBedrock.js +26 -2
  100. package/dist/lib/providers/analytics-helper.d.ts +53 -0
  101. package/dist/lib/providers/analytics-helper.js +151 -0
  102. package/dist/lib/providers/anthropic.d.ts +11 -1
  103. package/dist/lib/providers/anthropic.js +29 -4
  104. package/dist/lib/providers/azureOpenAI.d.ts +3 -1
  105. package/dist/lib/providers/azureOpenAI.js +28 -4
  106. package/dist/lib/providers/function-calling-provider.d.ts +9 -1
  107. package/dist/lib/providers/function-calling-provider.js +14 -1
  108. package/dist/lib/providers/googleAIStudio.d.ts +15 -1
  109. package/dist/lib/providers/googleAIStudio.js +32 -2
  110. package/dist/lib/providers/googleVertexAI.d.ts +9 -1
  111. package/dist/lib/providers/googleVertexAI.js +31 -2
  112. package/dist/lib/providers/huggingFace.d.ts +3 -1
  113. package/dist/lib/providers/huggingFace.js +26 -3
  114. package/dist/lib/providers/mcp-provider.d.ts +9 -1
  115. package/dist/lib/providers/mcp-provider.js +12 -0
  116. package/dist/lib/providers/mistralAI.d.ts +3 -1
  117. package/dist/lib/providers/mistralAI.js +25 -2
  118. package/dist/lib/providers/ollama.d.ts +3 -1
  119. package/dist/lib/providers/ollama.js +27 -4
  120. package/dist/lib/providers/openAI.d.ts +15 -1
  121. package/dist/lib/providers/openAI.js +32 -2
  122. package/dist/lib/proxy/proxy-fetch.js +8 -7
  123. package/dist/lib/services/streaming/streaming-manager.d.ts +29 -0
  124. package/dist/lib/services/streaming/streaming-manager.js +244 -0
  125. package/dist/lib/services/types.d.ts +155 -0
  126. package/dist/lib/services/types.js +2 -0
  127. package/dist/lib/services/websocket/websocket-server.d.ts +34 -0
  128. package/dist/lib/services/websocket/websocket-server.js +304 -0
  129. package/dist/lib/telemetry/index.d.ts +15 -0
  130. package/dist/lib/telemetry/index.js +22 -0
  131. package/dist/lib/telemetry/telemetry-service.d.ts +47 -0
  132. package/dist/lib/telemetry/telemetry-service.js +259 -0
  133. package/dist/lib/utils/streaming-utils.d.ts +67 -0
  134. package/dist/lib/utils/streaming-utils.js +201 -0
  135. package/dist/mcp/contracts/mcpContract.d.ts +118 -0
  136. package/dist/mcp/contracts/mcpContract.js +5 -0
  137. package/dist/mcp/function-calling.js +11 -3
  138. package/dist/mcp/logging.js +5 -0
  139. package/dist/mcp/neurolink-mcp-client.js +2 -1
  140. package/dist/mcp/orchestrator.js +18 -9
  141. package/dist/mcp/registry.d.ts +49 -16
  142. package/dist/mcp/registry.js +80 -6
  143. package/dist/mcp/servers/ai-providers/ai-workflow-tools.d.ts +2 -2
  144. package/dist/mcp/servers/ai-providers/ai-workflow-tools.js +5 -4
  145. package/dist/mcp/tool-integration.js +1 -1
  146. package/dist/mcp/tool-registry.d.ts +55 -34
  147. package/dist/mcp/tool-registry.js +111 -97
  148. package/dist/mcp/unified-mcp.js +6 -1
  149. package/dist/mcp/unified-registry.d.ts +12 -4
  150. package/dist/mcp/unified-registry.js +17 -4
  151. package/dist/neurolink.d.ts +28 -0
  152. package/dist/neurolink.js +48 -4
  153. package/dist/providers/agent-enhanced-provider.d.ts +11 -2
  154. package/dist/providers/agent-enhanced-provider.js +86 -15
  155. package/dist/providers/amazonBedrock.d.ts +9 -1
  156. package/dist/providers/amazonBedrock.js +26 -2
  157. package/dist/providers/analytics-helper.d.ts +53 -0
  158. package/dist/providers/analytics-helper.js +151 -0
  159. package/dist/providers/anthropic.d.ts +11 -1
  160. package/dist/providers/anthropic.js +29 -4
  161. package/dist/providers/azureOpenAI.d.ts +3 -1
  162. package/dist/providers/azureOpenAI.js +29 -4
  163. package/dist/providers/function-calling-provider.d.ts +9 -1
  164. package/dist/providers/function-calling-provider.js +14 -1
  165. package/dist/providers/googleAIStudio.d.ts +15 -1
  166. package/dist/providers/googleAIStudio.js +32 -2
  167. package/dist/providers/googleVertexAI.d.ts +9 -1
  168. package/dist/providers/googleVertexAI.js +31 -2
  169. package/dist/providers/huggingFace.d.ts +3 -1
  170. package/dist/providers/huggingFace.js +26 -3
  171. package/dist/providers/mcp-provider.d.ts +9 -1
  172. package/dist/providers/mcp-provider.js +12 -0
  173. package/dist/providers/mistralAI.d.ts +3 -1
  174. package/dist/providers/mistralAI.js +25 -2
  175. package/dist/providers/ollama.d.ts +3 -1
  176. package/dist/providers/ollama.js +27 -4
  177. package/dist/providers/openAI.d.ts +15 -1
  178. package/dist/providers/openAI.js +33 -2
  179. package/dist/proxy/proxy-fetch.js +8 -7
  180. package/dist/services/streaming/streaming-manager.d.ts +29 -0
  181. package/dist/services/streaming/streaming-manager.js +244 -0
  182. package/dist/services/types.d.ts +155 -0
  183. package/dist/services/types.js +2 -0
  184. package/dist/services/websocket/websocket-server.d.ts +34 -0
  185. package/dist/services/websocket/websocket-server.js +304 -0
  186. package/dist/telemetry/index.d.ts +15 -0
  187. package/dist/telemetry/index.js +22 -0
  188. package/dist/telemetry/telemetry-service.d.ts +47 -0
  189. package/dist/telemetry/telemetry-service.js +261 -0
  190. package/dist/utils/streaming-utils.d.ts +67 -0
  191. package/dist/utils/streaming-utils.js +201 -0
  192. package/package.json +18 -2
@@ -0,0 +1,67 @@
1
+ /**
2
+ * Phase 2: Enhanced Streaming Infrastructure
3
+ * Streaming utilities for progress tracking and metadata enhancement
4
+ */
5
+ import type { StreamingProgressData, StreamingMetadata, ProgressCallback, EnhancedStreamTextOptions } from "../core/types.js";
6
+ export interface UIProgressHandler {
7
+ onProgress: (progress: StreamingProgressData) => void;
8
+ onComplete: (metadata: StreamingMetadata) => void;
9
+ onError: (error: Error) => void;
10
+ }
11
+ export interface StreamingStats {
12
+ totalChunks: number;
13
+ totalBytes: number;
14
+ duration: number;
15
+ averageChunkSize: number;
16
+ provider: string;
17
+ model: string;
18
+ }
19
+ /**
20
+ * Enhanced streaming utilities for progress tracking and metadata
21
+ */
22
+ export declare class StreamingEnhancer {
23
+ /**
24
+ * Add progress tracking to a readable stream
25
+ */
26
+ static addProgressTracking(stream: ReadableStream, callback?: ProgressCallback, options?: {
27
+ streamId?: string;
28
+ bufferSize?: number;
29
+ }): ReadableStream;
30
+ /**
31
+ * Add metadata headers to streaming response
32
+ */
33
+ static addMetadataHeaders(response: Response, stats: StreamingStats): Response;
34
+ /**
35
+ * Create progress callback for UI integration
36
+ */
37
+ static createProgressCallback(ui: UIProgressHandler): ProgressCallback;
38
+ /**
39
+ * Estimate remaining time based on current progress
40
+ */
41
+ static estimateRemainingTime(totalBytes: number, elapsedTime: number, chunkCount: number): number | undefined;
42
+ /**
43
+ * Create enhanced streaming configuration
44
+ */
45
+ static createStreamingConfig(options: EnhancedStreamTextOptions): {
46
+ progressTracking: boolean;
47
+ callback?: ProgressCallback;
48
+ metadata: boolean;
49
+ bufferSize: number;
50
+ headers: boolean;
51
+ };
52
+ }
53
+ /**
54
+ * Streaming performance monitor for debugging and optimization
55
+ */
56
+ export declare class StreamingMonitor {
57
+ private static activeStreams;
58
+ static registerStream(streamId: string): void;
59
+ static updateStream(streamId: string, progress: StreamingProgressData): void;
60
+ static completeStream(streamId: string): void;
61
+ static getActiveStreams(): StreamingProgressData[];
62
+ static getStreamStats(): {
63
+ activeCount: number;
64
+ totalBytesActive: number;
65
+ averageProgress: number;
66
+ };
67
+ }
@@ -0,0 +1,201 @@
1
+ /**
2
+ * Phase 2: Enhanced Streaming Infrastructure
3
+ * Streaming utilities for progress tracking and metadata enhancement
4
+ */
5
+ /**
6
+ * Enhanced streaming utilities for progress tracking and metadata
7
+ */
8
+ export class StreamingEnhancer {
9
+ /**
10
+ * Add progress tracking to a readable stream
11
+ */
12
+ static addProgressTracking(stream, callback, options) {
13
+ const streamId = options?.streamId || `stream_${Date.now()}`;
14
+ const startTime = Date.now();
15
+ let chunkCount = 0;
16
+ let totalBytes = 0;
17
+ let lastProgressTime = startTime;
18
+ return new ReadableStream({
19
+ start(controller) {
20
+ if (callback) {
21
+ callback({
22
+ chunkCount: 0,
23
+ totalBytes: 0,
24
+ chunkSize: 0,
25
+ elapsedTime: 0,
26
+ streamId,
27
+ phase: "initializing",
28
+ });
29
+ }
30
+ },
31
+ async pull(controller) {
32
+ const reader = stream.getReader();
33
+ try {
34
+ const { done, value } = await reader.read();
35
+ if (done) {
36
+ controller.close();
37
+ if (callback) {
38
+ const elapsedTime = Date.now() - startTime;
39
+ callback({
40
+ chunkCount,
41
+ totalBytes,
42
+ chunkSize: totalBytes > 0 ? Math.round(totalBytes / chunkCount) : 0,
43
+ elapsedTime,
44
+ streamId,
45
+ phase: "complete",
46
+ });
47
+ }
48
+ return;
49
+ }
50
+ // Track progress
51
+ chunkCount++;
52
+ const chunkSize = value
53
+ ? new TextEncoder().encode(value.toString()).length
54
+ : 0;
55
+ totalBytes += chunkSize;
56
+ const currentTime = Date.now();
57
+ const elapsedTime = currentTime - startTime;
58
+ const timeSinceLastProgress = currentTime - lastProgressTime;
59
+ // Call progress callback
60
+ if (callback && (timeSinceLastProgress > 100 || chunkCount === 1)) {
61
+ // Throttle to max 10 calls/second
62
+ const estimatedRemaining = StreamingEnhancer.estimateRemainingTime(totalBytes, elapsedTime, chunkCount);
63
+ callback({
64
+ chunkCount,
65
+ totalBytes,
66
+ chunkSize,
67
+ elapsedTime,
68
+ estimatedRemaining,
69
+ streamId,
70
+ phase: "streaming",
71
+ });
72
+ lastProgressTime = currentTime;
73
+ }
74
+ controller.enqueue(value);
75
+ }
76
+ catch (error) {
77
+ controller.error(error);
78
+ if (callback) {
79
+ callback({
80
+ chunkCount,
81
+ totalBytes,
82
+ chunkSize: 0,
83
+ elapsedTime: Date.now() - startTime,
84
+ streamId,
85
+ phase: "error",
86
+ });
87
+ }
88
+ }
89
+ finally {
90
+ reader.releaseLock();
91
+ }
92
+ },
93
+ });
94
+ }
95
+ /**
96
+ * Add metadata headers to streaming response
97
+ */
98
+ static addMetadataHeaders(response, stats) {
99
+ const headers = new Headers(response.headers);
100
+ headers.set("X-Streaming-Chunks", stats.totalChunks.toString());
101
+ headers.set("X-Streaming-Bytes", stats.totalBytes.toString());
102
+ headers.set("X-Streaming-Duration", stats.duration.toString());
103
+ headers.set("X-Streaming-Avg-Chunk-Size", stats.averageChunkSize.toString());
104
+ headers.set("X-Streaming-Provider", stats.provider);
105
+ headers.set("X-Streaming-Model", stats.model);
106
+ headers.set("X-Streaming-Throughput", Math.round(stats.totalBytes / (stats.duration / 1000)).toString());
107
+ return new Response(response.body, {
108
+ status: response.status,
109
+ statusText: response.statusText,
110
+ headers,
111
+ });
112
+ }
113
+ /**
114
+ * Create progress callback for UI integration
115
+ */
116
+ static createProgressCallback(ui) {
117
+ return (progress) => {
118
+ try {
119
+ ui.onProgress(progress);
120
+ if (progress.phase === "complete") {
121
+ ui.onComplete({
122
+ startTime: Date.now() - progress.elapsedTime,
123
+ endTime: Date.now(),
124
+ totalDuration: progress.elapsedTime,
125
+ averageChunkSize: Math.round(progress.totalBytes / progress.chunkCount),
126
+ maxChunkSize: progress.chunkSize, // This would need to be tracked better in real implementation
127
+ minChunkSize: progress.chunkSize, // This would need to be tracked better in real implementation
128
+ throughputBytesPerSecond: Math.round(progress.totalBytes / (progress.elapsedTime / 1000)),
129
+ streamingProvider: "unknown", // Would be passed from provider
130
+ modelUsed: "unknown", // Would be passed from provider
131
+ });
132
+ }
133
+ }
134
+ catch (error) {
135
+ ui.onError(error);
136
+ }
137
+ };
138
+ }
139
+ /**
140
+ * Estimate remaining time based on current progress
141
+ */
142
+ static estimateRemainingTime(totalBytes, elapsedTime, chunkCount) {
143
+ if (elapsedTime < 1000 || chunkCount < 3) {
144
+ return undefined; // Not enough data for estimation
145
+ }
146
+ const bytesPerMs = totalBytes / elapsedTime;
147
+ const avgChunkSize = totalBytes / chunkCount;
148
+ // Rough estimation assuming similar chunk sizes going forward
149
+ // This is a simple heuristic - real implementation might be more sophisticated
150
+ const estimatedTotalBytes = avgChunkSize * (chunkCount + 10); // Assume 10 more chunks
151
+ const remainingBytes = estimatedTotalBytes - totalBytes;
152
+ return Math.max(0, remainingBytes / bytesPerMs);
153
+ }
154
+ /**
155
+ * Create enhanced streaming configuration
156
+ */
157
+ static createStreamingConfig(options) {
158
+ return {
159
+ progressTracking: options.enableProgressTracking ?? false,
160
+ callback: options.progressCallback,
161
+ metadata: options.includeStreamingMetadata ?? false,
162
+ bufferSize: options.streamingBufferSize ?? 8192,
163
+ headers: options.enableStreamingHeaders ?? false,
164
+ };
165
+ }
166
+ }
167
+ /**
168
+ * Streaming performance monitor for debugging and optimization
169
+ */
170
+ export class StreamingMonitor {
171
+ static activeStreams = new Map();
172
+ static registerStream(streamId) {
173
+ this.activeStreams.set(streamId, {
174
+ chunkCount: 0,
175
+ totalBytes: 0,
176
+ chunkSize: 0,
177
+ elapsedTime: 0,
178
+ streamId,
179
+ phase: "initializing",
180
+ });
181
+ }
182
+ static updateStream(streamId, progress) {
183
+ this.activeStreams.set(streamId, progress);
184
+ }
185
+ static completeStream(streamId) {
186
+ this.activeStreams.delete(streamId);
187
+ }
188
+ static getActiveStreams() {
189
+ return Array.from(this.activeStreams.values());
190
+ }
191
+ static getStreamStats() {
192
+ const streams = this.getActiveStreams();
193
+ return {
194
+ activeCount: streams.length,
195
+ totalBytesActive: streams.reduce((sum, s) => sum + s.totalBytes, 0),
196
+ averageProgress: streams.length > 0
197
+ ? streams.reduce((sum, s) => sum + s.elapsedTime, 0) / streams.length
198
+ : 0,
199
+ };
200
+ }
201
+ }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@juspay/neurolink",
3
- "version": "3.0.0",
3
+ "version": "4.0.0",
4
4
  "description": "Universal AI Development Platform with working MCP integration, multi-provider support, and professional CLI. Built-in tools operational, 58+ external MCP servers discoverable. Connect to filesystem, GitHub, database operations, and more. Build, test, and deploy AI applications with 9 major providers: OpenAI, Anthropic, Google AI, AWS Bedrock, Azure, Hugging Face, Ollama, and Mistral AI.",
5
5
  "author": {
6
6
  "name": "Juspay Technologies",
@@ -132,16 +132,32 @@
132
132
  "@google/generative-ai": "^0.24.1",
133
133
  "@huggingface/inference": "^2.8.0",
134
134
  "@modelcontextprotocol/sdk": "^1.13.0",
135
+ "@opentelemetry/api": "^1.9.0",
136
+ "@opentelemetry/auto-instrumentations-node": "^0.52.1",
137
+ "@opentelemetry/exporter-logs-otlp-http": "^0.54.2",
138
+ "@opentelemetry/exporter-metrics-otlp-http": "^0.54.2",
139
+ "@opentelemetry/exporter-trace-otlp-http": "^0.54.2",
140
+ "@opentelemetry/instrumentation-fetch": "^0.54.2",
141
+ "@opentelemetry/instrumentation-http": "^0.54.2",
142
+ "@opentelemetry/propagator-b3": "^1.30.1",
143
+ "@opentelemetry/resource-detector-aws": "^1.12.0",
144
+ "@opentelemetry/resources": "^1.30.1",
145
+ "@opentelemetry/sdk-logs": "^0.54.2",
146
+ "@opentelemetry/sdk-metrics": "^1.30.1",
147
+ "@opentelemetry/sdk-node": "^0.54.2",
148
+ "@opentelemetry/semantic-conventions": "^1.34.0",
149
+ "@types/ws": "^8.18.1",
135
150
  "ai": "^4.0.0",
136
151
  "chalk": "^5.3.0",
137
152
  "cors": "^2.8.5",
138
153
  "dotenv": "^16.5.0",
139
154
  "express": "^5.1.0",
140
155
  "inquirer": "^9.2.15",
141
- "undici": "^6.6.2",
142
156
  "ora": "^7.0.1",
143
157
  "playwright": "^1.52.0",
158
+ "undici": "^6.6.2",
144
159
  "uuid": "^11.1.0",
160
+ "ws": "^8.18.3",
145
161
  "yargs": "^17.7.2",
146
162
  "zod": "^3.22.0",
147
163
  "zod-to-json-schema": "^3.24.5"