claude-mpm 1.0.0__py3-none-any.whl → 2.0.0__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.
Files changed (59) hide show
  1. claude_mpm/_version.py +4 -2
  2. claude_mpm/agents/INSTRUCTIONS.md +117 -312
  3. claude_mpm/agents/__init__.py +2 -2
  4. claude_mpm/agents/agent-template.yaml +83 -0
  5. claude_mpm/agents/agent_loader.py +192 -310
  6. claude_mpm/agents/base_agent.json +1 -1
  7. claude_mpm/agents/base_agent_loader.py +10 -15
  8. claude_mpm/agents/templates/backup/data_engineer_agent_20250726_234551.json +46 -0
  9. claude_mpm/agents/templates/{engineer_agent.json → backup/engineer_agent_20250726_234551.json} +1 -1
  10. claude_mpm/agents/templates/data_engineer.json +107 -0
  11. claude_mpm/agents/templates/documentation.json +106 -0
  12. claude_mpm/agents/templates/engineer.json +110 -0
  13. claude_mpm/agents/templates/ops.json +106 -0
  14. claude_mpm/agents/templates/qa.json +106 -0
  15. claude_mpm/agents/templates/research.json +107 -0
  16. claude_mpm/agents/templates/security.json +105 -0
  17. claude_mpm/agents/templates/version_control.json +103 -0
  18. claude_mpm/cli.py +41 -47
  19. claude_mpm/cli_enhancements.py +297 -0
  20. claude_mpm/core/factories.py +1 -46
  21. claude_mpm/core/service_registry.py +0 -8
  22. claude_mpm/core/simple_runner.py +43 -0
  23. claude_mpm/generators/__init__.py +5 -0
  24. claude_mpm/generators/agent_profile_generator.py +137 -0
  25. claude_mpm/hooks/README.md +75 -221
  26. claude_mpm/hooks/builtin/mpm_command_hook.py +125 -0
  27. claude_mpm/hooks/claude_hooks/__init__.py +5 -0
  28. claude_mpm/hooks/claude_hooks/hook_handler.py +399 -0
  29. claude_mpm/hooks/claude_hooks/hook_wrapper.sh +47 -0
  30. claude_mpm/hooks/validation_hooks.py +181 -0
  31. claude_mpm/schemas/agent_schema.json +328 -0
  32. claude_mpm/services/agent_management_service.py +4 -4
  33. claude_mpm/services/agent_profile_loader.py +1 -1
  34. claude_mpm/services/agent_registry.py +0 -1
  35. claude_mpm/services/base_agent_manager.py +3 -3
  36. claude_mpm/utils/error_handler.py +247 -0
  37. claude_mpm/validation/__init__.py +5 -0
  38. claude_mpm/validation/agent_validator.py +302 -0
  39. {claude_mpm-1.0.0.dist-info → claude_mpm-2.0.0.dist-info}/METADATA +133 -22
  40. {claude_mpm-1.0.0.dist-info → claude_mpm-2.0.0.dist-info}/RECORD +49 -37
  41. claude_mpm/agents/templates/data_engineer_agent.json +0 -46
  42. claude_mpm/agents/templates/update-optimized-specialized-agents.json +0 -374
  43. claude_mpm/config/hook_config.py +0 -42
  44. claude_mpm/hooks/hook_client.py +0 -264
  45. claude_mpm/hooks/hook_runner.py +0 -370
  46. claude_mpm/hooks/json_rpc_executor.py +0 -259
  47. claude_mpm/hooks/json_rpc_hook_client.py +0 -319
  48. claude_mpm/services/hook_service.py +0 -388
  49. claude_mpm/services/hook_service_manager.py +0 -223
  50. claude_mpm/services/json_rpc_hook_manager.py +0 -92
  51. /claude_mpm/agents/templates/{documentation_agent.json → backup/documentation_agent_20250726_234551.json} +0 -0
  52. /claude_mpm/agents/templates/{ops_agent.json → backup/ops_agent_20250726_234551.json} +0 -0
  53. /claude_mpm/agents/templates/{qa_agent.json → backup/qa_agent_20250726_234551.json} +0 -0
  54. /claude_mpm/agents/templates/{research_agent.json → backup/research_agent_20250726_234551.json} +0 -0
  55. /claude_mpm/agents/templates/{security_agent.json → backup/security_agent_20250726_234551.json} +0 -0
  56. /claude_mpm/agents/templates/{version_control_agent.json → backup/version_control_agent_20250726_234551.json} +0 -0
  57. {claude_mpm-1.0.0.dist-info → claude_mpm-2.0.0.dist-info}/WHEEL +0 -0
  58. {claude_mpm-1.0.0.dist-info → claude_mpm-2.0.0.dist-info}/entry_points.txt +0 -0
  59. {claude_mpm-1.0.0.dist-info → claude_mpm-2.0.0.dist-info}/top_level.txt +0 -0
