claude-mpm 3.4.13__py3-none-any.whl → 3.4.14__py3-none-any.whl

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 (27) hide show
  1. claude_mpm/dashboard/index.html +13 -0
  2. claude_mpm/dashboard/static/css/dashboard.css +2722 -0
  3. claude_mpm/dashboard/static/js/components/agent-inference.js +619 -0
  4. claude_mpm/dashboard/static/js/components/event-processor.js +641 -0
  5. claude_mpm/dashboard/static/js/components/event-viewer.js +914 -0
  6. claude_mpm/dashboard/static/js/components/export-manager.js +362 -0
  7. claude_mpm/dashboard/static/js/components/file-tool-tracker.js +611 -0
  8. claude_mpm/dashboard/static/js/components/hud-library-loader.js +211 -0
  9. claude_mpm/dashboard/static/js/components/hud-manager.js +671 -0
  10. claude_mpm/dashboard/static/js/components/hud-visualizer.js +1718 -0
  11. claude_mpm/dashboard/static/js/components/module-viewer.js +2701 -0
  12. claude_mpm/dashboard/static/js/components/session-manager.js +520 -0
  13. claude_mpm/dashboard/static/js/components/socket-manager.js +343 -0
  14. claude_mpm/dashboard/static/js/components/ui-state-manager.js +427 -0
  15. claude_mpm/dashboard/static/js/components/working-directory.js +866 -0
  16. claude_mpm/dashboard/static/js/dashboard-original.js +4134 -0
  17. claude_mpm/dashboard/static/js/dashboard.js +1978 -0
  18. claude_mpm/dashboard/static/js/socket-client.js +537 -0
  19. claude_mpm/dashboard/templates/index.html +346 -0
  20. claude_mpm/dashboard/test_dashboard.html +372 -0
  21. claude_mpm/services/socketio_server.py +41 -5
  22. {claude_mpm-3.4.13.dist-info → claude_mpm-3.4.14.dist-info}/METADATA +2 -1
  23. {claude_mpm-3.4.13.dist-info → claude_mpm-3.4.14.dist-info}/RECORD +27 -7
  24. {claude_mpm-3.4.13.dist-info → claude_mpm-3.4.14.dist-info}/WHEEL +0 -0
  25. {claude_mpm-3.4.13.dist-info → claude_mpm-3.4.14.dist-info}/entry_points.txt +0 -0
  26. {claude_mpm-3.4.13.dist-info → claude_mpm-3.4.14.dist-info}/licenses/LICENSE +0 -0
  27. {claude_mpm-3.4.13.dist-info → claude_mpm-3.4.14.dist-info}/top_level.txt +0 -0
