claude-flow-novice 1.6.2 → 1.6.3

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 (32) hide show
  1. package/.claude/settings.json +4 -3
  2. package/.claude-flow-novice/dist/src/api/auth-service.js +84 -38
  3. package/.claude-flow-novice/dist/src/api/auth-service.js.map +1 -1
  4. package/.claude-flow-novice/dist/src/monitoring/apm/apm-integration.js +719 -0
  5. package/.claude-flow-novice/dist/src/monitoring/apm/apm-integration.js.map +1 -0
  6. package/.claude-flow-novice/dist/src/monitoring/apm/datadog-collector.js +363 -0
  7. package/.claude-flow-novice/dist/src/monitoring/apm/datadog-collector.js.map +1 -0
  8. package/.claude-flow-novice/dist/src/monitoring/apm/index.js +97 -0
  9. package/.claude-flow-novice/dist/src/monitoring/apm/index.js.map +1 -0
  10. package/.claude-flow-novice/dist/src/monitoring/apm/newrelic-collector.js +384 -0
  11. package/.claude-flow-novice/dist/src/monitoring/apm/newrelic-collector.js.map +1 -0
  12. package/.claude-flow-novice/dist/src/monitoring/apm/performance-optimizer.js +612 -0
  13. package/.claude-flow-novice/dist/src/monitoring/apm/performance-optimizer.js.map +1 -0
  14. package/.claude-flow-novice/dist/src/monitoring/metrics-collector.js +282 -0
  15. package/.claude-flow-novice/dist/src/monitoring/metrics-collector.js.map +1 -0
  16. package/.claude-flow-novice/dist/src/web/api/apm-routes.js +355 -0
  17. package/.claude-flow-novice/dist/src/web/api/apm-routes.js.map +1 -0
  18. package/.claude-flow-novice/dist/src/web/frontend/src/utils/security.js +425 -0
  19. package/.claude-flow-novice/dist/src/web/frontend/src/utils/security.js.map +1 -0
  20. package/.claude-flow-novice/dist/src/web/security/security-middleware.js +379 -0
  21. package/.claude-flow-novice/dist/src/web/security/security-middleware.js.map +1 -0
  22. package/.claude-flow-novice/dist/src/web/websocket/apm-websocket-handler.js +441 -0
  23. package/.claude-flow-novice/dist/src/web/websocket/apm-websocket-handler.js.map +1 -0
  24. package/.claude-flow-novice/dist/src/web/websocket/websocket-manager.js +255 -1
  25. package/.claude-flow-novice/dist/src/web/websocket/websocket-manager.js.map +1 -1
  26. package/AGENT_PERFORMANCE_GUIDELINES.md +88 -0
  27. package/CLAUDE.md +31 -3
  28. package/MEMORY_LEAK_ROOT_CAUSE.md +149 -0
  29. package/package.json +4 -2
  30. package/scripts/monitor-loop.sh +65 -0
  31. package/scripts/monitor-memory.sh +47 -0
  32. package/scripts/monitor.py +43 -0
