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

Potentially problematic release.


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

Files changed (162) hide show
  1. claude_mpm/VERSION +1 -1
  2. claude_mpm/__init__.py +4 -0
  3. claude_mpm/agents/PM_INSTRUCTIONS.md +85 -0
  4. claude_mpm/agents/agent_loader.py +13 -44
  5. claude_mpm/agents/templates/circuit-breakers.md +138 -1
  6. claude_mpm/cli/__main__.py +4 -0
  7. claude_mpm/cli/commands/agent_state_manager.py +8 -17
  8. claude_mpm/cli/commands/auto_configure.py +210 -25
  9. claude_mpm/cli/commands/config.py +88 -2
  10. claude_mpm/cli/commands/configure.py +1097 -158
  11. claude_mpm/cli/commands/configure_agent_display.py +15 -6
  12. claude_mpm/cli/commands/mpm_init/core.py +160 -46
  13. claude_mpm/cli/commands/mpm_init/knowledge_extractor.py +481 -0
  14. claude_mpm/cli/commands/mpm_init/prompts.py +280 -0
  15. claude_mpm/cli/commands/skills.py +21 -2
  16. claude_mpm/cli/commands/summarize.py +413 -0
  17. claude_mpm/cli/executor.py +11 -3
  18. claude_mpm/cli/parsers/base_parser.py +5 -0
  19. claude_mpm/cli/parsers/config_parser.py +153 -83
  20. claude_mpm/cli/parsers/skills_parser.py +3 -2
  21. claude_mpm/cli/startup.py +333 -89
  22. claude_mpm/commands/mpm-config.md +266 -0
  23. claude_mpm/commands/{mpm-ticket-organize.md → mpm-organize.md} +4 -5
  24. claude_mpm/config/agent_sources.py +27 -0
  25. claude_mpm/core/framework/formatters/content_formatter.py +3 -13
  26. claude_mpm/core/framework/loaders/agent_loader.py +8 -5
  27. claude_mpm/core/framework_loader.py +4 -2
  28. claude_mpm/core/logger.py +13 -0
  29. claude_mpm/core/socketio_pool.py +3 -3
  30. claude_mpm/core/unified_agent_registry.py +5 -15
  31. claude_mpm/hooks/claude_hooks/correlation_manager.py +60 -0
  32. claude_mpm/hooks/claude_hooks/event_handlers.py +206 -78
  33. claude_mpm/hooks/claude_hooks/hook_handler.py +6 -0
  34. claude_mpm/hooks/claude_hooks/installer.py +33 -10
  35. claude_mpm/hooks/claude_hooks/memory_integration.py +26 -9
  36. claude_mpm/hooks/claude_hooks/response_tracking.py +2 -3
  37. claude_mpm/hooks/claude_hooks/services/connection_manager.py +4 -0
  38. claude_mpm/hooks/memory_integration_hook.py +46 -1
  39. claude_mpm/init.py +0 -19
  40. claude_mpm/scripts/claude-hook-handler.sh +58 -18
  41. claude_mpm/scripts/launch_monitor.py +93 -13
  42. claude_mpm/services/agents/agent_recommendation_service.py +278 -0
  43. claude_mpm/services/agents/agent_review_service.py +280 -0
  44. claude_mpm/services/agents/deployment/agent_discovery_service.py +2 -3
  45. claude_mpm/services/agents/deployment/agent_template_builder.py +4 -2
  46. claude_mpm/services/agents/deployment/multi_source_deployment_service.py +78 -9
  47. claude_mpm/services/agents/deployment/remote_agent_discovery_service.py +335 -53
  48. claude_mpm/services/agents/git_source_manager.py +34 -0
  49. claude_mpm/services/agents/loading/base_agent_manager.py +1 -13
  50. claude_mpm/services/agents/sources/git_source_sync_service.py +8 -1
  51. claude_mpm/services/agents/toolchain_detector.py +10 -6
  52. claude_mpm/services/analysis/__init__.py +11 -1
  53. claude_mpm/services/analysis/clone_detector.py +1030 -0
  54. claude_mpm/services/command_deployment_service.py +71 -10
  55. claude_mpm/services/event_bus/config.py +3 -1
  56. claude_mpm/services/git/git_operations_service.py +93 -8
  57. claude_mpm/services/monitor/daemon.py +9 -2
  58. claude_mpm/services/monitor/daemon_manager.py +39 -3
  59. claude_mpm/services/monitor/server.py +225 -19
  60. claude_mpm/services/self_upgrade_service.py +120 -12
  61. claude_mpm/services/skills/__init__.py +3 -0
  62. claude_mpm/services/skills/git_skill_source_manager.py +32 -2
  63. claude_mpm/services/skills/selective_skill_deployer.py +230 -0
  64. claude_mpm/services/skills/skill_to_agent_mapper.py +406 -0
  65. claude_mpm/services/skills_deployer.py +64 -3
  66. claude_mpm/services/socketio/event_normalizer.py +15 -1
  67. claude_mpm/services/socketio/server/core.py +160 -21
  68. claude_mpm/services/version_control/git_operations.py +103 -0
  69. claude_mpm/utils/agent_filters.py +17 -44
  70. {claude_mpm-5.1.9.dist-info → claude_mpm-5.4.14.dist-info}/METADATA +47 -84
  71. {claude_mpm-5.1.9.dist-info → claude_mpm-5.4.14.dist-info}/RECORD +76 -150
  72. claude_mpm-5.4.14.dist-info/entry_points.txt +5 -0
  73. claude_mpm-5.4.14.dist-info/licenses/LICENSE +94 -0
  74. claude_mpm-5.4.14.dist-info/licenses/LICENSE-FAQ.md +153 -0
  75. claude_mpm/agents/BASE_AGENT_TEMPLATE.md +0 -292
  76. claude_mpm/agents/BASE_DOCUMENTATION.md +0 -53
  77. claude_mpm/agents/BASE_ENGINEER.md +0 -658
  78. claude_mpm/agents/BASE_OPS.md +0 -219
  79. claude_mpm/agents/BASE_PM.md +0 -480
  80. claude_mpm/agents/BASE_PROMPT_ENGINEER.md +0 -787
  81. claude_mpm/agents/BASE_QA.md +0 -167
  82. claude_mpm/agents/BASE_RESEARCH.md +0 -53
  83. claude_mpm/agents/base_agent.json +0 -31
  84. claude_mpm/agents/base_agent_loader.py +0 -601
  85. claude_mpm/cli/ticket_cli.py +0 -35
  86. claude_mpm/commands/mpm-config-view.md +0 -150
  87. claude_mpm/dashboard/analysis_runner.py +0 -455
  88. claude_mpm/dashboard/index.html +0 -13
  89. claude_mpm/dashboard/open_dashboard.py +0 -66
  90. claude_mpm/dashboard/static/css/activity.css +0 -1958
  91. claude_mpm/dashboard/static/css/connection-status.css +0 -370
  92. claude_mpm/dashboard/static/css/dashboard.css +0 -4701
  93. claude_mpm/dashboard/static/js/components/activity-tree.js +0 -1871
  94. claude_mpm/dashboard/static/js/components/agent-hierarchy.js +0 -777
  95. claude_mpm/dashboard/static/js/components/agent-inference.js +0 -956
  96. claude_mpm/dashboard/static/js/components/build-tracker.js +0 -333
  97. claude_mpm/dashboard/static/js/components/code-simple.js +0 -857
  98. claude_mpm/dashboard/static/js/components/connection-debug.js +0 -654
  99. claude_mpm/dashboard/static/js/components/diff-viewer.js +0 -891
  100. claude_mpm/dashboard/static/js/components/event-processor.js +0 -542
  101. claude_mpm/dashboard/static/js/components/event-viewer.js +0 -1155
  102. claude_mpm/dashboard/static/js/components/export-manager.js +0 -368
  103. claude_mpm/dashboard/static/js/components/file-change-tracker.js +0 -443
  104. claude_mpm/dashboard/static/js/components/file-change-viewer.js +0 -690
  105. claude_mpm/dashboard/static/js/components/file-tool-tracker.js +0 -724
  106. claude_mpm/dashboard/static/js/components/file-viewer.js +0 -580
  107. claude_mpm/dashboard/static/js/components/hud-library-loader.js +0 -211
  108. claude_mpm/dashboard/static/js/components/hud-manager.js +0 -671
  109. claude_mpm/dashboard/static/js/components/hud-visualizer.js +0 -1718
  110. claude_mpm/dashboard/static/js/components/module-viewer.js +0 -2764
  111. claude_mpm/dashboard/static/js/components/session-manager.js +0 -579
  112. claude_mpm/dashboard/static/js/components/socket-manager.js +0 -368
  113. claude_mpm/dashboard/static/js/components/ui-state-manager.js +0 -749
  114. claude_mpm/dashboard/static/js/components/unified-data-viewer.js +0 -1824
  115. claude_mpm/dashboard/static/js/components/working-directory.js +0 -920
  116. claude_mpm/dashboard/static/js/connection-manager.js +0 -536
  117. claude_mpm/dashboard/static/js/dashboard.js +0 -1914
  118. claude_mpm/dashboard/static/js/extension-error-handler.js +0 -164
  119. claude_mpm/dashboard/static/js/socket-client.js +0 -1474
  120. claude_mpm/dashboard/static/js/tab-isolation-fix.js +0 -185
  121. claude_mpm/dashboard/static/socket.io.min.js +0 -7
  122. claude_mpm/dashboard/static/socket.io.v4.8.1.backup.js +0 -7
  123. claude_mpm/dashboard/templates/code_simple.html +0 -153
  124. claude_mpm/dashboard/templates/index.html +0 -606
  125. claude_mpm/dashboard/test_dashboard.html +0 -372
  126. claude_mpm/scripts/mcp_server.py +0 -75
  127. claude_mpm/scripts/mcp_wrapper.py +0 -39
  128. claude_mpm/services/mcp_gateway/__init__.py +0 -159
  129. claude_mpm/services/mcp_gateway/auto_configure.py +0 -369
  130. claude_mpm/services/mcp_gateway/config/__init__.py +0 -17
  131. claude_mpm/services/mcp_gateway/config/config_loader.py +0 -296
  132. claude_mpm/services/mcp_gateway/config/config_schema.py +0 -243
  133. claude_mpm/services/mcp_gateway/config/configuration.py +0 -429
  134. claude_mpm/services/mcp_gateway/core/__init__.py +0 -43
  135. claude_mpm/services/mcp_gateway/core/base.py +0 -312
  136. claude_mpm/services/mcp_gateway/core/exceptions.py +0 -253
  137. claude_mpm/services/mcp_gateway/core/interfaces.py +0 -443
  138. claude_mpm/services/mcp_gateway/core/process_pool.py +0 -977
  139. claude_mpm/services/mcp_gateway/core/singleton_manager.py +0 -315
  140. claude_mpm/services/mcp_gateway/core/startup_verification.py +0 -316
  141. claude_mpm/services/mcp_gateway/main.py +0 -589
  142. claude_mpm/services/mcp_gateway/registry/__init__.py +0 -12
  143. claude_mpm/services/mcp_gateway/registry/service_registry.py +0 -412
  144. claude_mpm/services/mcp_gateway/registry/tool_registry.py +0 -489
  145. claude_mpm/services/mcp_gateway/server/__init__.py +0 -15
  146. claude_mpm/services/mcp_gateway/server/mcp_gateway.py +0 -414
  147. claude_mpm/services/mcp_gateway/server/stdio_handler.py +0 -372
  148. claude_mpm/services/mcp_gateway/server/stdio_server.py +0 -712
  149. claude_mpm/services/mcp_gateway/tools/__init__.py +0 -36
  150. claude_mpm/services/mcp_gateway/tools/base_adapter.py +0 -485
  151. claude_mpm/services/mcp_gateway/tools/document_summarizer.py +0 -789
  152. claude_mpm/services/mcp_gateway/tools/external_mcp_services.py +0 -654
  153. claude_mpm/services/mcp_gateway/tools/health_check_tool.py +0 -456
  154. claude_mpm/services/mcp_gateway/tools/hello_world.py +0 -551
  155. claude_mpm/services/mcp_gateway/tools/kuzu_memory_service.py +0 -555
  156. claude_mpm/services/mcp_gateway/utils/__init__.py +0 -14
  157. claude_mpm/services/mcp_gateway/utils/package_version_checker.py +0 -160
  158. claude_mpm/services/mcp_gateway/utils/update_preferences.py +0 -170
  159. claude_mpm-5.1.9.dist-info/entry_points.txt +0 -10
  160. claude_mpm-5.1.9.dist-info/licenses/LICENSE +0 -21
  161. {claude_mpm-5.1.9.dist-info → claude_mpm-5.4.14.dist-info}/WHEEL +0 -0
  162. {claude_mpm-5.1.9.dist-info → claude_mpm-5.4.14.dist-info}/top_level.txt +0 -0
