claude-mpm 3.1.3__py3-none-any.whl → 3.2.1__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/__init__.py +3 -3
 - claude_mpm/__main__.py +0 -17
 - claude_mpm/agents/INSTRUCTIONS.md +81 -18
 - claude_mpm/agents/backups/INSTRUCTIONS.md +238 -0
 - claude_mpm/agents/base_agent.json +1 -1
 - claude_mpm/agents/templates/pm.json +25 -0
 - claude_mpm/agents/templates/research.json +2 -1
 - claude_mpm/cli/__init__.py +19 -23
 - claude_mpm/cli/commands/__init__.py +3 -1
 - claude_mpm/cli/commands/agents.py +7 -18
 - claude_mpm/cli/commands/info.py +5 -10
 - claude_mpm/cli/commands/memory.py +232 -0
 - claude_mpm/cli/commands/run.py +501 -28
 - claude_mpm/cli/commands/tickets.py +10 -17
 - claude_mpm/cli/commands/ui.py +15 -37
 - claude_mpm/cli/parser.py +91 -1
 - claude_mpm/cli/utils.py +9 -28
 - claude_mpm/config/socketio_config.py +256 -0
 - claude_mpm/constants.py +9 -0
 - claude_mpm/core/__init__.py +2 -2
 - claude_mpm/core/agent_registry.py +4 -4
 - claude_mpm/core/claude_runner.py +919 -0
 - claude_mpm/core/config.py +21 -1
 - claude_mpm/core/factories.py +1 -1
 - claude_mpm/core/hook_manager.py +196 -0
 - claude_mpm/core/pm_hook_interceptor.py +205 -0
 - claude_mpm/core/service_registry.py +1 -1
 - claude_mpm/core/simple_runner.py +323 -33
 - claude_mpm/core/socketio_pool.py +582 -0
 - claude_mpm/core/websocket_handler.py +233 -0
 - claude_mpm/deployment_paths.py +261 -0
 - claude_mpm/hooks/builtin/memory_hooks_example.py +67 -0
 - claude_mpm/hooks/claude_hooks/hook_handler.py +667 -679
 - claude_mpm/hooks/claude_hooks/hook_wrapper.sh +9 -4
 - claude_mpm/hooks/memory_integration_hook.py +312 -0
 - claude_mpm/models/__init__.py +9 -91
 - claude_mpm/orchestration/__init__.py +1 -1
 - claude_mpm/scripts/claude-mpm-socketio +32 -0
 - claude_mpm/scripts/claude_mpm_monitor.html +567 -0
 - claude_mpm/scripts/install_socketio_server.py +407 -0
 - claude_mpm/scripts/launch_monitor.py +132 -0
 - claude_mpm/scripts/manage_version.py +479 -0
 - claude_mpm/scripts/socketio_daemon.py +181 -0
 - claude_mpm/scripts/socketio_server_manager.py +428 -0
 - claude_mpm/services/__init__.py +5 -0
 - claude_mpm/services/agent_lifecycle_manager.py +76 -25
 - claude_mpm/services/agent_memory_manager.py +684 -0
 - claude_mpm/services/agent_modification_tracker.py +98 -17
 - claude_mpm/services/agent_persistence_service.py +33 -13
 - claude_mpm/services/agent_registry.py +82 -43
 - claude_mpm/services/hook_service.py +362 -0
 - claude_mpm/services/socketio_client_manager.py +474 -0
 - claude_mpm/services/socketio_server.py +698 -0
 - claude_mpm/services/standalone_socketio_server.py +631 -0
 - claude_mpm/services/ticket_manager.py +4 -5
 - claude_mpm/services/{ticket_manager_dependency_injection.py → ticket_manager_di.py} +12 -39
 - claude_mpm/services/{legacy_ticketing_service.py → ticketing_service_original.py} +9 -16
 - claude_mpm/services/version_control/semantic_versioning.py +9 -10
 - claude_mpm/services/websocket_server.py +376 -0
 - claude_mpm/utils/dependency_manager.py +211 -0
 - claude_mpm/utils/import_migration_example.py +80 -0
 - claude_mpm/utils/path_operations.py +0 -20
 - claude_mpm/web/open_dashboard.py +34 -0
 - {claude_mpm-3.1.3.dist-info → claude_mpm-3.2.1.dist-info}/METADATA +20 -9
 - {claude_mpm-3.1.3.dist-info → claude_mpm-3.2.1.dist-info}/RECORD +70 -50
 - claude_mpm-3.2.1.dist-info/entry_points.txt +7 -0
 - claude_mpm/cli_old.py +0 -728
 - claude_mpm/models/common.py +0 -41
 - claude_mpm/models/lifecycle.py +0 -97
 - claude_mpm/models/modification.py +0 -126
 - claude_mpm/models/persistence.py +0 -57
 - claude_mpm/models/registry.py +0 -91
 - claude_mpm/security/__init__.py +0 -8
 - claude_mpm/security/bash_validator.py +0 -393
 - claude_mpm-3.1.3.dist-info/entry_points.txt +0 -4
 - /claude_mpm/{cli_enhancements.py → experimental/cli_enhancements.py} +0 -0
 - {claude_mpm-3.1.3.dist-info → claude_mpm-3.2.1.dist-info}/WHEEL +0 -0
 - {claude_mpm-3.1.3.dist-info → claude_mpm-3.2.1.dist-info}/licenses/LICENSE +0 -0
 - {claude_mpm-3.1.3.dist-info → claude_mpm-3.2.1.dist-info}/top_level.txt +0 -0
 
| 
         @@ -0,0 +1,211 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            """
         
     | 
| 
      
 2 
     | 
    
         
            +
            Dependency management utilities for claude-mpm.
         
     | 
| 
      
 3 
     | 
    
         
            +
             
     | 
| 
      
 4 
     | 
    
         
            +
            WHY: This module handles automatic installation of optional dependencies
         
     | 
| 
      
 5 
     | 
    
         
            +
            like Socket.IO monitoring tools. It ensures users can run --monitor without
         
     | 
| 
      
 6 
     | 
    
         
            +
            manual dependency setup.
         
     | 
| 
      
 7 
     | 
    
         
            +
             
     | 
| 
      
 8 
     | 
    
         
            +
            DESIGN DECISION: We use subprocess to install packages in the same environment
         
     | 
| 
      
 9 
     | 
    
         
            +
            that's running claude-mpm, respecting virtual environments and user setups.
         
     | 
| 
      
 10 
     | 
    
         
            +
            """
         
     | 
| 
      
 11 
     | 
    
         
            +
             
     | 
| 
      
 12 
     | 
    
         
            +
            import subprocess
         
     | 
| 
      
 13 
     | 
    
         
            +
            import sys
         
     | 
| 
      
 14 
     | 
    
         
            +
            import importlib
         
     | 
| 
      
 15 
     | 
    
         
            +
            from typing import List, Tuple, Optional
         
     | 
| 
      
 16 
     | 
    
         
            +
            from pathlib import Path
         
     | 
| 
      
 17 
     | 
    
         
            +
             
     | 
| 
      
 18 
     | 
    
         
            +
            from ..core.logger import get_logger
         
     | 
| 
      
 19 
     | 
    
         
            +
             
     | 
| 
      
 20 
     | 
    
         
            +
             
     | 
| 
      
 21 
     | 
    
         
            +
            def check_dependency(package_name: str, import_name: Optional[str] = None) -> bool:
         
     | 
| 
      
 22 
     | 
    
         
            +
                """
         
     | 
| 
      
 23 
     | 
    
         
            +
                Check if a Python package is installed and importable.
         
     | 
| 
      
 24 
     | 
    
         
            +
                
         
     | 
| 
      
 25 
     | 
    
         
            +
                WHY: We need to verify if optional dependencies are available before
         
     | 
| 
      
 26 
     | 
    
         
            +
                attempting to use them. This prevents ImportError crashes.
         
     | 
| 
      
 27 
     | 
    
         
            +
                
         
     | 
| 
      
 28 
     | 
    
         
            +
                DESIGN DECISION: We use importlib.util.find_spec() which is more reliable
         
     | 
| 
      
 29 
     | 
    
         
            +
                than try/except import because it doesn't execute module code.
         
     | 
| 
      
 30 
     | 
    
         
            +
                
         
     | 
| 
      
 31 
     | 
    
         
            +
                Args:
         
     | 
| 
      
 32 
     | 
    
         
            +
                    package_name: Name of the package (e.g., 'python-socketio')
         
     | 
| 
      
 33 
     | 
    
         
            +
                    import_name: Name to import (e.g., 'socketio'). Defaults to package_name.
         
     | 
| 
      
 34 
     | 
    
         
            +
                    
         
     | 
| 
      
 35 
     | 
    
         
            +
                Returns:
         
     | 
| 
      
 36 
     | 
    
         
            +
                    bool: True if package is available, False otherwise
         
     | 
| 
      
 37 
     | 
    
         
            +
                """
         
     | 
| 
      
 38 
     | 
    
         
            +
                if import_name is None:
         
     | 
| 
      
 39 
     | 
    
         
            +
                    import_name = package_name.replace('-', '_')
         
     | 
| 
      
 40 
     | 
    
         
            +
                
         
     | 
| 
      
 41 
     | 
    
         
            +
                try:
         
     | 
| 
      
 42 
     | 
    
         
            +
                    import importlib.util
         
     | 
| 
      
 43 
     | 
    
         
            +
                    spec = importlib.util.find_spec(import_name)
         
     | 
| 
      
 44 
     | 
    
         
            +
                    return spec is not None
         
     | 
| 
      
 45 
     | 
    
         
            +
                except (ImportError, ModuleNotFoundError, ValueError):
         
     | 
| 
      
 46 
     | 
    
         
            +
                    return False
         
     | 
| 
      
 47 
     | 
    
         
            +
             
     | 
| 
      
 48 
     | 
    
         
            +
             
     | 
| 
      
 49 
     | 
    
         
            +
            def install_packages(packages: List[str], logger=None) -> Tuple[bool, str]:
         
     | 
| 
      
 50 
     | 
    
         
            +
                """
         
     | 
| 
      
 51 
     | 
    
         
            +
                Install Python packages using pip in the current environment.
         
     | 
| 
      
 52 
     | 
    
         
            +
                
         
     | 
| 
      
 53 
     | 
    
         
            +
                WHY: Users should not need to manually install optional dependencies.
         
     | 
| 
      
 54 
     | 
    
         
            +
                This function handles automatic installation while respecting the current
         
     | 
| 
      
 55 
     | 
    
         
            +
                Python environment (including virtual environments).
         
     | 
| 
      
 56 
     | 
    
         
            +
                
         
     | 
| 
      
 57 
     | 
    
         
            +
                DESIGN DECISION: We use subprocess to call pip instead of importlib
         
     | 
| 
      
 58 
     | 
    
         
            +
                because pip installation needs to be done in the same environment
         
     | 
| 
      
 59 
     | 
    
         
            +
                that's running the application.
         
     | 
| 
      
 60 
     | 
    
         
            +
                
         
     | 
| 
      
 61 
     | 
    
         
            +
                Args:
         
     | 
| 
      
 62 
     | 
    
         
            +
                    packages: List of package names to install
         
     | 
| 
      
 63 
     | 
    
         
            +
                    logger: Optional logger for output
         
     | 
| 
      
 64 
     | 
    
         
            +
                    
         
     | 
| 
      
 65 
     | 
    
         
            +
                Returns:
         
     | 
| 
      
 66 
     | 
    
         
            +
                    Tuple[bool, str]: (success, error_message_if_failed)
         
     | 
| 
      
 67 
     | 
    
         
            +
                """
         
     | 
