claude-mpm 3.4.13__py3-none-any.whl → 3.4.16__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 (27) hide show
  1. claude_mpm/dashboard/index.html +13 -0
  2. claude_mpm/dashboard/static/css/dashboard.css +2722 -0
  3. claude_mpm/dashboard/static/js/components/agent-inference.js +619 -0
  4. claude_mpm/dashboard/static/js/components/event-processor.js +641 -0
  5. claude_mpm/dashboard/static/js/components/event-viewer.js +914 -0
  6. claude_mpm/dashboard/static/js/components/export-manager.js +362 -0
  7. claude_mpm/dashboard/static/js/components/file-tool-tracker.js +611 -0
  8. claude_mpm/dashboard/static/js/components/hud-library-loader.js +211 -0
  9. claude_mpm/dashboard/static/js/components/hud-manager.js +671 -0
  10. claude_mpm/dashboard/static/js/components/hud-visualizer.js +1718 -0
  11. claude_mpm/dashboard/static/js/components/module-viewer.js +2701 -0
  12. claude_mpm/dashboard/static/js/components/session-manager.js +520 -0
  13. claude_mpm/dashboard/static/js/components/socket-manager.js +343 -0
  14. claude_mpm/dashboard/static/js/components/ui-state-manager.js +427 -0
  15. claude_mpm/dashboard/static/js/components/working-directory.js +866 -0
  16. claude_mpm/dashboard/static/js/dashboard-original.js +4134 -0
  17. claude_mpm/dashboard/static/js/dashboard.js +1978 -0
  18. claude_mpm/dashboard/static/js/socket-client.js +537 -0
  19. claude_mpm/dashboard/templates/index.html +346 -0
  20. claude_mpm/dashboard/test_dashboard.html +372 -0
  21. claude_mpm/services/socketio_server.py +111 -7
  22. {claude_mpm-3.4.13.dist-info → claude_mpm-3.4.16.dist-info}/METADATA +2 -1
  23. {claude_mpm-3.4.13.dist-info → claude_mpm-3.4.16.dist-info}/RECORD +27 -7
  24. {claude_mpm-3.4.13.dist-info → claude_mpm-3.4.16.dist-info}/WHEEL +0 -0
  25. {claude_mpm-3.4.13.dist-info → claude_mpm-3.4.16.dist-info}/entry_points.txt +0 -0
  26. {claude_mpm-3.4.13.dist-info → claude_mpm-3.4.16.dist-info}/licenses/LICENSE +0 -0
  27. {claude_mpm-3.4.13.dist-info → claude_mpm-3.4.16.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>
@@ -15,6 +15,7 @@ import time
15
15
  from datetime import datetime
16
16
  from typing import Set, Dict, Any, Optional, List
17
17
  from collections import deque
18
+ from pathlib import Path
18
19
 
19
20
  try:
20
21
  import socketio
@@ -294,9 +295,12 @@ class SocketIOServer:
294
295
  self.app.router.add_get('/dashboard', self._handle_dashboard)
295
296
 
296
297
  # Add static file serving for web assets
297
- static_path = get_project_root() / 'src' / 'claude_mpm' / 'dashboard' / 'static'
298
- if static_path.exists():
298
+ static_path = self._find_static_path()
299
+ if static_path and static_path.exists():
299
300
  self.app.router.add_static('/static/', path=str(static_path), name='static')
301
+ self.logger.info(f"Static files served from: {static_path}")
302
+ else:
303
+ self.logger.warning("Static files directory not found - CSS/JS files will not be available")
300
304
 
301
305
  # Register event handlers
302
306
  self._register_events()
@@ -346,15 +350,115 @@ class SocketIOServer:
346
350
  'Access-Control-Allow-Headers': 'Content-Type, Accept'
347
351
  })
348
352
 
