claude-mpm 3.1.0__py3-none-any.whl → 3.1.2__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/__main__.py +10 -3
 - claude_mpm/agents/templates/test-integration-agent.md +34 -0
 - claude_mpm/cli/README.md +109 -0
 - claude_mpm/cli/__init__.py +163 -0
 - claude_mpm/cli/commands/__init__.py +20 -0
 - claude_mpm/cli/commands/agents.py +191 -0
 - claude_mpm/cli/commands/info.py +89 -0
 - claude_mpm/cli/commands/run.py +80 -0
 - claude_mpm/cli/commands/tickets.py +63 -0
 - claude_mpm/cli/commands/ui.py +57 -0
 - claude_mpm/cli/parser.py +337 -0
 - claude_mpm/cli/utils.py +171 -0
 - claude_mpm/cli_enhancements.py +19 -0
 - claude_mpm/core/simple_runner.py +40 -2
 - claude_mpm/models/__init__.py +24 -0
 - claude_mpm/models/agent_definition.py +196 -0
 - claude_mpm/services/agent_lifecycle_manager.py +183 -20
 - claude_mpm/services/agent_modification_tracker.py +10 -2
 - claude_mpm/services/agent_persistence_service.py +94 -0
 - claude_mpm/services/agent_versioning.py +37 -0
 - {claude_mpm-3.1.0.dist-info → claude_mpm-3.1.2.dist-info}/METADATA +1 -1
 - {claude_mpm-3.1.0.dist-info → claude_mpm-3.1.2.dist-info}/RECORD +27 -13
 - claude_mpm/cli_main.py +0 -13
 - /claude_mpm/{cli.py → cli_old.py} +0 -0
 - {claude_mpm-3.1.0.dist-info → claude_mpm-3.1.2.dist-info}/WHEEL +0 -0
 - {claude_mpm-3.1.0.dist-info → claude_mpm-3.1.2.dist-info}/entry_points.txt +0 -0
 - {claude_mpm-3.1.0.dist-info → claude_mpm-3.1.2.dist-info}/licenses/LICENSE +0 -0
 - {claude_mpm-3.1.0.dist-info → claude_mpm-3.1.2.dist-info}/top_level.txt +0 -0
 
| 
         @@ -43,10 +43,12 @@ from claude_mpm.services.agent_modification_tracker import ( 
     | 
|
| 
       43 
43 
     | 
    
         
             
            )
         
     | 
| 
       44 
44 
     | 
    
         
             
            from claude_mpm.services.agent_persistence_service import (
         
     | 
| 
       45 
45 
     | 
    
         
             
                AgentPersistenceService,
         
     | 
| 
       46 
     | 
    
         
            -
                PersistenceRecord,
         
     | 
| 
       47 
46 
     | 
    
         
             
                PersistenceStrategy,
         
     | 
| 
      
 47 
     | 
    
         
            +
                PersistenceRecord,
         
     | 
| 
       48 
48 
     | 
    
         
             
                PersistenceOperation
         
     | 
| 
       49 
49 
     | 
    
         
             
            )
         
     | 
| 
      
 50 
     | 
    
         
            +
            from claude_mpm.services.agent_management_service import AgentManager
         
     | 
| 
      
 51 
     | 
    
         
            +
            from claude_mpm.models.agent_definition import AgentDefinition, AgentType
         
     | 
| 
       50 
52 
     | 
    
         
             
            from claude_mpm.core.base_service import BaseService
         
     | 
| 
       51 
53 
     | 
    
         
             
            from claude_mpm.utils.path_operations import path_ops
         
     | 
| 
       52 
54 
     | 
    
         
             
            from claude_mpm.utils.config_manager import ConfigurationManager
         
     | 
| 
         @@ -149,6 +151,7 @@ class AgentLifecycleManager(BaseService): 
     | 
|
| 
       149 
151 
     | 
    
         
             
                    self.agent_registry: Optional[AgentRegistry] = None
         
     | 
| 
       150 
152 
     | 
    
         
             
                    self.modification_tracker: Optional[AgentModificationTracker] = None
         
     | 
| 
       151 
153 
     | 
    
         
             
                    self.persistence_service: Optional[AgentPersistenceService] = None
         
     | 
| 
      
 154 
     | 
    
         
            +
                    self.agent_manager: Optional[AgentManager] = None
         
     | 
| 
       152 
155 
     | 
    
         | 
| 
       153 
156 
     | 
    
         
             
                    # Lifecycle tracking
         
     | 
| 
       154 
157 
     | 
    
         
             
                    self.agent_records: Dict[str, AgentLifecycleRecord] = {}
         
     | 
| 
         @@ -246,6 +249,9 @@ class AgentLifecycleManager(BaseService): 
     | 
|
| 
       246 
249 
     | 
    
         
             
                        self.persistence_service = AgentPersistenceService()
         
     | 
| 
       247 
250 
     | 
    
         
             
                        await self.persistence_service.start()
         
     | 
| 
       248 
251 
     | 
    
         | 
| 
      
 252 
     | 
    
         
            +
                        # Initialize AgentManager
         
     | 
| 
      
 253 
     | 
    
         
            +
                        self.agent_manager = AgentManager()
         
     | 
| 
      
 254 
     | 
    
         
            +
                        
         
     | 
| 
       249 
255 
     | 
    
         
             
                        self.logger.info("Core services initialized successfully")
         
     | 
| 
       250 
256 
     | 
    
         | 
| 
       251 
257 
     | 
    
         
             
                    except Exception as e:
         
     | 
| 
         @@ -319,9 +325,9 @@ class AgentLifecycleManager(BaseService): 
     | 
|
| 
       319 
325 
     | 
    
         
             
                        if not self.agent_registry:
         
     | 
| 
       320 
326 
     | 
    
         
             
                            return
         
     | 
| 
       321 
327 
     | 
    
         | 
| 
       322 
     | 
    
         
            -
                        # Discover all agents via registry
         
     | 
| 
       323 
     | 
    
         
            -
                         
     | 
| 
       324 
     | 
    
         
            -
                        all_agents =  
     | 
| 
      
 328 
     | 
    
         
            +
                        # Discover all agents via registry (sync methods)
         
     | 
| 
      
 329 
     | 
    
         
            +
                        self.agent_registry.discover_agents()
         
     | 
| 
      
 330 
     | 
    
         
            +
                        all_agents = self.agent_registry.list_agents()
         
     | 
| 
       325 
331 
     | 
    
         | 
| 
       326 
332 
     | 
    
         
             
                        # Update lifecycle records with registry data
         
     | 
| 
       327 
333 
     | 
    
         
             
                        for agent_metadata in all_agents:
         
     | 
| 
         @@ -391,8 +397,32 @@ class AgentLifecycleManager(BaseService): 
     | 
|
| 
       391 
397 
     | 
    
         
             
                                    error_message="Agent already exists"
         
     | 
| 
       392 
398 
     | 
    
         
             
                                )
         
     | 
| 
       393 
399 
     | 
    
         | 
| 
       394 
     | 
    
         
            -
                            #  
     | 
| 
       395 
     | 
    
         
            -
                             
     | 
| 
      
 400 
     | 
    
         
            +
                            # Create agent definition
         
     | 
| 
      
 401 
     | 
    
         
            +
                            agent_def = await self._create_agent_definition(
         
     | 
| 
      
 402 
     | 
    
         
            +
                                agent_name, agent_content, tier, agent_type, **kwargs
         
     | 
| 
      
 403 
     | 
    
         
            +
                            )
         
     | 
| 
      
 404 
     | 
    
         
            +
                            
         
     | 
| 
      
 405 
     | 
    
         
            +
                            # Determine location based on tier
         
     | 
| 
      
 406 
     | 
    
         
            +
                            location = "project" if tier == ModificationTier.PROJECT else "framework"
         
     | 
| 
      
 407 
     | 
    
         
            +
                            
         
     | 
| 
      
 408 
     | 
    
         
            +
                            # Create agent using AgentManager (sync call in executor)
         
     | 
| 
      
 409 
     | 
    
         
            +
                            try:
         
     | 
