claude-mpm 3.9.8__py3-none-any.whl → 3.9.9__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- claude_mpm/VERSION +1 -1
- claude_mpm/agents/base_agent.json +1 -1
- claude_mpm/cli/__init__.py +3 -1
- claude_mpm/cli/commands/__init__.py +3 -1
- claude_mpm/cli/commands/cleanup.py +21 -1
- claude_mpm/cli/commands/mcp.py +821 -0
- claude_mpm/cli/parser.py +148 -1
- claude_mpm/config/memory_guardian_config.py +325 -0
- claude_mpm/constants.py +13 -0
- claude_mpm/hooks/claude_hooks/hook_handler.py +76 -19
- claude_mpm/models/state_models.py +433 -0
- claude_mpm/services/communication/__init__.py +2 -2
- claude_mpm/services/communication/socketio.py +18 -16
- claude_mpm/services/infrastructure/__init__.py +4 -1
- claude_mpm/services/infrastructure/logging.py +3 -3
- claude_mpm/services/infrastructure/memory_guardian.py +770 -0
- claude_mpm/services/mcp_gateway/__init__.py +28 -12
- claude_mpm/services/mcp_gateway/main.py +326 -0
- claude_mpm/services/mcp_gateway/registry/__init__.py +6 -3
- claude_mpm/services/mcp_gateway/registry/service_registry.py +397 -0
- claude_mpm/services/mcp_gateway/registry/tool_registry.py +477 -0
- claude_mpm/services/mcp_gateway/server/__init__.py +9 -3
- claude_mpm/services/mcp_gateway/server/mcp_server.py +430 -0
- claude_mpm/services/mcp_gateway/server/mcp_server_simple.py +444 -0
- claude_mpm/services/mcp_gateway/server/stdio_handler.py +373 -0
- claude_mpm/services/mcp_gateway/tools/__init__.py +16 -3
- claude_mpm/services/mcp_gateway/tools/base_adapter.py +497 -0
- claude_mpm/services/mcp_gateway/tools/document_summarizer.py +729 -0
- claude_mpm/services/mcp_gateway/tools/hello_world.py +551 -0
- claude_mpm/utils/file_utils.py +293 -0
- claude_mpm/utils/platform_memory.py +524 -0
- claude_mpm/utils/subprocess_utils.py +305 -0
- {claude_mpm-3.9.8.dist-info → claude_mpm-3.9.9.dist-info}/METADATA +3 -1
- {claude_mpm-3.9.8.dist-info → claude_mpm-3.9.9.dist-info}/RECORD +39 -28
- claude_mpm/agents/templates/.claude-mpm/memories/README.md +0 -36
- claude_mpm/agents/templates/.claude-mpm/memories/engineer_agent.md +0 -39
- claude_mpm/agents/templates/.claude-mpm/memories/qa_agent.md +0 -38
- claude_mpm/agents/templates/.claude-mpm/memories/research_agent.md +0 -39
- claude_mpm/agents/templates/.claude-mpm/memories/version_control_agent.md +0 -38
- /claude_mpm/agents/templates/{research_memory_efficient.json → backup/research_memory_efficient.json} +0 -0
- {claude_mpm-3.9.8.dist-info → claude_mpm-3.9.9.dist-info}/WHEEL +0 -0
- {claude_mpm-3.9.8.dist-info → claude_mpm-3.9.9.dist-info}/entry_points.txt +0 -0
- {claude_mpm-3.9.8.dist-info → claude_mpm-3.9.9.dist-info}/licenses/LICENSE +0 -0
- {claude_mpm-3.9.8.dist-info → claude_mpm-3.9.9.dist-info}/top_level.txt +0 -0
| @@ -0,0 +1,305 @@ | |
| 1 | 
            +
            #!/usr/bin/env python3
         | 
| 2 | 
            +
            """
         | 
| 3 | 
            +
            Subprocess utilities for Claude MPM.
         | 
| 4 | 
            +
             | 
| 5 | 
            +
            This module provides enhanced subprocess execution and management utilities
         | 
| 6 | 
            +
            with proper error handling, timeouts, and process cleanup.
         | 
| 7 | 
            +
            """
         | 
| 8 | 
            +
             | 
| 9 | 
            +
            import asyncio
         | 
| 10 | 
            +
            import os
         | 
| 11 | 
            +
            import signal
         | 
| 12 | 
            +
            import subprocess
         | 
| 13 | 
            +
            import sys
         | 
| 14 | 
            +
            import time
         | 
| 15 | 
            +
            from typing import Dict, List, Optional, Union, Any
         | 
| 16 | 
            +
            import psutil
         | 
| 17 | 
            +
             | 
| 18 | 
            +
             | 
| 19 | 
            +
            class SubprocessError(Exception):
         | 
| 20 | 
            +
                """Unified exception for subprocess errors."""
         | 
| 21 | 
            +
                
         | 
| 22 | 
            +
                def __init__(self, message: str, returncode: Optional[int] = None, 
         | 
| 23 | 
            +
                             stdout: Optional[str] = None, stderr: Optional[str] = None):
         | 
| 24 | 
            +
                    super().__init__(message)
         | 
| 25 | 
            +
                    self.returncode = returncode
         | 
| 26 | 
            +
                    self.stdout = stdout
         | 
| 27 | 
            +
                    self.stderr = stderr
         | 
| 28 | 
            +
             | 
| 29 | 
            +
             | 
| 30 | 
            +
            class SubprocessResult:
         | 
| 31 | 
            +
                """Result object for subprocess execution."""
         | 
| 32 | 
            +
                
         | 
| 33 | 
            +
                def __init__(self, returncode: int, stdout: str = "", stderr: str = ""):
         | 
| 34 | 
            +
                    self.returncode = returncode
         | 
| 35 | 
            +
                    self.stdout = stdout
         | 
| 36 | 
            +
                    self.stderr = stderr
         | 
| 37 | 
            +
                    
         | 
| 38 | 
            +
                @property
         | 
| 39 | 
            +
                def success(self) -> bool:
         | 
| 40 | 
            +
                    """True if the subprocess completed successfully."""
         | 
| 41 | 
            +
                    return self.returncode == 0
         | 
| 42 | 
            +
             | 
| 43 | 
            +
             | 
| 44 | 
            +
            def run_subprocess(
         | 
| 45 | 
            +
                cmd: List[str],
         | 
| 46 | 
            +
                timeout: Optional[float] = None,
         | 
| 47 | 
            +
                capture_output: bool = True,
         | 
| 48 | 
            +
                text: bool = True,
         | 
| 49 | 
            +
                cwd: Optional[str] = None,
         | 
| 50 | 
            +
                env: Optional[Dict[str, str]] = None,
         | 
| 51 | 
            +
                **kwargs
         | 
| 52 | 
            +
            ) -> SubprocessResult:
         | 
| 53 | 
            +
                """
         | 
| 54 | 
            +
                Run a subprocess with enhanced error handling and timeout support.
         | 
| 55 | 
            +
                
         | 
| 56 | 
            +
                Args:
         | 
| 57 | 
            +
                    cmd: Command and arguments to execute
         | 
| 58 | 
            +
                    timeout: Maximum time to wait for completion (seconds)
         | 
| 59 | 
            +
                    capture_output: Whether to capture stdout/stderr
         | 
| 60 | 
            +
                    text: Whether to return text (True) or bytes (False)
         | 
| 61 | 
            +
                    cwd: Working directory for the subprocess
         | 
| 62 | 
            +
                    env: Environment variables for the subprocess
         | 
| 63 | 
            +
                    **kwargs: Additional arguments passed to subprocess.run
         | 
| 64 | 
            +
                    
         | 
| 65 | 
            +
                Returns:
         | 
| 66 | 
            +
                    SubprocessResult object with returncode, stdout, stderr
         | 
| 67 | 
            +
                    
         | 
| 68 | 
            +
                Raises:
         | 
| 69 | 
            +
                    SubprocessError: If the subprocess fails or times out
         | 
| 70 | 
            +
                """
         | 
| 71 | 
            +
                try:
         | 