353
+ def _find_static_path(self):
354
+ """Find the static files directory using multiple approaches.
355
+
356
+ WHY: Static files need to be found in both development and installed environments.
357
+ This uses the same multi-approach pattern as dashboard HTML resolution.
358
+ """
359
+
360
+ # Approach 1: Use module-relative path (works in installed environment)
361
+ try:
362
+ import claude_mpm.dashboard
363
+
364
+ # Try __file__ attribute first
365
+ if hasattr(claude_mpm.dashboard, '__file__') and claude_mpm.dashboard.__file__:
366
+ dashboard_module_path = Path(claude_mpm.dashboard.__file__).parent
367
+ candidate_path = dashboard_module_path / "static"
368
+ if candidate_path.exists():
369
+ self.logger.info(f"Found static files using module __file__ path: {candidate_path}")
370
+ return candidate_path
371
+
372
+ # Try __path__ attribute for namespace packages
373
+ elif hasattr(claude_mpm.dashboard, '__path__') and claude_mpm.dashboard.__path__:
374
+ # __path__ is a list, take the first entry
375
+ dashboard_module_path = Path(claude_mpm.dashboard.__path__[0])
376
+ candidate_path = dashboard_module_path / "static"
377
+ if candidate_path.exists():
378
+ self.logger.info(f"Found static files using module __path__: {candidate_path}")
379
+ return candidate_path
380
+
381
+ except Exception as e:
382
+ self.logger.debug(f"Module-relative static path failed: {e}")
383
+
384
+ # Approach 2: Use project root (works in development environment)
385
+ try:
386
+ candidate_path = get_project_root() / 'src' / 'claude_mpm' / 'dashboard' / 'static'
387
+ if candidate_path.exists():
388
+ self.logger.info(f"Found static files using project root: {candidate_path}")
389
+ return candidate_path
390
+ except Exception as e:
391
+ self.logger.debug(f"Project root static path failed: {e}")
392
+
393
+ # Approach 3: Search for static files in package installation
394
+ try:
395
+ candidate_path = get_project_root() / 'claude_mpm' / 'dashboard' / 'static'
396
+ if candidate_path.exists():
397
+ self.logger.info(f"Found static files using package path: {candidate_path}")
398
+ return candidate_path
399
+ except Exception as e:
400
+ self.logger.debug(f"Package static path failed: {e}")
401
+
402
+ return None
403
+
349
404
  async def _handle_dashboard(self, request):
350
405
  """Serve the dashboard HTML file."""
351
- dashboard_path = get_project_root() / 'src' / 'claude_mpm' / 'dashboard' / 'templates' / 'index.html'
352
- self.logger.info(f"Dashboard requested, looking for: {dashboard_path}")
353
- self.logger.info(f"Path exists: {dashboard_path.exists()}")
354
- if dashboard_path.exists():
406
+ # Try to find dashboard path using multiple approaches
407
+ dashboard_path = None
408
+
409
+ # Approach 1: Use module-relative path (works in installed environment)
410
+ try:
411
+ import claude_mpm.dashboard
412
+
413
+ # Try __file__ attribute first
414
+ if hasattr(claude_mpm.dashboard, '__file__') and claude_mpm.dashboard.__file__:
415
+ dashboard_module_path = Path(claude_mpm.dashboard.__file__).parent
416
+ candidate_path = dashboard_module_path / "templates" / "index.html"
417
+ if candidate_path.exists():
418
+ dashboard_path = candidate_path
419
+ self.logger.info(f"Found dashboard using module __file__ path: {dashboard_path}")
420
+
421
+ # Try __path__ attribute for namespace packages
422
+ elif hasattr(claude_mpm.dashboard, '__path__') and claude_mpm.dashboard.__path__:
423
+ # __path__ is a list, take the first entry
424
+ dashboard_module_path = Path(claude_mpm.dashboard.__path__[0])
425
+ candidate_path = dashboard_module_path / "templates" / "index.html"
426
+ if candidate_path.exists():
427
+ dashboard_path = candidate_path
428
+ self.logger.info(f"Found dashboard using module __path__: {dashboard_path}")
429
+
430
+ except Exception as e:
431
+ self.logger.debug(f"Module-relative path failed: {e}")
432
+
433
+ # Approach 2: Use project root (works in development environment)
434
+ if dashboard_path is None:
435
+ try:
436
+ candidate_path = get_project_root() / 'src' / 'claude_mpm' / 'dashboard' / 'templates' / 'index.html'
437
+ if candidate_path.exists():
438
+ dashboard_path = candidate_path
439
+ self.logger.info(f"Found dashboard using project root: {dashboard_path}")
440
+ except Exception as e:
441
+ self.logger.debug(f"Project root path failed: {e}")
442
+
443
+ # Approach 3: Search for dashboard in package installation
444
+ if dashboard_path is None:
445
+ try:
446
+ candidate_path = get_project_root() / 'claude_mpm' / 'dashboard' / 'templates' / 'index.html'
447
+ if candidate_path.exists():
448
+ dashboard_path = candidate_path
449
+ self.logger.info(f"Found dashboard using package path: {dashboard_path}")
450
+ except Exception as e:
451
+ self.logger.debug(f"Package path failed: {e}")
452
+
453
+ if dashboard_path and dashboard_path.exists():
355
454
  return web.FileResponse(str(dashboard_path))