| 
      
 410 
     | 
    
         
            +
                                if self.agent_manager:
         
     | 
| 
      
 411 
     | 
    
         
            +
                                    file_path = await self._run_sync_in_executor(
         
     | 
| 
      
 412 
     | 
    
         
            +
                                        self.agent_manager.create_agent,
         
     | 
| 
      
 413 
     | 
    
         
            +
                                        agent_name, agent_def, location
         
     | 
| 
      
 414 
     | 
    
         
            +
                                    )
         
     | 
| 
      
 415 
     | 
    
         
            +
                                else:
         
     | 
| 
      
 416 
     | 
    
         
            +
                                    # Fallback to direct file creation if AgentManager not available
         
     | 
| 
      
 417 
     | 
    
         
            +
                                    file_path = await self._determine_agent_file_path(agent_name, tier)
         
     | 
| 
      
 418 
     | 
    
         
            +
                                    path_ops.ensure_dir(file_path.parent)
         
     | 
| 
      
 419 
     | 
    
         
            +
                                    path_ops.safe_write(file_path, agent_content)
         
     | 
| 
      
 420 
     | 
    
         
            +
                            except Exception as e:
         
     | 
| 
      
 421 
     | 
    
         
            +
                                self.logger.error(f"AgentManager failed to create agent: {e}")
         
     | 
| 
      
 422 
     | 
    
         
            +
                                # Fallback to direct file creation
         
     | 
| 
      
 423 
     | 
    
         
            +
                                file_path = await self._determine_agent_file_path(agent_name, tier)
         
     | 
| 
      
 424 
     | 
    
         
            +
                                path_ops.ensure_dir(file_path.parent)
         
     | 
| 
      
 425 
     | 
    
         
            +
                                path_ops.safe_write(file_path, agent_content)
         
     | 
| 
       396 
426 
     | 
    
         | 
| 
       397 
427 
     | 
    
         
             
                            # Track modification
         
     | 
| 
       398 
428 
     | 
    
         
             
                            modification = await self.modification_tracker.track_modification(
         
     | 
| 
         @@ -404,13 +434,18 @@ class AgentLifecycleManager(BaseService): 
     | 
|
| 
       404 
434 
     | 
    
         
             
                                **kwargs
         
     | 
| 
       405 
435 
     | 
    
         
             
                            )
         
     | 
| 
       406 
436 
     | 
    
         | 
| 
       407 
     | 
    
         
            -
                            #  
     | 
| 
       408 
     | 
    
         
            -
                             
     | 
| 
      
 437 
     | 
    
         
            +
                            # Note: We don't use persistence_service for the actual write anymore
         
     | 
| 
      
 438 
     | 
    
         
            +
                            # since AgentManager handles that. We create a synthetic record for compatibility.
         
     | 
| 
      
 439 
     | 
    
         
            +
                            persistence_record = PersistenceRecord(
         
     | 
| 
      
 440 
     | 
    
         
            +
                                operation_id=f"create_{agent_name}_{time.time()}",
         
     | 
| 
      
 441 
     | 
    
         
            +
                                operation_type=PersistenceOperation.CREATE,
         
     | 
| 
       409 
442 
     | 
    
         
             
                                agent_name=agent_name,
         
     | 
| 
       410 
     | 
    
         
            -
                                agent_content=agent_content,
         
     | 
| 
       411 
443 
     | 
    
         
             
                                source_tier=tier,
         
     | 
| 
       412 
444 
     | 
    
         
             
                                target_tier=tier,
         
     | 
| 
       413 
     | 
    
         
            -
                                strategy=self.default_persistence_strategy
         
     | 
| 
      
 445 
     | 
    
         
            +
                                strategy=self.default_persistence_strategy,
         
     | 
| 
      
 446 
     | 
    
         
            +
                                success=True,
         
     | 
| 
      
 447 
     | 
    
         
            +
                                timestamp=time.time(),
         
     | 
| 
      
 448 
     | 
    
         
            +
                                file_path=str(file_path)
         
     | 
| 
       414 
449 
     | 
    
         
             
                            )
         
     | 
| 
       415 
450 
     | 
    
         | 
| 
       416 
451 
     | 
    
         
             
                            # Create lifecycle record
         
     | 
| 
         @@ -512,6 +547,48 @@ class AgentLifecycleManager(BaseService): 
     | 
|
| 
       512 
547 
     | 
    
         | 
| 
       513 
548 
     | 
    
         
             
                            record = self.agent_records[agent_name]
         
     | 
| 
       514 
549 
     | 
    
         | 
| 
      
 550 
     | 
    
         
            +
                            # Update agent using AgentManager
         
     | 
| 
      
 551 
     | 
    
         
            +
                            try:
         
     | 
| 
      
 552 
     | 
    
         
            +
                                if self.agent_manager:
         
     | 
| 
      
 553 
     | 
    
         
            +
                                    # Read current agent to get full definition
         
     | 
| 
      
 554 
     | 
    
         
            +
                                    current_def = await self._run_sync_in_executor(
         
     | 
| 
      
 555 
     | 
    
         
            +
                                        self.agent_manager.read_agent, agent_name
         
     | 
| 
      
 556 
     | 
    
         
            +
                                    )
         
     | 
| 
      
 557 
     | 
    
         
            +
                                    
         
     | 
| 
      
 558 
     | 
    
         
            +
                                    if current_def:
         
     | 
| 
      
 559 
     | 
    
         
            +
                                        # Update raw content
         
     | 
| 
      
 560 
     | 
    
         
            +
                                        current_def.raw_content = agent_content
         
     | 
| 
      
 561 
     | 
    
         
            +
                                        
         
     | 
| 
      
 562 
     | 
    
         
            +
                                        # Apply any metadata updates from kwargs
         
     | 
| 
      
 563 
     | 
    
         
            +
                                        if 'model_preference' in kwargs:
         
     | 
| 
      
 564 
     | 
    
         
            +
                                            current_def.metadata.model_preference = kwargs['model_preference']
         
     | 
| 
      
 565 
     | 
    
         
            +
                                        if 'tags' in kwargs:
         
     | 
| 
      
 566 
     | 
    
         
            +
                                            current_def.metadata.tags = kwargs['tags']
         
     | 
| 
      
 567 
     | 
    
         
            +
                                        if 'specializations' in kwargs:
         
     | 
| 
      
 568 
     | 
    
         
            +
                                            current_def.metadata.specializations = kwargs['specializations']
         
     | 
| 
      
 569 
     | 
    
         
            +
                                        
         
     | 
| 
      
 570 
     | 
    
         
            +
                                        # Update via AgentManager
         
     | 
| 
      
 571 
     | 
    
         
            +
                                        updated_def = await self._run_sync_in_executor(
         
     | 
| 
      
 572 
     | 
    
         
            +
                                            self.agent_manager.update_agent,
         
     | 
| 
      
 573 
     | 
    
         
            +
                                            agent_name, {"raw_content": agent_content}, True
         
     | 
| 
      
 574 
     | 
    
         
            +
                                        )
         
     | 
| 
      
 575 
     | 
    
         
            +
                                        
         
     | 
| 
      
 576 
     | 
    
         
            +
                                        if not updated_def:
         
     | 
| 
      
 577 
     | 
    
         
            +
                                            raise Exception("AgentManager update failed")
         
     | 
| 
      
 578 
     | 
    
         
            +
                                    else:
         
     | 
| 
      
 579 
     | 
    
         
            +
                                        raise Exception("Could not read current agent definition")
         
     | 
| 
      
 580 
     | 
    
         
            +
                                else:
         
     | 
| 
      
 581 
     | 
    
         
            +
                                    # Fallback to direct file update
         
     | 
| 
      
 582 
     | 
    
         
            +
                                    file_path = Path(record.file_path)
         
     | 
| 
      
 583 
     | 
    
         
            +
                                    if path_ops.validate_exists(file_path):
         
     | 
| 
      
 584 
     | 
    
         
            +
                                        path_ops.safe_write(file_path, agent_content)
         
     | 
| 
      
 585 
     | 
    
         
            +
                            except Exception as e:
         
     | 
