claude-mpm 3.5.4__py3-none-any.whl → 3.5.6__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- claude_mpm/.claude-mpm/logs/hooks_20250728.log +10 -0
- claude_mpm/VERSION +1 -1
- claude_mpm/agents/INSTRUCTIONS.md +12 -11
- claude_mpm/agents/agent-template.yaml +83 -0
- claude_mpm/cli/README.md +108 -0
- claude_mpm/cli/commands/agents.py +21 -3
- claude_mpm/cli/commands/run.py +4 -11
- claude_mpm/cli/utils.py +9 -1
- claude_mpm/cli_module/refactoring_guide.md +253 -0
- claude_mpm/config/async_logging_config.yaml +145 -0
- claude_mpm/core/.claude-mpm/logs/hooks_20250730.log +34 -0
- claude_mpm/core/claude_runner.py +94 -33
- claude_mpm/core/config_paths.py +0 -1
- claude_mpm/core/factories.py +9 -3
- claude_mpm/dashboard/.claude-mpm/memories/README.md +36 -0
- claude_mpm/dashboard/README.md +121 -0
- claude_mpm/dashboard/static/js/dashboard.js.backup +1973 -0
- claude_mpm/dashboard/templates/.claude-mpm/memories/README.md +36 -0
- claude_mpm/dashboard/templates/.claude-mpm/memories/engineer_agent.md +39 -0
- claude_mpm/dashboard/templates/.claude-mpm/memories/version_control_agent.md +38 -0
- claude_mpm/hooks/README.md +96 -0
- claude_mpm/init.py +83 -13
- claude_mpm/schemas/agent_schema.json +435 -0
- claude_mpm/services/agents/deployment/agent_deployment.py +165 -9
- claude_mpm/services/agents/management/agent_management_service.py +2 -1
- claude_mpm/services/framework_claude_md_generator/README.md +92 -0
- claude_mpm/services/framework_claude_md_generator/section_generators/agents.py +3 -3
- claude_mpm/services/framework_claude_md_generator/section_generators/claude_pm_init.py +2 -2
- claude_mpm/services/version_control/VERSION +1 -0
- {claude_mpm-3.5.4.dist-info → claude_mpm-3.5.6.dist-info}/METADATA +43 -1
- {claude_mpm-3.5.4.dist-info → claude_mpm-3.5.6.dist-info}/RECORD +35 -19
- {claude_mpm-3.5.4.dist-info → claude_mpm-3.5.6.dist-info}/WHEEL +0 -0
- {claude_mpm-3.5.4.dist-info → claude_mpm-3.5.6.dist-info}/entry_points.txt +0 -0
- {claude_mpm-3.5.4.dist-info → claude_mpm-3.5.6.dist-info}/licenses/LICENSE +0 -0
- {claude_mpm-3.5.4.dist-info → claude_mpm-3.5.6.dist-info}/top_level.txt +0 -0
| @@ -70,13 +70,14 @@ class AgentDeploymentService: | |
| 70 70 | 
             
                - YAML generation capabilities
         | 
| 71 71 | 
             
                """
         | 
| 72 72 |  | 
| 73 | 
            -
                def __init__(self, templates_dir: Optional[Path] = None, base_agent_path: Optional[Path] = None):
         | 
| 73 | 
            +
                def __init__(self, templates_dir: Optional[Path] = None, base_agent_path: Optional[Path] = None, working_directory: Optional[Path] = None):
         | 
| 74 74 | 
             
                    """
         | 
| 75 75 | 
             
                    Initialize agent deployment service.
         | 
| 76 76 |  | 
| 77 77 | 
             
                    Args:
         | 
| 78 78 | 
             
                        templates_dir: Directory containing agent JSON files
         | 
| 79 79 | 
             
                        base_agent_path: Path to base_agent.md file
         | 
| 80 | 
            +
                        working_directory: User's working directory (for project agents)
         | 
| 80 81 |  | 
| 81 82 | 
             
                    METRICS OPPORTUNITY: Track initialization performance:
         | 
| 82 83 | 
             
                    - Template directory scan time
         | 
| @@ -100,6 +101,17 @@ class AgentDeploymentService: | |
| 100 101 | 
             
                        'deployment_errors': {}  # Track error types and frequencies
         | 
| 101 102 | 
             
                    }
         | 
| 102 103 |  | 
| 104 | 
            +
                    # Determine the actual working directory
         | 
| 105 | 
            +
                    # Priority: working_directory param > CLAUDE_MPM_USER_PWD env var > current directory
         | 
| 106 | 
            +
                    if working_directory:
         | 
| 107 | 
            +
                        self.working_directory = Path(working_directory)
         | 
| 108 | 
            +
                    elif 'CLAUDE_MPM_USER_PWD' in os.environ:
         | 
| 109 | 
            +
                        self.working_directory = Path(os.environ['CLAUDE_MPM_USER_PWD'])
         | 
| 110 | 
            +
                    else:
         | 
| 111 | 
            +
                        self.working_directory = Path.cwd()
         | 
| 112 | 
            +
                    
         | 
| 113 | 
            +
                    self.logger.info(f"Working directory for deployment: {self.working_directory}")
         | 
| 114 | 
            +
                    
         | 
| 103 115 | 
             
                    # Find templates directory using centralized path management
         | 
| 104 116 | 
             
                    if templates_dir:
         | 
| 105 117 | 
             
                        self.templates_dir = Path(templates_dir)
         | 
| @@ -137,6 +149,7 @@ class AgentDeploymentService: | |
| 137 149 | 
             
                    - Error type frequencies
         | 
| 138 150 |  | 
| 139 151 | 
             
                    OPERATIONAL FLOW:
         | 
| 152 | 
            +
                    0. Validates and repairs broken frontmatter in existing agents (Step 0)
         | 
| 140 153 | 
             
                    1. Validates target directory (creates if needed)
         | 
| 141 154 | 
             
                    2. Loads base agent configuration
         | 
| 142 155 | 
             
                    3. Discovers all agent templates
         | 
| @@ -178,13 +191,15 @@ class AgentDeploymentService: | |
| 178 191 | 
             
                        - skipped: List of unchanged agents
         | 
| 179 192 | 
             
                        - errors: List of deployment errors
         | 
| 180 193 | 
             
                        - total: Total number of agents processed
         | 
| 194 | 
            +
                        - repaired: List of agents with repaired frontmatter
         | 
| 181 195 | 
             
                    """
         | 
| 182 196 | 
             
                    # METRICS: Record deployment start time for performance tracking
         | 
| 183 197 | 
             
                    deployment_start_time = time.time()
         | 
| 184 198 |  | 
| 185 199 | 
             
                    if not target_dir:
         | 
| 186 | 
            -
                        # Default to  | 
| 187 | 
            -
                         | 
| 200 | 
            +
                        # Default to working directory's .claude/agents directory (not home)
         | 
| 201 | 
            +
                        # This ensures we deploy to the user's project directory, not the framework directory
         | 
| 202 | 
            +
                        agents_dir = self.working_directory / ".claude" / "agents"
         | 
| 188 203 | 
             
                    else:
         | 
| 189 204 | 
             
                        # If target_dir provided, use it directly (caller decides structure)
         | 
| 190 205 | 
             
                        # This allows for both passing a project dir or the full agents path
         | 
| @@ -211,6 +226,7 @@ class AgentDeploymentService: | |
| 211 226 | 
             
                        "updated": [],
         | 
| 212 227 | 
             
                        "migrated": [],  # Track agents migrated from old format
         | 
| 213 228 | 
             
                        "converted": [],  # Track YAML to MD conversions
         | 
| 229 | 
            +
                        "repaired": [],  # Track agents with repaired frontmatter
         | 
| 214 230 | 
             
                        "total": 0,
         | 
| 215 231 | 
             
                        # METRICS: Add detailed timing and performance data to results
         | 
| 216 232 | 
             
                        "metrics": {
         | 
| @@ -226,6 +242,16 @@ class AgentDeploymentService: | |
| 226 242 | 
             
                    try:
         | 
| 227 243 | 
             
                        # Create agents directory if needed
         | 
| 228 244 | 
             
                        agents_dir.mkdir(parents=True, exist_ok=True)
         | 
| 245 | 
            +
                        
         | 
| 246 | 
            +
                        # STEP 0: Validate and repair broken frontmatter in existing agents
         | 
| 247 | 
            +
                        # This ensures all existing agents have valid YAML frontmatter before deploying new ones
         | 
| 248 | 
            +
                        repair_results = self._validate_and_repair_existing_agents(agents_dir)
         | 
| 249 | 
            +
                        if repair_results["repaired"]:
         | 
| 250 | 
            +
                            results["repaired"] = repair_results["repaired"]
         | 
| 251 | 
            +
                            self.logger.info(f"Repaired frontmatter in {len(repair_results['repaired'])} existing agents")
         | 
| 252 | 
            +
                            for agent_name in repair_results["repaired"]:
         | 
| 253 | 
            +
                                self.logger.debug(f"  - Repaired: {agent_name}")
         | 
| 254 | 
            +
                        
         | 
| 229 255 | 
             
                        # Determine source tier for logging
         | 
| 230 256 | 
             
                        source_tier = "SYSTEM"
         | 
| 231 257 | 
             
                        if ".claude-mpm/agents" in str(self.templates_dir) and "/templates" not in str(self.templates_dir):
         | 
| @@ -269,7 +295,8 @@ class AgentDeploymentService: | |
| 269 295 | 
             
                        # Get all template files
         | 
| 270 296 | 
             
                        template_files = list(self.templates_dir.glob("*.json"))
         | 
| 271 297 | 
             
                        # Filter out non-agent files - exclude system files and uppercase special files
         | 
| 272 | 
            -
                         | 
| 298 | 
            +
                        # CRITICAL: PM (Project Manager) must NEVER be deployed as it's the main Claude instance
         | 
| 299 | 
            +
                        excluded_names = {"__init__", "MEMORIES", "TODOWRITE", "INSTRUCTIONS", "README", "pm", "PM", "project_manager"}
         | 
| 273 300 | 
             
                        template_files = [
         | 
| 274 301 | 
             
                            f for f in template_files 
         | 
| 275 302 | 
             
                            if f.stem not in excluded_names 
         | 
| @@ -373,6 +400,7 @@ class AgentDeploymentService: | |
| 373 400 | 
             
                            f"updated {len(results['updated'])}, "
         | 
| 374 401 | 
             
                            f"migrated {len(results['migrated'])}, "
         | 
| 375 402 | 
             
                            f"converted {len(results['converted'])} YAML files, "
         | 
| 403 | 
            +
                            f"repaired {len(results['repaired'])} frontmatter, "
         | 
| 376 404 | 
             
                            f"skipped {len(results['skipped'])}, "
         | 
| 377 405 | 
             
                            f"errors: {len(results['errors'])}"
         | 
| 378 406 | 
             
                        )
         | 
| @@ -864,7 +892,8 @@ temperature: {temperature}""" | |
| 864 892 | 
             
                        Dictionary of environment variables set for verification
         | 