| 72 | 
            +
                    result = subprocess.run(
         | 
| 73 | 
            +
                        cmd,
         | 
| 74 | 
            +
                        timeout=timeout,
         | 
| 75 | 
            +
                        capture_output=capture_output,
         | 
| 76 | 
            +
                        text=text,
         | 
| 77 | 
            +
                        cwd=cwd,
         | 
| 78 | 
            +
                        env=env,
         | 
| 79 | 
            +
                        **kwargs
         | 
| 80 | 
            +
                    )
         | 
| 81 | 
            +
                    
         | 
| 82 | 
            +
                    return SubprocessResult(
         | 
| 83 | 
            +
                        returncode=result.returncode,
         | 
| 84 | 
            +
                        stdout=result.stdout if capture_output else "",
         | 
| 85 | 
            +
                        stderr=result.stderr if capture_output else ""
         | 
| 86 | 
            +
                    )
         | 
| 87 | 
            +
                    
         | 
| 88 | 
            +
                except subprocess.TimeoutExpired as e:
         | 
| 89 | 
            +
                    raise SubprocessError(
         | 
| 90 | 
            +
                        f"Command timed out after {timeout}s: {' '.join(cmd)}",
         | 
| 91 | 
            +
                        returncode=None,
         | 
| 92 | 
            +
                        stdout=e.stdout.decode() if e.stdout else "",
         | 
| 93 | 
            +
                        stderr=e.stderr.decode() if e.stderr else ""
         | 
| 94 | 
            +
                    )
         | 
| 95 | 
            +
                except subprocess.CalledProcessError as e:
         | 
| 96 | 
            +
                    raise SubprocessError(
         | 
| 97 | 
            +
                        f"Command failed with return code {e.returncode}: {' '.join(cmd)}",
         | 
| 98 | 
            +
                        returncode=e.returncode,
         | 
| 99 | 
            +
                        stdout=e.stdout if e.stdout else "",
         | 
| 100 | 
            +
                        stderr=e.stderr if e.stderr else ""
         | 
| 101 | 
            +
                    )
         | 
| 102 | 
            +
                except Exception as e:
         | 
| 103 | 
            +
                    raise SubprocessError(f"Subprocess execution failed: {e}")
         | 
| 104 | 
            +
             | 
| 105 | 
            +
             | 
| 106 | 
            +
            async def run_subprocess_async(
         | 
| 107 | 
            +
                cmd: List[str],
         | 
| 108 | 
            +
                timeout: Optional[float] = None,
         | 
| 109 | 
            +
                capture_output: bool = True,
         | 
| 110 | 
            +
                cwd: Optional[str] = None,
         | 
| 111 | 
            +
                env: Optional[Dict[str, str]] = None,
         | 
| 112 | 
            +
                **kwargs
         | 
| 113 | 
            +
            ) -> SubprocessResult:
         | 
| 114 | 
            +
                """
         | 
| 115 | 
            +
                Run a subprocess asynchronously with timeout support.
         | 
| 116 | 
            +
                
         | 
| 117 | 
            +
                Args:
         | 
| 118 | 
            +
                    cmd: Command and arguments to execute
         | 
| 119 | 
            +
                    timeout: Maximum time to wait for completion (seconds)
         | 
| 120 | 
            +
                    capture_output: Whether to capture stdout/stderr
         | 
| 121 | 
            +
                    cwd: Working directory for the subprocess
         | 
| 122 | 
            +
                    env: Environment variables for the subprocess
         | 
| 123 | 
            +
                    **kwargs: Additional arguments passed to asyncio.create_subprocess_exec
         | 
| 124 | 
            +
                    
         | 
| 125 | 
            +
                Returns:
         | 
| 126 | 
            +
                    SubprocessResult object with returncode, stdout, stderr
         | 
| 127 | 
            +
                    
         | 
| 128 | 
            +
                Raises:
         | 
| 129 | 
            +
                    SubprocessError: If the subprocess fails or times out
         | 
| 130 | 
            +
                """
         | 
| 131 | 
            +
                try:
         | 
| 132 | 
            +
                    if capture_output:
         | 
| 133 | 
            +
                        stdout = asyncio.subprocess.PIPE
         | 
| 134 | 
            +
                        stderr = asyncio.subprocess.PIPE
         | 
| 135 | 
            +
                    else:
         | 
| 136 | 
            +
                        stdout = None
         | 
| 137 | 
            +
                        stderr = None
         | 
| 138 | 
            +
                        
         | 
| 139 | 
            +
                    process = await asyncio.create_subprocess_exec(
         | 
| 140 | 
            +
                        *cmd,
         | 
| 141 | 
            +
                        stdout=stdout,
         | 
| 142 | 
            +
                        stderr=stderr,
         | 
| 143 | 
            +
                        cwd=cwd,
         | 
| 144 | 
            +
                        env=env,
         | 
| 145 | 
            +
                        **kwargs
         | 
| 146 | 
            +
                    )
         | 
| 147 | 
            +
                    
         | 
| 148 | 
            +
                    try:
         | 
| 149 | 
            +
                        stdout_data, stderr_data = await asyncio.wait_for(
         | 
| 150 | 
            +
                            process.communicate(),
         | 
| 151 | 
            +
                            timeout=timeout
         | 
| 152 | 
            +
                        )
         | 
| 153 | 
            +
                    except asyncio.TimeoutError:
         | 
| 154 | 
            +
                        process.kill()
         | 
| 155 | 
            +
                        await process.wait()
         | 
| 156 | 
            +
                        raise SubprocessError(
         | 
| 157 | 
            +
                            f"Command timed out after {timeout}s: {' '.join(cmd)}",
         | 
| 158 | 
            +
                            returncode=None
         | 
| 159 | 
            +
                        )
         | 
| 160 | 
            +
                        
         | 
| 161 | 
            +
                    return SubprocessResult(
         | 
| 162 | 
            +
                        returncode=process.returncode,
         | 
| 163 | 
            +
                        stdout=stdout_data.decode() if stdout_data else "",
         | 
| 164 | 
            +
                        stderr=stderr_data.decode() if stderr_data else ""
         | 
| 165 | 
            +
                    )
         | 
| 166 | 
            +
                    
         | 
| 167 | 
            +
                except Exception as e:
         | 
| 168 | 
            +
                    if not isinstance(e, SubprocessError):
         | 
| 169 | 
            +
                        raise SubprocessError(f"Async subprocess execution failed: {e}")
         | 
| 170 | 
            +
                    raise
         | 
| 171 | 
            +
             | 
| 172 | 
            +
             | 
| 173 | 
            +
            def terminate_process_tree(pid: int, timeout: float = 5.0) -> int:
         | 
| 174 | 
            +
                """
         | 
| 175 | 
            +
                Terminate a process and all its children.
         | 
| 176 | 
            +
                
         | 
| 177 | 
            +
                Args:
         | 
| 178 | 
            +
                    pid: Process ID to terminate
         | 
| 179 | 
            +
                    timeout: Time to wait for graceful termination before force killing
         | 
| 180 | 
            +
                    
         | 
| 181 | 
            +
                Returns:
         | 
| 182 | 
            +
                    Number of processes terminated
         | 
| 183 | 
            +
                    
         | 
| 184 | 
            +
                Raises:
         | 
| 185 | 
            +
                    SubprocessError: If the process cannot be terminated
         | 
| 186 | 
            +
                """
         | 
| 187 | 
            +
                try:
         | 
| 188 | 
            +
                    parent = psutil.Process(pid)
         | 
| 189 | 
            +
                except psutil.NoSuchProcess:
         | 
| 190 | 
            +
                    return 0
         | 
| 191 | 
            +
                    
         | 
| 192 | 
            +
                # Get all child processes recursively
         | 
| 193 | 
            +
                children = parent.children(recursive=True)
         | 
| 194 | 
            +
                processes = [parent] + children
         | 
| 195 | 
            +
                
         | 
| 196 | 
            +
                terminated_count = 0
         | 
| 197 | 
            +
                
         | 
| 198 | 
            +
                # First, try graceful termination
         | 
| 199 | 
            +
                for process in processes:
         | 
| 200 | 
            +
                    try:
         | 
| 201 | 
            +
                        process.terminate()
         | 