@@ -0,0 +1,671 @@
1
+ /**
2
+ * HUD Manager Module
3
+ *
4
+ * Manages HUD (Heads-Up Display) visualization mode, including toggling between
5
+ * normal and HUD views, processing events for visualization, and coordinating
6
+ * with the HUD visualizer component.
7
+ *
8
+ * WHY: Extracted from main dashboard to isolate HUD-specific functionality
9
+ * and provide better separation between standard event viewing and advanced
10
+ * HUD visualization modes. This improves maintainability of complex visualization logic.
11
+ *
12
+ * DESIGN DECISION: Acts as a coordinator between the dashboard state and the
13
+ * HUD visualizer component, managing mode switching and event processing
14
+ * while maintaining clean separation from core dashboard functionality.
15
+ */
16
+ class HUDManager {
17
+ constructor(eventViewer, sessionManager) {
18
+ this.eventViewer = eventViewer;
19
+ this.sessionManager = sessionManager;
20
+ this.hudVisualizer = null;
21
+ this.hudMode = false;
22
+ this.isInitialized = false;
23
+
24
+ this.initializeHUDVisualizer();
25
+ this.setupEventHandlers();
26
+
27
+ // Initial button state update with a small delay to ensure all components are ready
28
+ setTimeout(() => {
29
+ this.updateHUDButtonState();
30
+ }, 100);
31
+
32
+ console.log('HUD manager initialized');
33
+ }
34
+
35
+ /**
36
+ * Initialize the HUD visualizer component
37
+ */
38
+ initializeHUDVisualizer() {
39
+ try {
40
+ this.hudVisualizer = new HUDVisualizer();
41
+ window.hudVisualizer = this.hudVisualizer; // Backward compatibility
42
+
43
+ // Initialize HUD visualizer
44
+ this.hudVisualizer.initialize();
45
+ this.isInitialized = true;
46
+
47
+ console.log('HUD visualizer initialized successfully');
48
+ } catch (error) {
49
+ console.error('Failed to initialize HUD visualizer:', error);
50
+ this.isInitialized = false;
51
+ }
52
+ }
53
+
54
+ /**
55
+ * Set up event handlers for HUD functionality
56
+ */
57
+ setupEventHandlers() {
58
+ console.log('[HUD-DEBUG] Setting up HUD event handlers');
59
+
60
+ // HUD toggle button
61
+ const hudToggleBtn = document.getElementById('hud-toggle-btn');
62
+ if (hudToggleBtn) {
63
+ console.log('[HUD-DEBUG] HUD toggle button found, adding click listener');
64
+ hudToggleBtn.addEventListener('click', () => {
65
+ console.log('[HUD-DEBUG] HUD toggle button clicked');
66
+ this.toggleHUD();
67
+ });
68
+ } else {
69
+ console.warn('[HUD-DEBUG] HUD toggle button not found during setup');
70
+ // Check if the DOM is ready
71
+ if (document.readyState === 'loading') {
72
+ console.log('[HUD-DEBUG] DOM still loading, will retry after DOMContentLoaded');
73
+ document.addEventListener('DOMContentLoaded', () => {
74
+ console.log('[HUD-DEBUG] DOM loaded, retrying HUD button setup');
75
+ this.setupEventHandlers();
76
+ });
77
+ return;
78
+ }
79
+ }
80
+
81
+ // Listen for session changes to update HUD button state
82
+ console.log('[HUD-DEBUG] Adding sessionChanged event listener');
83
+ document.addEventListener('sessionChanged', (e) => {
84
+ console.log('[HUD-DEBUG] sessionChanged event received:', e.detail);
85
+ this.updateHUDButtonState();
86
+ });
87
+
88
+ // Also listen for sessionFilterChanged for backward compatibility
89
+ console.log('[HUD-DEBUG] Adding sessionFilterChanged event listener');
90
+ document.addEventListener('sessionFilterChanged', (e) => {
91
+ console.log('[HUD-DEBUG] sessionFilterChanged event received:', e.detail);
92
+ this.updateHUDButtonState();
93
+ });
94
+ }
95
+
96
+ /**
97
+ * Toggle HUD mode on/off
98
+ */
99
+ toggleHUD() {
100
+ console.log('[HUD-DEBUG] toggleHUD called');
101
+
102
+ if (!this.isSessionSelected()) {
103
+ console.log('[HUD-DEBUG] Cannot toggle HUD: No session selected');
104
+ return;
105
+ }
106
+
107
+ if (!this.isInitialized) {
108
+ console.error('[HUD-DEBUG] Cannot toggle HUD: HUD visualizer not initialized');
109
+ return;
110
+ }
111
+
112
+ const oldMode = this.hudMode;
113
+ this.hudMode = !this.hudMode;
114
+ console.log('[HUD-DEBUG] HUD mode changed from', oldMode, 'to', this.hudMode);
115
+
116
+ this.updateHUDDisplay();
117
+
118
+ console.log('[HUD-DEBUG] HUD mode toggled:', this.hudMode ? 'ON' : 'OFF');
119
+ }
120
+
121
+ /**
122
+ * Check if a session is currently selected
123
+ * @returns {boolean} - True if session is selected
124
+ */
125
+ isSessionSelected() {
126
+ const hasManager = !!this.sessionManager;
127
+ const selectedId = this.sessionManager?.selectedSessionId;
128
+ const isValidSelection = selectedId && selectedId !== 'all' && selectedId !== '';
129
+
130
+ console.log('[HUD-DEBUG] isSessionSelected check:', {
131
+ hasManager: hasManager,
132
+ selectedId: selectedId,
133
+ isValidSelection: isValidSelection,
134
+ finalResult: hasManager && isValidSelection
135
+ });
136
+
137
+ return hasManager && isValidSelection;
138
+ }
139
+
140
+ /**
141
+ * Update HUD display based on current mode
142
+ */
143
+ updateHUDDisplay() {
144
+ console.log('[HUD-DEBUG] updateHUDDisplay called, hudMode:', this.hudMode);
145
+
146
+ const eventsWrapper = document.querySelector('.events-wrapper');
147
+ const hudToggleBtn = document.getElementById('hud-toggle-btn');
148
+
149
+ console.log('[HUD-DEBUG] DOM elements found:', {
150
+ eventsWrapper: !!eventsWrapper,
151
+ hudToggleBtn: !!hudToggleBtn,
152
+ hudVisualizer: !!this.hudVisualizer
153
+ });
154
+
155
+ if (!eventsWrapper || !hudToggleBtn) {
156
+ console.error('[HUD-DEBUG] Missing DOM elements for HUD display update');
157
+ return;
158
+ }
159
+
160
+ if (this.hudMode) {
161
+ console.log('[HUD-DEBUG] Switching to HUD mode...');
162
+ // Switch to HUD mode
163
+ eventsWrapper.classList.add('hud-mode');
164
+ hudToggleBtn.classList.add('btn-hud-active');
165
+ hudToggleBtn.textContent = 'Normal View';
166
+
167
+ // Activate HUD visualizer and process events
168
+ if (this.hudVisualizer) {
169
+ console.log('[HUD-DEBUG] Activating HUD visualizer...');
170
+ this.hudVisualizer.activate().then(() => {
171
+ console.log('[HUD-DEBUG] HUD visualizer activated successfully, processing existing events...');
172
+
173
+ // Additional resize attempts after DOM settles
174
+ setTimeout(() => {
175
+ console.log('[HUD-DEBUG] Post-activation resize check...');
176
+ if (this.hudVisualizer && this.hudVisualizer.ensureContainerResize) {
177
+ this.hudVisualizer.ensureContainerResize();
178
+ }
179
+ }, 100);
180
+
181
+ // Process existing events after libraries are loaded
182
+ this.processExistingEventsForHUD();
183
+ }).catch((error) => {
184
+ console.error('[HUD-DEBUG] Failed to activate HUD:', error);
185
+ console.error('[HUD-DEBUG] Error stack:', error.stack);
186
+ // Optionally revert HUD mode on failure
187
+ this.hudMode = false;
188
+ this.updateHUDDisplay();
189
+ });
190
+ } else {
191
+ console.error('[HUD-DEBUG] No HUD visualizer available');
192
+ }
193
+ } else {
194
+ console.log('[HUD-DEBUG] Switching to normal mode...');
195
+ // Switch to normal mode
196
+ eventsWrapper.classList.remove('hud-mode');
197
+ hudToggleBtn.classList.remove('btn-hud-active');
198
+ hudToggleBtn.textContent = 'HUD View';
199
+
200
+ // Deactivate HUD visualizer
201
+ if (this.hudVisualizer) {
202
+ console.log('[HUD-DEBUG] Deactivating HUD visualizer...');
203
+ this.hudVisualizer.deactivate();
204
+ }
205
+ }
206
+ }
207
+
208
+ /**
209
+ * Update HUD button state based on session selection
210
+ */
211
+ updateHUDButtonState() {
212
+ console.log('[HUD-DEBUG] updateHUDButtonState called');
213
+
214
+ const hudToggleBtn = document.getElementById('hud-toggle-btn');
215
+ if (!hudToggleBtn) {
216
+ console.warn('[HUD-DEBUG] HUD toggle button not found in DOM');
217
+ // Let's check what buttons do exist
218
+ const allButtons = document.querySelectorAll('button');
219
+ console.log('[HUD-DEBUG] Available buttons:', Array.from(allButtons).map(btn => ({ id: btn.id, className: btn.className, text: btn.textContent })));
220
+ return;
221
+ }
222
+
223
+ console.log('[HUD-DEBUG] HUD button found:', {
224
+ id: hudToggleBtn.id,
225
+ className: hudToggleBtn.className,
226
+ disabled: hudToggleBtn.disabled,
227
+ title: hudToggleBtn.title,
228
+ textContent: hudToggleBtn.textContent
229
+ });
230
+
231
+ const sessionSelected = this.isSessionSelected();
232
+ const selectedSessionId = this.sessionManager?.selectedSessionId;
233
+
234
+ console.log('[HUD-DEBUG] HUD Button State Update:', {
235
+ sessionSelected,
236
+ selectedSessionId,
237
+ currentHudMode: this.hudMode,
238
+ sessionManagerExists: !!this.sessionManager
239
+ });
240
+
241
+ if (sessionSelected) {
242
+ hudToggleBtn.disabled = false;
243
+ hudToggleBtn.title = 'Toggle HUD visualization mode';
244
+ console.log('[HUD-DEBUG] HUD button enabled - session selected:', selectedSessionId);
245
+ } else {
246
+ hudToggleBtn.disabled = true;
247
+ hudToggleBtn.title = 'Select a session to enable HUD mode';
248
+ console.log('[HUD-DEBUG] HUD button disabled - no session selected');
249
+
250
+ // Disable HUD mode if currently active
251
+ if (this.hudMode) {
252
+ console.log('[HUD-DEBUG] Disabling HUD mode because no session selected');
253
+ this.hudMode = false;
254
+ this.updateHUDDisplay();
255
+ }
256
+ }
257
+
258
+ console.log('[HUD-DEBUG] Final HUD button state:', {
259
+ disabled: hudToggleBtn.disabled,
260
+ title: hudToggleBtn.title
261
+ });
262
+ }
263
+
264
+ /**
265
+ * Process existing events for HUD visualization
266
+ * Called when HUD mode is activated
267
+ */
268
+ processExistingEventsForHUD() {
269
+ console.log('[HUD-MANAGER-DEBUG] processExistingEventsForHUD called');
270
+
271
+ if (!this.hudVisualizer) {
272
+ console.error('[HUD-MANAGER-DEBUG] No HUD visualizer available');
273
+ return;
274
+ }
275
+
276
+ if (!this.eventViewer) {
277
+ console.error('[HUD-MANAGER-DEBUG] No event viewer available');
278
+ return;
279
+ }
280
+
281
+ console.log('[HUD-MANAGER-DEBUG] 🔄 Processing existing events for HUD visualization...');
282
+
283
+ // Clear existing visualization
284
+ this.hudVisualizer.clear();
285
+
286
+ // Get all events (not just filtered ones) to build complete tree structure
287
+ const allEvents = this.eventViewer.getAllEvents();
288
+ console.log(`[HUD-MANAGER-DEBUG] Retrieved ${allEvents ? allEvents.length : 0} events from event viewer`);
289
+
290
+ if (!allEvents) {
291
+ console.error('[HUD-MANAGER-DEBUG] Event viewer returned null/undefined events');
292
+ return;
293
+ }
294
+
295
+ if (!Array.isArray(allEvents)) {
296
+ console.error('[HUD-MANAGER-DEBUG] Event viewer returned non-array:', typeof allEvents);
297
+ return;
298
+ }
299
+
300
+ if (allEvents.length === 0) {
301
+ console.log('⚠️ No events available for HUD processing');
302
+ return;
303
+ }
304
+
305
+ console.log(`[HUD-MANAGER-DEBUG] 📊 Found ${allEvents.length} total events for HUD processing`);
306
+
307
+ // Check if we should filter by selected session
308
+ const selectedSessionId = this.sessionManager?.selectedSessionId;
309
+ console.log(`[HUD-MANAGER-DEBUG] Selected session ID: ${selectedSessionId}`);
310
+
311
+ let eventsToProcess = allEvents;
312
+
313
+ if (selectedSessionId && selectedSessionId !== '' && selectedSessionId !== 'all') {
314
+ console.log(`[HUD-MANAGER-DEBUG] Filtering events for session: ${selectedSessionId}`);
315
+ eventsToProcess = allEvents.filter(event => {
316
+ const eventSessionId = event.session_id || (event.data && event.data.session_id);
317
+ const matches = eventSessionId === selectedSessionId;
318
+ if (!matches) {
319
+ console.log(`[HUD-MANAGER-DEBUG] Event ${event.timestamp} session ${eventSessionId} does not match ${selectedSessionId}`);
320
+ }
321
+ return matches;
322
+ });
323
+ console.log(`[HUD-MANAGER-DEBUG] Filtered to ${eventsToProcess.length} events for session ${selectedSessionId}`);
324
+ } else {
325
+ console.log('[HUD-MANAGER-DEBUG] No session filtering - processing all events');
326
+ }
327
+
328
+ // Sort events by timestamp to ensure chronological processing
329
+ const sortedEvents = eventsToProcess.slice().sort((a, b) => {
330
+ const timeA = new Date(a.timestamp).getTime();
331
+ const timeB = new Date(b.timestamp).getTime();
332
+ return timeA - timeB;
333
+ });
334
+
335
+ console.log(`[HUD-MANAGER-DEBUG] Sorted ${sortedEvents.length} events chronologically`);
336
+
337
+ // Process events in chronological order
338
+ console.log(`[HUD-MANAGER-DEBUG] Calling hudVisualizer.processExistingEvents with ${sortedEvents.length} events`);
339
+ this.hudVisualizer.processExistingEvents(sortedEvents);
340
+
341
+ console.log(`[HUD-MANAGER-DEBUG] ✅ Processed ${sortedEvents.length} events for HUD visualization`);
342
+
343
+ // After processing, check if nodes were created
344
+ setTimeout(() => {
345
+ const nodeCount = this.hudVisualizer?.nodes?.size || 0;
346
+ console.log(`[HUD-MANAGER-DEBUG] HUD visualizer now has ${nodeCount} nodes`);
347
+
348
+ if (nodeCount === 0) {
349
+ console.warn(`[HUD-MANAGER-DEBUG] No nodes created! Check event processing logic`);
350
+ console.log(`[HUD-MANAGER-DEBUG] Sample processed events:`, sortedEvents.slice(0, 3));
351
+ } else {
352
+ console.log(`[HUD-MANAGER-DEBUG] Successfully created ${nodeCount} nodes`);
353
+ // List the nodes
354
+ if (this.hudVisualizer.nodes) {
355
+ this.hudVisualizer.nodes.forEach((nodeData, nodeId) => {
356
+ console.log(`[HUD-MANAGER-DEBUG] Node: ${nodeId} - ${nodeData.label} (${nodeData.type})`);
357
+ });
358
+ }
359
+ }
360
+ }, 100);
361
+ }
362
+
363
+ /**
364
+ * Handle a new event for HUD processing
365
+ * Called when new events arrive via socket
366
+ * @param {Object} event - Event to process
367
+ */
368
+ handleHUDEvent(event) {
369
+ if (this.hudMode && this.hudVisualizer && this.isInitialized) {
370
+ this.hudVisualizer.processEvent(event);
371
+ }
372
+ }
373
+
374
+ /**
375
+ * Handle multiple new events for HUD processing
376
+ * @param {Array} events - Events to process
377
+ */
378
+ handleHUDEvents(events) {
379
+ if (this.hudMode && this.hudVisualizer && this.isInitialized && events.length > 0) {
380
+ // Get the most recent event for HUD processing
381
+ const latestEvent = events[events.length - 1];
382
+ this.handleHUDEvent(latestEvent);
383
+ }
384
+ }
385
+
386
+ /**
387
+ * Clear HUD visualization
388
+ */
389
+ clearHUD() {
390
+ if (this.hudVisualizer) {
391
+ this.hudVisualizer.clear();
392
+ }
393
+ }
394
+
395
+ /**
396
+ * Get current HUD mode state
397
+ * @returns {boolean} - True if HUD mode is active
398
+ */
399
+ isHUDMode() {
400
+ return this.hudMode;
401
+ }
402
+
403
+ /**
404
+ * Get HUD visualizer instance
405
+ * @returns {HUDVisualizer|null} - HUD visualizer instance
406
+ */
407
+ getHUDVisualizer() {
408
+ return this.hudVisualizer;
409
+ }
410
+
411
+ /**
412
+ * Check if HUD is initialized properly
413
+ * @returns {boolean} - True if initialized
414
+ */
415
+ isHUDInitialized() {
416
+ return this.isInitialized;
417
+ }
418
+
419
+ /**
420
+ * Reinitialize HUD visualizer
421
+ * Useful for recovery from errors
422
+ */
423
+ reinitialize() {
424
+ console.log('Reinitializing HUD manager...');
425
+ this.isInitialized = false;
426
+ this.hudMode = false;
427
+
428
+ this.initializeHUDVisualizer();
429
+ this.updateHUDDisplay();
430
+ this.updateHUDButtonState();
431
+ }
432
+
433
+ /**
434
+ * Debug method to manually test HUD activation
435
+ * Can be called from browser console: window.dashboard.hudManager.debugActivateHUD()
436
+ */
437
+ debugActivateHUD() {
438
+ console.log('[HUD-DEBUG] debugActivateHUD() called manually');
439
+ console.log('[HUD-DEBUG] Current state:', {
440
+ hudMode: this.hudMode,
441
+ isInitialized: this.isInitialized,
442
+ hasHudVisualizer: !!this.hudVisualizer,
443
+ hasEventViewer: !!this.eventViewer,
444
+ hasSessionManager: !!this.sessionManager,
445
+ selectedSessionId: this.sessionManager?.selectedSessionId,
446
+ isSessionSelected: this.isSessionSelected()
447
+ });
448
+
449
+ if (!this.isSessionSelected()) {
450
+ console.error('[HUD-DEBUG] Cannot debug HUD: No session selected');
451
+ return;
452
+ }
453
+
454
+ // Force HUD mode and call updateHUDDisplay
455
+ this.hudMode = true;
456
+ this.updateHUDDisplay();
457
+ }
458
+
459
+ /**
460
+ * Comprehensive HUD debugging that coordinates with HUD visualizer
461
+ * Can be called from browser console: window.dashboard.hudManager.debugHUDComprehensive()
462
+ */
463
+ debugHUDComprehensive() {
464
+ console.log('[HUD-MANAGER-COMPREHENSIVE-DEBUG] ===============================');
465
+ console.log('[HUD-MANAGER-COMPREHENSIVE-DEBUG] COMPREHENSIVE HUD DEBUG START');
466
+ console.log('[HUD-MANAGER-COMPREHENSIVE-DEBUG] ===============================');
467
+
468
+ // 1. Check HUD Manager state
469
+ console.log('[HUD-MANAGER-COMPREHENSIVE-DEBUG] 1. HUD Manager State:');
470
+ const managerState = {
471
+ hudMode: this.hudMode,
472
+ isInitialized: this.isInitialized,
473
+ hasHudVisualizer: !!this.hudVisualizer,
474
+ hasEventViewer: !!this.eventViewer,
475
+ hasSessionManager: !!this.sessionManager,
476
+ selectedSessionId: this.sessionManager?.selectedSessionId,
477
+ isSessionSelected: this.isSessionSelected()
478
+ };
479
+ console.log('[HUD-MANAGER-COMPREHENSIVE-DEBUG]', managerState);
480
+
481
+ // 2. Check DOM elements
482
+ console.log('[HUD-MANAGER-COMPREHENSIVE-DEBUG] 2. DOM Elements:');
483
+ const domElements = {
484
+ hudToggleBtn: !!document.getElementById('hud-toggle-btn'),
485
+ hudVisualizer: !!document.getElementById('hud-visualizer'),
486
+ hudCytoscape: !!document.getElementById('hud-cytoscape'),
487
+ eventsWrapper: !!document.querySelector('.events-wrapper'),
488
+ normalView: !!document.getElementById('normal-view')
489
+ };
490
+ console.log('[HUD-MANAGER-COMPREHENSIVE-DEBUG]', domElements);
491
+
492
+ // 3. Force activate HUD if not active
493
+ if (!this.hudMode) {
494
+ console.log('[HUD-MANAGER-COMPREHENSIVE-DEBUG] 3. HUD not active, forcing activation...');
495
+ if (!this.isSessionSelected()) {
496
+ console.warn('[HUD-MANAGER-COMPREHENSIVE-DEBUG] No session selected, will use debug mode');
497
+ // Force set a session for debugging
498
+ if (this.sessionManager && this.sessionManager.sessionIds && this.sessionManager.sessionIds.length > 0) {
499
+ const firstSession = this.sessionManager.sessionIds[0];
500
+ console.log(`[HUD-MANAGER-COMPREHENSIVE-DEBUG] Setting first available session: ${firstSession}`);
501
+ this.sessionManager.selectedSessionId = firstSession;
502
+ }
503
+ }
504
+
505
+ this.hudMode = true;
506
+ this.updateHUDDisplay();
507
+ } else {
508
+ console.log('[HUD-MANAGER-COMPREHENSIVE-DEBUG] 3. HUD already active');
509
+ }
510
+
511
+ // 4. Wait for HUD activation, then run visualizer debug
512
+ setTimeout(() => {
513
+ console.log('[HUD-MANAGER-COMPREHENSIVE-DEBUG] 4. Running HUD Visualizer Debug...');
514
+ if (this.hudVisualizer && this.hudVisualizer.debugBlankScreen) {
515
+ this.hudVisualizer.debugBlankScreen();
516
+ } else {
517
+ console.error('[HUD-MANAGER-COMPREHENSIVE-DEBUG] HUD Visualizer debug method not available');
518
+ }
519
+ }, 1000);
520
+
521
+ // 5. Add test events if event viewer has no events
522
+ setTimeout(() => {
523
+ console.log('[HUD-MANAGER-COMPREHENSIVE-DEBUG] 5. Checking event data...');
524
+ const allEvents = this.eventViewer?.getAllEvents();
525
+ console.log(`[HUD-MANAGER-COMPREHENSIVE-DEBUG] Found ${allEvents ? allEvents.length : 0} events`);
526
+
527
+ if (!allEvents || allEvents.length === 0) {
528
+ console.log('[HUD-MANAGER-COMPREHENSIVE-DEBUG] No events found, adding test events...');
529
+ this.debugAddTestEvents();
530
+ } else {
531
+ console.log('[HUD-MANAGER-COMPREHENSIVE-DEBUG] Events exist, processing for HUD...');
532
+ this.processExistingEventsForHUD();
533
+ }
534
+ }, 1500);
535
+
536
+ console.log('[HUD-MANAGER-COMPREHENSIVE-DEBUG] Comprehensive debug initiated. Check logs above.');
537
+ }
538
+
539
+ /**
540
+ * Add test events for debugging when no real events exist
541
+ */
542
+ debugAddTestEvents() {
543
+ if (!this.hudVisualizer) {
544
+ console.error('[HUD-MANAGER-COMPREHENSIVE-DEBUG] No HUD visualizer for test events');
545
+ return;
546
+ }
547
+
548
+ console.log('[HUD-MANAGER-COMPREHENSIVE-DEBUG] Adding test events...');
549
+
550
+ const testEvents = [
551
+ {
552
+ timestamp: new Date().toISOString(),
553
+ hook_event_name: 'session',
554
+ subtype: 'started',
555
+ session_id: 'debug-session-001',
556
+ data: { session_id: 'debug-session-001' }
557
+ },
558
+ {
559
+ timestamp: new Date(Date.now() + 1000).toISOString(),
560
+ hook_event_name: 'hook',
561
+ subtype: 'user_prompt',
562
+ session_id: 'debug-session-001',
563
+ data: {
564
+ session_id: 'debug-session-001',
565
+ prompt_preview: 'Debug the HUD rendering issue'
566
+ }
567
+ },
568
+ {
569
+ timestamp: new Date(Date.now() + 2000).toISOString(),
570
+ hook_event_name: 'hook',
571
+ subtype: 'pre_tool',
572
+ session_id: 'debug-session-001',
573
+ data: {
574
+ session_id: 'debug-session-001',
575
+ tool_name: 'Read'
576
+ }
577
+ },
578
+ {
579
+ timestamp: new Date(Date.now() + 3000).toISOString(),
580
+ hook_event_name: 'agent',
581
+ subtype: 'activated',
582
+ session_id: 'debug-session-001',
583
+ data: {
584
+ session_id: 'debug-session-001',
585
+ agent_type: 'engineer',
586
+ agent_name: 'Debug Engineer'
587
+ }
588
+ },
589
+ {
590
+ timestamp: new Date(Date.now() + 4000).toISOString(),
591
+ hook_event_name: 'todo',
592
+ subtype: 'updated',
593
+ session_id: 'debug-session-001',
594
+ data: {
595
+ session_id: 'debug-session-001'
596
+ }
597
+ }
598
+ ];
599
+
600
+ console.log(`[HUD-MANAGER-COMPREHENSIVE-DEBUG] Processing ${testEvents.length} test events...`);
601
+ this.hudVisualizer.processExistingEvents(testEvents);
602
+
603
+ // Also add to event viewer if it exists
604
+ if (this.eventViewer && this.eventViewer.addEvent) {
605
+ testEvents.forEach(event => {
606
+ this.eventViewer.addEvent(event);
607
+ });
608
+ }
609
+ }
610
+
611
+ /**
612
+ * Force HUD container visibility and test canvas rendering
613
+ */
614
+ debugForceHUDVisibility() {
615
+ console.log('[HUD-MANAGER-VISIBILITY-DEBUG] Forcing HUD visibility...');
616
+
617
+ // Force HUD mode DOM changes
618
+ const eventsWrapper = document.querySelector('.events-wrapper');
619
+ const hudVisualizer = document.getElementById('hud-visualizer');
620
+ const hudCytoscape = document.getElementById('hud-cytoscape');
621
+ const normalView = document.getElementById('normal-view');
622
+
623
+ if (eventsWrapper) {
624
+ eventsWrapper.classList.add('hud-mode');
625
+ console.log('[HUD-MANAGER-VISIBILITY-DEBUG] Added hud-mode class to events-wrapper');
626
+ }
627
+
628
+ if (hudVisualizer) {
629
+ hudVisualizer.style.display = 'block';
630
+ hudVisualizer.style.visibility = 'visible';
631
+ hudVisualizer.style.opacity = '1';
632
+ console.log('[HUD-MANAGER-VISIBILITY-DEBUG] Forced HUD visualizer visibility');
633
+ }
634
+
635
+ if (hudCytoscape) {
636
+ hudCytoscape.style.width = '100%';
637
+ hudCytoscape.style.height = '500px';
638
+ hudCytoscape.style.backgroundColor = '#f0f0f0';
639
+ hudCytoscape.style.border = '2px solid #007bff';
640
+ console.log('[HUD-MANAGER-VISIBILITY-DEBUG] Forced HUD cytoscape container dimensions and visibility');
641
+ }
642
+
643
+ if (normalView) {
644
+ normalView.style.display = 'none';
645
+ console.log('[HUD-MANAGER-VISIBILITY-DEBUG] Hidden normal view');
646
+ }
647
+
648
+ // Wait then test canvas
649
+ setTimeout(() => {
650
+ if (this.hudVisualizer && this.hudVisualizer.debugDrawSimpleShape) {
651
+ console.log('[HUD-MANAGER-VISIBILITY-DEBUG] Testing canvas rendering...');
652
+ this.hudVisualizer.debugDrawSimpleShape();
653
+ }
654
+ }, 500);
655
+ }
656
+
657
+ /**
658
+ * Cleanup HUD resources
659
+ */
660
+ cleanup() {
661
+ if (this.hudVisualizer) {
662
+ this.hudVisualizer.deactivate();
663
+ this.hudVisualizer.clear();
664
+ }
665
+
666
+ this.hudMode = false;
667
+ this.isInitialized = false;
668
+
669
+ console.log('HUD manager cleaned up');
670
+ }
671
+ }