claude-mpm 4.14.6__py3-none-any.whl → 4.14.8__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.
Potentially problematic release.
This version of claude-mpm might be problematic. Click here for more details.
- claude_mpm/VERSION +1 -1
- claude_mpm/agents/frontmatter_validator.py +284 -253
- claude_mpm/cli/__init__.py +34 -740
- claude_mpm/cli/commands/agent_manager.py +25 -12
- claude_mpm/cli/commands/agent_state_manager.py +186 -0
- claude_mpm/cli/commands/agents.py +204 -148
- claude_mpm/cli/commands/aggregate.py +7 -3
- claude_mpm/cli/commands/analyze.py +9 -4
- claude_mpm/cli/commands/analyze_code.py +7 -2
- claude_mpm/cli/commands/config.py +47 -13
- claude_mpm/cli/commands/configure.py +159 -1801
- claude_mpm/cli/commands/configure_agent_display.py +261 -0
- claude_mpm/cli/commands/configure_behavior_manager.py +204 -0
- claude_mpm/cli/commands/configure_hook_manager.py +225 -0
- claude_mpm/cli/commands/configure_models.py +18 -0
- claude_mpm/cli/commands/configure_navigation.py +165 -0
- claude_mpm/cli/commands/configure_paths.py +104 -0
- claude_mpm/cli/commands/configure_persistence.py +254 -0
- claude_mpm/cli/commands/configure_startup_manager.py +646 -0
- claude_mpm/cli/commands/configure_template_editor.py +497 -0
- claude_mpm/cli/commands/configure_validators.py +73 -0
- claude_mpm/cli/commands/memory.py +54 -20
- claude_mpm/cli/commands/mpm_init.py +35 -21
- claude_mpm/cli/executor.py +202 -0
- claude_mpm/cli/helpers.py +105 -0
- claude_mpm/cli/shared/output_formatters.py +28 -19
- claude_mpm/cli/startup.py +455 -0
- claude_mpm/core/enums.py +322 -0
- claude_mpm/core/instruction_reinforcement_hook.py +2 -1
- claude_mpm/core/interactive_session.py +6 -3
- claude_mpm/core/logging_config.py +6 -2
- claude_mpm/core/oneshot_session.py +8 -4
- claude_mpm/core/output_style_manager.py +12 -192
- claude_mpm/core/service_registry.py +5 -1
- claude_mpm/core/typing_utils.py +7 -6
- claude_mpm/hooks/instruction_reinforcement.py +7 -2
- claude_mpm/services/agents/deployment/interface_adapter.py +3 -2
- claude_mpm/services/agents/deployment/refactored_agent_deployment_service.py +3 -2
- claude_mpm/services/agents/memory/agent_memory_manager.py +5 -2
- claude_mpm/services/diagnostics/checks/installation_check.py +3 -2
- claude_mpm/services/diagnostics/checks/mcp_check.py +20 -6
- claude_mpm/services/mcp_gateway/tools/health_check_tool.py +8 -7
- claude_mpm/services/memory_hook_service.py +4 -1
- claude_mpm/services/monitor/daemon_manager.py +3 -2
- claude_mpm/services/monitor/handlers/dashboard.py +2 -1
- claude_mpm/services/monitor/handlers/hooks.py +2 -1
- claude_mpm/services/monitor/management/lifecycle.py +3 -2
- claude_mpm/services/monitor/server.py +2 -1
- claude_mpm/services/session_management_service.py +3 -2
- claude_mpm/services/socketio/handlers/hook.py +3 -2
- claude_mpm/services/socketio/server/main.py +3 -1
- claude_mpm/services/subprocess_launcher_service.py +14 -5
- claude_mpm/services/unified/analyzer_strategies/code_analyzer.py +6 -5
- claude_mpm/services/unified/analyzer_strategies/dependency_analyzer.py +5 -4
- claude_mpm/services/unified/analyzer_strategies/performance_analyzer.py +5 -4
- claude_mpm/services/unified/analyzer_strategies/security_analyzer.py +4 -3
- claude_mpm/services/unified/analyzer_strategies/structure_analyzer.py +4 -3
- claude_mpm/services/unified/config_strategies/validation_strategy.py +13 -9
- claude_mpm/services/unified/deployment_strategies/cloud_strategies.py +10 -3
- claude_mpm/services/unified/deployment_strategies/local.py +3 -2
- claude_mpm/services/unified/deployment_strategies/utils.py +2 -1
- claude_mpm/services/unified/deployment_strategies/vercel.py +2 -1
- claude_mpm/services/unified/interfaces.py +3 -1
- claude_mpm/services/unified/unified_analyzer.py +7 -6
- claude_mpm/services/unified/unified_config.py +2 -1
- claude_mpm/services/unified/unified_deployment.py +7 -2
- claude_mpm/tools/code_tree_analyzer.py +177 -141
- claude_mpm/tools/code_tree_events.py +4 -2
- {claude_mpm-4.14.6.dist-info → claude_mpm-4.14.8.dist-info}/METADATA +1 -1
- {claude_mpm-4.14.6.dist-info → claude_mpm-4.14.8.dist-info}/RECORD +74 -64
- claude_mpm/hooks/claude_hooks/hook_handler_eventbus.py +0 -425
- claude_mpm/hooks/claude_hooks/hook_handler_original.py +0 -1041
- claude_mpm/hooks/claude_hooks/hook_handler_refactored.py +0 -347
- claude_mpm/services/agents/deployment/agent_lifecycle_manager_refactored.py +0 -575
- claude_mpm/services/project/analyzer_refactored.py +0 -450
- {claude_mpm-4.14.6.dist-info → claude_mpm-4.14.8.dist-info}/WHEEL +0 -0
- {claude_mpm-4.14.6.dist-info → claude_mpm-4.14.8.dist-info}/entry_points.txt +0 -0
- {claude_mpm-4.14.6.dist-info → claude_mpm-4.14.8.dist-info}/licenses/LICENSE +0 -0
- {claude_mpm-4.14.6.dist-info → claude_mpm-4.14.8.dist-info}/top_level.txt +0 -0
|
@@ -14,6 +14,7 @@ import re
|
|
|
14
14
|
from pathlib import Path
|
|
15
15
|
from typing import Any, ClassVar, Dict, List, Optional
|
|
16
16
|
|
|
17
|
+
from claude_mpm.core.enums import OperationResult
|
|
17
18
|
from claude_mpm.core.logging_utils import get_logger
|
|
18
19
|
|
|
19
20
|
from ..strategies import (
|
|
@@ -166,7 +167,7 @@ class DependencyAnalyzerStrategy(AnalyzerStrategy):
|
|
|
166
167
|
return self._analyze_manifest(target_path, options)
|
|
167
168
|
|
|
168
169
|
return {
|
|
169
|
-
"status":
|
|
170
|
+
"status": OperationResult.ERROR,
|
|
170
171
|
"message": f"Unsupported target type: {type(target).__name__}",
|
|
171
172
|
}
|
|
172
173
|
|
|
@@ -175,7 +176,7 @@ class DependencyAnalyzerStrategy(AnalyzerStrategy):
|
|
|
175
176
|
) -> Dict[str, Any]:
|
|
176
177
|
"""Analyze dependencies in a project directory."""
|
|
177
178
|
results = {
|
|
178
|
-
"status":
|
|
179
|
+
"status": OperationResult.SUCCESS,
|
|
179
180
|
"type": "project",
|
|
180
181
|
"path": str(project_path),
|
|
181
182
|
"package_managers": [],
|
|
@@ -221,7 +222,7 @@ class DependencyAnalyzerStrategy(AnalyzerStrategy):
|
|
|
221
222
|
) -> Dict[str, Any]:
|
|
222
223
|
"""Analyze a specific package manifest file."""
|
|
223
224
|
results = {
|
|
224
|
-
"status":
|
|
225
|
+
"status": OperationResult.SUCCESS,
|
|
225
226
|
"type": "manifest",
|
|
226
227
|
"path": str(manifest_path),
|
|
227
228
|
"dependencies": {},
|
|
@@ -238,7 +239,7 @@ class DependencyAnalyzerStrategy(AnalyzerStrategy):
|
|
|
238
239
|
|
|
239
240
|
if not manager:
|
|
240
241
|
return {
|
|
241
|
-
"status":
|
|
242
|
+
"status": OperationResult.ERROR,
|
|
242
243
|
"message": f"Unknown manifest file: {manifest_path.name}",
|
|
243
244
|
}
|
|
244
245
|
|
|
@@ -14,6 +14,7 @@ import re
|
|
|
14
14
|
from pathlib import Path
|
|
15
15
|
from typing import Any, ClassVar, Dict, List, Optional
|
|
16
16
|
|
|
17
|
+
from claude_mpm.core.enums import OperationResult
|
|
17
18
|
from claude_mpm.core.logging_utils import get_logger
|
|
18
19
|
|
|
19
20
|
from ..strategies import (
|
|
@@ -188,14 +189,14 @@ class PerformanceAnalyzerStrategy(AnalyzerStrategy):
|
|
|
188
189
|
return self._analyze_ast_performance(target, options)
|
|
189
190
|
|
|
190
191
|
return {
|
|
191
|
-
"status":
|
|
192
|
+
"status": OperationResult.ERROR,
|
|
192
193
|
"message": f"Unsupported target type: {type(target).__name__}",
|
|
193
194
|
}
|
|
194
195
|
|
|
195
196
|
def _analyze_file(self, file_path: Path, options: Dict[str, Any]) -> Dict[str, Any]:
|
|
196
197
|
"""Analyze a single file for performance issues."""
|
|
197
198
|
results = {
|
|
198
|
-
"status":
|
|
199
|
+
"status": OperationResult.SUCCESS,
|
|
199
200
|
"type": "file",
|
|
200
201
|
"path": str(file_path),
|
|
201
202
|
"issues": [],
|
|
@@ -250,7 +251,7 @@ class PerformanceAnalyzerStrategy(AnalyzerStrategy):
|
|
|
250
251
|
) -> Dict[str, Any]:
|
|
251
252
|
"""Analyze all files in a directory for performance issues."""
|
|
252
253
|
results = {
|
|
253
|
-
"status":
|
|
254
|
+
"status": OperationResult.SUCCESS,
|
|
254
255
|
"type": "directory",
|
|
255
256
|
"path": str(dir_path),
|
|
256
257
|
"files_analyzed": 0,
|
|
@@ -654,7 +655,7 @@ class PerformanceAnalyzerStrategy(AnalyzerStrategy):
|
|
|
654
655
|
) -> Dict[str, Any]:
|
|
655
656
|
"""Analyze performance of an AST node."""
|
|
656
657
|
results = {
|
|
657
|
-
"status":
|
|
658
|
+
"status": OperationResult.SUCCESS,
|
|
658
659
|
"type": "ast",
|
|
659
660
|
"complexity": {},
|
|
660
661
|
"issues": [],
|
|
@@ -14,6 +14,7 @@ import re
|
|
|
14
14
|
from pathlib import Path
|
|
15
15
|
from typing import Any, ClassVar, Dict, List, Optional
|
|
16
16
|
|
|
17
|
+
from claude_mpm.core.enums import OperationResult
|
|
17
18
|
from claude_mpm.core.logging_utils import get_logger
|
|
18
19
|
|
|
19
20
|
from ..strategies import (
|
|
@@ -198,14 +199,14 @@ class SecurityAnalyzerStrategy(AnalyzerStrategy):
|
|
|
198
199
|
return self._analyze_directory(target_path, options)
|
|
199
200
|
|
|
200
201
|
return {
|
|
201
|
-
"status":
|
|
202
|
+
"status": OperationResult.ERROR,
|
|
202
203
|
"message": f"Unsupported target type: {type(target).__name__}",
|
|
203
204
|
}
|
|
204
205
|
|
|
205
206
|
def _analyze_file(self, file_path: Path, options: Dict[str, Any]) -> Dict[str, Any]:
|
|
206
207
|
"""Analyze a single file for security issues."""
|
|
207
208
|
results = {
|
|
208
|
-
"status":
|
|
209
|
+
"status": OperationResult.SUCCESS,
|
|
209
210
|
"type": "file",
|
|
210
211
|
"path": str(file_path),
|
|
211
212
|
"vulnerabilities": [],
|
|
@@ -251,7 +252,7 @@ class SecurityAnalyzerStrategy(AnalyzerStrategy):
|
|
|
251
252
|
) -> Dict[str, Any]:
|
|
252
253
|
"""Analyze all files in a directory for security issues."""
|
|
253
254
|
results = {
|
|
254
|
-
"status":
|
|
255
|
+
"status": OperationResult.SUCCESS,
|
|
255
256
|
"type": "directory",
|
|
256
257
|
"path": str(dir_path),
|
|
257
258
|
"files_analyzed": 0,
|
|
@@ -13,6 +13,7 @@ import fnmatch
|
|
|
13
13
|
from pathlib import Path
|
|
14
14
|
from typing import Any, ClassVar, Dict, List, Optional, Tuple
|
|
15
15
|
|
|
16
|
+
from claude_mpm.core.enums import OperationResult
|
|
16
17
|
from claude_mpm.core.logging_utils import get_logger
|
|
17
18
|
|
|
18
19
|
from ..strategies import (
|
|
@@ -174,14 +175,14 @@ class StructureAnalyzerStrategy(AnalyzerStrategy):
|
|
|
174
175
|
|
|
175
176
|
if not target_path.is_dir():
|
|
176
177
|
return {
|
|
177
|
-
"status":
|
|
178
|
+
"status": OperationResult.ERROR,
|
|
178
179
|
"message": "Target must be a directory",
|
|
179
180
|
}
|
|
180
181
|
|
|
181
182
|
return self._analyze_structure(target_path, options)
|
|
182
183
|
|
|
183
184
|
return {
|
|
184
|
-
"status":
|
|
185
|
+
"status": OperationResult.ERROR,
|
|
185
186
|
"message": f"Unsupported target type: {type(target).__name__}",
|
|
186
187
|
}
|
|
187
188
|
|
|
@@ -190,7 +191,7 @@ class StructureAnalyzerStrategy(AnalyzerStrategy):
|
|
|
190
191
|
) -> Dict[str, Any]:
|
|
191
192
|
"""Analyze the structure of a project directory."""
|
|
192
193
|
results = {
|
|
193
|
-
"status":
|
|
194
|
+
"status": OperationResult.SUCCESS,
|
|
194
195
|
"type": "structure",
|
|
195
196
|
"path": str(root_path),
|
|
196
197
|
"tree": {},
|
|
@@ -13,6 +13,7 @@ from enum import Enum
|
|
|
13
13
|
from pathlib import Path
|
|
14
14
|
from typing import Any, Callable, Dict, List, Optional, Pattern, Union
|
|
15
15
|
|
|
16
|
+
from claude_mpm.core.enums import ValidationSeverity
|
|
16
17
|
from claude_mpm.core.logging_utils import get_logger
|
|
17
18
|
|
|
18
19
|
from .unified_config_service import IConfigStrategy
|
|
@@ -45,7 +46,7 @@ class ValidationRule:
|
|
|
45
46
|
type: ValidationType
|
|
46
47
|
params: Dict[str, Any] = field(default_factory=dict)
|
|
47
48
|
message: Optional[str] = None
|
|
48
|
-
severity: str =
|
|
49
|
+
severity: str = ValidationSeverity.ERROR
|
|
49
50
|
condition: Optional[Callable] = None
|
|
50
51
|
|
|
51
52
|
|
|
@@ -73,15 +74,18 @@ class BaseValidator(ABC):
|
|
|
73
74
|
"""Perform validation"""
|
|
74
75
|
|
|
75
76
|
def _create_result(
|
|
76
|
-
self,
|
|
77
|
+
self,
|
|
78
|
+
valid: bool,
|
|
79
|
+
message: Optional[str] = None,
|
|
80
|
+
severity: str = ValidationSeverity.ERROR,
|
|
77
81
|
) -> ValidationResult:
|
|
78
82
|
"""Create validation result"""
|
|
79
83
|
result = ValidationResult(valid=valid)
|
|
80
84
|
|
|
81
85
|
if not valid and message:
|
|
82
|
-
if severity ==
|
|
86
|
+
if severity == ValidationSeverity.ERROR:
|
|
83
87
|
result.errors.append(message)
|
|
84
|
-
elif severity ==
|
|
88
|
+
elif severity == ValidationSeverity.WARNING:
|
|
85
89
|
result.warnings.append(message)
|
|
86
90
|
else:
|
|
87
91
|
result.info.append(message)
|
|
@@ -556,9 +560,9 @@ class DependencyValidator(BaseValidator):
|
|
|
556
560
|
if errors:
|
|
557
561
|
result = ValidationResult(valid=False)
|
|
558
562
|
for error in errors:
|
|
559
|
-
if rule.severity ==
|
|
563
|
+
if rule.severity == ValidationSeverity.ERROR:
|
|
560
564
|
result.errors.append(error)
|
|
561
|
-
elif rule.severity ==
|
|
565
|
+
elif rule.severity == ValidationSeverity.WARNING:
|
|
562
566
|
result.warnings.append(error)
|
|
563
567
|
else:
|
|
564
568
|
result.info.append(error)
|
|
@@ -721,7 +725,7 @@ class ConditionalValidator(BaseValidator):
|
|
|
721
725
|
type=ValidationType[rule_def.get("type", "CUSTOM").upper()],
|
|
722
726
|
params=rule_def.get("params", {}),
|
|
723
727
|
message=rule_def.get("message"),
|
|
724
|
-
severity=rule_def.get("severity",
|
|
728
|
+
severity=rule_def.get("severity", ValidationSeverity.ERROR),
|
|
725
729
|
)
|
|
726
730
|
|
|
727
731
|
# Find appropriate validator
|
|
@@ -843,9 +847,9 @@ class CrossFieldValidator(BaseValidator):
|
|
|
843
847
|
for constraint in constraints:
|
|
844
848
|
if not self._evaluate_constraint(config, constraint):
|
|
845
849
|
message = constraint.get("message", "Cross-field constraint failed")
|
|
846
|
-
if rule.severity ==
|
|
850
|
+
if rule.severity == ValidationSeverity.ERROR:
|
|
847
851
|
result.errors.append(message)
|
|
848
|
-
elif rule.severity ==
|
|
852
|
+
elif rule.severity == ValidationSeverity.WARNING:
|
|
849
853
|
result.warnings.append(message)
|
|
850
854
|
else:
|
|
851
855
|
result.info.append(message)
|
|
@@ -12,6 +12,7 @@ from datetime import datetime, timezone
|
|
|
12
12
|
from pathlib import Path
|
|
13
13
|
from typing import Any, Dict, List
|
|
14
14
|
|
|
15
|
+
from claude_mpm.core.enums import OperationResult, ServiceState
|
|
15
16
|
from claude_mpm.core.logging_utils import get_logger
|
|
16
17
|
from claude_mpm.services.unified.strategies import StrategyMetadata, StrategyPriority
|
|
17
18
|
|
|
@@ -411,11 +412,13 @@ class DockerDeploymentStrategy(DeploymentStrategy):
|
|
|
411
412
|
def get_health_status(self, deployment_info: Dict[str, Any]) -> Dict[str, Any]:
|
|
412
413
|
"""Get Docker container health."""
|
|
413
414
|
container_id = deployment_info.get("container_id")
|
|
414
|
-
health = {"status":
|
|
415
|
+
health = {"status": OperationResult.UNKNOWN, "container_id": container_id}
|
|
415
416
|
|
|
416
417
|
if container_id:
|
|
417
418
|
health["running"] = check_docker_container(container_id)
|
|
418
|
-
health["status"] =
|
|
419
|
+
health["status"] = (
|
|
420
|
+
ServiceState.RUNNING if health["running"] else ServiceState.ERROR
|
|
421
|
+
)
|
|
419
422
|
|
|
420
423
|
return health
|
|
421
424
|
|
|
@@ -560,7 +563,11 @@ class GitDeploymentStrategy(DeploymentStrategy):
|
|
|
560
563
|
def get_health_status(self, deployment_info: Dict[str, Any]) -> Dict[str, Any]:
|
|
561
564
|
"""Get Git deployment health."""
|
|
562
565
|
return {
|
|
563
|
-
"status":
|
|
566
|
+
"status": (
|
|
567
|
+
ServiceState.RUNNING
|
|
568
|
+
if deployment_info.get("commit_hash")
|
|
569
|
+
else ServiceState.ERROR
|
|
570
|
+
),
|
|
564
571
|
"commit": deployment_info.get("commit_hash", "unknown"),
|
|
565
572
|
"branch": deployment_info.get("branch", "unknown"),
|
|
566
573
|
}
|
|
@@ -19,6 +19,7 @@ from typing import Any, Dict, List, Optional
|
|
|
19
19
|
|
|
20
20
|
import yaml
|
|
21
21
|
|
|
22
|
+
from claude_mpm.core.enums import OperationResult
|
|
22
23
|
from claude_mpm.core.logging_utils import get_logger
|
|
23
24
|
from claude_mpm.services.unified.strategies import StrategyMetadata, StrategyPriority
|
|
24
25
|
|
|
@@ -272,14 +273,14 @@ class LocalDeploymentStrategy(DeploymentStrategy):
|
|
|
272
273
|
deployed_path = Path(deployment_info.get("deployed_path", ""))
|
|
273
274
|
|
|
274
275
|
health = {
|
|
275
|
-
"status":
|
|
276
|
+
"status": OperationResult.UNKNOWN,
|
|
276
277
|
"deployed_path": str(deployed_path),
|
|
277
278
|
"exists": deployed_path.exists() if deployed_path else False,
|
|
278
279
|
"checks": {},
|
|
279
280
|
}
|
|
280
281
|
|
|
281
282
|
if deployed_path and deployed_path.exists():
|
|
282
|
-
health["status"] =
|
|
283
|
+
health["status"] = OperationResult.SUCCESS
|
|
283
284
|
|
|
284
285
|
# Check file integrity
|
|
285
286
|
for file_path in deployment_info.get("deployed_files", []):
|
|
@@ -23,6 +23,7 @@ from datetime import datetime, timezone
|
|
|
23
23
|
from pathlib import Path
|
|
24
24
|
from typing import Any, Dict, List, Optional, Tuple, Union
|
|
25
25
|
|
|
26
|
+
from claude_mpm.core.enums import OperationResult
|
|
26
27
|
from claude_mpm.core.logging_utils import get_logger
|
|
27
28
|
|
|
28
29
|
logger = get_logger(__name__)
|
|
@@ -256,7 +257,7 @@ def verify_deployment_health(
|
|
|
256
257
|
Health status dictionary
|
|
257
258
|
"""
|
|
258
259
|
health = {
|
|
259
|
-
"status":
|
|
260
|
+
"status": OperationResult.UNKNOWN,
|
|
260
261
|
"timestamp": datetime.now(timezone.utc).isoformat(),
|
|
261
262
|
"checks": {},
|
|
262
263
|
"errors": [],
|
|
@@ -13,6 +13,7 @@ from datetime import datetime, timezone
|
|
|
13
13
|
from pathlib import Path
|
|
14
14
|
from typing import Any, Dict, List, Optional
|
|
15
15
|
|
|
16
|
+
from claude_mpm.core.enums import OperationResult
|
|
16
17
|
from claude_mpm.core.logging_utils import get_logger
|
|
17
18
|
from claude_mpm.services.unified.strategies import StrategyMetadata, StrategyPriority
|
|
18
19
|
|
|
@@ -307,7 +308,7 @@ class VercelDeploymentStrategy(DeploymentStrategy):
|
|
|
307
308
|
deployment_url = deployment_info.get("deployment_url")
|
|
308
309
|
|
|
309
310
|
health = {
|
|
310
|
-
"status":
|
|
311
|
+
"status": OperationResult.UNKNOWN,
|
|
311
312
|
"deployment_url": deployment_url,
|
|
312
313
|
"checks": {},
|
|
313
314
|
}
|
|
@@ -25,6 +25,8 @@ from enum import Enum
|
|
|
25
25
|
from pathlib import Path
|
|
26
26
|
from typing import Any, Dict, List, Optional, Set, TypeVar, Union
|
|
27
27
|
|
|
28
|
+
from claude_mpm.core.enums import ValidationSeverity
|
|
29
|
+
|
|
28
30
|
# Type variables for generic interfaces
|
|
29
31
|
T = TypeVar("T")
|
|
30
32
|
ConfigType = TypeVar("ConfigType", bound=Dict[str, Any])
|
|
@@ -88,7 +90,7 @@ class AnalysisResult:
|
|
|
88
90
|
findings: List[Dict[str, Any]] = field(default_factory=list)
|
|
89
91
|
metrics: Dict[str, Any] = field(default_factory=dict)
|
|
90
92
|
summary: str = ""
|
|
91
|
-
severity: str =
|
|
93
|
+
severity: str = ValidationSeverity.INFO
|
|
92
94
|
recommendations: List[str] = field(default_factory=list)
|
|
93
95
|
|
|
94
96
|
|
|
@@ -25,6 +25,7 @@ Features:
|
|
|
25
25
|
from pathlib import Path
|
|
26
26
|
from typing import Any, Dict, List, Optional, Union
|
|
27
27
|
|
|
28
|
+
from claude_mpm.core.enums import ServiceState, ValidationSeverity
|
|
28
29
|
from claude_mpm.core.logging_utils import get_logger
|
|
29
30
|
|
|
30
31
|
from .interfaces import (
|
|
@@ -134,7 +135,7 @@ class UnifiedAnalyzer(IAnalyzerService, IUnifiedService):
|
|
|
134
135
|
|
|
135
136
|
return {
|
|
136
137
|
"service": "UnifiedAnalyzer",
|
|
137
|
-
"status":
|
|
138
|
+
"status": ServiceState.RUNNING if self._initialized else ServiceState.ERROR,
|
|
138
139
|
"initialized": self._initialized,
|
|
139
140
|
"registered_strategies": len(strategies),
|
|
140
141
|
"cache_size": len(self._analysis_cache),
|
|
@@ -223,7 +224,7 @@ class UnifiedAnalyzer(IAnalyzerService, IUnifiedService):
|
|
|
223
224
|
return AnalysisResult(
|
|
224
225
|
success=False,
|
|
225
226
|
summary=f"No strategy available for analysis type: {analysis_type}",
|
|
226
|
-
severity=
|
|
227
|
+
severity=ValidationSeverity.ERROR,
|
|
227
228
|
)
|
|
228
229
|
|
|
229
230
|
# Execute analysis using strategy
|
|
@@ -236,7 +237,7 @@ class UnifiedAnalyzer(IAnalyzerService, IUnifiedService):
|
|
|
236
237
|
return AnalysisResult(
|
|
237
238
|
success=False,
|
|
238
239
|
summary=f"Validation failed: {'; '.join(validation_errors)}",
|
|
239
|
-
severity=
|
|
240
|
+
severity=ValidationSeverity.ERROR,
|
|
240
241
|
)
|
|
241
242
|
|
|
242
243
|
# Perform analysis
|
|
@@ -251,7 +252,7 @@ class UnifiedAnalyzer(IAnalyzerService, IUnifiedService):
|
|
|
251
252
|
findings=result_data.get("findings", []),
|
|
252
253
|
metrics=metrics,
|
|
253
254
|
summary=result_data.get("summary", "Analysis completed"),
|
|
254
|
-
severity=result_data.get("severity",
|
|
255
|
+
severity=result_data.get("severity", ValidationSeverity.INFO),
|
|
255
256
|
recommendations=result_data.get("recommendations", []),
|
|
256
257
|
)
|
|
257
258
|
|
|
@@ -405,7 +406,7 @@ class UnifiedAnalyzer(IAnalyzerService, IUnifiedService):
|
|
|
405
406
|
)
|
|
406
407
|
|
|
407
408
|
# Add severity-based recommendations
|
|
408
|
-
if analysis_result.severity ==
|
|
409
|
+
if analysis_result.severity == ValidationSeverity.CRITICAL:
|
|
409
410
|
recommendations.insert(
|
|
410
411
|
0,
|
|
411
412
|
{
|
|
@@ -414,7 +415,7 @@ class UnifiedAnalyzer(IAnalyzerService, IUnifiedService):
|
|
|
414
415
|
"priority": "high",
|
|
415
416
|
},
|
|
416
417
|
)
|
|
417
|
-
elif analysis_result.severity ==
|
|
418
|
+
elif analysis_result.severity == ValidationSeverity.ERROR:
|
|
418
419
|
recommendations.insert(
|
|
419
420
|
0,
|
|
420
421
|
{
|
|
@@ -26,6 +26,7 @@ import json
|
|
|
26
26
|
from pathlib import Path
|
|
27
27
|
from typing import Any, Dict, List, Optional, Union
|
|
28
28
|
|
|
29
|
+
from claude_mpm.core.enums import ServiceState
|
|
29
30
|
from claude_mpm.core.logging_utils import get_logger
|
|
30
31
|
|
|
31
32
|
from .interfaces import (
|
|
@@ -153,7 +154,7 @@ class UnifiedConfigManager(IConfigurationService, IUnifiedService):
|
|
|
153
154
|
|
|
154
155
|
return {
|
|
155
156
|
"service": "UnifiedConfigManager",
|
|
156
|
-
"status":
|
|
157
|
+
"status": ServiceState.RUNNING if self._initialized else ServiceState.ERROR,
|
|
157
158
|
"initialized": self._initialized,
|
|
158
159
|
"registered_strategies": len(strategies),
|
|
159
160
|
"loaded_configs": len(self._configs),
|
|
@@ -24,6 +24,7 @@ Features:
|
|
|
24
24
|
from pathlib import Path
|
|
25
25
|
from typing import Any, Dict, List, Optional, Union
|
|
26
26
|
|
|
27
|
+
from claude_mpm.core.enums import OperationResult, ServiceState
|
|
27
28
|
from claude_mpm.core.logging_utils import get_logger
|
|
28
29
|
|
|
29
30
|
from .interfaces import (
|
|
@@ -140,7 +141,7 @@ class UnifiedDeploymentService(IDeploymentService, IUnifiedService):
|
|
|
140
141
|
|
|
141
142
|
return {
|
|
142
143
|
"service": "UnifiedDeploymentService",
|
|
143
|
-
"status":
|
|
144
|
+
"status": ServiceState.RUNNING if self._initialized else ServiceState.ERROR,
|
|
144
145
|
"initialized": self._initialized,
|
|
145
146
|
"registered_strategies": len(strategies),
|
|
146
147
|
"active_deployments": len(self._deployments),
|
|
@@ -426,7 +427,11 @@ class UnifiedDeploymentService(IDeploymentService, IUnifiedService):
|
|
|
426
427
|
|
|
427
428
|
return {
|
|
428
429
|
"id": deployment_id,
|
|
429
|
-
"status":
|
|
430
|
+
"status": (
|
|
431
|
+
OperationResult.CANCELLED
|
|
432
|
+
if deployment.get("rolled_back")
|
|
433
|
+
else OperationResult.SUCCESS
|
|
434
|
+
),
|
|
430
435
|
"type": deployment["type"],
|
|
431
436
|
"strategy": deployment["strategy"],
|
|
432
437
|
"source": deployment["source"],
|