claude-mpm 4.2.13__py3-none-any.whl → 4.2.15__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 (39) hide show
  1. claude_mpm/cli/commands/analyze_code.py +0 -1
  2. claude_mpm/cli/commands/dashboard.py +0 -1
  3. claude_mpm/cli/commands/monitor.py +0 -1
  4. claude_mpm/core/constants.py +65 -0
  5. claude_mpm/core/error_handler.py +625 -0
  6. claude_mpm/core/file_utils.py +770 -0
  7. claude_mpm/core/logging_utils.py +502 -0
  8. claude_mpm/dashboard/static/dist/components/code-tree.js +1 -1
  9. claude_mpm/dashboard/static/dist/components/file-viewer.js +1 -1
  10. claude_mpm/dashboard/static/dist/dashboard.js +1 -1
  11. claude_mpm/dashboard/static/dist/socket-client.js +1 -1
  12. claude_mpm/dashboard/static/js/components/code-simple.js +44 -1
  13. claude_mpm/dashboard/static/js/components/code-tree/tree-breadcrumb.js +353 -0
  14. claude_mpm/dashboard/static/js/components/code-tree/tree-constants.js +235 -0
  15. claude_mpm/dashboard/static/js/components/code-tree/tree-search.js +409 -0
  16. claude_mpm/dashboard/static/js/components/code-tree/tree-utils.js +435 -0
  17. claude_mpm/dashboard/static/js/components/code-tree.js +29 -5
  18. claude_mpm/dashboard/static/js/components/file-viewer.js +69 -27
  19. claude_mpm/dashboard/static/js/components/session-manager.js +7 -7
  20. claude_mpm/dashboard/static/js/components/working-directory.js +18 -9
  21. claude_mpm/dashboard/static/js/dashboard.js +91 -9
  22. claude_mpm/dashboard/static/js/shared/dom-helpers.js +396 -0
  23. claude_mpm/dashboard/static/js/shared/event-bus.js +330 -0
  24. claude_mpm/dashboard/static/js/shared/logger.js +385 -0
  25. claude_mpm/dashboard/static/js/shared/tooltip-service.js +253 -0
  26. claude_mpm/dashboard/static/js/socket-client.js +18 -0
  27. claude_mpm/dashboard/templates/index.html +22 -9
  28. claude_mpm/services/cli/unified_dashboard_manager.py +2 -1
  29. claude_mpm/services/monitor/handlers/__init__.py +2 -1
  30. claude_mpm/services/monitor/handlers/file.py +263 -0
  31. claude_mpm/services/monitor/handlers/hooks.py +25 -1
  32. claude_mpm/services/monitor/server.py +111 -1
  33. claude_mpm/services/socketio/handlers/file.py +40 -5
  34. {claude_mpm-4.2.13.dist-info → claude_mpm-4.2.15.dist-info}/METADATA +1 -1
  35. {claude_mpm-4.2.13.dist-info → claude_mpm-4.2.15.dist-info}/RECORD +39 -27
  36. {claude_mpm-4.2.13.dist-info → claude_mpm-4.2.15.dist-info}/WHEEL +0 -0
  37. {claude_mpm-4.2.13.dist-info → claude_mpm-4.2.15.dist-info}/entry_points.txt +0 -0
  38. {claude_mpm-4.2.13.dist-info → claude_mpm-4.2.15.dist-info}/licenses/LICENSE +0 -0
  39. {claude_mpm-4.2.13.dist-info → claude_mpm-4.2.15.dist-info}/top_level.txt +0 -0
@@ -16,8 +16,10 @@ DESIGN DECISIONS:
16
16
 
17
17
  import asyncio
18
18
  import threading
19
+ import time
20
+ from datetime import datetime
19
21
  from pathlib import Path
20
- from typing import Dict
22
+ from typing import Dict, Optional
21
23
 
22
24
  import socketio
23
25
  from aiohttp import web
@@ -27,6 +29,7 @@ from ...dashboard.api.simple_directory import list_directory
27
29
  from .event_emitter import get_event_emitter
28
30
  from .handlers.code_analysis import CodeAnalysisHandler
29
31
  from .handlers.dashboard import DashboardHandler
32
+ from .handlers.file import FileHandler
30
33
  from .handlers.hooks import HookHandler
31
34
 
32
35
  # EventBus integration
@@ -66,6 +69,7 @@ class UnifiedMonitorServer:
66
69
  # Event handlers
67
70
  self.code_analysis_handler = None
68
71
  self.dashboard_handler = None
72
+ self.file_handler = None
69
73
  self.hook_handler = None
70
74
 
71
75
  # High-performance event emitter
@@ -76,6 +80,11 @@ class UnifiedMonitorServer:
76
80
  self.loop = None
77
81
  self.server_thread = None
78
82
 
83
+ # Heartbeat tracking
84
+ self.heartbeat_task: Optional[asyncio.Task] = None
85
+ self.server_start_time = time.time()
86
+ self.heartbeat_count = 0
87
+
79
88
  def start(self) -> bool:
