claude-mpm 4.2.9__py3-none-any.whl → 4.2.11__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 +59 -126
- claude_mpm/cli/commands/monitor.py +71 -212
- claude_mpm/cli/commands/run.py +33 -33
- claude_mpm/dashboard/static/css/code-tree.css +8 -16
- claude_mpm/dashboard/static/dist/components/code-tree.js +1 -1
- claude_mpm/dashboard/static/dist/components/file-viewer.js +2 -0
- claude_mpm/dashboard/static/dist/components/module-viewer.js +1 -1
- claude_mpm/dashboard/static/dist/components/unified-data-viewer.js +1 -1
- claude_mpm/dashboard/static/dist/dashboard.js +1 -1
- claude_mpm/dashboard/static/dist/socket-client.js +1 -1
- claude_mpm/dashboard/static/js/components/code-tree.js +692 -114
- claude_mpm/dashboard/static/js/components/file-viewer.js +538 -0
- claude_mpm/dashboard/static/js/components/module-viewer.js +26 -0
- claude_mpm/dashboard/static/js/components/unified-data-viewer.js +166 -14
- claude_mpm/dashboard/static/js/dashboard.js +108 -91
- claude_mpm/dashboard/static/js/socket-client.js +9 -7
- claude_mpm/dashboard/templates/index.html +2 -7
- claude_mpm/hooks/claude_hooks/hook_handler.py +1 -11
- claude_mpm/hooks/claude_hooks/services/connection_manager.py +54 -59
- claude_mpm/hooks/claude_hooks/services/connection_manager_http.py +112 -72
- claude_mpm/services/agents/deployment/agent_template_builder.py +0 -1
- claude_mpm/services/cli/unified_dashboard_manager.py +354 -0
- claude_mpm/services/monitor/__init__.py +20 -0
- claude_mpm/services/monitor/daemon.py +256 -0
- claude_mpm/services/monitor/event_emitter.py +279 -0
- claude_mpm/services/monitor/handlers/__init__.py +20 -0
- claude_mpm/services/monitor/handlers/code_analysis.py +334 -0
- claude_mpm/services/monitor/handlers/dashboard.py +298 -0
- claude_mpm/services/monitor/handlers/hooks.py +491 -0
- claude_mpm/services/monitor/management/__init__.py +18 -0
- claude_mpm/services/monitor/management/health.py +124 -0
- claude_mpm/services/monitor/management/lifecycle.py +298 -0
- claude_mpm/services/monitor/server.py +442 -0
- claude_mpm/tools/code_tree_analyzer.py +33 -17
- {claude_mpm-4.2.9.dist-info → claude_mpm-4.2.11.dist-info}/METADATA +1 -1
- {claude_mpm-4.2.9.dist-info → claude_mpm-4.2.11.dist-info}/RECORD +41 -36
- claude_mpm/cli/commands/socketio_monitor.py +0 -233
- claude_mpm/scripts/socketio_daemon.py +0 -571
- claude_mpm/scripts/socketio_daemon_hardened.py +0 -937
- claude_mpm/scripts/socketio_daemon_wrapper.py +0 -78
- claude_mpm/scripts/socketio_server_manager.py +0 -349
- claude_mpm/services/cli/dashboard_launcher.py +0 -423
- claude_mpm/services/cli/socketio_manager.py +0 -595
- claude_mpm/services/dashboard/stable_server.py +0 -1020
- claude_mpm/services/socketio/monitor_server.py +0 -505
- {claude_mpm-4.2.9.dist-info → claude_mpm-4.2.11.dist-info}/WHEEL +0 -0
- {claude_mpm-4.2.9.dist-info → claude_mpm-4.2.11.dist-info}/entry_points.txt +0 -0
- {claude_mpm-4.2.9.dist-info → claude_mpm-4.2.11.dist-info}/licenses/LICENSE +0 -0
- {claude_mpm-4.2.9.dist-info → claude_mpm-4.2.11.dist-info}/top_level.txt +0 -0
claude_mpm/cli/commands/run.py
CHANGED
|
@@ -21,10 +21,11 @@ from typing import Optional
|
|
|
21
21
|
from ...constants import LogLevel
|
|
22
22
|
from ...core.logger import get_logger
|
|
23
23
|
from ...core.unified_paths import get_scripts_dir
|
|
24
|
-
from ...services.cli.dashboard_launcher import DashboardLauncher
|
|
25
24
|
from ...services.cli.session_manager import SessionManager
|
|
26
|
-
|
|
25
|
+
|
|
26
|
+
# SocketIOManager functionality now provided by UnifiedDashboardManager
|
|
27
27
|
from ...services.cli.startup_checker import StartupCheckerService
|
|
28
|
+
from ...services.cli.unified_dashboard_manager import UnifiedDashboardManager
|
|
28
29
|
from ..shared import BaseCommand, CommandResult
|
|
29
30
|
from ..startup_logging import (
|
|
30
31
|
cleanup_old_startup_logs,
|
|
@@ -423,16 +424,16 @@ class RunCommand(BaseCommand):
|
|
|
423
424
|
self.logger.warning(f"Dependency check failed: {e}")
|
|
424
425
|
|
|
425
426
|
def _setup_monitoring(self, args):
|
|
426
|
-
"""Setup monitoring configuration using
|
|
427
|
+
"""Setup monitoring configuration using UnifiedDashboardManager."""
|
|
427
428
|
monitor_mode = getattr(args, "monitor", False)
|
|
428
429
|
websocket_port = 8765 # Default port
|
|
429
430
|
|
|
430
431
|
if monitor_mode:
|
|
431
|
-
# Use
|
|
432
|
-
|
|
432
|
+
# Use UnifiedDashboardManager for server management
|
|
433
|
+
dashboard_manager = UnifiedDashboardManager(self.logger)
|
|
433
434
|
|
|
434
435
|
# Check dependencies
|
|
435
|
-
deps_ok, error_msg =
|
|
436
|
+
deps_ok, error_msg = dashboard_manager.ensure_dependencies()
|
|
436
437
|
if not deps_ok:
|
|
437
438
|
self.logger.warning(
|
|
438
439
|
f"Socket.IO dependencies not available: {error_msg}, disabling monitor mode"
|
|
@@ -440,8 +441,8 @@ class RunCommand(BaseCommand):
|
|
|
440
441
|
monitor_mode = False
|
|
441
442
|
else:
|
|
442
443
|
# Find available port and start server
|
|
443
|
-
websocket_port =
|
|
444
|
-
success, server_info =
|
|
444
|
+
websocket_port = dashboard_manager.find_available_port(8765)
|
|
445
|
+
success, server_info = dashboard_manager.start_server(
|
|
445
446
|
port=websocket_port
|
|
446
447
|
)
|
|
447
448
|
|
|
@@ -451,12 +452,12 @@ class RunCommand(BaseCommand):
|
|
|
451
452
|
)
|
|
452
453
|
monitor_mode = False
|
|
453
454
|
else:
|
|
454
|
-
# Use
|
|
455
|
-
|
|
456
|
-
monitor_url =
|
|
455
|
+
# Use UnifiedDashboardManager for browser opening only
|
|
456
|
+
dashboard_manager = UnifiedDashboardManager(self.logger)
|
|
457
|
+
monitor_url = dashboard_manager.get_dashboard_url(websocket_port)
|
|
457
458
|
|
|
458
459
|
# Try to open browser
|
|
459
|
-
browser_opened =
|
|
460
|
+
browser_opened = dashboard_manager.open_browser(monitor_url)
|
|
460
461
|
args._browser_opened_by_cli = browser_opened
|
|
461
462
|
|
|
462
463
|
if not browser_opened:
|
|
@@ -855,12 +856,12 @@ def run_session_legacy(args):
|
|
|
855
856
|
|
|
856
857
|
# Display Socket.IO server info if enabled
|
|
857
858
|
if enable_websocket:
|
|
858
|
-
# Use
|
|
859
|
-
|
|
859
|
+
# Use UnifiedDashboardManager for server management
|
|
860
|
+
dashboard_manager = UnifiedDashboardManager(logger)
|
|
860
861
|
|
|
861
862
|
# Check dependencies
|
|
862
863
|
print("🔧 Checking Socket.IO dependencies...")
|
|
863
|
-
deps_ok, error_msg =
|
|
864
|
+
deps_ok, error_msg = dashboard_manager.ensure_dependencies()
|
|
864
865
|
|
|
865
866
|
if not deps_ok:
|
|
866
867
|
print(f"❌ Failed to install Socket.IO dependencies: {error_msg}")
|
|
@@ -874,8 +875,8 @@ def run_session_legacy(args):
|
|
|
874
875
|
|
|
875
876
|
# Find available port and start server if in monitor mode
|
|
876
877
|
if monitor_mode:
|
|
877
|
-
websocket_port =
|
|
878
|
-
success, server_info =
|
|
878
|
+
websocket_port = dashboard_manager.find_available_port(websocket_port)
|
|
879
|
+
success, server_info = dashboard_manager.start_server(
|
|
879
880
|
port=websocket_port
|
|
880
881
|
)
|
|
881
882
|
|
|
@@ -886,10 +887,10 @@ def run_session_legacy(args):
|
|
|
886
887
|
" Note: Socket.IO monitoring using exec mode with Claude Code hooks"
|
|
887
888
|
)
|
|
888
889
|
|
|
889
|
-
# Use
|
|
890
|
-
|
|
891
|
-
monitor_url =
|
|
892
|
-
browser_opened =
|
|
890
|
+
# Use UnifiedDashboardManager for browser opening
|
|
891
|
+
dashboard_manager = UnifiedDashboardManager(logger)
|
|
892
|
+
monitor_url = dashboard_manager.get_dashboard_url(websocket_port)
|
|
893
|
+
browser_opened = dashboard_manager.open_browser(monitor_url)
|
|
893
894
|
args._browser_opened_by_cli = browser_opened
|
|
894
895
|
|
|
895
896
|
if not browser_opened:
|
|
@@ -971,16 +972,15 @@ def run_session_legacy(args):
|
|
|
971
972
|
runner.run_interactive(context)
|
|
972
973
|
|
|
973
974
|
|
|
974
|
-
# Legacy helper functions - now delegating to
|
|
975
|
+
# Legacy helper functions - now delegating to UnifiedDashboardManager
|
|
975
976
|
def launch_socketio_monitor(port, logger):
|
|
976
977
|
"""Launch the Socket.IO monitoring dashboard (legacy compatibility)."""
|
|
977
|
-
|
|
978
|
-
success, server_info =
|
|
978
|
+
dashboard_manager = UnifiedDashboardManager(logger)
|
|
979
|
+
success, server_info = dashboard_manager.start_server(port=port)
|
|
979
980
|
|
|
980
981
|
if success:
|
|
981
|
-
# Open browser using
|
|
982
|
-
|
|
983
|
-
browser_opened = launcher._open_browser(server_info.url)
|
|
982
|
+
# Open browser using UnifiedDashboardManager
|
|
983
|
+
browser_opened = dashboard_manager.open_browser(server_info.url)
|
|
984
984
|
return success, browser_opened
|
|
985
985
|
|
|
986
986
|
return False, False
|
|
@@ -988,21 +988,21 @@ def launch_socketio_monitor(port, logger):
|
|
|
988
988
|
|
|
989
989
|
def _check_socketio_server_running(port, logger):
|
|
990
990
|
"""Check if a Socket.IO server is running on the specified port (legacy compatibility)."""
|
|
991
|
-
|
|
992
|
-
return
|
|
991
|
+
dashboard_manager = UnifiedDashboardManager(logger)
|
|
992
|
+
return dashboard_manager.is_server_running(port)
|
|
993
993
|
|
|
994
994
|
|
|
995
995
|
def _start_standalone_socketio_server(port, logger):
|
|
996
996
|
"""Start a standalone Socket.IO server (legacy compatibility)."""
|
|
997
|
-
|
|
998
|
-
success, _ =
|
|
997
|
+
dashboard_manager = UnifiedDashboardManager(logger)
|
|
998
|
+
success, _ = dashboard_manager.start_server(port=port)
|
|
999
999
|
return success
|
|
1000
1000
|
|
|
1001
1001
|
|
|
1002
1002
|
def open_in_browser_tab(url, logger):
|
|
1003
1003
|
"""Open URL in browser, attempting to reuse existing tabs when possible."""
|
|
1004
|
-
|
|
1005
|
-
return
|
|
1004
|
+
manager = UnifiedDashboardManager(logger)
|
|
1005
|
+
return manager.open_browser(url)
|
|
1006
1006
|
|
|
1007
1007
|
|
|
1008
1008
|
def _check_claude_json_memory(args, logger):
|
|
@@ -7,11 +7,10 @@
|
|
|
7
7
|
background: #f8f9fa;
|
|
8
8
|
}
|
|
9
9
|
|
|
10
|
-
/*
|
|
10
|
+
/* Container for Code Tree - Now full width */
|
|
11
11
|
.code-split-container {
|
|
12
12
|
display: flex;
|
|
13
13
|
flex: 1;
|
|
14
|
-
gap: 10px;
|
|
15
14
|
padding: 10px;
|
|
16
15
|
overflow: hidden;
|
|
17
16
|
}
|
|
@@ -461,33 +460,26 @@
|
|
|
461
460
|
color: #2d3748;
|
|
462
461
|
}
|
|
463
462
|
|
|
464
|
-
/* Code Tree Container */
|
|
463
|
+
/* Code Tree Container - Full Width */
|
|
465
464
|
.code-tree-container {
|
|
466
|
-
flex: 0 0 50%;
|
|
467
|
-
background: white;
|
|
468
|
-
border-radius: 8px;
|
|
469
|
-
padding: 20px;
|
|
470
|
-
position: relative;
|
|
471
|
-
overflow: auto;
|
|
472
|
-
box-shadow: 0 2px 4px rgba(0, 0, 0, 0.05);
|
|
473
|
-
border-left: 1px solid #e2e8f0;
|
|
474
|
-
}
|
|
475
|
-
|
|
476
|
-
/* Code Content Area */
|
|
477
|
-
.code-module-data-content {
|
|
478
465
|
flex: 1;
|
|
479
466
|
background: white;
|
|
480
467
|
border-radius: 8px;
|
|
481
468
|
padding: 20px;
|
|
469
|
+
position: relative;
|
|
482
470
|
overflow: auto;
|
|
483
471
|
box-shadow: 0 2px 4px rgba(0, 0, 0, 0.05);
|
|
484
472
|
border: 1px solid #e2e8f0;
|
|
485
473
|
}
|
|
486
474
|
|
|
475
|
+
/* Code Content Area - DEPRECATED (Removed duplicate pane) */
|
|
476
|
+
/* Content now displayed in main Structured Data section */
|
|
477
|
+
/* .code-module-data-content class removed */
|
|
478
|
+
|
|
487
479
|
/* Visual hierarchy improvements */
|
|
488
480
|
.code-tree-container:focus-within {
|
|
489
481
|
box-shadow: 0 4px 8px rgba(0, 0, 0, 0.1);
|
|
490
|
-
border-
|
|
482
|
+
border-color: #3b82f6;
|
|
491
483
|
}
|
|
492
484
|
|
|
493
485
|
/* Loading indicator */
|