claude-mpm 3.4.10__py3-none-any.whl → 3.4.14__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- claude_mpm/cli/commands/run.py +10 -10
- claude_mpm/dashboard/index.html +13 -0
- claude_mpm/dashboard/static/css/dashboard.css +2722 -0
- claude_mpm/dashboard/static/js/components/agent-inference.js +619 -0
- claude_mpm/dashboard/static/js/components/event-processor.js +641 -0
- claude_mpm/dashboard/static/js/components/event-viewer.js +914 -0
- claude_mpm/dashboard/static/js/components/export-manager.js +362 -0
- claude_mpm/dashboard/static/js/components/file-tool-tracker.js +611 -0
- claude_mpm/dashboard/static/js/components/hud-library-loader.js +211 -0
- claude_mpm/dashboard/static/js/components/hud-manager.js +671 -0
- claude_mpm/dashboard/static/js/components/hud-visualizer.js +1718 -0
- claude_mpm/dashboard/static/js/components/module-viewer.js +2701 -0
- claude_mpm/dashboard/static/js/components/session-manager.js +520 -0
- claude_mpm/dashboard/static/js/components/socket-manager.js +343 -0
- claude_mpm/dashboard/static/js/components/ui-state-manager.js +427 -0
- claude_mpm/dashboard/static/js/components/working-directory.js +866 -0
- claude_mpm/dashboard/static/js/dashboard-original.js +4134 -0
- claude_mpm/dashboard/static/js/dashboard.js +1978 -0
- claude_mpm/dashboard/static/js/socket-client.js +537 -0
- claude_mpm/dashboard/templates/index.html +346 -0
- claude_mpm/dashboard/test_dashboard.html +372 -0
- claude_mpm/scripts/socketio_daemon.py +51 -6
- claude_mpm/services/socketio_server.py +41 -5
- {claude_mpm-3.4.10.dist-info → claude_mpm-3.4.14.dist-info}/METADATA +2 -1
- {claude_mpm-3.4.10.dist-info → claude_mpm-3.4.14.dist-info}/RECORD +29 -9
- {claude_mpm-3.4.10.dist-info → claude_mpm-3.4.14.dist-info}/WHEEL +0 -0
- {claude_mpm-3.4.10.dist-info → claude_mpm-3.4.14.dist-info}/entry_points.txt +0 -0
- {claude_mpm-3.4.10.dist-info → claude_mpm-3.4.14.dist-info}/licenses/LICENSE +0 -0
- {claude_mpm-3.4.10.dist-info → claude_mpm-3.4.14.dist-info}/top_level.txt +0 -0
|
@@ -0,0 +1,372 @@
|
|
|
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 Test</title>
|
|
7
|
+
<link rel="icon" type="image/svg+xml" href="data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMzIiIGhlaWdodD0iMzIiIHZpZXdCb3g9IjAgMCAzMiAzMiIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8cmVjdCB3aWR0aD0iMzIiIGhlaWdodD0iMzIiIHJ4PSI2IiBmaWxsPSIjNDI5OWUxIi8+CiAgPHRleHQgeD0iMTYiIHk9IjIxIiBmb250LWZhbWlseT0iSGVsdmV0aWNhLCBBcmlhbCwgc2Fucy1zZXJpZiIgZm9udC1zaXplPSIxMCIgZm9udC13ZWlnaHQ9ImJvbGQiIGZpbGw9IndoaXRlIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIj5NUE08L3RleHQ+Cjwvc3ZnPgo=">
|
|
8
|
+
|
|
9
|
+
<!-- Test version using relative paths for verification -->
|
|
10
|
+
<script src="https://cdn.socket.io/4.7.5/socket.io.min.js"></script>
|
|
11
|
+
<link rel="stylesheet" href="static/css/dashboard.css">
|
|
12
|
+
|
|
13
|
+
<!-- Additional styles for file operations -->
|
|
14
|
+
<style>
|
|
15
|
+
.file-item {
|
|
16
|
+
background: white;
|
|
17
|
+
border-radius: 6px;
|
|
18
|
+
padding: 12px;
|
|
19
|
+
margin-bottom: 8px;
|
|
20
|
+
border-left: 4px solid #4299e1;
|
|
21
|
+
cursor: pointer;
|
|
22
|
+
transition: all 0.2s;
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
.file-item:hover {
|
|
26
|
+
box-shadow: 0 2px 8px rgba(0, 0, 0, 0.1);
|
|
27
|
+
transform: translateX(2px);
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
.file-header {
|
|
31
|
+
display: flex;
|
|
32
|
+
align-items: center;
|
|
33
|
+
gap: 8px;
|
|
34
|
+
margin-bottom: 4px;
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
.file-icon {
|
|
38
|
+
font-size: 16px;
|
|
39
|
+
min-width: 20px;
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
.file-path {
|
|
43
|
+
flex: 1;
|
|
44
|
+
font-family: 'SF Mono', Monaco, 'Cascadia Code', monospace;
|
|
45
|
+
font-size: 13px;
|
|
46
|
+
color: #2d3748;
|
|
47
|
+
word-break: break-all;
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
.file-timestamp {
|
|
51
|
+
font-size: 12px;
|
|
52
|
+
color: #718096;
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
.file-summary {
|
|
56
|
+
font-size: 12px;
|
|
57
|
+
color: #4a5568;
|
|
58
|
+
margin-left: 28px;
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
.operation-item {
|
|
62
|
+
background: #f8fafc;
|
|
63
|
+
border: 1px solid #e2e8f0;
|
|
64
|
+
border-radius: 6px;
|
|
65
|
+
padding: 10px;
|
|
66
|
+
margin-bottom: 8px;
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
.operation-header {
|
|
70
|
+
display: flex;
|
|
71
|
+
align-items: center;
|
|
72
|
+
gap: 8px;
|
|
73
|
+
margin-bottom: 6px;
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
.operation-icon {
|
|
77
|
+
font-size: 14px;
|
|
78
|
+
min-width: 16px;
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
.operation-type {
|
|
82
|
+
font-weight: 600;
|
|
83
|
+
color: #2d3748;
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
.operation-timestamp {
|
|
87
|
+
margin-left: auto;
|
|
88
|
+
font-size: 11px;
|
|
89
|
+
color: #718096;
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
.operation-details {
|
|
93
|
+
font-size: 12px;
|
|
94
|
+
color: #4a5568;
|
|
95
|
+
line-height: 1.4;
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
.file-details {
|
|
99
|
+
background: white;
|
|
100
|
+
border-radius: 6px;
|
|
101
|
+
padding: 15px;
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
.file-path-display {
|
|
105
|
+
font-size: 14px;
|
|
106
|
+
margin-bottom: 15px;
|
|
107
|
+
padding-bottom: 10px;
|
|
108
|
+
border-bottom: 1px solid #e2e8f0;
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
.operations-list {
|
|
112
|
+
max-height: 400px;
|
|
113
|
+
overflow-y: auto;
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
.test-status {
|
|
117
|
+
position: fixed;
|
|
118
|
+
top: 20px;
|
|
119
|
+
right: 20px;
|
|
120
|
+
background: #f7fafc;
|
|
121
|
+
border: 1px solid #e2e8f0;
|
|
122
|
+
border-radius: 8px;
|
|
123
|
+
padding: 15px;
|
|
124
|
+
max-width: 300px;
|
|
125
|
+
z-index: 1001;
|
|
126
|
+
}
|
|
127
|
+
|
|
128
|
+
.test-item {
|
|
129
|
+
display: flex;
|
|
130
|
+
align-items: center;
|
|
131
|
+
gap: 8px;
|
|
132
|
+
margin-bottom: 5px;
|
|
133
|
+
font-size: 12px;
|
|
134
|
+
}
|
|
135
|
+
|
|
136
|
+
.test-pass { color: #38a169; }
|
|
137
|
+
.test-fail { color: #e53e3e; }
|
|
138
|
+
.test-pending { color: #d69e2e; }
|
|
139
|
+
</style>
|
|
140
|
+
</head>
|
|
141
|
+
<body>
|
|
142
|
+
<!-- Test Status Panel -->
|
|
143
|
+
<div class="test-status">
|
|
144
|
+
<h4>🧪 Module Test Status</h4>
|
|
145
|
+
<div id="test-results">
|
|
146
|
+
<div class="test-item test-pending">⏳ Loading modules...</div>
|
|
147
|
+
</div>
|
|
148
|
+
</div>
|
|
149
|
+
|
|
150
|
+
<div class="container">
|
|
151
|
+
<!-- Header Section -->
|
|
152
|
+
<div class="header">
|
|
153
|
+
<!-- Row 1: Title, Status, Metrics -->
|
|
154
|
+
<div class="header-row">
|
|
155
|
+
<div class="header-title">
|
|
156
|
+
<h1>🚀 Claude MPM Monitor (Modular Test)</h1>
|
|
157
|
+
<div id="connection-status" class="status-badge status-disconnected">
|
|
158
|
+
<span>●</span> Disconnected
|
|
159
|
+
</div>
|
|
160
|
+
</div>
|
|
161
|
+
<div class="metrics-widget">
|
|
162
|
+
<div class="metric-mini">
|
|
163
|
+
<div class="metric-mini-value" id="total-events">0</div>
|
|
164
|
+
<div class="metric-mini-label">Events</div>
|
|
165
|
+
</div>
|
|
166
|
+
<div class="metric-mini">
|
|
167
|
+
<div class="metric-mini-value" id="events-per-minute">0</div>
|
|
168
|
+
<div class="metric-mini-label">Per Min</div>
|
|
169
|
+
</div>
|
|
170
|
+
<div class="metric-mini">
|
|
171
|
+
<div class="metric-mini-value" id="unique-types">0</div>
|
|
172
|
+
<div class="metric-mini-label">Types</div>
|
|
173
|
+
</div>
|
|
174
|
+
<div class="metric-mini">
|
|
175
|
+
<div class="metric-mini-value" id="error-count">0</div>
|
|
176
|
+
<div class="metric-mini-label">Errors</div>
|
|
177
|
+
</div>
|
|
178
|
+
</div>
|
|
179
|
+
</div>
|
|
180
|
+
|
|
181
|
+
<!-- Row 2: Connection Controls and Session Selection -->
|
|
182
|
+
<div class="header-row">
|
|
183
|
+
<div class="connection-controls">
|
|
184
|
+
<button id="connect-btn">Connect</button>
|
|
185
|
+
<button id="disconnect-btn" class="btn-secondary">Disconnect</button>
|
|
186
|
+
<input type="text" id="port-input" value="8765" placeholder="Port">
|
|
187
|
+
</div>
|
|
188
|
+
<div class="session-group">
|
|
189
|
+
<label>Session:</label>
|
|
190
|
+
<select id="session-select" class="session-select">
|
|
191
|
+
<option value="">All Sessions</option>
|
|
192
|
+
</select>
|
|
193
|
+
<button class="btn-secondary">Refresh</button>
|
|
194
|
+
</div>
|
|
195
|
+
<div class="action-buttons">
|
|
196
|
+
<button class="btn-secondary">Clear</button>
|
|
197
|
+
<button class="btn-success">Export</button>
|
|
198
|
+
</div>
|
|
199
|
+
</div>
|
|
200
|
+
</div>
|
|
201
|
+
|
|
202
|
+
<!-- Main Content Area -->
|
|
203
|
+
<div class="events-wrapper">
|
|
204
|
+
<!-- Split container for module viewer and tabbed content -->
|
|
205
|
+
<div class="split-container">
|
|
206
|
+
<!-- Left: Module Viewer -->
|
|
207
|
+
<div class="module-viewer">
|
|
208
|
+
<div class="module-header">
|
|
209
|
+
<h4>📁 Event Analysis</h4>
|
|
210
|
+
<button class="btn-secondary" style="font-size: 11px; padding: 4px 8px;">Clear</button>
|
|
211
|
+
</div>
|
|
212
|
+
<div class="module-content" id="module-content">
|
|
213
|
+
<div class="module-empty">
|
|
214
|
+
<p>Click on an event to view details</p>
|
|
215
|
+
<p class="module-hint">Events are organized by class</p>
|
|
216
|
+
</div>
|
|
217
|
+
</div>
|
|
218
|
+
</div>
|
|
219
|
+
|
|
220
|
+
<!-- Right: Tabbed Content -->
|
|
221
|
+
<div class="events-container">
|
|
222
|
+
<!-- Tab Navigation -->
|
|
223
|
+
<div class="tab-nav">
|
|
224
|
+
<button class="tab-button active">📊 Events</button>
|
|
225
|
+
<button class="tab-button">🤖 Agents</button>
|
|
226
|
+
<button class="tab-button">🔧 Tools</button>
|
|
227
|
+
<button class="tab-button">📁 Files</button>
|
|
228
|
+
</div>
|
|
229
|
+
|
|
230
|
+
<!-- Events Tab -->
|
|
231
|
+
<div class="tab-content active" id="events-tab">
|
|
232
|
+
<div class="tab-filters">
|
|
233
|
+
<input type="text" id="events-search-input" placeholder="Search events...">
|
|
234
|
+
<select id="events-type-filter">
|
|
235
|
+
<option value="">All Events</option>
|
|
236
|
+
<!-- Event types will be dynamically populated from actual event data -->
|
|
237
|
+
</select>
|
|
238
|
+
</div>
|
|
239
|
+
<div class="events-list" id="events-list">
|
|
240
|
+
<div class="no-events">
|
|
241
|
+
Connect to Socket.IO server to see events...
|
|
242
|
+
</div>
|
|
243
|
+
</div>
|
|
244
|
+
</div>
|
|
245
|
+
|
|
246
|
+
<!-- Agents Tab -->
|
|
247
|
+
<div class="tab-content" id="agents-tab">
|
|
248
|
+
<div class="tab-filters">
|
|
249
|
+
<input type="text" id="agents-search-input" placeholder="Search agents...">
|
|
250
|
+
<select id="agents-type-filter">
|
|
251
|
+
<option value="">All Agents</option>
|
|
252
|
+
<option value="research">Research</option>
|
|
253
|
+
<option value="engineer">Engineer</option>
|
|
254
|
+
<option value="pm">Project Manager</option>
|
|
255
|
+
<option value="ops">Operations</option>
|
|
256
|
+
</select>
|
|
257
|
+
</div>
|
|
258
|
+
<div class="events-list" id="agents-list">
|
|
259
|
+
<div class="no-events">
|
|
260
|
+
No agent events found...
|
|
261
|
+
</div>
|
|
262
|
+
</div>
|
|
263
|
+
</div>
|
|
264
|
+
|
|
265
|
+
<!-- Tools Tab -->
|
|
266
|
+
<div class="tab-content" id="tools-tab">
|
|
267
|
+
<div class="tab-filters">
|
|
268
|
+
<input type="text" id="tools-search-input" placeholder="Search tools...">
|
|
269
|
+
<select id="tools-type-filter">
|
|
270
|
+
<option value="">All Tools</option>
|
|
271
|
+
<option value="Read">Read</option>
|
|
272
|
+
<option value="Write">Write</option>
|
|
273
|
+
<option value="Edit">Edit</option>
|
|
274
|
+
<option value="Bash">Bash</option>
|
|
275
|
+
<option value="Grep">Grep</option>
|
|
276
|
+
<option value="Glob">Glob</option>
|
|
277
|
+
</select>
|
|
278
|
+
</div>
|
|
279
|
+
<div class="events-list" id="tools-list">
|
|
280
|
+
<div class="no-events">
|
|
281
|
+
No tool events found...
|
|
282
|
+
</div>
|
|
283
|
+
</div>
|
|
284
|
+
</div>
|
|
285
|
+
|
|
286
|
+
<!-- Files Tab -->
|
|
287
|
+
<div class="tab-content" id="files-tab">
|
|
288
|
+
<div class="tab-filters">
|
|
289
|
+
<input type="text" id="files-search-input" placeholder="Search files...">
|
|
290
|
+
<select id="files-type-filter">
|
|
291
|
+
<option value="">All Operations</option>
|
|
292
|
+
<option value="read">Read</option>
|
|
293
|
+
<option value="write">Write</option>
|
|
294
|
+
<option value="edit">Edit</option>
|
|
295
|
+
<option value="search">Search</option>
|
|
296
|
+
</select>
|
|
297
|
+
</div>
|
|
298
|
+
<div class="events-list" id="files-list">
|
|
299
|
+
<div class="no-events">
|
|
300
|
+
No file operations found...
|
|
301
|
+
</div>
|
|
302
|
+
</div>
|
|
303
|
+
</div>
|
|
304
|
+
</div>
|
|
305
|
+
</div>
|
|
306
|
+
</div>
|
|
307
|
+
</div>
|
|
308
|
+
|
|
309
|
+
<!-- Footer -->
|
|
310
|
+
<div class="footer">
|
|
311
|
+
<div class="footer-content">
|
|
312
|
+
<div class="footer-item">
|
|
313
|
+
<span class="footer-label">Session:</span>
|
|
314
|
+
<span class="footer-value" id="footer-session">All Sessions</span>
|
|
315
|
+
</div>
|
|
316
|
+
<span class="footer-divider">|</span>
|
|
317
|
+
<div class="footer-item">
|
|
318
|
+
<span class="footer-label">Directory:</span>
|
|
319
|
+
<span class="footer-value" id="footer-working-dir">Unknown</span>
|
|
320
|
+
</div>
|
|
321
|
+
<span class="footer-divider">|</span>
|
|
322
|
+
<div class="footer-item">
|
|
323
|
+
<span class="footer-label">Branch:</span>
|
|
324
|
+
<span class="footer-value" id="footer-git-branch">Unknown</span>
|
|
325
|
+
</div>
|
|
326
|
+
</div>
|
|
327
|
+
</div>
|
|
328
|
+
|
|
329
|
+
<!-- JavaScript Modules -->
|
|
330
|
+
<script src="static/js/socket-client.js"></script>
|
|
331
|
+
<script src="static/js/components/event-viewer.js"></script>
|
|
332
|
+
<script src="static/js/components/module-viewer.js"></script>
|
|
333
|
+
<script src="static/js/components/session-manager.js"></script>
|
|
334
|
+
<script src="static/js/dashboard.js"></script>
|
|
335
|
+
|
|
336
|
+
<!-- Test Script -->
|
|
337
|
+
<script>
|
|
338
|
+
// Simple test to verify modules loaded correctly
|
|
339
|
+
setTimeout(() => {
|
|
340
|
+
const results = document.getElementById('test-results');
|
|
341
|
+
const tests = [
|
|
342
|
+
{ name: 'SocketClient', check: () => typeof SocketClient !== 'undefined' },
|
|
343
|
+
{ name: 'EventViewer', check: () => typeof EventViewer !== 'undefined' },
|
|
344
|
+
{ name: 'ModuleViewer', check: () => typeof ModuleViewer !== 'undefined' },
|
|
345
|
+
{ name: 'SessionManager', check: () => typeof SessionManager !== 'undefined' },
|
|
346
|
+
{ name: 'Dashboard', check: () => typeof Dashboard !== 'undefined' },
|
|
347
|
+
{ name: 'Dashboard Instance', check: () => typeof window.dashboard !== 'undefined' },
|
|
348
|
+
{ name: 'Global Functions', check: () => typeof connectSocket !== 'undefined' }
|
|
349
|
+
];
|
|
350
|
+
|
|
351
|
+
let html = '';
|
|
352
|
+
let allPass = true;
|
|
353
|
+
|
|
354
|
+
tests.forEach(test => {
|
|
355
|
+
const passed = test.check();
|
|
356
|
+
const status = passed ? 'test-pass' : 'test-fail';
|
|
357
|
+
const icon = passed ? '✅' : '❌';
|
|
358
|
+
html += `<div class="test-item ${status}">${icon} ${test.name}</div>`;
|
|
359
|
+
if (!passed) allPass = false;
|
|
360
|
+
});
|
|
361
|
+
|
|
362
|
+
if (allPass) {
|
|
363
|
+
html += '<div class="test-item test-pass">🎉 All modules loaded successfully!</div>';
|
|
364
|
+
} else {
|
|
365
|
+
html += '<div class="test-item test-fail">⚠️ Some modules failed to load</div>';
|
|
366
|
+
}
|
|
367
|
+
|
|
368
|
+
results.innerHTML = html;
|
|
369
|
+
}, 1000);
|
|
370
|
+
</script>
|
|
371
|
+
</body>
|
|
372
|
+
</html>
|
|
@@ -19,12 +19,57 @@ try:
|
|
|
19
19
|
# When installed as package, this should work directly
|
|
20
20
|
from claude_mpm.services.socketio_server import SocketIOServer
|
|
21
21
|
except ImportError:
|
|
22
|
-
#
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
22
|
+
# Need to add the appropriate directory to sys.path
|
|
23
|
+
import sys
|
|
24
|
+
|
|
25
|
+
# Get the absolute path of this script
|
|
26
|
+
script_path = Path(__file__).resolve()
|
|
27
|
+
|
|
28
|
+
# Determine if we're in development or installed environment
|
|
29
|
+
if "site-packages" in str(script_path):
|
|
30
|
+
# Installed environment: ~/.local/pipx/venvs/claude-mpm/lib/python3.13/site-packages/claude_mpm/scripts/socketio_daemon.py
|
|
31
|
+
# Need to add site-packages directory to path
|
|
32
|
+
parts = script_path.parts
|
|
33
|
+
site_packages_idx = next(i for i, part in enumerate(parts) if part == "site-packages")
|
|
34
|
+
site_packages_path = Path(*parts[:site_packages_idx + 1])
|
|
35
|
+
|
|
36
|
+
if site_packages_path.exists() and str(site_packages_path) not in sys.path:
|
|
37
|
+
sys.path.insert(0, str(site_packages_path))
|
|
38
|
+
else:
|
|
39
|
+
# Development environment: Project/src/claude_mpm/scripts/socketio_daemon.py
|
|
40
|
+
# Need to add src directory to path
|
|
41
|
+
# Go up: scripts -> claude_mpm -> src
|
|
42
|
+
src_path = script_path.parent.parent.parent
|
|
43
|
+
|
|
44
|
+
if src_path.exists() and (src_path / "claude_mpm").exists() and str(src_path) not in sys.path:
|
|
45
|
+
sys.path.insert(0, str(src_path))
|
|
46
|
+
|
|
47
|
+
# Try importing again after path modification
|
|
48
|
+
try:
|
|
49
|
+
from claude_mpm.services.socketio_server import SocketIOServer
|
|
50
|
+
except ImportError as e:
|
|
51
|
+
print(f"❌ Failed to import SocketIOServer after path adjustment: {e}")
|
|
52
|
+
print(f"📍 Script path: {script_path}")
|
|
53
|
+
print(f"🐍 Python path entries: {len(sys.path)}")
|
|
54
|
+
for i, path in enumerate(sys.path):
|
|
55
|
+
print(f" [{i}] {path}")
|
|
56
|
+
|
|
57
|
+
# Check if claude_mpm directory exists in any path
|
|
58
|
+
claude_mpm_found = False
|
|
59
|
+
for path_str in sys.path:
|
|
60
|
+
claude_mpm_path = Path(path_str) / "claude_mpm"
|
|
61
|
+
if claude_mpm_path.exists():
|
|
62
|
+
print(f"✅ Found claude_mpm at: {claude_mpm_path}")
|
|
63
|
+
claude_mpm_found = True
|
|
64
|
+
|
|
65
|
+
if not claude_mpm_found:
|
|
66
|
+
print("❌ claude_mpm directory not found in any sys.path entry")
|
|
67
|
+
|
|
68
|
+
print("\n💡 Troubleshooting tips:")
|
|
69
|
+
print(" 1. Ensure claude-mpm is properly installed: pip install claude-mpm")
|
|
70
|
+
print(" 2. If in development, ensure you're in the project root directory")
|
|
71
|
+
print(" 3. Check that PYTHONPATH includes the package location")
|
|
72
|
+
sys.exit(1)
|
|
28
73
|
|
|
29
74
|
PID_FILE = Path.home() / ".claude-mpm" / "socketio-server.pid"
|
|
30
75
|
LOG_FILE = Path.home() / ".claude-mpm" / "socketio-server.log"
|
|
@@ -348,13 +348,49 @@ class SocketIOServer:
|
|
|
348
348
|
|
|
349
349
|
async def _handle_dashboard(self, request):
|
|
350
350
|
"""Serve the dashboard HTML file."""
|
|
351
|
-
|
|
352
|
-
|
|
353
|
-
|
|
354
|
-
|
|
351
|
+
# Try to find dashboard path using multiple approaches
|
|
352
|
+
dashboard_path = None
|
|
353
|
+
|
|
354
|
+
# Approach 1: Use module-relative path (works in installed environment)
|
|
355
|
+
try:
|
|
356
|
+
import claude_mpm.dashboard
|
|
357
|
+
dashboard_module_path = Path(claude_mpm.dashboard.__file__).parent
|
|
358
|
+
candidate_path = dashboard_module_path / "templates" / "index.html"
|
|
359
|
+
if candidate_path.exists():
|
|
360
|
+
dashboard_path = candidate_path
|
|
361
|
+
self.logger.info(f"Found dashboard using module path: {dashboard_path}")
|
|
362
|
+
except Exception as e:
|
|
363
|
+
self.logger.debug(f"Module-relative path failed: {e}")
|
|
364
|
+
|
|
365
|
+
# Approach 2: Use project root (works in development environment)
|
|
366
|
+
if dashboard_path is None:
|
|
367
|
+
try:
|
|
368
|
+
candidate_path = get_project_root() / 'src' / 'claude_mpm' / 'dashboard' / 'templates' / 'index.html'
|
|
369
|
+
if candidate_path.exists():
|
|
370
|
+
dashboard_path = candidate_path
|
|
371
|
+
self.logger.info(f"Found dashboard using project root: {dashboard_path}")
|
|
372
|
+
except Exception as e:
|
|
373
|
+
self.logger.debug(f"Project root path failed: {e}")
|
|
374
|
+
|
|
375
|
+
# Approach 3: Search for dashboard in package installation
|
|
376
|
+
if dashboard_path is None:
|
|
377
|
+
try:
|
|
378
|
+
candidate_path = get_project_root() / 'claude_mpm' / 'dashboard' / 'templates' / 'index.html'
|
|
379
|
+
if candidate_path.exists():
|
|
380
|
+
dashboard_path = candidate_path
|
|
381
|
+
self.logger.info(f"Found dashboard using package path: {dashboard_path}")
|
|
382
|
+
except Exception as e:
|
|
383
|
+
self.logger.debug(f"Package path failed: {e}")
|
|
384
|
+
|
|
385
|
+
if dashboard_path and dashboard_path.exists():
|
|
355
386
|
return web.FileResponse(str(dashboard_path))
|
|
356
387
|
else:
|
|
357
|
-
|
|
388
|
+
error_msg = f"Dashboard not found. Searched paths:\n"
|
|
389
|
+
error_msg += f"1. Module-relative: {dashboard_module_path / 'templates' / 'index.html' if 'dashboard_module_path' in locals() else 'N/A'}\n"
|
|
390
|
+
error_msg += f"2. Development: {get_project_root() / 'src' / 'claude_mpm' / 'dashboard' / 'templates' / 'index.html'}\n"
|
|
391
|
+
error_msg += f"3. Package: {get_project_root() / 'claude_mpm' / 'dashboard' / 'templates' / 'index.html'}"
|
|
392
|
+
self.logger.error(error_msg)
|
|
393
|
+
return web.Response(text=error_msg, status=404)
|
|
358
394
|
|
|
359
395
|
async def _handle_cors_preflight(self, request):
|
|
360
396
|
"""Handle CORS preflight requests."""
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: claude-mpm
|
|
3
|
-
Version: 3.4.
|
|
3
|
+
Version: 3.4.14
|
|
4
4
|
Summary: Claude Multi-agent Project Manager - Clean orchestration with ticket management
|
|
5
5
|
Home-page: https://github.com/bobmatnyc/claude-mpm
|
|
6
6
|
Author: Claude MPM Team
|
|
@@ -34,6 +34,7 @@ Requires-Dist: tree-sitter>=0.21.0
|
|
|
34
34
|
Requires-Dist: tree-sitter-language-pack>=0.8.0
|
|
35
35
|
Requires-Dist: python-socketio>=5.11.0
|
|
36
36
|
Requires-Dist: aiohttp>=3.9.0
|
|
37
|
+
Requires-Dist: aiohttp-cors>=0.8.0
|
|
37
38
|
Requires-Dist: python-engineio>=4.8.0
|
|
38
39
|
Provides-Extra: dev
|
|
39
40
|
Requires-Dist: pytest>=7.0; extra == "dev"
|
|
@@ -43,7 +43,7 @@ claude_mpm/cli/commands/agents.py,sha256=FqqEQcfAfCxjz_E7fGQUtLznloJLz8fWQtnjQhk
|
|
|
43
43
|
claude_mpm/cli/commands/info.py,sha256=ETL6jC08OTQVTPjs219Y0m3FzfKOUlI0-yI81AI8FXY,2990
|
|
44
44
|
claude_mpm/cli/commands/memory.py,sha256=6jYD1bgfnWA0DvBpLJnZCPYMRoGAPBopAED8Qr-iIos,37357
|
|
45
45
|
claude_mpm/cli/commands/monitor.py,sha256=80_tmSdfn_2cYpzxxPu9GnvFW0eixlSJ4wCqbn8VSCM,12407
|
|
46
|
-
claude_mpm/cli/commands/run.py,sha256=
|
|
46
|
+
claude_mpm/cli/commands/run.py,sha256=xgiffMozZucZ4ELk6-sTQBn6FWC059OHsXx4vsZgyOc,30139
|
|
47
47
|
claude_mpm/cli/commands/tickets.py,sha256=SXyGtHSyGJwTeJwDAHf7kRbdiG1DlZkXkod5UoNy7Ik,2150
|
|
48
48
|
claude_mpm/cli/commands/ui.py,sha256=FhBQiOKW61cNduyryRu0UhC366d6o1eEkBgbPd7Au1w,1900
|
|
49
49
|
claude_mpm/cli_module/__init__.py,sha256=CkMp4gzWKoZZF_qKyBDi2sQaZw_GLWZYLtKouv-4f8s,390
|
|
@@ -75,7 +75,27 @@ claude_mpm/core/session_manager.py,sha256=D6ZA7bHAgfdkv0nLKjza0FKDng5iqi___IESrb
|
|
|
75
75
|
claude_mpm/core/simple_runner.py,sha256=qcbjmRSGD3R_Kt9OmHBexZMY8RpCRbtXRKZAJ31ZGUU,44076
|
|
76
76
|
claude_mpm/core/socketio_pool.py,sha256=B83uDsmqRF5S0QDwwatyKS-m2SdTvotCVfc3_2uQxd8,22438
|
|
77
77
|
claude_mpm/core/tool_access_control.py,sha256=htZbDhC8s7D7BVqfmk0BwRrYJnlnUAk8_NeJKOaeNlg,6632
|
|
78
|
+
claude_mpm/dashboard/index.html,sha256=lXd4WCDn46w9a6edUpGQIy5DtCmiTvDerd1vY97Ule8,451
|
|
78
79
|
claude_mpm/dashboard/open_dashboard.py,sha256=aXUc6LzUMwmTQMkl_h2jjvICimr-ED4FPMHP_9mnrgQ,1108
|
|
80
|
+
claude_mpm/dashboard/test_dashboard.html,sha256=Aakmm9O-pWld_CCXLuUBOJC81Ix9D1avytTN93u0zfc,15090
|
|
81
|
+
claude_mpm/dashboard/static/css/dashboard.css,sha256=z2Z9jLWoPsC71gdQQML9D9Dkr54XnpKhcz4jomCKfdY,49692
|
|
82
|
+
claude_mpm/dashboard/static/js/dashboard-original.js,sha256=MfrEvUbvB-sU67wslVBEYmk2q9d0s2a_u1NWodJNQrc,162374
|
|
83
|
+
claude_mpm/dashboard/static/js/dashboard.js,sha256=vCRjE6HfxQ4VGqe8sML2_8lX0w6qoaZF0AmWjKVldpM,72056
|
|
84
|
+
claude_mpm/dashboard/static/js/socket-client.js,sha256=hjh-HGAlTpaX0Cr6A7DG75TZjujPFcRQSdw7FrysCWQ,18912
|
|
85
|
+
claude_mpm/dashboard/static/js/components/agent-inference.js,sha256=vOSzIGrbGcjLwbQSs4NUIT-KMsAtsdHGcW2LI8W1YQk,24350
|
|
86
|
+
claude_mpm/dashboard/static/js/components/event-processor.js,sha256=nohjjqOqc6W1O0XHQDZ7vJ92t6sIsnoMSruCysT37SI,25268
|
|
87
|
+
claude_mpm/dashboard/static/js/components/event-viewer.js,sha256=kbRtHcsR3ZmMGK2jmTd3MJ1Ga6FkZJ0IQNrdmGoSrMY,32810
|
|
88
|
+
claude_mpm/dashboard/static/js/components/export-manager.js,sha256=vaBVwLnjzmS_euyeG5Kuq-LHbINcOAcMdibZtgvrUJk,12032
|
|
89
|
+
claude_mpm/dashboard/static/js/components/file-tool-tracker.js,sha256=yTshamd2bOVJFl2p6hCg0kpRZxpIpkX4hSrvMOyfIX4,23968
|
|
90
|
+
claude_mpm/dashboard/static/js/components/hud-library-loader.js,sha256=LDeHIgoSc_ucgWOWgKqXogeKwf9ClGJTBUErLG3SxzE,7289
|
|
91
|
+
claude_mpm/dashboard/static/js/components/hud-manager.js,sha256=W-mUqEAiR6zIQAoTT-Tz3_OpwnNRg3KjV_3Ujm6LG04,26538
|
|
92
|
+
claude_mpm/dashboard/static/js/components/hud-visualizer.js,sha256=C78tZ9if-qhxhfUX3-PMezCBSw9apb3Exp_R23ZmU7I,62850
|
|
93
|
+
claude_mpm/dashboard/static/js/components/module-viewer.js,sha256=ZUQpk6U-GmvrRl2N4nm6P7TkG-m4ZKH3rJbg2Ks0x0A,108693
|
|
94
|
+
claude_mpm/dashboard/static/js/components/session-manager.js,sha256=9BkA4NzM_4k9M7-swh4gaHL4Pfd_lxlcsRX13Wfc81A,19990
|
|
95
|
+
claude_mpm/dashboard/static/js/components/socket-manager.js,sha256=x0mKU7gIpIkfAPVyCY3i6Idy_QbxfW5Pc3vqv4zgSvg,12362
|
|
96
|
+
claude_mpm/dashboard/static/js/components/ui-state-manager.js,sha256=5Ligdos7L_UTWMtCW34Y7BNh7msdd9ArCr-7Yr9-VS8,12979
|
|
97
|
+
claude_mpm/dashboard/static/js/components/working-directory.js,sha256=YGyTP0vCaRc9qR7g2d1INShG0-0_X-xkqCW2IF82eXc,33213
|
|
98
|
+
claude_mpm/dashboard/templates/index.html,sha256=ONVRsfpsqmvQDuz9d3QTaF2zN08YoQM9kU-Bxri4660,14997
|
|
79
99
|
claude_mpm/experimental/cli_enhancements.py,sha256=-N5f2u9TaxUcOJegUd3lt1FRz5ErEyYUvvgrNmMRL7Q,11814
|
|
80
100
|
claude_mpm/generators/__init__.py,sha256=l53aBn6kBQSDz3b6bZkMCJBcEmYnV9hHEZq8LKzXgH8,152
|
|
81
101
|
claude_mpm/generators/agent_profile_generator.py,sha256=2HjOscogSyvrtQj8KwdgNPS6Ym_QvgX1BMeauQZewZA,5751
|
|
@@ -113,7 +133,7 @@ claude_mpm/orchestration/archive/subprocess_orchestrator.py,sha256=TYTAHX6p4OpgB
|
|
|
113
133
|
claude_mpm/orchestration/archive/system_prompt_orchestrator.py,sha256=R16sc-94kQVeGjJzTYmvKn0aYgj_9qxyzShDy1E5zpE,12853
|
|
114
134
|
claude_mpm/orchestration/archive/wrapper_orchestrator.py,sha256=cvL0NJf9kCWf3QJl67ySwvtR1Hd9Rym28Ii8Rtsdi6Q,6806
|
|
115
135
|
claude_mpm/schemas/workflow_validator.py,sha256=qRgGodJoIZQaLfZ8OzWz3Y9eVNz3ckrQwkJ2RvccxAs,17175
|
|
116
|
-
claude_mpm/scripts/socketio_daemon.py,sha256
|
|
136
|
+
claude_mpm/scripts/socketio_daemon.py,sha256=-vS7A55BQZCTbqcB7QAgWvZrcBqtIxcyriFcekgKIBU,9568
|
|
117
137
|
claude_mpm/services/__init__.py,sha256=dcZ5U4xQlk-zpAy8CLTuEcXzKDfHT0KdJf3bYSmZ1BM,1904
|
|
118
138
|
claude_mpm/services/agent_capabilities_generator.py,sha256=hWG0zV2InmzrDMxSbQzjVBBTzEaxg0bFxl8tmTMJ8qA,6565
|
|
119
139
|
claude_mpm/services/agent_deployment.py,sha256=DtK1BX2yCrutUkQdVPD01mYHm-ya36l3EPOnEcaDfog,67961
|
|
@@ -139,7 +159,7 @@ claude_mpm/services/project_analyzer.py,sha256=3Ub_Tpcxm0LnYgcAipebvWr6TfofVqZNM
|
|
|
139
159
|
claude_mpm/services/recovery_manager.py,sha256=K46vXbEWbxFUoS42s34OxN1rkddpisGG7E_ZdRyAZ-A,25792
|
|
140
160
|
claude_mpm/services/shared_prompt_cache.py,sha256=D04lrRWyg0lHyqGcAHy7IYvRHRKSg6EOpAJwBUPa2wk,29890
|
|
141
161
|
claude_mpm/services/socketio_client_manager.py,sha256=2Ly63iiGA_BUzf73UwQDu9Q75wA1C4O1CWFv8hi8bms,18074
|
|
142
|
-
claude_mpm/services/socketio_server.py,sha256=
|
|
162
|
+
claude_mpm/services/socketio_server.py,sha256=6sCeHdZHW3glxrI_ZzynUwFQ7a-iO5OXnAtIDu7B3oY,81395
|
|
143
163
|
claude_mpm/services/standalone_socketio_server.py,sha256=TfdtwdtlKA6cZyTon9O7zkSeu0H-1HpW0te7vu1r3o0,55214
|
|
144
164
|
claude_mpm/services/ticket_manager.py,sha256=Ki11YjBkDax8BFVSaDdOBk3K4VU5gvdbgq9AmCyyoZ0,7454
|
|
145
165
|
claude_mpm/services/ticket_manager_di.py,sha256=pIsIGncbboKzBYSRQTO7ZX5MuQzV6iFfIflvKe6u1jw,11123
|
|
@@ -193,9 +213,9 @@ claude_mpm/utils/path_operations.py,sha256=6pLMnAWBVzHkgp6JyQHmHbGD-dWn-nX21yV4E
|
|
|
193
213
|
claude_mpm/utils/paths.py,sha256=Xv0SZWdZRkRjN9e6clBcA165ya00GNQxt7SwMz51tfA,10153
|
|
194
214
|
claude_mpm/validation/__init__.py,sha256=bJ19g9lnk7yIjtxzN8XPegp87HTFBzCrGQOpFgRTf3g,155
|
|
195
215
|
claude_mpm/validation/agent_validator.py,sha256=GCA2b2rKhKDeaNyUqWxTiWIs3sDdWjD9cgOFRp9K6ic,18227
|
|
196
|
-
claude_mpm-3.4.
|
|
197
|
-
claude_mpm-3.4.
|
|
198
|
-
claude_mpm-3.4.
|
|
199
|
-
claude_mpm-3.4.
|
|
200
|
-
claude_mpm-3.4.
|
|
201
|
-
claude_mpm-3.4.
|
|
216
|
+
claude_mpm-3.4.14.dist-info/licenses/LICENSE,sha256=cSdDfXjoTVhstrERrqme4zgxAu4GubU22zVEHsiXGxs,1071
|
|
217
|
+
claude_mpm-3.4.14.dist-info/METADATA,sha256=A2ldIPNi-3VTlgSXiwiSbnIxAqjov4jOfc1aNYDylAk,6499
|
|
218
|
+
claude_mpm-3.4.14.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
|
|
219
|
+
claude_mpm-3.4.14.dist-info/entry_points.txt,sha256=3_d7wLrg9sRmQ1SfrFGWoTNL8Wrd6lQb2XVSYbTwRIg,324
|
|
220
|
+
claude_mpm-3.4.14.dist-info/top_level.txt,sha256=1nUg3FEaBySgm8t-s54jK5zoPnu3_eY6EP6IOlekyHA,11
|
|
221
|
+
claude_mpm-3.4.14.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|