claude-mpm 4.2.13__py3-none-any.whl → 4.2.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.
Files changed (34) hide show
  1. claude_mpm/core/constants.py +65 -0
  2. claude_mpm/core/error_handler.py +625 -0
  3. claude_mpm/core/file_utils.py +770 -0
  4. claude_mpm/core/logging_utils.py +502 -0
  5. claude_mpm/dashboard/static/dist/components/code-tree.js +1 -1
  6. claude_mpm/dashboard/static/dist/components/file-viewer.js +1 -1
  7. claude_mpm/dashboard/static/dist/dashboard.js +1 -1
  8. claude_mpm/dashboard/static/dist/socket-client.js +1 -1
  9. claude_mpm/dashboard/static/js/components/code-simple.js +44 -1
  10. claude_mpm/dashboard/static/js/components/code-tree/tree-breadcrumb.js +353 -0
  11. claude_mpm/dashboard/static/js/components/code-tree/tree-constants.js +235 -0
  12. claude_mpm/dashboard/static/js/components/code-tree/tree-search.js +409 -0
  13. claude_mpm/dashboard/static/js/components/code-tree/tree-utils.js +435 -0
  14. claude_mpm/dashboard/static/js/components/code-tree.js +29 -5
  15. claude_mpm/dashboard/static/js/components/file-viewer.js +69 -27
  16. claude_mpm/dashboard/static/js/components/session-manager.js +1 -1
  17. claude_mpm/dashboard/static/js/components/working-directory.js +18 -9
  18. claude_mpm/dashboard/static/js/dashboard.js +55 -9
  19. claude_mpm/dashboard/static/js/shared/dom-helpers.js +396 -0
  20. claude_mpm/dashboard/static/js/shared/event-bus.js +330 -0
  21. claude_mpm/dashboard/static/js/shared/logger.js +385 -0
  22. claude_mpm/dashboard/static/js/shared/tooltip-service.js +253 -0
  23. claude_mpm/dashboard/static/js/socket-client.js +18 -0
  24. claude_mpm/dashboard/templates/index.html +21 -8
  25. claude_mpm/services/monitor/handlers/__init__.py +2 -1
  26. claude_mpm/services/monitor/handlers/file.py +263 -0
  27. claude_mpm/services/monitor/server.py +81 -1
  28. claude_mpm/services/socketio/handlers/file.py +40 -5
  29. {claude_mpm-4.2.13.dist-info → claude_mpm-4.2.14.dist-info}/METADATA +1 -1
  30. {claude_mpm-4.2.13.dist-info → claude_mpm-4.2.14.dist-info}/RECORD +34 -22
  31. {claude_mpm-4.2.13.dist-info → claude_mpm-4.2.14.dist-info}/WHEEL +0 -0
  32. {claude_mpm-4.2.13.dist-info → claude_mpm-4.2.14.dist-info}/entry_points.txt +0 -0
  33. {claude_mpm-4.2.13.dist-info → claude_mpm-4.2.14.dist-info}/licenses/LICENSE +0 -0
  34. {claude_mpm-4.2.13.dist-info → claude_mpm-4.2.14.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")
@@ -475,9 +490,73 @@ class UnifiedMonitorServer:
475
490
  except Exception as e:
476
491
  self.logger.error(f"Error stopping unified monitor server: {e}")
477
492
 
493
+ async def _heartbeat_loop(self):
494
+ """Send heartbeat events every 3 minutes."""
495
+ try:
496
+ while self.running:
497
+ # Wait 3 minutes (180 seconds)
498
+ await asyncio.sleep(180)
499
+
500
+ if not self.running:
501
+ break
502
+
503
+ # Increment heartbeat count
504
+ self.heartbeat_count += 1
505
+
506
+ # Calculate server uptime
507
+ uptime_seconds = int(time.time() - self.server_start_time)
508
+ uptime_minutes = uptime_seconds // 60
509
+ uptime_hours = uptime_minutes // 60
510
+
511
+ # Format uptime string
512
+ if uptime_hours > 0:
513
+ uptime_str = f"{uptime_hours}h {uptime_minutes % 60}m"
514
+ else:
515
+ uptime_str = f"{uptime_minutes}m {uptime_seconds % 60}s"
516
+
517
+ # Get connected client count
518
+ connected_clients = 0
519
+ if self.dashboard_handler:
520
+ connected_clients = len(self.dashboard_handler.connected_clients)
521
+
522
+ # Create heartbeat data
523
+ heartbeat_data = {
524
+ "timestamp": datetime.utcnow().isoformat() + "Z",
525
+ "type": "heartbeat",
526
+ "server_uptime": uptime_seconds,
527
+ "server_uptime_formatted": uptime_str,
528
+ "connected_clients": connected_clients,
529
+ "heartbeat_number": self.heartbeat_count,
530
+ "message": f"Server heartbeat #{self.heartbeat_count} - Socket.IO connection active",
531
+ "service": "unified-monitor",
532
+ "port": self.port,
533
+ }
534
+
535
+ # Emit heartbeat event
536
+ if self.sio:
537
+ await self.sio.emit("heartbeat", heartbeat_data)
538
+ self.logger.debug(
539
+ f"Heartbeat #{self.heartbeat_count} sent - "
540
+ f"{connected_clients} clients connected, uptime: {uptime_str}"
541
+ )
542
+
543
+ except asyncio.CancelledError:
544
+ self.logger.debug("Heartbeat task cancelled")
545
+ except Exception as e:
546
+ self.logger.error(f"Error in heartbeat loop: {e}")
547
+
478
548
  async def _cleanup_async(self):
479
549
  """Cleanup async resources."""
480
550
  try:
551
+ # Cancel heartbeat task if running
552
+ if self.heartbeat_task and not self.heartbeat_task.done():
553
+ self.heartbeat_task.cancel()
554
+ try:
555
+ await self.heartbeat_task
556
+ except asyncio.CancelledError:
557
+ pass
558
+ self.logger.debug("Heartbeat task cancelled")
559
+
481
560
  # Close the Socket.IO server first to stop accepting new connections
482
561
  if self.sio:
483
562
  try:
@@ -544,6 +623,7 @@ class UnifiedMonitorServer:
544
623
  "handlers": {
545
624
  "code_analysis": self.code_analysis_handler is not None,
546
625
  "dashboard": self.dashboard_handler is not None,
626
+ "file": self.file_handler is not None,
547
627
  "hooks": self.hook_handler is not None,
548
628
  },
549
629
  }