| 
      
 68 
     | 
    
         
            +
                if logger is None:
         
     | 
| 
      
 69 
     | 
    
         
            +
                    logger = get_logger("dependency_manager")
         
     | 
| 
      
 70 
     | 
    
         
            +
                
         
     | 
| 
      
 71 
     | 
    
         
            +
                try:
         
     | 
| 
      
 72 
     | 
    
         
            +
                    # Use the same Python executable that's running this script
         
     | 
| 
      
 73 
     | 
    
         
            +
                    cmd = [sys.executable, "-m", "pip", "install"] + packages
         
     | 
| 
      
 74 
     | 
    
         
            +
                    
         
     | 
| 
      
 75 
     | 
    
         
            +
                    logger.info(f"Installing packages: {packages}")
         
     | 
| 
      
 76 
     | 
    
         
            +
                    logger.debug(f"Running command: {' '.join(cmd)}")
         
     | 
| 
      
 77 
     | 
    
         
            +
                    
         
     | 
| 
      
 78 
     | 
    
         
            +
                    # Run pip install with proper error handling
         
     | 
| 
      
 79 
     | 
    
         
            +
                    result = subprocess.run(
         
     | 
| 
      
 80 
     | 
    
         
            +
                        cmd,
         
     | 
| 
      
 81 
     | 
    
         
            +
                        capture_output=True,
         
     | 
| 
      
 82 
     | 
    
         
            +
                        text=True,
         
     | 
| 
      
 83 
     | 
    
         
            +
                        timeout=300  # 5 minute timeout for installation
         
     | 
| 
      
 84 
     | 
    
         
            +
                    )
         
     | 
| 
      
 85 
     | 
    
         
            +
                    
         
     | 
| 
      
 86 
     | 
    
         
            +
                    if result.returncode == 0:
         
     | 
| 
      
 87 
     | 
    
         
            +
                        logger.info(f"Successfully installed packages: {packages}")
         
     | 
| 
      
 88 
     | 
    
         
            +
                        return True, ""
         
     | 
| 
      
 89 
     | 
    
         
            +
                    else:
         
     | 
| 
      
 90 
     | 
    
         
            +
                        error_msg = f"pip install failed with return code {result.returncode}"
         
     | 
| 
      
 91 
     | 
    
         
            +
                        if result.stderr:
         
     | 
| 
      
 92 
     | 
    
         
            +
                            error_msg += f": {result.stderr.strip()}"
         
     | 
| 
      
 93 
     | 
    
         
            +
                        logger.error(error_msg)
         
     | 
| 
      
 94 
     | 
    
         
            +
                        return False, error_msg
         
     | 
| 
      
 95 
     | 
    
         
            +
                        
         
     | 
| 
      
 96 
     | 
    
         
            +
                except subprocess.TimeoutExpired:
         
     | 
| 
      
 97 
     | 
    
         
            +
                    error_msg = "Package installation timed out after 5 minutes"
         
     | 
| 
      
 98 
     | 
    
         
            +
                    logger.error(error_msg)
         
     | 
| 
      
 99 
     | 
    
         
            +
                    return False, error_msg
         
     | 
| 
      
 100 
     | 
    
         
            +
                except Exception as e:
         
     | 
| 
      
 101 
     | 
    
         
            +
                    error_msg = f"Failed to install packages: {e}"
         
     | 
| 
      
 102 
     | 
    
         
            +
                    logger.error(error_msg)
         
     | 
| 
      
 103 
     | 
    
         
            +
                    return False, error_msg
         
     | 
| 
      
 104 
     | 
    
         
            +
             
     | 
| 
      
 105 
     | 
    
         
            +
             
     | 
| 
      
 106 
     | 
    
         
            +
            def ensure_socketio_dependencies(logger=None) -> Tuple[bool, str]:
         
     | 
| 
      
 107 
     | 
    
         
            +
                """
         
     | 
| 
      
 108 
     | 
    
         
            +
                Ensure Socket.IO dependencies are installed for monitoring features.
         
     | 
| 
      
 109 
     | 
    
         
            +
                
         
     | 
| 
      
 110 
     | 
    
         
            +
                WHY: The --monitor flag requires python-socketio and aiohttp, but we want
         
     | 
| 
      
 111 
     | 
    
         
            +
                the base package to work without these heavy dependencies. This function
         
     | 
| 
      
 112 
     | 
    
         
            +
                installs them on-demand.
         
     | 
| 
      
 113 
     | 
    
         
            +
                
         
     | 
| 
      
 114 
     | 
    
         
            +
                DESIGN DECISION: We check each dependency individually and only install
         
     | 
| 
      
 115 
     | 
    
         
            +
                what's missing, reducing installation time and avoiding unnecessary work.
         
     | 
| 
      
 116 
     | 
    
         
            +
                
         
     | 
| 
      
 117 
     | 
    
         
            +
                Args:
         
     | 
| 
      
 118 
     | 
    
         
            +
                    logger: Optional logger for output
         
     | 
| 
      
 119 
     | 
    
         
            +
                    
         
     | 
| 
      
 120 
     | 
    
         
            +
                Returns:
         
     | 
| 
      
 121 
     | 
    
         
            +
                    Tuple[bool, str]: (success, error_message_if_failed)
         
     | 
| 
      
 122 
     | 
    
         
            +
                """
         
     | 
| 
      
 123 
     | 
    
         
            +
                if logger is None:
         
     | 
| 
      
 124 
     | 
    
         
            +
                    logger = get_logger("dependency_manager")
         
     | 
| 
      
 125 
     | 
    
         
            +
                
         
     | 
| 
      
 126 
     | 
    
         
            +
                # Define required packages for Socket.IO monitoring
         
     | 
| 
      
 127 
     | 
    
         
            +
                required_packages = [
         
     | 
| 
      
 128 
     | 
    
         
            +
                    ("python-socketio", "socketio"),
         
     | 
| 
      
 129 
     | 
    
         
            +
                    ("aiohttp", "aiohttp"),
         
     | 
| 
      
 130 
     | 
    
         
            +
                    ("python-engineio", "engineio")
         
     | 
| 
      
 131 
     | 
    
         
            +
                ]
         
     | 
| 
      
 132 
     | 
    
         
            +
                
         
     | 
| 
      
 133 
     | 
    
         
            +
                missing_packages = []
         
     | 
| 
      
 134 
     | 
    
         
            +
                
         
     | 
| 
      
 135 
     | 
    
         
            +
                # Check which packages are missing
         
     | 
| 
      
 136 
     | 
    
         
            +
                for package_name, import_name in required_packages:
         
     | 
| 
      
 137 
     | 
    
         
            +
                    if not check_dependency(package_name, import_name):
         
     | 
| 
      
 138 
     | 
    
         
            +
                        missing_packages.append(package_name)
         
     | 
| 
      
 139 
     | 
    
         
            +
                        logger.debug(f"Missing dependency: {package_name}")
         
     | 
| 
      
 140 
     | 
    
         
            +
                
         
     | 
| 
      
 141 
     | 
    
         
            +
                if not missing_packages:
         
     | 
| 
      
 142 
     | 
    
         
            +
                    logger.debug("All Socket.IO dependencies are already installed")
         
     | 
| 
      
 143 
     | 
    
         
            +
                    return True, ""
         
     | 
| 
      
 144 
     | 
    
         
            +
                
         
     | 
| 
      
 145 
     | 
    
         
            +
                # Install missing packages
         
     | 
| 
      
 146 
     | 
    
         
            +
                logger.info(f"Installing missing Socket.IO dependencies: {missing_packages}")
         
     | 
| 
      
 147 
     | 
    
         
            +
                success, error_msg = install_packages(missing_packages, logger)
         
     | 
| 
      
 148 
     | 
    
         
            +
                
         
     | 
| 
      
 149 
     | 
    
         
            +
                if success:
         
     | 
| 
      
 150 
     | 
    
         
            +
                    # Verify installation worked
         
     | 
| 
      
 151 
     | 
    
         
            +
                    for package_name, import_name in required_packages:
         
     | 
| 
      
 152 
     | 
    
         
            +
                        if not check_dependency(package_name, import_name):
         
     | 
| 
      
 153 
     | 
    
         
            +
                            error_msg = f"Package {package_name} was installed but is not importable"
         
     | 
| 
      
 154 
     | 
    
         
            +
                            logger.error(error_msg)
         
     | 
| 
      
 155 
     | 
    
         
            +
                            return False, error_msg
         
     | 
| 
      
 156 
     | 
    
         
            +
                    
         
     | 
| 
      
 157 
     | 
    
         
            +
                    logger.info("Socket.IO dependencies installed and verified successfully")
         
     | 
| 
      
 158 
     | 
    
         
            +
                    return True, ""
         
     | 
| 
      
 159 
     | 
    
         
            +
                else:
         
     | 
| 
      
 160 
     | 
    
         
            +
                    return False, error_msg
         
     | 
| 
      
 161 
     | 
    
         
            +
             
     | 
| 
      
 162 
     | 
    
         
            +
             
     | 
| 
      
 163 
     | 
    
         
            +
            def get_pip_freeze_output() -> List[str]:
         
     | 
| 
      
 164 
     | 
    
         
            +
                """
         
     | 
| 
      
 165 
     | 
    
         
            +
                Get the output of 'pip freeze' for debugging dependency issues.
         
     | 
| 
      
 166 
     | 
    
         
            +
                
         
     | 
| 
      
 167 
     | 
    
         
            +
                WHY: When dependency installation fails, we need to help users
         
     | 
| 
      
 168 
     | 
    
         
            +
                understand what packages are installed and what might be conflicting.
         
     | 
| 
      
 169 
     | 
    
         
            +
                
         
     | 
| 
      
 170 
     | 
    
         
            +
                Returns:
         
     | 
| 
      
 171 
     | 
    
         
            +
                    List[str]: List of installed packages from pip freeze
         
     | 
| 
      
 172 
     | 
    
         
            +
                """
         
     | 
| 
      
 173 
     | 
    
         
            +
                try:
         
     | 
| 
      
 174 
     | 
    
         
            +
                    result = subprocess.run(
         
     | 
| 
      
 175 
     | 
    
         
            +
                        [sys.executable, "-m", "pip", "freeze"],
         
     | 
| 
      
 176 
     | 
    
         
            +
                        capture_output=True,
         
     | 
| 
      
 177 
     | 
    
         
            +
                        text=True,
         
     | 
| 
      
 178 
     | 
    
         
            +
                        timeout=30
         
     | 
| 
      
 179 
     | 
    
         
            +
                    )
         
     | 
| 
      
 180 
     | 
    
         
            +
                    
         
     | 
| 
      
 181 
     | 
    
         
            +
                    if result.returncode == 0:
         
     | 
| 
      
 182 
     | 
    
         
            +
                        return result.stdout.strip().split('\n')
         
     | 
| 
      
 183 
     | 
    
         
            +
                    else:
         
     | 
| 
      
 184 
     | 
    
         
            +
                        return [f"pip freeze failed: {result.stderr}"]
         
     | 
| 
      
 185 
     | 
    
         
            +
                        
         
     | 