| 202 | 
            +
                    except psutil.NoSuchProcess:
         | 
| 203 | 
            +
                        pass
         | 
| 204 | 
            +
                        
         | 
| 205 | 
            +
                # Wait for processes to terminate gracefully
         | 
| 206 | 
            +
                gone, alive = psutil.wait_procs(processes, timeout=timeout)
         | 
| 207 | 
            +
                terminated_count += len(gone)
         | 
| 208 | 
            +
                
         | 
| 209 | 
            +
                # Force kill any remaining processes
         | 
| 210 | 
            +
                for process in alive:
         | 
| 211 | 
            +
                    try:
         | 
| 212 | 
            +
                        process.kill()
         | 
| 213 | 
            +
                        terminated_count += 1
         | 
| 214 | 
            +
                    except psutil.NoSuchProcess:
         | 
| 215 | 
            +
                        pass
         | 
| 216 | 
            +
                        
         | 
| 217 | 
            +
                return terminated_count
         | 
| 218 | 
            +
             | 
| 219 | 
            +
             | 
| 220 | 
            +
            def get_process_info(pid: Optional[int] = None) -> Dict[str, Any]:
         | 
| 221 | 
            +
                """
         | 
| 222 | 
            +
                Get information about a process.
         | 
| 223 | 
            +
                
         | 
| 224 | 
            +
                Args:
         | 
| 225 | 
            +
                    pid: Process ID (defaults to current process)
         | 
| 226 | 
            +
                    
         | 
| 227 | 
            +
                Returns:
         | 
| 228 | 
            +
                    Dictionary with process information
         | 
| 229 | 
            +
                """
         | 
| 230 | 
            +
                try:
         | 
| 231 | 
            +
                    process = psutil.Process(pid)
         | 
| 232 | 
            +
                    return {
         | 
| 233 | 
            +
                        "pid": process.pid,
         | 
| 234 | 
            +
                        "name": process.name(),
         | 
| 235 | 
            +
                        "status": process.status(),
         | 
| 236 | 
            +
                        "create_time": process.create_time(),
         | 
| 237 | 
            +
                        "cpu_percent": process.cpu_percent(),
         | 
| 238 | 
            +
                        "memory_info": process.memory_info()._asdict(),
         | 
| 239 | 
            +
                        "cmdline": process.cmdline(),
         | 
| 240 | 
            +
                        "cwd": process.cwd() if hasattr(process, 'cwd') else None,
         | 
| 241 | 
            +
                        "num_threads": process.num_threads(),
         | 
| 242 | 
            +
                        "children": [child.pid for child in process.children()]
         | 
| 243 | 
            +
                    }
         | 
| 244 | 
            +
                except psutil.NoSuchProcess:
         | 
| 245 | 
            +
                    return {"error": f"Process {pid} not found"}
         | 
| 246 | 
            +
                except Exception as e:
         | 
| 247 | 
            +
                    return {"error": str(e)}
         | 
| 248 | 
            +
             | 
| 249 | 
            +
             | 
| 250 | 
            +
            def monitor_process_resources(pid: int) -> Optional[Dict[str, Any]]:
         | 
| 251 | 
            +
                """
         | 
| 252 | 
            +
                Monitor resource usage of a process.
         | 
| 253 | 
            +
                
         | 
| 254 | 
            +
                Args:
         | 
| 255 | 
            +
                    pid: Process ID to monitor
         | 
| 256 | 
            +
                    
         | 
| 257 | 
            +
                Returns:
         | 
| 258 | 
            +
                    Dictionary with resource information or None if process not found
         | 
| 259 | 
            +
                """
         | 
| 260 | 
            +
                try:
         | 
| 261 | 
            +
                    process = psutil.Process(pid)
         | 
| 262 | 
            +
                    memory_info = process.memory_info()
         | 
| 263 | 
            +
                    
         | 
| 264 | 
            +
                    return {
         | 
| 265 | 
            +
                        "pid": pid,
         | 
| 266 | 
            +
                        "cpu_percent": process.cpu_percent(),
         | 
| 267 | 
            +
                        "memory_mb": memory_info.rss / 1024 / 1024,  # Convert to MB
         | 
| 268 | 
            +
                        "memory_percent": process.memory_percent(),
         | 
| 269 | 
            +
                        "num_threads": process.num_threads(),
         | 
| 270 | 
            +
                        "status": process.status(),
         | 
| 271 | 
            +
                        "create_time": process.create_time()
         | 
| 272 | 
            +
                    }
         | 
| 273 | 
            +
                except psutil.NoSuchProcess:
         | 
| 274 | 
            +
                    return None
         | 
| 275 | 
            +
                except Exception:
         | 
| 276 | 
            +
                    return None
         | 
| 277 | 
            +
             | 
| 278 | 
            +
             | 
| 279 | 
            +
            def cleanup_orphaned_processes(pattern: str, max_age_hours: float = 1.0) -> int:
         | 
| 280 | 
            +
                """
         | 
| 281 | 
            +
                Clean up orphaned processes matching a pattern.
         | 
| 282 | 
            +
                
         | 
| 283 | 
            +
                Args:
         | 
| 284 | 
            +
                    pattern: String pattern to match in process command line
         | 
| 285 | 
            +
                    max_age_hours: Maximum age in hours before considering a process orphaned
         | 
| 286 | 
            +
                    
         | 
| 287 | 
            +
                Returns:
         | 
| 288 | 
            +
                    Number of processes cleaned up
         | 
| 289 | 
            +
                """
         | 
| 290 | 
            +
                current_time = time.time()
         | 
| 291 | 
            +
                cleanup_count = 0
         | 
| 292 | 
            +
                
         | 
| 293 | 
            +
                for process in psutil.process_iter(['pid', 'name', 'cmdline', 'create_time']):
         | 
| 294 | 
            +
                    try:
         | 
| 295 | 
            +
                        cmdline = ' '.join(process.info['cmdline'] or [])
         | 
| 296 | 
            +
                        if pattern in cmdline:
         | 
| 297 | 
            +
                            # Check if process is old enough to be considered orphaned
         | 
| 298 | 
            +
                            age_hours = (current_time - process.info['create_time']) / 3600
         | 
| 299 | 
            +
                            if age_hours > max_age_hours:
         | 
| 300 | 
            +
                                process.terminate()
         | 
| 301 | 
            +
                                cleanup_count += 1
         | 
| 302 | 
            +
                    except (psutil.NoSuchProcess, psutil.AccessDenied):
         | 
| 303 | 
            +
                        continue
         | 
| 304 | 
            +
                        
         | 
| 305 | 
            +
                return cleanup_count
         | 
| @@ -1,6 +1,6 @@ | |
| 1 1 | 
             
            Metadata-Version: 2.4
         | 
| 2 2 | 
             
            Name: claude-mpm
         | 
| 3 | 
            -
            Version: 3.9. | 
| 3 | 
            +
            Version: 3.9.9
         | 
| 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
         | 
| @@ -181,6 +181,8 @@ Comprehensive API documentation is available at [docs/api/](docs/api/) - build w | |
| 181 181 |  | 
| 182 182 | 
             
            **Major Architecture Refactoring (TSK-0053)**: Complete service-oriented redesign with 50-80% performance improvements, enhanced security, and interface-based design.
         | 
| 183 183 |  | 
| 184 | 
            +
            **Process Management Improvements**: Enhanced hook system reliability with automatic process cleanup, timeout protection, and orphan process monitoring to prevent resource leaks.
         | 
| 185 | 
            +
             | 
| 184 186 | 
             
            See [CHANGELOG.md](CHANGELOG.md) for full history and [docs/MIGRATION.md](docs/MIGRATION.md) for upgrade instructions.
         | 
| 185 187 |  | 
| 186 188 | 
             
            ## Development
         | 
| @@ -1,7 +1,7 @@ | |
| 1 | 
            -
            claude_mpm/VERSION,sha256= | 
| 1 | 
            +
            claude_mpm/VERSION,sha256=AZyavayorqiuMCFTau7LwYJ4R-VH84F2LR8vijsz9DM,6
         | 
| 2 2 | 
             
            claude_mpm/__init__.py,sha256=_adJRYaqKpyQFHGdsXrUgODkLmAXt4NRTj8khx4miAY,1512
         | 
