claude-mpm 4.2.44__py3-none-any.whl → 4.2.51__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.
Files changed (148) hide show
  1. claude_mpm/VERSION +1 -1
  2. claude_mpm/agents/BASE_PM.md +43 -1
  3. claude_mpm/agents/INSTRUCTIONS.md +75 -1
  4. claude_mpm/agents/WORKFLOW.md +46 -1
  5. claude_mpm/agents/frontmatter_validator.py +20 -12
  6. claude_mpm/agents/templates/nextjs_engineer.json +277 -0
  7. claude_mpm/agents/templates/python_engineer.json +289 -0
  8. claude_mpm/agents/templates/react_engineer.json +11 -3
  9. claude_mpm/agents/templates/security.json +50 -9
  10. claude_mpm/cli/commands/agents.py +2 -2
  11. claude_mpm/cli/commands/uninstall.py +1 -2
  12. claude_mpm/cli/interactive/agent_wizard.py +3 -3
  13. claude_mpm/cli/parsers/agent_manager_parser.py +3 -3
  14. claude_mpm/cli/parsers/agents_parser.py +1 -1
  15. claude_mpm/constants.py +1 -1
  16. claude_mpm/core/error_handler.py +2 -4
  17. claude_mpm/core/file_utils.py +4 -12
  18. claude_mpm/core/log_manager.py +8 -5
  19. claude_mpm/core/logger.py +1 -1
  20. claude_mpm/core/logging_utils.py +6 -6
  21. claude_mpm/core/unified_agent_registry.py +18 -4
  22. claude_mpm/dashboard/react/components/DataInspector/DataInspector.module.css +188 -0
  23. claude_mpm/dashboard/react/components/EventViewer/EventViewer.module.css +156 -0
  24. claude_mpm/dashboard/react/components/shared/ConnectionStatus.module.css +38 -0
  25. claude_mpm/dashboard/react/components/shared/FilterBar.module.css +92 -0
  26. claude_mpm/dashboard/static/archive/activity_dashboard_fixed.html +248 -0
  27. claude_mpm/dashboard/static/archive/activity_dashboard_test.html +61 -0
  28. claude_mpm/dashboard/static/archive/test_activity_connection.html +179 -0
  29. claude_mpm/dashboard/static/archive/test_claude_tree_tab.html +68 -0
  30. claude_mpm/dashboard/static/archive/test_dashboard.html +409 -0
  31. claude_mpm/dashboard/static/archive/test_dashboard_fixed.html +519 -0
  32. claude_mpm/dashboard/static/archive/test_dashboard_verification.html +181 -0
  33. claude_mpm/dashboard/static/archive/test_file_data.html +315 -0
  34. claude_mpm/dashboard/static/archive/test_file_tree_empty_state.html +243 -0
  35. claude_mpm/dashboard/static/archive/test_file_tree_fix.html +234 -0
  36. claude_mpm/dashboard/static/archive/test_file_tree_rename.html +117 -0
  37. claude_mpm/dashboard/static/archive/test_file_tree_tab.html +115 -0
  38. claude_mpm/dashboard/static/archive/test_file_viewer.html +224 -0
  39. claude_mpm/dashboard/static/archive/test_final_activity.html +220 -0
  40. claude_mpm/dashboard/static/archive/test_tab_fix.html +139 -0
  41. claude_mpm/dashboard/static/built/assets/events.DjpNxWNo.css +1 -0
  42. claude_mpm/dashboard/static/built/components/activity-tree.js +1 -1
  43. claude_mpm/dashboard/static/built/components/agent-hierarchy.js +777 -0
  44. claude_mpm/dashboard/static/built/components/agent-inference.js +1 -1
  45. claude_mpm/dashboard/static/built/components/build-tracker.js +333 -0
  46. claude_mpm/dashboard/static/built/components/code-simple.js +857 -0
  47. claude_mpm/dashboard/static/built/components/code-tree/tree-breadcrumb.js +353 -0
  48. claude_mpm/dashboard/static/built/components/code-tree/tree-constants.js +235 -0
  49. claude_mpm/dashboard/static/built/components/code-tree/tree-search.js +409 -0
  50. claude_mpm/dashboard/static/built/components/code-tree/tree-utils.js +435 -0
  51. claude_mpm/dashboard/static/built/components/code-viewer.js +2 -1076
  52. claude_mpm/dashboard/static/built/components/connection-debug.js +654 -0
  53. claude_mpm/dashboard/static/built/components/diff-viewer.js +891 -0
  54. claude_mpm/dashboard/static/built/components/event-processor.js +1 -1
  55. claude_mpm/dashboard/static/built/components/event-viewer.js +1 -1
  56. claude_mpm/dashboard/static/built/components/export-manager.js +1 -1
  57. claude_mpm/dashboard/static/built/components/file-change-tracker.js +443 -0
  58. claude_mpm/dashboard/static/built/components/file-change-viewer.js +690 -0
  59. claude_mpm/dashboard/static/built/components/file-tool-tracker.js +1 -1
  60. claude_mpm/dashboard/static/built/components/module-viewer.js +1 -1
  61. claude_mpm/dashboard/static/built/components/nav-bar.js +145 -0
  62. claude_mpm/dashboard/static/built/components/page-structure.js +429 -0
  63. claude_mpm/dashboard/static/built/components/session-manager.js +1 -1
  64. claude_mpm/dashboard/static/built/components/ui-state-manager.js +2 -465
  65. claude_mpm/dashboard/static/built/components/working-directory.js +1 -1
  66. claude_mpm/dashboard/static/built/connection-manager.js +536 -0
  67. claude_mpm/dashboard/static/built/dashboard.js +1 -1
  68. claude_mpm/dashboard/static/built/extension-error-handler.js +164 -0
  69. claude_mpm/dashboard/static/built/react/events.js +30 -0
  70. claude_mpm/dashboard/static/built/shared/dom-helpers.js +396 -0
  71. claude_mpm/dashboard/static/built/shared/event-bus.js +330 -0
  72. claude_mpm/dashboard/static/built/shared/event-filter-service.js +540 -0
  73. claude_mpm/dashboard/static/built/shared/logger.js +385 -0
  74. claude_mpm/dashboard/static/built/shared/page-structure.js +251 -0
  75. claude_mpm/dashboard/static/built/shared/tooltip-service.js +253 -0
  76. claude_mpm/dashboard/static/built/socket-client.js +1 -1
  77. claude_mpm/dashboard/static/built/tab-isolation-fix.js +185 -0
  78. claude_mpm/dashboard/static/css/dashboard.css +28 -5
  79. claude_mpm/dashboard/static/dist/assets/events.DjpNxWNo.css +1 -0
  80. claude_mpm/dashboard/static/dist/components/activity-tree.js +1 -1
  81. claude_mpm/dashboard/static/dist/components/agent-inference.js +1 -1
  82. claude_mpm/dashboard/static/dist/components/code-viewer.js +2 -0
  83. claude_mpm/dashboard/static/dist/components/event-processor.js +1 -1
  84. claude_mpm/dashboard/static/dist/components/event-viewer.js +1 -1
  85. claude_mpm/dashboard/static/dist/components/export-manager.js +1 -1
  86. claude_mpm/dashboard/static/dist/components/file-tool-tracker.js +1 -1
  87. claude_mpm/dashboard/static/dist/components/module-viewer.js +1 -1
  88. claude_mpm/dashboard/static/dist/components/session-manager.js +1 -1
  89. claude_mpm/dashboard/static/dist/components/working-directory.js +1 -1
  90. claude_mpm/dashboard/static/dist/dashboard.js +1 -1
  91. claude_mpm/dashboard/static/dist/react/events.js +30 -0
  92. claude_mpm/dashboard/static/dist/socket-client.js +1 -1
  93. claude_mpm/dashboard/static/events.html +607 -0
  94. claude_mpm/dashboard/static/index.html +713 -0
  95. claude_mpm/dashboard/static/js/components/activity-tree.js +3 -17
  96. claude_mpm/dashboard/static/js/components/agent-hierarchy.js +4 -1
  97. claude_mpm/dashboard/static/js/components/agent-inference.js +3 -0
  98. claude_mpm/dashboard/static/js/components/build-tracker.js +8 -0
  99. claude_mpm/dashboard/static/js/components/code-viewer.js +306 -66
  100. claude_mpm/dashboard/static/js/components/event-processor.js +3 -0
  101. claude_mpm/dashboard/static/js/components/event-viewer.js +39 -2
  102. claude_mpm/dashboard/static/js/components/export-manager.js +3 -0
  103. claude_mpm/dashboard/static/js/components/file-tool-tracker.js +30 -10
  104. claude_mpm/dashboard/static/js/components/socket-manager.js +4 -0
  105. claude_mpm/dashboard/static/js/components/ui-state-manager.js +285 -85
  106. claude_mpm/dashboard/static/js/components/working-directory.js +3 -0
  107. claude_mpm/dashboard/static/js/dashboard.js +61 -33
  108. claude_mpm/dashboard/static/js/socket-client.js +12 -8
  109. claude_mpm/dashboard/static/js/stores/dashboard-store.js +562 -0
  110. claude_mpm/dashboard/static/js/tab-isolation-fix.js +185 -0
  111. claude_mpm/dashboard/static/legacy/activity.html +736 -0
  112. claude_mpm/dashboard/static/legacy/agents.html +786 -0
  113. claude_mpm/dashboard/static/legacy/files.html +747 -0
  114. claude_mpm/dashboard/static/legacy/tools.html +831 -0
  115. claude_mpm/dashboard/static/monitors-index.html +218 -0
  116. claude_mpm/dashboard/static/monitors.html +431 -0
  117. claude_mpm/dashboard/static/production/events.html +659 -0
  118. claude_mpm/dashboard/static/production/main.html +715 -0
  119. claude_mpm/dashboard/static/production/monitors.html +483 -0
  120. claude_mpm/dashboard/static/socket.io.min.js +7 -0
  121. claude_mpm/dashboard/static/socket.io.v4.8.1.backup.js +7 -0
  122. claude_mpm/dashboard/static/test-archive/dashboard.html +635 -0
  123. claude_mpm/dashboard/static/test-archive/debug-events.html +147 -0
  124. claude_mpm/dashboard/static/test-archive/test-navigation.html +256 -0
  125. claude_mpm/dashboard/static/test-archive/test-react-exports.html +180 -0
  126. claude_mpm/dashboard/templates/index.html +79 -9
  127. claude_mpm/hooks/claude_hooks/services/connection_manager_http.py +1 -1
  128. claude_mpm/services/agents/deployment/agent_discovery_service.py +3 -0
  129. claude_mpm/services/agents/deployment/agent_template_builder.py +25 -8
  130. claude_mpm/services/agents/deployment/agent_validator.py +3 -0
  131. claude_mpm/services/agents/deployment/validation/template_validator.py +13 -4
  132. claude_mpm/services/agents/local_template_manager.py +2 -6
  133. claude_mpm/services/monitor/daemon.py +1 -2
  134. claude_mpm/services/monitor/daemon_manager.py +2 -5
  135. claude_mpm/services/monitor/event_emitter.py +2 -2
  136. claude_mpm/services/monitor/handlers/code_analysis.py +4 -6
  137. claude_mpm/services/monitor/handlers/hooks.py +2 -4
  138. claude_mpm/services/monitor/server.py +27 -4
  139. claude_mpm/tools/code_tree_analyzer.py +2 -2
  140. {claude_mpm-4.2.44.dist-info → claude_mpm-4.2.51.dist-info}/METADATA +1 -1
  141. {claude_mpm-4.2.44.dist-info → claude_mpm-4.2.51.dist-info}/RECORD +146 -81
  142. claude_mpm/dashboard/static/test-browser-monitor.html +0 -470
  143. claude_mpm/dashboard/static/test-simple.html +0 -97
  144. /claude_mpm/dashboard/static/{test_debug.html → test-archive/test_debug.html} +0 -0
  145. {claude_mpm-4.2.44.dist-info → claude_mpm-4.2.51.dist-info}/WHEEL +0 -0
  146. {claude_mpm-4.2.44.dist-info → claude_mpm-4.2.51.dist-info}/entry_points.txt +0 -0
  147. {claude_mpm-4.2.44.dist-info → claude_mpm-4.2.51.dist-info}/licenses/LICENSE +0 -0
  148. {claude_mpm-4.2.44.dist-info → claude_mpm-4.2.51.dist-info}/top_level.txt +0 -0