| 
      
 186 
     | 
    
         
            +
                except Exception as e:
         
     | 
| 
      
 187 
     | 
    
         
            +
                    return [f"Failed to get pip freeze output: {e}"]
         
     | 
| 
      
 188 
     | 
    
         
            +
             
     | 
| 
      
 189 
     | 
    
         
            +
             
     | 
| 
      
 190 
     | 
    
         
            +
            def check_virtual_environment() -> Tuple[bool, str]:
         
     | 
| 
      
 191 
     | 
    
         
            +
                """
         
     | 
| 
      
 192 
     | 
    
         
            +
                Check if we're running in a virtual environment.
         
     | 
| 
      
 193 
     | 
    
         
            +
                
         
     | 
| 
      
 194 
     | 
    
         
            +
                WHY: Installation behavior might differ between virtual environments
         
     | 
| 
      
 195 
     | 
    
         
            +
                and system Python. This helps with debugging and user guidance.
         
     | 
| 
      
 196 
     | 
    
         
            +
                
         
     | 
| 
      
 197 
     | 
    
         
            +
                Returns:
         
     | 
| 
      
 198 
     | 
    
         
            +
                    Tuple[bool, str]: (is_virtual_env, environment_info)
         
     | 
| 
      
 199 
     | 
    
         
            +
                """
         
     | 
| 
      
 200 
     | 
    
         
            +
                # Check for virtual environment indicators
         
     | 
| 
      
 201 
     | 
    
         
            +
                in_venv = (
         
     | 
| 
      
 202 
     | 
    
         
            +
                    hasattr(sys, 'base_prefix') and sys.base_prefix != sys.prefix
         
     | 
| 
      
 203 
     | 
    
         
            +
                    or hasattr(sys, 'real_prefix')
         
     | 
| 
      
 204 
     | 
    
         
            +
                    or (hasattr(sys, 'prefix') and 'conda' in sys.prefix.lower())
         
     | 
| 
      
 205 
     | 
    
         
            +
                )
         
     | 
| 
      
 206 
     | 
    
         
            +
                
         
     | 
| 
      
 207 
     | 
    
         
            +
                if in_venv:
         
     | 
| 
      
 208 
     | 
    
         
            +
                    venv_path = getattr(sys, 'prefix', 'unknown')
         
     | 
| 
      
 209 
     | 
    
         
            +
                    return True, f"Virtual environment: {venv_path}"
         
     | 
| 
      
 210 
     | 
    
         
            +
                else:
         
     | 
| 
      
 211 
     | 
    
         
            +
                    return False, f"System Python: {sys.prefix}"
         
     | 
| 
         @@ -0,0 +1,80 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            """Example of how to migrate duplicate import patterns to use safe_import.
         
     | 
| 
      
 2 
     | 
    
         
            +
             
     | 
| 
      
 3 
     | 
    
         
            +
            This file demonstrates how to replace the common try/except ImportError
         
     | 
| 
      
 4 
     | 
    
         
            +
            pattern with the new safe_import utility.
         
     | 
| 
      
 5 
     | 
    
         
            +
            """
         
     | 
| 
      
 6 
     | 
    
         
            +
             
     | 
| 
      
 7 
     | 
    
         
            +
            # BEFORE: The old pattern used throughout the codebase
         
     | 
| 
      
 8 
     | 
    
         
            +
            # -----------------------------------------------------
         
     | 
| 
      
 9 
     | 
    
         
            +
            # try:
         
     | 
| 
      
 10 
     | 
    
         
            +
            #     from ..core.logger import get_logger
         
     | 
| 
      
 11 
     | 
    
         
            +
            # except ImportError:
         
     | 
| 
      
 12 
     | 
    
         
            +
            #     from utils.logger import get_logger
         
     | 
| 
      
 13 
     | 
    
         
            +
            #
         
     | 
| 
      
 14 
     | 
    
         
            +
            # try:
         
     | 
| 
      
 15 
     | 
    
         
            +
            #     from ..core.agent_registry import AgentRegistryAdapter
         
     | 
| 
      
 16 
     | 
    
         
            +
            # except ImportError:
         
     | 
| 
      
 17 
     | 
    
         
            +
            #     from core.agent_registry import AgentRegistryAdapter
         
     | 
| 
      
 18 
     | 
    
         
            +
             
     | 
| 
      
 19 
     | 
    
         
            +
             
     | 
| 
      
 20 
     | 
    
         
            +
            # AFTER: Using safe_import utility
         
     | 
| 
      
 21 
     | 
    
         
            +
            # --------------------------------
         
     | 
| 
      
 22 
     | 
    
         
            +
            from claude_mpm.utils.imports import safe_import, safe_import_multiple
         
     | 
| 
      
 23 
     | 
    
         
            +
             
     | 
| 
      
 24 
     | 
    
         
            +
            # Method 1: Individual imports
         
     | 
| 
      
 25 
     | 
    
         
            +
            get_logger = safe_import('..utils.logger', 'utils.logger', from_list=['get_logger'])
         
     | 
| 
      
 26 
     | 
    
         
            +
            AgentRegistryAdapter = safe_import('..core.agent_registry', 'core.agent_registry', 
         
     | 
| 
      
 27 
     | 
    
         
            +
                                              from_list=['AgentRegistryAdapter'])
         
     | 
| 
      
 28 
     | 
    
         
            +
             
     | 
| 
      
 29 
     | 
    
         
            +
            # Method 2: Batch imports (recommended for multiple imports)
         
     | 
| 
      
 30 
     | 
    
         
            +
            imports = safe_import_multiple([
         
     | 
| 
      
 31 
     | 
    
         
            +
                ('..utils.logger', 'utils.logger', ['get_logger']),
         
     | 
| 
      
 32 
     | 
    
         
            +
                ('..core.agent_registry', 'core.agent_registry', ['AgentRegistryAdapter']),
         
     | 
| 
      
 33 
     | 
    
         
            +
            ])
         
     | 
| 
      
 34 
     | 
    
         
            +
             
     | 
| 
      
 35 
     | 
    
         
            +
            get_logger = imports.get('get_logger')
         
     | 
| 
      
 36 
     | 
    
         
            +
            AgentRegistryAdapter = imports.get('AgentRegistryAdapter')
         
     | 
| 
      
 37 
     | 
    
         
            +
             
     | 
| 
      
 38 
     | 
    
         
            +
             
     | 
| 
      
 39 
     | 
    
         
            +
            # MIGRATION GUIDE
         
     | 
| 
      
 40 
     | 
    
         
            +
            # ---------------
         
     | 
| 
      
 41 
     | 
    
         
            +
            # 1. Add import: from claude_mpm.utils.imports import safe_import
         
     | 
| 
      
 42 
     | 
    
         
            +
            # 
         
     | 
| 
      
 43 
     | 
    
         
            +
            # 2. Replace try/except blocks:
         
     | 
| 
      
 44 
     | 
    
         
            +
            #    FROM:
         
     | 
| 
      
 45 
     | 
    
         
            +
            #      try:
         
     | 
| 
      
 46 
     | 
    
         
            +
            #          from ..module import something
         
     | 
| 
      
 47 
     | 
    
         
            +
            #      except ImportError:
         
     | 
| 
      
 48 
     | 
    
         
            +
            #          from module import something
         
     | 
| 
      
 49 
     | 
    
         
            +
            #    
         
     | 
| 
      
 50 
     | 
    
         
            +
            #    TO:
         
     | 
| 
      
 51 
     | 
    
         
            +
            #      something = safe_import('..module', 'module', from_list=['something'])
         
     | 
| 
      
 52 
     | 
    
         
            +
            #
         
     | 
| 
      
 53 
     | 
    
         
            +
            # 3. For multiple imports from same module:
         
     | 
| 
      
 54 
     | 
    
         
            +
            #    FROM:
         
     | 
| 
      
 55 
     | 
    
         
            +
            #      try:
         
     | 
| 
      
 56 
     | 
    
         
            +
            #          from ..module import foo, bar, baz
         
     | 
| 
      
 57 
     | 
    
         
            +
            #      except ImportError:
         
     | 
| 
      
 58 
     | 
    
         
            +
            #          from module import foo, bar, baz
         
     | 
| 
      
 59 
     | 
    
         
            +
            #    
         
     | 
| 
      
 60 
     | 
    
         
            +
            #    TO:
         
     | 
| 
      
 61 
     | 
    
         
            +
            #      foo, bar, baz = safe_import('..module', 'module', from_list=['foo', 'bar', 'baz'])
         
     | 
| 
      
 62 
     | 
    
         
            +
            #
         
     | 
| 
      
 63 
     | 
    
         
            +
            # 4. For whole module imports:
         
     | 
| 
      
 64 
     | 
    
         
            +
            #    FROM:
         
     | 
| 
      
 65 
     | 
    
         
            +
            #      try:
         
     | 
| 
      
 66 
     | 
    
         
            +
            #          from .. import module
         
     | 
| 
      
 67 
     | 
    
         
            +
            #      except ImportError:
         
     | 
| 
      
 68 
     | 
    
         
            +
            #          import module
         
     | 
| 
      
 69 
     | 
    
         
            +
            #    
         
     | 
| 
      
 70 
     | 
    
         
            +
            #    TO:
         
     | 
| 
      
 71 
     | 
    
         
            +
            #      module = safe_import('..module', 'module')
         
     | 
| 
      
 72 
     | 
    
         
            +
             
     | 
| 
      
 73 
     | 
    
         
            +
             
     | 
| 
      
 74 
     | 
    
         
            +
            # BENEFITS
         
     | 
| 
      
 75 
     | 
    
         
            +
            # --------
         
     | 
| 
      
 76 
     | 
    
         
            +
            # 1. Reduces code duplication (97 files can be simplified)
         
     | 
| 
      
 77 
     | 
    
         
            +
            # 2. Centralizes import error handling logic
         
     | 
| 
      
 78 
     | 
    
         
            +
            # 3. Provides optional logging for debugging import issues
         
     | 
| 
      
 79 
     | 
    
         
            +
            # 4. Maintains the same functionality with cleaner code
         
     | 
| 
      
 80 
     | 
    
         
            +
            # 5. Makes the codebase more maintainable
         
     | 
| 
         @@ -2,26 +2,6 @@ 
     | 
|
| 
       2 
2 
     | 
    
         | 
| 
       3 
3 
     | 
    
         
             
            This module provides a centralized PathOperations class for common path validation
         
     | 
| 
       4 
4 
     | 
    
         
             
            and file operations, reducing code duplication across the codebase.
         
     | 
| 
       5 
     | 
    
         
            -
             
     | 
| 
       6 
     | 
    
         
            -
            ARCHITECTURAL DECISION: Separation of Concerns
         
     | 
| 
       7 
     | 
    
         
            -
            ---------------------------------------------
         
     | 
| 
       8 
     | 
    
         
            -
            This module (path_operations.py) and paths.py serve distinct purposes and should
         
     | 
| 
       9 
     | 
    
         
            -
            remain separate:
         
     | 
| 
       10 
     | 
    
         
            -
             
     | 
| 
       11 
     | 
    
         
            -
            1. path_operations.py (this file):
         
     | 
| 
       12 
     | 
    
         
            -
               - Provides safe file I/O operations (read, write, copy, delete)
         
     | 
| 
       13 
     | 
    
         
            -
               - Handles file validation and permissions
         
     | 
