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.
- claude_mpm/_version.py +4 -2
- claude_mpm/agents/INSTRUCTIONS.md +117 -312
- claude_mpm/agents/__init__.py +2 -2
- claude_mpm/agents/agent-template.yaml +83 -0
- claude_mpm/agents/agent_loader.py +192 -310
- claude_mpm/agents/base_agent.json +1 -1
- claude_mpm/agents/base_agent_loader.py +10 -15
- claude_mpm/agents/templates/backup/data_engineer_agent_20250726_234551.json +46 -0
- claude_mpm/agents/templates/{engineer_agent.json → backup/engineer_agent_20250726_234551.json} +1 -1
- claude_mpm/agents/templates/data_engineer.json +107 -0
- claude_mpm/agents/templates/documentation.json +106 -0
- claude_mpm/agents/templates/engineer.json +110 -0
- claude_mpm/agents/templates/ops.json +106 -0
- claude_mpm/agents/templates/qa.json +106 -0
- claude_mpm/agents/templates/research.json +107 -0
- claude_mpm/agents/templates/security.json +105 -0
- claude_mpm/agents/templates/version_control.json +103 -0
- claude_mpm/cli.py +41 -47
- claude_mpm/cli_enhancements.py +297 -0
- claude_mpm/core/factories.py +1 -46
- claude_mpm/core/service_registry.py +0 -8
- claude_mpm/core/simple_runner.py +43 -0
- claude_mpm/generators/__init__.py +5 -0
- claude_mpm/generators/agent_profile_generator.py +137 -0
- claude_mpm/hooks/README.md +75 -221
- claude_mpm/hooks/builtin/mpm_command_hook.py +125 -0
- claude_mpm/hooks/claude_hooks/__init__.py +5 -0
- claude_mpm/hooks/claude_hooks/hook_handler.py +399 -0
- claude_mpm/hooks/claude_hooks/hook_wrapper.sh +47 -0
- claude_mpm/hooks/validation_hooks.py +181 -0
- claude_mpm/schemas/agent_schema.json +328 -0
- claude_mpm/services/agent_management_service.py +4 -4
- claude_mpm/services/agent_profile_loader.py +1 -1
- claude_mpm/services/agent_registry.py +0 -1
- claude_mpm/services/base_agent_manager.py +3 -3
- claude_mpm/utils/error_handler.py +247 -0
- claude_mpm/validation/__init__.py +5 -0
- claude_mpm/validation/agent_validator.py +302 -0
- {claude_mpm-1.0.0.dist-info → claude_mpm-2.0.0.dist-info}/METADATA +133 -22
- {claude_mpm-1.0.0.dist-info → claude_mpm-2.0.0.dist-info}/RECORD +49 -37
- claude_mpm/agents/templates/data_engineer_agent.json +0 -46
- claude_mpm/agents/templates/update-optimized-specialized-agents.json +0 -374
- claude_mpm/config/hook_config.py +0 -42
- claude_mpm/hooks/hook_client.py +0 -264
- claude_mpm/hooks/hook_runner.py +0 -370
- claude_mpm/hooks/json_rpc_executor.py +0 -259
- claude_mpm/hooks/json_rpc_hook_client.py +0 -319
- claude_mpm/services/hook_service.py +0 -388
- claude_mpm/services/hook_service_manager.py +0 -223
- claude_mpm/services/json_rpc_hook_manager.py +0 -92
- /claude_mpm/agents/templates/{documentation_agent.json → backup/documentation_agent_20250726_234551.json} +0 -0
- /claude_mpm/agents/templates/{ops_agent.json → backup/ops_agent_20250726_234551.json} +0 -0
- /claude_mpm/agents/templates/{qa_agent.json → backup/qa_agent_20250726_234551.json} +0 -0
- /claude_mpm/agents/templates/{research_agent.json → backup/research_agent_20250726_234551.json} +0 -0
- /claude_mpm/agents/templates/{security_agent.json → backup/security_agent_20250726_234551.json} +0 -0
- /claude_mpm/agents/templates/{version_control_agent.json → backup/version_control_agent_20250726_234551.json} +0 -0
- {claude_mpm-1.0.0.dist-info → claude_mpm-2.0.0.dist-info}/WHEEL +0 -0
- {claude_mpm-1.0.0.dist-info → claude_mpm-2.0.0.dist-info}/entry_points.txt +0 -0
- {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:
|
|
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
|
-
###
|
|
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/
|
|
247
|
+
git clone https://github.com/bobmatnyc/claude-mpm.git
|
|
125
248
|
cd claude-mpm
|
|
126
249
|
|
|
127
|
-
#
|
|
128
|
-
|
|
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
|
-
#
|
|
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=
|
|
4
|
-
claude_mpm/cli.py,sha256=
|
|
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=
|
|
10
|
-
claude_mpm/agents/__init__.py,sha256=
|
|
11
|
-
claude_mpm/agents/
|
|
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=
|
|
15
|
-
claude_mpm/agents/base_agent_loader.py,sha256=
|
|
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/
|
|
20
|
-
claude_mpm/agents/templates/
|
|
21
|
-
claude_mpm/agents/templates/
|
|
22
|
-
claude_mpm/agents/templates/
|
|
23
|
-
claude_mpm/agents/templates/
|
|
24
|
-
claude_mpm/agents/templates/
|
|
25
|
-
claude_mpm/agents/templates/
|
|
26
|
-
claude_mpm/agents/templates/
|
|
27
|
-
claude_mpm/agents/templates/
|
|
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=
|
|
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=
|
|
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=
|
|
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/
|
|
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=
|
|
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=
|
|
97
|
-
claude_mpm/services/agent_registry.py,sha256=
|
|
98
|
-
claude_mpm/services/base_agent_manager.py,sha256=
|
|
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
|
|
156
|
-
claude_mpm
|
|
157
|
-
claude_mpm-
|
|
158
|
-
claude_mpm-
|
|
159
|
-
claude_mpm-
|
|
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,,
|