| 
      
 586 
     | 
    
         
            +
                                self.logger.error(f"AgentManager failed to update agent: {e}")
         
     | 
| 
      
 587 
     | 
    
         
            +
                                # Fallback to direct file update
         
     | 
| 
      
 588 
     | 
    
         
            +
                                file_path = Path(record.file_path)
         
     | 
| 
      
 589 
     | 
    
         
            +
                                if path_ops.validate_exists(file_path):
         
     | 
| 
      
 590 
     | 
    
         
            +
                                    path_ops.safe_write(file_path, agent_content)
         
     | 
| 
      
 591 
     | 
    
         
            +
                            
         
     | 
| 
       515 
592 
     | 
    
         
             
                            # Track modification
         
     | 
| 
       516 
593 
     | 
    
         
             
                            modification = await self.modification_tracker.track_modification(
         
     | 
| 
       517 
594 
     | 
    
         
             
                                agent_name=agent_name,
         
     | 
| 
         @@ -521,12 +598,17 @@ class AgentLifecycleManager(BaseService): 
     | 
|
| 
       521 
598 
     | 
    
         
             
                                **kwargs
         
     | 
| 
       522 
599 
     | 
    
         
             
                            )
         
     | 
| 
       523 
600 
     | 
    
         | 
| 
       524 
     | 
    
         
            -
                            #  
     | 
| 
       525 
     | 
    
         
            -
                            persistence_record =  
     | 
| 
      
 601 
     | 
    
         
            +
                            # Create synthetic persistence record for compatibility
         
     | 
| 
      
 602 
     | 
    
         
            +
                            persistence_record = PersistenceRecord(
         
     | 
| 
      
 603 
     | 
    
         
            +
                                operation_id=f"update_{agent_name}_{time.time()}",
         
     | 
| 
      
 604 
     | 
    
         
            +
                                operation_type=PersistenceOperation.UPDATE,
         
     | 
| 
       526 
605 
     | 
    
         
             
                                agent_name=agent_name,
         
     | 
| 
       527 
     | 
    
         
            -
                                agent_content=agent_content,
         
     | 
| 
       528 
606 
     | 
    
         
             
                                source_tier=record.tier,
         
     | 
| 
       529 
     | 
    
         
            -
                                 
     | 
| 
      
 607 
     | 
    
         
            +
                                target_tier=record.tier,
         
     | 
| 
      
 608 
     | 
    
         
            +
                                strategy=self.default_persistence_strategy,
         
     | 
| 
      
 609 
     | 
    
         
            +
                                success=True,
         
     | 
| 
      
 610 
     | 
    
         
            +
                                timestamp=time.time(),
         
     | 
| 
      
 611 
     | 
    
         
            +
                                file_path=record.file_path
         
     | 
| 
       530 
612 
     | 
    
         
             
                            )
         
     | 
| 
       531 
613 
     | 
    
         | 
| 
       532 
614 
     | 
    
         
             
                            # Update lifecycle record
         
     | 
| 
         @@ -631,10 +713,28 @@ class AgentLifecycleManager(BaseService): 
     | 
|
| 
       631 
713 
     | 
    
         
             
                                **kwargs
         
     | 
| 
       632 
714 
     | 
    
         
             
                            )
         
     | 
| 
       633 
715 
     | 
    
         | 
| 
       634 
     | 
    
         
            -
                            # Delete  
     | 
| 
       635 
     | 
    
         
            -
                             
     | 
| 
       636 
     | 
    
         
            -
                             
     | 
| 
       637 
     | 
    
         
            -
                                 
     | 
| 
      
 716 
     | 
    
         
            +
                            # Delete agent using AgentManager
         
     | 
| 
      
 717 
     | 
    
         
            +
                            deletion_success = False
         
     | 
| 
      
 718 
     | 
    
         
            +
                            try:
         
     | 
| 
      
 719 
     | 
    
         
            +
                                if self.agent_manager:
         
     | 
| 
      
 720 
     | 
    
         
            +
                                    deletion_success = await self._run_sync_in_executor(
         
     | 
| 
      
 721 
     | 
    
         
            +
                                        self.agent_manager.delete_agent, agent_name
         
     | 
| 
      
 722 
     | 
    
         
            +
                                    )
         
     | 
| 
      
 723 
     | 
    
         
            +
                                    if not deletion_success:
         
     | 
| 
      
 724 
     | 
    
         
            +
                                        raise Exception("AgentManager delete failed")
         
     | 
| 
      
 725 
     | 
    
         
            +
                                else:
         
     | 
| 
      
 726 
     | 
    
         
            +
                                    # Fallback to direct file deletion
         
     | 
| 
      
 727 
     | 
    
         
            +
                                    file_path = Path(record.file_path)
         
     | 
| 
      
 728 
     | 
    
         
            +
                                    if path_ops.validate_exists(file_path):
         
     | 
| 
      
 729 
     | 
    
         
            +
                                        path_ops.safe_delete(file_path)
         
     | 
| 
      
 730 
     | 
    
         
            +
                                        deletion_success = True
         
     | 
| 
      
 731 
     | 
    
         
            +
                            except Exception as e:
         
     | 
| 
      
 732 
     | 
    
         
            +
                                self.logger.error(f"AgentManager failed to delete agent: {e}")
         
     | 
| 
      
 733 
     | 
    
         
            +
                                # Fallback to direct file deletion
         
     | 
| 
      
 734 
     | 
    
         
            +
                                file_path = Path(record.file_path)
         
     | 
| 
      
 735 
     | 
    
         
            +
                                if path_ops.validate_exists(file_path):
         
     | 
| 
      
 736 
     | 
    
         
            +
                                    path_ops.safe_delete(file_path)
         
     | 
| 
      
 737 
     | 
    
         
            +
                                    deletion_success = True
         
     | 
| 
       638 
738 
     | 
    
         | 
| 
       639 
739 
     | 
    
         
             
                            # Update lifecycle record
         
     | 
| 
       640 
740 
     | 
    
         
             
                            record.current_state = LifecycleState.DELETED
         
     | 
| 
         @@ -749,8 +849,8 @@ class AgentLifecycleManager(BaseService): 
     | 
|
| 
       749 
849 
     | 
    
         
             
                        return False
         
     | 
| 
       750 
850 
     | 
    
         | 
| 
       751 
851 
     | 
    
         
             
                    try:
         
     | 
| 
       752 
     | 
    
         
            -
                        # Refresh  
     | 
| 
       753 
     | 
    
         
            -
                         
     | 
| 
      
 852 
     | 
    
         
            +
                        # Refresh registry (discover_agents is synchronous)
         
     | 
| 
      
 853 
     | 
    
         
            +
                        self.agent_registry.discover_agents()
         
     | 
| 
       754 
854 
     | 
    
         
             
                        return True
         
     | 
| 
       755 
855 
     | 
    
         | 
| 
       756 
856 
     | 
    
         
             
                    except Exception as e:
         
     | 
| 
         @@ -950,6 +1050,69 @@ class AgentLifecycleManager(BaseService): 
     | 
|
| 
       950 
1050 
     | 
    
         | 
| 
       951 
1051 
     | 
    
         
             
                    return stats
         
     | 
| 
       952 
1052 
     | 
    
         | 
| 
      
 1053 
     | 
    
         
            +
                async def _create_agent_definition(self, agent_name: str, agent_content: str, 
         
     | 
| 
      
 1054 
     | 
    
         
            +
                                                  tier: ModificationTier, agent_type: str, **kwargs) -> AgentDefinition:
         
     | 
| 
      
 1055 
     | 
    
         
            +
                    """
         
     | 
| 
      
 1056 
     | 
    
         
            +
                    Create an AgentDefinition from lifecycle parameters.
         
     | 
| 
      
 1057 
     | 
    
         
            +
                    
         
     | 
| 
      
 1058 
     | 
    
         
            +
                    WHY: This method bridges the gap between the lifecycle manager's parameters
         
     | 
| 
      
 1059 
     | 
    
         
            +
                    and the AgentManager's expected AgentDefinition model.
         
     | 
| 
      
 1060 
     | 
    
         
            +
                    
         
     | 
| 
      
 1061 
     | 
    
         
            +
                    DESIGN DECISION: Creating a minimal AgentDefinition here because:
         
     | 
| 
      
 1062 
     | 
    
         
            +
                    - The full markdown parsing happens in AgentManager
         
     | 
| 
      
 1063 
     | 
    
         
            +
                    - We only need to provide the essential metadata
         
     | 
| 
      
 1064 
     | 
    
         
            +
                    - This keeps the lifecycle manager focused on orchestration
         
     | 
| 
      
 1065 
     | 
    
         
            +
                    """
         
     | 