| 
       14 
     | 
    
         
            -
               - Implements error handling and recovery mechanisms
         
     | 
| 
       15 
     | 
    
         
            -
               - Focus: File system operations with safety guarantees
         
     | 
| 
       16 
     | 
    
         
            -
             
     | 
| 
       17 
     | 
    
         
            -
            2. paths.py:
         
     | 
| 
       18 
     | 
    
         
            -
               - Provides path discovery and resolution logic
         
     | 
| 
       19 
     | 
    
         
            -
               - Handles framework/project directory structure navigation
         
     | 
| 
       20 
     | 
    
         
            -
               - Implements caching for performance optimization
         
     | 
| 
       21 
     | 
    
         
            -
               - Focus: Path resolution and directory structure
         
     | 
| 
       22 
     | 
    
         
            -
             
     | 
| 
       23 
     | 
    
         
            -
            This separation follows the Single Responsibility Principle and makes the codebase
         
     | 
| 
       24 
     | 
    
         
            -
            more maintainable by keeping distinct concerns in separate modules.
         
     | 
| 
       25 
5 
     | 
    
         
             
            """
         
     | 
| 
       26 
6 
     | 
    
         | 
| 
       27 
7 
     | 
    
         
             
            import os
         
     | 
| 
         @@ -0,0 +1,34 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            #!/usr/bin/env python3
         
     | 
| 
      
 2 
     | 
    
         
            +
            """Open the dashboard statically in the browser."""
         
     | 
| 
      
 3 
     | 
    
         
            +
             
     | 
| 
      
 4 
     | 
    
         
            +
            import os
         
     | 
| 
      
 5 
     | 
    
         
            +
            import webbrowser
         
     | 
| 
      
 6 
     | 
    
         
            +
            from pathlib import Path
         
     | 
| 
      
 7 
     | 
    
         
            +
             
     | 
| 
      
 8 
     | 
    
         
            +
            def open_dashboard(port=8765, autoconnect=True):
         
     | 
| 
      
 9 
     | 
    
         
            +
                """Open the dashboard HTML file directly in the browser.
         
     | 
| 
      
 10 
     | 
    
         
            +
                
         
     | 
| 
      
 11 
     | 
    
         
            +
                Args:
         
     | 
| 
      
 12 
     | 
    
         
            +
                    port: Socket.IO server port to connect to
         
     | 
| 
      
 13 
     | 
    
         
            +
                    autoconnect: Whether to auto-connect on load
         
     | 