80
89
  """Start the unified monitor server.
81
90
 
@@ -192,6 +201,10 @@ class UnifiedMonitorServer:
192
201
  "Using high-performance async event architecture with direct calls"
193
202
  )
194
203
 
204
+ # Start heartbeat task
205
+ self.heartbeat_task = asyncio.create_task(self._heartbeat_loop())
206
+ self.logger.info("Heartbeat task started (3-minute interval)")
207
+
195
208
  # Setup HTTP routes
196
209
  self._setup_http_routes()
197
210
 
@@ -221,11 +234,13 @@ class UnifiedMonitorServer:
221
234
  # Create event handlers
222
235
  self.code_analysis_handler = CodeAnalysisHandler(self.sio)
223
236
  self.dashboard_handler = DashboardHandler(self.sio)
237
+ self.file_handler = FileHandler(self.sio)
224
238
  self.hook_handler = HookHandler(self.sio)
225
239
 
226
240
  # Register handlers
227
241
  self.code_analysis_handler.register()
228
242
  self.dashboard_handler.register()
243
+ self.file_handler.register()
229
244
  self.hook_handler.register()
230
245
 
231
246
  self.logger.info("Event handlers registered successfully")
@@ -405,10 +420,40 @@ class UnifiedMonitorServer:
405
420
  }
406
421
  )
407
422
 
423
+ # Configuration endpoint for dashboard initialization
424
+ async def config_handler(request):
425
+ """Return configuration for dashboard initialization."""
426
+ import os
427
+ import subprocess
428
+
429
+ config = {
430
+ "workingDirectory": os.getcwd(),
431
+ "gitBranch": "Unknown",
432
+ "serverTime": datetime.utcnow().isoformat() + "Z",
433
+ "service": "unified-monitor",
434
+ }
435
+
436
+ # Try to get current git branch
437
+ try:
438
+ result = subprocess.run(
439
+ ["git", "branch", "--show-current"],
440
+ capture_output=True,
441
+ text=True,
442
+ timeout=2,
443
+ cwd=os.getcwd(), check=False,
444
+ )
445
+ if result.returncode == 0 and result.stdout.strip():
446
+ config["gitBranch"] = result.stdout.strip()
447
+ except Exception:
448
+ pass # Keep default "Unknown" value
449
+
450
+ return web.json_response(config)
451
+
408
452
  # Register routes
409
453
  self.app.router.add_get("/", dashboard_index)
410
454
  self.app.router.add_get("/health", health_check)
411
455
  self.app.router.add_get("/version.json", version_handler)
456
+ self.app.router.add_get("/api/config", config_handler)
412
457
  self.app.router.add_get("/api/directory", list_directory)
413
458
  self.app.router.add_post("/api/events", api_events_handler)
414
459
  self.app.router.add_post("/api/file", api_file_handler)
@@ -475,9 +520,73 @@ class UnifiedMonitorServer:
475
520
  except Exception as e:
476
521
  self.logger.error(f"Error stopping unified monitor server: {e}")
477
522
 
523
+ async def _heartbeat_loop(self):
524
+ """Send heartbeat events every 3 minutes."""
525
+ try:
526
+ while self.running:
527
+ # Wait 3 minutes (180 seconds)
528
+ await asyncio.sleep(180)
529
+
530
+ if not self.running:
531
+ break
532
+
533
+ # Increment heartbeat count
534
+ self.heartbeat_count += 1
535
+
536
+ # Calculate server uptime
537
+ uptime_seconds = int(time.time() - self.server_start_time)
538
+ uptime_minutes = uptime_seconds // 60
539
+ uptime_hours = uptime_minutes // 60
540
+
541
+ # Format uptime string
542
+ if uptime_hours > 0:
543
+ uptime_str = f"{uptime_hours}h {uptime_minutes % 60}m"
544
+ else:
545
+ uptime_str = f"{uptime_minutes}m {uptime_seconds % 60}s"
546
+
547
+ # Get connected client count
548
+ connected_clients = 0
549
+ if self.dashboard_handler:
550
+ connected_clients = len(self.dashboard_handler.connected_clients)
551
+
552
+ # Create heartbeat data
553
+ heartbeat_data = {
554
+ "timestamp": datetime.utcnow().isoformat() + "Z",
555
+ "type": "heartbeat",
556
+ "server_uptime": uptime_seconds,
557
+ "server_uptime_formatted": uptime_str,
558
+ "connected_clients": connected_clients,
559
+ "heartbeat_number": self.heartbeat_count,
560
+ "message": f"Server heartbeat #{self.heartbeat_count} - Socket.IO connection active",
561
+ "service": "unified-monitor",
562
+ "port": self.port,
563
+ }
564
+
565
+ # Emit heartbeat event
566
+ if self.sio:
567
+ await self.sio.emit("heartbeat", heartbeat_data)
568
+ self.logger.debug(
569
+ f"Heartbeat #{self.heartbeat_count} sent - "
570
+ f"{connected_clients} clients connected, uptime: {uptime_str}"
571
+ )
572
+
573
+ except asyncio.CancelledError:
574
+ self.logger.debug("Heartbeat task cancelled")
575
+ except Exception as e:
576
+ self.logger.error(f"Error in heartbeat loop: {e}")
577
+
478
578
  async def _cleanup_async(self):
479
579
  """Cleanup async resources."""
480
580
  try:
581
+ # Cancel heartbeat task if running
582
+ if self.heartbeat_task and not self.heartbeat_task.done():
583
+ self.heartbeat_task.cancel()
584
+ try:
585
+ await self.heartbeat_task
586
+ except asyncio.CancelledError:
587
+ pass
588
+ self.logger.debug("Heartbeat task cancelled")
589
+
481
590
  # Close the Socket.IO server first to stop accepting new connections
482
591
  if self.sio:
483
592
  try:
@@ -544,6 +653,7 @@ class UnifiedMonitorServer:
544
653
  "handlers": {
545
654
  "code_analysis": self.code_analysis_handler is not None,
546
655
  "dashboard": self.dashboard_handler is not None,
656
+ "file": self.file_handler is not None,
547
657
  "hooks": self.hook_handler is not None,
548
658
  },
549
659
  }
@@ -24,6 +24,12 @@ class FileEventHandler(BaseEventHandler):
24
24
 
25
25
  def register_events(self) -> None:
26
26
  """Register file operation event handlers."""
27
+ self.logger.info(
28
+ "[FileEventHandler] Starting registration of read_file event handler"
29
+ )
30
+
31
+ # Capture self reference to avoid closure issues
32
+ handler_self = self
27
33
 
28
34
  @self.sio.event
29
35
  async def read_file(sid, data):
@@ -33,13 +39,19 @@ class FileEventHandler(BaseEventHandler):
33
39
  click on files, but we must ensure secure file access with
34
40
  proper validation and size limits.
35
41
  """