| 
      
 1066 
     | 
    
         
            +
                    # Map tier to AgentType
         
     | 
| 
      
 1067 
     | 
    
         
            +
                    type_map = {
         
     | 
| 
      
 1068 
     | 
    
         
            +
                        ModificationTier.USER: AgentType.CUSTOM,
         
     | 
| 
      
 1069 
     | 
    
         
            +
                        ModificationTier.PROJECT: AgentType.PROJECT,
         
     | 
| 
      
 1070 
     | 
    
         
            +
                        ModificationTier.SYSTEM: AgentType.SYSTEM
         
     | 
| 
      
 1071 
     | 
    
         
            +
                    }
         
     | 
| 
      
 1072 
     | 
    
         
            +
                    
         
     | 
| 
      
 1073 
     | 
    
         
            +
                    # Create metadata
         
     | 
| 
      
 1074 
     | 
    
         
            +
                    from claude_mpm.models.agent_definition import AgentMetadata, AgentPermissions
         
     | 
| 
      
 1075 
     | 
    
         
            +
                    metadata = AgentMetadata(
         
     | 
| 
      
 1076 
     | 
    
         
            +
                        type=type_map.get(tier, AgentType.CUSTOM),
         
     | 
| 
      
 1077 
     | 
    
         
            +
                        model_preference=kwargs.get('model_preference', 'claude-3-sonnet'),
         
     | 
| 
      
 1078 
     | 
    
         
            +
                        version="1.0.0",
         
     | 
| 
      
 1079 
     | 
    
         
            +
                        author=kwargs.get('author', 'claude-mpm'),
         
     | 
| 
      
 1080 
     | 
    
         
            +
                        tags=kwargs.get('tags', []),
         
     | 
| 
      
 1081 
     | 
    
         
            +
                        specializations=kwargs.get('specializations', [])
         
     | 
| 
      
 1082 
     | 
    
         
            +
                    )
         
     | 
| 
      
 1083 
     | 
    
         
            +
                    
         
     | 
| 
      
 1084 
     | 
    
         
            +
                    # Create minimal definition
         
     | 
| 
      
 1085 
     | 
    
         
            +
                    definition = AgentDefinition(
         
     | 
| 
      
 1086 
     | 
    
         
            +
                        name=agent_name,
         
     | 
| 
      
 1087 
     | 
    
         
            +
                        title=agent_name.replace('-', ' ').title(),
         
     | 
| 
      
 1088 
     | 
    
         
            +
                        file_path="",  # Will be set by AgentManager
         
     | 
| 
      
 1089 
     | 
    
         
            +
                        metadata=metadata,
         
     | 
| 
      
 1090 
     | 
    
         
            +
                        primary_role=kwargs.get('primary_role', f"{agent_name} agent"),
         
     | 
| 
      
 1091 
     | 
    
         
            +
                        when_to_use={"select": [], "do_not_select": []},
         
     | 
| 
      
 1092 
     | 
    
         
            +
                        capabilities=[],
         
     | 
| 
      
 1093 
     | 
    
         
            +
                        authority=AgentPermissions(),
         
     | 
| 
      
 1094 
     | 
    
         
            +
                        workflows=[],
         
     | 
| 
      
 1095 
     | 
    
         
            +
                        escalation_triggers=[],
         
     | 
| 
      
 1096 
     | 
    
         
            +
                        kpis=[],
         
     | 
| 
      
 1097 
     | 
    
         
            +
                        dependencies=[],
         
     | 
| 
      
 1098 
     | 
    
         
            +
                        tools_commands="",
         
     | 
| 
      
 1099 
     | 
    
         
            +
                        raw_content=agent_content
         
     | 
| 
      
 1100 
     | 
    
         
            +
                    )
         
     | 
| 
      
 1101 
     | 
    
         
            +
                    
         
     | 
| 
      
 1102 
     | 
    
         
            +
                    return definition
         
     | 
| 
      
 1103 
     | 
    
         
            +
                
         
     | 
| 
      
 1104 
     | 
    
         
            +
                async def _run_sync_in_executor(self, func, *args, **kwargs):
         
     | 
| 
      
 1105 
     | 
    
         
            +
                    """
         
     | 
| 
      
 1106 
     | 
    
         
            +
                    Run a synchronous function in an executor to avoid blocking.
         
     | 
| 
      
 1107 
     | 
    
         
            +
                    
         
     | 
| 
      
 1108 
     | 
    
         
            +
                    WHY: AgentManager has synchronous methods but AgentLifecycleManager is async.
         
     | 
| 
      
 1109 
     | 
    
         
            +
                    This allows us to call sync methods without blocking the event loop.
         
     | 
| 
      
 1110 
     | 
    
         
            +
                    
         
     | 
| 
      
 1111 
     | 
    
         
            +
                    PERFORMANCE: Uses the default executor which manages a thread pool efficiently.
         
     | 
| 
      
 1112 
     | 
    
         
            +
                    """
         
     | 
| 
      
 1113 
     | 
    
         
            +
                    loop = asyncio.get_event_loop()
         
     | 
| 
      
 1114 
     | 
    
         
            +
                    return await loop.run_in_executor(None, func, *args, **kwargs)
         
     | 
| 
      
 1115 
     | 
    
         
            +
                
         
     | 
| 
       953 
1116 
     | 
    
         
             
                async def restore_agent(self, agent_name: str, backup_path: Optional[str] = None) -> LifecycleOperationResult:
         
     | 
| 
       954 
1117 
     | 
    
         
             
                    """Restore agent from backup."""
         
     | 
| 
       955 
1118 
     | 
    
         
             
                    start_time = time.time()
         
     | 
| 
         @@ -341,6 +341,14 @@ class AgentModificationTracker(BaseService): 
     | 
|
| 
       341 
341 
     | 
    
         
             
                        backup_path = await self._create_backup(file_path, modification_id)
         
     | 
| 
       342 
342 
     | 
    
         | 
| 
       343 
343 
     | 
    
         
             
                    # Create modification record
         
     | 
| 
      
 344 
     | 
    
         
            +
                    # Only include valid AgentModification fields from file_metadata
         
     | 
| 
      
 345 
     | 
    
         
            +
                    valid_metadata_fields = {'file_hash_after', 'file_size_after'}
         
     | 
| 
      
 346 
     | 
    
         
            +
                    filtered_metadata = {k: v for k, v in file_metadata.items() if k in valid_metadata_fields}
         
     | 
| 
      
 347 
     | 
    
         
            +
                    
         
     | 
| 
      
 348 
     | 
    
         
            +
                    # Add other metadata to the metadata field
         
     | 
| 
      
 349 
     | 
    
         
            +
                    extra_metadata = {k: v for k, v in file_metadata.items() if k not in valid_metadata_fields}
         
     | 
| 
      
 350 
     | 
    
         
            +
                    extra_metadata.update(kwargs)
         
     | 
| 
      
 351 
     | 
    
         
            +
                    
         
     | 
| 
       344 
352 
     | 
    
         
             
                    modification = AgentModification(
         
     | 
| 
       345 
353 
     | 
    
         
             
                        modification_id=modification_id,
         
     | 
| 
       346 
354 
     | 
    
         
             
                        agent_name=agent_name,
         
     | 
| 
         @@ -349,8 +357,8 @@ class AgentModificationTracker(BaseService): 
     | 
|
| 
       349 
357 
     | 
    
         
             
                        file_path=file_path,
         
     | 
| 
       350 
358 
     | 
    
         
             
                        timestamp=time.time(),
         
     | 
| 
       351 
359 
     | 
    
         
             
                        backup_path=backup_path,
         
     | 
| 
       352 
     | 
    
         
            -
                         
     | 
| 
       353 
     | 
    
         
            -
                        ** 
     | 
| 
      
 360 
     | 
    
         
            +
                        metadata=extra_metadata,
         
     | 
| 
      
 361 
     | 
    
         
            +
                        **filtered_metadata
         
     | 
| 
       354 
362 
     | 
    
         
             
                    )
         
     | 