| 
      
 14 
     | 
    
         
            +
                """
         
     | 
| 
      
 15 
     | 
    
         
            +
                # Get the static index.html path (main entry point)
         
     | 
| 
      
 16 
     | 
    
         
            +
                dashboard_path = Path(__file__).parent / "templates" / "index.html"
         
     | 
| 
      
 17 
     | 
    
         
            +
                
         
     | 
| 
      
 18 
     | 
    
         
            +
                if not dashboard_path.exists():
         
     | 
| 
      
 19 
     | 
    
         
            +
                    raise FileNotFoundError(f"Dashboard not found at {dashboard_path}")
         
     | 
| 
      
 20 
     | 
    
         
            +
                
         
     | 
| 
      
 21 
     | 
    
         
            +
                # Build URL with query parameters for Socket.IO connection
         
     | 
| 
      
 22 
     | 
    
         
            +
                dashboard_url = f"file://{dashboard_path.absolute()}?port={port}"
         
     | 
| 
      
 23 
     | 
    
         
            +
                if autoconnect:
         
     | 
| 
      
 24 
     | 
    
         
            +
                    dashboard_url += "&autoconnect=true"
         
     | 
| 
      
 25 
     | 
    
         
            +
                
         
     | 
| 
      
 26 
     | 
    
         
            +
                print(f"🌐 Opening static dashboard: {dashboard_url}")
         
     | 
| 
      
 27 
     | 
    
         
            +
                print(f"📡 Dashboard will connect to Socket.IO server at localhost:{port}")
         
     | 
| 
      
 28 
     | 
    
         
            +
                webbrowser.open(dashboard_url)
         
     | 
| 
      
 29 
     | 
    
         
            +
                
         
     | 
| 
      
 30 
     | 
    
         
            +
                return dashboard_url
         
     | 
| 
      
 31 
     | 
    
         
            +
             
     | 
| 
      
 32 
     | 
    
         
            +
            if __name__ == "__main__":
         
     | 
| 
      
 33 
     | 
    
         
            +
                # Test opening the dashboard
         
     | 
| 
      
 34 
     | 
    
         
            +
                open_dashboard()
         
     | 
| 
         @@ -1,6 +1,6 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            Metadata-Version: 2.4
         
     | 
| 
       2 
2 
     | 
    
         
             
            Name: claude-mpm
         
     | 
| 
       3 
     | 
    
         
            -
            Version: 3.1 
     | 
| 
      
 3 
     | 
    
         
            +
            Version: 3.2.1
         
     | 
| 
       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
         
     | 
| 
         @@ -39,6 +39,10 @@ Requires-Dist: pytest-cov; extra == "dev" 
     | 
|
| 
       39 
39 
     | 
    
         
             
            Requires-Dist: black; extra == "dev"
         
     | 
| 
       40 
40 
     | 
    
         
             
            Requires-Dist: flake8; extra == "dev"
         
     | 
| 
       41 
41 
     | 
    
         
             
            Requires-Dist: mypy; extra == "dev"
         
     | 
| 
      
 42 
     | 
    
         
            +
            Provides-Extra: monitor
         
     | 
| 
      
 43 
     | 
    
         
            +
            Requires-Dist: python-socketio>=5.11.0; extra == "monitor"
         
     | 
| 
      
 44 
     | 
    
         
            +
            Requires-Dist: aiohttp>=3.9.0; extra == "monitor"
         
     | 
| 
      
 45 
     | 
    
         
            +
            Requires-Dist: python-engineio>=4.8.0; extra == "monitor"
         
     | 
| 
       42 
46 
     | 
    
         
             
            Dynamic: author-email
         
     | 
| 
       43 
47 
     | 
    
         
             
            Dynamic: home-page
         
     | 
| 
       44 
48 
     | 
    
         
             
            Dynamic: license-file
         
     | 
| 
         @@ -63,6 +67,9 @@ A framework for Claude that enables multi-agent workflows and extensible capabil 
     | 
|
| 
       63 
67 
     | 
    
         
             
            # Install globally via npm (recommended)
         
     | 
| 
       64 
68 
     | 
    
         
             
            npm install -g @bobmatnyc/claude-mpm
         
     | 
| 
       65 
69 
     | 
    
         | 
| 
      
 70 
     | 
    
         
            +
            # Or install via PyPI
         
     | 
| 
      
 71 
     | 
    
         
            +
            pip install claude-mpm
         
     | 
| 
      
 72 
     | 
    
         
            +
             
     | 
| 
       66 
73 
     | 
    
         
             
            # Or use npx for one-time usage
         
     | 
| 
       67 
74 
     | 
    
         
             
            npx @bobmatnyc/claude-mpm
         
     | 
| 
       68 
75 
     | 
    
         
             
            ```
         
     | 
| 
         @@ -191,14 +198,6 @@ Claude MPM provides a modular framework for extending Claude's capabilities: 
     | 
|
| 
       191 
198 
     | 
    
         | 
| 
       192 
199 
     | 
    
         
             
            ## Key Features
         
     | 
| 
       193 
200 
     | 
    
         | 
| 
       194 
     | 
    
         
            -
            ### Security Features
         
     | 
| 
       195 
     | 
    
         
            -
            - **File Access Restrictions**: Agents are restricted to their working directory
         
     | 
| 
       196 
     | 
    
         
            -
            - **Bash Command Validation**: Comprehensive validation prevents writes outside project directory
         
     | 
| 
       197 
     | 
    
         
            -
            - **Path Traversal Protection**: Blocks attempts to escape the working directory
         
     | 
| 
       198 
     | 
    
         
            -
            - **Dangerous Command Blocking**: Prevents execution of sudo, rm -rf, and other risky commands
         
     | 
| 
       199 
     | 
    
         
            -
            - **Security Audit Logging**: All file operations are logged for security monitoring
         
     | 
| 
       200 
     | 
    
         
            -
            - See [Security Documentation](docs/SECURITY.md) for details
         
     | 
| 
       201 
     | 
    
         
            -
             
     | 
| 
       202 
201 
     | 
    
         
             
            ### Agent System
         
     | 
| 
       203 
202 
     | 
    
         
             
            - Specialized agents for different domains (Research, Engineer, etc.)
         
     | 
| 
       204 
203 
     | 
    
         
             
            - Dynamic agent discovery and registration
         
     | 
| 
         @@ -218,6 +217,14 @@ Claude MPM provides a modular framework for extending Claude's capabilities: 
     | 
|
| 
       218 
217 
     | 
    
         
             
            - Reusable business logic
         
     | 
| 
       219 
218 
     | 
    
         
             
            - Well-defined interfaces
         
     | 
| 
       220 
219 
     | 
    
         | 
| 
      
 220 
     | 
    
         
            +
            ### Real-Time Monitoring
         
     | 
| 
      
 221 
     | 
    
         
            +
            - **Live Dashboard**: Monitor Claude interactions with a real-time web dashboard
         
     | 
| 
      
 222 
     | 
    
         
            +
            - **Event Tracking**: View all events, agent activities, tool usage, and file operations
         
     | 
| 
      
 223 
     | 
    
         
            +
            - **Multi-Tab Interface**: Organized views for Events, Agents, Tools, and Files
         
     | 
| 
      
 224 
     | 
    
         
            +
            - **Zero Configuration**: Simple `--monitor` flag enables monitoring
         
     | 
| 
      
 225 
     | 
    
         
            +
            - **Development Focus**: Basic monitoring with enhanced features planned
         
     | 
| 
      
 226 
     | 
    
         
            +
            - **Full Documentation**: See [monitoring documentation](docs/user/monitoring/) for complete details
         
     | 
| 
      
 227 
     | 
    
         
            +
             
     | 
| 
       221 
228 
     | 
    
         
             
            ### Session Management
         
     | 
| 
       222 
229 
     | 
    
         
             
            - Comprehensive logging of all interactions
         
     | 
| 
       223 
230 
     | 
    
         
             
            - Debug mode for troubleshooting
         
     | 
| 
         @@ -305,6 +312,9 @@ These tree-sitter dependencies enable: 
     | 
|
| 
       305 
312 
     | 
    
         
             
            # Run interactive session
         
     | 
| 
       306 
313 
     | 
    
         
             
            claude-mpm
         
     | 
| 
       307 
314 
     | 
    
         | 
| 
      
 315 
     | 
    
         
            +
            # Run with real-time monitoring dashboard
         
     | 
| 
      
 316 
     | 
    
         
            +
            claude-mpm run --monitor
         
     | 
| 
      
 317 
     | 
    
         
            +
             
     | 
| 
       308 
318 
     | 
    
         
             
            # Run with debug logging
         
     | 
| 
       309 
319 
     | 
    
         
             
            claude-mpm --debug
         
     | 
| 
       310 
320 
     | 
    
         | 
| 
         @@ -324,6 +334,7 @@ Options: 
     | 
|
| 
       324 
334 
     | 
    
         | 
| 
       325 
335 
     | 
    
         
             
            Commands:
         
     | 
| 
       326 
336 
     | 
    
         
             
              run                  Run Claude session (default)
         
     | 
| 
      
 337 
     | 
    
         
            +
                --monitor          Launch with real-time monitoring dashboard
         
     | 
| 
       327 
338 
     | 
    
         
             
              info                 Show framework and configuration info
         
     | 
| 
       328 
339 
     | 
    
         
             
            ```
         
     | 
| 
       329 
340 
     | 
    
         | 
| 
         @@ -1,27 +1,28 @@ 
     | 
|
| 
       1 
     | 
    
         
            -
            claude_mpm/__init__.py,sha256= 
     | 
| 
       2 
     | 
    
         
            -
            claude_mpm/__main__.py,sha256= 
     | 
| 
       3 
     | 
    
         
            -
            claude_mpm/ 
     | 
| 
       4 
     | 
    
         
            -
            claude_mpm/ 
     | 
| 
       5 
     | 
    
         
            -
            claude_mpm/constants.py,sha256=5AG5hgBxOC7gMNHDx0lAhS-FQ8gXhtGtqJ9Moj3S6ro,4044
         
     | 
| 
      
 1 
     | 
    
         
            +
            claude_mpm/__init__.py,sha256=uDX48EOBrmJbY8Xv3bBpd8kibulIlmZv5jmczAjHNb8,648
         
     | 
| 
      
 2 
     | 
    
         
            +
            claude_mpm/__main__.py,sha256=8IcM9tEbTqSN_er04eKTPX3AGo6qzRiTnPI7KfIf7rw,641
         
     | 
| 
      
 3 
     | 
    
         
            +
            claude_mpm/constants.py,sha256=5wYR7YPHQtjZCreM_lgjoT7IPfujiuRWSb1Qu8coBxc,4216
         
     | 
| 
      
 4 
     | 
    
         
            +
            claude_mpm/deployment_paths.py,sha256=JO7-fhhp_AkVB7ZssggHDBbee-r2sokpkqjoqnQLTmM,9073
         
     | 
| 
       6 
5 
     | 
    
         
             
            claude_mpm/init.py,sha256=gOreOf7BLXkT0_HrQk_As4Kz1OT_NJG_RG0i0hbY0z0,8088
         
     | 
| 
       7 
6 
     | 
    
         
             
            claude_mpm/agents/BASE_AGENT_TEMPLATE.md,sha256=TYgSd9jNBMWp4mAOBUl9dconX4RcGbvmMEScRy5uyko,3343
         
     | 
| 
       8 
     | 
    
         
            -
            claude_mpm/agents/INSTRUCTIONS.md,sha256= 
     | 
| 
      
 7 
     | 
    
         
            +
            claude_mpm/agents/INSTRUCTIONS.md,sha256=9N0iSfShFc6TeJCajT2lnTIR2ZSS7WQHwmC0vTMTeG0,10548
         
     | 
| 
       9 
8 
     | 
    
         
             
            claude_mpm/agents/__init__.py,sha256=r-p7ervzjLPD7_8dm2tXX_fwvdTZy6KwKA03ofxN3sA,3275
         
     | 
| 
       10 
9 
     | 
    
         
             
            claude_mpm/agents/agent-template.yaml,sha256=koKJn8MCAJx0QNQMHouvIZrwvw5qjPV0U-aV-YVyk6s,2036
         
     | 
| 
       11 
10 
     | 
    
         
             
            claude_mpm/agents/agent_loader.py,sha256=P4h3qupJHvZL9dfb6ntB582xenYv9JbkMOVav_kNkAo,44030
         
     | 
| 
       12 
11 
     | 
    
         
             
            claude_mpm/agents/agent_loader_integration.py,sha256=z_DXxAIeuUD71HBYdxxvcFKoQYQxITLo8oAdN_M4LTA,7610
         
     | 
| 
       13 
12 
     | 
    
         
             
            claude_mpm/agents/agents_metadata.py,sha256=Xju9Yim6XSv2u1J_Swre5VJySbdxxC-9TzpOfXG8ibg,5170
         
     | 
| 
       14 
     | 
    
         
            -
            claude_mpm/agents/base_agent.json,sha256= 
     | 
| 
      
 13 
     | 
    
         
            +
            claude_mpm/agents/base_agent.json,sha256=UDf5YgTwJWmHgBwdN0xIS11nZD16wa-j-9Vx44shNsg,5397
         
     | 
| 
       15 
14 
     | 
    
         
             
            claude_mpm/agents/base_agent_loader.py,sha256=0cVD__2y-kPHr3G2YxqRazMGYUZvqKWp0O-VCFN6cxg,18993
         
     | 
| 
       16 
15 
     | 
    
         
             
            claude_mpm/agents/system_agent_config.py,sha256=Lke4FFjU0Vq3LLo4O7KvtHxadP7agAwC-ljCXK40h_A,23526
         
     | 
| 
      
 16 
     | 
    
         
            +
            claude_mpm/agents/backups/INSTRUCTIONS.md,sha256=3iMs6KyLJ5HzCmzqze1FasWKLKevhqpqwb8PlYiJ7Gw,9155
         
     | 
| 
       17 
17 
     | 
    
         
             
            claude_mpm/agents/schema/agent_schema.json,sha256=7zuSk4VfBNTlQN33AkfJp0Y1GltlviwengIM0mb7dGg,8741
         
     | 
| 
       18 
18 
     | 
    
         
             
            claude_mpm/agents/templates/__init__.py,sha256=7UyIChghCnkrDctvmCRYr0Wrnn8Oj-eCdgL0KpFy1Mo,2668
         
     | 
| 
       19 
19 
     | 
    
         
             
            claude_mpm/agents/templates/data_engineer.json,sha256=qoUz4nR5dP3ANu-e6Lr5bP_aa1A8_L9cN3iGwZk_B4k,5910
         
     | 
| 
       20 
20 
     | 
    
         
             
            claude_mpm/agents/templates/documentation.json,sha256=ClQ3_zWRSxkCm1_bLuVRi5bl2IYUIjPEINZm82HjJak,3142
         
     | 
| 
       21 
21 
     | 
    
         
             
            claude_mpm/agents/templates/engineer.json,sha256=Vqvxdifa1ldDUiFG1EXYupHCjg1hFYT80YE7Ef1owAk,8922
         
     | 
| 
       22 
22 
     | 
    
         
             
            claude_mpm/agents/templates/ops.json,sha256=uxIu5Tyw-FsnV-RtT-hk2QSy9EJgesmK7eampglL5tk,2988
         
     | 
| 
      
 23 
     | 
    
         
            +
            claude_mpm/agents/templates/pm.json,sha256=T67djHHIaud_OZeyan8BqqfRECyV9GxKHamfjLIz7JU,1350
         
     | 
| 
       23 
24 
     | 
    
         
             
            claude_mpm/agents/templates/qa.json,sha256=ByZw4FT1RW5sRoim2ouUPYipCi-6xI8LDaYEZ26lc6U,3076
         
     | 
| 
       24 
     | 
    
         
            -
            claude_mpm/agents/templates/research.json,sha256= 
     | 
| 
      
 25 
     | 
    
         
            +
            claude_mpm/agents/templates/research.json,sha256=Sb0erD1q8qXiG7QhcWC05kbe0XxNCXp1WaW3lepKofM,10013
         
     | 
| 
       25 
26 
     | 
    
         
             
            claude_mpm/agents/templates/security.json,sha256=5RzIlGtRjPIVSKvH_jjx-hzPbjh0TP2SeDBw_7LyfEA,3118
         
     | 
| 
       26 
27 
     | 
    
         
             
            claude_mpm/agents/templates/test-integration-agent.md,sha256=xyauhBApzj8qD24E0G32BF-mPCrGKES1g5S4OWPUtgc,505
         
     | 
| 
       27 
28 
     | 
    
         
             
            claude_mpm/agents/templates/version_control.json,sha256=YPxSufd32PMFTyVzDkOteoS944r74MD3VIToYm4DRCE,3043
         
     | 
| 
         @@ -35,51 +36,61 @@ claude_mpm/agents/templates/backup/security_agent_20250726_234551.json,sha256=l5 
     | 
|
| 
       35 
36 
     | 
    
         
             
            claude_mpm/agents/templates/backup/version_control_agent_20250726_234551.json,sha256=too38RPTLJ9HutCMn0nfmEdCj2me241dx5tUYDFtu94,2143
         
     | 
| 
       36 
37 
     | 
    
         
             
            claude_mpm/agents/test_fix_deployment/.claude-pm/config/project.json,sha256=YZQgq2ri2_Y3qKzvPlC6TmzZKviDv0__GuyUOo1LbT8,146
         
     | 
| 
       37 
38 
     | 
    
         
             
            claude_mpm/cli/README.md,sha256=exe9V_UEsMSPXOMlvQUv5FsCuhUpPOsMvIhyDSyuFdI,3423
         
     | 
| 
       38 
     | 
    
         
            -
            claude_mpm/cli/__init__.py,sha256= 
     | 
| 
       39 
     | 
    
         
            -
            claude_mpm/cli/parser.py,sha256= 
     | 
| 
       40 
     | 
    
         
            -
            claude_mpm/cli/utils.py,sha256= 
     | 
| 
       41 
     | 
    
         
            -
            claude_mpm/cli/commands/__init__.py,sha256= 
     | 
| 
       42 
     | 
    
         
            -
            claude_mpm/cli/commands/agents.py,sha256= 
     | 
| 
       43 
     | 
    
         
            -
            claude_mpm/cli/commands/info.py,sha256= 
     | 
| 
       44 
     | 
    
         
            -
            claude_mpm/cli/commands/ 
     | 
| 
       45 
     | 
    
         
            -
            claude_mpm/cli/commands/ 
     | 
| 
       46 
     | 
    
         
            -
            claude_mpm/cli/commands/ 
     | 
| 
      
 39 
     | 
    
         
            +
            claude_mpm/cli/__init__.py,sha256=OBcyg1xLPddsPURZPCvVhUfHkeak7Ph2qTvhOGYL7rQ,5506
         
     | 
| 
      
 40 
     | 
    
         
            +
            claude_mpm/cli/parser.py,sha256=Cd-_McqKH8uwcD81fHkZMUmQtoZmVMJFenON8V_mZtA,13518
         
     | 
| 
      
 41 
     | 
    
         
            +
            claude_mpm/cli/utils.py,sha256=k_EHLcjDAzYhDeVeWvE-vqvHsEoG6Cc6Yk7fs3YoRVA,6022
         
     | 
| 
      
 42 
     | 
    
         
            +
            claude_mpm/cli/commands/__init__.py,sha256=6Oh31iPNWcAehZWIIkX2hoSUBTcvFU733P7Q8Ssf56g,509
         
     | 
| 
      
 43 
     | 
    
         
            +
            claude_mpm/cli/commands/agents.py,sha256=FqqEQcfAfCxjz_E7fGQUtLznloJLz8fWQtnjQhkbalQ,6795
         
     | 
| 
      
 44 
     | 
    
         
            +
            claude_mpm/cli/commands/info.py,sha256=ETL6jC08OTQVTPjs219Y0m3FzfKOUlI0-yI81AI8FXY,2990
         
     | 
| 
      
 45 
     | 
    
         
            +
            claude_mpm/cli/commands/memory.py,sha256=6odAe-ReIVoRC6NdCsQHPGss51sF9fBQOlmXub7sysE,7600
         
     | 
| 
      
 46 
     | 
    
         
            +
            claude_mpm/cli/commands/run.py,sha256=FVEoYBgKSPNYoC9CFzjNc8m8irgvIUainqfhGVMiKQc,24173
         
     | 
| 
      
 47 
     | 
    
         
            +
            claude_mpm/cli/commands/tickets.py,sha256=SXyGtHSyGJwTeJwDAHf7kRbdiG1DlZkXkod5UoNy7Ik,2150
         
     | 
| 
      
 48 
     | 
    
         
            +
            claude_mpm/cli/commands/ui.py,sha256=FhBQiOKW61cNduyryRu0UhC366d6o1eEkBgbPd7Au1w,1900
         
     | 
| 
       47 
49 
     | 
    
         
             
            claude_mpm/cli_module/__init__.py,sha256=CkMp4gzWKoZZF_qKyBDi2sQaZw_GLWZYLtKouv-4f8s,390
         
     | 
| 
       48 
50 
     | 
    
         
             
            claude_mpm/cli_module/args.py,sha256=nilYpziBsoEySO4W1hQ2MRJyn9TFx3c3TrucyMMhRtk,7970
         
     | 
| 
       49 
51 
     | 
    
         
             
            claude_mpm/cli_module/commands.py,sha256=CBNfO-bXrZ0spjeW_7-swprEq5V4PQSc0qhl9SLP5UU,7168
         
     | 
| 
       50 
52 
     | 
    
         
             
            claude_mpm/cli_module/migration_example.py,sha256=C-_GbsW8dGzutnNeRLLld74ibDLyAOQx0stdpYZS0hs,6137
         
     | 
| 
       51 
53 
     | 
    
         
             
            claude_mpm/cli_module/refactoring_guide.md,sha256=fl1PGwLZAj4OYWmU0syg1jDd81PqK7rC7rhwgFId5BE,7048
         
     | 
| 
       52 
54 
     | 
    
         
             
            claude_mpm/config/__init__.py,sha256=p31JuaXLDHgIgoAbHApNvctN2IEZYq2MBkkXROdhbH8,105
         
     | 
| 
       53 
     | 
    
         
            -
            claude_mpm/ 
     | 
| 
      
 55 
     | 
    
         
            +
            claude_mpm/config/socketio_config.py,sha256=fSzqleM9EzehWg3U_--0y_zVgXZo7Q45JCI_a2xPs1g,9452
         
     | 
| 
      
 56 
     | 
    
         
            +
            claude_mpm/core/__init__.py,sha256=a2Irt1l4-UbQQU7FuEaTK_DlKOg3UsMHnZN-g04SYZ0,1194
         
     | 
| 
       54 
57 
     | 
    
         
             
            claude_mpm/core/agent_name_normalizer.py,sha256=-X68oz3_74t9BRbHA54NEGyjy0xjTsGp_sCUHDtKp1s,9269
         
     | 
| 
       55 
     | 
    
         
            -
            claude_mpm/core/agent_registry.py,sha256= 
     | 
| 
      
 58 
     | 
    
         
            +
            claude_mpm/core/agent_registry.py,sha256=4MAfc7xDlrYWWkHmDMRmWE8q32teuCmIcud9D0I0dLo,20496
         
     | 
| 
       56 
59 
     | 
    
         
             
            claude_mpm/core/agent_registry.py.bak,sha256=cXB0yqhonE1XsXmWcdwyNuvv8yddK_PyZILDCmwCZ_Q,10161
         
     | 
| 
       57 
60 
     | 
    
         
             
            claude_mpm/core/agent_session_manager.py,sha256=6alXQr4gnMR-unT4J1ryEtTxJqQolA0-NgPQN6X3lqY,11212
         
     | 
| 
       58 
61 
     | 
    
         
             
            claude_mpm/core/base_service.py,sha256=qWI_rUybHmmKroptJxcE4rzPBhK8yeMKIt2JqnqJB7E,29125
         
     | 
| 
       59 
62 
     | 
    
         
             
            claude_mpm/core/base_service.py.bak,sha256=48A8eI_HPqxYm42X5jaTo8zQVOfFFXe7SqIUo-8IyC4,13124
         
     | 
| 
       60 
     | 
    
         
            -
            claude_mpm/core/ 
     | 
| 
      
 63 
     | 
    
         
            +
            claude_mpm/core/claude_runner.py,sha256=dsLosbf2e7zYof4SirTuLM048EF4OEG1C6tEs7S-ZV8,37520
         
     | 
| 
      
 64 
     | 
    
         
            +
            claude_mpm/core/config.py,sha256=_V0sbCOFNabm9nZUuRAZ9AGe65A03FbFY36QFCrDdHo,13464
         
     | 
| 
       61 
65 
     | 
    
         
             
            claude_mpm/core/config_aliases.py,sha256=8eqA4wpWViIDm_9pL3f9j7cR_ssmhOYYiY2UzHrfUzg,10058
         
     | 
| 
       62 
66 
     | 
    
         
             
            claude_mpm/core/container.py,sha256=P4c4nSo_USSfHTxvpR1sQkVGNsgqozZBN27l3IXqiDc,12216
         
     | 
| 
       63 
     | 
    
         
            -
            claude_mpm/core/factories.py,sha256= 
     | 
| 
      
 67 
     | 
    
         
            +
            claude_mpm/core/factories.py,sha256=Qh2n_x112ZIPWEfwFley9bb9IZcSG38LkpT3uValyDk,7484
         
     | 
| 
       64 
68 
     | 
    
         
             
            claude_mpm/core/framework_loader.py,sha256=SdONNh8a7vSicr4vVuRzd7OqgDMIyg9k_xxbr8bLRi8,19547
         
     | 
| 
      
 69 
     | 
    
         
            +
            claude_mpm/core/hook_manager.py,sha256=pVjVTu54FvpzI4F91VWX-hNStTeQelKCUM3qLjE8MhE,7045
         
     | 
| 
       65 
70 
     | 
    
         
             
            claude_mpm/core/injectable_service.py,sha256=7fOny9c6x8IJ9hVZmFql1eNDXXB1jcWbsxfTKbMZk74,7497
         
     | 
| 
       66 
71 
     | 
    
         
             
            claude_mpm/core/interfaces.py,sha256=TpP474EKEng-1TrjKUsN69qq6dXy8zIjicS7iV-ZPV0,15269
         
     | 
| 
       67 
72 
     | 
    
         
             
            claude_mpm/core/logger.py,sha256=wqYlUy8wlSXyTWOeWCGNYaIWdiFYzT7yw1U0vdT3R_8,15894
         
     | 
| 
       68 
73 
     | 
    
         
             
            claude_mpm/core/minimal_framework_loader.py,sha256=liYS4IyuW_aFK7yhRDZwTwT-3q09fT3wIJSUzkI93Ko,3673
         
     | 
| 
       69 
74 
     | 
    
         
             
            claude_mpm/core/mixins.py,sha256=rTEH-7FDpNiLB8oo6mSb0CLarJklv4fDJw1xM-gr5wI,5599
         
     | 
| 
       70 
     | 
    
         
            -
            claude_mpm/core/ 
     | 
| 
      
 75 
     | 
    
         
            +
            claude_mpm/core/pm_hook_interceptor.py,sha256=PRaloqgxn-Alt9HflrywYXRL2GL3Ixb8Wxov8GfAMMU,7173
         
     | 
| 
      
 76 
     | 
    
         
            +
            claude_mpm/core/service_registry.py,sha256=wKJUO1g4UFA4dUpE3RkIYz1Ek8kIh4XfvU1kFeLCl2Q,10529
         
     | 
| 
       71 
77 
     | 
    
         
             
            claude_mpm/core/session_manager.py,sha256=3rO4KGZp8Qd_cUw6OWv4jyxGCUaL_MNPgCCpnwQt12A,6581
         
     | 
| 
       72 
     | 
    
         
            -
            claude_mpm/core/simple_runner.py,sha256= 
     | 
| 
      
 78 
     | 
    
         
            +
            claude_mpm/core/simple_runner.py,sha256=dsLosbf2e7zYof4SirTuLM048EF4OEG1C6tEs7S-ZV8,37520
         
     | 
| 
      
 79 
     | 
    
         
            +
            claude_mpm/core/socketio_pool.py,sha256=B83uDsmqRF5S0QDwwatyKS-m2SdTvotCVfc3_2uQxd8,22438
         
     | 
| 
       73 
80 
     | 
    
         
             
            claude_mpm/core/tool_access_control.py,sha256=htZbDhC8s7D7BVqfmk0BwRrYJnlnUAk8_NeJKOaeNlg,6632
         
     | 
| 
      
 81 
     | 
    
         
            +
            claude_mpm/core/websocket_handler.py,sha256=1PwnZ6AzAOgfTWO5n4T52fSQxAuboj7bHOmL3TItq6M,8895
         
     | 
| 
      
 82 
     | 
    
         
            +
            claude_mpm/experimental/cli_enhancements.py,sha256=-N5f2u9TaxUcOJegUd3lt1FRz5ErEyYUvvgrNmMRL7Q,11814
         
     | 
| 
       74 
83 
     | 
    
         
             
            claude_mpm/generators/__init__.py,sha256=l53aBn6kBQSDz3b6bZkMCJBcEmYnV9hHEZq8LKzXgH8,152
         
     | 
| 
       75 
84 
     | 
    
         
             
            claude_mpm/generators/agent_profile_generator.py,sha256=2HjOscogSyvrtQj8KwdgNPS6Ym_QvgX1BMeauQZewZA,5751
         
     | 
| 
       76 
85 
     | 
    
         
             
            claude_mpm/hooks/README.md,sha256=AjW-V7WQGf9o5X9otNl5k8rtal_MdyToFqVx_pudOXs,3289
         
     | 
| 
       77 
86 
     | 
    
         
             
            claude_mpm/hooks/__init__.py,sha256=Y3JJ_mEtvRP07r_gXkju4c0s18bjIXGH1uAbhSw1ES0,166
         
     | 
| 
       78 
87 
     | 
    
         
             
            claude_mpm/hooks/base_hook.py,sha256=a4V2EKEG02QQB0h-pnxhZI-fouKBLYbdBLckcaNuf0k,5098
         
     | 
| 
      
 88 
     | 
    
         
            +
            claude_mpm/hooks/memory_integration_hook.py,sha256=g-I4rp3Q2Uwh-gt2KOX0Yy6Av2pO8hzWmzZilxufnAY,14321
         
     | 
| 
       79 
89 
     | 
    
         
             
            claude_mpm/hooks/tool_call_interceptor.py,sha256=08_Odgm6Sg1zBJhGjwzVa03AReeBPZHTjndyjEO99cY,7629
         
     | 
| 
       80 
90 
     | 
    
         
             
            claude_mpm/hooks/validation_hooks.py,sha256=7TU2N4SzCm2nwpsR0xiNKsHQNsWODnOVAmK9jHq1QqM,6582
         
     | 
| 
       81 
91 
     | 
    
         
             
            claude_mpm/hooks/builtin/__init__.py,sha256=Tfh3dIGxlQRUKBzR_MWC64WAKJ0Q_POsVVFl7lz9CD4,36
         
     | 
| 
       82 
92 
     | 
    
         
             
            claude_mpm/hooks/builtin/logging_hook_example.py,sha256=SyfdAH9ENTIpMhw2IeqqZpXNBUakYDI1yF5DFS0RJZ4,4971
         
     | 
| 
      
 93 
     | 
    
         
            +
            claude_mpm/hooks/builtin/memory_hooks_example.py,sha256=Nu5VUSfT_0b23cVK_uQthCn6c3wQWEs5REjX57xrb8Y,2368
         
     | 
| 
       83 
94 
     | 
    
         
             
            claude_mpm/hooks/builtin/mpm_command_hook.py,sha256=PhQl1FifaB61gRrBOIXAim0R-XUBIzZwLdjb6WQuEGQ,4541
         
     | 
| 
       84 
95 
     | 
    
         
             
            claude_mpm/hooks/builtin/post_delegation_hook_example.py,sha256=54OJKRgjdXH8A2LHypbXoMlCNlmWXBY5Fvk0-VWq_fI,4596
         
     | 
| 
       85 
96 
     | 
    
         
             
            claude_mpm/hooks/builtin/pre_delegation_hook_example.py,sha256=JOAdDm46be_ol7uSmnQaE0jQS8SsiuGei80Auj3sdL8,4692
         
     | 
| 
         @@ -88,17 +99,12 @@ claude_mpm/hooks/builtin/ticket_extraction_hook_example.py,sha256=4wNhS2tFUXgdcv 
     | 
|
| 
       88 
99 
     | 
    
         
             
            claude_mpm/hooks/builtin/todo_agent_prefix_hook.py,sha256=v_4w2vcZIt0bkZxqdHmgtN79yHZ1gviuhhBws0FHpIQ,10226
         
     | 
| 
       89 
100 
     | 
    
         
             
            claude_mpm/hooks/builtin/workflow_start_hook.py,sha256=EQrtYD9qLMLSYPl3oQinEheZAJ2i5EO_h2jhhR8lmt0,7490
         
     | 
| 
       90 
101 
     | 
    
         
             
            claude_mpm/hooks/claude_hooks/__init__.py,sha256=bMUwt2RzDGAcEbtDMA7vWS1uJsauOY0OixIe4pHwgQ0,129
         
     | 
| 
       91 
     | 
    
         
            -
            claude_mpm/hooks/claude_hooks/hook_handler.py,sha256= 
     | 
| 
       92 
     | 
    
         
            -
            claude_mpm/hooks/claude_hooks/hook_wrapper.sh,sha256= 
     | 
| 
       93 
     | 
    
         
            -
            claude_mpm/models/__init__.py,sha256= 
     | 
| 
      
 102 
     | 
    
         
            +
            claude_mpm/hooks/claude_hooks/hook_handler.py,sha256=BHjMqyr_EiHPYhNa8XY2f8MPwia-KESBloM5CTMm9WU,31687
         
     | 
| 
      
 103 
     | 
    
         
            +
            claude_mpm/hooks/claude_hooks/hook_wrapper.sh,sha256=otLBTac_sBI3s5dH--9nok59tU91_U_vV5kmzc2fmRo,1995
         
     | 
| 
      
 104 
     | 
    
         
            +
            claude_mpm/models/__init__.py,sha256=vy2NLX2KT9QeH76SjCYh9dOYKPLRgxGrnwkQFAg08gc,465
         
     | 
| 
       94 
105 
     | 
    
         
             
            claude_mpm/models/agent_definition.py,sha256=y9XQOED_maOyiYKhNB8H8MfJJMBN0vIYPS_wCXnRJmA,6647
         
     | 
| 
       95 
     | 
    
         
            -
            claude_mpm/models/common.py,sha256=Yhqx9h7e0hFx-uTHc2YyLVbNo3CmjiDPSSVGKAhyWAk,1359
         
     | 
| 
       96 
     | 
    
         
            -
            claude_mpm/models/lifecycle.py,sha256=RAZYyB1X5_y83Jxrfx6DReMfoJvi222typU6iJ13zcE,2803
         
     | 
| 
       97 
     | 
    
         
            -
            claude_mpm/models/modification.py,sha256=Ttx1hadsLsiME_L069DQLnMza4lqjjDav6fadTVhVlE,4280
         
     | 
| 
       98 
     | 
    
         
            -
            claude_mpm/models/persistence.py,sha256=hyQn83As-D8Akmu95va2To5nPFWnUvY8WRL0ozzvmJk,1659
         
     | 
| 
       99 
     | 
    
         
            -
            claude_mpm/models/registry.py,sha256=T0v7jTO2I8qIak9JKwavZKL0CrZ8nVJXVrf129VUUSM,3122
         
     | 
| 
       100 
106 
     | 
    
         
             
            claude_mpm/orchestration/SUBPROCESS_DESIGN.md,sha256=YwToiT1_NXblv1XIWhWPNc2uKzDvqY2E_Nix8qK7qk0,2136
         
     | 
| 
       101 
     | 
    
         
            -
            claude_mpm/orchestration/__init__.py,sha256= 
     | 
| 
      
 107 
     | 
    
         
            +
            claude_mpm/orchestration/__init__.py,sha256=hnrG5vtUuEFi5E8kRa1XKFWtlWL_FxffwGMrCM_6YJg,205
         
     | 
| 
       102 
108 
     | 
    
         
             
            claude_mpm/orchestration/archive/direct_orchestrator.py,sha256=j-IP-st-Xi9Xf33i-BLPZOE_kkxSZxNNuFZmp6MTuZY,7884
         
     | 
| 
       103 
109 
     | 
    
         
             
            claude_mpm/orchestration/archive/factory.py,sha256=p2g79cXcCRVfLhHrlR_3nMaZkviacVyKjCelCLAa_j0,8249
         
     | 
| 
       104 
110 
     | 
    
         
             
            claude_mpm/orchestration/archive/hook_enabled_orchestrator.py,sha256=OeeKj-bDC3W_ze_2aqmH0sP4NrATvfzRReirdrw1ksY,7348
         
     | 
| 
         @@ -120,27 +126,38 @@ claude_mpm/schemas/ticket_workflow_schema.json,sha256=AVedOeNfOdJdERaxEz4ZJj4aVZ 
     | 
|
| 
       120 
126 
     | 
    
         
             
            claude_mpm/schemas/workflow_validator.py,sha256=qRgGodJoIZQaLfZ8OzWz3Y9eVNz3ckrQwkJ2RvccxAs,17175
         
     | 
| 
       121 
127 
     | 
    
         
             
            claude_mpm/schemas/examples/standard_workflow.json,sha256=POQdxPIoJRD2qe4-17a35pGqFX5hfmGttXWPfeZ8qRs,13835
         
     | 
| 
       122 
128 
     | 
    
         
             
            claude_mpm/scripts/__init__.py,sha256=M2n9fQeyfILC8gogXvJv6ixnu7hwpqLEqLWJRaUN0MU,37
         
     | 
| 
      
 129 
     | 
    
         
            +
            claude_mpm/scripts/claude-mpm-socketio,sha256=usdZgOQs0vjAKBhUcGJoRPnzJt3wYZDQM88t71TTVeY,1029
         
     | 
| 
      
 130 
     | 
    
         
            +
            claude_mpm/scripts/claude_mpm_monitor.html,sha256=24g1YWNB8PZ2S_q2xLQycK0Z06e2C7yOTsEm6qQRVUI,17634
         
     | 
| 
      
 131 
     | 
    
         
            +
            claude_mpm/scripts/install_socketio_server.py,sha256=Bx3BL48EF1peH111k_HU7tQdcUU6QVthAemGQcPsano,15522
         
     | 
| 
      
 132 
     | 
    
         
            +
            claude_mpm/scripts/launch_monitor.py,sha256=fAgRFJknrYq31SEWD9oEAEH2xvR3Lh_bzRPGDKEAFGg,4437
         
     | 
| 
      
 133 
     | 
    
         
            +
            claude_mpm/scripts/manage_version.py,sha256=5c86LD-_m0AlWqfgjRF6BH3Jc7n_nm5Z7hFVqB3iExQ,17524
         
     | 
| 
      
 134 
     | 
    
         
            +
            claude_mpm/scripts/socketio_daemon.py,sha256=HuRr7kzwwZskgLjHqf0wSW8IndsTs2s-aeR1tgnPMag,5115
         
     | 
| 
      
 135 
     | 
    
         
            +
            claude_mpm/scripts/socketio_server_manager.py,sha256=94uTdTuMHvTZrBNSrOHSKMz_z0AINl3uoc44msWfEz8,15522
         
     | 
| 
       123 
136 
     | 
    
         
             
            claude_mpm/scripts/ticket.py,sha256=GmFimtTJxc927cCzJvvJH3gvoxXQtAB-W-xnuclcvNs,9350
         
     | 
| 
       124 
     | 
    
         
            -
            claude_mpm/ 
     | 
| 
       125 
     | 
    
         
            -
            claude_mpm/security/bash_validator.py,sha256=vEOED6PkgeNazAjKmPpGLmlbVQAVCHwUiG7x0WBJdA4,15784
         
     | 
| 
       126 
     | 
    
         
            -
            claude_mpm/services/__init__.py,sha256=-EBm07Lh9mjcofiQHCqyCCQJMLi9akVArPlz8i_kEOo,226
         
     | 
| 
      
 137 
     | 
    
         
            +
            claude_mpm/services/__init__.py,sha256=HhIBqyTtIKnKMAgFXJCX37LDosq61dQff1_5rbyT7Y8,408
         
     | 
| 
       127 
138 
     | 
    
         
             
            claude_mpm/services/agent_capabilities_generator.py,sha256=hWG0zV2InmzrDMxSbQzjVBBTzEaxg0bFxl8tmTMJ8qA,6565
         
     | 
| 
       128 
139 
     | 
    
         
             
            claude_mpm/services/agent_deployment.py,sha256=DtK1BX2yCrutUkQdVPD01mYHm-ya36l3EPOnEcaDfog,67961
         
     | 
| 
       129 
     | 
    
         
            -
            claude_mpm/services/agent_lifecycle_manager.py,sha256= 
     | 
| 
      
 140 
     | 
    
         
            +
            claude_mpm/services/agent_lifecycle_manager.py,sha256=fWggWu5rT7FkDQrRHyw05Y4KaNN9cXeaCinsymPJwM4,50127
         
     | 
| 
       130 
141 
     | 
    
         
             
            claude_mpm/services/agent_management_service.py,sha256=eX5n6w17b9urcogVdr4V-kXcuo7yyjORTrIihjF8PeQ,22853
         
     | 
| 
       131 
     | 
    
         
            -
            claude_mpm/services/ 
     | 
| 
       132 
     | 
    
         
            -
            claude_mpm/services/ 
     | 
| 
      
 142 
     | 
    
         
            +
            claude_mpm/services/agent_memory_manager.py,sha256=Rs0aHEU2txOGf3v3tYZ-11DCmmhp8osFS9ltxAFWclw,26703
         
     | 
| 
      
 143 
     | 
    
         
            +
            claude_mpm/services/agent_modification_tracker.py,sha256=uxELrXtFt5Xlv0mhRbq5ynagEowczTRrv3mAp-aRZFc,34519
         
     | 
| 
      
 144 
     | 
    
         
            +
            claude_mpm/services/agent_persistence_service.py,sha256=B_Vz43zCKWq47zWkoibcia-Qwn2y3gARu7MV5Cpiptc,2893
         
     | 
| 
       133 
145 
     | 
    
         
             
            claude_mpm/services/agent_profile_loader.py,sha256=4D1Xj0vgqV8wN7Y3r8lijh7ghy5cVGU5t5s931sVqGc,23133
         
     | 
| 
       134 
     | 
    
         
            -
            claude_mpm/services/agent_registry.py,sha256= 
     | 
| 
      
 146 
     | 
    
         
            +
            claude_mpm/services/agent_registry.py,sha256=vn8CEW0vppj_0EY2NofmNRZEnpV70mlWiX2kAViFDRg,24374
         
     | 
| 
       135 
147 
     | 
    
         
             
            claude_mpm/services/agent_versioning.py,sha256=y4SiKGKdTn-9_Ht6nGlmKGJW6MLgEHZUy5SR1OPTZZM,1108
         
     | 
| 
       136 
148 
     | 
    
         
             
            claude_mpm/services/base_agent_manager.py,sha256=WEcfzdMaFXmXUSoEYEPNeGu8dvqjIv53zyUU0ITrhsM,14987
         
     | 
| 
       137 
149 
     | 
    
         
             
            claude_mpm/services/deployed_agent_discovery.py,sha256=GoXhho5EBz_FZDDl4xUWW_BnP3hfymbV1ePorRrhO_U,9443
         
     | 
| 
       138 
150 
     | 
    
         
             
            claude_mpm/services/framework_agent_loader.py,sha256=QdRSYRurYF3YbAXJwIGei71BffD5AqOVcV3ktRPdk7g,14018
         
     | 
| 
       139 
151 
     | 
    
         
             
            claude_mpm/services/framework_claude_md_generator.py,sha256=3kHmkRLHTex6HFZ4DhbLVQb48j-5dAoy1q6UW1Qf7U8,22914
         
     | 
| 
       140 
     | 
    
         
            -
            claude_mpm/services/ 
     | 
| 
      
 152 
     | 
    
         
            +
            claude_mpm/services/hook_service.py,sha256=hkpN8mXXYCwzdLVJwsoVg_fw5seEmei-q0ZzQyNoCXA,14200
         
     | 
| 
       141 
153 
     | 
    
         
             
            claude_mpm/services/shared_prompt_cache.py,sha256=D04lrRWyg0lHyqGcAHy7IYvRHRKSg6EOpAJwBUPa2wk,29890
         
     | 
| 
       142 
     | 
    
         
            -
            claude_mpm/services/ 
     | 
| 
       143 
     | 
    
         
            -
            claude_mpm/services/ 
     | 
| 
      
 154 
     | 
    
         
            +
            claude_mpm/services/socketio_client_manager.py,sha256=2Ly63iiGA_BUzf73UwQDu9Q75wA1C4O1CWFv8hi8bms,18074
         
     | 
| 
      
 155 
     | 
    
         
            +
            claude_mpm/services/socketio_server.py,sha256=PoLOAyLi3xqPt7fAOTKjWXns48e5zyUyL26bPl0nuM8,28712
         
     | 
| 
      
 156 
     | 
    
         
            +
            claude_mpm/services/standalone_socketio_server.py,sha256=XhsJ40Me3eSFHDpweIouy7dIqHK1aubikHCY275mUXk,24764
         
     | 
| 
      
 157 
     | 
    
         
            +
            claude_mpm/services/ticket_manager.py,sha256=Ki11YjBkDax8BFVSaDdOBk3K4VU5gvdbgq9AmCyyoZ0,7454
         
     | 
| 
      
 158 
     | 
    
         
            +
            claude_mpm/services/ticket_manager_di.py,sha256=pIsIGncbboKzBYSRQTO7ZX5MuQzV6iFfIflvKe6u1jw,11123
         
     | 
| 
      
 159 
     | 
    
         
            +
            claude_mpm/services/ticketing_service_original.py,sha256=Dg3TYKsy0Z3JCqV5rlMBXeMrhrkAGxOgAMUNRZtJIhw,16680
         
     | 
| 
      
 160 
     | 
    
         
            +
            claude_mpm/services/websocket_server.py,sha256=mC033w8TjwUGIv1r4uedtvQBPQQ_X7ZUA-u3ANugdMo,13553
         
     | 
| 
       144 
161 
     | 
    
         
             
            claude_mpm/services/framework_claude_md_generator/README.md,sha256=_-ty72t2afPagDVVUEizPkhs4BYkCeqCnZDNPgZAYtY,3511
         
     | 
| 
       145 
162 
     | 
    
         
             
            claude_mpm/services/framework_claude_md_generator/__init__.py,sha256=OtnwxLiJektfFtsKdkHM1X27rKkFiNd_rcf4843ziKw,7334
         
     | 
| 
       146 
163 
     | 
    
         
             
            claude_mpm/services/framework_claude_md_generator/content_assembler.py,sha256=CZlw84bBWjvK68VQhjAdLnMxXBXipZtcdyPtYWLdrKo,6590
         
     | 
| 
         @@ -178,22 +195,25 @@ claude_mpm/services/version_control/__init__.py,sha256=5BFbqFUMtpCyDbMcekRjCQ4jg 
     | 
|
| 
       178 
195 
     | 
    
         
             
            claude_mpm/services/version_control/branch_strategy.py,sha256=MTjWinbJEp4N-QqBi6Olop7LNtvhCEPVnfCwK-29O-A,22999
         
     | 
| 
       179 
196 
     | 
    
         
             
            claude_mpm/services/version_control/conflict_resolution.py,sha256=yWa9fzmkds1U0EBw-LyTZvlj56MpEEsRmryLQg4KDdU,26084
         
     | 
| 
       180 
197 
     | 
    
         
             
            claude_mpm/services/version_control/git_operations.py,sha256=L69Aduzwq4IipIGV3iiwNQTlgVi6peh-LzJTks7bvxo,27499
         
     | 
| 
       181 
     | 
    
         
            -
            claude_mpm/services/version_control/semantic_versioning.py,sha256= 
     | 
| 
      
 198 
     | 
    
         
            +
            claude_mpm/services/version_control/semantic_versioning.py,sha256=xiDsirwq8CApnOBc4UMf4VcrgolzQgfK2T_Yi3mY7Bk,29039
         
     | 
| 
       182 
199 
     | 
    
         
             
            claude_mpm/ui/__init__.py,sha256=Snxxm3pYXPKfv9gBG_MZKxXkZk8c4ZJAQIvh-rjjCFo,45
         
     | 
| 
       183 
200 
     | 
    
         
             
            claude_mpm/ui/rich_terminal_ui.py,sha256=gx_9TD0kR4Exq867pHjVVs_b-gw1q267t5oA2ZDSkQU,10078
         
     | 
| 
       184 
201 
     | 
    
         
             
            claude_mpm/ui/terminal_ui.py,sha256=E_M-L-6EuGp6L8pRpaWEhTqf-ddDXhZp5W85D0XNRPw,11928
         
     | 
| 
       185 
202 
     | 
    
         
             
            claude_mpm/utils/__init__.py,sha256=E8Hvv6ykL6rnnc8-YmfoGNpRCZbcIirxcFuNz7YvDIg,346
         
     | 
| 
       186 
203 
     | 
    
         
             
            claude_mpm/utils/config_manager.py,sha256=TlekZYIWOz_ouWHQU4Gc-zckhoFK9AqA25b6A_XZdDc,16412
         
     | 
| 
      
 204 
     | 
    
         
            +
            claude_mpm/utils/dependency_manager.py,sha256=LcMFoXyGcqEHVvmNKpU-AyyYclgI6a722Mt9YVejXTM,7243
         
     | 
| 
       187 
205 
     | 
    
         
             
            claude_mpm/utils/error_handler.py,sha256=W_Zc0FrKudpXvxT66Oxx0v8WkR8HA2KlynzzGy3eGcU,8168
         
     | 
| 
       188 
206 
     | 
    
         
             
            claude_mpm/utils/framework_detection.py,sha256=nzs1qRZK9K-zT0382z1FpGDvgzUNrUg8rBL-O_WLq-Q,1217
         
     | 
| 
      
 207 
     | 
    
         
            +
            claude_mpm/utils/import_migration_example.py,sha256=W4a4XH3FY_VBB00BB8Lae2aRPM021PxLHzdUfEs0B5w,2463
         
     | 
| 
       189 
208 
     | 
    
         
             
            claude_mpm/utils/imports.py,sha256=wX-SOXUHbemx01MHRGQpVwajzXH6qYdQkYNFCIbb2mw,6851
         
     | 
| 
       190 
     | 
    
         
            -
            claude_mpm/utils/path_operations.py,sha256= 
     | 
| 
      
 209 
     | 
    
         
            +
            claude_mpm/utils/path_operations.py,sha256=6pLMnAWBVzHkgp6JyQHmHbGD-dWn-nX21yV4E_eT-kM,11614
         
     | 
| 
       191 
210 
     | 
    
         
             
            claude_mpm/utils/paths.py,sha256=Xv0SZWdZRkRjN9e6clBcA165ya00GNQxt7SwMz51tfA,10153
         
     | 
| 
       192 
211 
     | 
    
         
             
            claude_mpm/validation/__init__.py,sha256=bJ19g9lnk7yIjtxzN8XPegp87HTFBzCrGQOpFgRTf3g,155
         
     | 
| 
       193 
212 
     | 
    
         
             
            claude_mpm/validation/agent_validator.py,sha256=GCA2b2rKhKDeaNyUqWxTiWIs3sDdWjD9cgOFRp9K6ic,18227
         
     | 
| 
       194 
     | 
    
         
            -
            claude_mpm 
     | 
| 
       195 
     | 
    
         
            -
            claude_mpm-3.1. 
     | 
| 
       196 
     | 
    
         
            -
            claude_mpm-3.1. 
     | 
| 
       197 
     | 
    
         
            -
            claude_mpm-3.1. 
     | 
| 
       198 
     | 
    
         
            -
            claude_mpm-3.1. 
     | 
| 
       199 
     | 
    
         
            -
            claude_mpm-3.1. 
     | 
| 
      
 213 
     | 
    
         
            +
            claude_mpm/web/open_dashboard.py,sha256=aXUc6LzUMwmTQMkl_h2jjvICimr-ED4FPMHP_9mnrgQ,1108
         
     | 
| 
      
 214 
     | 
    
         
            +
            claude_mpm-3.2.1.dist-info/licenses/LICENSE,sha256=cSdDfXjoTVhstrERrqme4zgxAu4GubU22zVEHsiXGxs,1071
         
     | 
| 
      
 215 
     | 
    
         
            +
            claude_mpm-3.2.1.dist-info/METADATA,sha256=Huw-Iij7OODoeQTLXpjKOHtaWuArPOy4g_iM9ul3Rlw,15029
         
     | 
| 
      
 216 
     | 
    
         
            +
            claude_mpm-3.2.1.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
         
     | 
| 
      
 217 
     | 
    
         
            +
            claude_mpm-3.2.1.dist-info/entry_points.txt,sha256=3_d7wLrg9sRmQ1SfrFGWoTNL8Wrd6lQb2XVSYbTwRIg,324
         
     | 
| 
      
 218 
     | 
    
         
            +
            claude_mpm-3.2.1.dist-info/top_level.txt,sha256=1nUg3FEaBySgm8t-s54jK5zoPnu3_eY6EP6IOlekyHA,11
         
     | 
| 
      
 219 
     | 
    
         
            +
            claude_mpm-3.2.1.dist-info/RECORD,,
         
     |