| 865 893 | 
             
                    """
         | 
| 866 894 | 
             
                    if not config_dir:
         | 
| 867 | 
            -
                         | 
| 895 | 
            +
                        # Use the working directory determined during initialization
         | 
| 896 | 
            +
                        config_dir = self.working_directory / Paths.CLAUDE_CONFIG_DIR.value
         | 
| 868 897 |  | 
| 869 898 | 
             
                    env_vars = {}
         | 
| 870 899 |  | 
| @@ -930,7 +959,8 @@ temperature: {temperature}""" | |
| 930 959 | 
             
                        - warnings: List of potential issues
         | 
| 931 960 | 
             
                    """
         | 
| 932 961 | 
             
                    if not config_dir:
         | 
| 933 | 
            -
                         | 
| 962 | 
            +
                        # Use the working directory determined during initialization
         | 
| 963 | 
            +
                        config_dir = self.working_directory / ".claude"
         | 
| 934 964 |  | 
| 935 965 | 
             
                    results = {
         | 
| 936 966 | 
             
                        "config_dir": str(config_dir),
         | 
| @@ -1094,7 +1124,8 @@ temperature: {temperature}""" | |
| 1094 1124 |  | 
| 1095 1125 | 
             
                    template_files = sorted(self.templates_dir.glob("*.json"))
         | 
| 1096 1126 | 
             
                    # Filter out non-agent files - exclude system files and uppercase special files
         | 
| 1097 | 
            -
                     | 
| 1127 | 
            +
                    # CRITICAL: PM (Project Manager) must NEVER be deployed as it's the main Claude instance
         | 
| 1128 | 
            +
                    excluded_names = {"__init__", "MEMORIES", "TODOWRITE", "INSTRUCTIONS", "README", "pm", "PM", "project_manager"}
         | 
