claude-mpm 4.2.5__py3-none-any.whl → 4.2.6__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/VERSION +1 -1
- claude_mpm/cli/commands/dashboard.py +90 -37
- claude_mpm/services/dashboard/stable_server.py +70 -27
- {claude_mpm-4.2.5.dist-info → claude_mpm-4.2.6.dist-info}/METADATA +1 -1
- {claude_mpm-4.2.5.dist-info → claude_mpm-4.2.6.dist-info}/RECORD +9 -9
- {claude_mpm-4.2.5.dist-info → claude_mpm-4.2.6.dist-info}/WHEEL +0 -0
- {claude_mpm-4.2.5.dist-info → claude_mpm-4.2.6.dist-info}/entry_points.txt +0 -0
- {claude_mpm-4.2.5.dist-info → claude_mpm-4.2.6.dist-info}/licenses/LICENSE +0 -0
- {claude_mpm-4.2.5.dist-info → claude_mpm-4.2.6.dist-info}/top_level.txt +0 -0
claude_mpm/VERSION
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
4.2.
|
|
1
|
+
4.2.6
|
|
@@ -71,9 +71,11 @@ class DashboardCommand(BaseCommand):
|
|
|
71
71
|
port = getattr(args, "port", 8765)
|
|
72
72
|
host = getattr(args, "host", "localhost")
|
|
73
73
|
background = getattr(args, "background", False)
|
|
74
|
+
use_stable = getattr(args, "stable", True) # Default to stable server
|
|
75
|
+
debug = getattr(args, "debug", False)
|
|
74
76
|
|
|
75
77
|
self.logger.info(
|
|
76
|
-
f"Starting dashboard on {host}:{port} (background: {background})"
|
|
78
|
+
f"Starting dashboard on {host}:{port} (background: {background}, stable: {use_stable})"
|
|
77
79
|
)
|
|
78
80
|
|
|
79
81
|
# Check if dashboard is already running
|
|
@@ -100,47 +102,98 @@ class DashboardCommand(BaseCommand):
|
|
|
100
102
|
},
|
|
101
103
|
)
|
|
102
104
|
return CommandResult.error_result("Failed to start dashboard in background")
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
print("\
|
|
105
|
+
|
|
106
|
+
# Run in foreground mode
|
|
107
|
+
server_started = False
|
|
108
|
+
|
|
109
|
+
# Try stable server first (or if explicitly requested)
|
|
110
|
+
if use_stable:
|
|
111
|
+
try:
|
|
112
|
+
self.logger.info("Starting stable dashboard server (no monitor dependency)...")
|
|
113
|
+
print(f"Starting stable dashboard server on {host}:{port}...")
|
|
114
|
+
print("Press Ctrl+C to stop the server")
|
|
115
|
+
print("\n✅ Using stable server - works without monitor service\n")
|
|
116
|
+
|
|
117
|
+
# Create and run the stable server
|
|
118
|
+
from ...services.dashboard.stable_server import StableDashboardServer
|
|
119
|
+
stable_server = StableDashboardServer(host=host, port=port, debug=debug)
|
|
120
|
+
|
|
121
|
+
# Set up signal handlers for graceful shutdown
|
|
122
|
+
def signal_handler(signum, frame):
|
|
123
|
+
print("\nShutting down dashboard server...")
|
|
124
|
+
sys.exit(0)
|
|
125
|
+
|
|
126
|
+
signal.signal(signal.SIGINT, signal_handler)
|
|
127
|
+
signal.signal(signal.SIGTERM, signal_handler)
|
|
128
|
+
|
|
129
|
+
# Run the server (blocking)
|
|
130
|
+
if stable_server.run():
|
|
131
|
+
server_started = True
|
|
132
|
+
return CommandResult.success_result("Dashboard server stopped")
|
|
133
|
+
else:
|
|
134
|
+
self.logger.warning("Stable server failed to start, trying advanced server...")
|
|
135
|
+
|
|
136
|
+
except KeyboardInterrupt:
|
|
137
|
+
print("\nDashboard server stopped by user")
|
|
138
|
+
return CommandResult.success_result("Dashboard server stopped")
|
|
139
|
+
except Exception as e:
|
|
140
|
+
self.logger.warning(f"Stable server failed: {e}")
|
|
141
|
+
if not getattr(args, "no_fallback", False):
|
|
142
|
+
print(f"\n⚠️ Stable server failed: {e}")
|
|
143
|
+
print("Attempting fallback to advanced server...")
|
|
144
|
+
else:
|
|
145
|
+
return CommandResult.error_result(f"Failed to start stable dashboard: {e}")
|
|
146
|
+
|
|
147
|
+
# Fallback to advanced DashboardServer if stable server failed or not requested
|
|
148
|
+
if not server_started and not getattr(args, "stable_only", False):
|
|
149
|
+
try:
|
|
150
|
+
self.logger.info("Attempting to start advanced dashboard server with monitor...")
|
|
151
|
+
print(f"\nStarting advanced dashboard server on {host}:{port}...")
|
|
152
|
+
print("Note: This requires monitor service on port 8766")
|
|
153
|
+
print("Press Ctrl+C to stop the server")
|
|
154
|
+
|
|
155
|
+
# Create and start the Dashboard server (with monitor client)
|
|
156
|
+
self.server = DashboardServer(host=host, port=port)
|
|
157
|
+
|
|
158
|
+
# Set up signal handlers for graceful shutdown
|
|
159
|
+
def signal_handler(signum, frame):
|
|
160
|
+
print("\nShutting down dashboard server...")
|
|
161
|
+
if self.server:
|
|
162
|
+
self.server.stop_sync()
|
|
163
|
+
sys.exit(0)
|
|
164
|
+
|
|
165
|
+
signal.signal(signal.SIGINT, signal_handler)
|
|
166
|
+
signal.signal(signal.SIGTERM, signal_handler)
|
|
167
|
+
|
|
168
|
+
# Start the server (this starts in background thread)
|
|
169
|
+
self.server.start_sync()
|
|
170
|
+
|
|
171
|
+
# Keep the main thread alive while server is running
|
|
172
|
+
# The server runs in a background thread, so we need to block here
|
|
173
|
+
try:
|
|
174
|
+
while self.server.is_running():
|
|
175
|
+
time.sleep(1)
|
|
176
|
+
except KeyboardInterrupt:
|
|
177
|
+
# Ctrl+C pressed, stop the server
|
|
178
|
+
pass
|
|
179
|
+
|
|
180
|
+
# Server has stopped or user interrupted
|
|
114
181
|
if self.server:
|
|
115
182
|
self.server.stop_sync()
|
|
116
|
-
sys.exit(0)
|
|
117
183
|
|
|
118
|
-
|
|
119
|
-
signal.signal(signal.SIGTERM, signal_handler)
|
|
184
|
+
return CommandResult.success_result("Dashboard server stopped")
|
|
120
185
|
|
|
121
|
-
# Start the server (this starts in background thread)
|
|
122
|
-
self.server.start_sync()
|
|
123
|
-
|
|
124
|
-
# Keep the main thread alive while server is running
|
|
125
|
-
# The server runs in a background thread, so we need to block here
|
|
126
|
-
try:
|
|
127
|
-
while self.server.is_running():
|
|
128
|
-
time.sleep(1)
|
|
129
186
|
except KeyboardInterrupt:
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
print("\nDashboard server stopped by user")
|
|
141
|
-
return CommandResult.success_result("Dashboard server stopped")
|
|
142
|
-
except Exception as e:
|
|
143
|
-
return CommandResult.error_result(f"Failed to start dashboard: {e}")
|
|
187
|
+
print("\nDashboard server stopped by user")
|
|
188
|
+
return CommandResult.success_result("Dashboard server stopped")
|
|
189
|
+
except Exception as e:
|
|
190
|
+
# If both servers fail, provide helpful error message
|
|
191
|
+
error_msg = f"Failed to start dashboard: {e}\n\n"
|
|
192
|
+
error_msg += "💡 Troubleshooting tips:\n"
|
|
193
|
+
error_msg += f" - Check if port {port} is already in use\n"
|
|
194
|
+
error_msg += " - Try running with --stable flag for standalone mode\n"
|
|
195
|
+
error_msg += " - Use --debug flag for more details\n"
|
|
196
|
+
return CommandResult.error_result(error_msg)
|
|
144
197
|
|
|
145
198
|
def _stop_dashboard(self, args) -> CommandResult:
|
|
146
199
|
"""Stop the dashboard server."""
|
|
@@ -168,6 +168,8 @@ class StableDashboardServer:
|
|
|
168
168
|
self.dashboard_path = None
|
|
169
169
|
self.app = None
|
|
170
170
|
self.sio = None
|
|
171
|
+
self.server_runner = None
|
|
172
|
+
self.server_site = None
|
|
171
173
|
|
|
172
174
|
def setup(self) -> bool:
|
|
173
175
|
"""Set up the server components."""
|
|
@@ -184,13 +186,22 @@ class StableDashboardServer:
|
|
|
184
186
|
print("Please ensure Claude MPM is properly installed")
|
|
185
187
|
return False
|
|
186
188
|
|
|
189
|
+
if self.debug:
|
|
190
|
+
print(f"🔍 Debug: Dashboard path resolved to: {self.dashboard_path}")
|
|
191
|
+
print(f"🔍 Debug: Checking for required files...")
|
|
192
|
+
template_exists = (self.dashboard_path / "templates" / "index.html").exists()
|
|
193
|
+
static_exists = (self.dashboard_path / "static").exists()
|
|
194
|
+
print(f" - templates/index.html: {template_exists}")
|
|
195
|
+
print(f" - static directory: {static_exists}")
|
|
196
|
+
|
|
187
197
|
print(f"📁 Using dashboard files from: {self.dashboard_path}")
|
|
188
198
|
|
|
189
199
|
# Create SocketIO server with improved timeout settings
|
|
200
|
+
logger_enabled = self.debug # Only enable verbose logging in debug mode
|
|
190
201
|
self.sio = socketio.AsyncServer(
|
|
191
202
|
cors_allowed_origins="*",
|
|
192
|
-
logger=
|
|
193
|
-
engineio_logger=
|
|
203
|
+
logger=logger_enabled,
|
|
204
|
+
engineio_logger=logger_enabled,
|
|
194
205
|
ping_interval=30, # Match client's 30 second ping interval
|
|
195
206
|
ping_timeout=60, # Match client's 60 second timeout
|
|
196
207
|
max_http_buffer_size=1e8, # Allow larger messages
|
|
@@ -220,8 +231,13 @@ class StableDashboardServer:
|
|
|
220
231
|
|
|
221
232
|
@self.sio.event
|
|
222
233
|
async def connect(sid, environ):
|
|
223
|
-
|
|
224
|
-
|
|
234
|
+
if self.debug:
|
|
235
|
+
print(f"✅ SocketIO client connected: {sid}")
|
|
236
|
+
user_agent = environ.get('HTTP_USER_AGENT', 'Unknown')
|
|
237
|
+
# Truncate long user agents for readability
|
|
238
|
+
if len(user_agent) > 80:
|
|
239
|
+
user_agent = user_agent[:77] + "..."
|
|
240
|
+
print(f" Client info: {user_agent}")
|
|
225
241
|
# Send a test message to confirm connection
|
|
226
242
|
await self.sio.emit(
|
|
227
243
|
"connection_test", {"status": "connected", "server": "stable"}, room=sid
|
|
@@ -229,13 +245,15 @@ class StableDashboardServer:
|
|
|
229
245
|
|
|
230
246
|
@self.sio.event
|
|
231
247
|
async def disconnect(sid):
|
|
232
|
-
|
|
248
|
+
if self.debug:
|
|
249
|
+
print(f"📤 SocketIO client disconnected: {sid}")
|
|
233
250
|
|
|
234
251
|
@self.sio.event
|
|
235
252
|
async def code_analyze_file(sid, data):
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
253
|
+
if self.debug:
|
|
254
|
+
print(
|
|
255
|
+
f"📡 Received file analysis request from {sid}: {data.get('path', 'unknown')}"
|
|
256
|
+
)
|
|
239
257
|
|
|
240
258
|
file_path = data.get("path", "")
|
|
241
259
|
file_name = file_path.split("/")[-1] if file_path else "unknown"
|
|
@@ -243,15 +261,17 @@ class StableDashboardServer:
|
|
|
243
261
|
# Create mock response
|
|
244
262
|
response = create_mock_ast_data(file_path, file_name)
|
|
245
263
|
|
|
246
|
-
|
|
264
|
+
if self.debug:
|
|
265
|
+
print(f"📤 Sending analysis response: {len(response['elements'])} elements")
|
|
247
266
|
await self.sio.emit("code:file:analyzed", response, room=sid)
|
|
248
267
|
|
|
249
268
|
# CRITICAL: Handle the actual event name with colons that the client sends
|
|
250
269
|
@self.sio.on("code:analyze:file")
|
|
251
270
|
async def handle_code_analyze_file(sid, data):
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
271
|
+
if self.debug:
|
|
272
|
+
print(
|
|
273
|
+
f"📡 Received code:analyze:file from {sid}: {data.get('path', 'unknown')}"
|
|
274
|
+
)
|
|
255
275
|
|
|
256
276
|
file_path = data.get("path", "")
|
|
257
277
|
file_name = file_path.split("/")[-1] if file_path else "unknown"
|
|
@@ -259,20 +279,23 @@ class StableDashboardServer:
|
|
|
259
279
|
# Create mock response
|
|
260
280
|
response = create_mock_ast_data(file_path, file_name)
|
|
261
281
|
|
|
262
|
-
|
|
282
|
+
if self.debug:
|
|
283
|
+
print(f"📤 Sending analysis response: {len(response['elements'])} elements")
|
|
263
284
|
await self.sio.emit("code:file:analyzed", response, room=sid)
|
|
264
285
|
|
|
265
286
|
# Handle other events the dashboard sends
|
|
266
287
|
@self.sio.event
|
|
267
288
|
async def get_git_branch(sid, data):
|
|
268
|
-
|
|
289
|
+
if self.debug:
|
|
290
|
+
print(f"📡 Received git branch request from {sid}: {data}")
|
|
269
291
|
await self.sio.emit(
|
|
270
292
|
"git_branch_response", {"branch": "main", "path": data}, room=sid
|
|
271
293
|
)
|
|
272
294
|
|
|
273
295
|
@self.sio.event
|
|
274
296
|
async def request_status(sid, data):
|
|
275
|
-
|
|
297
|
+
if self.debug:
|
|
298
|
+
print(f"📡 Received status request from {sid}")
|
|
276
299
|
await self.sio.emit(
|
|
277
300
|
"status_response", {"status": "running", "server": "stable"}, room=sid
|
|
278
301
|
)
|
|
@@ -280,14 +303,16 @@ class StableDashboardServer:
|
|
|
280
303
|
# Handle the event with dots (SocketIO converts colons to dots sometimes)
|
|
281
304
|
@self.sio.event
|
|
282
305
|
async def request_dot_status(sid, data):
|
|
283
|
-
|
|
306
|
+
if self.debug:
|
|
307
|
+
print(f"📡 Received request.status from {sid}")
|
|
284
308
|
await self.sio.emit(
|
|
285
309
|
"status_response", {"status": "running", "server": "stable"}, room=sid
|
|
286
310
|
)
|
|
287
311
|
|
|
288
312
|
@self.sio.event
|
|
289
313
|
async def code_discover_top_level(sid, data):
|
|
290
|
-
|
|
314
|
+
if self.debug:
|
|
315
|
+
print(f"📡 Received top-level discovery request from {sid}")
|
|
291
316
|
await self.sio.emit("code:top_level:discovered", {"status": "ok"}, room=sid)
|
|
292
317
|
|
|
293
318
|
async def _serve_dashboard(self, request):
|
|
@@ -417,14 +442,19 @@ class StableDashboardServer:
|
|
|
417
442
|
|
|
418
443
|
print(f"🚀 Starting stable dashboard server at http://{self.host}:{self.port}")
|
|
419
444
|
print("✅ Server ready: HTTP + SocketIO on same port")
|
|
445
|
+
print("🎯 This is a standalone server - no monitor service required")
|
|
420
446
|
print("📡 SocketIO events registered:")
|
|
421
447
|
print(" - connect/disconnect")
|
|
422
|
-
print(" -
|
|
448
|
+
print(" - code:analyze:file (code analysis)")
|
|
449
|
+
print(" - Various dashboard events")
|
|
423
450
|
print("🌐 HTTP endpoints available:")
|
|
424
451
|
print(" - GET / (dashboard)")
|
|
425
452
|
print(" - GET /static/* (static files)")
|
|
426
|
-
print(" - GET /api/directory/list (directory
|
|
427
|
-
print(
|
|
453
|
+
print(" - GET /api/directory/list (directory listing)")
|
|
454
|
+
print(" - GET /api/file/read (file content)")
|
|
455
|
+
print(" - GET /version.json (version info)")
|
|
456
|
+
print(f"\n🔗 Open in browser: http://{self.host}:{self.port}")
|
|
457
|
+
print("\n Press Ctrl+C to stop the server\n")
|
|
428
458
|
|
|
429
459
|
# Try to start server with port conflict handling
|
|
430
460
|
max_port_attempts = 10
|
|
@@ -432,18 +462,29 @@ class StableDashboardServer:
|
|
|
432
462
|
|
|
433
463
|
for attempt in range(max_port_attempts):
|
|
434
464
|
try:
|
|
435
|
-
|
|
465
|
+
# Use the print_func parameter to control access log output
|
|
466
|
+
if self.debug:
|
|
467
|
+
web.run_app(self.app, host=self.host, port=self.port)
|
|
468
|
+
else:
|
|
469
|
+
web.run_app(
|
|
470
|
+
self.app,
|
|
471
|
+
host=self.host,
|
|
472
|
+
port=self.port,
|
|
473
|
+
access_log=None,
|
|
474
|
+
print=lambda *args: None # Suppress startup messages in non-debug mode
|
|
475
|
+
)
|
|
436
476
|
break # Server started successfully
|
|
437
477
|
except KeyboardInterrupt:
|
|
438
478
|
print("\n🛑 Server stopped by user")
|
|
439
479
|
break
|
|
440
480
|
except OSError as e:
|
|
441
|
-
|
|
442
|
-
|
|
481
|
+
error_str = str(e)
|
|
482
|
+
if "[Errno 48]" in error_str or "Address already in use" in error_str or "address already in use" in error_str.lower():
|
|
483
|
+
# Port is already in use
|
|
443
484
|
if attempt < max_port_attempts - 1:
|
|
444
485
|
self.port += 1
|
|
445
486
|
print(
|
|
446
|
-
f"⚠️
|
|
487
|
+
f"⚠️ Port {self.port - 1} is in use, trying port {self.port}..."
|
|
447
488
|
)
|
|
448
489
|
# Recreate the app with new port
|
|
449
490
|
self.setup()
|
|
@@ -452,21 +493,23 @@ class StableDashboardServer:
|
|
|
452
493
|
f"❌ Could not find available port after {max_port_attempts} attempts"
|
|
453
494
|
)
|
|
454
495
|
print(f" Ports {original_port} to {self.port} are all in use")
|
|
496
|
+
print("\n💡 Tip: Check if another dashboard instance is running")
|
|
497
|
+
print(" You can stop it with: claude-mpm dashboard stop")
|
|
455
498
|
return False
|
|
456
499
|
else:
|
|
457
500
|
# Other OS error
|
|
458
501
|
print(f"❌ Server error: {e}")
|
|
459
502
|
if self.debug:
|
|
460
503
|
import traceback
|
|
461
|
-
|
|
462
504
|
traceback.print_exc()
|
|
463
505
|
return False
|
|
464
506
|
except Exception as e:
|
|
465
|
-
print(f"❌
|
|
507
|
+
print(f"❌ Unexpected server error: {e}")
|
|
466
508
|
if self.debug:
|
|
467
509
|
import traceback
|
|
468
|
-
|
|
469
510
|
traceback.print_exc()
|
|
511
|
+
else:
|
|
512
|
+
print("\n💡 Run with --debug flag for more details")
|
|
470
513
|
return False
|
|
471
514
|
|
|
472
515
|
return True
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
claude_mpm/BUILD_NUMBER,sha256=toytnNjkIKPgQaGwDqQdC1rpNTAdSEc6Vja50d7Ovug,4
|
|
2
|
-
claude_mpm/VERSION,sha256=
|
|
2
|
+
claude_mpm/VERSION,sha256=y3hGbi5SzvubCW71VVd9sntScYZDVej66mVma8oVl-k,6
|
|
3
3
|
claude_mpm/__init__.py,sha256=lyTZAYGH4DTaFGLRNWJKk5Q5oTjzN5I6AXmfVX-Jff0,1512
|
|
4
4
|
claude_mpm/__main__.py,sha256=Ro5UBWBoQaSAIoSqWAr7zkbLyvi4sSy28WShqAhKJG0,723
|
|
5
5
|
claude_mpm/constants.py,sha256=I946iCQzIIPRZVVJ8aO7lA4euiyDnNw2IX7EelAOkIE,5915
|
|
@@ -71,7 +71,7 @@ claude_mpm/cli/commands/cleanup_orphaned_agents.py,sha256=JR8crvgrz7Sa6d-SI-gKyw
|
|
|
71
71
|
claude_mpm/cli/commands/config.py,sha256=Yfi8WO-10_MYz2QipFw-yEzVvHKNQ6iSQXeyW5J85Cg,18559
|
|
72
72
|
claude_mpm/cli/commands/configure.py,sha256=OsuISDoctmQyJpd0wn4LUFRR1AdoVLveT-pU6JJdW60,55439
|
|
73
73
|
claude_mpm/cli/commands/configure_tui.py,sha256=VYLlm2B7QN8P3HtKMEO5Z7A9TpRicWvsojtNh4NxVWQ,66760
|
|
74
|
-
claude_mpm/cli/commands/dashboard.py,sha256=
|
|
74
|
+
claude_mpm/cli/commands/dashboard.py,sha256=68IZaSMFKnroaclKsORYaVu7jYV9jWH9sAeD1QHolIo,14097
|
|
75
75
|
claude_mpm/cli/commands/debug.py,sha256=lupNJRzpPHeisREYmbQ-9E3A3pvKjSHsapYFJVH8sbc,47056
|
|
76
76
|
claude_mpm/cli/commands/doctor.py,sha256=bOZzDNxEMNMZYrJnu_V82tyZ12r5FiBRQNLVfSVvRIQ,5774
|
|
77
77
|
claude_mpm/cli/commands/info.py,sha256=_hWH7uNv9VLO0eZh9Ua6qc5L1Z66kYj9ATzU4Q8UkSM,7377
|
|
@@ -433,7 +433,7 @@ claude_mpm/services/core/interfaces/agent.py,sha256=EaPYn6k9HjB2DRTiZIMJwEIBABZF
|
|
|
433
433
|
claude_mpm/services/core/interfaces/communication.py,sha256=evwtLbYCFa3Zb8kEfL10LOBVdwP4-n3a3wa7NqIHmKQ,8887
|
|
434
434
|
claude_mpm/services/core/interfaces/infrastructure.py,sha256=eLtr_dFhA3Ux3mPOV_4DbWhGjHpfpGnj6xOhfQcgZGk,10037
|
|
435
435
|
claude_mpm/services/core/interfaces/service.py,sha256=hNfHXe45LcPCp_dToOmZCfnUZBF5axMf_TdxqCSm2-I,11536
|
|
436
|
-
claude_mpm/services/dashboard/stable_server.py,sha256=
|
|
436
|
+
claude_mpm/services/dashboard/stable_server.py,sha256=151lEl_uz28szFpUNc9lSCsNoTBP48IqxXuF_KpmYHU,19984
|
|
437
437
|
claude_mpm/services/diagnostics/__init__.py,sha256=WTRucANR9EwNi53rotjkeE4k75s18RjHJ8s1BfBj7ic,614
|
|
438
438
|
claude_mpm/services/diagnostics/diagnostic_runner.py,sha256=cpCZ7JBvRIpGEchiwYsojmiGaI99Wf-hGxk8eem7xXQ,9164
|
|
439
439
|
claude_mpm/services/diagnostics/doctor_reporter.py,sha256=Z8hYLqUbGC02gL7nX9kZKbLWRzOmTORRINfCr7EHbBI,10537
|
|
@@ -615,9 +615,9 @@ claude_mpm/utils/subprocess_utils.py,sha256=zgiwLqh_17WxHpySvUPH65pb4bzIeUGOAYUJ
|
|
|
615
615
|
claude_mpm/validation/__init__.py,sha256=YZhwE3mhit-lslvRLuwfX82xJ_k4haZeKmh4IWaVwtk,156
|
|
616
616
|
claude_mpm/validation/agent_validator.py,sha256=3Lo6LK-Mw9IdnL_bd3zl_R6FkgSVDYKUUM7EeVVD3jc,20865
|
|
617
617
|
claude_mpm/validation/frontmatter_validator.py,sha256=u8g4Eyd_9O6ugj7Un47oSGh3kqv4wMkuks2i_CtWRvM,7028
|
|
618
|
-
claude_mpm-4.2.
|
|
619
|
-
claude_mpm-4.2.
|
|
620
|
-
claude_mpm-4.2.
|
|
621
|
-
claude_mpm-4.2.
|
|
622
|
-
claude_mpm-4.2.
|
|
623
|
-
claude_mpm-4.2.
|
|
618
|
+
claude_mpm-4.2.6.dist-info/licenses/LICENSE,sha256=lpaivOlPuBZW1ds05uQLJJswy8Rp_HMNieJEbFlqvLk,1072
|
|
619
|
+
claude_mpm-4.2.6.dist-info/METADATA,sha256=w4lTcx_Man2orXEGeND6EOxlXQQb6kc1UcF6-XaDeeQ,13776
|
|
620
|
+
claude_mpm-4.2.6.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
|
|
621
|
+
claude_mpm-4.2.6.dist-info/entry_points.txt,sha256=FDPZgz8JOvD-6iuXY2l9Zbo9zYVRuE4uz4Qr0vLeGOk,471
|
|
622
|
+
claude_mpm-4.2.6.dist-info/top_level.txt,sha256=1nUg3FEaBySgm8t-s54jK5zoPnu3_eY6EP6IOlekyHA,11
|
|
623
|
+
claude_mpm-4.2.6.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|