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,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;