| 1098 1129 | 
             
                    template_files = [
         | 
| 1099 1130 | 
             
                        f for f in template_files 
         | 
| 1100 1131 | 
             
                        if f.stem not in excluded_names 
         | 
| @@ -1283,7 +1314,8 @@ temperature: {temperature}""" | |
| 1283 1314 | 
             
                        Cleanup results
         | 
| 1284 1315 | 
             
                    """
         | 
| 1285 1316 | 
             
                    if not config_dir:
         | 
| 1286 | 
            -
                         | 
| 1317 | 
            +
                        # Use the working directory determined during initialization
         | 
| 1318 | 
            +
                        config_dir = self.working_directory / ".claude"
         | 
| 1287 1319 |  | 
| 1288 1320 | 
             
                    results = {
         | 
| 1289 1321 | 
             
                        "removed": [],
         | 
| @@ -1934,4 +1966,128 @@ metadata: | |
| 1934 1966 | 
             
                    except Exception as e:
         | 
| 1935 1967 | 
             
                        self.logger.warning(f"Error extracting YAML field '{field_name}': {e}")
         | 
| 1936 1968 |  | 
| 1937 | 
            -
                    return None
         | 
| 1969 | 
            +
                    return None
         | 
| 1970 | 
            +
                
         | 
| 1971 | 
            +
                def _validate_and_repair_existing_agents(self, agents_dir: Path) -> Dict[str, Any]:
         | 
| 1972 | 
            +
                    """
         | 
| 1973 | 
            +
                    Validate and repair broken frontmatter in existing agent files.
         | 
| 1974 | 
            +
                    
         | 
| 1975 | 
            +
                    This method scans existing .claude/agents/*.md files and validates their
         | 
| 1976 | 
            +
                    frontmatter. If the frontmatter is broken or missing, it attempts to repair
         | 
| 1977 | 
            +
                    it or marks the agent for replacement during deployment.
         | 
| 1978 | 
            +
                    
         | 
| 1979 | 
            +
                    WHY: Ensures all existing agents have valid YAML frontmatter before deployment,
         | 
| 1980 | 
            +
                    preventing runtime errors in Claude Code when loading agents.
         | 
| 1981 | 
            +
                    
         | 
| 1982 | 
            +
                    Args:
         | 
| 1983 | 
            +
                        agents_dir: Directory containing agent .md files
         | 
| 1984 | 
            +
                        
         | 
| 1985 | 
            +
                    Returns:
         | 
| 1986 | 
            +
                        Dictionary with validation results:
         | 
| 1987 | 
            +
                        - repaired: List of agent names that were repaired
         | 
| 1988 | 
            +
                        - replaced: List of agent names marked for replacement
         | 
| 1989 | 
            +
                        - errors: List of validation errors
         | 
| 1990 | 
            +
                    """
         | 
| 1991 | 
            +
                    results = {
         | 
| 1992 | 
            +
                        "repaired": [],
         | 
| 1993 | 
            +
                        "replaced": [],
         | 
| 1994 | 
            +
                        "errors": []
         | 
| 1995 | 
            +
                    }
         | 
| 1996 | 
            +
                    
         | 
| 1997 | 
            +
                    try:
         | 
| 1998 | 
            +
                        # Import frontmatter validator
         | 
| 1999 | 
            +
                        from claude_mpm.agents.frontmatter_validator import FrontmatterValidator
         | 
| 2000 | 
            +
                        validator = FrontmatterValidator()
         | 
| 2001 | 
            +
                        
         | 
| 2002 | 
            +
                        # Find existing agent files
         | 
| 2003 | 
            +
                        agent_files = list(agents_dir.glob("*.md"))
         | 
| 2004 | 
            +
                        
         | 
| 2005 | 
            +
                        if not agent_files:
         | 
| 2006 | 
            +
                            self.logger.debug("No existing agent files to validate")
         | 
| 2007 | 
            +
                            return results
         | 
| 2008 | 
            +
                        
         | 
| 2009 | 
            +
                        self.logger.debug(f"Validating frontmatter in {len(agent_files)} existing agents")
         | 
| 2010 | 
            +
                        
         | 
| 2011 | 
            +
                        for agent_file in agent_files:
         | 
| 2012 | 
            +
                            try:
         | 
| 2013 | 
            +
                                agent_name = agent_file.stem
         | 
| 2014 | 
            +
                                
         | 
| 2015 | 
            +
                                # Read agent file content
         | 
| 2016 | 
            +
                                content = agent_file.read_text()
         | 
| 2017 | 
            +
                                
         | 
| 2018 | 
            +
                                # Check if this is a system agent (authored by claude-mpm)
         | 
| 2019 | 
            +
                                # Only repair system agents, leave user agents alone
         | 
| 2020 | 
            +
                                if "author: claude-mpm" not in content and "author: 'claude-mpm'" not in content:
         | 
| 2021 | 
            +
                                    self.logger.debug(f"Skipping validation for user agent: {agent_name}")
         | 
| 2022 | 
            +
                                    continue
         | 
| 2023 | 
            +
                                
         | 
| 2024 | 
            +
                                # Extract and validate frontmatter
         | 
| 2025 | 
            +
                                if not content.startswith("---"):
         | 
| 2026 | 
            +
                                    # No frontmatter at all - mark for replacement
         | 
| 2027 | 
            +
                                    self.logger.warning(f"Agent {agent_name} has no frontmatter, marking for replacement")
         | 
| 2028 | 
            +
                                    results["replaced"].append(agent_name)
         | 
| 2029 | 
            +
                                    # Delete the file so it will be recreated
         | 
| 2030 | 
            +
                                    agent_file.unlink()
         | 
| 2031 | 
            +
                                    continue
         | 
| 2032 | 
            +
                                
         | 
| 2033 | 
            +
                                # Try to extract frontmatter
         | 
| 2034 | 
            +
                                try:
         | 
| 2035 | 
            +
                                    end_marker = content.find("\n---\n", 4)
         | 
| 2036 | 
            +
                                    if end_marker == -1:
         | 
| 2037 | 
            +
                                        end_marker = content.find("\n---\r\n", 4)
         | 
| 2038 | 
            +
                                    
         | 
| 2039 | 
            +
                                    if end_marker == -1:
         | 
| 2040 | 
            +
                                        # Broken frontmatter - mark for replacement
         | 
| 2041 | 
            +
                                        self.logger.warning(f"Agent {agent_name} has broken frontmatter, marking for replacement")
         | 
| 2042 | 
            +
                                        results["replaced"].append(agent_name)
         | 
| 2043 | 
            +
                                        # Delete the file so it will be recreated
         | 
| 2044 | 
            +
                                        agent_file.unlink()
         | 
| 2045 | 
            +
                                        continue
         | 
| 2046 | 
            +
                                    
         | 
| 2047 | 
            +
                                    # Validate frontmatter with the validator
         | 
| 2048 | 
            +
                                    validation_result = validator.validate_file(agent_file)
         | 
| 2049 | 
            +
                                    
         | 
| 2050 | 
            +
                                    if not validation_result.is_valid:
         | 
| 2051 | 
            +
                                        # Check if it can be corrected
         | 
| 2052 | 
            +
                                        if validation_result.corrected_frontmatter:
         | 
| 2053 | 
            +
                                            # Apply corrections
         | 
| 2054 | 
            +
                                            correction_result = validator.correct_file(agent_file, dry_run=False)
         | 
| 2055 | 
            +
                                            if correction_result.corrections:
         | 
| 2056 | 
            +
                                                results["repaired"].append(agent_name)
         | 
| 2057 | 
            +
                                                self.logger.info(f"Repaired frontmatter for agent {agent_name}")
         | 
| 2058 | 
            +
                                                for correction in correction_result.corrections:
         | 
| 2059 | 
            +
                                                    self.logger.debug(f"  - {correction}")
         | 
| 2060 | 
            +
                                        else:
         | 
| 2061 | 
            +
                                            # Cannot be corrected - mark for replacement
         | 
| 2062 | 
            +
                                            self.logger.warning(f"Agent {agent_name} has invalid frontmatter that cannot be repaired, marking for replacement")
         | 
| 2063 | 
            +
                                            results["replaced"].append(agent_name)
         | 
| 2064 | 
            +
                                            # Delete the file so it will be recreated
         | 
| 2065 | 
            +
                                            agent_file.unlink()
         | 
| 2066 | 
            +
                                    elif validation_result.warnings:
         | 
| 2067 | 
            +
                                        # Has warnings but is valid
         | 
| 2068 | 
            +
                                        for warning in validation_result.warnings:
         | 
| 2069 | 
            +
                                            self.logger.debug(f"Agent {agent_name} warning: {warning}")
         | 
| 2070 | 
            +
                                    
         | 
| 2071 | 
            +
                                except Exception as e:
         | 
| 2072 | 
            +
                                    # Any error in parsing - mark for replacement
         | 
| 2073 | 
            +
                                    self.logger.warning(f"Failed to parse frontmatter for {agent_name}: {e}, marking for replacement")
         | 
| 2074 | 
            +
                                    results["replaced"].append(agent_name)
         | 
| 2075 | 
            +
                                    # Delete the file so it will be recreated
         | 
| 2076 | 
            +
                                    try:
         | 
| 2077 | 
            +
                                        agent_file.unlink()
         | 
| 2078 | 
            +
                                    except Exception:
         | 
| 2079 | 
            +
                                        pass
         | 
| 2080 | 
            +
                                
         | 
| 2081 | 
            +
                            except Exception as e:
         | 
| 2082 | 
            +
                                error_msg = f"Failed to validate agent {agent_file.name}: {e}"
         | 
| 2083 | 
            +
                                self.logger.error(error_msg)
         | 
| 2084 | 
            +
                                results["errors"].append(error_msg)
         | 
| 2085 | 
            +
                        
         | 
| 2086 | 
            +
                    except ImportError:
         | 
| 2087 | 
            +
                        self.logger.warning("FrontmatterValidator not available, skipping validation")
         | 
| 2088 | 
            +
                    except Exception as e:
         | 
| 2089 | 
            +
                        error_msg = f"Agent validation failed: {e}"
         | 
| 2090 | 
            +
                        self.logger.error(error_msg)
         | 
| 2091 | 
            +
                        results["errors"].append(error_msg)
         | 
| 2092 | 
            +
                    
         | 
| 2093 | 
            +
                    return results
         | 
| @@ -57,7 +57,8 @@ class AgentManager: | |
| 57 57 |  | 
| 58 58 | 
             
                    if project_dir is None:
         | 
| 59 59 | 
             
                        project_root = PathResolver.get_project_root()
         | 
| 60 | 
            -
                         | 
| 60 | 
            +
                        # Use direct agents directory without subdirectory to match deployment expectations
         | 
| 61 | 
            +
                        self.project_dir = project_root / ConfigPaths.CONFIG_DIR / "agents"
         | 
| 61 62 | 
             
                    else:
         | 
| 62 63 | 
             
                        self.project_dir = project_dir
         | 
| 63 64 | 
             
                    self.version_manager = AgentVersionManager()
         | 
| @@ -0,0 +1,92 @@ | |
| 1 | 
            +
            # Framework CLAUDE.md Generator
         | 
| 2 | 
            +
             | 
| 3 | 
            +
            This directory contains the refactored framework CLAUDE.md generator service, originally a single 1,267-line file.
         | 
| 4 | 
            +
             | 
| 5 | 
            +
            ## Structure
         | 
| 6 | 
            +
             | 
| 7 | 
            +
            ### Core Modules
         | 
| 8 | 
            +
             | 
| 9 | 
            +
            - **`__init__.py`** (~250 lines) - Main facade class that coordinates all functionality
         | 
| 10 | 
            +
            - **`version_manager.py`** (~100 lines) - Handles version parsing, incrementing, and comparison
         | 
| 11 | 
            +
            - **`content_assembler.py`** (~120 lines) - Assembles sections and applies template variables
         | 
| 12 | 
            +
            - **`content_validator.py`** (~80 lines) - Validates generated content structure and completeness
         | 
| 13 | 
            +
            - **`deployment_manager.py`** (~80 lines) - Handles deployment to parent directories
         | 
| 14 | 
            +
            - **`section_manager.py`** (~60 lines) - Manages section registration, ordering, and updates
         | 
| 15 | 
            +
             | 
| 16 | 
            +
            ### Section Generators
         | 
| 17 | 
            +
             | 
| 18 | 
            +
            The `section_generators/` subdirectory contains individual generators for each section:
         | 
| 19 | 
            +
             | 
| 20 | 
            +
            - **`__init__.py`** - Base classes and registry
         | 
| 21 | 
            +
            - **`header.py`** - Header with version metadata
         | 
| 22 | 
            +
            - **`role_designation.py`** - AI Assistant role designation
         | 
| 23 | 
            +
            - **`agents.py`** (~570 lines) - Comprehensive agents documentation (largest section)
         | 
| 24 | 
            +
            - **`todo_task_tools.py`** - Todo and Task Tools integration
         | 
| 25 | 
            +
            - **`claude_pm_init.py`** - Claude-PM initialization procedures
         | 
| 26 | 
            +
            - **`orchestration_principles.py`** - Core orchestration principles
         | 
| 27 | 
            +
            - **`subprocess_validation.py`** - Subprocess validation protocol
         | 
| 28 | 
            +
            - **`delegation_constraints.py`** - Critical delegation constraints
         | 
| 29 | 
            +
            - **`environment_config.py`** - Environment configuration
         | 
| 30 | 
            +
            - **`troubleshooting.py`** - Troubleshooting guide
         | 
| 31 | 
            +
            - **`core_responsibilities.py`** - Core responsibilities list
         | 
| 32 | 
            +
            - **`footer.py`** - Footer with metadata
         | 
| 33 | 
            +
             | 
| 34 | 
            +
            ## Usage
         | 
| 35 | 
            +
             | 
| 36 | 
            +
            The API remains unchanged from the original implementation:
         | 
| 37 | 
            +
             | 
| 38 | 
            +
            ```python
         | 
| 39 | 
            +
            from claude_pm.services.framework_claude_md_generator import FrameworkClaudeMdGenerator
         | 
| 40 | 
            +
             | 
| 41 | 
            +
            # Create generator instance
         | 
| 42 | 
            +
            generator = FrameworkClaudeMdGenerator()
         | 
| 43 | 
            +
             | 
| 44 | 
            +
            # Generate content
         | 
| 45 | 
            +
            content = generator.generate(
         | 
| 46 | 
            +
                current_content=existing_content,  # Optional: for version auto-increment
         | 
| 47 | 
            +
                template_variables={'PLATFORM': 'darwin', 'PYTHON_CMD': 'python3'}
         | 
| 48 | 
            +
            )
         | 
| 49 | 
            +
             | 
| 50 | 
            +
            # Deploy to parent directory
         | 
| 51 | 
            +
            success, message = generator.deploy_to_parent(Path('/parent/dir'))
         | 
| 52 | 
            +
             | 
| 53 | 
            +
            # Update a section
         | 
| 54 | 
            +
            generator.update_section('agents', 'Custom agents content')
         | 
| 55 | 
            +
             | 
| 56 | 
            +
            # Add custom section
         | 
| 57 | 
            +
            generator.add_custom_section('custom', 'Custom content', after='agents')
         | 
| 58 | 
            +
            ```
         | 
| 59 | 
            +
             | 
| 60 | 
            +
            ## Design Benefits
         | 
| 61 | 
            +
             | 
| 62 | 
            +
            1. **Modularity**: Each concern is separated into its own module
         | 
| 63 | 
            +
            2. **Maintainability**: Smaller, focused modules are easier to understand and modify
         | 
| 64 | 
            +
            3. **Testability**: Individual components can be tested in isolation
         | 
| 65 | 
            +
            4. **Extensibility**: New section generators can be added easily
         | 
| 66 | 
            +
            5. **Performance**: Section generators are loaded on demand
         | 
| 67 | 
            +
            6. **Backward Compatibility**: Original API preserved through facade pattern
         | 
| 68 | 
            +
             | 
| 69 | 
            +
            ## Section Generator Pattern
         | 
| 70 | 
            +
             | 
| 71 | 
            +
            To add a new section generator:
         | 
| 72 | 
            +
             | 
| 73 | 
            +
            1. Create a new file in `section_generators/`
         | 
| 74 | 
            +
            2. Inherit from `BaseSectionGenerator`
         | 
| 75 | 
            +
            3. Implement the `generate()` method
         | 
| 76 | 
            +
            4. Register in `section_generators/__init__.py`
         | 
| 77 | 
            +
             | 
| 78 | 
            +
            Example:
         | 
| 79 | 
            +
            ```python
         | 
| 80 | 
            +
            from . import BaseSectionGenerator
         | 
| 81 | 
            +
             | 
| 82 | 
            +
            class CustomSectionGenerator(BaseSectionGenerator):
         | 
| 83 | 
            +
                def generate(self, data: Dict[str, Any]) -> str:
         | 
| 84 | 
            +
                    return "## Custom Section\n\nContent here..."
         | 
| 85 | 
            +
            ```
         | 
| 86 | 
            +
             | 
| 87 | 
            +
            ## Refactoring Summary
         | 
| 88 | 
            +
             | 
| 89 | 
            +
            - **Original**: 1,267 lines in a single file
         | 
| 90 | 
            +
            - **Refactored**: ~250 lines in main module + well-organized submodules
         | 
| 91 | 
            +
            - **Total line reduction**: Main module reduced by 80%
         | 
| 92 | 
            +
            - **Improved organization**: 13 focused modules instead of 1 large file
         | 
| @@ -75,8 +75,8 @@ class AgentsGenerator(BaseSectionGenerator): | |
| 75 75 | 
             
            **ALL AGENT OPERATIONS FOLLOW HIERARCHICAL PRECEDENCE**
         | 
| 76 76 |  | 
| 77 77 | 
             
            #### Agent Hierarchy (Highest to Lowest Priority)
         | 
| 78 | 
            -
            1. **Project Agents**: `$PROJECT/.claude-mpm/agents | 
| 79 | 
            -
               - Project | 
| 78 | 
            +
            1. **Project Agents**: `$PROJECT/.claude-mpm/agents/`
         | 
| 79 | 
            +
               - Project implementations and overrides
         | 
| 80 80 | 
             
               - Highest precedence for project context
         | 
| 81 81 | 
             
               - Custom agents tailored to project requirements
         | 
| 82 82 |  | 
| @@ -376,7 +376,7 @@ for agent_id, metadata in agents.items(): | |
| 376 376 | 
             
            #### Directory Precedence Rules and Agent Discovery
         | 
| 377 377 |  | 
| 378 378 | 
             
            **Enhanced Agent Discovery Pattern (Highest to Lowest Priority):**
         | 
| 379 | 
            -
            1. **Project Agents**: `$PROJECT/.claude-mpm/agents | 
| 379 | 
            +
            1. **Project Agents**: `$PROJECT/.claude-mpm/agents/`
         | 
| 380 380 | 
             
            2. **Current Directory User Agents**: `$PWD/.claude-mpm/agents/user-agents/`
         | 
| 381 381 | 
             
            3. **Parent Directory User Agents**: Walk up tree checking `../user-agents/`, `../../user-agents/`, etc.
         | 
| 382 382 | 
             
            4. **User Home Agents**: `~/.claude-mpm/agents/user-defined/`
         | 
| @@ -79,9 +79,9 @@ claude-pm init --verify | |
| 79 79 | 
             
               - Working directory context
         | 
| 80 80 |  | 
| 81 81 | 
             
            3. **Project Directory** (`$PROJECT_ROOT/.claude-mpm/`)
         | 
| 82 | 
            -
               - Project | 
| 82 | 
            +
               - Project agents in `agents/`
         | 
| 83 83 | 
             
               - User agents in `agents/user-agents/` with directory precedence
         | 
| 84 | 
            -
               - Project | 
| 84 | 
            +
               - Project configuration
         | 
| 85 85 |  | 
| 86 86 | 
             
            ### Health Validation and Deployment Procedures
         | 
| 87 87 |  | 
| @@ -0,0 +1 @@ | |
| 1 | 
            +
            0.9.0
         | 
| @@ -1,6 +1,6 @@ | |
| 1 1 | 
             
            Metadata-Version: 2.4
         | 
| 2 2 | 
             
            Name: claude-mpm
         | 
| 3 | 
            -
            Version: 3.5. | 
| 3 | 
            +
            Version: 3.5.6
         | 
| 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
         | 
| @@ -45,6 +45,11 @@ Requires-Dist: black; extra == "dev" | |
| 45 45 | 
             
            Requires-Dist: flake8; extra == "dev"
         | 
| 46 46 | 
             
            Requires-Dist: mypy; extra == "dev"
         | 
| 47 47 | 
             
            Provides-Extra: monitor
         | 
| 48 | 
            +
            Provides-Extra: agents
         | 
| 49 | 
            +
            Requires-Dist: packaging>=21.0; extra == "agents"
         | 
| 50 | 
            +
            Requires-Dist: toml>=0.10.2; extra == "agents"
         | 
| 51 | 
            +
            Requires-Dist: tree-sitter>=0.21.0; extra == "agents"
         | 
| 52 | 
            +
            Requires-Dist: tree-sitter-language-pack>=0.8.0; extra == "agents"
         | 
| 48 53 | 
             
            Dynamic: author-email
         | 
| 49 54 | 
             
            Dynamic: home-page
         | 
| 50 55 | 
             
            Dynamic: license-file
         | 
| @@ -74,6 +79,12 @@ pip install claude-mpm | |
| 74 79 |  | 
| 75 80 | 
             
            # Install with development dependencies
         | 
| 76 81 | 
             
            pip install "claude-mpm[dev]"
         | 
| 82 | 
            +
             | 
| 83 | 
            +
            # Install with agent dependencies (recommended for full functionality)
         | 
| 84 | 
            +
            pip install "claude-mpm[agents]"
         | 
| 85 | 
            +
             | 
| 86 | 
            +
            # Install with all optional dependencies
         | 
| 87 | 
            +
            pip install "claude-mpm[agents,dev]"
         | 
| 77 88 | 
             
            ```
         | 
| 78 89 |  | 
| 79 90 | 
             
            ## Basic Usage
         | 
| @@ -107,6 +118,37 @@ claude-mpm agents fix --all --dry-run | |
| 107 118 |  | 
| 108 119 | 
             
            For detailed usage, see [QUICKSTART.md](QUICKSTART.md)
         | 
| 109 120 |  | 
| 121 | 
            +
            ### Agent Dependencies
         | 
| 122 | 
            +
             | 
| 123 | 
            +
            Claude MPM automatically manages Python dependencies required by agents. Agents can declare their dependencies in their configuration files, and the system aggregates them for easy installation.
         | 
| 124 | 
            +
             | 
| 125 | 
            +
            ```bash
         | 
| 126 | 
            +
            # Install all agent dependencies
         | 
| 127 | 
            +
            pip install "claude-mpm[agents]"
         | 
| 128 | 
            +
             | 
| 129 | 
            +
            # View current agent dependencies
         | 
| 130 | 
            +
            python scripts/aggregate_agent_dependencies.py --dry-run
         | 
| 131 | 
            +
             | 
| 132 | 
            +
            # Update pyproject.toml with latest agent dependencies
         | 
| 133 | 
            +
            python scripts/aggregate_agent_dependencies.py
         | 
| 134 | 
            +
            ```
         | 
| 135 | 
            +
             | 
| 136 | 
            +
            **Agent developers** can declare dependencies in their agent configurations:
         | 
| 137 | 
            +
             | 
| 138 | 
            +
            ```json
         | 
| 139 | 
            +
            {
         | 
| 140 | 
            +
              "agent_id": "my_agent",
         | 
| 141 | 
            +
              "dependencies": {
         | 
| 142 | 
            +
                "python": ["pandas>=2.0.0", "numpy>=1.24.0"],
         | 
| 143 | 
            +
                "system": ["ripgrep", "git"]
         | 
| 144 | 
            +
              }
         | 
| 145 | 
            +
            }
         | 
| 146 | 
            +
            ```
         | 
| 147 | 
            +
             | 
| 148 | 
            +
            Dependencies are automatically aggregated from all agent sources (PROJECT > USER > SYSTEM) during the build process, with intelligent version conflict resolution taking the highest compatible version.
         | 
| 149 | 
            +
             | 
| 150 | 
            +
            For comprehensive documentation, see [docs/AGENT_DEPENDENCIES.md](docs/AGENT_DEPENDENCIES.md).
         | 
| 151 | 
            +
             | 
| 110 152 | 
             
            ## Key Capabilities
         | 
| 111 153 |  | 
| 112 154 | 
             
            ### Multi-Agent Orchestration
         | 
| @@ -1,13 +1,15 @@ | |
| 1 | 
            -
            claude_mpm/VERSION,sha256= | 
| 1 | 
            +
            claude_mpm/VERSION,sha256=HpVENFe46keiMkGxLn5qWThpphm3cOa0-_-DaFHyo88,6
         | 
| 2 2 | 
             
            claude_mpm/__init__.py,sha256=ix_J0PHZBz37nVBDEYJmLpwnURlWuBKKQ8rK_00TFpk,964
         | 
| 3 3 | 
             
            claude_mpm/__main__.py,sha256=8IcM9tEbTqSN_er04eKTPX3AGo6qzRiTnPI7KfIf7rw,641
         | 
| 4 4 | 
             
            claude_mpm/constants.py,sha256=VZl6jPim-EXryEXCEtXbnG-E7Aka0uGz-Hm_EmbNt5Y,4546
         | 
| 5 5 | 
             
            claude_mpm/deployment_paths.py,sha256=JO7-fhhp_AkVB7ZssggHDBbee-r2sokpkqjoqnQLTmM,9073
         | 
| 6 | 
            -
            claude_mpm/init.py,sha256= | 
| 6 | 
            +
            claude_mpm/init.py,sha256=l-PgvEnaUvanH5mGWzncd6lCH2O0u8qDa29pMyWg_8Y,13265
         | 
| 7 7 | 
             
            claude_mpm/ticket_wrapper.py,sha256=bWjLReYyuHSBguuiRm1d52rHYNHqrPJAOLUbMt4CnuM,836
         | 
| 8 | 
            +
            claude_mpm/.claude-mpm/logs/hooks_20250728.log,sha256=5CAZYZB8sl1mE50SphO3RbdW6E_VVT6YUBCwzN-Y-RI,1244
         | 
| 8 9 | 
             
            claude_mpm/agents/BASE_AGENT_TEMPLATE.md,sha256=TYgSd9jNBMWp4mAOBUl9dconX4RcGbvmMEScRy5uyko,3343
         | 
| 9 | 
            -
            claude_mpm/agents/INSTRUCTIONS.md,sha256= | 
| 10 | 
            +
            claude_mpm/agents/INSTRUCTIONS.md,sha256=CF5BI1wldUAVvdfE4w7s9K0NuU7ckQpiHDEFdCgzeMg,11043
         | 
| 10 11 | 
             
            claude_mpm/agents/__init__.py,sha256=r-p7ervzjLPD7_8dm2tXX_fwvdTZy6KwKA03ofxN3sA,3275
         | 
| 12 | 
            +
            claude_mpm/agents/agent-template.yaml,sha256=koKJn8MCAJx0QNQMHouvIZrwvw5qjPV0U-aV-YVyk6s,2036
         | 
| 11 13 | 
             
            claude_mpm/agents/agent_loader.py,sha256=gScerY4D_j1Q5zfwAthi5SLU2mmcfz-IxUSF9L6r68I,58059
         | 
| 12 14 | 
             
            claude_mpm/agents/agent_loader_integration.py,sha256=h07Kmk4D75jmHxz5BucP6oQ5VhqVgQ35Sn5w3hcZNYI,7474
         | 
| 13 15 | 
             
            claude_mpm/agents/agents_metadata.py,sha256=Xju9Yim6XSv2u1J_Swre5VJySbdxxC-9TzpOfXG8ibg,5170
         | 
| @@ -38,23 +40,26 @@ claude_mpm/agents/templates/backup/qa_agent_20250726_234551.json,sha256=_FHWnUeh | |
| 38 40 | 
             
            claude_mpm/agents/templates/backup/research_agent_20250726_234551.json,sha256=o4n_sqSbjnsFRELB2q501vgwm-o2tQNLJLYvnVP9LWU,5629
         | 
| 39 41 | 
             
            claude_mpm/agents/templates/backup/security_agent_20250726_234551.json,sha256=l5YuD-27CxKSOsRLv0bDY_tCZyds0yGbeizLb8paeFY,2322
         | 
| 40 42 | 
             
            claude_mpm/agents/templates/backup/version_control_agent_20250726_234551.json,sha256=too38RPTLJ9HutCMn0nfmEdCj2me241dx5tUYDFtu94,2143
         | 
| 43 | 
            +
            claude_mpm/cli/README.md,sha256=BJhHwcwwrxqM0ZCoIJBPvumb32IL1gd-5RcVe2kYQGY,3370
         | 
| 41 44 | 
             
            claude_mpm/cli/__init__.py,sha256=4YB2djriA_a4zVQZDOWBsVTn28jEaF9oFYCZ-fHDwYM,6838
         | 
| 42 45 | 
             
            claude_mpm/cli/__main__.py,sha256=vShalycGU13i1-OOixEb_bjl8da4_FolrKdvoiZB-64,769
         | 
| 43 46 | 
             
            claude_mpm/cli/parser.py,sha256=6jJU_LKKP3xkMEdAlXZ6tIxp_C5SDpK8--4a7Yrnfh8,18975
         | 
| 44 | 
            -
            claude_mpm/cli/utils.py,sha256= | 
| 47 | 
            +
            claude_mpm/cli/utils.py,sha256=qNIbQcA6iE46lsve-GyoIw6eyd9ksHZz3tQA4bSmtt8,6325
         | 
| 45 48 | 
             
            claude_mpm/cli/commands/__init__.py,sha256=8VGmIJlQuQGWXq49ES35SGjxRkqPpmzP-KvqOLA8IlM,512
         | 
| 46 | 
            -
            claude_mpm/cli/commands/agents.py,sha256= | 
| 49 | 
            +
            claude_mpm/cli/commands/agents.py,sha256=fB9BuvlQ2MevXUvCLZgDlSK40hhJc9zpF3hYY7O21ec,21659
         | 
| 47 50 | 
             
            claude_mpm/cli/commands/info.py,sha256=ETL6jC08OTQVTPjs219Y0m3FzfKOUlI0-yI81AI8FXY,2990
         | 
| 48 51 | 
             
            claude_mpm/cli/commands/memory.py,sha256=ymw4EatEKHfvvMHSy6dr4-x9OB7e1nZdJS0EP0f5paI,37350
         | 
| 49 52 | 
             
            claude_mpm/cli/commands/monitor.py,sha256=80_tmSdfn_2cYpzxxPu9GnvFW0eixlSJ4wCqbn8VSCM,12407
         | 
| 50 | 
            -
            claude_mpm/cli/commands/run.py,sha256= | 
| 53 | 
            +
            claude_mpm/cli/commands/run.py,sha256=2XB3gBYth5G-rPaEoW_LBlurrrJ_kDPKnfPjFTObZcc,30388
         | 
| 51 54 | 
             
            claude_mpm/cli/commands/tickets.py,sha256=SXyGtHSyGJwTeJwDAHf7kRbdiG1DlZkXkod5UoNy7Ik,2150
         | 
| 52 55 | 
             
            claude_mpm/cli_module/__init__.py,sha256=CkMp4gzWKoZZF_qKyBDi2sQaZw_GLWZYLtKouv-4f8s,390
         | 
| 53 56 | 
             
            claude_mpm/cli_module/args.py,sha256=nilYpziBsoEySO4W1hQ2MRJyn9TFx3c3TrucyMMhRtk,7970
         | 
| 54 57 | 
             
            claude_mpm/cli_module/commands.py,sha256=CBNfO-bXrZ0spjeW_7-swprEq5V4PQSc0qhl9SLP5UU,7168
         | 
| 55 58 | 
             
            claude_mpm/cli_module/migration_example.py,sha256=C-_GbsW8dGzutnNeRLLld74ibDLyAOQx0stdpYZS0hs,6137
         | 
| 59 | 
            +
            claude_mpm/cli_module/refactoring_guide.md,sha256=fl1PGwLZAj4OYWmU0syg1jDd81PqK7rC7rhwgFId5BE,7048
         | 
| 56 60 | 
             
            claude_mpm/config/__init__.py,sha256=xte4oPG1ubIKhzne1do7slU6FbGebXin_QmyzGRn8c8,1114
         | 
| 57 61 | 
             
            claude_mpm/config/agent_config.py,sha256=QS-25LSiNz4uOocjIM_FX_SGoRQHJOfkBZCKlz09K5k,13830
         | 
| 62 | 
            +
            claude_mpm/config/async_logging_config.yaml,sha256=SBnTiykFxPpHU5yV-oFeRPAzTP7ewRbdl7dt3PPADds,3805
         | 
| 58 63 | 
             
            claude_mpm/config/paths.py,sha256=bOxSLNPBDQ3GM4NupY4Z0Jrxykgtw40z92Ytc-LMCuo,9670
         | 
| 59 64 | 
             
            claude_mpm/config/socketio_config.py,sha256=fSzqleM9EzehWg3U_--0y_zVgXZo7Q45JCI_a2xPs1g,9452
         | 
| 60 65 | 
             
            claude_mpm/core/__init__.py,sha256=yEiE03zgfISu6rSaLIUJ5vruNhkYrDHN69YeWRlrEIY,1079
         | 
| @@ -62,12 +67,12 @@ claude_mpm/core/agent_name_normalizer.py,sha256=-X68oz3_74t9BRbHA54NEGyjy0xjTsGp | |
| 62 67 | 
             
            claude_mpm/core/agent_registry.py,sha256=YvEu-ZBc7XBi9KC2ZV8sWbVAuk0iwi38tg2cK45ZWb4,22521
         | 
| 63 68 | 
             
            claude_mpm/core/agent_session_manager.py,sha256=6alXQr4gnMR-unT4J1ryEtTxJqQolA0-NgPQN6X3lqY,11212
         | 
| 64 69 | 
             
            claude_mpm/core/base_service.py,sha256=qWI_rUybHmmKroptJxcE4rzPBhK8yeMKIt2JqnqJB7E,29125
         | 
| 65 | 
            -
            claude_mpm/core/claude_runner.py,sha256= | 
| 70 | 
            +
            claude_mpm/core/claude_runner.py,sha256=d4r439GgUs4jxSq33IL7VIlwk__Cw9jWbYO42JjYbiI,73351
         | 
| 66 71 | 
             
            claude_mpm/core/config.py,sha256=Yr4bVHq-Ld4_E1QprdEwCvoRXS37xu2UtxzoNePJdJw,20635
         | 
| 67 72 | 
             
            claude_mpm/core/config_aliases.py,sha256=uilRxeIVMY4ZM_I7lnUeR0n4_nmiOpW2jY2_aW4udNA,10105
         | 
| 68 | 
            -
            claude_mpm/core/config_paths.py,sha256= | 
| 73 | 
            +
            claude_mpm/core/config_paths.py,sha256=SwoB02p7GVw5pnEasC5wPyjfFZKxCsQvQmepRCpm-Es,4971
         | 
| 69 74 | 
             
            claude_mpm/core/container.py,sha256=P4c4nSo_USSfHTxvpR1sQkVGNsgqozZBN27l3IXqiDc,12216
         | 
| 70 | 
            -
            claude_mpm/core/factories.py,sha256= | 
| 75 | 
            +
            claude_mpm/core/factories.py,sha256=hdC1BwS8gIYXt7NxoJxas3URIPxkWU8FcRbuy31ctB0,6310
         | 
| 71 76 | 
             
            claude_mpm/core/framework_loader.py,sha256=SdONNh8a7vSicr4vVuRzd7OqgDMIyg9k_xxbr8bLRi8,19547
         | 
| 72 77 | 
             
            claude_mpm/core/hook_manager.py,sha256=pVjVTu54FvpzI4F91VWX-hNStTeQelKCUM3qLjE8MhE,7045
         | 
| 73 78 | 
             
            claude_mpm/core/injectable_service.py,sha256=7fOny9c6x8IJ9hVZmFql1eNDXXB1jcWbsxfTKbMZk74,7497
         | 
| @@ -80,12 +85,16 @@ claude_mpm/core/service_registry.py,sha256=1DnOOWLoDjQJB49YRlV_Ehf6YP79ilPMtHNpS | |
| 80 85 | 
             
            claude_mpm/core/session_manager.py,sha256=D6ZA7bHAgfdkv0nLKjza0FKDng5iqi___IESrb3nSuk,8292
         | 
| 81 86 | 
             
            claude_mpm/core/socketio_pool.py,sha256=B83uDsmqRF5S0QDwwatyKS-m2SdTvotCVfc3_2uQxd8,22438
         | 
| 82 87 | 
             
            claude_mpm/core/tool_access_control.py,sha256=htZbDhC8s7D7BVqfmk0BwRrYJnlnUAk8_NeJKOaeNlg,6632
         | 
| 88 | 
            +
            claude_mpm/core/.claude-mpm/logs/hooks_20250730.log,sha256=sIDaaPfbtKTAYy6CoS-Tu12J5vRHBmNvXV88HPlP-hI,4210
         | 
| 89 | 
            +
            claude_mpm/dashboard/README.md,sha256=BuaFPsg9QOvxd_TAw9a5OdgaBDg8OUJ8eeBOpqe6LK8,4050
         | 
| 83 90 | 
             
            claude_mpm/dashboard/index.html,sha256=lXd4WCDn46w9a6edUpGQIy5DtCmiTvDerd1vY97Ule8,451
         | 
| 84 91 | 
             
            claude_mpm/dashboard/open_dashboard.py,sha256=aXUc6LzUMwmTQMkl_h2jjvICimr-ED4FPMHP_9mnrgQ,1108
         | 
| 85 92 | 
             
            claude_mpm/dashboard/test_dashboard.html,sha256=Aakmm9O-pWld_CCXLuUBOJC81Ix9D1avytTN93u0zfc,15090
         | 
| 93 | 
            +
            claude_mpm/dashboard/.claude-mpm/memories/README.md,sha256=gDuLkzgcELaaoEB5Po70F0qabTu11vBi1PnUrYCK3fw,1098
         | 
| 86 94 | 
             
            claude_mpm/dashboard/static/css/dashboard.css,sha256=z2Z9jLWoPsC71gdQQML9D9Dkr54XnpKhcz4jomCKfdY,49692
         | 
| 87 95 | 
             
            claude_mpm/dashboard/static/js/dashboard-original.js,sha256=MfrEvUbvB-sU67wslVBEYmk2q9d0s2a_u1NWodJNQrc,162374
         | 
| 88 96 | 
             
            claude_mpm/dashboard/static/js/dashboard.js,sha256=vCRjE6HfxQ4VGqe8sML2_8lX0w6qoaZF0AmWjKVldpM,72056
         | 
| 97 | 
            +
            claude_mpm/dashboard/static/js/dashboard.js.backup,sha256=UNqDPBwzJ1aZAVCxT-FGBY13nF1Q6W2UUUZggNZnOxY,71607
         | 
| 89 98 | 
             
            claude_mpm/dashboard/static/js/socket-client.js,sha256=hjh-HGAlTpaX0Cr6A7DG75TZjujPFcRQSdw7FrysCWQ,18912
         | 
| 90 99 | 
             
            claude_mpm/dashboard/static/js/components/agent-inference.js,sha256=xlH3ka8Ev-WybsMp5wAHTQyJzqpht6n3iksmgGO8nfc,27889
         | 
| 91 100 | 
             
            claude_mpm/dashboard/static/js/components/event-processor.js,sha256=7CsQw1WtKuhV_uj5AaVNMYj6PAAOcT77dxyucBDqs4w,25428
         | 
| @@ -101,9 +110,13 @@ claude_mpm/dashboard/static/js/components/socket-manager.js,sha256=x0mKU7gIpIkfA | |
| 101 110 | 
             
            claude_mpm/dashboard/static/js/components/ui-state-manager.js,sha256=5Ligdos7L_UTWMtCW34Y7BNh7msdd9ArCr-7Yr9-VS8,12979
         | 
| 102 111 | 
             
            claude_mpm/dashboard/static/js/components/working-directory.js,sha256=YGyTP0vCaRc9qR7g2d1INShG0-0_X-xkqCW2IF82eXc,33213
         | 
| 103 112 | 
             
            claude_mpm/dashboard/templates/index.html,sha256=ONVRsfpsqmvQDuz9d3QTaF2zN08YoQM9kU-Bxri4660,14997
         | 
| 113 | 
            +
            claude_mpm/dashboard/templates/.claude-mpm/memories/README.md,sha256=gDuLkzgcELaaoEB5Po70F0qabTu11vBi1PnUrYCK3fw,1098
         | 
| 114 | 
            +
            claude_mpm/dashboard/templates/.claude-mpm/memories/engineer_agent.md,sha256=t8WHtbTdnh9lKJPaHPD-3nynA7kMCogaEGER-orO4bs,1150
         | 
| 115 | 
            +
            claude_mpm/dashboard/templates/.claude-mpm/memories/version_control_agent.md,sha256=tHMYDLOkL06iaiuI0Lt-UK81iJxMaa8APWfgPXc46nw,1091
         | 
| 104 116 | 
             
            claude_mpm/experimental/cli_enhancements.py,sha256=-N5f2u9TaxUcOJegUd3lt1FRz5ErEyYUvvgrNmMRL7Q,11814
         | 
| 105 117 | 
             
            claude_mpm/generators/__init__.py,sha256=l53aBn6kBQSDz3b6bZkMCJBcEmYnV9hHEZq8LKzXgH8,152
         | 
| 106 118 | 
             
            claude_mpm/generators/agent_profile_generator.py,sha256=2HjOscogSyvrtQj8KwdgNPS6Ym_QvgX1BMeauQZewZA,5751
         | 
| 119 | 
            +
            claude_mpm/hooks/README.md,sha256=wrj5GP0aiPzx0vQrZlE4I1JaQ_JaO_kdQPj7pgfiQKc,3129
         | 
| 107 120 | 
             
            claude_mpm/hooks/__init__.py,sha256=Y3JJ_mEtvRP07r_gXkju4c0s18bjIXGH1uAbhSw1ES0,166
         | 
| 108 121 | 
             
            claude_mpm/hooks/base_hook.py,sha256=a4V2EKEG02QQB0h-pnxhZI-fouKBLYbdBLckcaNuf0k,5098
         | 
| 109 122 | 
             
            claude_mpm/hooks/memory_integration_hook.py,sha256=z0I5R4rsmLx3mzYf7QLeMTYbRShagjS6u3ASyc4XLv0,16311
         | 
| @@ -114,6 +127,7 @@ claude_mpm/hooks/claude_hooks/hook_handler.py,sha256=jbUf-ccs9B1QRSVsMnUJrNL4ogu | |
| 114 127 | 
             
            claude_mpm/hooks/claude_hooks/hook_wrapper.sh,sha256=JBbedWNs1EHaUsAkmqfPv_tWxV_DcRP707hma74oHU0,2370
         | 
| 115 128 | 
             
            claude_mpm/models/__init__.py,sha256=vy2NLX2KT9QeH76SjCYh9dOYKPLRgxGrnwkQFAg08gc,465
         | 
| 116 129 | 
             
            claude_mpm/models/agent_definition.py,sha256=y9XQOED_maOyiYKhNB8H8MfJJMBN0vIYPS_wCXnRJmA,6647
         | 
| 130 | 
            +
            claude_mpm/schemas/agent_schema.json,sha256=T6yRidCHiRbeXYj1MqZJkepiOfUSN9kwNcU28Zqdi_k,13911
         | 
| 117 131 | 
             
            claude_mpm/scripts/socketio_daemon.py,sha256=93jzq-h5GQRK-xYpLaovaqNAXtwR_ZqYjmEMmFn0xE8,9741
         | 
| 118 132 | 
             
            claude_mpm/services/__init__.py,sha256=6iAzVquVu_hhNN05fdGzOwhyLfWbYkTv-gaCHS_tmoE,4616
         | 
| 119 133 | 
             
            claude_mpm/services/async_session_logger.py,sha256=KhV540ZFu__ry9sDuckSA5MkyNfov8dLCTRZkgMQ62Q,21651
         | 
| @@ -135,7 +149,7 @@ claude_mpm/services/ticket_manager_di.py,sha256=pIsIGncbboKzBYSRQTO7ZX5MuQzV6iFf | |
| 135 149 | 
             
            claude_mpm/services/ticketing_service_original.py,sha256=_GbPCPuIAlfxQGfmHN-LQ6sjuDk00eNdY7rlS4qhjI4,16745
         | 
| 136 150 | 
             
            claude_mpm/services/agents/__init__.py,sha256=F5yJSTruNz0qiI2--oJIBO5-LoGQ6wXHvbt1sk-eVLU,2224
         | 
| 137 151 | 
             
            claude_mpm/services/agents/deployment/__init__.py,sha256=PhQQ108KP9RoxLLh_8aoPIjmwJau3az_10cEoPDm7DQ,538
         | 
| 138 | 
            -
            claude_mpm/services/agents/deployment/agent_deployment.py,sha256= | 
| 152 | 
            +
            claude_mpm/services/agents/deployment/agent_deployment.py,sha256=ITrSLALasj_vVxSoHkoqGXxrlnYEl7ITQ1rNpf1V05k,94343
         | 
| 139 153 | 
             
            claude_mpm/services/agents/deployment/agent_lifecycle_manager.py,sha256=b7guIDwEiJNRWtaRx1PwusqZX5QCnXqq-tl5AQOFp7Y,50136
         | 
| 140 154 | 
             
            claude_mpm/services/agents/deployment/agent_versioning.py,sha256=y4SiKGKdTn-9_Ht6nGlmKGJW6MLgEHZUy5SR1OPTZZM,1108
         | 
| 141 155 | 
             
            claude_mpm/services/agents/loading/__init__.py,sha256=NN4JGAH7nsoY7qTW-jIBKOJPpLJVcD4P6S2Vmdd7QH8,305
         | 
| @@ -144,7 +158,7 @@ claude_mpm/services/agents/loading/base_agent_manager.py,sha256=y_MKtqReD5h70BpC | |
| 144 158 | 
             
            claude_mpm/services/agents/loading/framework_agent_loader.py,sha256=fyP54zrNxv-Xe8hRMInTnltaMtFgmRuCfMbaArPlkmc,17560
         | 
| 145 159 | 
             
            claude_mpm/services/agents/management/__init__.py,sha256=ZZm0jEdso59S72fw4O8jnU1iGWfDN68nWdXe9APvi8U,233
         | 
| 146 160 | 
             
            claude_mpm/services/agents/management/agent_capabilities_generator.py,sha256=hWG0zV2InmzrDMxSbQzjVBBTzEaxg0bFxl8tmTMJ8qA,6565
         | 
| 147 | 
            -
            claude_mpm/services/agents/management/agent_management_service.py,sha256= | 
| 161 | 
            +
            claude_mpm/services/agents/management/agent_management_service.py,sha256=OKU6dxxR1x53I9eimlJPMUDV9Hbc-Urw5gerCvM1nEk,23053
         | 
| 148 162 | 
             
            claude_mpm/services/agents/memory/__init__.py,sha256=IzY-iU93_v9HBCHZ0UaSYkdLWXobFRLcjdJXd6iAuFY,455
         | 
| 149 163 | 
             
            claude_mpm/services/agents/memory/agent_memory_manager.py,sha256=8JIcNEdmofEiWyVqX3SG5s--hQVAcVRj142YB9asvjU,58846
         | 
| 150 164 | 
             
            claude_mpm/services/agents/memory/agent_persistence_service.py,sha256=B_Vz43zCKWq47zWkoibcia-Qwn2y3gARu7MV5Cpiptc,2893
         | 
| @@ -152,6 +166,7 @@ claude_mpm/services/agents/registry/__init__.py,sha256=_NsxGhhykoj0NecfA4o8Xscrv | |
| 152 166 | 
             
            claude_mpm/services/agents/registry/agent_registry.py,sha256=jb-hIDGAoLWqBauS49N5Iin-nSozspGgUtb-gAROCfc,31570
         | 
| 153 167 | 
             
            claude_mpm/services/agents/registry/deployed_agent_discovery.py,sha256=EFsrutLB3Kxa5TXoQC2aVNx5cMIAaDcTqCBnF1FfrPc,9762
         | 
| 154 168 | 
             
            claude_mpm/services/agents/registry/modification_tracker.py,sha256=efkl652bAHhxUc6keoE2dOxlaQXtDnC3lkmR_jat4u4,34565
         | 
| 169 | 
            +
            claude_mpm/services/framework_claude_md_generator/README.md,sha256=_-ty72t2afPagDVVUEizPkhs4BYkCeqCnZDNPgZAYtY,3511
         | 
| 155 170 | 
             
            claude_mpm/services/framework_claude_md_generator/__init__.py,sha256=OtnwxLiJektfFtsKdkHM1X27rKkFiNd_rcf4843ziKw,7334
         | 
| 156 171 | 
             
            claude_mpm/services/framework_claude_md_generator/content_assembler.py,sha256=DNMVz6Jvy7bxxa8WNL2h-JwrK89bJpuxXEI5xD1i8mY,6570
         | 
| 157 172 | 
             
            claude_mpm/services/framework_claude_md_generator/content_validator.py,sha256=89QSGil9_NL15ci3HsVVQmfg7MZvsJS3i_ELP5yD-gA,4583
         | 
| @@ -159,8 +174,8 @@ claude_mpm/services/framework_claude_md_generator/deployment_manager.py,sha256=G | |
| 159 174 | 
             
            claude_mpm/services/framework_claude_md_generator/section_manager.py,sha256=KbipmnUg7FD3YnVdUj4Ttrm3HMmWrDnjWC6fKX5D3tI,3222
         | 
| 160 175 | 
             
            claude_mpm/services/framework_claude_md_generator/version_manager.py,sha256=VpJMieGEVkkKC6vyhHxKcUjPNzxBuPwD61lTyPJwxXM,4284
         | 
| 161 176 | 
             
            claude_mpm/services/framework_claude_md_generator/section_generators/__init__.py,sha256=HIIW34LgzTJk_ne4qoNxXgYZp3EhEisJR0SjfNjPG7o,3486
         | 
| 162 | 
            -
            claude_mpm/services/framework_claude_md_generator/section_generators/agents.py,sha256= | 
| 163 | 
            -
            claude_mpm/services/framework_claude_md_generator/section_generators/claude_pm_init.py,sha256= | 
| 177 | 
            +
            claude_mpm/services/framework_claude_md_generator/section_generators/agents.py,sha256=b4pTJQKGt4BmqZmFGa8cKlgy03JJekmIZi_rIsCStaE,23201
         | 
| 178 | 
            +
            claude_mpm/services/framework_claude_md_generator/section_generators/claude_pm_init.py,sha256=oZ-QNeF6iAC13T1yCGhD9ROogfoJKPYq2Rn4ld6cgPY,2889
         | 
| 164 179 | 
             
            claude_mpm/services/framework_claude_md_generator/section_generators/core_responsibilities.py,sha256=B52TWCQ2Uic9cOke8FftpzfJQ8MbbOLyn92QN8g83qA,1823
         | 
| 165 180 | 
             
            claude_mpm/services/framework_claude_md_generator/section_generators/delegation_constraints.py,sha256=WGw1cFvopLHK4Xz8l1qqlNDmUMKNdMr1_88DNJ0oKSk,995
         | 
| 166 181 | 
             
            claude_mpm/services/framework_claude_md_generator/section_generators/environment_config.py,sha256=MUoO0jKnxWA1WC3JP-jJCVz2cgCM-EwUPnMN7cmNdBQ,629
         | 
| @@ -178,6 +193,7 @@ claude_mpm/services/memory/router.py,sha256=ECQQ1v0BsMFQ4RXqpKfc9fwAXpzx5Kk0QlmJ | |
| 178 193 | 
             
            claude_mpm/services/memory/cache/__init__.py,sha256=FBff6fkrJWuWbQjQ4MoOxQa6ybRVBeH29hQC2XP0DEU,350
         | 
| 179 194 | 
             
            claude_mpm/services/memory/cache/shared_prompt_cache.py,sha256=bw1FDXM6iMuVfFxx_RNlIFZfiGC10p18Npwk-IGFCJ0,29899
         | 
| 180 195 | 
             
            claude_mpm/services/memory/cache/simple_cache.py,sha256=eVJq7mD4fn-EfRaLgKJxP65rqQrup-AqB-Cf7EFYy58,10480
         | 
| 196 | 
            +
            claude_mpm/services/version_control/VERSION,sha256=MMmeixA-rL5vbW4bVLBsptXzFktPUAlDNKUXrpXKj7o,5
         | 
| 181 197 | 
             
            claude_mpm/services/version_control/__init__.py,sha256=5BFbqFUMtpCyDbMcekRjCQ4jgBAJI50PhfuZ8S5NTjk,1513
         | 
| 182 198 | 
             
            claude_mpm/services/version_control/branch_strategy.py,sha256=xOLeNcu0AtpgIRmNkew-fNvXVcGHRuAe6MqOyyS36HQ,23068
         | 
| 183 199 | 
             
            claude_mpm/services/version_control/conflict_resolution.py,sha256=yWa9fzmkds1U0EBw-LyTZvlj56MpEEsRmryLQg4KDdU,26084
         | 
| @@ -195,9 +211,9 @@ claude_mpm/utils/paths.py,sha256=DlkYrIVvfgyuF9cN01cWuxehK0UUsCfjp6ymrv8XY7A,102 | |
| 195 211 | 
             
            claude_mpm/utils/session_logging.py,sha256=9G0AzB7V0WkhLQlN0ocqbyDv0ifooEsJ5UPXIhA-wt0,3022
         | 
| 196 212 | 
             
            claude_mpm/validation/__init__.py,sha256=bJ19g9lnk7yIjtxzN8XPegp87HTFBzCrGQOpFgRTf3g,155
         | 
| 197 213 | 
             
            claude_mpm/validation/agent_validator.py,sha256=Jy7Oi7GVM7jqFYLVFDQ9pKYXsXH2KEf5uorflIwWGC4,20348
         | 
| 198 | 
            -
            claude_mpm-3.5. | 
| 199 | 
            -
            claude_mpm-3.5. | 
| 200 | 
            -
            claude_mpm-3.5. | 
| 201 | 
            -
            claude_mpm-3.5. | 
| 202 | 
            -
            claude_mpm-3.5. | 
| 203 | 
            -
            claude_mpm-3.5. | 
| 214 | 
            +
            claude_mpm-3.5.6.dist-info/licenses/LICENSE,sha256=cSdDfXjoTVhstrERrqme4zgxAu4GubU22zVEHsiXGxs,1071
         | 
| 215 | 
            +
            claude_mpm-3.5.6.dist-info/METADATA,sha256=DOr2AUi_jx6A_XFlAOMThF_b7XEKvpX3pEVRib3q8UI,9128
         | 
| 216 | 
            +
            claude_mpm-3.5.6.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
         | 
| 217 | 
            +
            claude_mpm-3.5.6.dist-info/entry_points.txt,sha256=3_d7wLrg9sRmQ1SfrFGWoTNL8Wrd6lQb2XVSYbTwRIg,324
         | 
| 218 | 
            +
            claude_mpm-3.5.6.dist-info/top_level.txt,sha256=1nUg3FEaBySgm8t-s54jK5zoPnu3_eY6EP6IOlekyHA,11
         | 
| 219 | 
            +
            claude_mpm-3.5.6.dist-info/RECORD,,
         | 
| 
            File without changes
         |