| 3 3 | 
             
            claude_mpm/__main__.py,sha256=8IcM9tEbTqSN_er04eKTPX3AGo6qzRiTnPI7KfIf7rw,641
         | 
| 4 | 
            -
            claude_mpm/constants.py,sha256= | 
| 4 | 
            +
            claude_mpm/constants.py,sha256=OL5pmvmOeJHnORsWBNWk-dCAmG8-Stk7ntfURL5HXfo,5510
         | 
| 5 5 | 
             
            claude_mpm/deployment_paths.py,sha256=JO7-fhhp_AkVB7ZssggHDBbee-r2sokpkqjoqnQLTmM,9073
         | 
| 6 6 | 
             
            claude_mpm/init.py,sha256=hK_ROp6FsgTjpi-VJ_Z4FJICNEXwchh6F2KOqms-kfI,14938
         | 
| 7 7 | 
             
            claude_mpm/ticket_wrapper.py,sha256=bWjLReYyuHSBguuiRm1d52rHYNHqrPJAOLUbMt4CnuM,836
         | 
| @@ -15,7 +15,7 @@ claude_mpm/agents/agent_loader.py,sha256=DgY0CMShaxdANV5GYT1Bd-lYizRKz89KpuR89VR | |
| 15 15 | 
             
            claude_mpm/agents/agent_loader_integration.py,sha256=h07Kmk4D75jmHxz5BucP6oQ5VhqVgQ35Sn5w3hcZNYI,7474
         | 
| 16 16 | 
             
            claude_mpm/agents/agents_metadata.py,sha256=C8GzqXB-AdWUzz2gpR-Dz3V2phUTbi1TRg1Xmxtdgxc,5853
         | 
| 17 17 | 
             
            claude_mpm/agents/async_agent_loader.py,sha256=jHW3N13au-TlFSyo1_NhI8aExCt8QNumoWlrdtLp6V4,15145
         | 
| 18 | 
            -
            claude_mpm/agents/base_agent.json,sha256= | 
| 18 | 
            +
            claude_mpm/agents/base_agent.json,sha256=uzNGCmojfh8Xr5MnahvpaIdX1rx94UOzgiN9Au5o5u4,5406
         | 
| 19 19 | 
             
            claude_mpm/agents/base_agent_loader.py,sha256=Ur2pcYQXInS_z8MAD3154rvPn-zEpD2fx66iTSRDtY4,19015
         | 
| 20 20 | 
             
            claude_mpm/agents/frontmatter_validator.py,sha256=OR6DWgGxV7b6A6WPAM9ikkDqCJitmp3UgYC45TkB5ZU,22630
         | 
| 21 21 | 
             
            claude_mpm/agents/system_agent_config.py,sha256=Lke4FFjU0Vq3LLo4O7KvtHxadP7agAwC-ljCXK40h_A,23526
         | 
| @@ -30,17 +30,11 @@ claude_mpm/agents/templates/ops.json,sha256=pXDc2RUQVv5qqDtZ9LGHXYFoccNkH5mBYIYH | |
| 30 30 | 
             
            claude_mpm/agents/templates/project_organizer.json,sha256=d1VKgiT0t7GjUBp88kgqbW6A4txgHrFRYPNvrDYkJ80,17161
         | 
| 31 31 | 
             
            claude_mpm/agents/templates/qa.json,sha256=ObztCsMr9haahOaHvaLDRHYj1TZwRxECuzluKscUb_M,10807
         | 
| 32 32 | 
             
            claude_mpm/agents/templates/research.json,sha256=WlPnKlojeiCBZ4H75nWexLl_dHU5cSORIqLCDp4tCMM,8419
         | 
| 33 | 
            -
            claude_mpm/agents/templates/research_memory_efficient.json,sha256=WlPnKlojeiCBZ4H75nWexLl_dHU5cSORIqLCDp4tCMM,8419
         | 
| 34 33 | 
             
            claude_mpm/agents/templates/security.json,sha256=KAJOIZeYUPbnC83S2q7ufwdmpS1xrEwWW6H9bvSNVdo,12349
         | 
| 35 34 | 
             
            claude_mpm/agents/templates/ticketing.json,sha256=H4-RJHATbDPv07iK_Heff8GdYZRf3d6uIL9_L_KDKwM,33920
         | 
| 36 35 | 
             
            claude_mpm/agents/templates/version_control.json,sha256=yaRwaFA2JjMzCfGki2RIylKytjiVcn-lJKJ3jzTbuyY,11692
         | 
| 37 36 | 
             
            claude_mpm/agents/templates/web_qa.json,sha256=4enHHY0KonWE7c2zS_P7JPoOG1foarMtI4CzUpZp49k,17634
         | 
| 38 37 | 
             
            claude_mpm/agents/templates/web_ui.json,sha256=M4ILRYG_EhIilUcu93XVlO51BiVh72M4p7XvUbTqkcs,22752
         | 
| 39 | 
            -
            claude_mpm/agents/templates/.claude-mpm/memories/README.md,sha256=gDuLkzgcELaaoEB5Po70F0qabTu11vBi1PnUrYCK3fw,1098
         | 
| 40 | 
            -
            claude_mpm/agents/templates/.claude-mpm/memories/engineer_agent.md,sha256=oX-L8D2oyS-NAoe5UNVTbfmLWYTpp1gYq6dKAm6KxLI,1150
         | 
| 41 | 
            -
            claude_mpm/agents/templates/.claude-mpm/memories/qa_agent.md,sha256=3GOmBq3t3y1-mvWC7_lJ4ltsujJ14wCZCSzEVWCIrz8,1065
         | 
| 42 | 
            -
            claude_mpm/agents/templates/.claude-mpm/memories/research_agent.md,sha256=dPeQQlV0Rb0-hw4hjca71rzT78PkL3I6YHUHF0aw-XQ,1150
         | 
| 43 | 
            -
            claude_mpm/agents/templates/.claude-mpm/memories/version_control_agent.md,sha256=ghepeG5Wneo2Q5kWI0mu2oWxnVVzoYr0YEBFzqOiCd0,1091
         | 
| 44 38 | 
             
            claude_mpm/agents/templates/backup/data_engineer_agent_20250726_234551.json,sha256=lLso4RHXVTQmX4A1XwF84kT59zZDblPO1xCgBj4S4x8,5060
         | 
| 45 39 | 
             
            claude_mpm/agents/templates/backup/documentation_agent_20250726_234551.json,sha256=snfJW2yW9aMv9ldCSIWW7zwnyoQRx5u7xLMkNlfus9I,2258
         | 
| 46 40 | 
             
            claude_mpm/agents/templates/backup/engineer_agent_20250726_234551.json,sha256=21o8TGCM9TO6eocSV9Ev5MmCq-xYwwCqMU7KQESaY2Q,8479
         | 
| @@ -48,19 +42,21 @@ claude_mpm/agents/templates/backup/ops_agent_20250726_234551.json,sha256=y-unQij | |
| 48 42 | 
             
            claude_mpm/agents/templates/backup/qa_agent_20250726_234551.json,sha256=_FHWnUeh151rgWX_xUgXsfGrJz7Bs3wno2lXU0nTwAo,2157
         | 
| 49 43 | 
             
            claude_mpm/agents/templates/backup/research_agent_2025011_234551.json,sha256=pk2Tg0GVSPEkPEnMw5Iax5QUFY8XY7uF1uPG6eHBe14,12336
         | 
| 50 44 | 
             
            claude_mpm/agents/templates/backup/research_agent_20250726_234551.json,sha256=o4n_sqSbjnsFRELB2q501vgwm-o2tQNLJLYvnVP9LWU,5629
         | 
| 45 | 
            +
            claude_mpm/agents/templates/backup/research_memory_efficient.json,sha256=WlPnKlojeiCBZ4H75nWexLl_dHU5cSORIqLCDp4tCMM,8419
         | 
| 51 46 | 
             
            claude_mpm/agents/templates/backup/security_agent_20250726_234551.json,sha256=l5YuD-27CxKSOsRLv0bDY_tCZyds0yGbeizLb8paeFY,2322
         | 
