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,333 +0,0 @@
1
- /**
2
- * Build Tracker Component
3
- *
4
- * WHY: Displays and manages version/build information for both MPM and Monitor UI,
5
- * providing users with clear visibility of the current system versions.
6
- *
7
- * DESIGN DECISION: Implemented as a standalone component that can be easily
8
- * integrated into the dashboard header, with automatic updates from SocketIO.
9
- */
10
-
11
- export class BuildTracker {
12
- constructor() {
13
- this.element = null;
14
- this.buildInfo = {
15
- monitor: {
16
- version: "1.0.0",
17
- build: 1,
18
- formatted_build: "0001",
19
- full_version: "v1.0.0-0001"
20
- },
21
- mpm: {
22
- version: "unknown",
23
- build: "unknown",
24
- full_version: "v0.0.0"
25
- }
26
- };
27
-
28
- // Socket client reference (will be set during initialization)
29
- this.socketClient = null;
30
-
31
- // Initialize the component
32
- this.init();
33
- }
34
-
35
- /**
36
- * Initialize the build tracker component
37
- */
38
- async init() {
39
- // Try to load version.json for dashboard version
40
- await this.loadDashboardVersion();
41
-
42
- this.createElements();
43
- this.setupEventListeners();
44
- }
45
-
46
- /**
47
- * Load dashboard version from version.json if available
48
- *
49
- * WHY: Attempts to load the actual dashboard version from the
50
- * version.json file created by the version management script.
51
- * Falls back to defaults if file is not available.
52
- */
53
- async loadDashboardVersion() {
54
- try {
55
- // Try to fetch version.json from the dashboard root
56
- const response = await fetch('/version.json');
57
- if (response.ok) {
58
- const versionData = await response.json();
59
-
60
- // Update monitor build info with loaded data
61
- this.buildInfo.monitor = {
62
- version: versionData.version || "1.0.0",
63
- build: versionData.build || 1,
64
- formatted_build: versionData.formatted_build || "0001",
65
- full_version: versionData.full_version || "v1.0.0-0001"
66
- };
67
-
68
- // Dashboard version loaded successfully
69
- }
70
- } catch (error) {
71
- // Silently fall back to defaults if version.json not available
72
- }
73
- }
74
-
75
- /**
76
- * Create the DOM elements for version display
77
- *
78
- * WHY: Creates a clean, unobtrusive version display that fits
79
- * seamlessly into the dashboard header.
80
- */
81
- createElements() {
82
- // Create container element
83
- this.element = document.createElement('div');
84
- this.element.className = 'version-display';
85
- this.element.id = 'version-display';
86
-
87
- // Create MPM version element
88
- const mpmVersion = document.createElement('span');
89
- mpmVersion.className = 'version-item mpm-version';
90
- mpmVersion.id = 'mpm-version';
91
- mpmVersion.innerHTML = `
92
- <span class="version-label">MPM</span>
93
- <span class="version-value">v0.0.0</span>
94
- `;
95
-
96
- // Create separator
97
- const separator = document.createElement('span');
98
- separator.className = 'version-separator';
99
- separator.textContent = '|';
100
-
101
- // Create Monitor version element
102
- const monitorVersion = document.createElement('span');
103
- monitorVersion.className = 'version-item monitor-version';
104
- monitorVersion.id = 'monitor-version';
105
- monitorVersion.innerHTML = `
106
- <span class="version-label">Monitor</span>
107
- <span class="version-value">v1.0.0-0001</span>
108
- `;
109
-
110
- // Assemble elements
111
- this.element.appendChild(mpmVersion);
112
- this.element.appendChild(separator);
113
- this.element.appendChild(monitorVersion);
114
-
115
- // Add tooltip for detailed info
116
- this.element.title = 'Click for detailed version information';
117
- }
118
-
119
- /**
120
- * Set the socket client for receiving updates
121
- *
122
- * @param {Object} socketClient - The Socket.IO client instance
123
- */
124
- setSocketClient(socketClient) {
125
- this.socketClient = socketClient;
126
-
127
- // Listen for build info updates
128
- if (this.socketClient && this.socketClient.socket) {
129
- // Listen for welcome message with build info
130
- this.socketClient.socket.on('welcome', (eventData) => {
131
- // Handle both old format (direct) and new schema (nested in data)
132
- const buildInfo = eventData.build_info ||
133
- (eventData.data && eventData.data.build_info);
134
- if (buildInfo) {
135
- this.updateBuildInfo(buildInfo);
136
- }
137
- });
138
-
139
- // Listen for status updates with build info
140
- this.socketClient.socket.on('status', (eventData) => {
141
- // Handle both old format (direct) and new schema (nested in data)
142
- const buildInfo = eventData.build_info ||
143
- (eventData.data && eventData.data.build_info);
144
- if (buildInfo) {
145
- this.updateBuildInfo(buildInfo);
146
- }
147
- });
148
-
149
- // Listen for explicit build info updates
150
- this.socketClient.socket.on('build_info', (data) => {
151
- this.updateBuildInfo(data);
152
- });
153
- }
154
- }
155
-
156
- /**
157
- * Update the build information
158
- *
159
- * @param {Object} buildInfo - Build information from server
160
- */
161
- updateBuildInfo(buildInfo) {
162
- // Store the build info
163
- this.buildInfo = buildInfo;
164
-
165
- // Update display
166
- this.updateDisplay();
167
- }
168
-
169
- /**
170
- * Update the version display elements
171
- *
172
- * WHY: Keeps the UI in sync with the latest version information
173
- * received from the server.
174
- */
175
- updateDisplay() {
176
- // Update MPM version
177
- const mpmElement = this.element.querySelector('.mpm-version .version-value');
178
- if (mpmElement && this.buildInfo.mpm) {
179
- const mpmVersion = this.buildInfo.mpm.full_version ||
180
- `v${this.buildInfo.mpm.version}`;
181
- mpmElement.textContent = mpmVersion;
182
-
183
- // Add build number to tooltip if available
184
- if (this.buildInfo.mpm.build && this.buildInfo.mpm.build !== "unknown") {
185
- mpmElement.parentElement.title = `MPM Build: ${this.buildInfo.mpm.build}`;
186
- }
187
- }
188
-
189
- // Update Monitor version
190
- const monitorElement = this.element.querySelector('.monitor-version .version-value');
191
- if (monitorElement && this.buildInfo.monitor) {
192
- const monitorVersion = this.buildInfo.monitor.full_version ||
193
- `v${this.buildInfo.monitor.version}-${this.buildInfo.monitor.formatted_build}`;
194
- monitorElement.textContent = monitorVersion;
195
-
196
- // Add last updated to tooltip if available
197
- if (this.buildInfo.monitor.last_updated) {
198
- const lastUpdated = new Date(this.buildInfo.monitor.last_updated).toLocaleString();
199
- monitorElement.parentElement.title = `Monitor Build: ${this.buildInfo.monitor.formatted_build}\nLast Updated: ${lastUpdated}`;
200
- }
201
- }
202
- }
203
-
204
- /**
205
- * Setup event listeners
206
- *
207
- * WHY: Allows users to interact with the version display for
208
- * additional information or actions.
209
- */
210
- setupEventListeners() {
211
- // Click handler for showing detailed version info
212
- this.element.addEventListener('click', () => {
213
- this.showDetailedInfo();
214
- });
215
- }
216
-
217
- /**
218
- * Show detailed version information in a modal or alert
219
- *
220
- * WHY: Provides power users with detailed build and version
221
- * information for debugging and support purposes.
222
- */
223
- showDetailedInfo() {
224
- const info = [];
225
-
226
- // MPM information
227
- if (this.buildInfo.mpm) {
228
- info.push('=== MPM Framework ===');
229
- info.push(`Version: ${this.buildInfo.mpm.version}`);
230
- if (this.buildInfo.mpm.build && this.buildInfo.mpm.build !== "unknown") {
231
- info.push(`Build: ${this.buildInfo.mpm.build}`);
232
- }
233
- info.push(`Full: ${this.buildInfo.mpm.full_version}`);
234
- }
235
-
236
- info.push('');
237
-
238
- // Monitor information
239
- if (this.buildInfo.monitor) {
240
- info.push('=== Monitor UI ===');
241
- info.push(`Version: ${this.buildInfo.monitor.version}`);
242
- info.push(`Build: ${this.buildInfo.monitor.formatted_build} (${this.buildInfo.monitor.build})`);
243
- info.push(`Full: ${this.buildInfo.monitor.full_version}`);
244
- if (this.buildInfo.monitor.last_updated) {
245
- const lastUpdated = new Date(this.buildInfo.monitor.last_updated).toLocaleString();
246
- info.push(`Updated: ${lastUpdated}`);
247
- }
248
- }
249
-
250
- // Version information compiled
251
-
252
- // Create a simple modal-like display
253
- const modal = document.createElement('div');
254
- modal.className = 'version-modal';
255
- modal.innerHTML = `
256
- <div class="version-modal-content">
257
- <h3>Version Information</h3>
258
- <pre>${info.join('\n')}</pre>
259
- <button onclick="this.parentElement.parentElement.remove()">Close</button>
260
- </div>
261
- `;
262
-
263
- // Add to body
264
- document.body.appendChild(modal);
265
-
266
- // Auto-remove after 10 seconds
267
- setTimeout(() => {
268
- modal.remove();
269
- }, 10000);
270
- }
271
-
272
- /**
273
- * Mount the component to a parent element
274
- *
275
- * @param {HTMLElement|string} parent - Parent element or selector
276
- */
277
- mount(parent) {
278
- const parentElement = typeof parent === 'string'
279
- ? document.querySelector(parent)
280
- : parent;
281
-
282
- if (!this.element) {
283
- return;
284
- }
285
-
286
- if (!parentElement) {
287
- return;
288
- }
289
-
290
- // Check if already mounted to prevent duplicates
291
- if (this.element.parentNode === parentElement) {
292
- return;
293
- }
294
-
295
- parentElement.appendChild(this.element);
296
- }
297
-
298
- /**
299
- * Get the component's DOM element
300
- *
301
- * @returns {HTMLElement} The component's root element
302
- */
303
- getElement() {
304
- return this.element;
305
- }
306
-
307
- /**
308
- * Destroy the component and clean up
309
- */
310
- destroy() {
311
- if (this.element && this.element.parentNode) {
312
- this.element.parentNode.removeChild(this.element);
313
- }
314
-
315
- // Clean up socket listeners
316
- if (this.socketClient && this.socketClient.socket) {
317
- this.socketClient.socket.off('welcome');
318
- this.socketClient.socket.off('status');
319
- this.socketClient.socket.off('build_info');
320
- }
321
-
322
- this.element = null;
323
- this.socketClient = null;
324
- }
325
- }
326
-
327
- // ES6 Module export
328
- export default BuildTracker;
329
-
330
- // Make BuildTracker globally available for backward compatibility
331
- if (typeof window !== 'undefined') {
332
- window.BuildTracker = BuildTracker;
333
- }