42
+ handler_self.logger.info(
43
+ f"[FileEventHandler] Received read_file event from {sid} with data: {data}"
44
+ )
36
45
  try:
37
46
  file_path = data.get("file_path")
38
47
  working_dir = data.get("working_dir", os.getcwd())
39
48
  max_size = data.get("max_size", 1024 * 1024) # 1MB default limit
40
49
 
41
50
  if not file_path:
42
- await self.emit_to_client(
51
+ handler_self.logger.warning(
52
+ f"[FileEventHandler] Missing file_path in request from {sid}"
53
+ )
54
+ await handler_self.emit_to_client(
43
55
  sid,
44
56
  "file_content_response",
45
57
  {
@@ -51,14 +63,29 @@ class FileEventHandler(BaseEventHandler):
51
63
  return
52
64
 
53
65
  # Use the shared file reading logic
54
- result = await self._read_file_safely(file_path, working_dir, max_size)
66
+ handler_self.logger.info(
67
+ f"[FileEventHandler] Reading file: {file_path} from working_dir: {working_dir}"
68
+ )
69
+ result = await handler_self._read_file_safely(
70
+ file_path, working_dir, max_size
71
+ )
55
72
 
56
73
  # Send the result back to the client
57
- await self.emit_to_client(sid, "file_content_response", result)
74
+ handler_self.logger.info(
75
+ f"[FileEventHandler] Sending file_content_response to {sid}, success: {result.get('success', False)}"
76
+ )
77
+ await handler_self.emit_to_client(sid, "file_content_response", result)
78
+ handler_self.logger.info(
79
+ f"[FileEventHandler] Response sent successfully to {sid}"
80
+ )
58
81
 
59
82
  except Exception as e:
60
- self.log_error("read_file", e, data)
61
- await self.emit_to_client(
83
+ handler_self.logger.error(
84
+ f"[FileEventHandler] Exception in read_file handler: {e}",
85
+ exc_info=True,
86
+ )
87
+ handler_self.log_error("read_file", e, data)
88
+ await handler_self.emit_to_client(
62
89
  sid,
63
90
  "file_content_response",
64
91
  {
@@ -67,6 +94,14 @@ class FileEventHandler(BaseEventHandler):
67
94
  "file_path": data.get("file_path", "unknown"),
68
95
  },
69
96
  )
97
+ handler_self.logger.info(
98
+ f"[FileEventHandler] Error response sent to {sid}"
99
+ )
100
+
101
+ # Log successful registration
102
+ self.logger.info(
103
+ "[FileEventHandler] read_file event handler registered successfully"
104
+ )
70
105
 
71
106
  async def _read_file_safely(
72
107
  self,
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: claude-mpm
3
- Version: 4.2.13
3
+ Version: 4.2.15
4
4
  Summary: Claude Multi-Agent Project Manager - Orchestrate Claude with agent delegation and ticket tracking
5
5
  Author-email: Bob Matsuoka <bob@matsuoka.com>
6
6
  Maintainer: Claude MPM Team
@@ -65,13 +65,13 @@ claude_mpm/cli/commands/agent_manager.py,sha256=BYyoyyTx06Oy-kN6EwDOc1aFqw_HKRFh
65
65
  claude_mpm/cli/commands/agents.py,sha256=D4gn0TihoBKq50HR_LDLxxekBHCW5ereX1kZ-LfmHEI,38249
66
66
  claude_mpm/cli/commands/aggregate.py,sha256=rLwZxXmIyTPuDUYKTooVtTgiW4mU3vw4_383jK1nXHU,18065
67
67
  claude_mpm/cli/commands/analyze.py,sha256=jWPGiUeKEnD15DFt-6c41ZFF1ePdGMNEUaW0KUtklpw,18924
68
- claude_mpm/cli/commands/analyze_code.py,sha256=4rkAF9uS3PQLoZQoxAE5zZ8VlRMlsc1QAvoAYc3j_ak,17160
68
+ claude_mpm/cli/commands/analyze_code.py,sha256=TKTKZRhEUdf_kSMTCPS6gNE64ZTGDvywvhf0SLPb-28,17123
69
69
  claude_mpm/cli/commands/cleanup.py,sha256=c4QyAs9odx7__rSM9RDy2r9iwPlrfeIzx2vINbl7WaA,19694
70
70
  claude_mpm/cli/commands/cleanup_orphaned_agents.py,sha256=JR8crvgrz7Sa6d-SI-gKywok5S9rwc_DzDVk_h85sVs,4467
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=a5-eowhAPXzjDmdrMK47ZbSvGpd4zj6SC8lf6HcbqqA,11449
74
+ claude_mpm/cli/commands/dashboard.py,sha256=4jPTmTl97DRNNJlYREWeE1iDdkct1uL-vv24MZn9fj4,11403
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
@@ -83,7 +83,7 @@ claude_mpm/cli/commands/mcp_pipx_config.py,sha256=sE62VD6Q1CcO2k1nlbIhHMfAJFQTZf
83
83
  claude_mpm/cli/commands/mcp_server_commands.py,sha256=-1G_2Y5ScTvzDd-kY8fTAao2H6FH7DnsLimleF1rVqQ,6197
84
84
  claude_mpm/cli/commands/mcp_tool_commands.py,sha256=q17GzlFT3JiLTrDqwPO2tz1-fKmPO5QU449syTnKTz4,1283
85
85
  claude_mpm/cli/commands/memory.py,sha256=Yzfs3_oiKciv3sfOoDm2lJL4M9idG7ARV3-sNw1ge_g,26186
86
- claude_mpm/cli/commands/monitor.py,sha256=wdbQ-xMVvRNo0X64nZaweMG13_P8WErRZP3AKT02Hjs,7365
86
+ claude_mpm/cli/commands/monitor.py,sha256=BpTFFbr7vzQvPBy1Q4bPY-8FUPwrLFnNJA3rnPnX2Jw,7315
87
87
  claude_mpm/cli/commands/mpm_init.py,sha256=lO7N91ZHn_n18XbchUUcYoyme7L5NLcXVnhWm5F_Gq8,22367
88
88
  claude_mpm/cli/commands/mpm_init_handler.py,sha256=-pCB0XL3KipqGtnta8CC7Lg5TPMwstEhMFBcgF4aaa4,2919
89
89
  claude_mpm/cli/commands/run.py,sha256=qS3eolLiDrE8EXLQJioB6kL1ONr_l0c3OE3qMUJCqbA,43489
@@ -137,10 +137,12 @@ claude_mpm/core/claude_runner.py,sha256=e6ob7FwcBzvhw9gnPvmL8Zw_BasdfzuV8b1dvqtv
137
137
  claude_mpm/core/config.py,sha256=3TrDkcraWdij6LZ3Vermg3CadLy8XqxkAJ3k5qYAniw,39356
138
138
  claude_mpm/core/config_aliases.py,sha256=asgAgMGlZSv-5PXPBH8e__QfwJQy_Or9ldPD9yzCrM0,9643
139
139
  claude_mpm/core/config_constants.py,sha256=MEF35Y2Lj5FMzRdhgSgZrZeTzHfCzistPGZVY8INta4,10073
140
- claude_mpm/core/constants.py,sha256=88J9bGT05Fbr3lzHLWtLQbBYRuJuLBjK3Bfq_qyWcIo,9539
140
+ claude_mpm/core/constants.py,sha256=uBCd4kUbwSFKW79pH7_yUzRpMoNY2AcAflENTkIZIaU,11558
141
141
  claude_mpm/core/container.py,sha256=tktmoChULNzNm_wUNR0YCzzRO8wH2AEy-hCaCFis4JU,32137
142
+ claude_mpm/core/error_handler.py,sha256=S6ZNQ7X3SEkkSsaUVzZeI8cjS7ZdaL_e7c6b8Uzx4T0,19248
142
143
  claude_mpm/core/exceptions.py,sha256=vrEJGpgThvqRRD6qsNkmaQcYAoUMQSNuHUOnNFJcEGg,19628
143
144
  claude_mpm/core/factories.py,sha256=vtlwkbpxeWzqgPRGO1ehnMOzddLCHWTeiKa8halV_dU,7271
145
+ claude_mpm/core/file_utils.py,sha256=RNsWchLFjEq-2z6XEJtM-iv5yhLXLngKX66rojeNE9c,19912
144
146
  claude_mpm/core/framework_loader.py,sha256=-3081VeWTZpId3fBaomqHy15aYQiRFfIgWF3WVMazK8,77649
145
147
  claude_mpm/core/hook_manager.py,sha256=_Y7QWv8MfZgSHbKmWYfojuDRPxC2niZgOb7JkeUFQaE,11059
146
148
  claude_mpm/core/hook_performance_config.py,sha256=e7a7oFctkRhA3aPXMO5Wavr-E6ku7ikLxMzPU7P1-yg,5779
@@ -152,6 +154,7 @@ claude_mpm/core/lazy.py,sha256=6EYpXGZwsMAMQ3GXepNtyw_b7IxDwOTjfOVE6mV-S2s,14774
152
154
  claude_mpm/core/log_manager.py,sha256=dM0E5Q_LGoIBZO5SPXGvIuD8d6fW9WxgJICRuHGjhQ8,21798
153
155
  claude_mpm/core/logger.py,sha256=zgC6eJ8SJ2uet6Nq3ZwCoeXJm39tirDBM5QUh_p_gKo,20722
154
156
  claude_mpm/core/logging_config.py,sha256=tCxM3EpSmjZ7kT7hckQxQZlrxuWVm4g-qu9RHe8hDcw,14588
157
+ claude_mpm/core/logging_utils.py,sha256=XPaNQeuJvKUpaeoxktQTRmqCGsOH90OTg1pDt7Bbypo,15004
155
158
  claude_mpm/core/minimal_framework_loader.py,sha256=vmDEjL3MjnV7W4WIR-ymaL8QgsGsgxJJ0KdiQqAtudM,3640
156
159
  claude_mpm/core/mixins.py,sha256=vmZ7Nu2ZOnKjbhN07Ixk4noIej9nsJiknrp-Sclfu0A,5344
157
160
  claude_mpm/core/oneshot_session.py,sha256=QkSw-gs7tTQkdKQiZh7mbia5hc5PMt_xaMoDY-9_bZk,17693
@@ -204,17 +207,17 @@ claude_mpm/dashboard/static/css/activity.css,sha256=0SJUwGB6fr4OlVqMwhvVKrPndg2R
204
207
  claude_mpm/dashboard/static/css/code-tree.css,sha256=Sx74ilt7exGOdxCBEtjP9gZ74lB5e8QWr3_SIcl_0hw,30708
205
208
  claude_mpm/dashboard/static/css/connection-status.css,sha256=nQiMLxIFjY5MDgrVCG58VR5H1PpE1vLlgXmnn01-P64,6729
206
209
  claude_mpm/dashboard/static/css/dashboard.css,sha256=Uc97_y9UL6waqnx6bDdXkJUqPjj7w8B064C5xeJnlrg,85774
207
- claude_mpm/dashboard/static/dist/dashboard.js,sha256=0F2Y3Zol8PJ_xns7ow-YBaRUD4-l72BfMFE3uRw6dxc,44733
208
- claude_mpm/dashboard/static/dist/socket-client.js,sha256=wX2CD90Mc320Ulmc9v83XNmaBDsw9YqiAkIUghgJCj8,29129
210
+ claude_mpm/dashboard/static/dist/dashboard.js,sha256=tc8XJaiwaPJF09_6O_Sy1BTHTNH_j3jkvRfIOViep7c,47603
211
+ claude_mpm/dashboard/static/dist/socket-client.js,sha256=mT4kPTg5wDSX86UEKR9TbVy_6cm2fxgs4v1LQFT_XYc,28893
209
212
  claude_mpm/dashboard/static/dist/components/activity-tree.js,sha256=c7vYmCvMgq7irVrX-EFbNqVMgVuDJ_cwcvsZ4LSO3bU,29594
210
213
  claude_mpm/dashboard/static/dist/components/agent-inference.js,sha256=fXK7kzvAXzYzOGdLw_APbDiEN51OX1I4-InnN2iZlu0,12978
211
- claude_mpm/dashboard/static/dist/components/code-tree.js,sha256=bm45xde6JrUnn5siyq29n8lVrweAvNIaYSMLtO_Or88,95772
214
+ claude_mpm/dashboard/static/dist/components/code-tree.js,sha256=TxTyCUdmilFH_QYmClk-hN0_QHmtNroZ3Ovxi7KImjc,96245
212
215
  claude_mpm/dashboard/static/dist/components/code-viewer.js,sha256=wMggEwMt2RrBuXJO-WYZ5_HHDODfWLm_IS9lS5LLR7M,8495
213
216
  claude_mpm/dashboard/static/dist/components/event-processor.js,sha256=JycF1KIAmxhsNBCsne9CzRFPHMcnQz0WhTABpvuCWSc,131
214
217
  claude_mpm/dashboard/static/dist/components/event-viewer.js,sha256=oyfvK8VO1RNSyN1CRoZiB22cNJ4D05p_ahM8WPCH27k,24902
215
218
  claude_mpm/dashboard/static/dist/components/export-manager.js,sha256=iEbnirtMJ5bLpKbgBJfMI2bPC1Lf3_UrQntl04OUKEk,4196
216
219
  claude_mpm/dashboard/static/dist/components/file-tool-tracker.js,sha256=fZgUsg_u52KRYZFQooF_ZZjvKvYHaY9N7uJIS3XR9s8,9824
217
- claude_mpm/dashboard/static/dist/components/file-viewer.js,sha256=Zy9itC7XVJWMTfej42qXE3rDKQ5Io0DCWQxl8rDFuoA,11704
220
+ claude_mpm/dashboard/static/dist/components/file-viewer.js,sha256=FXTNKfHZuFhE2YXmNJFXgM2ig8dc1OyP6wmPcGMK6C4,13032
218
221
  claude_mpm/dashboard/static/dist/components/hud-library-loader.js,sha256=v08Xntd0Lwf-q6Nww1X2r5AWokYLgg9xUWe6ExHiNAg,2964
219
222
  claude_mpm/dashboard/static/dist/components/hud-manager.js,sha256=CvgzgqprROjl0DP4yQx4aAypONuNlzU2EP8woGk-8Sc,27392
220
223
  claude_mpm/dashboard/static/dist/components/hud-visualizer.js,sha256=igUUu1OLKOgwrdsfCEb-bKOsbi61bMLlpKa3hR2wQdI,69
@@ -225,33 +228,41 @@ claude_mpm/dashboard/static/dist/components/ui-state-manager.js,sha256=PtZs6sxNh
225
228
  claude_mpm/dashboard/static/dist/components/unified-data-viewer.js,sha256=pMA1iYfpmDObyySbGCUT2240fSrcqZmgfjxXrnHsnlM,36759
226
229
  claude_mpm/dashboard/static/dist/components/working-directory.js,sha256=xE1ydpKDzRWrzHzfjrCiq5wbf3vDhmgQTGKS7myQcPM,15790
227
230
  claude_mpm/dashboard/static/js/connection-manager.js,sha256=nn7x1jmwEnBClcChbFk1uMhRPu5U1xmXz3sjuo0LNm4,17981
228
- claude_mpm/dashboard/static/js/dashboard.js,sha256=YQkwyKN7gm-qJINGYVEGNu9E4178pzmLJbeirBilkDM,64971
231
+ claude_mpm/dashboard/static/js/dashboard.js,sha256=VDnf-LdAKFOD08NCzZlMIWJW3EcDI_ZRo74_OX4FUxY,68876
229
232
  claude_mpm/dashboard/static/js/extension-error-handler.js,sha256=DZHrJ3gbfv4nsjmZpNMj-Sc3GKjVJ5ds8lgoaLRnq5I,6274
230
- claude_mpm/dashboard/static/js/socket-client.js,sha256=EOAO7HswWMT7XrOOW0O5P3j47mjqZL3VIyl1mFgulbA,56442
233
+ claude_mpm/dashboard/static/js/socket-client.js,sha256=LQyB7jf8oCqJ3uNyZ3WEix2faMO1TbMyIoV9a-ebScE,57251
231
234
  claude_mpm/dashboard/static/js/components/activity-tree.js,sha256=1j46X0qjYReP6gwv0WGRpJSJNuBwuj6bKmumWrCZKUo,72740
232
235
  claude_mpm/dashboard/static/js/components/agent-hierarchy.js,sha256=Xihxog_vJrk8VBEkDogV_wbye2GIFWmH71VQ1lETOHk,28243
233
236
  claude_mpm/dashboard/static/js/components/agent-inference.js,sha256=RUVZ_fLOyDkHYjrROen_Pzzay79Bh29eXp_GRIPbIRg,37493
234
237
  claude_mpm/dashboard/static/js/components/build-tracker.js,sha256=iouv35tNhnyx9UKtD7X1eakJkpCnvZVCrAJ_VdzsKUY,11251
235
- claude_mpm/dashboard/static/js/components/code-simple.js,sha256=3A3VIvHMpYRjuDKGMaQYoVjf-zuUa4Q6pdBHWDJ0ygM,32050
236
- claude_mpm/dashboard/static/js/components/code-tree.js,sha256=NW-fo4L5R0Td-zRVk3_rDYsf-GDZh_dOnzF12SdBYfU,222125
238
+ claude_mpm/dashboard/static/js/components/code-simple.js,sha256=2yOEr5ziM0rKlsE65cemZIlFK31ylmcJeXAQZFHQF5Y,33797
239
+ claude_mpm/dashboard/static/js/components/code-tree.js,sha256=Fi3s9Psojgj2lH9cXPAINc4n-Z_y9KLjiCkM9VpYyoo,223576
237
240
  claude_mpm/dashboard/static/js/components/code-viewer.js,sha256=vhesEPYOM6MggweaYvYsv7ufVbuVpIcyJPXpJXyJwpM,14453
238
241
  claude_mpm/dashboard/static/js/components/connection-debug.js,sha256=Qxr_ofDNkxDlZAwbLnhZkXVMyuO9jOe-NMWC9VHxNnA,22196
239
242
  claude_mpm/dashboard/static/js/components/event-processor.js,sha256=pP15JIf2yEh7gqEdam42m_B1B4hDlfKbkDcGmQhyjM8,20567
240
243
  claude_mpm/dashboard/static/js/components/event-viewer.js,sha256=Ahl9eTxCYMhDC_533Gf4O96S04W5O_Ts0PAGWSVivkI,43672
241
244
  claude_mpm/dashboard/static/js/components/export-manager.js,sha256=T1YtaR758FaB9aP_5V1xZC9EBIFQOG5H8f_sLopxR5A,11863
242
245
  claude_mpm/dashboard/static/js/components/file-tool-tracker.js,sha256=y8O7kW5uP6KBT2gWvjRoH1aJG-7o1qzyrVnvShsNAK0,28620
243
- claude_mpm/dashboard/static/js/components/file-viewer.js,sha256=FPbbZC2fwJNE3nLwql6A_xHhMMHaB5NhxZlDSqHl9kM,17193
246
+ claude_mpm/dashboard/static/js/components/file-viewer.js,sha256=Q9twY64RJD4ozcsI9k0foUvDCCsDMWCX-ojywqImhNY,19777
244
247
  claude_mpm/dashboard/static/js/components/hud-library-loader.js,sha256=SK6tY8TL88lnewi4M-i092HdgYondv_lVfHoQ-A_cWU,7170
245
248
  claude_mpm/dashboard/static/js/components/hud-manager.js,sha256=hpvz1Ls5UcNgTbwjl7tK0OgNZ_QHnRXgNqqYaq4jjvM,25956
246
249
  claude_mpm/dashboard/static/js/components/hud-visualizer.js,sha256=crgq3eA4xiXDE4SV9m-S94Of2y7znd1a3F4GYn2yjnU,61127
247
250
  claude_mpm/dashboard/static/js/components/module-viewer.js,sha256=Ndw3ZDLRP4xaMw2akEH5Dvkof4Vp9umk8yFQzQntLkI,109010
248
- claude_mpm/dashboard/static/js/components/session-manager.js,sha256=pJrlMcSBNTXoK5nDLWLcIesOosk0FQtkTEM6X7eSI_I,22807
251
+ claude_mpm/dashboard/static/js/components/session-manager.js,sha256=1J6XdWJPZ_ykrK7y5S3p4Y3HyWGcYoLo69XudeG66nU,22769
249
252
  claude_mpm/dashboard/static/js/components/socket-manager.js,sha256=KC-aOJDEPSiMPYk0ABgvCC1xmO7TVQ4SVqohi2GNsWQ,13303
250
253
  claude_mpm/dashboard/static/js/components/ui-state-manager.js,sha256=EWm0HpPI9TShChitRCyZvZCiUk5rIBVyw10BoHdnTzI,13178
251
254
  claude_mpm/dashboard/static/js/components/unified-data-viewer.js,sha256=afHCGAg7v3PVhmOr77Bzx3TTZlzHI_5pq16ut3xEYWk,65302
252
- claude_mpm/dashboard/static/js/components/working-directory.js,sha256=BRsPYwVnhbhFl0mC0Gvb-Ev1zxAu6yZpZcl1T1aJWWA,33558
255
+ claude_mpm/dashboard/static/js/components/working-directory.js,sha256=BMzcjZ3VNGMhfj0tPQlozxgBOTvyan8AnIwpOUlubAc,33951
256
+ claude_mpm/dashboard/static/js/components/code-tree/tree-breadcrumb.js,sha256=oijL6R5JFqSm9aHEbh46D7rgK_EDSmAGW-PO2vmacGM,10481
257
+ claude_mpm/dashboard/static/js/components/code-tree/tree-constants.js,sha256=aqsoqklN92XmeiYN6V1zl-_EEcyNSEnqn46f6du5Pm4,6357
258
+ claude_mpm/dashboard/static/js/components/code-tree/tree-search.js,sha256=n7rbxIlE8ahBZVpGf0v4m4P0m2XmzaZtzNPPvqpjXRk,11788
259
+ claude_mpm/dashboard/static/js/components/code-tree/tree-utils.js,sha256=gEjjClXna7BxIsVhmYegahuO49kaE0FbbmHvV0oMmk8,12913
260
+ claude_mpm/dashboard/static/js/shared/dom-helpers.js,sha256=PXY8iLBJqsWP_NNyFiSgnxu7cGzhnjjjiKHkJj7Z3SU,12233
261
+ claude_mpm/dashboard/static/js/shared/event-bus.js,sha256=aV2QMt8Ris1BFxuFUYoOvMYXb3M4AmPHsppaBDbbxXo,9906
262
+ claude_mpm/dashboard/static/js/shared/logger.js,sha256=nQE-6b8pAAhWsafgon6UT-ueyOmhukrNFaGkcT77RS0,10431
263
+ claude_mpm/dashboard/static/js/shared/tooltip-service.js,sha256=T0_0koY2SNHTlctzU4Z5VBH0EWRXmO-ODo9WvO2HUto,7588
253
264
  claude_mpm/dashboard/templates/code_simple.html,sha256=xrmTLFow0M5NWFlk4ci1eLWML-IHr35i5pqIVaEg2TU,4329
254
- claude_mpm/dashboard/templates/index.html,sha256=-YmK978ysSuXGON8bLKeARwihJsq6UO5JEsFXOMmjkY,30768
265
+ claude_mpm/dashboard/templates/index.html,sha256=1WPBMH2YF93IO7dUNvdaY6k1BcX5ZmlUzsFYAsSwtb4,31630
255
266
  claude_mpm/experimental/__init__.py,sha256=R_aclOvWpvSTHWAx9QXyg9OIPVK2dXT5tQJhxLQN11Y,369
256
267
  claude_mpm/experimental/cli_enhancements.py,sha256=rlYOMVlj8vQzuyCkHWQ7TtjcsDeFq3y1Ng5qty2fyY8,11486
257
268
  claude_mpm/generators/__init__.py,sha256=rG8vwF_BjPmeMKvyMXpUA8uJ-7mtW2HTNfalZzgRlNk,153
@@ -414,7 +425,7 @@ claude_mpm/services/cli/memory_crud_service.py,sha256=ciN9Pl_12iDAqF9zPBWOzu-iXi
414
425
  claude_mpm/services/cli/memory_output_formatter.py,sha256=nbf7VsjGvH4e9fLv9c7PzjuO9COZhbK5P2fNZ79055w,24783
415
426
  claude_mpm/services/cli/session_manager.py,sha256=rla_Stbcvt93wa9G9MCMu9UqB3FLGqlPt_eN5lQb3Gg,16599
416
427
  claude_mpm/services/cli/startup_checker.py,sha256=efhuvu8ns5G16jcQ0nQZKVddmD2AktUEdlvjNcXjAuk,12232
417
- claude_mpm/services/cli/unified_dashboard_manager.py,sha256=RzUSBwyUmUcgF1quHich1xQsQSvtWknPexeOicEeHzE,11481
428
+ claude_mpm/services/cli/unified_dashboard_manager.py,sha256=GHLDe57UI1SMW04G6E97oc-bZPnNDv4eMXrUfll2ShE,11570
418
429
  claude_mpm/services/communication/__init__.py,sha256=b4qc7_Rqy4DE9q7BAUlfUZjoYG4uimAyUnE0irPcXyU,560
419
430
  claude_mpm/services/core/__init__.py,sha256=evEayLlBqJvxMZhrhuK6aagXmNrKGSj8Jm9OOxKzqvU,2195
420
431
  claude_mpm/services/core/base.py,sha256=iA-F7DgGp-FJIMvQTiHQ68RkG_k-AtUWlArJPMw6ZPk,7297
@@ -532,11 +543,12 @@ claude_mpm/services/memory/cache/simple_cache.py,sha256=qsTjbcsPxj-kNfaod9VN_uE5
532
543
  claude_mpm/services/monitor/__init__.py,sha256=X7gxSLUm9Fg_zEsX6LtCHP2ipF0qj6Emkun20h2So7g,745
533
544
  claude_mpm/services/monitor/daemon.py,sha256=9PyhEXpMUJ1LBmZdoLwzQmfjdCnXn8GeErywBnMScoY,12588
534
545
  claude_mpm/services/monitor/event_emitter.py,sha256=JzRLNg8PUJ5s3ulNnq_D4yqCPItvidJzu8DmFxriieQ,12224
535
- claude_mpm/services/monitor/server.py,sha256=fuefcZVqjEupyIKun1ElPw2mlEm2frfqh1iLcnB3af4,21911
536
- claude_mpm/services/monitor/handlers/__init__.py,sha256=rxPCb1jc4v0-ODRK4tTzO_IxWLlaG0d6ghF8yJgVvxw,656
546
+ claude_mpm/services/monitor/server.py,sha256=iJrGpZLOeqEis0zWIzg0ef4yCJWeR0xBYdjTnwWJzfg,26377
547
+ claude_mpm/services/monitor/handlers/__init__.py,sha256=jgPIf4IJVERm_tAeD9834tfx9IcxtlHj5r9rhEWpkfM,701
537
548
  claude_mpm/services/monitor/handlers/code_analysis.py,sha256=mHyI27Wp6WVmUBc0m0i991ogyFZBTvkrfR7Kf3EAk5U,11474
538
549
  claude_mpm/services/monitor/handlers/dashboard.py,sha256=uGBhb-6RG6u4WLipUXgdx7RCW-vb_qek5dIfHIwAC7o,9805
539
- claude_mpm/services/monitor/handlers/hooks.py,sha256=s9CVlDLd-onH6WCOPeN06UjpEYVfuGjHw_icz220K_M,16533
550
+ claude_mpm/services/monitor/handlers/file.py,sha256=p3C4wffl0GIcN00b-KkrmZ8F-AmdZlGqLzBqQcqZ9Ns,9729
551
+ claude_mpm/services/monitor/handlers/hooks.py,sha256=dlrmyFu8WChlvn6-sND9DLjSbm5nrMfNZrAgoWN-2No,17582
540
552
  claude_mpm/services/monitor/management/__init__.py,sha256=mxaEFRgvvgV85gUpXu_DsnHtywihdP14EisvISAVZuQ,525
541
553
  claude_mpm/services/monitor/management/health.py,sha256=Wm92Cli_4cWD6B89KX_CdpAvvevuEaGB8Ah59ILhFww,3772
542
554
  claude_mpm/services/monitor/management/lifecycle.py,sha256=Cahpc1-R09ihDYVWiMI9wnv-Qw20cNhHHcJyxZ9JcBo,10575
@@ -566,7 +578,7 @@ claude_mpm/services/socketio/handlers/base.py,sha256=DjUODCOLTQSsC_-NP9yr-8g77ar
566
578
  claude_mpm/services/socketio/handlers/code_analysis.py,sha256=BmcJiygXaCVjVJndE-GFi4eN7_b8v7mqScddMTj5DUk,26271
567
579
  claude_mpm/services/socketio/handlers/connection.py,sha256=sa6Rg5Y9tcf-e4PEb6f4fNhFQcpZ9WbwdiGXmkzlFTs,26781
568
580
  claude_mpm/services/socketio/handlers/connection_handler.py,sha256=DTY0pa--HQu4C6-WCgE1zskvHm3gVuEKWwaSFNBAoec,13287
569
- claude_mpm/services/socketio/handlers/file.py,sha256=itpPa5OAow5_OXrTOXk0vsyuEYm4iVmxwN9xowy7jiY,8341
581
+ claude_mpm/services/socketio/handlers/file.py,sha256=28ghfPO8-7jZuX723WzW3vDHg6H6iJ3pvfneDA3mf5A,9866
570
582
  claude_mpm/services/socketio/handlers/git.py,sha256=xIjGGShyVNXzCtJfydbbnFTJhqzXwHLzGhLrqgy0JGQ,37934
571
583
  claude_mpm/services/socketio/handlers/hook.py,sha256=JVQufL_u85z3r-n3fnKExuziheJ2lzY6d0GDoUB9iXs,7786
572
584
  claude_mpm/services/socketio/handlers/memory.py,sha256=Ape6cCMe3uOgMiXRbgQttvgHUABsFXrrxQ9OI-mGM8M,971
@@ -620,9 +632,9 @@ claude_mpm/utils/subprocess_utils.py,sha256=zgiwLqh_17WxHpySvUPH65pb4bzIeUGOAYUJ
620
632
  claude_mpm/validation/__init__.py,sha256=YZhwE3mhit-lslvRLuwfX82xJ_k4haZeKmh4IWaVwtk,156
621
633
  claude_mpm/validation/agent_validator.py,sha256=3Lo6LK-Mw9IdnL_bd3zl_R6FkgSVDYKUUM7EeVVD3jc,20865
622
634
  claude_mpm/validation/frontmatter_validator.py,sha256=u8g4Eyd_9O6ugj7Un47oSGh3kqv4wMkuks2i_CtWRvM,7028
623
- claude_mpm-4.2.13.dist-info/licenses/LICENSE,sha256=lpaivOlPuBZW1ds05uQLJJswy8Rp_HMNieJEbFlqvLk,1072
624
- claude_mpm-4.2.13.dist-info/METADATA,sha256=8KwBn_hYIaHTcm94JC1lyY29sy8K2_PwOtmW_8PMbn4,13777
625
- claude_mpm-4.2.13.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
626
- claude_mpm-4.2.13.dist-info/entry_points.txt,sha256=FDPZgz8JOvD-6iuXY2l9Zbo9zYVRuE4uz4Qr0vLeGOk,471
627
- claude_mpm-4.2.13.dist-info/top_level.txt,sha256=1nUg3FEaBySgm8t-s54jK5zoPnu3_eY6EP6IOlekyHA,11
628
- claude_mpm-4.2.13.dist-info/RECORD,,
635
+ claude_mpm-4.2.15.dist-info/licenses/LICENSE,sha256=lpaivOlPuBZW1ds05uQLJJswy8Rp_HMNieJEbFlqvLk,1072
636
+ claude_mpm-4.2.15.dist-info/METADATA,sha256=yZkuyRXXRoQRdQYXl9eeCW3AALb9Xu_Yrg7qyVHY8MI,13777
637
+ claude_mpm-4.2.15.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
638
+ claude_mpm-4.2.15.dist-info/entry_points.txt,sha256=FDPZgz8JOvD-6iuXY2l9Zbo9zYVRuE4uz4Qr0vLeGOk,471
639
+ claude_mpm-4.2.15.dist-info/top_level.txt,sha256=1nUg3FEaBySgm8t-s54jK5zoPnu3_eY6EP6IOlekyHA,11
640
+ claude_mpm-4.2.15.dist-info/RECORD,,