| 52 47 | 
             
            claude_mpm/agents/templates/backup/version_control_agent_20250726_234551.json,sha256=too38RPTLJ9HutCMn0nfmEdCj2me241dx5tUYDFtu94,2143
         | 
| 53 | 
            -
            claude_mpm/cli/__init__.py,sha256= | 
| 48 | 
            +
            claude_mpm/cli/__init__.py,sha256=N6VLSwB8ogCbv4gDGcX2XbVLKo2usdp1C4Tm3hGEaSI,7119
         | 
| 54 49 | 
             
            claude_mpm/cli/__main__.py,sha256=vShalycGU13i1-OOixEb_bjl8da4_FolrKdvoiZB-64,769
         | 
| 55 | 
            -
            claude_mpm/cli/parser.py,sha256= | 
| 50 | 
            +
            claude_mpm/cli/parser.py,sha256=Z1LG3-RvnHiEvlIWC-9fLz_Q7JU5R88lrPStIiRMJxA,35081
         | 
| 56 51 | 
             
            claude_mpm/cli/ticket_cli.py,sha256=Jftgan7t7ZGNWo9zuZoPcw5zItCrVpBjPSOWz3FuIXE,919
         | 
| 57 52 | 
             
            claude_mpm/cli/utils.py,sha256=qNIbQcA6iE46lsve-GyoIw6eyd9ksHZz3tQA4bSmtt8,6325
         | 
| 58 | 
            -
            claude_mpm/cli/commands/__init__.py,sha256= | 
| 53 | 
            +
            claude_mpm/cli/commands/__init__.py,sha256=XzHpYgA2RIVmDeYJ2Rx3YWzSc-sbyYTzO8QKbNjbGv4,775
         | 
| 59 54 | 
             
            claude_mpm/cli/commands/agents.py,sha256=E8Nyn2NyZqpHmQiK9t7-r1AfcCZFKLFMsKuo6Ed5T08,33831
         | 
| 60 55 | 
             
            claude_mpm/cli/commands/aggregate.py,sha256=rFFIYlOosGnw_DvTuWKw_6sxJeYag3RdACPSz0RHZyE,14869
         | 
| 61 | 
            -
            claude_mpm/cli/commands/cleanup.py,sha256= | 
| 56 | 
            +
            claude_mpm/cli/commands/cleanup.py,sha256=wdaL6Mtv3030QQbwAMm3hYv10koyw7hsNlj48GjYOHs,15076
         | 
| 62 57 | 
             
            claude_mpm/cli/commands/config.py,sha256=50LzTVlvR1LbeW25i-oSx4D6BZGa48DXuLLGXKhejyk,9919
         | 
| 63 58 | 
             
            claude_mpm/cli/commands/info.py,sha256=ETL6jC08OTQVTPjs219Y0m3FzfKOUlI0-yI81AI8FXY,2990
         | 
| 59 | 
            +
            claude_mpm/cli/commands/mcp.py,sha256=C96QiWt4r3CX_9cnBavJl0CeaNDuqQXX9CKwSL8LUgg,27291
         | 
| 64 60 | 
             
            claude_mpm/cli/commands/memory.py,sha256=ymw4EatEKHfvvMHSy6dr4-x9OB7e1nZdJS0EP0f5paI,37350
         | 
| 65 61 | 
             
            claude_mpm/cli/commands/monitor.py,sha256=80_tmSdfn_2cYpzxxPu9GnvFW0eixlSJ4wCqbn8VSCM,12407
         | 
| 66 62 | 
             
            claude_mpm/cli/commands/run.py,sha256=cn-IcH2S4ss0-NRmyu7R2n0qzk7KIUoRhJXd3h5G7g4,43550
         | 
| @@ -71,6 +67,7 @@ claude_mpm/cli_module/commands.py,sha256=CBNfO-bXrZ0spjeW_7-swprEq5V4PQSc0qhl9SL | |
| 71 67 | 
             
            claude_mpm/cli_module/migration_example.py,sha256=C-_GbsW8dGzutnNeRLLld74ibDLyAOQx0stdpYZS0hs,6137
         | 
| 72 68 | 
             
            claude_mpm/config/__init__.py,sha256=KTJkOHVtC1t6goMkj2xaQWZKZfokEHNw0wxPE48bl1g,828
         | 
| 73 69 | 
             
            claude_mpm/config/agent_config.py,sha256=QS-25LSiNz4uOocjIM_FX_SGoRQHJOfkBZCKlz09K5k,13830
         | 
| 70 | 
            +
            claude_mpm/config/memory_guardian_config.py,sha256=j4b73FJUEcKXARZnpF0Wn18N8T8KEQZSka9KprgrdM4,13243
         | 
| 74 71 | 
             
            claude_mpm/config/paths.py,sha256=MznUhL7kvpOhwqtNdOavEE1JvUauvfIN_8PUXl8MytU,12553
         | 
| 75 72 | 
             
            claude_mpm/config/socketio_config.py,sha256=rf5XKtdAKeypwZZPF8r6uSHnJHVXeMmX1YiYQmzUOZo,9727
         | 
| 76 73 | 
             
            claude_mpm/core/__init__.py,sha256=5Hdb4fLdMEqXdOeBJB0zFGJx8CxtaSRYIiD-foiz3yQ,874
         | 
| @@ -137,12 +134,13 @@ claude_mpm/hooks/memory_integration_hook.py,sha256=z0I5R4rsmLx3mzYf7QLeMTYbRShag | |
| 137 134 | 
             
            claude_mpm/hooks/tool_call_interceptor.py,sha256=08_Odgm6Sg1zBJhGjwzVa03AReeBPZHTjndyjEO99cY,7629
         | 
| 138 135 | 
             
            claude_mpm/hooks/validation_hooks.py,sha256=7TU2N4SzCm2nwpsR0xiNKsHQNsWODnOVAmK9jHq1QqM,6582
         | 
| 139 136 | 
             
            claude_mpm/hooks/claude_hooks/__init__.py,sha256=bMUwt2RzDGAcEbtDMA7vWS1uJsauOY0OixIe4pHwgQ0,129
         | 
| 140 | 
            -
            claude_mpm/hooks/claude_hooks/hook_handler.py,sha256= | 
| 137 | 
            +
            claude_mpm/hooks/claude_hooks/hook_handler.py,sha256=LrAe0fcrfWYac3a6lm22SfwDHQeMG3-M50fC-1lWgvY,81736
         | 
| 141 138 | 
             
            claude_mpm/hooks/claude_hooks/hook_handler_fixed.py,sha256=hYE5Tc4RaaK0kLmFNLVXvDhiuTLA40Gt3hmhCQUO5UA,15626
         | 
| 142 139 | 
             
            claude_mpm/hooks/claude_hooks/hook_wrapper.sh,sha256=JBbedWNs1EHaUsAkmqfPv_tWxV_DcRP707hma74oHU0,2370
         | 
| 143 140 | 
             
            claude_mpm/models/__init__.py,sha256=vy2NLX2KT9QeH76SjCYh9dOYKPLRgxGrnwkQFAg08gc,465
         | 
| 144 141 | 
             
            claude_mpm/models/agent_definition.py,sha256=y9XQOED_maOyiYKhNB8H8MfJJMBN0vIYPS_wCXnRJmA,6647
         | 
| 145 142 | 
             
            claude_mpm/models/agent_session.py,sha256=cBl71q33TIBX8S6U1w2UnKOjEWyypFB04s0BCyKv0iQ,20174
         | 
| 143 | 
            +
            claude_mpm/models/state_models.py,sha256=3osnbGKTUe0gX6ogMUGwF6jNzlZyIYfZT8xbcRKk21E,14787
         | 
| 146 144 | 
             
            claude_mpm/scripts/__init__.py,sha256=zKYLZfT0P5z7C7r1YrhsTDnnyFXY-2awxhLVPYx68ek,552
         | 
| 147 145 | 
             
            claude_mpm/scripts/socketio_daemon.py,sha256=93jzq-h5GQRK-xYpLaovaqNAXtwR_ZqYjmEMmFn0xE8,9741
         | 