@@ -0,0 +1,218 @@
1
+ <!DOCTYPE html>
2
+ <html lang="en">
3
+ <head>
4
+ <meta charset="UTF-8">
5
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
6
+ <title>Claude MPM - Monitor Dashboard</title>
7
+ <style>
8
+ * { margin: 0; padding: 0; box-sizing: border-box; }
9
+
10
+ body {
11
+ font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;
12
+ background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
13
+ color: #fff;
14
+ min-height: 100vh;
15
+ padding: 20px;
16
+ }
17
+
18
+ .container {
19
+ max-width: 1200px;
20
+ margin: 0 auto;
21
+ }
22
+
23
+ .header {
24
+ text-align: center;
25
+ margin-bottom: 40px;
26
+ }
27
+
28
+ .header h1 {
29
+ font-size: 3em;
30
+ margin-bottom: 10px;
31
+ background: linear-gradient(135deg, #fff 0%, #e0e0e0 100%);
32
+ -webkit-background-clip: text;
33
+ -webkit-text-fill-color: transparent;
34
+ }
35
+
36
+ .header p {
37
+ font-size: 1.2em;
38
+ opacity: 0.9;
39
+ }
40
+
41
+ .monitors-grid {
42
+ display: grid;
43
+ grid-template-columns: repeat(auto-fit, minmax(280px, 1fr));
44
+ gap: 20px;
45
+ margin-bottom: 40px;
46
+ }
47
+
48
+ .monitor-card {
49
+ background: rgba(255, 255, 255, 0.1);
50
+ backdrop-filter: blur(10px);
51
+ border-radius: 12px;
52
+ padding: 25px;
53
+ border: 1px solid rgba(255, 255, 255, 0.2);
54
+ transition: transform 0.3s, box-shadow 0.3s;
55
+ cursor: pointer;
56
+ text-decoration: none;
57
+ color: inherit;
58
+ display: block;
59
+ }
60
+
61
+ .monitor-card:hover {
62
+ transform: translateY(-5px);
63
+ box-shadow: 0 10px 30px rgba(0, 0, 0, 0.3);
64
+ }
65
+
66
+ .monitor-icon {
67
+ font-size: 3em;
68
+ margin-bottom: 15px;
69
+ }
70
+
71
+ .monitor-title {
72
+ font-size: 1.5em;
73
+ font-weight: 600;
74
+ margin-bottom: 10px;
75
+ }
76
+
77
+ .monitor-description {
78
+ font-size: 0.95em;
79
+ opacity: 0.8;
80
+ line-height: 1.5;
81
+ }
82
+
83
+ .status-bar {
84
+ background: rgba(255, 255, 255, 0.1);
85
+ backdrop-filter: blur(10px);
86
+ border-radius: 12px;
87
+ padding: 20px;
88
+ border: 1px solid rgba(255, 255, 255, 0.2);
89
+ text-align: center;
90
+ }
91
+
92
+ .status-indicator {
93
+ display: inline-flex;
94
+ align-items: center;
95
+ gap: 10px;
96
+ padding: 10px 20px;
97
+ background: rgba(255, 255, 255, 0.1);
98
+ border-radius: 25px;
99
+ margin: 5px;
100
+ }
101
+
102
+ .status-dot {
103
+ width: 12px;
104
+ height: 12px;
105
+ border-radius: 50%;
106
+ background: #4ade80;
107
+ box-shadow: 0 0 10px #4ade80;
108
+ animation: pulse 2s infinite;
109
+ }
110
+
111
+ .status-dot.disconnected {
112
+ background: #f87171;
113
+ box-shadow: 0 0 10px #f87171;
114
+ }
115
+
116
+ @keyframes pulse {
117
+ 0%, 100% { opacity: 1; }
118
+ 50% { opacity: 0.5; }
119
+ }
120
+
121
+ .demo-notice {
122
+ background: rgba(251, 191, 36, 0.2);
123
+ border: 1px solid rgba(251, 191, 36, 0.5);
124
+ border-radius: 8px;
125
+ padding: 15px;
126
+ margin-top: 20px;
127
+ text-align: center;
128
+ }
129
+
130
+ .demo-notice strong {
131
+ color: #fbbf24;
132
+ }
133
+ </style>
134
+ </head>
135
+ <body>
136
+ <div class="container">
137
+ <div class="header">
138
+ <h1>Claude MPM Monitor Dashboard</h1>
139
+ <p>Real-time monitoring for agents, tools, files, and events</p>
140
+ </div>
141
+
142
+ <div class="monitors-grid">
143
+ <a href="/static/agents.html" class="monitor-card">
144
+ <div class="monitor-icon">🤖</div>
145
+ <div class="monitor-title">Agents Monitor</div>
146
+ <div class="monitor-description">Track agent activities, delegations, and performance in real-time</div>
147
+ </a>
148
+
149
+ <a href="/static/tools.html" class="monitor-card">
150
+ <div class="monitor-icon">🔧</div>
151
+ <div class="monitor-title">Tools Monitor</div>
152
+ <div class="monitor-description">Monitor tool operations, execution times, and success rates</div>
153
+ </a>
154
+
155
+ <a href="/static/files.html" class="monitor-card">
156
+ <div class="monitor-icon">📁</div>
157
+ <div class="monitor-title">Files Monitor</div>
158
+ <div class="monitor-description">Track file operations, modifications, and access patterns</div>
159
+ </a>
160
+
161
+ <a href="/static/events.html" class="monitor-card">
162
+ <div class="monitor-icon">📊</div>
163
+ <div class="monitor-title">Events Stream</div>
164
+ <div class="monitor-description">View raw event stream with filtering and search capabilities</div>
165
+ </a>
166
+
167
+ <a href="/static/dashboard.html" class="monitor-card">
168
+ <div class="monitor-icon">📈</div>
169
+ <div class="monitor-title">Main Dashboard</div>
170
+ <div class="monitor-description">Comprehensive tabbed view with all monitoring features</div>
171
+ </a>
172
+
173
+ <a href="/static/test-socket.html" class="monitor-card">
174
+ <div class="monitor-icon">🧪</div>
175
+ <div class="monitor-title">Connection Test</div>
176
+ <div class="monitor-description">Debug Socket.IO connection and test event flow</div>
177
+ </a>
178
+ </div>
179
+
180
+ <div class="status-bar">
181
+ <h3 style="margin-bottom: 15px;">Connection Status</h3>
182
+ <div class="status-indicator">
183
+ <div class="status-dot" id="connectionDot"></div>
184
+ <span id="connectionStatus">Checking connection...</span>
185
+ </div>
186
+ <div class="status-indicator">
187
+ <span>Server: <strong>localhost:8765</strong></span>
188
+ </div>
189
+ </div>
190
+
191
+ <div class="demo-notice">
192
+ <strong>💡 Demo Mode:</strong> Add <code>?demo</code> to any monitor URL to see simulated data
193
+ <br>Example: <code>/static/agents.html?demo</code>
194
+ </div>
195
+ </div>
196
+
197
+ <script src="/static/socket.io.min.js"></script>
198
+ <script>
199
+ // Test Socket.IO connection
200
+ const socket = io('http://localhost:8765');
201
+
202
+ socket.on('connect', () => {
203
+ document.getElementById('connectionDot').classList.remove('disconnected');
204
+ document.getElementById('connectionStatus').textContent = 'Connected to Socket.IO server';
205
+ });
206
+
207
+ socket.on('disconnect', () => {
208
+ document.getElementById('connectionDot').classList.add('disconnected');
209
+ document.getElementById('connectionStatus').textContent = 'Disconnected from server';
210
+ });
211
+
212
+ socket.on('connect_error', () => {
213
+ document.getElementById('connectionDot').classList.add('disconnected');
214
+ document.getElementById('connectionStatus').textContent = 'Connection error';
215
+ });
216
+ </script>
217
+ </body>
218
+ </html>
@@ -0,0 +1,431 @@
1
+ <!DOCTYPE html>
2
+ <html lang="en">
3
+ <head>
4
+ <meta charset="UTF-8">
5
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
6
+ <title>Claude MPM - Dashboard Monitors</title>
7
+
8
+ <style>
9
+ * {
10
+ margin: 0;
11
+ padding: 0;
12
+ box-sizing: border-box;
13
+ }
14
+
15
+ body {
16
+ font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, sans-serif;
17
+ background: linear-gradient(135deg, #0f0f1e 0%, #1a1a2e 100%);
18
+ color: #e0e0e0;
19
+ width: 100vw;
20
+ height: 100vh;
21
+ overflow: hidden;
22
+ display: flex;
23
+ flex-direction: column;
24
+ }
25
+
26
+ .container {
27
+ width: 100%;
28
+ height: 100%;
29
+ padding: 40px 20px;
30
+ overflow-y: auto;
31
+ }
32
+
33
+ .header {
34
+ text-align: center;
35
+ margin-bottom: 50px;
36
+ }
37
+
38
+ .header h1 {
39
+ font-size: 48px;
40
+ margin-bottom: 10px;
41
+ background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
42
+ -webkit-background-clip: text;
43
+ -webkit-text-fill-color: transparent;
44
+ letter-spacing: -1px;
45
+ }
46
+
47
+ .header p {
48
+ font-size: 18px;
49
+ color: rgba(255, 255, 255, 0.6);
50
+ }
51
+
52
+ .monitors-grid {
53
+ display: grid;
54
+ grid-template-columns: repeat(auto-fit, minmax(280px, 1fr));
55
+ gap: 30px;
56
+ margin-bottom: 40px;
57
+ }
58
+
59
+ .monitor-card {
60
+ background: rgba(255, 255, 255, 0.05);
61
+ backdrop-filter: blur(10px);
62
+ border-radius: 16px;
63
+ padding: 30px;
64
+ border: 1px solid rgba(255, 255, 255, 0.1);
65
+ transition: transform 0.3s, box-shadow 0.3s;
66
+ cursor: pointer;
67
+ text-decoration: none;
68
+ color: inherit;
69
+ display: block;
70
+ position: relative;
71
+ overflow: hidden;
72
+ }
73
+
74
+ .monitor-card::before {
75
+ content: '';
76
+ position: absolute;
77
+ top: 0;
78
+ left: 0;
79
+ right: 0;
80
+ height: 4px;
81
+ background: linear-gradient(90deg, var(--gradient-start), var(--gradient-end));
82
+ opacity: 0;
83
+ transition: opacity 0.3s;
84
+ }
85
+
86
+ .monitor-card:hover::before {
87
+ opacity: 1;
88
+ }
89
+
90
+ .monitor-card:hover {
91
+ transform: translateY(-10px);
92
+ box-shadow: 0 20px 40px rgba(0, 0, 0, 0.3);
93
+ }
94
+
95
+ .monitor-card.agents {
96
+ --gradient-start: #667eea;
97
+ --gradient-end: #764ba2;
98
+ }
99
+
100
+ .monitor-card.tools {
101
+ --gradient-start: #60a5fa;
102
+ --gradient-end: #3b82f6;
103
+ }
104
+
105
+ .monitor-card.files {
106
+ --gradient-start: #fbbf24;
107
+ --gradient-end: #f59e0b;
108
+ }
109
+
110
+ .monitor-card.events {
111
+ --gradient-start: #10b981;
112
+ --gradient-end: #06b6d4;
113
+ }
114
+
115
+ .monitor-card.dashboard {
116
+ --gradient-start: #ec4899;
117
+ --gradient-end: #8b5cf6;
118
+ }
119
+
120
+ .monitor-card.demo {
121
+ --gradient-start: #f87171;
122
+ --gradient-end: #ef4444;
123
+ }
124
+
125
+ .monitor-icon {
126
+ font-size: 48px;
127
+ margin-bottom: 20px;
128
+ }
129
+
130
+ .monitor-title {
131
+ font-size: 24px;
132
+ font-weight: 600;
133
+ margin-bottom: 10px;
134
+ }
135
+
136
+ .monitor-description {
137
+ font-size: 14px;
138
+ color: rgba(255, 255, 255, 0.6);
139
+ line-height: 1.5;
140
+ margin-bottom: 20px;
141
+ }
142
+
143
+ .monitor-features {
144
+ list-style: none;
145
+ font-size: 13px;
146
+ color: rgba(255, 255, 255, 0.8);
147
+ }
148
+
149
+ .monitor-features li {
150
+ padding: 5px 0;
151
+ padding-left: 20px;
152
+ position: relative;
153
+ }
154
+
155
+ .monitor-features li::before {
156
+ content: '✓';
157
+ position: absolute;
158
+ left: 0;
159
+ color: #4ade80;
160
+ }
161
+
162
+ .monitor-badge {
163
+ display: inline-block;
164
+ padding: 4px 10px;
165
+ background: rgba(255, 255, 255, 0.1);
166
+ border-radius: 20px;
167
+ font-size: 11px;
168
+ text-transform: uppercase;
169
+ margin-top: 15px;
170
+ font-weight: 600;
171
+ }
172
+
173
+ .monitor-badge.new {
174
+ background: rgba(74, 222, 128, 0.2);
175
+ color: #4ade80;
176
+ }
177
+
178
+ .monitor-badge.live {
179
+ background: rgba(251, 191, 36, 0.2);
180
+ color: #fbbf24;
181
+ }
182
+
183
+ .info-section {
184
+ background: rgba(255, 255, 255, 0.05);
185
+ backdrop-filter: blur(10px);
186
+ border-radius: 16px;
187
+ padding: 30px;
188
+ border: 1px solid rgba(255, 255, 255, 0.1);
189
+ margin-bottom: 40px;
190
+ }
191
+
192
+ .info-section h2 {
193
+ font-size: 20px;
194
+ margin-bottom: 15px;
195
+ color: #60a5fa;
196
+ }
197
+
198
+ .info-section p {
199
+ font-size: 14px;
200
+ line-height: 1.6;
201
+ color: rgba(255, 255, 255, 0.8);
202
+ margin-bottom: 10px;
203
+ }
204
+
205
+ .info-section code {
206
+ background: rgba(0, 0, 0, 0.3);
207
+ padding: 2px 6px;
208
+ border-radius: 4px;
209
+ font-family: 'Courier New', monospace;
210
+ font-size: 13px;
211
+ color: #fbbf24;
212
+ }
213
+
214
+ .connection-status {
215
+ text-align: center;
216
+ padding: 20px;
217
+ background: rgba(255, 255, 255, 0.05);
218
+ border-radius: 12px;
219
+ margin-bottom: 30px;
220
+ }
221
+
222
+ .status-dot {
223
+ display: inline-block;
224
+ width: 12px;
225
+ height: 12px;
226
+ border-radius: 50%;
227
+ margin-right: 8px;
228
+ animation: pulse 2s infinite;
229
+ }
230
+
231
+ .status-dot.checking {
232
+ background: #fbbf24;
233
+ }
234
+
235
+ @keyframes pulse {
236
+ 0%, 100% { opacity: 1; }
237
+ 50% { opacity: 0.5; }
238
+ }
239
+
240
+ .footer {
241
+ text-align: center;
242
+ padding: 30px 0;
243
+ color: rgba(255, 255, 255, 0.4);
244
+ font-size: 14px;
245
+ }
246
+
247
+ .footer a {
248
+ color: #60a5fa;
249
+ text-decoration: none;
250
+ }
251
+
252
+ .footer a:hover {
253
+ text-decoration: underline;
254
+ }
255
+ </style>
256
+ </head>
257
+ <body>
258
+ <div class="container">
259
+ <div class="header">
260
+ <h1>Claude MPM Dashboard</h1>
261
+ <p>Real-time monitoring and visualization tools</p>
262
+ </div>
263
+
264
+ <div class="connection-status">
265
+ <span class="status-dot checking"></span>
266
+ <span id="connectionInfo">Socket.IO Server: localhost:8765</span>
267
+ </div>
268
+
269
+ <div class="info-section">
270
+ <h2>Getting Started</h2>
271
+ <p>Each monitor connects to the Socket.IO server at <code>localhost:8765</code> to receive real-time events.</p>
272
+ <p>All monitors use a shared Zustand store for state management with clean separation of concerns.</p>
273
+ <p>To test with demo data, append <code>?demo</code> to any monitor URL.</p>
274
+ </div>
275
+
276
+ <div class="monitors-grid">
277
+ <a href="agents.html" class="monitor-card agents">
278
+ <div class="monitor-icon">🤖</div>
279
+ <div class="monitor-title">Agents Monitor</div>
280
+ <div class="monitor-description">
281
+ Track agent activities, status, and hierarchies in real-time
282
+ </div>
283
+ <ul class="monitor-features">
284
+ <li>Live agent status tracking</li>
285
+ <li>Agent hierarchy visualization</li>
286
+ <li>Task progress monitoring</li>
287
+ <li>Search and filter capabilities</li>
288
+ </ul>
289
+ <span class="monitor-badge live">LIVE</span>
290
+ </a>
291
+
292
+ <a href="tools.html" class="monitor-card tools">
293
+ <div class="monitor-icon">🛠️</div>
294
+ <div class="monitor-title">Tools Monitor</div>
295
+ <div class="monitor-description">
296
+ Monitor tool operations, performance, and execution history
297
+ </div>
298
+ <ul class="monitor-features">
299
+ <li>Active tool tracking</li>
300
+ <li>Operation timeline</li>
301
+ <li>Success rate statistics</li>
302
+ <li>Performance metrics</li>
303
+ </ul>
304
+ <span class="monitor-badge live">LIVE</span>
305
+ </a>
306
+
307
+ <a href="files.html" class="monitor-card files">
308
+ <div class="monitor-icon">📁</div>
309
+ <div class="monitor-title">Files Monitor</div>
310
+ <div class="monitor-description">
311
+ Track file operations, modifications, and system interactions
312
+ </div>
313
+ <ul class="monitor-features">
314
+ <li>File operation tracking</li>
315
+ <li>Working directory display</li>
316
+ <li>Operation statistics</li>
317
+ <li>Recent activity feed</li>
318
+ </ul>
319
+ <span class="monitor-badge live">LIVE</span>
320
+ </a>
321
+
322
+ <a href="events.html" class="monitor-card events">
323
+ <div class="monitor-icon">📊</div>
324
+ <div class="monitor-title">Events Stream</div>
325
+ <div class="monitor-description">
326
+ Raw event stream with filtering, search, and export capabilities
327
+ </div>
328
+ <ul class="monitor-features">
329
+ <li>Real-time event stream</li>
330
+ <li>Advanced filtering</li>
331
+ <li>JSON syntax highlighting</li>
332
+ <li>Export functionality</li>
333
+ </ul>
334
+ <span class="monitor-badge new">NEW</span>
335
+ </a>
336
+
337
+ <a href="dashboard.html" class="monitor-card dashboard">
338
+ <div class="monitor-icon">📈</div>
339
+ <div class="monitor-title">Full Dashboard</div>
340
+ <div class="monitor-description">
341
+ Complete dashboard with all monitoring capabilities combined
342
+ </div>
343
+ <ul class="monitor-features">
344
+ <li>All monitors in one view</li>
345
+ <li>Tabbed interface</li>
346
+ <li>Session management</li>
347
+ <li>Export capabilities</li>
348
+ </ul>
349
+ </a>
350
+
351
+ <a href="agents.html?demo" class="monitor-card demo">
352
+ <div class="monitor-icon">🎮</div>
353
+ <div class="monitor-title">Demo Mode</div>
354
+ <div class="monitor-description">
355
+ Test monitors with simulated data without live connection
356
+ </div>
357
+ <ul class="monitor-features">
358
+ <li>Simulated events</li>
359
+ <li>Test all features</li>
360
+ <li>No server required</li>
361
+ <li>Perfect for development</li>
362
+ </ul>
363
+ <span class="monitor-badge">DEMO</span>
364
+ </a>
365
+ </div>
366
+
367
+ <div class="info-section">
368
+ <h2>Architecture</h2>
369
+ <p>All monitors share a centralized Zustand store (<code>/js/stores/dashboard-store.js</code>) that manages:</p>
370
+ <ul style="margin-left: 20px; margin-top: 10px;">
371
+ <li>Socket.IO connection and reconnection logic</li>
372
+ <li>Event processing and state updates</li>
373
+ <li>Data transformations and filtering</li>
374
+ <li>Statistics and performance metrics</li>
375
+ </ul>
376
+ <p style="margin-top: 15px;">Each page subscribes to specific state slices for optimal performance and clean separation of concerns.</p>
377
+ </div>
378
+
379
+ <div class="footer">
380
+ <p>Claude MPM Dashboard v1.0.0</p>
381
+ <p>Built with Zustand, Socket.IO, and vanilla JavaScript</p>
382
+ <p><a href="https://github.com/bobmatnyc/claude-mpm">View on GitHub</a></p>
383
+ </div>
384
+ </div>
385
+
386
+ <script>
387
+ // Check if Socket.IO server is running
388
+ const checkConnection = async () => {
389
+ try {
390
+ const response = await fetch('http://localhost:8765/socket.io/?EIO=4&transport=polling');
391
+ const statusDot = document.querySelector('.status-dot');
392
+ const connectionInfo = document.getElementById('connectionInfo');
393
+
394
+ if (response.ok) {
395
+ statusDot.style.background = '#4ade80';
396
+ connectionInfo.textContent = 'Socket.IO Server: Connected at localhost:8765';
397
+ } else {
398
+ statusDot.style.background = '#f87171';
399
+ connectionInfo.textContent = 'Socket.IO Server: Not responding at localhost:8765';
400
+ }
401
+ } catch (error) {
402
+ const statusDot = document.querySelector('.status-dot');
403
+ const connectionInfo = document.getElementById('connectionInfo');
404
+ statusDot.style.background = '#f87171';
405
+ connectionInfo.textContent = 'Socket.IO Server: Not running at localhost:8765';
406
+ }
407
+ };
408
+
409
+ // Check connection on load
410
+ checkConnection();
411
+
412
+ // Add hover effect for cards
413
+ document.querySelectorAll('.monitor-card').forEach(card => {
414
+ card.addEventListener('mouseenter', (e) => {
415
+ const icon = card.querySelector('.monitor-icon');
416
+ if (icon) {
417
+ icon.style.transform = 'scale(1.2)';
418
+ icon.style.transition = 'transform 0.3s';
419
+ }
420
+ });
421
+
422
+ card.addEventListener('mouseleave', (e) => {
423
+ const icon = card.querySelector('.monitor-icon');
424
+ if (icon) {
425
+ icon.style.transform = 'scale(1)';
426
+ }
427
+ });
428
+ });
429
+ </script>
430
+ </body>
431
+ </html>