claude-mpm 5.1.9__py3-none-any.whl → 5.4.22__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.

Potentially problematic release.


This version of claude-mpm might be problematic. Click here for more details.

Files changed (176) hide show
  1. claude_mpm/VERSION +1 -1
  2. claude_mpm/__init__.py +4 -0
  3. claude_mpm/agents/CLAUDE_MPM_TEACHER_OUTPUT_STYLE.md +1 -1
  4. claude_mpm/agents/PM_INSTRUCTIONS.md +290 -34
  5. claude_mpm/agents/agent_loader.py +13 -44
  6. claude_mpm/agents/templates/circuit-breakers.md +138 -1
  7. claude_mpm/cli/__main__.py +4 -0
  8. claude_mpm/cli/chrome_devtools_installer.py +175 -0
  9. claude_mpm/cli/commands/agent_state_manager.py +8 -17
  10. claude_mpm/cli/commands/agents.py +0 -31
  11. claude_mpm/cli/commands/auto_configure.py +210 -25
  12. claude_mpm/cli/commands/config.py +88 -2
  13. claude_mpm/cli/commands/configure.py +1097 -158
  14. claude_mpm/cli/commands/configure_agent_display.py +15 -6
  15. claude_mpm/cli/commands/mpm_init/core.py +160 -46
  16. claude_mpm/cli/commands/mpm_init/knowledge_extractor.py +481 -0
  17. claude_mpm/cli/commands/mpm_init/prompts.py +280 -0
  18. claude_mpm/cli/commands/skills.py +214 -189
  19. claude_mpm/cli/commands/summarize.py +413 -0
  20. claude_mpm/cli/executor.py +11 -3
  21. claude_mpm/cli/parsers/agents_parser.py +0 -9
  22. claude_mpm/cli/parsers/auto_configure_parser.py +0 -138
  23. claude_mpm/cli/parsers/base_parser.py +5 -0
  24. claude_mpm/cli/parsers/config_parser.py +153 -83
  25. claude_mpm/cli/parsers/skills_parser.py +3 -2
  26. claude_mpm/cli/startup.py +550 -94
  27. claude_mpm/commands/mpm-config.md +265 -0
  28. claude_mpm/commands/mpm-help.md +14 -95
  29. claude_mpm/commands/mpm-organize.md +500 -0
  30. claude_mpm/config/agent_sources.py +27 -0
  31. claude_mpm/core/framework/formatters/content_formatter.py +3 -13
  32. claude_mpm/core/framework/loaders/agent_loader.py +8 -5
  33. claude_mpm/core/framework_loader.py +4 -2
  34. claude_mpm/core/logger.py +13 -0
  35. claude_mpm/core/socketio_pool.py +3 -3
  36. claude_mpm/core/unified_agent_registry.py +5 -15
  37. claude_mpm/hooks/claude_hooks/correlation_manager.py +60 -0
  38. claude_mpm/hooks/claude_hooks/event_handlers.py +211 -78
  39. claude_mpm/hooks/claude_hooks/hook_handler.py +6 -0
  40. claude_mpm/hooks/claude_hooks/installer.py +33 -10
  41. claude_mpm/hooks/claude_hooks/memory_integration.py +26 -9
  42. claude_mpm/hooks/claude_hooks/response_tracking.py +2 -3
  43. claude_mpm/hooks/claude_hooks/services/connection_manager.py +4 -0
  44. claude_mpm/hooks/memory_integration_hook.py +46 -1
  45. claude_mpm/init.py +0 -19
  46. claude_mpm/scripts/claude-hook-handler.sh +58 -18
  47. claude_mpm/scripts/launch_monitor.py +93 -13
  48. claude_mpm/scripts/start_activity_logging.py +0 -0
  49. claude_mpm/services/agents/agent_recommendation_service.py +278 -0
  50. claude_mpm/services/agents/agent_review_service.py +280 -0
  51. claude_mpm/services/agents/deployment/agent_discovery_service.py +2 -3
  52. claude_mpm/services/agents/deployment/agent_template_builder.py +4 -2
  53. claude_mpm/services/agents/deployment/multi_source_deployment_service.py +78 -9
  54. claude_mpm/services/agents/deployment/remote_agent_discovery_service.py +335 -53
  55. claude_mpm/services/agents/git_source_manager.py +34 -0
  56. claude_mpm/services/agents/loading/base_agent_manager.py +1 -13
  57. claude_mpm/services/agents/sources/git_source_sync_service.py +8 -1
  58. claude_mpm/services/agents/toolchain_detector.py +10 -6
  59. claude_mpm/services/analysis/__init__.py +11 -1
  60. claude_mpm/services/analysis/clone_detector.py +1030 -0
  61. claude_mpm/services/command_deployment_service.py +81 -10
  62. claude_mpm/services/event_bus/config.py +3 -1
  63. claude_mpm/services/git/git_operations_service.py +93 -8
  64. claude_mpm/services/monitor/daemon.py +9 -2
  65. claude_mpm/services/monitor/daemon_manager.py +39 -3
  66. claude_mpm/services/monitor/server.py +225 -19
  67. claude_mpm/services/self_upgrade_service.py +120 -12
  68. claude_mpm/services/skills/__init__.py +3 -0
  69. claude_mpm/services/skills/git_skill_source_manager.py +32 -2
  70. claude_mpm/services/skills/selective_skill_deployer.py +704 -0
  71. claude_mpm/services/skills/skill_to_agent_mapper.py +406 -0
  72. claude_mpm/services/skills_deployer.py +126 -9
  73. claude_mpm/services/socketio/event_normalizer.py +15 -1
  74. claude_mpm/services/socketio/server/core.py +160 -21
  75. claude_mpm/services/version_control/git_operations.py +103 -0
  76. claude_mpm/utils/agent_filters.py +17 -44
  77. {claude_mpm-5.1.9.dist-info → claude_mpm-5.4.22.dist-info}/METADATA +47 -84
  78. {claude_mpm-5.1.9.dist-info → claude_mpm-5.4.22.dist-info}/RECORD +82 -161
  79. claude_mpm-5.4.22.dist-info/entry_points.txt +5 -0
  80. claude_mpm-5.4.22.dist-info/licenses/LICENSE +94 -0
  81. claude_mpm-5.4.22.dist-info/licenses/LICENSE-FAQ.md +153 -0
  82. claude_mpm/agents/BASE_AGENT_TEMPLATE.md +0 -292
  83. claude_mpm/agents/BASE_DOCUMENTATION.md +0 -53
  84. claude_mpm/agents/BASE_ENGINEER.md +0 -658
  85. claude_mpm/agents/BASE_OPS.md +0 -219
  86. claude_mpm/agents/BASE_PM.md +0 -480
  87. claude_mpm/agents/BASE_PROMPT_ENGINEER.md +0 -787
  88. claude_mpm/agents/BASE_QA.md +0 -167
  89. claude_mpm/agents/BASE_RESEARCH.md +0 -53
  90. claude_mpm/agents/base_agent.json +0 -31
  91. claude_mpm/agents/base_agent_loader.py +0 -601
  92. claude_mpm/cli/commands/agents_detect.py +0 -380
  93. claude_mpm/cli/commands/agents_recommend.py +0 -309
  94. claude_mpm/cli/ticket_cli.py +0 -35
  95. claude_mpm/commands/mpm-agents-auto-configure.md +0 -278
  96. claude_mpm/commands/mpm-agents-detect.md +0 -177
  97. claude_mpm/commands/mpm-agents-list.md +0 -131
  98. claude_mpm/commands/mpm-agents-recommend.md +0 -223
  99. claude_mpm/commands/mpm-config-view.md +0 -150
  100. claude_mpm/commands/mpm-ticket-organize.md +0 -304
  101. claude_mpm/dashboard/analysis_runner.py +0 -455
  102. claude_mpm/dashboard/index.html +0 -13
  103. claude_mpm/dashboard/open_dashboard.py +0 -66
  104. claude_mpm/dashboard/static/css/activity.css +0 -1958
  105. claude_mpm/dashboard/static/css/connection-status.css +0 -370
  106. claude_mpm/dashboard/static/css/dashboard.css +0 -4701
  107. claude_mpm/dashboard/static/js/components/activity-tree.js +0 -1871
  108. claude_mpm/dashboard/static/js/components/agent-hierarchy.js +0 -777
  109. claude_mpm/dashboard/static/js/components/agent-inference.js +0 -956
  110. claude_mpm/dashboard/static/js/components/build-tracker.js +0 -333
  111. claude_mpm/dashboard/static/js/components/code-simple.js +0 -857
  112. claude_mpm/dashboard/static/js/components/connection-debug.js +0 -654
  113. claude_mpm/dashboard/static/js/components/diff-viewer.js +0 -891
  114. claude_mpm/dashboard/static/js/components/event-processor.js +0 -542
  115. claude_mpm/dashboard/static/js/components/event-viewer.js +0 -1155
  116. claude_mpm/dashboard/static/js/components/export-manager.js +0 -368
  117. claude_mpm/dashboard/static/js/components/file-change-tracker.js +0 -443
  118. claude_mpm/dashboard/static/js/components/file-change-viewer.js +0 -690
  119. claude_mpm/dashboard/static/js/components/file-tool-tracker.js +0 -724
  120. claude_mpm/dashboard/static/js/components/file-viewer.js +0 -580
  121. claude_mpm/dashboard/static/js/components/hud-library-loader.js +0 -211
  122. claude_mpm/dashboard/static/js/components/hud-manager.js +0 -671
  123. claude_mpm/dashboard/static/js/components/hud-visualizer.js +0 -1718
  124. claude_mpm/dashboard/static/js/components/module-viewer.js +0 -2764
  125. claude_mpm/dashboard/static/js/components/session-manager.js +0 -579
  126. claude_mpm/dashboard/static/js/components/socket-manager.js +0 -368
  127. claude_mpm/dashboard/static/js/components/ui-state-manager.js +0 -749
  128. claude_mpm/dashboard/static/js/components/unified-data-viewer.js +0 -1824
  129. claude_mpm/dashboard/static/js/components/working-directory.js +0 -920
  130. claude_mpm/dashboard/static/js/connection-manager.js +0 -536
  131. claude_mpm/dashboard/static/js/dashboard.js +0 -1914
  132. claude_mpm/dashboard/static/js/extension-error-handler.js +0 -164
  133. claude_mpm/dashboard/static/js/socket-client.js +0 -1474
  134. claude_mpm/dashboard/static/js/tab-isolation-fix.js +0 -185
  135. claude_mpm/dashboard/static/socket.io.min.js +0 -7
  136. claude_mpm/dashboard/static/socket.io.v4.8.1.backup.js +0 -7
  137. claude_mpm/dashboard/templates/code_simple.html +0 -153
  138. claude_mpm/dashboard/templates/index.html +0 -606
  139. claude_mpm/dashboard/test_dashboard.html +0 -372
  140. claude_mpm/scripts/mcp_server.py +0 -75
  141. claude_mpm/scripts/mcp_wrapper.py +0 -39
  142. claude_mpm/services/mcp_gateway/__init__.py +0 -159
  143. claude_mpm/services/mcp_gateway/auto_configure.py +0 -369
  144. claude_mpm/services/mcp_gateway/config/__init__.py +0 -17
  145. claude_mpm/services/mcp_gateway/config/config_loader.py +0 -296
  146. claude_mpm/services/mcp_gateway/config/config_schema.py +0 -243
  147. claude_mpm/services/mcp_gateway/config/configuration.py +0 -429
  148. claude_mpm/services/mcp_gateway/core/__init__.py +0 -43
  149. claude_mpm/services/mcp_gateway/core/base.py +0 -312
  150. claude_mpm/services/mcp_gateway/core/exceptions.py +0 -253
  151. claude_mpm/services/mcp_gateway/core/interfaces.py +0 -443
  152. claude_mpm/services/mcp_gateway/core/process_pool.py +0 -977
  153. claude_mpm/services/mcp_gateway/core/singleton_manager.py +0 -315
  154. claude_mpm/services/mcp_gateway/core/startup_verification.py +0 -316
  155. claude_mpm/services/mcp_gateway/main.py +0 -589
  156. claude_mpm/services/mcp_gateway/registry/__init__.py +0 -12
  157. claude_mpm/services/mcp_gateway/registry/service_registry.py +0 -412
  158. claude_mpm/services/mcp_gateway/registry/tool_registry.py +0 -489
  159. claude_mpm/services/mcp_gateway/server/__init__.py +0 -15
  160. claude_mpm/services/mcp_gateway/server/mcp_gateway.py +0 -414
  161. claude_mpm/services/mcp_gateway/server/stdio_handler.py +0 -372
  162. claude_mpm/services/mcp_gateway/server/stdio_server.py +0 -712
  163. claude_mpm/services/mcp_gateway/tools/__init__.py +0 -36
  164. claude_mpm/services/mcp_gateway/tools/base_adapter.py +0 -485
  165. claude_mpm/services/mcp_gateway/tools/document_summarizer.py +0 -789
  166. claude_mpm/services/mcp_gateway/tools/external_mcp_services.py +0 -654
  167. claude_mpm/services/mcp_gateway/tools/health_check_tool.py +0 -456
  168. claude_mpm/services/mcp_gateway/tools/hello_world.py +0 -551
  169. claude_mpm/services/mcp_gateway/tools/kuzu_memory_service.py +0 -555
  170. claude_mpm/services/mcp_gateway/utils/__init__.py +0 -14
  171. claude_mpm/services/mcp_gateway/utils/package_version_checker.py +0 -160
  172. claude_mpm/services/mcp_gateway/utils/update_preferences.py +0 -170
  173. claude_mpm-5.1.9.dist-info/entry_points.txt +0 -10
  174. claude_mpm-5.1.9.dist-info/licenses/LICENSE +0 -21
  175. {claude_mpm-5.1.9.dist-info → claude_mpm-5.4.22.dist-info}/WHEEL +0 -0
  176. {claude_mpm-5.1.9.dist-info → claude_mpm-5.4.22.dist-info}/top_level.txt +0 -0
@@ -1,671 +0,0 @@
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
- }