@@ -0,0 +1,441 @@
1
+ /**
2
+ * WebSocket Handler for APM Integration
3
+ * Real-time APM metrics and alerts over WebSocket connections
4
+ */ export class APMWebSocketHandler {
5
+ io;
6
+ apmIntegration;
7
+ clients = new Map();
8
+ metricsInterval;
9
+ healthCheckInterval;
10
+ constructor(io, apmIntegration){
11
+ this.io = io;
12
+ this.apmIntegration = apmIntegration;
13
+ this.setupEventHandlers();
14
+ this.startRealTimeUpdates();
15
+ }
16
+ setupEventHandlers() {
17
+ this.io.on('connection', (socket)=>{
18
+ this.handleConnection(socket);
19
+ });
20
+ }
21
+ handleConnection(socket) {
22
+ const client = {
23
+ socketId: socket.id,
24
+ subscriptions: new Set(),
25
+ lastActivity: new Date(),
26
+ filters: {}
27
+ };
28
+ this.clients.set(socket.id, client);
29
+ // Setup client-specific event handlers
30
+ socket.on('subscribe', (data)=>this.handleSubscribe(socket, data));
31
+ socket.on('unsubscribe', (data)=>this.handleUnsubscribe(socket, data));
32
+ socket.on('set-filters', (filters)=>this.handleSetFilters(socket, filters));
33
+ socket.on('request-metrics', (data)=>this.handleRequestMetrics(socket, data));
34
+ socket.on('trace-agent', (data)=>this.handleTraceAgent(socket, data));
35
+ socket.on('trace-swarm', (data)=>this.handleTraceSwarm(socket, data));
36
+ socket.on('run-integration-test', ()=>this.handleRunIntegrationTest(socket));
37
+ socket.on('disconnect', ()=>this.handleDisconnection(socket.id));
38
+ socket.on('error', (error)=>this.handleError(socket, error));
39
+ // Send initial connection message
40
+ socket.emit('apm-connected', {
41
+ socketId: socket.id,
42
+ timestamp: new Date().toISOString(),
43
+ availableSubscriptions: [
44
+ 'health-status',
45
+ 'performance-metrics',
46
+ 'recommendations',
47
+ 'alerts',
48
+ 'slow-queries',
49
+ 'cache-performance'
50
+ ]
51
+ });
52
+ // Send initial data
53
+ this.sendInitialData(socket);
54
+ }
55
+ handleSubscribe(socket, data) {
56
+ const client = this.clients.get(socket.id);
57
+ if (!client) return;
58
+ const { subscriptions } = data;
59
+ if (!Array.isArray(subscriptions)) {
60
+ socket.emit('error', {
61
+ message: 'Invalid subscriptions format'
62
+ });
63
+ return;
64
+ }
65
+ const validSubscriptions = [
66
+ 'health-status',
67
+ 'performance-metrics',
68
+ 'recommendations',
69
+ 'alerts',
70
+ 'slow-queries',
71
+ 'cache-performance'
72
+ ];
73
+ subscriptions.forEach((sub)=>{
74
+ if (validSubscriptions.includes(sub)) {
75
+ client.subscriptions.add(sub);
76
+ }
77
+ });
78
+ client.lastActivity = new Date();
79
+ socket.emit('subscribed', {
80
+ subscriptions: Array.from(client.subscriptions),
81
+ timestamp: new Date().toISOString()
82
+ });
83
+ // Send current data for new subscriptions
84
+ this.sendSubscriptionData(socket, subscriptions);
85
+ }
86
+ handleUnsubscribe(socket, data) {
87
+ const client = this.clients.get(socket.id);
88
+ if (!client) return;
89
+ const { subscriptions } = data;
90
+ if (!Array.isArray(subscriptions)) {
91
+ socket.emit('error', {
92
+ message: 'Invalid subscriptions format'
93
+ });
94
+ return;
95
+ }
96
+ subscriptions.forEach((sub)=>{
97
+ client.subscriptions.delete(sub);
98
+ });
99
+ client.lastActivity = new Date();
100
+ socket.emit('unsubscribed', {
101
+ subscriptions: Array.from(client.subscriptions),
102
+ timestamp: new Date().toISOString()
103
+ });
104
+ }
105
+ handleSetFilters(socket, filters) {
106
+ const client = this.clients.get(socket.id);
107
+ if (!client) return;
108
+ client.filters = {
109
+ ...client.filters,
110
+ ...filters
111
+ };
112
+ client.lastActivity = new Date();
113
+ socket.emit('filters-updated', {
114
+ filters: client.filters,
115
+ timestamp: new Date().toISOString()
116
+ });
117
+ // Re-send data with new filters
118
+ this.sendSubscriptionData(socket, Array.from(client.subscriptions));
119
+ }
120
+ handleRequestMetrics(socket, data) {
121
+ const client = this.clients.get(socket.id);
122
+ if (!client) return;
123
+ client.lastActivity = new Date();
124
+ try {
125
+ const analytics = this.apmIntegration.getPerformanceAnalytics();
126
+ const timeRange = data.timeRange || '1h';
127
+ const type = data.type || 'overview';
128
+ let responseData = {
129
+ timeRange,
130
+ type,
131
+ timestamp: new Date().toISOString()
132
+ };
133
+ switch(type){
134
+ case 'overview':
135
+ responseData = {
136
+ ...responseData,
137
+ ...analytics
138
+ };
139
+ break;
140
+ case 'performance':
141
+ responseData.metrics = analytics.metrics;
142
+ break;
143
+ case 'recommendations':
144
+ responseData.recommendations = analytics.recommendations;
145
+ break;
146
+ case 'trends':
147
+ responseData.trends = analytics.trends;
148
+ break;
149
+ default:
150
+ responseData = {
151
+ ...responseData,
152
+ ...analytics
153
+ };
154
+ }
155
+ socket.emit('metrics-response', responseData);
156
+ } catch (error) {
157
+ socket.emit('error', {
158
+ message: 'Failed to fetch metrics',
159
+ error: error.message
160
+ });
161
+ }
162
+ }
163
+ handleTraceAgent(socket, data) {
164
+ const client = this.clients.get(socket.id);
165
+ if (!client) return;
166
+ client.lastActivity = new Date();
167
+ try {
168
+ this.apmIntegration.traceAgentLifecycle(data.agentType, data.lifecycleEvent, data.agentId, {
169
+ ...data.metadata,
170
+ source: 'websocket',
171
+ clientId: socket.id
172
+ });
173
+ socket.emit('trace-acknowledged', {
174
+ type: 'agent',
175
+ agentType: data.agentType,
176
+ lifecycleEvent: data.lifecycleEvent,
177
+ agentId: data.agentId,
178
+ timestamp: new Date().toISOString()
179
+ });
180
+ } catch (error) {
181
+ socket.emit('error', {
182
+ message: 'Failed to trace agent lifecycle',
183
+ error: error.message
184
+ });
185
+ }
186
+ }
187
+ handleTraceSwarm(socket, data) {
188
+ const client = this.clients.get(socket.id);
189
+ if (!client) return;
190
+ client.lastActivity = new Date();
191
+ try {
192
+ this.apmIntegration.traceSwarmActivity(data.swarmId, data.activity, data.topology, data.agentCount || 0, {
193
+ ...data.metadata,
194
+ source: 'websocket',
195
+ clientId: socket.id
196
+ });
197
+ socket.emit('trace-acknowledged', {
198
+ type: 'swarm',
199
+ swarmId: data.swarmId,
200
+ activity: data.activity,
201
+ topology: data.topology,
202
+ agentCount: data.agentCount,
203
+ timestamp: new Date().toISOString()
204
+ });
205
+ } catch (error) {
206
+ socket.emit('error', {
207
+ message: 'Failed to trace swarm activity',
208
+ error: error.message
209
+ });
210
+ }
211
+ }
212
+ async handleRunIntegrationTest(socket) {
213
+ const client = this.clients.get(socket.id);
214
+ if (!client) return;
215
+ client.lastActivity = new Date();
216
+ try {
217
+ socket.emit('integration-test-started', {
218
+ timestamp: new Date().toISOString()
219
+ });
220
+ const results = await this.apmIntegration.runIntegrationTest();
221
+ socket.emit('integration-test-completed', {
222
+ results,
223
+ timestamp: new Date().toISOString()
224
+ });
225
+ } catch (error) {
226
+ socket.emit('error', {
227
+ message: 'Integration test failed',
228
+ error: error.message
229
+ });
230
+ }
231
+ }
232
+ handleDisconnection(socketId) {
233
+ this.clients.delete(socketId);
234
+ }
235
+ handleError(socket, error) {
236
+ console.error('WebSocket error:', error);
237
+ const client = this.clients.get(socket.id);
238
+ if (client) {
239
+ client.lastActivity = new Date();
240
+ }
241
+ }
242
+ sendInitialData(socket) {
243
+ try {
244
+ // Send initial health status
245
+ this.apmIntegration.getHealthStatus().then((health)=>{
246
+ socket.emit('health-status-update', {
247
+ ...health,
248
+ timestamp: new Date().toISOString()
249
+ });
250
+ });
251
+ // Send initial performance metrics
252
+ const analytics = this.apmIntegration.getPerformanceAnalytics();
253
+ socket.emit('performance-metrics-update', {
254
+ ...analytics,
255
+ timestamp: new Date().toISOString()
256
+ });
257
+ } catch (error) {
258
+ console.error('Failed to send initial data:', error);
259
+ }
260
+ }
261
+ sendSubscriptionData(socket, subscriptions) {
262
+ const client = this.clients.get(socket.id);
263
+ if (!client) return;
264
+ subscriptions.forEach((subscription)=>{
265
+ switch(subscription){
266
+ case 'health-status':
267
+ this.apmIntegration.getHealthStatus().then((health)=>{
268
+ socket.emit('health-status-update', {
269
+ ...health,
270
+ timestamp: new Date().toISOString()
271
+ });
272
+ });
273
+ break;
274
+ case 'performance-metrics':
275
+ const analytics = this.apmIntegration.getPerformanceAnalytics();
276
+ socket.emit('performance-metrics-update', {
277
+ ...analytics,
278
+ timestamp: new Date().toISOString()
279
+ });
280
+ break;
281
+ case 'recommendations':
282
+ const recommendations = this.apmIntegration.getPerformanceAnalytics().recommendations;
283
+ socket.emit('recommendations-update', {
284
+ recommendations,
285
+ timestamp: new Date().toISOString()
286
+ });
287
+ break;
288
+ case 'slow-queries':
289
+ const collectors = this.apmIntegration.getCollectors();
290
+ if (collectors.performanceOptimizer) {
291
+ const slowQueries = collectors.performanceOptimizer.getSlowQueries();
292
+ socket.emit('slow-queries-update', {
293
+ slowQueries,
294
+ timestamp: new Date().toISOString()
295
+ });
296
+ }
297
+ break;
298
+ case 'cache-performance':
299
+ const perfCollectors = this.apmIntegration.getCollectors();
300
+ if (perfCollectors.performanceOptimizer) {
301
+ const cacheHitRates = perfCollectors.performanceOptimizer.getCacheHitRates();
302
+ socket.emit('cache-performance-update', {
303
+ cacheHitRates: Object.fromEntries(cacheHitRates),
304
+ timestamp: new Date().toISOString()
305
+ });
306
+ }
307
+ break;
308
+ }
309
+ });
310
+ }
311
+ startRealTimeUpdates() {
312
+ // Send health status updates every 30 seconds
313
+ this.healthCheckInterval = setInterval(async ()=>{
314
+ try {
315
+ const health = await this.apmIntegration.getHealthStatus();
316
+ this.broadcastToSubscribers('health-status', 'health-status-update', {
317
+ ...health,
318
+ timestamp: new Date().toISOString()
319
+ });
320
+ } catch (error) {
321
+ console.error('Failed to broadcast health status:', error);
322
+ }
323
+ }, 30000);
324
+ // Send performance metrics updates every 10 seconds
325
+ this.metricsInterval = setInterval(()=>{
326
+ try {
327
+ const analytics = this.apmIntegration.getPerformanceAnalytics();
328
+ this.broadcastToSubscribers('performance-metrics', 'performance-metrics-update', {
329
+ ...analytics,
330
+ timestamp: new Date().toISOString()
331
+ });
332
+ // Send recommendations if any
333
+ if (analytics.recommendations.length > 0) {
334
+ this.broadcastToSubscribers('recommendations', 'recommendations-update', {
335
+ recommendations: analytics.recommendations,
336
+ timestamp: new Date().toISOString()
337
+ });
338
+ }
339
+ } catch (error) {
340
+ console.error('Failed to broadcast performance metrics:', error);
341
+ }
342
+ }, 10000);
343
+ }
344
+ broadcastToSubscribers(subscription, event, data) {
345
+ for (const [socketId, client] of this.clients){
346
+ if (client.subscriptions.has(subscription)) {
347
+ // Apply client filters if any
348
+ const filteredData = this.applyFilters(data, client.filters);
349
+ this.io.to(socketId).emit(event, filteredData);
350
+ }
351
+ }
352
+ }
353
+ applyFilters(data, filters) {
354
+ // Apply component filters
355
+ if (filters.components && Array.isArray(filters.components) && data.components) {
356
+ const filteredComponents = {};
357
+ filters.components.forEach((component)=>{
358
+ if (data.components[component]) {
359
+ filteredComponents[component] = data.components[component];
360
+ }
361
+ });
362
+ data = {
363
+ ...data,
364
+ components: filteredComponents
365
+ };
366
+ }
367
+ // Apply severity filters for recommendations
368
+ if (filters.severity && Array.isArray(filters.severity) && data.recommendations) {
369
+ data.recommendations = data.recommendations.filter((rec)=>filters.severity.includes(rec.priority));
370
+ }
371
+ return data;
372
+ }
373
+ // Public API methods
374
+ broadcastAlert(alert) {
375
+ this.broadcastToSubscribers('alerts', 'alert', {
376
+ ...alert,
377
+ timestamp: new Date().toISOString()
378
+ });
379
+ }
380
+ broadcastSlowQuery(slowQuery) {
381
+ this.broadcastToSubscribers('slow-queries', 'slow-query-detected', {
382
+ ...slowQuery,
383
+ timestamp: new Date().toISOString()
384
+ });
385
+ }
386
+ broadcastRecommendation(recommendation) {
387
+ this.broadcastToSubscribers('recommendations', 'new-recommendation', {
388
+ ...recommendation,
389
+ timestamp: new Date().toISOString()
390
+ });
391
+ }
392
+ getClientStats() {
393
+ const subscriptionCounts = {};
394
+ let totalSubscriptions = 0;
395
+ for (const client of this.clients.values()){
396
+ totalSubscriptions += client.subscriptions.size;
397
+ for (const subscription of client.subscriptions){
398
+ subscriptionCounts[subscription] = (subscriptionCounts[subscription] || 0) + 1;
399
+ }
400
+ }
401
+ return {
402
+ totalClients: this.clients.size,
403
+ activeSubscriptions: subscriptionCounts,
404
+ averageSubscriptionsPerClient: this.clients.size > 0 ? totalSubscriptions / this.clients.size : 0
405
+ };
406
+ }
407
+ cleanupInactiveClients(maxInactiveTime = 300000) {
408
+ const now = new Date();
409
+ const inactiveClients = [];
410
+ for (const [socketId, client] of this.clients){
411
+ if (now.getTime() - client.lastActivity.getTime() > maxInactiveTime) {
412
+ inactiveClients.push(socketId);
413
+ }
414
+ }
415
+ inactiveClients.forEach((socketId)=>{
416
+ this.io.to(socketId).disconnect();
417
+ this.clients.delete(socketId);
418
+ });
419
+ if (inactiveClients.length > 0) {
420
+ console.log(`Cleaned up ${inactiveClients.length} inactive WebSocket clients`);
421
+ }
422
+ }
423
+ shutdown() {
424
+ if (this.metricsInterval) {
425
+ clearInterval(this.metricsInterval);
426
+ }
427
+ if (this.healthCheckInterval) {
428
+ clearInterval(this.healthCheckInterval);
429
+ }
430
+ // Disconnect all clients
431
+ for (const socketId of this.clients.keys()){
432
+ this.io.to(socketId).disconnect();
433
+ }
434
+ this.clients.clear();
435
+ }
436
+ }
437
+ export function createAPMWebSocketHandler(io, apmIntegration) {
438
+ return new APMWebSocketHandler(io, apmIntegration);
439
+ }
440
+
441
+ //# sourceMappingURL=apm-websocket-handler.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../../src/web/websocket/apm-websocket-handler.ts"],"names":["APMWebSocketHandler","clients","Map","metricsInterval","healthCheckInterval","io","apmIntegration","setupEventHandlers","startRealTimeUpdates","on","socket","handleConnection","client","socketId","id","subscriptions","Set","lastActivity","Date","filters","set","data","handleSubscribe","handleUnsubscribe","handleSetFilters","handleRequestMetrics","handleTraceAgent","handleTraceSwarm","handleRunIntegrationTest","handleDisconnection","error","handleError","emit","timestamp","toISOString","availableSubscriptions","sendInitialData","get","Array","isArray","message","validSubscriptions","forEach","sub","includes","add","from","sendSubscriptionData","delete","analytics","getPerformanceAnalytics","timeRange","type","responseData","metrics","recommendations","trends","traceAgentLifecycle","agentType","lifecycleEvent","agentId","metadata","source","clientId","traceSwarmActivity","swarmId","activity","topology","agentCount","results","runIntegrationTest","console","getHealthStatus","then","health","subscription","collectors","getCollectors","performanceOptimizer","slowQueries","getSlowQueries","perfCollectors","cacheHitRates","getCacheHitRates","Object","fromEntries","setInterval","broadcastToSubscribers","length","event","has","filteredData","applyFilters","to","components","filteredComponents","component","severity","filter","rec","priority","broadcastAlert","alert","broadcastSlowQuery","slowQuery","broadcastRecommendation","recommendation","getClientStats","subscriptionCounts","totalSubscriptions","values","size","totalClients","activeSubscriptions","averageSubscriptionsPerClient","cleanupInactiveClients","maxInactiveTime","now","inactiveClients","getTime","push","disconnect","log","shutdown","clearInterval","keys","clear","createAPMWebSocketHandler"],"mappings":"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"}