| 
       355 
363 
     | 
    
         | 
| 
       356 
364 
     | 
    
         
             
                    # Validate modification if enabled
         
     | 
| 
         @@ -0,0 +1,94 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            #!/usr/bin/env python3
         
     | 
| 
      
 2 
     | 
    
         
            +
            """
         
     | 
| 
      
 3 
     | 
    
         
            +
            Agent Persistence Service (Stub)
         
     | 
| 
      
 4 
     | 
    
         
            +
            ================================
         
     | 
| 
      
 5 
     | 
    
         
            +
             
     | 
| 
      
 6 
     | 
    
         
            +
            WHY: This is a stub implementation to support the AgentLifecycleManager integration.
         
     | 
| 
      
 7 
     | 
    
         
            +
            The actual persistence is now handled by AgentManager, but we maintain this interface
         
     | 
| 
      
 8 
     | 
    
         
            +
            for backward compatibility.
         
     | 
| 
      
 9 
     | 
    
         
            +
             
     | 
| 
      
 10 
     | 
    
         
            +
            DESIGN DECISION: Creating a minimal stub because:
         
     | 
| 
      
 11 
     | 
    
         
            +
            - AgentManager handles the actual file persistence
         
     | 
| 
      
 12 
     | 
    
         
            +
            - This maintains the existing API contract
         
     | 
| 
      
 13 
     | 
    
         
            +
            - Allows for future extension if needed
         
     | 
| 
      
 14 
     | 
    
         
            +
            """
         
     | 
| 
      
 15 
     | 
    
         
            +
             
     | 
| 
      
 16 
     | 
    
         
            +
            from dataclasses import dataclass
         
     | 
| 
      
 17 
     | 
    
         
            +
            from enum import Enum
         
     | 
| 
      
 18 
     | 
    
         
            +
            from typing import Optional, Any, Dict
         
     | 
| 
      
 19 
     | 
    
         
            +
            import time
         
     | 
| 
      
 20 
     | 
    
         
            +
             
     | 
| 
      
 21 
     | 
    
         
            +
             
     | 
| 
      
 22 
     | 
    
         
            +
            class PersistenceStrategy(Enum):
         
     | 
| 
      
 23 
     | 
    
         
            +
                """Agent persistence strategies."""
         
     | 
| 
      
 24 
     | 
    
         
            +
                USER_OVERRIDE = "user_override"
         
     | 
| 
      
 25 
     | 
    
         
            +
                PROJECT_SPECIFIC = "project_specific"
         
     | 
| 
      
 26 
     | 
    
         
            +
                SYSTEM_DEFAULT = "system_default"
         
     | 
| 
      
 27 
     | 
    
         
            +
             
     | 
| 
      
 28 
     | 
    
         
            +
             
     | 
| 
      
 29 
     | 
    
         
            +
            class PersistenceOperation(Enum):
         
     | 
| 
      
 30 
     | 
    
         
            +
                """Persistence operation types."""
         
     | 
| 
      
 31 
     | 
    
         
            +
                CREATE = "create"
         
     | 
| 
      
 32 
     | 
    
         
            +
                UPDATE = "update"
         
     | 
| 
      
 33 
     | 
    
         
            +
                DELETE = "delete"
         
     | 
| 
      
 34 
     | 
    
         
            +
                BACKUP = "backup"
         
     | 
| 
      
 35 
     | 
    
         
            +
                RESTORE = "restore"
         
     | 
| 
      
 36 
     | 
    
         
            +
             
     | 
| 
      
 37 
     | 
    
         
            +
             
     | 
| 
      
 38 
     | 
    
         
            +
            @dataclass
         
     | 
| 
      
 39 
     | 
    
         
            +
            class PersistenceRecord:
         
     | 
| 
      
 40 
     | 
    
         
            +
                """Record of a persistence operation."""
         
     | 
| 
      
 41 
     | 
    
         
            +
                operation_id: str
         
     | 
| 
      
 42 
     | 
    
         
            +
                operation_type: PersistenceOperation
         
     | 
| 
      
 43 
     | 
    
         
            +
                agent_name: str
         
     | 
| 
      
 44 
     | 
    
         
            +
                source_tier: Any
         
     | 
| 
      
 45 
     | 
    
         
            +
                target_tier: Optional[Any] = None
         
     | 
| 
      
 46 
     | 
    
         
            +
                strategy: Optional[PersistenceStrategy] = None
         
     | 
| 
      
 47 
     | 
    
         
            +
                success: bool = True
         
     | 
| 
      
 48 
     | 
    
         
            +
                timestamp: float = 0.0
         
     | 
| 
      
 49 
     | 
    
         
            +
                file_path: Optional[str] = None
         
     | 
| 
      
 50 
     | 
    
         
            +
                error_message: Optional[str] = None
         
     | 
| 
      
 51 
     | 
    
         
            +
                metadata: Dict[str, Any] = None
         
     | 
| 
      
 52 
     | 
    
         
            +
             
     | 
| 
      
 53 
     | 
    
         
            +
             
     | 
| 
      
 54 
     | 
    
         
            +
            class AgentPersistenceService:
         
     | 
| 
      
 55 
     | 
    
         
            +
                """
         
     | 
| 
      
 56 
     | 
    
         
            +
                Stub implementation for agent persistence service.
         
     | 
| 
      
 57 
     | 
    
         
            +
                
         
     | 
| 
      
 58 
     | 
    
         
            +
                WHY: Maintains compatibility with AgentLifecycleManager while
         
     | 
| 
      
 59 
     | 
    
         
            +
                actual persistence is delegated to AgentManager.
         
     | 
| 
      
 60 
     | 
    
         
            +
                """
         
     | 
| 
      
 61 
     | 
    
         
            +
                
         
     | 
| 
      
 62 
     | 
    
         
            +
                def __init__(self):
         
     | 
| 
      
 63 
     | 
    
         
            +
                    """Initialize the persistence service."""
         
     | 
| 
      
 64 
     | 
    
         
            +
                    pass
         
     | 
| 
      
 65 
     | 
    
         
            +
                
         
     | 
| 
      
 66 
     | 
    
         
            +
                async def start(self) -> None:
         
     | 
| 
      
 67 
     | 
    
         
            +
                    """Start the persistence service."""
         
     | 
| 
      
 68 
     | 
    
         
            +
                    # No-op for stub
         
     | 
| 
      
 69 
     | 
    
         
            +
                    pass
         
     | 
| 
      
 70 
     | 
    
         
            +
                
         
     | 
| 
      
 71 
     | 
    
         
            +
                async def stop(self) -> None:
         
     | 
| 
      
 72 
     | 
    
         
            +
                    """Stop the persistence service."""
         
     | 
| 
      
 73 
     | 
    
         
            +
                    # No-op for stub
         
     | 
| 
      
 74 
     | 
    
         
            +
                    pass
         
     | 
| 
      
 75 
     | 
    
         
            +
                
         
     | 
| 
      
 76 
     | 
    
         
            +
                async def persist_agent(self, agent_name: str, agent_content: str,
         
     | 
| 
      
 77 
     | 
    
         
            +
                                       source_tier: Any, target_tier: Optional[Any] = None,
         
     | 
| 
      
 78 
     | 
    
         
            +
                                       strategy: Optional[PersistenceStrategy] = None) -> PersistenceRecord:
         
     | 
| 
      
 79 
     | 
    
         
            +
                    """
         
     | 
| 
      
 80 
     | 
    
         
            +
                    Create a persistence record (actual persistence handled by AgentManager).
         
     | 
| 
      
 81 
     | 
    
         
            +
                    
         
     | 
| 
      
 82 
     | 
    
         
            +
                    WHY: This method exists for API compatibility but doesn't perform
         
     | 
| 
      
 83 
     | 
    
         
            +
                    actual file operations since AgentManager handles that.
         
     | 
| 
      
 84 
     | 
    
         
            +
                    """
         
     | 