| 148 146 | 
             
            claude_mpm/scripts/start_activity_logging.py,sha256=9xTu6Kd9lmCx17vMmoAGRXegoaZIVqLzLJoXQDeZ9Yw,2917
         | 
| @@ -189,8 +187,8 @@ claude_mpm/services/agents/registry/__init__.py,sha256=_NsxGhhykoj0NecfA4o8Xscrv | |
| 189 187 | 
             
            claude_mpm/services/agents/registry/agent_registry.py,sha256=jb-hIDGAoLWqBauS49N5Iin-nSozspGgUtb-gAROCfc,31570
         | 
| 190 188 | 
             
            claude_mpm/services/agents/registry/deployed_agent_discovery.py,sha256=EFsrutLB3Kxa5TXoQC2aVNx5cMIAaDcTqCBnF1FfrPc,9762
         | 
| 191 189 | 
             
            claude_mpm/services/agents/registry/modification_tracker.py,sha256=efkl652bAHhxUc6keoE2dOxlaQXtDnC3lkmR_jat4u4,34565
         | 
| 192 | 
            -
            claude_mpm/services/communication/__init__.py,sha256= | 
| 193 | 
            -
            claude_mpm/services/communication/socketio.py,sha256= | 
| 190 | 
            +
            claude_mpm/services/communication/__init__.py,sha256=B4q9qUsRpjWglmZ57wO0ynIg02xTmgo7n3cuW73rUMY,558
         | 
| 191 | 
            +
            claude_mpm/services/communication/socketio.py,sha256=sbNCo7wi7exjyWzakmUQohhjGapJv2rCdH49mZU1dfo,90551
         | 
| 194 192 | 
             
            claude_mpm/services/communication/websocket.py,sha256=WAfCm5AzWo2sNjzJGWOhyvJv3ah-KiGAk7-rgl9V7FU,18344
         | 
| 195 193 | 
             
            claude_mpm/services/core/__init__.py,sha256=mWqf6wfzspDgrue_ktLkK12LyxNrJJCfMJP72TpQVoc,2420
         | 
| 196 194 | 
             
            claude_mpm/services/core/base.py,sha256=mgv9p-hyIh6_3PIYvNBzEvOoKPd-9E04JlzKP2L1khc,7570
         | 
| @@ -214,10 +212,12 @@ claude_mpm/services/framework_claude_md_generator/section_generators/role_design | |
| 214 212 | 
             
            claude_mpm/services/framework_claude_md_generator/section_generators/subprocess_validation.py,sha256=eqj2nNXtOZ8KkMyINpkU-JLDfXHY81MpKhf_qmnZdUc,4117
         | 
| 215 213 | 
             
            claude_mpm/services/framework_claude_md_generator/section_generators/todo_task_tools.py,sha256=xTm2_K1iSizg2E7NnP7vXS3r3oiMmv5cdGPt9C5XE8E,5767
         | 
| 216 214 | 
             
            claude_mpm/services/framework_claude_md_generator/section_generators/troubleshooting.py,sha256=_wYqXRj6z48bJjX7zb_7Zacx5G9LXNDZpsUxvBe27DE,1888
         | 
| 217 | 
            -
            claude_mpm/services/infrastructure/__init__.py,sha256= | 
| 218 | 
            -
            claude_mpm/services/infrastructure/logging.py,sha256= | 
| 215 | 
            +
            claude_mpm/services/infrastructure/__init__.py,sha256=1e900yFJ6MSjbmc7XH3d_Dn8aHdn2g5cvEcSFyupHLQ,662
         | 
| 216 | 
            +
            claude_mpm/services/infrastructure/logging.py,sha256=7gzjWZI8-GFXAjnRimx06gDqhaWy90l3DhixZs3jP9Q,6696
         | 
| 217 | 
            +
            claude_mpm/services/infrastructure/memory_guardian.py,sha256=9NZgSE7F46epkFcp0Z6ql17Yw8gRbXTqmjxoRood8mI,27724
         | 
| 219 218 | 
             
            claude_mpm/services/infrastructure/monitoring.py,sha256=OPyT976wENCMFzid88ovG5HLqCo71evYqTVn5lsJ4SU,33882
         | 
| 220 | 
            -
            claude_mpm/services/mcp_gateway/__init__.py,sha256= | 
| 219 | 
            +
            claude_mpm/services/mcp_gateway/__init__.py,sha256=PxLMTsjJt6KvWyUDhZG4G_hPbT4-bk_ZgvzODnJAYoA,4522
         | 
| 220 | 
            +
            claude_mpm/services/mcp_gateway/main.py,sha256=z9tatWvsbjH2EWVMgaAv1TMkh_lgPlN-ElL6Ma5ao1A,10512
         | 
| 221 221 | 
             
            claude_mpm/services/mcp_gateway/config/__init__.py,sha256=nBj4JSBi2A9TFNXw_nM6tdoLMrServ-yqzMBvFruGlg,385
         | 
| 222 222 | 
             
            claude_mpm/services/mcp_gateway/config/config_loader.py,sha256=dIajqrDboSY7ArAoAOzlXqQarqix6i9ZEjpcVpofygo,7611
         | 
| 223 223 | 
             
            claude_mpm/services/mcp_gateway/config/config_schema.py,sha256=cP1FZoLd_RSuFnP51aLN36f2ifzDWQalBAEeisHUj_Y,9452
         | 
| @@ -226,9 +226,17 @@ claude_mpm/services/mcp_gateway/core/__init__.py,sha256=5alHHmyb6SKrF-HX00fALk8L | |
| 226 226 | 
             
            claude_mpm/services/mcp_gateway/core/base.py,sha256=zZ36EYvjLEhm75E4q7sB5SZltYCGp4N3SrP3Tu9DHOE,10639
         | 
| 227 227 | 
             
            claude_mpm/services/mcp_gateway/core/exceptions.py,sha256=aygJk4qLI4dJXvpBhvxXz9GS7WlBxtHvaXMIUWhmx6M,6924
         | 
| 228 228 | 
             
            claude_mpm/services/mcp_gateway/core/interfaces.py,sha256=Z1b71vA444yExicMZr9PCzlY7Y9iRS-E6kdkcvKcmt0,11075
         | 
| 229 | 
            -
            claude_mpm/services/mcp_gateway/registry/__init__.py,sha256= | 
| 230 | 
            -
            claude_mpm/services/mcp_gateway/ | 
| 231 | 
            -
            claude_mpm/services/mcp_gateway/ | 
| 229 | 
            +
            claude_mpm/services/mcp_gateway/registry/__init__.py,sha256=j7wwnvIhbZrhL1aZdvefvT4pLKAsrAk8uC4Cpjgrdo0,194
         | 
| 230 | 
            +
            claude_mpm/services/mcp_gateway/registry/service_registry.py,sha256=1AZD0U1kVQV9yrv374zWLYP3JG3kcptGp28CKFUb7I0,13895
         | 
| 231 | 
            +
            claude_mpm/services/mcp_gateway/registry/tool_registry.py,sha256=sGb5vEaGKXcZgce2wzDIFEZaNQkC6sJWhnjtcWanewk,16754
         | 
| 232 | 
            +
            claude_mpm/services/mcp_gateway/server/__init__.py,sha256=L7RSyO6hxvs-kR335udll_a0UUzr45msR7E0rzFK3Ck,290
         | 
| 233 | 
            +
            claude_mpm/services/mcp_gateway/server/mcp_server.py,sha256=IbpR3S25cHSCb2BZeVaJxEZu2j9soj6fYbqNz_C7qwk,14318
         | 
| 234 | 
            +
            claude_mpm/services/mcp_gateway/server/mcp_server_simple.py,sha256=952GDCHVzMtmTAmJhZ4YxQWU0c8zqNdiAb7w2gVv21o,15045
         | 
| 235 | 
            +
            claude_mpm/services/mcp_gateway/server/stdio_handler.py,sha256=g64TmOBNKlaSHf6YrBQiIUzKrqUjD6mjAoCAjqwemfU,12106
         | 
| 236 | 
            +
            claude_mpm/services/mcp_gateway/tools/__init__.py,sha256=_p0VKMum_dmbfLqKMPAHCr7fDAsgyHBInhOGYti-e6E,453
         | 