@@ -0,0 +1,302 @@
1
+ """
2
+ Agent validation framework using JSON Schema validation.
3
+
4
+ This module provides comprehensive validation for agent configurations
5
+ using the standardized JSON schema with direct validation approach.
6
+ """
7
+
8
+ import json
9
+ import logging
10
+ from pathlib import Path
11
+ from typing import Dict, List, Optional, Any, Tuple
12
+ from dataclasses import dataclass, field
13
+ from datetime import datetime
14
+ import jsonschema
15
+ from jsonschema import validate, ValidationError, Draft7Validator
16
+
17
+ logger = logging.getLogger(__name__)
18
+
19
+
20
+ @dataclass
21
+ class ValidationResult:
22
+ """Result of agent validation."""
23
+ is_valid: bool
24
+ errors: List[str] = field(default_factory=list)
25
+ warnings: List[str] = field(default_factory=list)
26
+ metadata: Dict[str, Any] = field(default_factory=dict)
27
+
28
+
29
+ class AgentValidator:
30
+ """Validates agent configurations against JSON schema."""
31
+
32
+ def __init__(self, schema_path: Optional[Path] = None):
33
+ """Initialize the validator with the agent schema."""
34
+ if schema_path is None:
35
+ schema_path = Path(__file__).parent.parent / "schemas" / "agent_schema.json"
36
+
37
+ self.schema_path = schema_path
38
+ self.schema = self._load_schema()
39
+ self.validator = Draft7Validator(self.schema)
40
+
41
+ def _load_schema(self) -> Dict[str, Any]:
42
+ """Load the JSON schema from file."""
43
+ try:
44
+ with open(self.schema_path, 'r') as f:
45
+ return json.load(f)
46
+ except Exception as e:
47
+ logger.error(f"Failed to load schema from {self.schema_path}: {e}")
48
+ raise
49
+
50
+ def validate_agent(self, agent_data: Dict[str, Any]) -> ValidationResult:
51
+ """
52
+ Validate a single agent configuration against the schema.
53
+
54
+ Args:
55
+ agent_data: Agent configuration dictionary
56
+
57
+ Returns:
58
+ ValidationResult with validation status and any errors/warnings
59
+ """
60
+ result = ValidationResult(is_valid=True)
61
+
62
+ # Perform JSON schema validation
63
+ try:
64
+ validate(instance=agent_data, schema=self.schema)
65
+ except ValidationError as e:
66
+ result.is_valid = False
67
+ result.errors.append(f"Schema validation error: {e.message}")
68
+
69
+ # Add path information if available
70
+ if e.path:
71
+ path = ".".join(str(p) for p in e.path)
72
+ result.errors.append(f"Error at path: {path}")
73
+
74
+ # Additional business rule validations
75
+ if result.is_valid:
76
+ self._validate_business_rules(agent_data, result)
77
+
78
+ # Add metadata
79
+ result.metadata = {
80
+ "validated_at": datetime.utcnow().isoformat(),
81
+ "schema_version": self.schema.get("version", "1.0.0"),
82
+ "agent_id": agent_data.get("id", "unknown")
83
+ }
84
+
85
+ return result
86
+
87
+ def _validate_business_rules(self, agent_data: Dict[str, Any], result: ValidationResult) -> None:
88
+ """Apply additional business rule validations beyond schema."""
89
+
90
+ # Validate resource tier consistency
91
+ resource_tier = agent_data.get("capabilities", {}).get("resource_tier")
92
+ if resource_tier:
93
+ self._validate_resource_tier_limits(agent_data, resource_tier, result)
94
+
95
+ # Validate instruction length (double-check)
96
+ instructions = agent_data.get("instructions", "")
97
+ if len(instructions) > 8000:
98
+ result.errors.append(f"Instructions exceed 8000 character limit: {len(instructions)} characters")
99
+ result.is_valid = False
100
+
101
+ # Validate model compatibility with tools
102
+ self._validate_model_tool_compatibility(agent_data, result)
103
+
104
+ # Validate agent ID format (clean IDs without _agent suffix)
105
+ agent_id = agent_data.get("id", "")
106
+ if agent_id.endswith("_agent"):
107
+ result.warnings.append(f"Agent ID '{agent_id}' contains deprecated '_agent' suffix")
108
+
109
+ # Validate handoff agents exist
110
+ handoff_agents = agent_data.get("interactions", {}).get("handoff_agents", [])
111
+ for handoff_id in handoff_agents:
112
+ if handoff_id == agent_id:
113
+ result.warnings.append(f"Agent '{agent_id}' references itself in handoff_agents")
114
+
115
+ def _validate_resource_tier_limits(self, agent_data: Dict[str, Any], tier: str, result: ValidationResult) -> None:
116
+ """Validate resource limits match the tier constraints."""
117
+ tier_limits = {
118
+ "intensive": {
119
+ "memory_limit": (4096, 8192),
120
+ "cpu_limit": (60, 100),
121
+ "timeout": (600, 3600)
122
+ },
123
+ "standard": {
124
+ "memory_limit": (2048, 4096),
125
+ "cpu_limit": (30, 60),
126
+ "timeout": (300, 1200)
127
+ },
128
+ "lightweight": {
129
+ "memory_limit": (512, 2048),
130
+ "cpu_limit": (10, 30),
131
+ "timeout": (30, 600)
132
+ }
133
+ }
134
+
135
+ if tier not in tier_limits:
136
+ return
137
+
138
+ limits = tier_limits[tier]
139
+ capabilities = agent_data.get("capabilities", {})
140
+
141
+ # Check memory limit
142
+ memory = capabilities.get("memory_limit")
143
+ if memory is not None:
144
+ min_mem, max_mem = limits["memory_limit"]
145
+ if not (min_mem <= memory <= max_mem):
146
+ result.warnings.append(
147
+ f"Memory limit {memory}MB outside recommended range "
148
+ f"{min_mem}-{max_mem}MB for tier '{tier}'"
149
+ )
150
+
151
+ # Check CPU limit
152
+ cpu = capabilities.get("cpu_limit")
153
+ if cpu is not None:
154
+ min_cpu, max_cpu = limits["cpu_limit"]
155
+ if not (min_cpu <= cpu <= max_cpu):
156
+ result.warnings.append(
157
+ f"CPU limit {cpu}% outside recommended range "
158
+ f"{min_cpu}-{max_cpu}% for tier '{tier}'"
159
+ )
160
+
161
+ # Check timeout
162
+ timeout = capabilities.get("timeout")
163
+ if timeout is not None:
164
+ min_timeout, max_timeout = limits["timeout"]
165
+ if not (min_timeout <= timeout <= max_timeout):
166
+ result.warnings.append(
167
+ f"Timeout {timeout}s outside recommended range "
168
+ f"{min_timeout}-{max_timeout}s for tier '{tier}'"
169
+ )
170
+
171
+ def _validate_model_tool_compatibility(self, agent_data: Dict[str, Any], result: ValidationResult) -> None:
172
+ """Validate that model and tools are compatible."""
173
+ model = agent_data.get("capabilities", {}).get("model", "")
174
+ tools = agent_data.get("capabilities", {}).get("tools", [])
175
+
176
+ # Haiku models shouldn't use resource-intensive tools
177
+ if "haiku" in model.lower():
178
+ intensive_tools = {"docker", "kubectl", "terraform", "aws", "gcloud", "azure"}
179
+ used_intensive = set(tools) & intensive_tools
180
+ if used_intensive:
181
+ result.warnings.append(
182
+ f"Haiku model '{model}' using resource-intensive tools: {used_intensive}"
183
+ )
184
+
185
+ # Network access requirement
186
+ network_tools = {"WebSearch", "WebFetch", "aws", "gcloud", "azure"}
187
+ needs_network = bool(set(tools) & network_tools)
188
+ has_network = agent_data.get("capabilities", {}).get("network_access", False)
189
+
190
+ if needs_network and not has_network:
191
+ result.warnings.append(
192
+ f"Agent uses network tools {set(tools) & network_tools} but network_access is False"
193
+ )
194
+
195
+ def validate_file(self, file_path: Path) -> ValidationResult:
196
+ """Validate an agent configuration file."""
197
+ try:
198
+ with open(file_path, 'r') as f:
199
+ agent_data = json.load(f)
200
+
201
+ result = self.validate_agent(agent_data)
202
+ result.metadata["file_path"] = str(file_path)
203
+ return result
204
+
205
+ except json.JSONDecodeError as e:
206
+ result = ValidationResult(is_valid=False)
207
+ result.errors.append(f"Invalid JSON in {file_path}: {e}")
208
+ return result
209
+ except Exception as e:
210
+ result = ValidationResult(is_valid=False)
211
+ result.errors.append(f"Error reading {file_path}: {e}")
212
+ return result
213
+
214
+ def validate_directory(self, directory: Path) -> Dict[str, ValidationResult]:
215
+ """Validate all agent files in a directory."""
216
+ results = {}
217
+
218
+ for json_file in directory.glob("*.json"):
219
+ if json_file.name == "agent_schema.json":
220
+ continue
221
+
222
+ logger.info(f"Validating {json_file}")
223
+ results[json_file.name] = self.validate_file(json_file)
224
+
225
+ return results
226
+
227
+ def get_schema_info(self) -> Dict[str, Any]:
228
+ """Get information about the loaded schema."""
229
+ return {
230
+ "schema_path": str(self.schema_path),
231
+ "schema_title": self.schema.get("title", "Unknown"),
232
+ "schema_description": self.schema.get("description", ""),
233
+ "required_fields": self.schema.get("required", []),
234
+ "properties": list(self.schema.get("properties", {}).keys())
235
+ }
236
+
237
+
238
+ def validate_agent_migration(old_agent: Dict[str, Any], new_agent: Dict[str, Any]) -> ValidationResult:
239
+ """
240
+ Validate that a migrated agent maintains compatibility.
241
+
242
+ Args:
243
+ old_agent: Original agent configuration
244
+ new_agent: Migrated agent configuration
245
+
246
+ Returns:
247
+ ValidationResult with migration validation results
248
+ """
249
+ result = ValidationResult(is_valid=True)
250
+
251
+ # Check that core functionality is preserved
252
+ old_tools = set(old_agent.get("configuration_fields", {}).get("tools", []))
253
+ new_tools = set(new_agent.get("capabilities", {}).get("tools", []))
254
+
255
+ if old_tools != new_tools:
256
+ missing = old_tools - new_tools
257
+ added = new_tools - old_tools
258
+ if missing:
259
+ result.warnings.append(f"Tools removed in migration: {missing}")
260
+ if added:
261
+ result.warnings.append(f"Tools added in migration: {added}")
262
+
263
+ # Check instruction preservation
264
+ old_instructions = old_agent.get("narrative_fields", {}).get("instructions", "")
265
+ new_instructions = new_agent.get("instructions", "")
266
+
267
+ if old_instructions and not new_instructions:
268
+ result.errors.append("Instructions lost in migration")
269
+ result.is_valid = False
270
+ elif len(old_instructions) > len(new_instructions) * 1.1: # Allow 10% reduction
271
+ result.warnings.append("Significant instruction content reduction in migration")
272
+
273
+ return result
274
+
275
+
276
+ # Convenience functions
277
+ def validate_agent_file(file_path: Path) -> ValidationResult:
278
+ """Validate a single agent file."""
279
+ validator = AgentValidator()
280
+ return validator.validate_file(file_path)
281
+
282
+
283
+ def validate_all_agents(directory: Path) -> Tuple[int, int, List[str]]:
284
+ """
285
+ Validate all agents in a directory and return summary.
286
+
287
+ Returns:
288
+ Tuple of (valid_count, invalid_count, error_messages)
289
+ """
290
+ validator = AgentValidator()
291
+ results = validator.validate_directory(directory)
292
+
293
+ valid_count = sum(1 for r in results.values() if r.is_valid)
294
+ invalid_count = len(results) - valid_count
295
+
296
+ error_messages = []
297
+ for filename, result in results.items():
298
+ if not result.is_valid:
299
+ for error in result.errors:
300
+ error_messages.append(f"{filename}: {error}")
301
+
302
+ return valid_count, invalid_count, error_messages
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: claude-mpm
3
- Version: 1.0.0
3
+ Version: 2.0.0
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
@@ -44,8 +44,106 @@ Dynamic: requires-python
44
44
 