| 
      
 85 
     | 
    
         
            +
                    return PersistenceRecord(
         
     | 
| 
      
 86 
     | 
    
         
            +
                        operation_id=f"persist_{agent_name}_{time.time()}",
         
     | 
| 
      
 87 
     | 
    
         
            +
                        operation_type=PersistenceOperation.UPDATE,
         
     | 
| 
      
 88 
     | 
    
         
            +
                        agent_name=agent_name,
         
     | 
| 
      
 89 
     | 
    
         
            +
                        source_tier=source_tier,
         
     | 
| 
      
 90 
     | 
    
         
            +
                        target_tier=target_tier or source_tier,
         
     | 
| 
      
 91 
     | 
    
         
            +
                        strategy=strategy or PersistenceStrategy.USER_OVERRIDE,
         
     | 
| 
      
 92 
     | 
    
         
            +
                        success=True,
         
     | 
| 
      
 93 
     | 
    
         
            +
                        timestamp=time.time()
         
     | 
| 
      
 94 
     | 
    
         
            +
                    )
         
     | 
| 
         @@ -0,0 +1,37 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            """
         
     | 
| 
      
 2 
     | 
    
         
            +
            Agent Version Manager - Stub implementation for testing
         
     | 
| 
      
 3 
     | 
    
         
            +
            """
         
     | 
| 
      
 4 
     | 
    
         
            +
             
     | 
| 
      
 5 
     | 
    
         
            +
            class AgentVersionManager:
         
     | 
| 
      
 6 
     | 
    
         
            +
                """Stub implementation of AgentVersionManager for integration testing."""
         
     | 
| 
      
 7 
     | 
    
         
            +
                
         
     | 
| 
      
 8 
     | 
    
         
            +
                def __init__(self):
         
     | 
| 
      
 9 
     | 
    
         
            +
                    """Initialize version manager."""
         
     | 
| 
      
 10 
     | 
    
         
            +
                    pass
         
     | 
| 
      
 11 
     | 
    
         
            +
                
         
     | 
| 
      
 12 
     | 
    
         
            +
                def get_next_version(self, current_version: str, change_type: str = "patch") -> str:
         
     | 
| 
      
 13 
     | 
    
         
            +
                    """Get next version number."""
         
     | 
| 
      
 14 
     | 
    
         
            +
                    parts = current_version.split(".")
         
     | 
| 
      
 15 
     | 
    
         
            +
                    if len(parts) != 3:
         
     | 
| 
      
 16 
     | 
    
         
            +
                        return "1.0.0"
         
     | 
| 
      
 17 
     | 
    
         
            +
                    
         
     | 
| 
      
 18 
     | 
    
         
            +
                    major, minor, patch = map(int, parts)
         
     | 
| 
      
 19 
     | 
    
         
            +
                    
         
     | 
| 
      
 20 
     | 
    
         
            +
                    if change_type == "major":
         
     | 
| 
      
 21 
     | 
    
         
            +
                        return f"{major + 1}.0.0"
         
     | 
| 
      
 22 
     | 
    
         
            +
                    elif change_type == "minor":
         
     | 
| 
      
 23 
     | 
    
         
            +
                        return f"{major}.{minor + 1}.0"
         
     | 
| 
      
 24 
     | 
    
         
            +
                    else:  # patch
         
     | 
| 
      
 25 
     | 
    
         
            +
                        return f"{major}.{minor}.{patch + 1}"
         
     | 
| 
      
 26 
     | 
    
         
            +
                
         
     | 
| 
      
 27 
     | 
    
         
            +
                def validate_version(self, version: str) -> bool:
         
     | 
| 
      
 28 
     | 
    
         
            +
                    """Validate version format."""
         
     | 
| 
      
 29 
     | 
    
         
            +
                    try:
         
     | 
| 
      
 30 
     | 
    
         
            +
                        parts = version.split(".")
         
     | 
| 
      
 31 
     | 
    
         
            +
                        if len(parts) != 3:
         
     | 
| 
      
 32 
     | 
    
         
            +
                            return False
         
     | 
| 
      
 33 
     | 
    
         
            +
                        for part in parts:
         
     | 
| 
      
 34 
     | 
    
         
            +
                            int(part)
         
     | 
| 
      
 35 
     | 
    
         
            +
                        return True
         
     | 
| 
      
 36 
     | 
    
         
            +
                    except:
         
     | 
| 
      
 37 
     | 
    
         
            +
                        return False
         
     | 
| 
         @@ -1,8 +1,7 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            claude_mpm/__init__.py,sha256=TRneXzyApGyF7cRerpTn7aCbYLu-AJhPHjQf-dMBElQ,666
         
     | 
| 
       2 
     | 
    
         
            -
            claude_mpm/__main__.py,sha256= 
     | 
| 
       3 
     | 
    
         
            -
            claude_mpm/ 
     | 
| 
       4 
     | 
    
         
            -
            claude_mpm/ 
     | 
| 
       5 
     | 
    
         
            -
            claude_mpm/cli_main.py,sha256=KCAe-ws73NrIg5qmFhPdZ1a4uoiaEZ-lldYzQ6KfnJg,306
         
     | 
| 
      
 2 
     | 
    
         
            +
            claude_mpm/__main__.py,sha256=8IcM9tEbTqSN_er04eKTPX3AGo6qzRiTnPI7KfIf7rw,641
         
     | 
| 
      
 3 
     | 
    
         
            +
            claude_mpm/cli_enhancements.py,sha256=-N5f2u9TaxUcOJegUd3lt1FRz5ErEyYUvvgrNmMRL7Q,11814
         
     | 
| 
      
 4 
     | 
    
         
            +
            claude_mpm/cli_old.py,sha256=5GeRclnY-VNDaGnv7XUXDOniHZfACJ8HUYVUUXEHh9g,26340
         
     | 
| 
       6 
5 
     | 
    
         
             
            claude_mpm/constants.py,sha256=5AG5hgBxOC7gMNHDx0lAhS-FQ8gXhtGtqJ9Moj3S6ro,4044
         
     | 
| 
       7 
6 
     | 
    
         
             
            claude_mpm/init.py,sha256=gOreOf7BLXkT0_HrQk_As4Kz1OT_NJG_RG0i0hbY0z0,8088
         
     | 
| 
       8 
7 
     | 
    
         
             
            claude_mpm/agents/BASE_AGENT_TEMPLATE.md,sha256=TYgSd9jNBMWp4mAOBUl9dconX4RcGbvmMEScRy5uyko,3343
         
     | 
| 
         @@ -24,6 +23,7 @@ claude_mpm/agents/templates/ops.json,sha256=uxIu5Tyw-FsnV-RtT-hk2QSy9EJgesmK7eam 
     | 
|
| 
       24 
23 
     | 
    
         
             
            claude_mpm/agents/templates/qa.json,sha256=ByZw4FT1RW5sRoim2ouUPYipCi-6xI8LDaYEZ26lc6U,3076
         
     | 
| 
       25 
24 
     | 
    
         
             
            claude_mpm/agents/templates/research.json,sha256=omkijtxuVMFweqGa6OzGS8qy0Xrlr1WwfZq361-mQtk,9943
         
     | 
| 
       26 
25 
     | 
    
         
             
            claude_mpm/agents/templates/security.json,sha256=5RzIlGtRjPIVSKvH_jjx-hzPbjh0TP2SeDBw_7LyfEA,3118
         
     | 
| 
      
 26 
     | 
    
         
            +
            claude_mpm/agents/templates/test-integration-agent.md,sha256=xyauhBApzj8qD24E0G32BF-mPCrGKES1g5S4OWPUtgc,505
         
     | 
| 
       27 
27 
     | 
    
         
             
            claude_mpm/agents/templates/version_control.json,sha256=YPxSufd32PMFTyVzDkOteoS944r74MD3VIToYm4DRCE,3043
         
     | 
| 
       28 
