claude-mpm 5.1.9__py3-none-any.whl → 5.4.48__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 (248) hide show
  1. claude_mpm/VERSION +1 -1
  2. claude_mpm/__init__.py +4 -0
  3. claude_mpm/agents/BASE_AGENT.md +164 -0
  4. claude_mpm/agents/CLAUDE_MPM_TEACHER_OUTPUT_STYLE.md +1 -1
  5. claude_mpm/agents/MEMORY.md +1 -1
  6. claude_mpm/agents/PM_INSTRUCTIONS.md +843 -900
  7. claude_mpm/agents/WORKFLOW.md +5 -254
  8. claude_mpm/agents/agent_loader.py +13 -44
  9. claude_mpm/agents/base_agent.json +1 -1
  10. claude_mpm/agents/frontmatter_validator.py +2 -2
  11. claude_mpm/agents/templates/circuit-breakers.md +138 -1
  12. claude_mpm/cli/__main__.py +4 -0
  13. claude_mpm/cli/chrome_devtools_installer.py +175 -0
  14. claude_mpm/cli/commands/agent_state_manager.py +18 -27
  15. claude_mpm/cli/commands/agents.py +9 -40
  16. claude_mpm/cli/commands/auto_configure.py +210 -25
  17. claude_mpm/cli/commands/config.py +88 -2
  18. claude_mpm/cli/commands/configure.py +1098 -159
  19. claude_mpm/cli/commands/configure_agent_display.py +25 -6
  20. claude_mpm/cli/commands/mpm_init/core.py +225 -46
  21. claude_mpm/cli/commands/mpm_init/knowledge_extractor.py +481 -0
  22. claude_mpm/cli/commands/mpm_init/prompts.py +280 -0
  23. claude_mpm/cli/commands/postmortem.py +1 -1
  24. claude_mpm/cli/commands/profile.py +277 -0
  25. claude_mpm/cli/commands/skills.py +218 -197
  26. claude_mpm/cli/commands/summarize.py +413 -0
  27. claude_mpm/cli/executor.py +21 -3
  28. claude_mpm/cli/interactive/agent_wizard.py +2 -2
  29. claude_mpm/cli/parsers/agents_parser.py +0 -9
  30. claude_mpm/cli/parsers/auto_configure_parser.py +0 -138
  31. claude_mpm/cli/parsers/base_parser.py +12 -0
  32. claude_mpm/cli/parsers/config_parser.py +153 -83
  33. claude_mpm/cli/parsers/profile_parser.py +148 -0
  34. claude_mpm/cli/parsers/skills_parser.py +0 -5
  35. claude_mpm/cli/startup.py +876 -149
  36. claude_mpm/commands/mpm-config.md +28 -0
  37. claude_mpm/commands/mpm-doctor.md +9 -22
  38. claude_mpm/commands/mpm-help.md +5 -287
  39. claude_mpm/commands/mpm-init.md +81 -507
  40. claude_mpm/commands/mpm-monitor.md +15 -402
  41. claude_mpm/commands/mpm-organize.md +120 -0
  42. claude_mpm/commands/mpm-postmortem.md +6 -108
  43. claude_mpm/commands/mpm-session-resume.md +12 -363
  44. claude_mpm/commands/mpm-status.md +5 -69
  45. claude_mpm/commands/mpm-ticket-view.md +52 -495
  46. claude_mpm/commands/mpm-version.md +5 -107
  47. claude_mpm/config/agent_sources.py +27 -0
  48. claude_mpm/core/config.py +2 -4
  49. claude_mpm/core/framework/formatters/content_formatter.py +3 -13
  50. claude_mpm/core/framework/loaders/agent_loader.py +8 -5
  51. claude_mpm/core/framework/loaders/instruction_loader.py +52 -11
  52. claude_mpm/core/framework_loader.py +4 -2
  53. claude_mpm/core/logger.py +13 -0
  54. claude_mpm/core/optimized_startup.py +59 -0
  55. claude_mpm/core/shared/config_loader.py +1 -1
  56. claude_mpm/core/socketio_pool.py +3 -3
  57. claude_mpm/core/unified_agent_registry.py +5 -15
  58. claude_mpm/dashboard/static/svelte-build/_app/env.js +1 -0
  59. claude_mpm/dashboard/static/svelte-build/_app/immutable/assets/0.B_FtCwCQ.css +1 -0
  60. claude_mpm/dashboard/static/svelte-build/_app/immutable/assets/2.Cl_eSA4x.css +1 -0
  61. claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/BgChzWQ1.js +1 -0
  62. claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/CIXEwuWe.js +1 -0
  63. claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/CWc5urbQ.js +1 -0
  64. claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/DMkZpdF2.js +2 -0
  65. claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/DjhvlsAc.js +1 -0
  66. claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/N4qtv3Hx.js +2 -0
  67. claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/uj46x2Wr.js +1 -0
  68. claude_mpm/dashboard/static/svelte-build/_app/immutable/entry/app.DTL5mJO-.js +2 -0
  69. claude_mpm/dashboard/static/svelte-build/_app/immutable/entry/start.DzuEhzqh.js +1 -0
  70. claude_mpm/dashboard/static/svelte-build/_app/immutable/nodes/0.CAGBuiOw.js +1 -0
  71. claude_mpm/dashboard/static/svelte-build/_app/immutable/nodes/1.DFLC8jdE.js +1 -0
  72. claude_mpm/dashboard/static/svelte-build/_app/immutable/nodes/2.DPvEihJJ.js +10 -0
  73. claude_mpm/dashboard/static/svelte-build/_app/version.json +1 -0
  74. claude_mpm/dashboard/static/svelte-build/favicon.svg +7 -0
  75. claude_mpm/dashboard/static/svelte-build/index.html +36 -0
  76. claude_mpm/hooks/claude_hooks/__pycache__/__init__.cpython-311.pyc +0 -0
  77. claude_mpm/hooks/claude_hooks/__pycache__/correlation_manager.cpython-311.pyc +0 -0
  78. claude_mpm/hooks/claude_hooks/__pycache__/event_handlers.cpython-311.pyc +0 -0
  79. claude_mpm/hooks/claude_hooks/__pycache__/hook_handler.cpython-311.pyc +0 -0
  80. claude_mpm/hooks/claude_hooks/__pycache__/installer.cpython-311.pyc +0 -0
  81. claude_mpm/hooks/claude_hooks/__pycache__/memory_integration.cpython-311.pyc +0 -0
  82. claude_mpm/hooks/claude_hooks/__pycache__/response_tracking.cpython-311.pyc +0 -0
  83. claude_mpm/hooks/claude_hooks/__pycache__/tool_analysis.cpython-311.pyc +0 -0
  84. claude_mpm/hooks/claude_hooks/correlation_manager.py +60 -0
  85. claude_mpm/hooks/claude_hooks/event_handlers.py +211 -78
  86. claude_mpm/hooks/claude_hooks/hook_handler.py +155 -1
  87. claude_mpm/hooks/claude_hooks/installer.py +33 -10
  88. claude_mpm/hooks/claude_hooks/memory_integration.py +26 -9
  89. claude_mpm/hooks/claude_hooks/response_tracking.py +2 -3
  90. claude_mpm/hooks/claude_hooks/services/__pycache__/__init__.cpython-311.pyc +0 -0
  91. claude_mpm/hooks/claude_hooks/services/__pycache__/connection_manager.cpython-311.pyc +0 -0
  92. claude_mpm/hooks/claude_hooks/services/__pycache__/connection_manager_http.cpython-311.pyc +0 -0
  93. claude_mpm/hooks/claude_hooks/services/__pycache__/duplicate_detector.cpython-311.pyc +0 -0
  94. claude_mpm/hooks/claude_hooks/services/__pycache__/state_manager.cpython-311.pyc +0 -0
  95. claude_mpm/hooks/claude_hooks/services/__pycache__/subagent_processor.cpython-311.pyc +0 -0
  96. claude_mpm/hooks/claude_hooks/services/connection_manager.py +30 -6
  97. claude_mpm/hooks/kuzu_memory_hook.py +5 -5
  98. claude_mpm/hooks/memory_integration_hook.py +46 -1
  99. claude_mpm/init.py +63 -19
  100. claude_mpm/models/git_repository.py +3 -3
  101. claude_mpm/scripts/claude-hook-handler.sh +58 -18
  102. claude_mpm/scripts/launch_monitor.py +93 -13
  103. claude_mpm/services/agents/agent_builder.py +3 -3
  104. claude_mpm/services/agents/agent_recommendation_service.py +278 -0
  105. claude_mpm/services/agents/agent_review_service.py +280 -0
  106. claude_mpm/services/agents/cache_git_manager.py +6 -6
  107. claude_mpm/services/agents/deployment/agent_deployment.py +29 -7
  108. claude_mpm/services/agents/deployment/agent_discovery_service.py +4 -5
  109. claude_mpm/services/agents/deployment/agent_format_converter.py +23 -13
  110. claude_mpm/services/agents/deployment/agent_template_builder.py +32 -20
  111. claude_mpm/services/agents/deployment/agents_directory_resolver.py +2 -2
  112. claude_mpm/services/agents/deployment/async_agent_deployment.py +31 -27
  113. claude_mpm/services/agents/deployment/local_template_deployment.py +3 -1
  114. claude_mpm/services/agents/deployment/multi_source_deployment_service.py +247 -35
  115. claude_mpm/services/agents/deployment/remote_agent_discovery_service.py +392 -87
  116. claude_mpm/services/agents/git_source_manager.py +53 -4
  117. claude_mpm/services/agents/loading/base_agent_manager.py +1 -13
  118. claude_mpm/services/agents/recommender.py +5 -3
  119. claude_mpm/services/agents/single_tier_deployment_service.py +2 -2
  120. claude_mpm/services/agents/sources/git_source_sync_service.py +120 -7
  121. claude_mpm/services/agents/startup_sync.py +22 -2
  122. claude_mpm/services/agents/toolchain_detector.py +10 -6
  123. claude_mpm/services/analysis/__init__.py +11 -1
  124. claude_mpm/services/analysis/clone_detector.py +1030 -0
  125. claude_mpm/services/command_deployment_service.py +81 -10
  126. claude_mpm/services/diagnostics/checks/agent_check.py +2 -2
  127. claude_mpm/services/diagnostics/checks/agent_sources_check.py +1 -1
  128. claude_mpm/services/event_bus/config.py +3 -1
  129. claude_mpm/services/git/git_operations_service.py +101 -16
  130. claude_mpm/services/monitor/daemon.py +9 -2
  131. claude_mpm/services/monitor/daemon_manager.py +39 -3
  132. claude_mpm/services/monitor/management/lifecycle.py +8 -1
  133. claude_mpm/services/monitor/server.py +698 -22
  134. claude_mpm/services/pm_skills_deployer.py +711 -0
  135. claude_mpm/services/profile_manager.py +331 -0
  136. claude_mpm/services/self_upgrade_service.py +120 -12
  137. claude_mpm/services/skills/__init__.py +3 -0
  138. claude_mpm/services/skills/git_skill_source_manager.py +130 -2
  139. claude_mpm/services/skills/selective_skill_deployer.py +704 -0
  140. claude_mpm/services/skills/skill_to_agent_mapper.py +406 -0
  141. claude_mpm/services/skills_deployer.py +127 -9
  142. claude_mpm/services/socketio/dashboard_server.py +1 -0
  143. claude_mpm/services/socketio/event_normalizer.py +51 -6
  144. claude_mpm/services/socketio/server/core.py +386 -108
  145. claude_mpm/services/version_control/git_operations.py +103 -0
  146. claude_mpm/skills/skill_manager.py +92 -3
  147. claude_mpm/utils/agent_dependency_loader.py +14 -2
  148. claude_mpm/utils/agent_filters.py +17 -44
  149. claude_mpm/utils/migration.py +4 -4
  150. claude_mpm/utils/robust_installer.py +47 -3
  151. {claude_mpm-5.1.9.dist-info → claude_mpm-5.4.48.dist-info}/METADATA +53 -87
  152. {claude_mpm-5.1.9.dist-info → claude_mpm-5.4.48.dist-info}/RECORD +157 -197
  153. claude_mpm-5.4.48.dist-info/entry_points.txt +5 -0
  154. claude_mpm-5.4.48.dist-info/licenses/LICENSE +94 -0
  155. claude_mpm-5.4.48.dist-info/licenses/LICENSE-FAQ.md +153 -0
  156. claude_mpm/agents/BASE_AGENT_TEMPLATE.md +0 -292
  157. claude_mpm/agents/BASE_DOCUMENTATION.md +0 -53
  158. claude_mpm/agents/BASE_OPS.md +0 -219
  159. claude_mpm/agents/BASE_PM.md +0 -480
  160. claude_mpm/agents/BASE_PROMPT_ENGINEER.md +0 -787
  161. claude_mpm/agents/BASE_QA.md +0 -167
  162. claude_mpm/agents/BASE_RESEARCH.md +0 -53
  163. claude_mpm/agents/base_agent_loader.py +0 -601
  164. claude_mpm/cli/commands/agents_detect.py +0 -380
  165. claude_mpm/cli/commands/agents_recommend.py +0 -309
  166. claude_mpm/cli/ticket_cli.py +0 -35
  167. claude_mpm/commands/mpm-agents-auto-configure.md +0 -278
  168. claude_mpm/commands/mpm-agents-detect.md +0 -177
  169. claude_mpm/commands/mpm-agents-list.md +0 -131
  170. claude_mpm/commands/mpm-agents-recommend.md +0 -223
  171. claude_mpm/commands/mpm-config-view.md +0 -150
  172. claude_mpm/commands/mpm-ticket-organize.md +0 -304
  173. claude_mpm/dashboard/analysis_runner.py +0 -455
  174. claude_mpm/dashboard/index.html +0 -13
  175. claude_mpm/dashboard/open_dashboard.py +0 -66
  176. claude_mpm/dashboard/static/css/activity.css +0 -1958
  177. claude_mpm/dashboard/static/css/connection-status.css +0 -370
  178. claude_mpm/dashboard/static/css/dashboard.css +0 -4701
  179. claude_mpm/dashboard/static/js/components/activity-tree.js +0 -1871
  180. claude_mpm/dashboard/static/js/components/agent-hierarchy.js +0 -777
  181. claude_mpm/dashboard/static/js/components/agent-inference.js +0 -956
  182. claude_mpm/dashboard/static/js/components/build-tracker.js +0 -333
  183. claude_mpm/dashboard/static/js/components/code-simple.js +0 -857
  184. claude_mpm/dashboard/static/js/components/connection-debug.js +0 -654
  185. claude_mpm/dashboard/static/js/components/diff-viewer.js +0 -891
  186. claude_mpm/dashboard/static/js/components/event-processor.js +0 -542
  187. claude_mpm/dashboard/static/js/components/event-viewer.js +0 -1155
  188. claude_mpm/dashboard/static/js/components/export-manager.js +0 -368
  189. claude_mpm/dashboard/static/js/components/file-change-tracker.js +0 -443
  190. claude_mpm/dashboard/static/js/components/file-change-viewer.js +0 -690
  191. claude_mpm/dashboard/static/js/components/file-tool-tracker.js +0 -724
  192. claude_mpm/dashboard/static/js/components/file-viewer.js +0 -580
  193. claude_mpm/dashboard/static/js/components/hud-library-loader.js +0 -211
  194. claude_mpm/dashboard/static/js/components/hud-manager.js +0 -671
  195. claude_mpm/dashboard/static/js/components/hud-visualizer.js +0 -1718
  196. claude_mpm/dashboard/static/js/components/module-viewer.js +0 -2764
  197. claude_mpm/dashboard/static/js/components/session-manager.js +0 -579
  198. claude_mpm/dashboard/static/js/components/socket-manager.js +0 -368
  199. claude_mpm/dashboard/static/js/components/ui-state-manager.js +0 -749
  200. claude_mpm/dashboard/static/js/components/unified-data-viewer.js +0 -1824
  201. claude_mpm/dashboard/static/js/components/working-directory.js +0 -920
  202. claude_mpm/dashboard/static/js/connection-manager.js +0 -536
  203. claude_mpm/dashboard/static/js/dashboard.js +0 -1914
  204. claude_mpm/dashboard/static/js/extension-error-handler.js +0 -164
  205. claude_mpm/dashboard/static/js/socket-client.js +0 -1474
  206. claude_mpm/dashboard/static/js/tab-isolation-fix.js +0 -185
  207. claude_mpm/dashboard/static/socket.io.min.js +0 -7
  208. claude_mpm/dashboard/static/socket.io.v4.8.1.backup.js +0 -7
  209. claude_mpm/dashboard/templates/code_simple.html +0 -153
  210. claude_mpm/dashboard/templates/index.html +0 -606
  211. claude_mpm/dashboard/test_dashboard.html +0 -372
  212. claude_mpm/scripts/mcp_server.py +0 -75
  213. claude_mpm/scripts/mcp_wrapper.py +0 -39
  214. claude_mpm/services/mcp_gateway/__init__.py +0 -159
  215. claude_mpm/services/mcp_gateway/auto_configure.py +0 -369
  216. claude_mpm/services/mcp_gateway/config/__init__.py +0 -17
  217. claude_mpm/services/mcp_gateway/config/config_loader.py +0 -296
  218. claude_mpm/services/mcp_gateway/config/config_schema.py +0 -243
  219. claude_mpm/services/mcp_gateway/config/configuration.py +0 -429
  220. claude_mpm/services/mcp_gateway/core/__init__.py +0 -43
  221. claude_mpm/services/mcp_gateway/core/base.py +0 -312
  222. claude_mpm/services/mcp_gateway/core/exceptions.py +0 -253
  223. claude_mpm/services/mcp_gateway/core/interfaces.py +0 -443
  224. claude_mpm/services/mcp_gateway/core/process_pool.py +0 -977
  225. claude_mpm/services/mcp_gateway/core/singleton_manager.py +0 -315
  226. claude_mpm/services/mcp_gateway/core/startup_verification.py +0 -316
  227. claude_mpm/services/mcp_gateway/main.py +0 -589
  228. claude_mpm/services/mcp_gateway/registry/__init__.py +0 -12
  229. claude_mpm/services/mcp_gateway/registry/service_registry.py +0 -412
  230. claude_mpm/services/mcp_gateway/registry/tool_registry.py +0 -489
  231. claude_mpm/services/mcp_gateway/server/__init__.py +0 -15
  232. claude_mpm/services/mcp_gateway/server/mcp_gateway.py +0 -414
  233. claude_mpm/services/mcp_gateway/server/stdio_handler.py +0 -372
  234. claude_mpm/services/mcp_gateway/server/stdio_server.py +0 -712
  235. claude_mpm/services/mcp_gateway/tools/__init__.py +0 -36
  236. claude_mpm/services/mcp_gateway/tools/base_adapter.py +0 -485
  237. claude_mpm/services/mcp_gateway/tools/document_summarizer.py +0 -789
  238. claude_mpm/services/mcp_gateway/tools/external_mcp_services.py +0 -654
  239. claude_mpm/services/mcp_gateway/tools/health_check_tool.py +0 -456
  240. claude_mpm/services/mcp_gateway/tools/hello_world.py +0 -551
  241. claude_mpm/services/mcp_gateway/tools/kuzu_memory_service.py +0 -555
  242. claude_mpm/services/mcp_gateway/utils/__init__.py +0 -14
  243. claude_mpm/services/mcp_gateway/utils/package_version_checker.py +0 -160
  244. claude_mpm/services/mcp_gateway/utils/update_preferences.py +0 -170
  245. claude_mpm-5.1.9.dist-info/entry_points.txt +0 -10
  246. claude_mpm-5.1.9.dist-info/licenses/LICENSE +0 -21
  247. {claude_mpm-5.1.9.dist-info → claude_mpm-5.4.48.dist-info}/WHEEL +0 -0
  248. {claude_mpm-5.1.9.dist-info → claude_mpm-5.4.48.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;