| 237 | 
            +
            claude_mpm/services/mcp_gateway/tools/base_adapter.py,sha256=YW6CBRoB6ev8bWIDxX4BykNgxbpczSv1cogHUXqC7ug,16736
         | 
| 238 | 
            +
            claude_mpm/services/mcp_gateway/tools/document_summarizer.py,sha256=X48-lTOedfuQQL_ezpi3dRfSsrPbg64h7x5biEs5qVQ,28153
         | 
| 239 | 
            +
            claude_mpm/services/mcp_gateway/tools/hello_world.py,sha256=x0Pm97VTvSqkSXvBeTxh07JLXOFbJyQEWneQoC-udjU,20866
         | 
| 232 240 | 
             
            claude_mpm/services/memory/__init__.py,sha256=XkRcNRalLYPClYc8CX9PNhmSqSI5FNHatMfiGHCuW4o,394
         | 
| 233 241 | 
             
            claude_mpm/services/memory/builder.py,sha256=a3X3mZsd3YxmhwOYsAmbpmCACkoKxcuKuyHXPa26gqs,34075
         | 
| 234 242 | 
             
            claude_mpm/services/memory/indexed_memory.py,sha256=nb2bVxFelNyJ9GINw5mPABj8wNJJ23XyTNZ9NgywB1w,20098
         | 
| @@ -264,19 +272,22 @@ claude_mpm/utils/dependency_manager.py,sha256=2Gs881HkzwMEm7X2z7Lx8l2Lws4PvS-rPB | |
| 264 272 | 
             
            claude_mpm/utils/dependency_strategies.py,sha256=83YZ45ZAwgFN_hhCSUaDv__QR0AWTqBGWMwnBxmiF1Q,11473
         | 
| 265 273 | 
             
            claude_mpm/utils/environment_context.py,sha256=ZbtarJ3gUPF9cLKYIG_vtpZYowetyDxKpz0FPW0Wpu8,10527
         | 
| 266 274 | 
             
            claude_mpm/utils/error_handler.py,sha256=7fVcmQIoj-mmdmibEts7aJit-XMbuCOrxbJmLuUBaZQ,8174
         | 
| 275 | 
            +
            claude_mpm/utils/file_utils.py,sha256=SGU6056Z_cFF1cmnfI1xiVlS0s8pGaSoP99YCkmXDE8,7402
         | 
| 267 276 | 
             
            claude_mpm/utils/framework_detection.py,sha256=nzs1qRZK9K-zT0382z1FpGDvgzUNrUg8rBL-O_WLq-Q,1217
         | 
| 268 277 | 
             
            claude_mpm/utils/import_migration_example.py,sha256=W4a4XH3FY_VBB00BB8Lae2aRPM021PxLHzdUfEs0B5w,2463
         | 
| 269 278 | 
             
            claude_mpm/utils/imports.py,sha256=wX-SOXUHbemx01MHRGQpVwajzXH6qYdQkYNFCIbb2mw,6851
         | 
| 270 279 | 
             
            claude_mpm/utils/path_operations.py,sha256=6pLMnAWBVzHkgp6JyQHmHbGD-dWn-nX21yV4E_eT-kM,11614
         | 
| 271 280 | 
             
            claude_mpm/utils/paths.py,sha256=_4d2uV7QDLMeybSNch6B5H3s0cQ6Ii-idI8rFC-OCn4,14653
         | 
| 281 | 
            +
            claude_mpm/utils/platform_memory.py,sha256=pEufP7UWB59k_7ID2sxN3MRtEDjNhW9Cn8rZIRkGbf8,16757
         | 
| 272 282 | 
             
            claude_mpm/utils/robust_installer.py,sha256=5-iW4Qpba4DBitx5Ie3uoUJgXBpbvuLUJ_uNGgOxwi4,19855
         | 
| 273 283 | 
             
            claude_mpm/utils/session_logging.py,sha256=9G0AzB7V0WkhLQlN0ocqbyDv0ifooEsJ5UPXIhA-wt0,3022
         | 
| 284 | 
            +
            claude_mpm/utils/subprocess_utils.py,sha256=MLXIOUZ-Wk3j0lv_nOHTcppjR8_NNj_vCCZ5dTJ0Mig,9317
         | 
| 274 285 | 
             
            claude_mpm/validation/__init__.py,sha256=bJ19g9lnk7yIjtxzN8XPegp87HTFBzCrGQOpFgRTf3g,155
         | 
| 275 286 | 
             
            claude_mpm/validation/agent_validator.py,sha256=OEYhmy0K99pkoCCoVea2Q-d1JMiDyhEpzEJikuF8T-U,20910
         | 
| 276 287 | 
             
            claude_mpm/validation/frontmatter_validator.py,sha256=vSinu0XD9-31h0-ePYiYivBbxTZEanhymLinTCODr7k,7206
         | 
| 277 | 
            -
            claude_mpm-3.9. | 
| 278 | 
            -
            claude_mpm-3.9. | 
| 279 | 
            -
            claude_mpm-3.9. | 
| 280 | 
            -
            claude_mpm-3.9. | 
| 281 | 
            -
            claude_mpm-3.9. | 
| 282 | 
            -
            claude_mpm-3.9. | 
| 288 | 
            +
            claude_mpm-3.9.9.dist-info/licenses/LICENSE,sha256=cSdDfXjoTVhstrERrqme4zgxAu4GubU22zVEHsiXGxs,1071
         | 
| 289 | 
            +
            claude_mpm-3.9.9.dist-info/METADATA,sha256=d1RGEytLoAibDyKIYVpG8gJiu5E0ACH7Jg8waLW9kV8,8886
         | 
| 290 | 
            +
            claude_mpm-3.9.9.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
         | 
| 291 | 
            +
            claude_mpm-3.9.9.dist-info/entry_points.txt,sha256=3_d7wLrg9sRmQ1SfrFGWoTNL8Wrd6lQb2XVSYbTwRIg,324
         | 
| 292 | 
            +
            claude_mpm-3.9.9.dist-info/top_level.txt,sha256=1nUg3FEaBySgm8t-s54jK5zoPnu3_eY6EP6IOlekyHA,11
         | 
| 293 | 
            +
            claude_mpm-3.9.9.dist-info/RECORD,,
         | 
| @@ -1,36 +0,0 @@ | |
| 1 | 
            -
            # Agent Memory System
         | 
| 2 | 
            -
             | 
| 3 | 
            -
            ## Purpose
         | 
| 4 | 
            -
            Each agent maintains project-specific knowledge in these files. Agents read their memory file before tasks and update it when they learn something new.
         | 
| 5 | 
            -
             | 
| 6 | 
            -
            ## Manual Editing
         | 
| 7 | 
            -
            Feel free to edit these files to:
         | 
| 8 | 
            -
            - Add project-specific guidelines
         | 
| 9 | 
            -
            - Remove outdated information  
         | 
| 10 | 
            -
            - Reorganize for better clarity
         | 
| 11 | 
            -
            - Add domain-specific knowledge
         | 
| 12 | 
            -
             | 
| 13 | 
            -
            ## Memory Limits
         | 
| 14 | 
            -
            - Max file size: 8KB (~2000 tokens)
         | 
| 15 | 
            -
            - Max sections: 10
         | 
| 16 | 
            -
            - Max items per section: 15
         | 
| 17 | 
            -
            - Files auto-truncate when limits exceeded
         | 
| 18 | 
            -
             | 
| 19 | 
            -
            ## File Format
         | 
| 20 | 
            -
            Standard markdown with structured sections. Agents expect:
         | 
| 21 | 
            -
            - Project Architecture
         | 
| 22 | 
            -
            - Implementation Guidelines
         | 
| 23 | 
            -
            - Common Mistakes to Avoid
         | 
| 24 | 
            -
            - Current Technical Context
         | 
| 25 | 
            -
             | 
| 26 | 
            -
            ## How It Works
         | 
| 27 | 
            -
            1. Agents read their memory file before starting tasks
         | 
| 28 | 
            -
            2. Agents add learnings during or after task completion
         | 
| 29 | 
            -
            3. Files automatically enforce size limits
         | 
