claude-mpm 4.3.22__py3-none-any.whl → 4.4.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 +1 -1
- claude_mpm/cli/commands/doctor.py +2 -2
- claude_mpm/hooks/memory_integration_hook.py +1 -1
- claude_mpm/services/agents/memory/content_manager.py +5 -2
- claude_mpm/services/agents/memory/memory_file_service.py +1 -0
- claude_mpm/services/agents/memory/memory_limits_service.py +1 -0
- claude_mpm/services/unified/__init__.py +65 -0
- claude_mpm/services/unified/analyzer_strategies/__init__.py +44 -0
- claude_mpm/services/unified/analyzer_strategies/code_analyzer.py +473 -0
- claude_mpm/services/unified/analyzer_strategies/dependency_analyzer.py +643 -0
- claude_mpm/services/unified/analyzer_strategies/performance_analyzer.py +804 -0
- claude_mpm/services/unified/analyzer_strategies/security_analyzer.py +661 -0
- claude_mpm/services/unified/analyzer_strategies/structure_analyzer.py +696 -0
- claude_mpm/services/unified/deployment_strategies/__init__.py +97 -0
- claude_mpm/services/unified/deployment_strategies/base.py +557 -0
- claude_mpm/services/unified/deployment_strategies/cloud_strategies.py +486 -0
- claude_mpm/services/unified/deployment_strategies/local.py +594 -0
- claude_mpm/services/unified/deployment_strategies/utils.py +672 -0
- claude_mpm/services/unified/deployment_strategies/vercel.py +471 -0
- claude_mpm/services/unified/interfaces.py +499 -0
- claude_mpm/services/unified/migration.py +532 -0
- claude_mpm/services/unified/strategies.py +551 -0
- claude_mpm/services/unified/unified_analyzer.py +534 -0
- claude_mpm/services/unified/unified_config.py +688 -0
- claude_mpm/services/unified/unified_deployment.py +470 -0
- {claude_mpm-4.3.22.dist-info → claude_mpm-4.4.0.dist-info}/METADATA +1 -1
- {claude_mpm-4.3.22.dist-info → claude_mpm-4.4.0.dist-info}/RECORD +31 -12
- {claude_mpm-4.3.22.dist-info → claude_mpm-4.4.0.dist-info}/WHEEL +0 -0
- {claude_mpm-4.3.22.dist-info → claude_mpm-4.4.0.dist-info}/entry_points.txt +0 -0
- {claude_mpm-4.3.22.dist-info → claude_mpm-4.4.0.dist-info}/licenses/LICENSE +0 -0
- {claude_mpm-4.3.22.dist-info → claude_mpm-4.4.0.dist-info}/top_level.txt +0 -0
@@ -0,0 +1,470 @@
|
|
1
|
+
"""
|
2
|
+
Unified Deployment Service Implementation
|
3
|
+
=========================================
|
4
|
+
|
5
|
+
This module implements the unified deployment service that consolidates all
|
6
|
+
deployment-related services using the strategy pattern. It replaces multiple
|
7
|
+
specialized deployment services with a single, extensible service.
|
8
|
+
|
9
|
+
Consolidates:
|
10
|
+
- AgentDeploymentService
|
11
|
+
- ConfigDeploymentService
|
12
|
+
- ResourceDeploymentService
|
13
|
+
- TemplateDeploymentService
|
14
|
+
- And other deployment-related services
|
15
|
+
|
16
|
+
Features:
|
17
|
+
- Strategy-based deployment for different resource types
|
18
|
+
- Rollback support with versioning
|
19
|
+
- Batch deployment operations
|
20
|
+
- Deployment validation and pre-flight checks
|
21
|
+
- Metrics and monitoring integration
|
22
|
+
"""
|
23
|
+
|
24
|
+
import asyncio
|
25
|
+
from pathlib import Path
|
26
|
+
from typing import Any, Dict, List, Optional, Union
|
27
|
+
|
28
|
+
from claude_mpm.core.logging_utils import get_logger
|
29
|
+
|
30
|
+
from .interfaces import (
|
31
|
+
DeploymentResult,
|
32
|
+
IDeploymentService,
|
33
|
+
IUnifiedService,
|
34
|
+
ServiceCapability,
|
35
|
+
ServiceMetadata,
|
36
|
+
)
|
37
|
+
from .strategies import (
|
38
|
+
DeploymentStrategy,
|
39
|
+
StrategyContext,
|
40
|
+
get_strategy_registry,
|
41
|
+
)
|
42
|
+
|
43
|
+
|
44
|
+
class UnifiedDeploymentService(IDeploymentService, IUnifiedService):
|
45
|
+
"""
|
46
|
+
Unified deployment service using strategy pattern.
|
47
|
+
|
48
|
+
This service consolidates all deployment operations through a
|
49
|
+
pluggable strategy system, reducing code duplication and improving
|
50
|
+
maintainability.
|
51
|
+
"""
|
52
|
+
|
53
|
+
def __init__(self):
|
54
|
+
"""Initialize unified deployment service."""
|
55
|
+
self._logger = get_logger(f"{__name__}.UnifiedDeploymentService")
|
56
|
+
self._registry = get_strategy_registry()
|
57
|
+
self._deployments: Dict[str, Dict[str, Any]] = {}
|
58
|
+
self._deployment_counter = 0
|
59
|
+
self._metrics = {
|
60
|
+
"total_deployments": 0,
|
61
|
+
"successful_deployments": 0,
|
62
|
+
"failed_deployments": 0,
|
63
|
+
"rollbacks": 0,
|
64
|
+
}
|
65
|
+
self._initialized = False
|
66
|
+
|
67
|
+
def get_metadata(self) -> ServiceMetadata:
|
68
|
+
"""
|
69
|
+
Get service metadata.
|
70
|
+
|
71
|
+
Returns:
|
72
|
+
ServiceMetadata: Service metadata
|
73
|
+
"""
|
74
|
+
return ServiceMetadata(
|
75
|
+
name="UnifiedDeploymentService",
|
76
|
+
version="1.0.0",
|
77
|
+
capabilities={
|
78
|
+
ServiceCapability.ASYNC_OPERATIONS,
|
79
|
+
ServiceCapability.BATCH_PROCESSING,
|
80
|
+
ServiceCapability.VALIDATION,
|
81
|
+
ServiceCapability.ROLLBACK,
|
82
|
+
ServiceCapability.METRICS,
|
83
|
+
ServiceCapability.HEALTH_CHECK,
|
84
|
+
},
|
85
|
+
dependencies=["StrategyRegistry", "LoggingService"],
|
86
|
+
description="Unified service for all deployment operations",
|
87
|
+
tags={"deployment", "unified", "strategy-pattern"},
|
88
|
+
deprecated_services=[
|
89
|
+
"AgentDeploymentService",
|
90
|
+
"ConfigDeploymentService",
|
91
|
+
"ResourceDeploymentService",
|
92
|
+
"TemplateDeploymentService",
|
93
|
+
],
|
94
|
+
)
|
95
|
+
|
96
|
+
async def initialize(self) -> bool:
|
97
|
+
"""
|
98
|
+
Initialize the service.
|
99
|
+
|
100
|
+
Returns:
|
101
|
+
bool: True if initialization successful
|
102
|
+
"""
|
103
|
+
try:
|
104
|
+
self._logger.info("Initializing UnifiedDeploymentService")
|
105
|
+
|
106
|
+
# Load deployment history if exists
|
107
|
+
await self._load_deployment_history()
|
108
|
+
|
109
|
+
# Register default strategies
|
110
|
+
self._register_default_strategies()
|
111
|
+
|
112
|
+
self._initialized = True
|
113
|
+
self._logger.info("UnifiedDeploymentService initialized successfully")
|
114
|
+
return True
|
115
|
+
|
116
|
+
except Exception as e:
|
117
|
+
self._logger.error(f"Failed to initialize: {str(e)}")
|
118
|
+
return False
|
119
|
+
|
120
|
+
async def shutdown(self) -> None:
|
121
|
+
"""Gracefully shutdown the service."""
|
122
|
+
self._logger.info("Shutting down UnifiedDeploymentService")
|
123
|
+
|
124
|
+
# Save deployment history
|
125
|
+
await self._save_deployment_history()
|
126
|
+
|
127
|
+
# Clear deployments
|
128
|
+
self._deployments.clear()
|
129
|
+
|
130
|
+
self._initialized = False
|
131
|
+
self._logger.info("UnifiedDeploymentService shutdown complete")
|
132
|
+
|
133
|
+
def health_check(self) -> Dict[str, Any]:
|
134
|
+
"""
|
135
|
+
Perform health check.
|
136
|
+
|
137
|
+
Returns:
|
138
|
+
Dict[str, Any]: Health status
|
139
|
+
"""
|
140
|
+
strategies = self._registry.list_strategies(DeploymentStrategy)
|
141
|
+
|
142
|
+
return {
|
143
|
+
"service": "UnifiedDeploymentService",
|
144
|
+
"status": "healthy" if self._initialized else "unhealthy",
|
145
|
+
"initialized": self._initialized,
|
146
|
+
"registered_strategies": len(strategies),
|
147
|
+
"active_deployments": len(self._deployments),
|
148
|
+
"metrics": self.get_metrics(),
|
149
|
+
}
|
150
|
+
|
151
|
+
def get_metrics(self) -> Dict[str, Any]:
|
152
|
+
"""
|
153
|
+
Get service metrics.
|
154
|
+
|
155
|
+
Returns:
|
156
|
+
Dict[str, Any]: Service metrics
|
157
|
+
"""
|
158
|
+
success_rate = 0.0
|
159
|
+
if self._metrics["total_deployments"] > 0:
|
160
|
+
success_rate = (
|
161
|
+
self._metrics["successful_deployments"]
|
162
|
+
/ self._metrics["total_deployments"]
|
163
|
+
) * 100
|
164
|
+
|
165
|
+
return {
|
166
|
+
**self._metrics,
|
167
|
+
"success_rate": success_rate,
|
168
|
+
"active_deployments": len(self._deployments),
|
169
|
+
}
|
170
|
+
|
171
|
+
def reset(self) -> None:
|
172
|
+
"""Reset service to initial state."""
|
173
|
+
self._logger.info("Resetting UnifiedDeploymentService")
|
174
|
+
self._deployments.clear()
|
175
|
+
self._deployment_counter = 0
|
176
|
+
self._metrics = {
|
177
|
+
"total_deployments": 0,
|
178
|
+
"successful_deployments": 0,
|
179
|
+
"failed_deployments": 0,
|
180
|
+
"rollbacks": 0,
|
181
|
+
}
|
182
|
+
|
183
|
+
def validate_deployment(
|
184
|
+
self, target: Union[str, Path], config: Dict[str, Any]
|
185
|
+
) -> List[str]:
|
186
|
+
"""
|
187
|
+
Validate deployment configuration.
|
188
|
+
|
189
|
+
Args:
|
190
|
+
target: Deployment target
|
191
|
+
config: Deployment configuration
|
192
|
+
|
193
|
+
Returns:
|
194
|
+
List[str]: Validation errors
|
195
|
+
"""
|
196
|
+
errors = []
|
197
|
+
|
198
|
+
# Basic validation
|
199
|
+
if not target:
|
200
|
+
errors.append("Deployment target is required")
|
201
|
+
|
202
|
+
if not config:
|
203
|
+
errors.append("Deployment configuration is required")
|
204
|
+
|
205
|
+
# Get deployment type from config
|
206
|
+
deployment_type = config.get("type", "unknown")
|
207
|
+
|
208
|
+
# Select appropriate strategy
|
209
|
+
context = StrategyContext(
|
210
|
+
target_type=deployment_type,
|
211
|
+
operation="validate",
|
212
|
+
parameters={"target": target, "config": config},
|
213
|
+
)
|
214
|
+
|
215
|
+
strategy = self._registry.select_strategy(DeploymentStrategy, context)
|
216
|
+
|
217
|
+
if not strategy:
|
218
|
+
errors.append(f"No strategy available for deployment type: {deployment_type}")
|
219
|
+
else:
|
220
|
+
# Delegate validation to strategy
|
221
|
+
strategy_errors = strategy.validate_input(config)
|
222
|
+
errors.extend(strategy_errors)
|
223
|
+
|
224
|
+
return errors
|
225
|
+
|
226
|
+
def deploy(
|
227
|
+
self,
|
228
|
+
source: Union[str, Path],
|
229
|
+
target: Union[str, Path],
|
230
|
+
config: Optional[Dict[str, Any]] = None,
|
231
|
+
force: bool = False,
|
232
|
+
) -> DeploymentResult:
|
233
|
+
"""
|
234
|
+
Execute deployment.
|
235
|
+
|
236
|
+
Args:
|
237
|
+
source: Deployment source
|
238
|
+
target: Deployment target
|
239
|
+
config: Deployment configuration
|
240
|
+
force: Force deployment
|
241
|
+
|
242
|
+
Returns:
|
243
|
+
DeploymentResult: Deployment result
|
244
|
+
"""
|
245
|
+
config = config or {}
|
246
|
+
self._metrics["total_deployments"] += 1
|
247
|
+
|
248
|
+
try:
|
249
|
+
# Validate deployment
|
250
|
+
errors = self.validate_deployment(target, config)
|
251
|
+
if errors and not force:
|
252
|
+
self._metrics["failed_deployments"] += 1
|
253
|
+
return DeploymentResult(
|
254
|
+
success=False,
|
255
|
+
message=f"Validation failed: {'; '.join(errors)}",
|
256
|
+
)
|
257
|
+
|
258
|
+
# Get deployment type
|
259
|
+
deployment_type = config.get("type", "generic")
|
260
|
+
|
261
|
+
# Select deployment strategy
|
262
|
+
context = StrategyContext(
|
263
|
+
target_type=deployment_type,
|
264
|
+
operation="deploy",
|
265
|
+
parameters={
|
266
|
+
"source": source,
|
267
|
+
"target": target,
|
268
|
+
"config": config,
|
269
|
+
"force": force,
|
270
|
+
},
|
271
|
+
)
|
272
|
+
|
273
|
+
strategy = self._registry.select_strategy(DeploymentStrategy, context)
|
274
|
+
|
275
|
+
if not strategy:
|
276
|
+
self._metrics["failed_deployments"] += 1
|
277
|
+
return DeploymentResult(
|
278
|
+
success=False,
|
279
|
+
message=f"No strategy available for deployment type: {deployment_type}",
|
280
|
+
)
|
281
|
+
|
282
|
+
# Execute deployment using strategy
|
283
|
+
self._logger.info(
|
284
|
+
f"Deploying {source} to {target} using {strategy.metadata.name}"
|
285
|
+
)
|
286
|
+
|
287
|
+
result = strategy.deploy(source, target, config)
|
288
|
+
|
289
|
+
# Create deployment record
|
290
|
+
deployment_id = self._generate_deployment_id()
|
291
|
+
rollback_info = strategy.prepare_rollback(result)
|
292
|
+
|
293
|
+
self._deployments[deployment_id] = {
|
294
|
+
"id": deployment_id,
|
295
|
+
"source": str(source),
|
296
|
+
"target": str(target),
|
297
|
+
"type": deployment_type,
|
298
|
+
"strategy": strategy.metadata.name,
|
299
|
+
"config": config,
|
300
|
+
"result": result,
|
301
|
+
"rollback_info": rollback_info,
|
302
|
+
"timestamp": self._get_timestamp(),
|
303
|
+
}
|
304
|
+
|
305
|
+
# Update metrics
|
306
|
+
if result.get("success", False):
|
307
|
+
self._metrics["successful_deployments"] += 1
|
308
|
+
deployed_path = Path(target) / Path(source).name
|
309
|
+
|
310
|
+
return DeploymentResult(
|
311
|
+
success=True,
|
312
|
+
deployed_path=deployed_path,
|
313
|
+
message=f"Successfully deployed using {strategy.metadata.name}",
|
314
|
+
metadata=result,
|
315
|
+
rollback_info=rollback_info,
|
316
|
+
)
|
317
|
+
else:
|
318
|
+
self._metrics["failed_deployments"] += 1
|
319
|
+
return DeploymentResult(
|
320
|
+
success=False,
|
321
|
+
message=result.get("error", "Deployment failed"),
|
322
|
+
metadata=result,
|
323
|
+
)
|
324
|
+
|
325
|
+
except Exception as e:
|
326
|
+
self._logger.error(f"Deployment error: {str(e)}")
|
327
|
+
self._metrics["failed_deployments"] += 1
|
328
|
+
return DeploymentResult(
|
329
|
+
success=False,
|
330
|
+
message=f"Deployment failed: {str(e)}",
|
331
|
+
)
|
332
|
+
|
333
|
+
def rollback(
|
334
|
+
self, deployment_id: str, rollback_info: Dict[str, Any]
|
335
|
+
) -> DeploymentResult:
|
336
|
+
"""
|
337
|
+
Rollback deployment.
|
338
|
+
|
339
|
+
Args:
|
340
|
+
deployment_id: Deployment to rollback
|
341
|
+
rollback_info: Rollback information
|
342
|
+
|
343
|
+
Returns:
|
344
|
+
DeploymentResult: Rollback result
|
345
|
+
"""
|
346
|
+
self._metrics["rollbacks"] += 1
|
347
|
+
|
348
|
+
deployment = self._deployments.get(deployment_id)
|
349
|
+
if not deployment:
|
350
|
+
return DeploymentResult(
|
351
|
+
success=False,
|
352
|
+
message=f"Deployment {deployment_id} not found",
|
353
|
+
)
|
354
|
+
|
355
|
+
try:
|
356
|
+
# Get the strategy used for deployment
|
357
|
+
strategy_name = deployment["strategy"]
|
358
|
+
strategy = self._registry.get_strategy(
|
359
|
+
DeploymentStrategy, strategy_name
|
360
|
+
)
|
361
|
+
|
362
|
+
if not strategy:
|
363
|
+
return DeploymentResult(
|
364
|
+
success=False,
|
365
|
+
message=f"Strategy {strategy_name} not available for rollback",
|
366
|
+
)
|
367
|
+
|
368
|
+
# Execute rollback
|
369
|
+
self._logger.info(f"Rolling back deployment {deployment_id}")
|
370
|
+
|
371
|
+
# Clean up deployed artifacts
|
372
|
+
success = strategy.cleanup(deployment["target"])
|
373
|
+
|
374
|
+
if success:
|
375
|
+
# Mark deployment as rolled back
|
376
|
+
deployment["rolled_back"] = True
|
377
|
+
deployment["rollback_timestamp"] = self._get_timestamp()
|
378
|
+
|
379
|
+
return DeploymentResult(
|
380
|
+
success=True,
|
381
|
+
message=f"Successfully rolled back deployment {deployment_id}",
|
382
|
+
)
|
383
|
+
else:
|
384
|
+
return DeploymentResult(
|
385
|
+
success=False,
|
386
|
+
message="Rollback failed",
|
387
|
+
)
|
388
|
+
|
389
|
+
except Exception as e:
|
390
|
+
self._logger.error(f"Rollback error: {str(e)}")
|
391
|
+
return DeploymentResult(
|
392
|
+
success=False,
|
393
|
+
message=f"Rollback failed: {str(e)}",
|
394
|
+
)
|
395
|
+
|
396
|
+
def list_deployments(
|
397
|
+
self, target: Optional[Union[str, Path]] = None
|
398
|
+
) -> List[Dict[str, Any]]:
|
399
|
+
"""
|
400
|
+
List deployments.
|
401
|
+
|
402
|
+
Args:
|
403
|
+
target: Optional filter by target
|
404
|
+
|
405
|
+
Returns:
|
406
|
+
List[Dict[str, Any]]: Deployment list
|
407
|
+
"""
|
408
|
+
deployments = list(self._deployments.values())
|
409
|
+
|
410
|
+
if target:
|
411
|
+
target_str = str(target)
|
412
|
+
deployments = [
|
413
|
+
d for d in deployments if d["target"] == target_str
|
414
|
+
]
|
415
|
+
|
416
|
+
return deployments
|
417
|
+
|
418
|
+
def get_deployment_status(self, deployment_id: str) -> Dict[str, Any]:
|
419
|
+
"""
|
420
|
+
Get deployment status.
|
421
|
+
|
422
|
+
Args:
|
423
|
+
deployment_id: Deployment identifier
|
424
|
+
|
425
|
+
Returns:
|
426
|
+
Dict[str, Any]: Deployment status
|
427
|
+
"""
|
428
|
+
deployment = self._deployments.get(deployment_id)
|
429
|
+
if not deployment:
|
430
|
+
return {"error": f"Deployment {deployment_id} not found"}
|
431
|
+
|
432
|
+
return {
|
433
|
+
"id": deployment_id,
|
434
|
+
"status": "rolled_back" if deployment.get("rolled_back") else "active",
|
435
|
+
"type": deployment["type"],
|
436
|
+
"strategy": deployment["strategy"],
|
437
|
+
"source": deployment["source"],
|
438
|
+
"target": deployment["target"],
|
439
|
+
"timestamp": deployment["timestamp"],
|
440
|
+
"rollback_available": bool(deployment.get("rollback_info")),
|
441
|
+
}
|
442
|
+
|
443
|
+
# Private helper methods
|
444
|
+
|
445
|
+
def _register_default_strategies(self) -> None:
|
446
|
+
"""Register default deployment strategies."""
|
447
|
+
# Default strategies would be registered here
|
448
|
+
# This would be extended with actual strategy implementations
|
449
|
+
self._logger.debug("Default strategies registered")
|
450
|
+
|
451
|
+
async def _load_deployment_history(self) -> None:
|
452
|
+
"""Load deployment history from persistent storage."""
|
453
|
+
# Implementation would load from database or file
|
454
|
+
self._logger.debug("Deployment history loaded")
|
455
|
+
|
456
|
+
async def _save_deployment_history(self) -> None:
|
457
|
+
"""Save deployment history to persistent storage."""
|
458
|
+
# Implementation would save to database or file
|
459
|
+
self._logger.debug("Deployment history saved")
|
460
|
+
|
461
|
+
def _generate_deployment_id(self) -> str:
|
462
|
+
"""Generate unique deployment ID."""
|
463
|
+
self._deployment_counter += 1
|
464
|
+
return f"deploy_{self._deployment_counter:06d}"
|
465
|
+
|
466
|
+
def _get_timestamp(self) -> str:
|
467
|
+
"""Get current timestamp."""
|
468
|
+
from datetime import datetime
|
469
|
+
|
470
|
+
return datetime.now().isoformat()
|
@@ -1,5 +1,5 @@
|
|
1
1
|
claude_mpm/BUILD_NUMBER,sha256=toytnNjkIKPgQaGwDqQdC1rpNTAdSEc6Vja50d7Ovug,4
|
2
|
-
claude_mpm/VERSION,sha256=
|
2
|
+
claude_mpm/VERSION,sha256=1OTU6BLh2vxOdg9e4SxI73b4r0HSfL878v8GVQW5z-Y,6
|
3
3
|
claude_mpm/__init__.py,sha256=lyTZAYGH4DTaFGLRNWJKk5Q5oTjzN5I6AXmfVX-Jff0,1512
|
4
4
|
claude_mpm/__main__.py,sha256=Ro5UBWBoQaSAIoSqWAr7zkbLyvi4sSy28WShqAhKJG0,723
|
5
5
|
claude_mpm/constants.py,sha256=cChN3myrAcF3jC-6DvHnBFTEnwlDk-TAsIXPvUZr_yw,5953
|
@@ -79,7 +79,7 @@ claude_mpm/cli/commands/configure.py,sha256=i5_glZmlSTgUEkbVqWBRQE3T-y4AJhPNsUnP
|
|
79
79
|
claude_mpm/cli/commands/configure_tui.py,sha256=p158vDexkwL7csWO8_fxt-XAMEoBDN24gf75hIfAlXs,66857
|
80
80
|
claude_mpm/cli/commands/dashboard.py,sha256=0f8_JaXo854kZgcqzZ3cm3VG8muhSsV7JqIzjdSJLcc,11420
|
81
81
|
claude_mpm/cli/commands/debug.py,sha256=qEfmBG9slmOY6a8snoytM1OWCdWwBALzN1lqV7ElIBU,47130
|
82
|
-
claude_mpm/cli/commands/doctor.py,sha256=
|
82
|
+
claude_mpm/cli/commands/doctor.py,sha256=zbCrfTmxJ-DuYFgAjLhuCNse4qVuRVAtqBSr3hOOuUE,5809
|
83
83
|
claude_mpm/cli/commands/info.py,sha256=uiZ2GMkfr-4aeme2l6QhzxyawuhtuyVulfCi66yyvOs,7404
|
84
84
|
claude_mpm/cli/commands/mcp.py,sha256=kgmJVTAi0G7SAnIpYHddU25HqAdIY9mMmTH-C3DSCsY,7221
|
85
85
|
claude_mpm/cli/commands/mcp_command_router.py,sha256=8rTMZLxU3R3Izit9ia1Z_pIOq3bn2QjMPH4uvf1X9XY,6001
|
@@ -352,7 +352,7 @@ claude_mpm/generators/agent_profile_generator.py,sha256=8h3yjhnpNmgILzSddzPjFstG
|
|
352
352
|
claude_mpm/hooks/__init__.py,sha256=FzgybZlNaDR8q3NJqWc6Ai55rCeg836sIkfE9RT4cGg,167
|
353
353
|
claude_mpm/hooks/base_hook.py,sha256=YUIjSOsGrSMqFJX2gZ16af96ohRpJnOs3mZLq63MQcA,5025
|
354
354
|
claude_mpm/hooks/instruction_reinforcement.py,sha256=9DeJ8JABi2phn5BeIjgz4og4uQRVpk3Oqg6lvM2b3BQ,11058
|
355
|
-
claude_mpm/hooks/memory_integration_hook.py,sha256=
|
355
|
+
claude_mpm/hooks/memory_integration_hook.py,sha256=VAazT6soMWoPVlDzP17psft-TDTVdblXNR2pjYpfnh4,16652
|
356
356
|
claude_mpm/hooks/tool_call_interceptor.py,sha256=k3Ghe2KvUs3y-5PcS63uHmBAxtUYraqq1bX9GN0QliU,7462
|
357
357
|
claude_mpm/hooks/validation_hooks.py,sha256=VWQX3eKb9-nx20irK9FcyrJgdid2mm3XhSBVOCU1IVw,6464
|
358
358
|
claude_mpm/hooks/claude_hooks/__init__.py,sha256=b4mud_g3S-3itHY_Dzpbb_SmdMEcJwtUU8fTcqpLqqs,130
|
@@ -495,11 +495,11 @@ claude_mpm/services/agents/management/agent_management_service.py,sha256=aj8ADCH
|
|
495
495
|
claude_mpm/services/agents/memory/__init__.py,sha256=cu8XUsFeI06NjPwDIysofA0dSpALEKd1f3_E_hJ9wyI,608
|
496
496
|
claude_mpm/services/agents/memory/agent_memory_manager.py,sha256=ewmfS80ZqLGdoalGCVNxlpPVBp5qf1uGUfUpqPtwtOA,31721
|
497
497
|
claude_mpm/services/agents/memory/agent_persistence_service.py,sha256=1_wMyoXRdAo82xg8yLBd4vR1nl-hze0gECOJDOPwsZc,2757
|
498
|
-
claude_mpm/services/agents/memory/content_manager.py,sha256=
|
498
|
+
claude_mpm/services/agents/memory/content_manager.py,sha256=tWm9GLeKZDWGIJbGFpaKqV7YVb2q9HER9quNkqDyaTs,16468
|
499
499
|
claude_mpm/services/agents/memory/memory_categorization_service.py,sha256=kHReO2lKPLctCzVj_yCfsQizElDS66dnHVIzeZcdHoo,4746
|
500
|
-
claude_mpm/services/agents/memory/memory_file_service.py,sha256=
|
500
|
+
claude_mpm/services/agents/memory/memory_file_service.py,sha256=LKvAOLHLvRun6sykD9yC2cB7oy4g3yPdAlgQtGaMdSc,4430
|
501
501
|
claude_mpm/services/agents/memory/memory_format_service.py,sha256=vQzCsESjfgnsaj4Ybd2lwDT0kx8aCWYf2Mx9HElbceI,6170
|
502
|
-
claude_mpm/services/agents/memory/memory_limits_service.py,sha256=
|
502
|
+
claude_mpm/services/agents/memory/memory_limits_service.py,sha256=2l--CgKkyNeZt6hFkWWWsJsdaPej33_IsaCzN98kmUA,3389
|
503
503
|
claude_mpm/services/agents/memory/template_generator.py,sha256=oJuryic9ZhEWb-JLHtNNo4RkHi5SEh9G_IQixqMx1YI,2581
|
504
504
|
claude_mpm/services/agents/registry/__init__.py,sha256=ROBX82Ac4iLHEE7-aFUy7mT3NSz5eIub19ck5Q81NHQ,681
|
505
505
|
claude_mpm/services/agents/registry/deployed_agent_discovery.py,sha256=WqJOCnSrwdUGC0gL5YDj_7gv4kl75mN9d-sN_pDBERc,10244
|
@@ -691,6 +691,25 @@ claude_mpm/services/ticket_services/formatter_service.py,sha256=MQ981yaFuvXWUDLp
|
|
691
691
|
claude_mpm/services/ticket_services/search_service.py,sha256=CHDITcE6Dqu_98LOeb55qxr4yNpA7iBYSlnWXMg8KAI,9918
|
692
692
|
claude_mpm/services/ticket_services/validation_service.py,sha256=5Wo4YHLjQmZ1Ey9sYHyTjmtWqidywcV16B1T4zS_d-c,8623
|
693
693
|
claude_mpm/services/ticket_services/workflow_service.py,sha256=qbFMHaV3PlZ6J-YD2RVUugJ6WLVzAy_xCT0xMSPx1SY,7803
|
694
|
+
claude_mpm/services/unified/__init__.py,sha256=N5VKRC47hyTZrJkV00bOpTkSQxrix4mzaJNrZS0RFnI,1795
|
695
|
+
claude_mpm/services/unified/interfaces.py,sha256=zzplADK3lZLBJ68Tk8z5LUUpmfxvOqsd50UmfShI_Q8,13596
|
696
|
+
claude_mpm/services/unified/migration.py,sha256=Ih2UgGxOSdXDYwqco1QOFm5f7t6TLdIUKiTHU9kSa9c,17101
|
697
|
+
claude_mpm/services/unified/strategies.py,sha256=tNRghWxAIPRLwP06Hn6dao3-7u4aMnrG94SunIWe4yo,15096
|
698
|
+
claude_mpm/services/unified/unified_analyzer.py,sha256=7lmF3eSMpTabspEf70pPGTDGce6ihSdS3mfNjWR510c,17053
|
699
|
+
claude_mpm/services/unified/unified_config.py,sha256=-ZjVMoZv0BKxqNePYeks4gpXTwl-Y3oAjROdMLO_phA,22026
|
700
|
+
claude_mpm/services/unified/unified_deployment.py,sha256=nR54oKbcM4Q23YpKSNiC8NMYReONvVfKVVlxUZ5NQEw,15052
|
701
|
+
claude_mpm/services/unified/analyzer_strategies/__init__.py,sha256=H7xGr81UMJCJxM13S9Y-VpCmamJQ2ttSdootCOC86vQ,1368
|
702
|
+
claude_mpm/services/unified/analyzer_strategies/code_analyzer.py,sha256=y_oXFAVXfxPdJEZ7Ewv8vFTtTikqwe9fkYm9SAvKVxo,17065
|
703
|
+
claude_mpm/services/unified/analyzer_strategies/dependency_analyzer.py,sha256=JkLEhZu6rLoJTyQQQOEDwuy7PoFZwZBP1udIFbxfES4,23673
|
704
|
+
claude_mpm/services/unified/analyzer_strategies/performance_analyzer.py,sha256=q2Y8CJCCfImIKp4w_ekExWkrk06EfXBlhEXHDbK2nnc,31607
|
705
|
+
claude_mpm/services/unified/analyzer_strategies/security_analyzer.py,sha256=yrJm_zQ13Y_Q12V05wS024lBI8dRHj4YaTfyENsTgfg,25089
|
706
|
+
claude_mpm/services/unified/analyzer_strategies/structure_analyzer.py,sha256=AHLUhVkh8mc556eemIo8UzpoXHnUHdTI1U8f6nJITqQ,24810
|
707
|
+
claude_mpm/services/unified/deployment_strategies/__init__.py,sha256=8aBt4x3WPllGEPEae89Dn5wLzJfumI6z51oqfW497UY,2985
|
708
|
+
claude_mpm/services/unified/deployment_strategies/base.py,sha256=Rhg2olx377C_cg0tDn99buQ8HKy7QJzd63LvqtwbGQs,17656
|
709
|
+
claude_mpm/services/unified/deployment_strategies/cloud_strategies.py,sha256=HcF9h0aDTiHx48Uclm1xHCswD7hxLPngVYZ6y9CI1dg,18370
|
710
|
+
claude_mpm/services/unified/deployment_strategies/local.py,sha256=eydq9r6IiFpSTiydDJB2RJ9BltHe6rvbpijLKtc4kdI,20798
|
711
|
+
claude_mpm/services/unified/deployment_strategies/utils.py,sha256=n01KIhfTwomYP-3c2ALk5Nit0435GllwyaLhNeW2UnY,18914
|
712
|
+
claude_mpm/services/unified/deployment_strategies/vercel.py,sha256=5RBEReTej2hsDomqoF5OthUCjrNArdPnCma2I7qJgQo,15366
|
694
713
|
claude_mpm/services/version_control/__init__.py,sha256=U3bFV1upF3FgNrQGFld0GZt0vb3Eunm71mscgTg7zD0,1510
|
695
714
|
claude_mpm/services/version_control/branch_strategy.py,sha256=IhRDt4qIspvNyeONPJJfVKjtbKVVPTGHjGVgGApxj_Q,23190
|
696
715
|
claude_mpm/services/version_control/conflict_resolution.py,sha256=D7MCcrMifBic-My4CvWPpM0gn84rgYOAhnmpKs7R67Q,26061
|
@@ -730,9 +749,9 @@ claude_mpm/utils/subprocess_utils.py,sha256=ASpi6jh8vEjaYoIJ-xfvnmI3GSwOLBxVdoeb
|
|
730
749
|
claude_mpm/validation/__init__.py,sha256=YZhwE3mhit-lslvRLuwfX82xJ_k4haZeKmh4IWaVwtk,156
|
731
750
|
claude_mpm/validation/agent_validator.py,sha256=4jbD3F1isinPTCve4DadwpZ-p5omGFVPRe-oJdVzcDc,20915
|
732
751
|
claude_mpm/validation/frontmatter_validator.py,sha256=u8g4Eyd_9O6ugj7Un47oSGh3kqv4wMkuks2i_CtWRvM,7028
|
733
|
-
claude_mpm-4.
|
734
|
-
claude_mpm-4.
|
735
|
-
claude_mpm-4.
|
736
|
-
claude_mpm-4.
|
737
|
-
claude_mpm-4.
|
738
|
-
claude_mpm-4.
|
752
|
+
claude_mpm-4.4.0.dist-info/licenses/LICENSE,sha256=lpaivOlPuBZW1ds05uQLJJswy8Rp_HMNieJEbFlqvLk,1072
|
753
|
+
claude_mpm-4.4.0.dist-info/METADATA,sha256=9a2hiNWE67yPaIAg5EpT6meugBXq8h7nhGytn_WaBmw,16149
|
754
|
+
claude_mpm-4.4.0.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
|
755
|
+
claude_mpm-4.4.0.dist-info/entry_points.txt,sha256=FDPZgz8JOvD-6iuXY2l9Zbo9zYVRuE4uz4Qr0vLeGOk,471
|
756
|
+
claude_mpm-4.4.0.dist-info/top_level.txt,sha256=1nUg3FEaBySgm8t-s54jK5zoPnu3_eY6EP6IOlekyHA,11
|
757
|
+
claude_mpm-4.4.0.dist-info/RECORD,,
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|