356
455
  else:
357
- return web.Response(text=f"Dashboard not found at: {dashboard_path}", status=404)
456
+ error_msg = f"Dashboard not found. Searched paths:\n"
457
+ error_msg += f"1. Module-relative: {dashboard_module_path / 'templates' / 'index.html' if 'dashboard_module_path' in locals() else 'N/A'}\n"
458
+ error_msg += f"2. Development: {get_project_root() / 'src' / 'claude_mpm' / 'dashboard' / 'templates' / 'index.html'}\n"
459
+ error_msg += f"3. Package: {get_project_root() / 'claude_mpm' / 'dashboard' / 'templates' / 'index.html'}"
460
+ self.logger.error(error_msg)
461
+ return web.Response(text=error_msg, status=404)
358
462
 
359
463
  async def _handle_cors_preflight(self, request):
360
464
  """Handle CORS preflight requests."""
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: claude-mpm
3
- Version: 3.4.13
3
+ Version: 3.4.16
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"
@@ -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
@@ -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=kVqSdOrQMg3oQHKsR3ZJPDumVVPnL5TsqCvbHGWraqw,79406
162
+ claude_mpm/services/socketio_server.py,sha256=E1i_YrUFa7AKdxfKgNkC0daUzytA8qiHRJxD_JRcXPk,84929
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.13.dist-info/licenses/LICENSE,sha256=cSdDfXjoTVhstrERrqme4zgxAu4GubU22zVEHsiXGxs,1071
197
- claude_mpm-3.4.13.dist-info/METADATA,sha256=pwQp4ScPXDl8ER7DnVWAVF88FqLn1XxTPkp_THy21Z8,6464
198
- claude_mpm-3.4.13.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
199
- claude_mpm-3.4.13.dist-info/entry_points.txt,sha256=3_d7wLrg9sRmQ1SfrFGWoTNL8Wrd6lQb2XVSYbTwRIg,324
200
- claude_mpm-3.4.13.dist-info/top_level.txt,sha256=1nUg3FEaBySgm8t-s54jK5zoPnu3_eY6EP6IOlekyHA,11
201
- claude_mpm-3.4.13.dist-info/RECORD,,
216
+ claude_mpm-3.4.16.dist-info/licenses/LICENSE,sha256=cSdDfXjoTVhstrERrqme4zgxAu4GubU22zVEHsiXGxs,1071
217
+ claude_mpm-3.4.16.dist-info/METADATA,sha256=yLlPpKYEh2CCxxk250Xuo7uSEBNX74LycyuBBHdhQ18,6499
218
+ claude_mpm-3.4.16.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
219
+ claude_mpm-3.4.16.dist-info/entry_points.txt,sha256=3_d7wLrg9sRmQ1SfrFGWoTNL8Wrd6lQb2XVSYbTwRIg,324
220
+ claude_mpm-3.4.16.dist-info/top_level.txt,sha256=1nUg3FEaBySgm8t-s54jK5zoPnu3_eY6EP6IOlekyHA,11
221
+ claude_mpm-3.4.16.dist-info/RECORD,,