| 30 | 
            -
            4. Developers can manually edit for accuracy
         | 
| 31 | 
            -
             | 
| 32 | 
            -
            ## Memory File Lifecycle
         | 
| 33 | 
            -
            - Created automatically when agent first runs
         | 
| 34 | 
            -
            - Updated through hook system after delegations
         | 
| 35 | 
            -
            - Manually editable by developers
         | 
| 36 | 
            -
            - Version controlled with project
         | 
| @@ -1,39 +0,0 @@ | |
| 1 | 
            -
            # Engineer Agent Memory - templates
         | 
| 2 | 
            -
             | 
| 3 | 
            -
            <!-- MEMORY LIMITS: 8KB max | 10 sections max | 15 items per section -->
         | 
| 4 | 
            -
            <!-- Last Updated: 2025-08-13 14:34:34 | Auto-updated by: engineer -->
         | 
| 5 | 
            -
             | 
| 6 | 
            -
            ## Project Context
         | 
| 7 | 
            -
            templates: mixed standard application
         | 
| 8 | 
            -
             | 
| 9 | 
            -
            ## Project Architecture
         | 
| 10 | 
            -
            - Standard Application with mixed implementation
         | 
| 11 | 
            -
             | 
| 12 | 
            -
            ## Coding Patterns Learned
         | 
| 13 | 
            -
            <!-- Items will be added as knowledge accumulates -->
         | 
| 14 | 
            -
             | 
| 15 | 
            -
            ## Implementation Guidelines
         | 
| 16 | 
            -
            <!-- Items will be added as knowledge accumulates -->
         | 
| 17 | 
            -
             | 
| 18 | 
            -
            ## Domain-Specific Knowledge
         | 
| 19 | 
            -
            <!-- Agent-specific knowledge for templates domain -->
         | 
| 20 | 
            -
            - Key project terms: templates
         | 
| 21 | 
            -
            - Focus on implementation patterns, coding standards, and best practices
         | 
| 22 | 
            -
             | 
| 23 | 
            -
            ## Effective Strategies
         | 
| 24 | 
            -
            <!-- Successful approaches discovered through experience -->
         | 
| 25 | 
            -
             | 
| 26 | 
            -
            ## Common Mistakes to Avoid
         | 
| 27 | 
            -
            <!-- Items will be added as knowledge accumulates -->
         | 
| 28 | 
            -
             | 
| 29 | 
            -
            ## Integration Points
         | 
| 30 | 
            -
            <!-- Items will be added as knowledge accumulates -->
         | 
| 31 | 
            -
             | 
| 32 | 
            -
            ## Performance Considerations
         | 
| 33 | 
            -
            <!-- Items will be added as knowledge accumulates -->
         | 
| 34 | 
            -
             | 
| 35 | 
            -
            ## Current Technical Context
         | 
| 36 | 
            -
            <!-- Items will be added as knowledge accumulates -->
         | 
| 37 | 
            -
             | 
| 38 | 
            -
            ## Recent Learnings
         | 
| 39 | 
            -
            <!-- Most recent discoveries and insights -->
         | 
| @@ -1,38 +0,0 @@ | |
| 1 | 
            -
            # Qa Agent Memory - templates
         | 
| 2 | 
            -
             | 
| 3 | 
            -
            <!-- MEMORY LIMITS: 8KB max | 10 sections max | 15 items per section -->
         | 
| 4 | 
            -
            <!-- Last Updated: 2025-08-13 14:37:34 | Auto-updated by: qa -->
         | 
| 5 | 
            -
             | 
| 6 | 
            -
            ## Project Context
         | 
| 7 | 
            -
            templates: mixed standard application
         | 
| 8 | 
            -
             | 
| 9 | 
            -
            ## Project Architecture
         | 
| 10 | 
            -
            - Standard Application with mixed implementation
         | 
| 11 | 
            -
             | 
| 12 | 
            -
            ## Coding Patterns Learned
         | 
| 13 | 
            -
            <!-- Items will be added as knowledge accumulates -->
         | 
| 14 | 
            -
             | 
| 15 | 
            -
            ## Implementation Guidelines
         | 
| 16 | 
            -
            <!-- Items will be added as knowledge accumulates -->
         | 
| 17 | 
            -
             | 
| 18 | 
            -
            ## Domain-Specific Knowledge
         | 
| 19 | 
            -
            <!-- Agent-specific knowledge for templates domain -->
         | 
| 20 | 
            -
            - Key project terms: templates
         | 
| 21 | 
            -
             | 
| 22 | 
            -
            ## Effective Strategies
         | 
| 23 | 
            -
            <!-- Successful approaches discovered through experience -->
         | 
| 24 | 
            -
             | 
| 25 | 
            -
            ## Common Mistakes to Avoid
         | 
| 26 | 
            -
            <!-- Items will be added as knowledge accumulates -->
         | 
| 27 | 
            -
             | 
| 28 | 
            -
            ## Integration Points
         | 
| 29 | 
            -
            <!-- Items will be added as knowledge accumulates -->
         | 
| 30 | 
            -
             | 
| 31 | 
            -
            ## Performance Considerations
         | 
| 32 | 
            -
            <!-- Items will be added as knowledge accumulates -->
         | 
| 33 | 
            -
             | 
| 34 | 
            -
            ## Current Technical Context
         | 
| 35 | 
            -
            <!-- Items will be added as knowledge accumulates -->
         | 
| 36 | 
            -
             | 
| 37 | 
            -
            ## Recent Learnings
         | 
| 38 | 
            -
            <!-- Most recent discoveries and insights -->
         | 
| @@ -1,39 +0,0 @@ | |
| 1 | 
            -
            # Research Agent Memory - templates
         | 
| 2 | 
            -
             | 
| 3 | 
            -
            <!-- MEMORY LIMITS: 16KB max | 10 sections max | 15 items per section -->
         | 
| 4 | 
            -
            <!-- Last Updated: 2025-08-13 14:29:28 | Auto-updated by: research -->
         | 
| 5 | 
            -
             | 
| 6 | 
            -
            ## Project Context
         | 
| 7 | 
            -
            templates: mixed standard application
         | 
| 8 | 
            -
             | 
| 9 | 
            -
            ## Project Architecture
         | 
| 10 | 
            -
            - Standard Application with mixed implementation
         | 
| 11 | 
            -
             | 
| 12 | 
            -
            ## Coding Patterns Learned
         | 
| 13 | 
            -
            <!-- Items will be added as knowledge accumulates -->
         | 
| 14 | 
            -
             | 
| 15 | 
            -
            ## Implementation Guidelines
         | 
| 16 | 
            -
            <!-- Items will be added as knowledge accumulates -->
         | 
| 17 | 
            -
             | 
| 18 | 
            -
            ## Domain-Specific Knowledge
         | 
| 19 | 
            -
            <!-- Agent-specific knowledge for templates domain -->
         | 
| 20 | 
            -
            - Key project terms: templates
         | 
| 21 | 
            -
            - Focus on code analysis, pattern discovery, and architectural insights
         | 
| 22 | 
            -
             | 
| 23 | 
            -
            ## Effective Strategies
         | 
| 24 | 
            -
            <!-- Successful approaches discovered through experience -->
         | 
| 25 | 
            -
             | 
| 26 | 
            -
            ## Common Mistakes to Avoid
         | 
| 27 | 
            -
            <!-- Items will be added as knowledge accumulates -->
         | 
| 28 | 
            -
             | 
| 29 | 
            -
            ## Integration Points
         | 
| 30 | 
            -
            <!-- Items will be added as knowledge accumulates -->
         | 
| 31 | 
            -
             | 
| 32 | 
            -
            ## Performance Considerations
         | 
| 33 | 
            -
            <!-- Items will be added as knowledge accumulates -->
         | 
| 34 | 
            -
             | 
| 35 | 
            -
            ## Current Technical Context
         | 
| 36 | 
            -
            <!-- Items will be added as knowledge accumulates -->
         | 
| 37 | 
            -
             | 
| 38 | 
            -
            ## Recent Learnings
         | 
| 39 | 
            -
            <!-- Most recent discoveries and insights -->
         |