@@ -1,368 +0,0 @@
1
- /**
2
- * Socket Manager Module
3
- *
4
- * Handles all socket connection management, event dispatching, and connection state.
5
- * Provides a centralized interface for socket operations across the dashboard.
6
- *
7
- * WHY: Extracted from main dashboard to centralize socket connection logic and
8
- * provide better separation of concerns. This allows for easier testing and
9
- * maintenance of connection handling code.
10
- *
11
- * DESIGN DECISION: Acts as a wrapper around SocketClient to provide dashboard-specific
12
- * connection management while maintaining the existing SocketClient interface.
13
- * Uses event dispatching to notify other modules of connection state changes.
14
- */
15
-
16
- // Import SocketClient (assuming it will be converted to ES6 modules too)
17
- import { SocketClient } from '../socket-client.js';
18
- class SocketManager {
19
- constructor() {
20
- this.socketClient = null;
21
- this.connectionCallbacks = new Set();
22
- this.eventUpdateCallbacks = new Set();
23
-
24
- // Initialize socket client
25
- this.socketClient = new SocketClient();
26
-
27
- // Make socketClient globally available (for backward compatibility)
28
- window.socketClient = this.socketClient;
29
-
30
- this.setupSocketEventHandlers();
31
-
32
- // Force initial status update after a short delay to ensure DOM is ready
33
- setTimeout(() => {
34
- this.updateInitialConnectionStatus();
35
- }, 100);
36
-
37
- console.log('Socket manager initialized');
38
- }
39
-
40
- /**
41
- * Set up socket event handlers for connection status and events
42
- */
43
- setupSocketEventHandlers() {
44
- // Listen for connection status changes
45
- document.addEventListener('socketConnectionStatus', (e) => {
46
- console.log(`SocketManager: Processing connection status update: ${e.detail.status} (${e.detail.type})`);
47
- this.handleConnectionStatusChange(e.detail.status, e.detail.type);
48
-
49
- // Notify all registered callbacks
50
- this.connectionCallbacks.forEach(callback => {
51
- try {
52
- callback(e.detail.status, e.detail.type);
53
- } catch (error) {
54
- console.error('Error in connection callback:', error);
55
- }
56
- });
57
- });
58
-
59
- // Set up event update handling
60
- if (this.socketClient) {
61
- this.socketClient.onEventUpdate((events) => {
62
- // Notify all registered callbacks
63
- this.eventUpdateCallbacks.forEach(callback => {
64
- try {
65
- callback(events);
66
- } catch (error) {
67
- console.error('Error in event update callback:', error);
68
- }
69
- });
70
- });
71
- }
72
- }
73
-
74
- /**
75
- * Handle connection status changes
76
- * @param {string} status - Connection status text
77
- * @param {string} type - Connection type ('connected', 'disconnected', etc.)
78
- */
79
- handleConnectionStatusChange(status, type) {
80
- this.updateConnectionStatus(status, type);
81
-
82
- // Set up git branch listener when connected
83
- if (type === 'connected' && this.socketClient && this.socketClient.socket) {
84
- // Expose socket globally for components like CodeTree
85
- window.socket = this.socketClient.socket;
86
- console.log('SocketManager: Exposed socket globally as window.socket');
87
-
88
- this.setupGitBranchListener();
89
- }
90
- }
91
-
92
- /**
93
- * Update initial connection status on dashboard load
94
- */
95
- updateInitialConnectionStatus() {
96
- console.log('SocketManager: Updating initial connection status');
97
-
98
- // Force status check on socket client (uses fallback mechanism)
99
- if (this.socketClient && typeof this.socketClient.checkAndUpdateStatus === 'function') {
100
- console.log('SocketManager: Using socket client checkAndUpdateStatus method');
101
- this.socketClient.checkAndUpdateStatus();
102
- } else if (this.socketClient && this.socketClient.socket) {
103
- console.log('SocketManager: Checking socket state directly', {
104
- connected: this.socketClient.socket.connected,
105
- connecting: this.socketClient.socket.connecting,
106
- isConnecting: this.socketClient.isConnecting,
107
- isConnected: this.socketClient.isConnected
108
- });
109
-
110
- if (this.socketClient.socket.connected) {
111
- console.log('SocketManager: Socket is already connected, updating status');
112
- // Expose socket globally for components like CodeTree
113
- window.socket = this.socketClient.socket;
114
- console.log('SocketManager: Exposed socket globally as window.socket');
115
- this.updateConnectionStatus('Connected', 'connected');
116
- } else if (this.socketClient.isConnecting || this.socketClient.socket.connecting) {
117
- console.log('SocketManager: Socket is connecting, updating status');
118
- this.updateConnectionStatus('Connecting...', 'connecting');
119
- } else {
120
- console.log('SocketManager: Socket is disconnected, updating status');
121
- this.updateConnectionStatus('Disconnected', 'disconnected');
122
- }
123
- } else {
124
- console.log('SocketManager: No socket client or socket found, setting disconnected status');
125
- this.updateConnectionStatus('Disconnected', 'disconnected');
126
- }
127
-
128
- // Additional fallback - check again after a longer delay in case connection is still establishing
129
- setTimeout(() => {
130
- console.log('SocketManager: Secondary status check after 1 second');
131
- if (this.socketClient && this.socketClient.socket && this.socketClient.socket.connected) {
132
- console.log('SocketManager: Socket connected in secondary check, updating status');
133
- // Expose socket globally if not already done
134
- if (!window.socket) {
135
- window.socket = this.socketClient.socket;
136
- console.log('SocketManager: Exposed socket globally as window.socket (secondary check)');
137
- }
138
- this.updateConnectionStatus('Connected', 'connected');
139
- }
140
- }, 1000);
141
- }
142
-
143
- /**
144
- * Set up git branch response listener for connected socket
145
- */
146
- setupGitBranchListener() {
147
- // Remove any existing listener first
148
- this.socketClient.socket.off('git_branch_response');
149
-
150
- // Add the listener
151
- this.socketClient.socket.on('git_branch_response', (data) => {
152
- if (data.success) {
153
- const footerBranch = document.getElementById('footer-git-branch');
154
- if (footerBranch) {
155
- footerBranch.textContent = data.branch || 'unknown';
156
- }
157
- if (footerBranch) {
158
- footerBranch.style.display = 'inline';
159
- }
160
- } else {
161
- console.error('Git branch request failed:', data.error);
162
- }
163
- });
164
- }
165
-
166
- /**
167
- * Update connection status display
168
- * @param {string} status - Status text to display
169
- * @param {string} type - Status type for styling
170
- */
171
- updateConnectionStatus(status, type) {
172
- const statusElement = document.getElementById('connection-status');
173
- if (statusElement) {
174
- // Check if there's a span indicator first
175
- const indicator = statusElement.querySelector('span');
176
- if (indicator) {
177
- // If there's a span, update the text content after the span
178
- const statusIndicator = type === 'connected' ? '●' : '●';
179
- statusElement.innerHTML = `<span>${statusIndicator}</span> ${status}`;
180
- } else {
181
- // If no span, just update text content
182
- statusElement.textContent = status;
183
- }
184
-
185
- statusElement.className = `status-badge status-${type}`;
186
- console.log(`SocketManager: UI updated - status: '${status}' (${type})`);
187
- } else {
188
- console.error('SocketManager: Could not find connection-status element in DOM');
189
- }
190
- }
191
-
192
- /**
193
- * Connect to socket server
194
- * @param {number} port - Port number to connect to
195
- */
196
- connect(port) {
197
- if (this.socketClient) {
198
- this.socketClient.connect(port);
199
- }
200
- }
201
-
202
- /**
203
- * Disconnect from socket server
204
- */
205
- disconnect() {
206
- if (this.socketClient) {
207
- this.socketClient.disconnect();
208
- }
209
- }
210
-
211
- /**
212
- * Check if socket is connected
213
- * @returns {boolean} - True if connected
214
- */
215
- isConnected() {
216
- return this.socketClient && this.socketClient.isConnected;
217
- }
218
-
219
- /**
220
- * Check if socket is connecting
221
- * @returns {boolean} - True if connecting
222
- */
223
- isConnecting() {
224
- return this.socketClient && this.socketClient.isConnecting;
225
- }
226
-
227
- /**
228
- * Get the underlying socket client
229
- * @returns {SocketClient} - The socket client instance
230
- */
231
- getSocketClient() {
232
- return this.socketClient;
233
- }
234
-
235
- /**
236
- * Get the raw socket connection
237
- * @returns {Socket|null} - The raw socket or null
238
- */
239
- getSocket() {
240
- return this.socketClient ? this.socketClient.socket : null;
241
- }
242
-
243
- /**
244
- * Register a callback for connection status changes
245
- * @param {Function} callback - Callback function(status, type)
246
- */
247
- onConnectionStatusChange(callback) {
248
- this.connectionCallbacks.add(callback);
249
- }
250
-
251
- /**
252
- * Unregister a connection status callback
253
- * @param {Function} callback - Callback to remove
254
- */
255
- offConnectionStatusChange(callback) {
256
- this.connectionCallbacks.delete(callback);
257
- }
258
-
259
- /**
260
- * Register a callback for event updates
261
- * @param {Function} callback - Callback function(events)
262
- */
263
- onEventUpdate(callback) {
264
- this.eventUpdateCallbacks.add(callback);
265
- }
266
-
267
- /**
268
- * Unregister an event update callback
269
- * @param {Function} callback - Callback to remove
270
- */
271
- offEventUpdate(callback) {
272
- this.eventUpdateCallbacks.delete(callback);
273
- }
274
-
275
- /**
276
- * Toggle connection controls visibility
277
- */
278
- toggleConnectionControls() {
279
- const controlsRow = document.getElementById('connection-controls-row');
280
- const toggleBtn = document.getElementById('connection-toggle-btn');
281
-
282
- if (controlsRow && toggleBtn) {
283
- const isVisible = controlsRow.classList.contains('show');
284
-
285
- if (isVisible) {
286
- controlsRow.classList.remove('show');
287
- controlsRow.style.display = 'none';
288
- toggleBtn.textContent = 'Connection Settings';
289
- } else {
290
- controlsRow.classList.add('show');
291
- controlsRow.style.display = 'block';
292
- toggleBtn.textContent = 'Hide Settings';
293
- }
294
- }
295
- }
296
-
297
- /**
298
- * Setup connection control event handlers
299
- * Called during dashboard initialization
300
- */
301
- setupConnectionControls() {
302
- const connectBtn = document.getElementById('connect-btn');
303
- const disconnectBtn = document.getElementById('disconnect-btn');
304
- const connectionToggleBtn = document.getElementById('connection-toggle-btn');
305
-
306
- if (connectBtn) {
307
- connectBtn.addEventListener('click', () => {
308
- const port = document.getElementById('port-input').value || 8765;
309
- this.connect(port);
310
- });
311
- }
312
-
313
- if (disconnectBtn) {
314
- disconnectBtn.addEventListener('click', () => {
315
- this.disconnect();
316
- });
317
- }
318
-
319
- if (connectionToggleBtn) {
320
- connectionToggleBtn.addEventListener('click', () => {
321
- this.toggleConnectionControls();
322
- });
323
- }
324
- }
325
-
326
- /**
327
- * Initialize connection from URL parameters
328
- * @param {URLSearchParams} params - URL search parameters
329
- */
330
- initializeFromURL(params) {
331
- const port = params.get('port');
332
- const portInput = document.getElementById('port-input');
333
-
334
- // Determine the port to use:
335
- // 1. URL parameter 'port'
336
- // 2. Current page port (if served via HTTP)
337
- // 3. Default port value from input field
338
- // 4. Fallback to 8765
339
- let connectPort = port;
340
- if (!connectPort && window.location.protocol === 'http:') {
341
- connectPort = window.location.port || '8765';
342
- }
343
- if (!connectPort) {
344
- connectPort = portInput?.value || '8765';
345
- }
346
-
347
- // Update the port input field with the determined port
348
- if (portInput) {
349
- portInput.value = connectPort;
350
- }
351
-
352
- // Auto-connect by default unless explicitly disabled
353
- // Changed: Always auto-connect by default even without URL params
354
- const shouldAutoConnect = params.get('connect') !== 'false';
355
- if (shouldAutoConnect && !this.isConnected() && !this.isConnecting()) {
356
- console.log(`SocketManager: Auto-connecting to port ${connectPort}`);
357
- this.connect(connectPort);
358
- }
359
- }
360
- }
361
-
362
- // ES6 Module export
363
- export { SocketManager };
364
- export default SocketManager;
365
-
366
- // Make SocketManager globally available for the dist/dashboard.js
367
- // This ensures compatibility with the minified version
368
- window.SocketManager = SocketManager;