@@ -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.14
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
@@ -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=UYNtaBDK_Z8WEnXL5ElVqMtxUHTq64_29tY0SCt-eQw,67479
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=fPzAB-H4a5cjbxplpiiFglGzl54Vnrvlu9n6BWN0Kjk,22777
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=bwSSJr1bBQngE-Hf3fWMoVE8MrMvLquWAbKbDPXY4RA,31651
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
@@ -532,10 +543,11 @@ 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=wyOT0dnXXpTVulnG29kgRKaPjzhTojFRvraRTAVnr9U,25150
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
550
+ claude_mpm/services/monitor/handlers/file.py,sha256=p3C4wffl0GIcN00b-KkrmZ8F-AmdZlGqLzBqQcqZ9Ns,9729
539
551
  claude_mpm/services/monitor/handlers/hooks.py,sha256=s9CVlDLd-onH6WCOPeN06UjpEYVfuGjHw_icz220K_M,16533
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
@@ -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.14.dist-info/licenses/LICENSE,sha256=lpaivOlPuBZW1ds05uQLJJswy8Rp_HMNieJEbFlqvLk,1072
636
+ claude_mpm-4.2.14.dist-info/METADATA,sha256=AjAb1374OGRoa63GQQSviTHkHFRuTry1TLeZO4YZJJY,13777
637
+ claude_mpm-4.2.14.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
638
+ claude_mpm-4.2.14.dist-info/entry_points.txt,sha256=FDPZgz8JOvD-6iuXY2l9Zbo9zYVRuE4uz4Qr0vLeGOk,471
639
+ claude_mpm-4.2.14.dist-info/top_level.txt,sha256=1nUg3FEaBySgm8t-s54jK5zoPnu3_eY6EP6IOlekyHA,11
640
+ claude_mpm-4.2.14.dist-info/RECORD,,