28 
     | 
    
         
             
            claude_mpm/agents/templates/backup/data_engineer_agent_20250726_234551.json,sha256=lLso4RHXVTQmX4A1XwF84kT59zZDblPO1xCgBj4S4x8,5060
         
     | 
| 
       29 
29 
     | 
    
         
             
            claude_mpm/agents/templates/backup/documentation_agent_20250726_234551.json,sha256=snfJW2yW9aMv9ldCSIWW7zwnyoQRx5u7xLMkNlfus9I,2258
         
     | 
| 
         @@ -34,6 +34,16 @@ claude_mpm/agents/templates/backup/research_agent_20250726_234551.json,sha256=o4 
     | 
|
| 
       34 
34 
     | 
    
         
             
            claude_mpm/agents/templates/backup/security_agent_20250726_234551.json,sha256=l5YuD-27CxKSOsRLv0bDY_tCZyds0yGbeizLb8paeFY,2322
         
     | 
| 
       35 
35 
     | 
    
         
             
            claude_mpm/agents/templates/backup/version_control_agent_20250726_234551.json,sha256=too38RPTLJ9HutCMn0nfmEdCj2me241dx5tUYDFtu94,2143
         
     | 
| 
       36 
36 
     | 
    
         
             
            claude_mpm/agents/test_fix_deployment/.claude-pm/config/project.json,sha256=YZQgq2ri2_Y3qKzvPlC6TmzZKviDv0__GuyUOo1LbT8,146
         
     | 
| 
      
 37 
     | 
    
         
            +
            claude_mpm/cli/README.md,sha256=exe9V_UEsMSPXOMlvQUv5FsCuhUpPOsMvIhyDSyuFdI,3423
         
     | 
| 
      
 38 
     | 
    
         
            +
            claude_mpm/cli/__init__.py,sha256=gB5zDPjcHbW-I6Z5-zS0odgF0Qm4GRgSC2X2gUVRRcY,5255
         
     | 
| 
      
 39 
     | 
    
         
            +
            claude_mpm/cli/parser.py,sha256=GsyaMK2td3kPji-OLfNjfgIza2Qe4iEeq6Wr-sebVKc,10737
         
     | 
| 
      
 40 
     | 
    
         
            +
            claude_mpm/cli/utils.py,sha256=k_EHLcjDAzYhDeVeWvE-vqvHsEoG6Cc6Yk7fs3YoRVA,6022
         
     | 
| 
      
 41 
     | 
    
         
            +
            claude_mpm/cli/commands/__init__.py,sha256=3Exhq4RH-2Sq2ugwc9fFW3vDbzJgSu2JaoX01vXjdRE,454
         
     | 
| 
      
 42 
     | 
    
         
            +
            claude_mpm/cli/commands/agents.py,sha256=FqqEQcfAfCxjz_E7fGQUtLznloJLz8fWQtnjQhkbalQ,6795
         
     | 
| 
      
 43 
     | 
    
         
            +
            claude_mpm/cli/commands/info.py,sha256=ETL6jC08OTQVTPjs219Y0m3FzfKOUlI0-yI81AI8FXY,2990
         
     | 
| 
      
 44 
     | 
    
         
            +
            claude_mpm/cli/commands/run.py,sha256=6A-W4zBPFw1-TCHKFD6YhWuOqsG1zC0wvHJzByBS8a0,2946
         
     | 
| 
      
 45 
     | 
    
         
            +
            claude_mpm/cli/commands/tickets.py,sha256=SXyGtHSyGJwTeJwDAHf7kRbdiG1DlZkXkod5UoNy7Ik,2150
         
     | 
| 
      
 46 
     | 
    
         
            +
            claude_mpm/cli/commands/ui.py,sha256=FhBQiOKW61cNduyryRu0UhC366d6o1eEkBgbPd7Au1w,1900
         
     | 
| 
       37 
47 
     | 
    
         
             
            claude_mpm/cli_module/__init__.py,sha256=CkMp4gzWKoZZF_qKyBDi2sQaZw_GLWZYLtKouv-4f8s,390
         
     | 
| 
       38 
48 
     | 
    
         
             
            claude_mpm/cli_module/args.py,sha256=nilYpziBsoEySO4W1hQ2MRJyn9TFx3c3TrucyMMhRtk,7970
         
     | 
| 
       39 
49 
     | 
    
         
             
            claude_mpm/cli_module/commands.py,sha256=CBNfO-bXrZ0spjeW_7-swprEq5V4PQSc0qhl9SLP5UU,7168
         
     | 
| 
         @@ -59,7 +69,7 @@ claude_mpm/core/minimal_framework_loader.py,sha256=liYS4IyuW_aFK7yhRDZwTwT-3q09f 
     | 
|
| 
       59 
69 
     | 
    
         
             
            claude_mpm/core/mixins.py,sha256=rTEH-7FDpNiLB8oo6mSb0CLarJklv4fDJw1xM-gr5wI,5599
         
     | 
| 
       60 
70 
     | 
    
         
             
            claude_mpm/core/service_registry.py,sha256=wKJUO1g4UFA4dUpE3RkIYz1Ek8kIh4XfvU1kFeLCl2Q,10529
         
     | 
| 
       61 
71 
     | 
    
         
             
            claude_mpm/core/session_manager.py,sha256=3rO4KGZp8Qd_cUw6OWv4jyxGCUaL_MNPgCCpnwQt12A,6581
         
     | 
| 
       62 
     | 
    
         
            -
            claude_mpm/core/simple_runner.py,sha256= 
     | 
| 
      
 72 
     | 
    
         
            +
            claude_mpm/core/simple_runner.py,sha256=TVyzyzYHmvf7o_jpCKYGuLfuYReLcTc5Fkl1tZ_4tJw,26447
         
     | 
| 
       63 
73 
     | 
    
         
             
            claude_mpm/core/tool_access_control.py,sha256=htZbDhC8s7D7BVqfmk0BwRrYJnlnUAk8_NeJKOaeNlg,6632
         
     | 
| 
       64 
74 
     | 
    
         
             
            claude_mpm/generators/__init__.py,sha256=l53aBn6kBQSDz3b6bZkMCJBcEmYnV9hHEZq8LKzXgH8,152
         
     | 
| 
       65 
75 
     | 
    
         
             
            claude_mpm/generators/agent_profile_generator.py,sha256=2HjOscogSyvrtQj8KwdgNPS6Ym_QvgX1BMeauQZewZA,5751
         
     | 
| 
         @@ -80,6 +90,8 @@ claude_mpm/hooks/builtin/workflow_start_hook.py,sha256=EQrtYD9qLMLSYPl3oQinEheZA 
     | 
|
| 
       80 
90 
     | 
    
         
             
            claude_mpm/hooks/claude_hooks/__init__.py,sha256=bMUwt2RzDGAcEbtDMA7vWS1uJsauOY0OixIe4pHwgQ0,129
         
     | 
| 
       81 
91 
     | 
    
         
             
            claude_mpm/hooks/claude_hooks/hook_handler.py,sha256=FpmG0TfPTT-JL_dFdae-XVwNnvCvB6BJtRpT5PlZi7g,30538
         
     | 
| 
       82 
92 
     | 
    
         
             
            claude_mpm/hooks/claude_hooks/hook_wrapper.sh,sha256=6n0-G317jIrPuNRGnAyFvBbNM4gVzKEat_WSbpvKN-g,1742
         
     | 
| 
      
 93 
     | 
    
         
            +
            claude_mpm/models/__init__.py,sha256=vy2NLX2KT9QeH76SjCYh9dOYKPLRgxGrnwkQFAg08gc,465
         
     | 
| 
      
 94 
     | 
    
         
            +
            claude_mpm/models/agent_definition.py,sha256=y9XQOED_maOyiYKhNB8H8MfJJMBN0vIYPS_wCXnRJmA,6647
         
     | 
| 
       83 
95 
     | 
    
         
             
            claude_mpm/orchestration/SUBPROCESS_DESIGN.md,sha256=YwToiT1_NXblv1XIWhWPNc2uKzDvqY2E_Nix8qK7qk0,2136
         
     | 
| 
       84 