45
45
  # Claude MPM - Multi-Agent Project Manager
46
46
 
47
+ > **Note**: This project is a fork of [claude-multiagent-pm](https://github.com/kfsone/claude-multiagent-pm), enhanced to integrate with [Claude Code](https://docs.anthropic.com/en/docs/claude-code) v1.0.60+'s native agent system. This integration enables seamless orchestration of Claude Code's built-in agents (research, engineer, qa, documentation, security, ops, version_control, data_engineer) through a unified project management interface.
48
+
49
+ > **⚠️ Version 2.0.0 Breaking Changes**: Agent schema has been standardized. Agent IDs no longer use the `_agent` suffix (e.g., `research_agent` → `research`). See the [migration guide](docs/user/05-migration/schema-standardization-migration.md) for details.
50
+
47
51
  A framework for Claude that enables multi-agent workflows and extensible capabilities through a modular architecture.
48
52
 
53
+ ## Quick Start
54
+
55
+ ### Why Interactive Mode?
56
+ **Interactive mode is significantly more performant** than non-interactive commands. It maintains context between requests and avoids the overhead of repeatedly launching Claude, making your development workflow much faster and more efficient.
57
+
58
+ ### Installation
59
+
60
+ ```bash
61
+ # Install globally via npm (recommended)
62
+ npm install -g @bobmatnyc/claude-mpm
63
+
64
+ # Or use npx for one-time usage
65
+ npx @bobmatnyc/claude-mpm
66
+ ```
67
+
68
+ ### Three Essential Use Cases
69
+
70
+ #### 1. 🔍 **Understand Your Codebase**
71
+ Start with codebase exploration - perfect for onboarding or getting oriented:
72
+
73
+ ```bash
74
+ # Launch interactive mode
75
+ claude-mpm
76
+
77
+ # Then ask:
78
+ > Explain the codebase structure. What are the main components, how do they interact, and what architectural patterns are used?
79
+ ```
80
+
81
+ #### 2. 🚀 **Build a New Project**
82
+ For greenfield development, use detailed, AI-generated prompts for best results:
83
+
84
+ ```bash
85
+ claude-mpm
86
+
87
+ # Example detailed prompt (AI-generated prompts work best):
88
+ > Create a modern web application with the following requirements:
89
+ > - Next.js 14 with TypeScript and Tailwind CSS
90
+ > - Authentication using NextAuth.js with GitHub provider
91
+ > - PostgreSQL database with Prisma ORM
92
+ > - User dashboard with CRUD operations for "projects"
93
+ > - API routes following REST conventions
94
+ > - Responsive design with dark/light mode toggle
95
+ > - Form validation using react-hook-form and zod
96
+ > - Include proper error handling and loading states
97
+ > - Set up ESLint, Prettier, and basic testing with Jest
98
+ > - Generate a complete project structure with all necessary files
99
+ ```
100
+
101
+ #### 3. 🔧 **Enhance Existing Code**
102
+ For working on your current codebase, provide rich context:
103
+
104
+ ```bash
105
+ claude-mpm
106
+
107
+ # Example detailed enhancement prompt:
108
+ > I need to add real-time notifications to my existing Next.js application. Current tech stack:
109
+ > - Next.js 13 with app router
110
+ > - TypeScript
111
+ > - Tailwind CSS
112
+ > - PostgreSQL with Prisma
113
+ > - User authentication already implemented
114
+ >
115
+ > Requirements:
116
+ > - WebSocket-based real-time notifications
117
+ > - Toast notifications in the UI
118
+ > - Database table to store notification history
119
+ > - Mark as read/unread functionality
120
+ > - Different notification types (info, warning, success, error)
121
+ > - Admin panel to send system-wide notifications
122
+ > - Email fallback for offline users
123
+ >
124
+ > Please analyze my current codebase structure and implement this feature following my existing patterns and conventions.
125
+ ```
126
+
127
+ ### 💡 Pro Tips for Better Results
128
+
129
+ 1. **Use AI to generate your prompts**: Ask ChatGPT or Claude to help you create detailed, specific prompts for your use case
130
+ 2. **Provide context**: Include your tech stack, requirements, and any constraints
131
+ 3. **Stay interactive**: Keep the conversation going to refine and iterate on solutions
132
+ 4. **Ask for explanations**: Request explanations of architectural decisions and trade-offs
133
+
134
+ ### Alternative: Non-Interactive Mode
135
+ For automation or simple one-off tasks:
136
+
137
+ ```bash
138
+ # Quick analysis
139
+ claude-mpm run -i "What testing frameworks are used in this project?" --non-interactive
140
+
141
+ # With subprocess orchestration for complex tasks
142
+ claude-mpm run --subprocess -i "Audit this codebase for security vulnerabilities" --non-interactive
143
+ ```
144
+
145
+ **Note**: Non-interactive mode has higher overhead and is less efficient for multi-step development workflows.
146
+
49
147
 
50
148
  ## 📚 Documentation
51
149
 
@@ -117,17 +215,45 @@ Claude MPM provides a modular framework for extending Claude's capabilities:
117
215
 
118
216
  ## Installation
119
217
 
120
- ### From Source
218
+ ### Other Installation Methods
219
+
220
+ #### Using UV (Recommended - Fast)
221
+ UV is a lightning-fast Python package manager written in Rust, offering 10-100x speed improvements over pip.
222
+
223
+ ```bash
224
+ # Install UV (if not already installed)
225
+ curl -LsSf https://astral.sh/uv/install.sh | sh
226
+
227
+ # Install claude-mpm with UV
228
+ uv pip install claude-mpm
229
+
230
+ # Or install from git
231
+ uv pip install git+https://github.com/bobmatnyc/claude-mpm.git
232
+ ```
233
+
234
+ #### Using pip (Traditional)
235
+ ```bash
236
+ # Install from PyPI
237
+ pip install claude-mpm
238
+
239
+ # Or install from git
240
+ pip install git+https://github.com/bobmatnyc/claude-mpm.git
241
+ ```
242
+
243
+ ### From Source (Development)
121
244
 
122
245
  ```bash
123
246
  # Clone the repository
124
- git clone https://github.com/yourusername/claude-mpm.git
247
+ git clone https://github.com/bobmatnyc/claude-mpm.git
125
248
  cd claude-mpm
126
249
 
127
- # Run development installation script
128
- ./install_dev.sh
250
+ # Option A: Using UV (Recommended - Much faster)
251
+ uv venv
252
+ source venv/bin/activate # On Windows: venv\Scripts\activate
253
+ uv pip install -e .
129
254
 
130
- # Activate virtual environment
255
+ # Option B: Traditional approach
256
+ ./install_dev.sh
131
257
  source venv/bin/activate
132
258
  ```
133
259
 
@@ -135,7 +261,7 @@ source venv/bin/activate
135
261
 
136
262
  #### Core Requirements
137
263
  - Python 3.8+
138
- - Claude CLI (must be installed and in PATH)
264
+ - Claude Code CLI 1.0.60+ (must be installed and in PATH)
139
265
 
140
266
  #### Automatically Installed
141
267
  - tree-sitter & language packs (for code analysis)
@@ -181,21 +307,6 @@ Commands:
181
307
  info Show framework and configuration info
182
308
  ```
183
309
 
184
- ## Quick Start
185
-
186
- ```bash
187
- # 1. Clone and install
188
- git clone https://github.com/yourusername/claude-mpm.git
189
- cd claude-mpm
190
- ./install_dev.sh
191
- source venv/bin/activate
192
-
193
- # 2. Run interactive session
194
- claude-mpm
195
-
196
- # 3. Or run a single command
197
- claude-mpm run -i "Explain the codebase structure" --non-interactive
198
- ```
199
310
 
200
311
 
201
312
  ## Architecture
@@ -1,30 +1,39 @@
1
1
  claude_mpm/__init__.py,sha256=sAbTZkHe3vWYAKDWdGyGVue5zwLD7nCOHZwZrLALM8A,395
2
2
  claude_mpm/__main__.py,sha256=smBw-5J3nf5s6GgQjj384GUr28YotIX-WNOxqpP0wnE,310
3
- claude_mpm/_version.py,sha256=n7VdPKEcovT2OwODlqBHlbkfj1OEIRsPXhFaCt3nRss,1206
4
- claude_mpm/cli.py,sha256=jQ9w3AqIF_6XHJk4D4NWL5Fo0jNS0wpmfekNlzudSSg,23666
3
+ claude_mpm/_version.py,sha256=Ng-R0tLTmF6GT0YoJek11nrB3KB8c3Q4YfYsQ_cKXvw,1394
4
+ claude_mpm/cli.py,sha256=EgzmFR-6njXedJUtMrWY0o-QAezsY3fc8uObehDDPMw,23164
5
+ claude_mpm/cli_enhancements.py,sha256=nwdOrbXITRqvcq_vrJtPKW1GDS7dLIG4UqjoUet2vR0,10890
5
6
  claude_mpm/cli_main.py,sha256=KCAe-ws73NrIg5qmFhPdZ1a4uoiaEZ-lldYzQ6KfnJg,306
6
7
  claude_mpm/constants.py,sha256=5AG5hgBxOC7gMNHDx0lAhS-FQ8gXhtGtqJ9Moj3S6ro,4044
7
8
  claude_mpm/init.py,sha256=gOreOf7BLXkT0_HrQk_As4Kz1OT_NJG_RG0i0hbY0z0,8088
8
9
  claude_mpm/agents/BASE_AGENT_TEMPLATE.md,sha256=TYgSd9jNBMWp4mAOBUl9dconX4RcGbvmMEScRy5uyko,3343
9
- claude_mpm/agents/INSTRUCTIONS.md,sha256=FuLq0cBjUjqByA9rdi1H_3SCt8xSjsTWM_VvnIQz2fg,16578
10
- claude_mpm/agents/__init__.py,sha256=DxJswRx5DpgJVZEY5JlZm5VJNb_CakV5Ch231r7nWlo,3292
11
- claude_mpm/agents/agent_loader.py,sha256=RAAoIxM9DONMMIqyEhaU0nEiaZKYkEZpMP6humOBmU0,23669
10
+ claude_mpm/agents/INSTRUCTIONS.md,sha256=I2Y_Aed6-E6p7gd2ujy5cyFuMIZorqFz_NbF4Y60Oz0,8013
11
+ claude_mpm/agents/__init__.py,sha256=r-p7ervzjLPD7_8dm2tXX_fwvdTZy6KwKA03ofxN3sA,3275
12
+ claude_mpm/agents/agent-template.yaml,sha256=koKJn8MCAJx0QNQMHouvIZrwvw5qjPV0U-aV-YVyk6s,2036
13
+ claude_mpm/agents/agent_loader.py,sha256=aZiTX8u0__8ueHzwney98PHfVMSkrpF3Nh-DoFlso74,18675
12
14
  claude_mpm/agents/agent_loader_integration.py,sha256=z_DXxAIeuUD71HBYdxxvcFKoQYQxITLo8oAdN_M4LTA,7610
13
15
  claude_mpm/agents/agents_metadata.py,sha256=Xju9Yim6XSv2u1J_Swre5VJySbdxxC-9TzpOfXG8ibg,5170
14
- claude_mpm/agents/base_agent.json,sha256=P4724UbQJQlZy57WkwIz_f_R86JepljWpTflI9hLrUs,2296
15
- claude_mpm/agents/base_agent_loader.py,sha256=gVWXfxFh3_Z5FJ77SWbxrA8yFOQ8IwwfnOgmv6Z89CQ,18680
16
+ claude_mpm/agents/base_agent.json,sha256=wvopTu58PEdvgvjBi45J5aBA6bxs5_v1KC84CbJeRzY,3820
17
+ claude_mpm/agents/base_agent_loader.py,sha256=DJ0BDP_7ic3q0Zv5YQFZCYZp2V3bC3bB1v11ohbN8yU,18418
16
18
  claude_mpm/agents/system_agent_config.py,sha256=Lke4FFjU0Vq3LLo4O7KvtHxadP7agAwC-ljCXK40h_A,23526
17
19
  claude_mpm/agents/schema/agent_schema.json,sha256=Ca_8E0QkFpGwQd7XjVy3jnBMv_-Yo2rL7Po-ziHut2U,5472
18
20
  claude_mpm/agents/templates/__init__.py,sha256=7UyIChghCnkrDctvmCRYr0Wrnn8Oj-eCdgL0KpFy1Mo,2668
19
- claude_mpm/agents/templates/data_engineer_agent.json,sha256=MKeXvoIJga_tE1IKzFi3iRdfg8-6vk6DL12_TXjzdkk,2257
20
- claude_mpm/agents/templates/documentation_agent.json,sha256=snfJW2yW9aMv9ldCSIWW7zwnyoQRx5u7xLMkNlfus9I,2258
21
- claude_mpm/agents/templates/engineer_agent.json,sha256=t5SziRtblVTJaRGhHzZKAWoflrFg4wsckvW1RTz2AAA,6179
22
- claude_mpm/agents/templates/ops_agent.json,sha256=y-unQijBWKAaPz3YCFoe21OMZXsU8jJ-mFrLGcmo8H0,2227
23
- claude_mpm/agents/templates/qa_agent.json,sha256=_FHWnUeh151rgWX_xUgXsfGrJz7Bs3wno2lXU0nTwAo,2157
24
- claude_mpm/agents/templates/research_agent.json,sha256=o4n_sqSbjnsFRELB2q501vgwm-o2tQNLJLYvnVP9LWU,5629
25
- claude_mpm/agents/templates/security_agent.json,sha256=l5YuD-27CxKSOsRLv0bDY_tCZyds0yGbeizLb8paeFY,2322
26
- claude_mpm/agents/templates/update-optimized-specialized-agents.json,sha256=7lcCSZXfnvLzAUqqM-HENtwPdTUbdABONsCt0vqamU0,19005
27
- claude_mpm/agents/templates/version_control_agent.json,sha256=too38RPTLJ9HutCMn0nfmEdCj2me241dx5tUYDFtu94,2143
21
+ claude_mpm/agents/templates/data_engineer.json,sha256=3qLAOSBO47O5bj8gnUNvEjeIe9bRc6Hzaj3w_pTvmvI,5811
22
+ claude_mpm/agents/templates/documentation.json,sha256=W6gF0p2XpXrYPng7aUjbpE0Z3IW193EbP3nKoNmY4yc,3043
23
+ claude_mpm/agents/templates/engineer.json,sha256=vRAr9sEgKt7_IVg2e3iZmLQFQHTzjgM-YQepS-TL6rY,8829
24
+ claude_mpm/agents/templates/ops.json,sha256=mNoS_OS_e4Ht2drx3d7H0I18x38LX16E-mhsJn95ydQ,2899
25
+ claude_mpm/agents/templates/qa.json,sha256=qEsJzkXbqM4pAdl4vyW1HeaQME5SvnIk4XttPWI2Dhw,2942
26
+ claude_mpm/agents/templates/research.json,sha256=cfZlfJ9NMEUAb9BxqK_uo2bdRiMIt842jwQxolZ7YIM,6129
27
+ claude_mpm/agents/templates/security.json,sha256=T0hRMeHq54ryblR2QsBFBJtNx-mYR3VEtwQYOvx4EOU,2945
28
+ claude_mpm/agents/templates/version_control.json,sha256=RsV0WLs58boDOzurwB75Zdol4uXf_Za0VHOqQ3Og2Rw,2923
29
+ claude_mpm/agents/templates/backup/data_engineer_agent_20250726_234551.json,sha256=lLso4RHXVTQmX4A1XwF84kT59zZDblPO1xCgBj4S4x8,5060
30
+ claude_mpm/agents/templates/backup/documentation_agent_20250726_234551.json,sha256=snfJW2yW9aMv9ldCSIWW7zwnyoQRx5u7xLMkNlfus9I,2258
31
+ claude_mpm/agents/templates/backup/engineer_agent_20250726_234551.json,sha256=21o8TGCM9TO6eocSV9Ev5MmCq-xYwwCqMU7KQESaY2Q,8479
32
+ claude_mpm/agents/templates/backup/ops_agent_20250726_234551.json,sha256=y-unQijBWKAaPz3YCFoe21OMZXsU8jJ-mFrLGcmo8H0,2227
33
+ claude_mpm/agents/templates/backup/qa_agent_20250726_234551.json,sha256=_FHWnUeh151rgWX_xUgXsfGrJz7Bs3wno2lXU0nTwAo,2157
34
+ claude_mpm/agents/templates/backup/research_agent_20250726_234551.json,sha256=o4n_sqSbjnsFRELB2q501vgwm-o2tQNLJLYvnVP9LWU,5629
35
+ claude_mpm/agents/templates/backup/security_agent_20250726_234551.json,sha256=l5YuD-27CxKSOsRLv0bDY_tCZyds0yGbeizLb8paeFY,2322
36
+ claude_mpm/agents/templates/backup/version_control_agent_20250726_234551.json,sha256=too38RPTLJ9HutCMn0nfmEdCj2me241dx5tUYDFtu94,2143
28
37
  claude_mpm/agents/test_fix_deployment/.claude-pm/config/project.json,sha256=YZQgq2ri2_Y3qKzvPlC6TmzZKviDv0__GuyUOo1LbT8,146
29
38
  claude_mpm/cli_module/__init__.py,sha256=CkMp4gzWKoZZF_qKyBDi2sQaZw_GLWZYLtKouv-4f8s,390
30
39
  claude_mpm/cli_module/args.py,sha256=nilYpziBsoEySO4W1hQ2MRJyn9TFx3c3TrucyMMhRtk,7970
@@ -34,7 +43,6 @@ claude_mpm/cli_module/refactoring_guide.md,sha256=fl1PGwLZAj4OYWmU0syg1jDd81PqK7
34
43
  claude_mpm/cli_old/__init__.py,sha256=v7mFJSN0p6NOIcURZp5ibZaZBn6iGrLwyGl7tA_lh4c,32
35
44
  claude_mpm/cli_old/ticket_cli.py,sha256=oKIT2LR1tToHybwypRfsNdnYlwdRzjWyjlQN5lYwTOk,3795
36
45
  claude_mpm/config/__init__.py,sha256=p31JuaXLDHgIgoAbHApNvctN2IEZYq2MBkkXROdhbH8,105
37
- claude_mpm/config/hook_config.py,sha256=ehVAVHhn6ZBxrdWXqXB2M8jcAmqaWCnE9gVxuxR2UEs,1334
38
46
  claude_mpm/core/__init__.py,sha256=hE29BeE3qb8vC1-wiKjPh60WZebCwfo9UAUGM1zQnkc,1206
39
47
  claude_mpm/core/agent_name_normalizer.py,sha256=-X68oz3_74t9BRbHA54NEGyjy0xjTsGp_sCUHDtKp1s,9269
40
48
  claude_mpm/core/agent_registry.py,sha256=4MAfc7xDlrYWWkHmDMRmWE8q32teuCmIcud9D0I0dLo,20496
@@ -45,33 +53,36 @@ claude_mpm/core/base_service.py.bak,sha256=48A8eI_HPqxYm42X5jaTo8zQVOfFFXe7SqIUo
45
53
  claude_mpm/core/config.py,sha256=QNPufRWzXl99wAz14Gm2T_CG5K5n8d4eOjmpaxVllv0,12371
46
54
  claude_mpm/core/config_aliases.py,sha256=8eqA4wpWViIDm_9pL3f9j7cR_ssmhOYYiY2UzHrfUzg,10058
47
55
  claude_mpm/core/container.py,sha256=P4c4nSo_USSfHTxvpR1sQkVGNsgqozZBN27l3IXqiDc,12216
48
- claude_mpm/core/factories.py,sha256=ucS_t4mvLjyfQJ2FzMRemHJqKGqb_iTPe6HJ8x-ztOQ,9092
56
+ claude_mpm/core/factories.py,sha256=Qh2n_x112ZIPWEfwFley9bb9IZcSG38LkpT3uValyDk,7484
49
57
  claude_mpm/core/framework_loader.py,sha256=SdONNh8a7vSicr4vVuRzd7OqgDMIyg9k_xxbr8bLRi8,19547
50
58
  claude_mpm/core/injectable_service.py,sha256=7fOny9c6x8IJ9hVZmFql1eNDXXB1jcWbsxfTKbMZk74,7497
51
59
  claude_mpm/core/interfaces.py,sha256=TpP474EKEng-1TrjKUsN69qq6dXy8zIjicS7iV-ZPV0,15269
52
60
  claude_mpm/core/logger.py,sha256=wqYlUy8wlSXyTWOeWCGNYaIWdiFYzT7yw1U0vdT3R_8,15894
53
61
  claude_mpm/core/minimal_framework_loader.py,sha256=liYS4IyuW_aFK7yhRDZwTwT-3q09fT3wIJSUzkI93Ko,3673
54
62
  claude_mpm/core/mixins.py,sha256=rTEH-7FDpNiLB8oo6mSb0CLarJklv4fDJw1xM-gr5wI,5599
55
- claude_mpm/core/service_registry.py,sha256=rRJDidqVU3DmGRuEWcb3-hhK2gxVe7MCFDPNOh7XlbY,10790
63
+ claude_mpm/core/service_registry.py,sha256=wKJUO1g4UFA4dUpE3RkIYz1Ek8kIh4XfvU1kFeLCl2Q,10529
56
64
  claude_mpm/core/session_manager.py,sha256=3rO4KGZp8Qd_cUw6OWv4jyxGCUaL_MNPgCCpnwQt12A,6581
57
- claude_mpm/core/simple_runner.py,sha256=cEaA5fzU8itTIcEF6Zy84S5ZBgKkkAd7IqPEC0YiP64,20914
65
+ claude_mpm/core/simple_runner.py,sha256=WdgPz7qMhb9ApGNK3HnM-p4CAdvzvPGPdXsdLxp4xWQ,22473
58
66
  claude_mpm/core/tool_access_control.py,sha256=htZbDhC8s7D7BVqfmk0BwRrYJnlnUAk8_NeJKOaeNlg,6632
59
- claude_mpm/hooks/README.md,sha256=lsvGzw9g8Lf0VfRcqoGNGpAZEQSmpE0C8DksZ4nvDso,8030
67
+ claude_mpm/generators/__init__.py,sha256=l53aBn6kBQSDz3b6bZkMCJBcEmYnV9hHEZq8LKzXgH8,152
68
+ claude_mpm/generators/agent_profile_generator.py,sha256=2HjOscogSyvrtQj8KwdgNPS6Ym_QvgX1BMeauQZewZA,5751
69
+ claude_mpm/hooks/README.md,sha256=AjW-V7WQGf9o5X9otNl5k8rtal_MdyToFqVx_pudOXs,3289
60
70
  claude_mpm/hooks/__init__.py,sha256=Y3JJ_mEtvRP07r_gXkju4c0s18bjIXGH1uAbhSw1ES0,166
61
71
  claude_mpm/hooks/base_hook.py,sha256=a4V2EKEG02QQB0h-pnxhZI-fouKBLYbdBLckcaNuf0k,5098
62
- claude_mpm/hooks/hook_client.py,sha256=XxVIgV3L4RBV9YdfBHnm3oxfd8oZjFC4NYlVAbT5Lbk,8893
63
- claude_mpm/hooks/hook_runner.py,sha256=5cwo7SXRx4qr08JcYY4pbDktzBgJYgRZ624r8veGEgw,12800
64
- claude_mpm/hooks/json_rpc_executor.py,sha256=7D-jU_w1Gt1nV0kx5Rva_hleOPc92LtqZiX99j1MXjY,9091
65
- claude_mpm/hooks/json_rpc_hook_client.py,sha256=VZoTyKKIW0lfb5tZ5E3P_WlqBg6y9gzRG-ydZcomau0,11923
66
72
  claude_mpm/hooks/tool_call_interceptor.py,sha256=08_Odgm6Sg1zBJhGjwzVa03AReeBPZHTjndyjEO99cY,7629
73
+ claude_mpm/hooks/validation_hooks.py,sha256=7TU2N4SzCm2nwpsR0xiNKsHQNsWODnOVAmK9jHq1QqM,6582
67
74
  claude_mpm/hooks/builtin/__init__.py,sha256=Tfh3dIGxlQRUKBzR_MWC64WAKJ0Q_POsVVFl7lz9CD4,36
68
75
  claude_mpm/hooks/builtin/logging_hook_example.py,sha256=SyfdAH9ENTIpMhw2IeqqZpXNBUakYDI1yF5DFS0RJZ4,4971
76
+ claude_mpm/hooks/builtin/mpm_command_hook.py,sha256=PhQl1FifaB61gRrBOIXAim0R-XUBIzZwLdjb6WQuEGQ,4541
69
77
  claude_mpm/hooks/builtin/post_delegation_hook_example.py,sha256=54OJKRgjdXH8A2LHypbXoMlCNlmWXBY5Fvk0-VWq_fI,4596
70
78
  claude_mpm/hooks/builtin/pre_delegation_hook_example.py,sha256=JOAdDm46be_ol7uSmnQaE0jQS8SsiuGei80Auj3sdL8,4692
71
79
  claude_mpm/hooks/builtin/submit_hook_example.py,sha256=x7-yIF_QYe9uwCezeVDA_HdDTLu6uQfbTgZ12pdC4xo,3431
72
80
  claude_mpm/hooks/builtin/ticket_extraction_hook_example.py,sha256=4wNhS2tFUXgdcvepefUvi818Tt8kKnPQQJVxqINGeys,9237
73
81
  claude_mpm/hooks/builtin/todo_agent_prefix_hook.py,sha256=v_4w2vcZIt0bkZxqdHmgtN79yHZ1gviuhhBws0FHpIQ,10226
74
82
  claude_mpm/hooks/builtin/workflow_start_hook.py,sha256=EQrtYD9qLMLSYPl3oQinEheZAJ2i5EO_h2jhhR8lmt0,7490
83
+ claude_mpm/hooks/claude_hooks/__init__.py,sha256=bMUwt2RzDGAcEbtDMA7vWS1uJsauOY0OixIe4pHwgQ0,129
84
+ claude_mpm/hooks/claude_hooks/hook_handler.py,sha256=30YDU6hVoju-vDyhP9HdhdGo5NJ8g4reJiQokLjvSKk,16154
85
+ claude_mpm/hooks/claude_hooks/hook_wrapper.sh,sha256=6n0-G317jIrPuNRGnAyFvBbNM4gVzKEat_WSbpvKN-g,1742
75
86
  claude_mpm/orchestration/SUBPROCESS_DESIGN.md,sha256=YwToiT1_NXblv1XIWhWPNc2uKzDvqY2E_Nix8qK7qk0,2136
76
87
  claude_mpm/orchestration/__init__.py,sha256=C-cwldtfBCgV19mKnJa5U1XiKw1rAZvx-kK61nIdcao,205
77
88
  claude_mpm/orchestration/archive/direct_orchestrator.py,sha256=j-IP-st-Xi9Xf33i-BLPZOE_kkxSZxNNuFZmp6MTuZY,7884
@@ -86,21 +97,19 @@ claude_mpm/orchestration/archive/simple_orchestrator.py,sha256=Booy_eeuC5H3i-1HA
86
97
  claude_mpm/orchestration/archive/subprocess_orchestrator.py,sha256=TYTAHX6p4OpgBsfU-CF2D6r_wmZHIASc9GR8l3-qXQM,31982
87
98
  claude_mpm/orchestration/archive/system_prompt_orchestrator.py,sha256=R16sc-94kQVeGjJzTYmvKn0aYgj_9qxyzShDy1E5zpE,12853
88
99
  claude_mpm/orchestration/archive/wrapper_orchestrator.py,sha256=cvL0NJf9kCWf3QJl67ySwvtR1Hd9Rym28Ii8Rtsdi6Q,6806
100
+ claude_mpm/schemas/agent_schema.json,sha256=xPqYaZ8VNFyabdpEL91kufKPsWk36v6hYbqoMfUsvs4,9645
89
101
  claude_mpm/scripts/__init__.py,sha256=M2n9fQeyfILC8gogXvJv6ixnu7hwpqLEqLWJRaUN0MU,37
90
102
  claude_mpm/scripts/ticket.py,sha256=GmFimtTJxc927cCzJvvJH3gvoxXQtAB-W-xnuclcvNs,9350
91
103
  claude_mpm/services/__init__.py,sha256=-EBm07Lh9mjcofiQHCqyCCQJMLi9akVArPlz8i_kEOo,226
92
104
  claude_mpm/services/agent_deployment.py,sha256=FqxKBaTl2vQqsxN7QZPKIeLmhO-f8VW6maRBmAUNW50,40398
93
105
  claude_mpm/services/agent_lifecycle_manager.py,sha256=VZBVONepomFpMqL7soaXIawS4NoaltFWKed7tU6bS3w,39057
94
- claude_mpm/services/agent_management_service.py,sha256=aotSxiLzRW1VKPGkanFt7hzyPfxLf8LVE6o1EA7X2BY,22875
106
+ claude_mpm/services/agent_management_service.py,sha256=eX5n6w17b9urcogVdr4V-kXcuo7yyjORTrIihjF8PeQ,22853
95
107
  claude_mpm/services/agent_modification_tracker.py,sha256=7FRDXuCNANUnLatCgtBArG-AxZNtKbGQjgCKjnzmJ80,34050
96
- claude_mpm/services/agent_profile_loader.py,sha256=PMcFbK-acIMleB7xoZMMoDX8xq1a2_PdmZ9-R2V41Cw,23148
97
- claude_mpm/services/agent_registry.py,sha256=X8f6ATNtftZBSR9AaTIZenLyRVAegA3PZ9tGoqpS0uw,24446
98
- claude_mpm/services/base_agent_manager.py,sha256=2u3efvWyw_Ki9l7z81eVGwyPpG__j2etRMQUhvOTpAw,15016
108
+ claude_mpm/services/agent_profile_loader.py,sha256=4D1Xj0vgqV8wN7Y3r8lijh7ghy5cVGU5t5s931sVqGc,23133
109
+ claude_mpm/services/agent_registry.py,sha256=vn8CEW0vppj_0EY2NofmNRZEnpV70mlWiX2kAViFDRg,24374
110
+ claude_mpm/services/base_agent_manager.py,sha256=WEcfzdMaFXmXUSoEYEPNeGu8dvqjIv53zyUU0ITrhsM,14987
99
111
  claude_mpm/services/framework_agent_loader.py,sha256=QdRSYRurYF3YbAXJwIGei71BffD5AqOVcV3ktRPdk7g,14018
100
112
  claude_mpm/services/framework_claude_md_generator.py,sha256=3kHmkRLHTex6HFZ4DhbLVQb48j-5dAoy1q6UW1Qf7U8,22914
101
- claude_mpm/services/hook_service.py,sha256=8CMyvlSK_QvZtJqU3rAv3nST3KJLYhe6nTGdEi51mWE,13619
102
- claude_mpm/services/hook_service_manager.py,sha256=QtDwMdC3PAjoO6oZ3Re3FRPoyHujYnNF4akM4eqlM5U,8523
103
- claude_mpm/services/json_rpc_hook_manager.py,sha256=fd8YN460pVv4aI8vCFFsWMXJ2opYphXitCUkLBaqPL8,2981
104
113
  claude_mpm/services/shared_prompt_cache.py,sha256=D04lrRWyg0lHyqGcAHy7IYvRHRKSg6EOpAJwBUPa2wk,29890
105
114
  claude_mpm/services/ticket_manager.py,sha256=Ki11YjBkDax8BFVSaDdOBk3K4VU5gvdbgq9AmCyyoZ0,7454
106
115
  claude_mpm/services/ticket_manager_di.py,sha256=pIsIGncbboKzBYSRQTO7ZX5MuQzV6iFfIflvKe6u1jw,11123
@@ -148,12 +157,15 @@ claude_mpm/ui/rich_terminal_ui.py,sha256=gx_9TD0kR4Exq867pHjVVs_b-gw1q267t5oA2ZD
148
157
  claude_mpm/ui/terminal_ui.py,sha256=E_M-L-6EuGp6L8pRpaWEhTqf-ddDXhZp5W85D0XNRPw,11928
149
158
  claude_mpm/utils/__init__.py,sha256=E8Hvv6ykL6rnnc8-YmfoGNpRCZbcIirxcFuNz7YvDIg,346
150
159
  claude_mpm/utils/config_manager.py,sha256=TlekZYIWOz_ouWHQU4Gc-zckhoFK9AqA25b6A_XZdDc,16412
160
+ claude_mpm/utils/error_handler.py,sha256=W_Zc0FrKudpXvxT66Oxx0v8WkR8HA2KlynzzGy3eGcU,8168
151
161
  claude_mpm/utils/import_migration_example.py,sha256=W4a4XH3FY_VBB00BB8Lae2aRPM021PxLHzdUfEs0B5w,2463
152
162
  claude_mpm/utils/imports.py,sha256=wX-SOXUHbemx01MHRGQpVwajzXH6qYdQkYNFCIbb2mw,6851
153
163
  claude_mpm/utils/path_operations.py,sha256=6pLMnAWBVzHkgp6JyQHmHbGD-dWn-nX21yV4E_eT-kM,11614
154
164
  claude_mpm/utils/paths.py,sha256=Xv0SZWdZRkRjN9e6clBcA165ya00GNQxt7SwMz51tfA,10153
155
- claude_mpm-1.0.0.dist-info/METADATA,sha256=s8VhjuHma1JWq9S1G6iq7eNfxD6__qDFbCF6aqZOw4c,8792
156
- claude_mpm-1.0.0.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
157
- claude_mpm-1.0.0.dist-info/entry_points.txt,sha256=PknO31um7d8bt6GjOiVeYpdJpjND0_C1z-LQfY6UfiU,142
158
- claude_mpm-1.0.0.dist-info/top_level.txt,sha256=1nUg3FEaBySgm8t-s54jK5zoPnu3_eY6EP6IOlekyHA,11
159
- claude_mpm-1.0.0.dist-info/RECORD,,
165
+ claude_mpm/validation/__init__.py,sha256=bJ19g9lnk7yIjtxzN8XPegp87HTFBzCrGQOpFgRTf3g,155
166
+ claude_mpm/validation/agent_validator.py,sha256=gxBn3m3NyJiHymIoNGUBk4dzRjIrw3TVL6lWPpmZmW8,11693
167
+ claude_mpm-2.0.0.dist-info/METADATA,sha256=RC_YCOD4Ed-EIA2RU4THxcAwU8mqthscpZdz-XetqBg,13250
168
+ claude_mpm-2.0.0.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
169
+ claude_mpm-2.0.0.dist-info/entry_points.txt,sha256=PknO31um7d8bt6GjOiVeYpdJpjND0_C1z-LQfY6UfiU,142
170
+ claude_mpm-2.0.0.dist-info/top_level.txt,sha256=1nUg3FEaBySgm8t-s54jK5zoPnu3_eY6EP6IOlekyHA,11
171
+ claude_mpm-2.0.0.dist-info/RECORD,,