96 
     | 
    
         
             
            claude_mpm/orchestration/__init__.py,sha256=C-cwldtfBCgV19mKnJa5U1XiKw1rAZvx-kK61nIdcao,205
         
     | 
| 
       85 
97 
     | 
    
         
             
            claude_mpm/orchestration/archive/direct_orchestrator.py,sha256=j-IP-st-Xi9Xf33i-BLPZOE_kkxSZxNNuFZmp6MTuZY,7884
         
     | 
| 
         @@ -107,11 +119,13 @@ claude_mpm/scripts/ticket.py,sha256=GmFimtTJxc927cCzJvvJH3gvoxXQtAB-W-xnuclcvNs, 
     | 
|
| 
       107 
119 
     | 
    
         
             
            claude_mpm/services/__init__.py,sha256=-EBm07Lh9mjcofiQHCqyCCQJMLi9akVArPlz8i_kEOo,226
         
     | 
| 
       108 
120 
     | 
    
         
             
            claude_mpm/services/agent_capabilities_generator.py,sha256=hWG0zV2InmzrDMxSbQzjVBBTzEaxg0bFxl8tmTMJ8qA,6565
         
     | 
| 
       109 
121 
     | 
    
         
             
            claude_mpm/services/agent_deployment.py,sha256=DtK1BX2yCrutUkQdVPD01mYHm-ya36l3EPOnEcaDfog,67961
         
     | 
| 
       110 
     | 
    
         
            -
            claude_mpm/services/agent_lifecycle_manager.py,sha256= 
     | 
| 
      
 122 
     | 
    
         
            +
            claude_mpm/services/agent_lifecycle_manager.py,sha256=fWggWu5rT7FkDQrRHyw05Y4KaNN9cXeaCinsymPJwM4,50127
         
     | 
| 
       111 
123 
     | 
    
         
             
            claude_mpm/services/agent_management_service.py,sha256=eX5n6w17b9urcogVdr4V-kXcuo7yyjORTrIihjF8PeQ,22853
         
     | 
| 
       112 
     | 
    
         
            -
            claude_mpm/services/agent_modification_tracker.py,sha256= 
     | 
| 
      
 124 
     | 
    
         
            +
            claude_mpm/services/agent_modification_tracker.py,sha256=uxELrXtFt5Xlv0mhRbq5ynagEowczTRrv3mAp-aRZFc,34519
         
     | 
| 
      
 125 
     | 
    
         
            +
            claude_mpm/services/agent_persistence_service.py,sha256=B_Vz43zCKWq47zWkoibcia-Qwn2y3gARu7MV5Cpiptc,2893
         
     | 
| 
       113 
126 
     | 
    
         
             
            claude_mpm/services/agent_profile_loader.py,sha256=4D1Xj0vgqV8wN7Y3r8lijh7ghy5cVGU5t5s931sVqGc,23133
         
     | 
| 
       114 
127 
     | 
    
         
             
            claude_mpm/services/agent_registry.py,sha256=vn8CEW0vppj_0EY2NofmNRZEnpV70mlWiX2kAViFDRg,24374
         
     | 
| 
      
 128 
     | 
    
         
            +
            claude_mpm/services/agent_versioning.py,sha256=y4SiKGKdTn-9_Ht6nGlmKGJW6MLgEHZUy5SR1OPTZZM,1108
         
     | 
| 
       115 
129 
     | 
    
         
             
            claude_mpm/services/base_agent_manager.py,sha256=WEcfzdMaFXmXUSoEYEPNeGu8dvqjIv53zyUU0ITrhsM,14987
         
     | 
| 
       116 
130 
     | 
    
         
             
            claude_mpm/services/deployed_agent_discovery.py,sha256=GoXhho5EBz_FZDDl4xUWW_BnP3hfymbV1ePorRrhO_U,9443
         
     | 
| 
       117 
131 
     | 
    
         
             
            claude_mpm/services/framework_agent_loader.py,sha256=QdRSYRurYF3YbAXJwIGei71BffD5AqOVcV3ktRPdk7g,14018
         
     | 
| 
         @@ -171,9 +185,9 @@ claude_mpm/utils/path_operations.py,sha256=6pLMnAWBVzHkgp6JyQHmHbGD-dWn-nX21yV4E 
     | 
|
| 
       171 
185 
     | 
    
         
             
            claude_mpm/utils/paths.py,sha256=Xv0SZWdZRkRjN9e6clBcA165ya00GNQxt7SwMz51tfA,10153
         
     | 
| 
       172 
186 
     | 
    
         
             
            claude_mpm/validation/__init__.py,sha256=bJ19g9lnk7yIjtxzN8XPegp87HTFBzCrGQOpFgRTf3g,155
         
     | 
| 
       173 
187 
     | 
    
         
             
            claude_mpm/validation/agent_validator.py,sha256=GCA2b2rKhKDeaNyUqWxTiWIs3sDdWjD9cgOFRp9K6ic,18227
         
     | 
| 
       174 
     | 
    
         
            -
            claude_mpm-3.1. 
     | 
| 
       175 
     | 
    
         
            -
            claude_mpm-3.1. 
     | 
| 
       176 
     | 
    
         
            -
            claude_mpm-3.1. 
     | 
| 
       177 
     | 
    
         
            -
            claude_mpm-3.1. 
     | 
| 
       178 
     | 
    
         
            -
            claude_mpm-3.1. 
     | 
| 
       179 
     | 
    
         
            -
            claude_mpm-3.1. 
     | 
| 
      
 188 
     | 
    
         
            +
            claude_mpm-3.1.2.dist-info/licenses/LICENSE,sha256=cSdDfXjoTVhstrERrqme4zgxAu4GubU22zVEHsiXGxs,1071
         
     | 
| 
      
 189 
     | 
    
         
            +
            claude_mpm-3.1.2.dist-info/METADATA,sha256=C7fZn0Mcw9CZtmtJox-mWaqGZGrktZPpLAtYhp53j8c,14139
         
     | 
| 
      
 190 
     | 
    
         
            +
            claude_mpm-3.1.2.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
         
     | 
| 
      
 191 
     | 
    
         
            +
            claude_mpm-3.1.2.dist-info/entry_points.txt,sha256=PknO31um7d8bt6GjOiVeYpdJpjND0_C1z-LQfY6UfiU,142
         
     | 
| 
      
 192 
     | 
    
         
            +
            claude_mpm-3.1.2.dist-info/top_level.txt,sha256=1nUg3FEaBySgm8t-s54jK5zoPnu3_eY6EP6IOlekyHA,11
         
     | 
| 
      
 193 
     | 
    
         
            +
            claude_mpm-3.1.2.dist-info/RECORD,,
         
     | 
    
        claude_mpm/cli_main.py
    DELETED
    
    | 
         @@ -1,13 +0,0 @@ 
     | 
|
| 
       1 
     | 
    
         
            -
            """Main entry point for CLI that can be run directly."""
         
     | 
| 
       2 
     | 
    
         
            -
             
     | 
| 
       3 
     | 
    
         
            -
            import sys
         
     | 
| 
       4 
     | 
    
         
            -
            from pathlib import Path
         
     | 
| 
       5 
     | 
    
         
            -
             
     | 
| 
       6 
     | 
    
         
            -
            # Add src directory to path so claude_mpm can be imported
         
     | 
| 
       7 
     | 
    
         
            -
            src_dir = Path(__file__).parent.parent
         
     | 
| 
       8 
     | 
    
         
            -
            sys.path.insert(0, str(src_dir))
         
     | 
| 
       9 
     | 
    
         
            -
             
     | 
| 
       10 
     | 
    
         
            -
            from claude_mpm.cli import main
         
     | 
| 
       11 
     | 
    
         
            -
             
     | 
| 
       12 
     | 
    
         
            -
            if __name__ == "__main__":
         
     | 
| 
       13 
     | 
    
         
            -
                sys.exit(main())
         
     | 
| 
         
            File without changes
         
     | 
| 
         
            File without changes
         
     | 
| 
         
            File without changes
         
     | 
| 
         
            File without changes
         
     | 
| 
         
            File without changes
         
     |