claude-mpm 4.13.2__py3-none-any.whl → 4.18.2__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- claude_mpm/VERSION +1 -1
- claude_mpm/agents/BASE_ENGINEER.md +286 -0
- claude_mpm/agents/BASE_PM.md +48 -17
- claude_mpm/agents/OUTPUT_STYLE.md +329 -11
- claude_mpm/agents/PM_INSTRUCTIONS.md +227 -8
- claude_mpm/agents/agent_loader.py +17 -5
- claude_mpm/agents/frontmatter_validator.py +284 -253
- claude_mpm/agents/templates/agentic-coder-optimizer.json +9 -2
- claude_mpm/agents/templates/api_qa.json +7 -1
- claude_mpm/agents/templates/clerk-ops.json +8 -1
- claude_mpm/agents/templates/code_analyzer.json +4 -1
- claude_mpm/agents/templates/dart_engineer.json +11 -1
- claude_mpm/agents/templates/data_engineer.json +11 -1
- claude_mpm/agents/templates/documentation.json +6 -1
- claude_mpm/agents/templates/engineer.json +18 -1
- claude_mpm/agents/templates/gcp_ops_agent.json +8 -1
- claude_mpm/agents/templates/golang_engineer.json +11 -1
- claude_mpm/agents/templates/java_engineer.json +12 -2
- claude_mpm/agents/templates/local_ops_agent.json +1217 -6
- claude_mpm/agents/templates/nextjs_engineer.json +11 -1
- claude_mpm/agents/templates/ops.json +8 -1
- claude_mpm/agents/templates/php-engineer.json +11 -1
- claude_mpm/agents/templates/project_organizer.json +10 -3
- claude_mpm/agents/templates/prompt-engineer.json +5 -1
- claude_mpm/agents/templates/python_engineer.json +11 -1
- claude_mpm/agents/templates/qa.json +7 -1
- claude_mpm/agents/templates/react_engineer.json +11 -1
- claude_mpm/agents/templates/refactoring_engineer.json +8 -1
- claude_mpm/agents/templates/research.json +4 -1
- claude_mpm/agents/templates/ruby-engineer.json +11 -1
- claude_mpm/agents/templates/rust_engineer.json +11 -1
- claude_mpm/agents/templates/security.json +6 -1
- claude_mpm/agents/templates/svelte-engineer.json +225 -0
- claude_mpm/agents/templates/ticketing.json +6 -1
- claude_mpm/agents/templates/typescript_engineer.json +11 -1
- claude_mpm/agents/templates/vercel_ops_agent.json +8 -1
- claude_mpm/agents/templates/version_control.json +8 -1
- claude_mpm/agents/templates/web_qa.json +7 -1
- claude_mpm/agents/templates/web_ui.json +11 -1
- claude_mpm/cli/__init__.py +34 -706
- 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/auto_configure.py +7 -9
- claude_mpm/cli/commands/config.py +47 -13
- claude_mpm/cli/commands/configure.py +294 -1788
- 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 +167 -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/local_deploy.py +537 -0
- claude_mpm/cli/commands/memory.py +54 -20
- claude_mpm/cli/commands/mpm_init.py +39 -25
- claude_mpm/cli/commands/mpm_init_handler.py +8 -3
- claude_mpm/cli/executor.py +202 -0
- claude_mpm/cli/helpers.py +105 -0
- claude_mpm/cli/interactive/__init__.py +3 -0
- claude_mpm/cli/interactive/skills_wizard.py +491 -0
- claude_mpm/cli/parsers/__init__.py +7 -1
- claude_mpm/cli/parsers/base_parser.py +98 -3
- claude_mpm/cli/parsers/local_deploy_parser.py +227 -0
- claude_mpm/cli/shared/output_formatters.py +28 -19
- claude_mpm/cli/startup.py +481 -0
- claude_mpm/cli/utils.py +52 -1
- claude_mpm/commands/mpm-help.md +3 -0
- claude_mpm/commands/mpm-version.md +113 -0
- claude_mpm/commands/mpm.md +1 -0
- claude_mpm/config/agent_config.py +2 -2
- claude_mpm/config/model_config.py +428 -0
- claude_mpm/core/base_service.py +13 -12
- claude_mpm/core/enums.py +452 -0
- claude_mpm/core/factories.py +1 -1
- claude_mpm/core/instruction_reinforcement_hook.py +2 -1
- claude_mpm/core/interactive_session.py +9 -3
- claude_mpm/core/logging_config.py +6 -2
- claude_mpm/core/oneshot_session.py +8 -4
- claude_mpm/core/optimized_agent_loader.py +3 -3
- claude_mpm/core/output_style_manager.py +12 -192
- claude_mpm/core/service_registry.py +5 -1
- claude_mpm/core/types.py +2 -9
- claude_mpm/core/typing_utils.py +7 -6
- claude_mpm/dashboard/static/js/dashboard.js +0 -14
- claude_mpm/dashboard/templates/index.html +3 -41
- claude_mpm/hooks/claude_hooks/response_tracking.py +35 -1
- claude_mpm/hooks/instruction_reinforcement.py +7 -2
- claude_mpm/models/resume_log.py +340 -0
- claude_mpm/services/agents/auto_config_manager.py +10 -11
- claude_mpm/services/agents/deployment/agent_configuration_manager.py +1 -1
- claude_mpm/services/agents/deployment/agent_record_service.py +1 -1
- claude_mpm/services/agents/deployment/agent_validator.py +17 -1
- claude_mpm/services/agents/deployment/async_agent_deployment.py +1 -1
- claude_mpm/services/agents/deployment/interface_adapter.py +3 -2
- claude_mpm/services/agents/deployment/local_template_deployment.py +1 -1
- claude_mpm/services/agents/deployment/pipeline/steps/agent_processing_step.py +7 -6
- claude_mpm/services/agents/deployment/pipeline/steps/base_step.py +7 -16
- claude_mpm/services/agents/deployment/pipeline/steps/configuration_step.py +4 -3
- claude_mpm/services/agents/deployment/pipeline/steps/target_directory_step.py +5 -3
- claude_mpm/services/agents/deployment/pipeline/steps/validation_step.py +6 -5
- claude_mpm/services/agents/deployment/refactored_agent_deployment_service.py +9 -6
- claude_mpm/services/agents/deployment/validation/__init__.py +3 -1
- claude_mpm/services/agents/deployment/validation/validation_result.py +1 -9
- claude_mpm/services/agents/local_template_manager.py +1 -1
- claude_mpm/services/agents/memory/agent_memory_manager.py +5 -2
- claude_mpm/services/agents/registry/modification_tracker.py +5 -2
- claude_mpm/services/command_handler_service.py +11 -5
- claude_mpm/services/core/interfaces/__init__.py +74 -2
- claude_mpm/services/core/interfaces/health.py +172 -0
- claude_mpm/services/core/interfaces/model.py +281 -0
- claude_mpm/services/core/interfaces/process.py +372 -0
- claude_mpm/services/core/interfaces/restart.py +307 -0
- claude_mpm/services/core/interfaces/stability.py +260 -0
- claude_mpm/services/core/models/__init__.py +33 -0
- claude_mpm/services/core/models/agent_config.py +12 -28
- claude_mpm/services/core/models/health.py +162 -0
- claude_mpm/services/core/models/process.py +235 -0
- claude_mpm/services/core/models/restart.py +302 -0
- claude_mpm/services/core/models/stability.py +264 -0
- claude_mpm/services/core/path_resolver.py +23 -7
- claude_mpm/services/diagnostics/__init__.py +2 -2
- claude_mpm/services/diagnostics/checks/agent_check.py +25 -24
- claude_mpm/services/diagnostics/checks/claude_code_check.py +24 -23
- claude_mpm/services/diagnostics/checks/common_issues_check.py +25 -24
- claude_mpm/services/diagnostics/checks/configuration_check.py +24 -23
- claude_mpm/services/diagnostics/checks/filesystem_check.py +18 -17
- claude_mpm/services/diagnostics/checks/installation_check.py +30 -29
- claude_mpm/services/diagnostics/checks/instructions_check.py +20 -19
- claude_mpm/services/diagnostics/checks/mcp_check.py +50 -36
- claude_mpm/services/diagnostics/checks/mcp_services_check.py +36 -31
- claude_mpm/services/diagnostics/checks/monitor_check.py +23 -22
- claude_mpm/services/diagnostics/checks/startup_log_check.py +9 -8
- claude_mpm/services/diagnostics/diagnostic_runner.py +6 -5
- claude_mpm/services/diagnostics/doctor_reporter.py +28 -25
- claude_mpm/services/diagnostics/models.py +19 -24
- claude_mpm/services/infrastructure/monitoring/__init__.py +1 -1
- claude_mpm/services/infrastructure/monitoring/aggregator.py +12 -12
- claude_mpm/services/infrastructure/monitoring/base.py +5 -13
- claude_mpm/services/infrastructure/monitoring/network.py +7 -6
- claude_mpm/services/infrastructure/monitoring/process.py +13 -12
- claude_mpm/services/infrastructure/monitoring/resources.py +7 -6
- claude_mpm/services/infrastructure/monitoring/service.py +16 -15
- claude_mpm/services/infrastructure/resume_log_generator.py +439 -0
- claude_mpm/services/local_ops/__init__.py +163 -0
- claude_mpm/services/local_ops/crash_detector.py +257 -0
- claude_mpm/services/local_ops/health_checks/__init__.py +28 -0
- claude_mpm/services/local_ops/health_checks/http_check.py +224 -0
- claude_mpm/services/local_ops/health_checks/process_check.py +236 -0
- claude_mpm/services/local_ops/health_checks/resource_check.py +255 -0
- claude_mpm/services/local_ops/health_manager.py +430 -0
- claude_mpm/services/local_ops/log_monitor.py +396 -0
- claude_mpm/services/local_ops/memory_leak_detector.py +294 -0
- claude_mpm/services/local_ops/process_manager.py +595 -0
- claude_mpm/services/local_ops/resource_monitor.py +331 -0
- claude_mpm/services/local_ops/restart_manager.py +401 -0
- claude_mpm/services/local_ops/restart_policy.py +387 -0
- claude_mpm/services/local_ops/state_manager.py +372 -0
- claude_mpm/services/local_ops/unified_manager.py +600 -0
- claude_mpm/services/mcp_config_manager.py +9 -4
- claude_mpm/services/mcp_gateway/core/__init__.py +1 -2
- claude_mpm/services/mcp_gateway/core/base.py +18 -31
- claude_mpm/services/mcp_gateway/tools/external_mcp_services.py +71 -24
- claude_mpm/services/mcp_gateway/tools/health_check_tool.py +30 -28
- claude_mpm/services/memory_hook_service.py +4 -1
- claude_mpm/services/model/__init__.py +147 -0
- claude_mpm/services/model/base_provider.py +365 -0
- claude_mpm/services/model/claude_provider.py +412 -0
- claude_mpm/services/model/model_router.py +453 -0
- claude_mpm/services/model/ollama_provider.py +415 -0
- 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/session_manager.py +205 -1
- claude_mpm/services/shared/async_service_base.py +16 -27
- claude_mpm/services/shared/lifecycle_service_base.py +1 -14
- claude_mpm/services/socketio/handlers/__init__.py +5 -2
- claude_mpm/services/socketio/handlers/hook.py +13 -2
- claude_mpm/services/socketio/handlers/registry.py +4 -2
- claude_mpm/services/socketio/server/main.py +10 -8
- claude_mpm/services/subprocess_launcher_service.py +14 -5
- claude_mpm/services/unified/analyzer_strategies/code_analyzer.py +8 -7
- claude_mpm/services/unified/analyzer_strategies/dependency_analyzer.py +6 -5
- claude_mpm/services/unified/analyzer_strategies/performance_analyzer.py +8 -7
- claude_mpm/services/unified/analyzer_strategies/security_analyzer.py +7 -6
- claude_mpm/services/unified/analyzer_strategies/structure_analyzer.py +5 -4
- 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 +6 -5
- claude_mpm/services/unified/deployment_strategies/utils.py +6 -5
- claude_mpm/services/unified/deployment_strategies/vercel.py +7 -6
- claude_mpm/services/unified/interfaces.py +3 -1
- claude_mpm/services/unified/unified_analyzer.py +14 -10
- claude_mpm/services/unified/unified_config.py +2 -1
- claude_mpm/services/unified/unified_deployment.py +9 -4
- claude_mpm/services/version_service.py +104 -1
- claude_mpm/skills/__init__.py +21 -0
- claude_mpm/skills/bundled/__init__.py +6 -0
- claude_mpm/skills/bundled/api-documentation.md +393 -0
- claude_mpm/skills/bundled/async-testing.md +571 -0
- claude_mpm/skills/bundled/code-review.md +143 -0
- claude_mpm/skills/bundled/database-migration.md +199 -0
- claude_mpm/skills/bundled/docker-containerization.md +194 -0
- claude_mpm/skills/bundled/express-local-dev.md +1429 -0
- claude_mpm/skills/bundled/fastapi-local-dev.md +1199 -0
- claude_mpm/skills/bundled/git-workflow.md +414 -0
- claude_mpm/skills/bundled/imagemagick.md +204 -0
- claude_mpm/skills/bundled/json-data-handling.md +223 -0
- claude_mpm/skills/bundled/nextjs-local-dev.md +807 -0
- claude_mpm/skills/bundled/pdf.md +141 -0
- claude_mpm/skills/bundled/performance-profiling.md +567 -0
- claude_mpm/skills/bundled/refactoring-patterns.md +180 -0
- claude_mpm/skills/bundled/security-scanning.md +327 -0
- claude_mpm/skills/bundled/systematic-debugging.md +473 -0
- claude_mpm/skills/bundled/test-driven-development.md +378 -0
- claude_mpm/skills/bundled/vite-local-dev.md +1061 -0
- claude_mpm/skills/bundled/web-performance-optimization.md +2305 -0
- claude_mpm/skills/bundled/xlsx.md +157 -0
- claude_mpm/skills/registry.py +286 -0
- claude_mpm/skills/skill_manager.py +310 -0
- claude_mpm/tools/code_tree_analyzer.py +177 -141
- claude_mpm/tools/code_tree_events.py +4 -2
- claude_mpm/utils/agent_dependency_loader.py +2 -2
- {claude_mpm-4.13.2.dist-info → claude_mpm-4.18.2.dist-info}/METADATA +117 -8
- {claude_mpm-4.13.2.dist-info → claude_mpm-4.18.2.dist-info}/RECORD +238 -174
- claude_mpm/dashboard/static/css/code-tree.css +0 -1639
- claude_mpm/dashboard/static/js/components/code-tree/tree-breadcrumb.js +0 -353
- claude_mpm/dashboard/static/js/components/code-tree/tree-constants.js +0 -235
- claude_mpm/dashboard/static/js/components/code-tree/tree-search.js +0 -409
- claude_mpm/dashboard/static/js/components/code-tree/tree-utils.js +0 -435
- claude_mpm/dashboard/static/js/components/code-tree.js +0 -5869
- claude_mpm/dashboard/static/js/components/code-viewer.js +0 -1386
- 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.13.2.dist-info → claude_mpm-4.18.2.dist-info}/WHEEL +0 -0
- {claude_mpm-4.13.2.dist-info → claude_mpm-4.18.2.dist-info}/entry_points.txt +0 -0
- {claude_mpm-4.13.2.dist-info → claude_mpm-4.18.2.dist-info}/licenses/LICENSE +0 -0
- {claude_mpm-4.13.2.dist-info → claude_mpm-4.18.2.dist-info}/top_level.txt +0 -0
|
@@ -3,7 +3,9 @@
|
|
|
3
3
|
import time
|
|
4
4
|
from pathlib import Path
|
|
5
5
|
|
|
6
|
-
from .
|
|
6
|
+
from claude_mpm.core.enums import OperationResult
|
|
7
|
+
|
|
8
|
+
from .base_step import BaseDeploymentStep, StepResult
|
|
7
9
|
|
|
8
10
|
|
|
9
11
|
class TargetDirectorySetupStep(BaseDeploymentStep):
|
|
@@ -59,7 +61,7 @@ class TargetDirectorySetupStep(BaseDeploymentStep):
|
|
|
59
61
|
context.step_timings[self.name] = execution_time
|
|
60
62
|
|
|
61
63
|
return StepResult(
|
|
62
|
-
status=
|
|
64
|
+
status=OperationResult.SUCCESS,
|
|
63
65
|
message=f"Target directory set up at {context.actual_target_dir} in {execution_time:.3f}s",
|
|
64
66
|
execution_time=execution_time,
|
|
65
67
|
)
|
|
@@ -73,7 +75,7 @@ class TargetDirectorySetupStep(BaseDeploymentStep):
|
|
|
73
75
|
context.add_error(error_msg)
|
|
74
76
|
|
|
75
77
|
return StepResult(
|
|
76
|
-
status=
|
|
78
|
+
status=OperationResult.FAILED,
|
|
77
79
|
message=error_msg,
|
|
78
80
|
error=e,
|
|
79
81
|
execution_time=execution_time,
|
|
@@ -2,9 +2,10 @@
|
|
|
2
2
|
|
|
3
3
|
import time
|
|
4
4
|
|
|
5
|
+
from claude_mpm.core.enums import OperationResult
|
|
5
6
|
from claude_mpm.services.agents.deployment.validation import DeploymentValidator
|
|
6
7
|
|
|
7
|
-
from .base_step import BaseDeploymentStep, StepResult
|
|
8
|
+
from .base_step import BaseDeploymentStep, StepResult
|
|
8
9
|
|
|
9
10
|
|
|
10
11
|
class ValidationStep(BaseDeploymentStep):
|
|
@@ -49,13 +50,13 @@ class ValidationStep(BaseDeploymentStep):
|
|
|
49
50
|
|
|
50
51
|
# Determine step status
|
|
51
52
|
if not validation_result.is_valid:
|
|
52
|
-
status =
|
|
53
|
+
status = OperationResult.FAILED
|
|
53
54
|
message = f"Validation failed with {validation_result.error_count} errors in {execution_time:.3f}s"
|
|
54
55
|
elif validation_result.has_warnings:
|
|
55
|
-
status =
|
|
56
|
+
status = OperationResult.WARNING
|
|
56
57
|
message = f"Validation completed with {validation_result.warning_count} warnings in {execution_time:.3f}s"
|
|
57
58
|
else:
|
|
58
|
-
status =
|
|
59
|
+
status = OperationResult.SUCCESS
|
|
59
60
|
message = f"Validation passed successfully in {execution_time:.3f}s"
|
|
60
61
|
|
|
61
62
|
self.logger.info(message)
|
|
@@ -73,7 +74,7 @@ class ValidationStep(BaseDeploymentStep):
|
|
|
73
74
|
context.add_error(error_msg)
|
|
74
75
|
|
|
75
76
|
return StepResult(
|
|
76
|
-
status=
|
|
77
|
+
status=OperationResult.FAILED,
|
|
77
78
|
message=error_msg,
|
|
78
79
|
error=e,
|
|
79
80
|
execution_time=execution_time,
|
|
@@ -3,6 +3,7 @@
|
|
|
3
3
|
from pathlib import Path
|
|
4
4
|
from typing import Any, Dict, List, Optional, Tuple
|
|
5
5
|
|
|
6
|
+
from claude_mpm.core.enums import OperationResult
|
|
6
7
|
from claude_mpm.core.interfaces import AgentDeploymentInterface
|
|
7
8
|
from claude_mpm.core.logger import get_logger
|
|
8
9
|
|
|
@@ -116,8 +117,10 @@ class RefactoredAgentDeploymentService(AgentDeploymentInterface):
|
|
|
116
117
|
)
|
|
117
118
|
|
|
118
119
|
# Ensure success field is present
|
|
119
|
-
if
|
|
120
|
-
results[
|
|
120
|
+
if OperationResult.SUCCESS.value not in results:
|
|
121
|
+
results[OperationResult.SUCCESS.value] = not bool(
|
|
122
|
+
results.get("errors", [])
|
|
123
|
+
)
|
|
121
124
|
|
|
122
125
|
self.logger.info(f"Deployment completed: {results.get('success', False)}")
|
|
123
126
|
return results
|
|
@@ -125,7 +128,7 @@ class RefactoredAgentDeploymentService(AgentDeploymentInterface):
|
|
|
125
128
|
except Exception as e:
|
|
126
129
|
self.logger.error(f"Deployment failed: {e}", exc_info=True)
|
|
127
130
|
return {
|
|
128
|
-
|
|
131
|
+
OperationResult.SUCCESS.value: False,
|
|
129
132
|
"error": str(e),
|
|
130
133
|
"deployed": [],
|
|
131
134
|
"updated": [],
|
|
@@ -235,7 +238,7 @@ class RefactoredAgentDeploymentService(AgentDeploymentInterface):
|
|
|
235
238
|
# Build status information
|
|
236
239
|
return {
|
|
237
240
|
"service_version": "refactored-1.0.0",
|
|
238
|
-
"status":
|
|
241
|
+
"status": OperationResult.SUCCESS,
|
|
239
242
|
"templates_dir": str(self.templates_dir),
|
|
240
243
|
"base_agent_path": str(self.base_agent_path),
|
|
241
244
|
"working_directory": str(self.working_directory),
|
|
@@ -255,7 +258,7 @@ class RefactoredAgentDeploymentService(AgentDeploymentInterface):
|
|
|
255
258
|
self.logger.error(f"Failed to get deployment status: {e}", exc_info=True)
|
|
256
259
|
return {
|
|
257
260
|
"service_version": "refactored-1.0.0",
|
|
258
|
-
"status":
|
|
261
|
+
"status": OperationResult.ERROR,
|
|
259
262
|
"error": str(e),
|
|
260
263
|
}
|
|
261
264
|
|
|
@@ -301,7 +304,7 @@ class RefactoredAgentDeploymentService(AgentDeploymentInterface):
|
|
|
301
304
|
except Exception as e:
|
|
302
305
|
self.logger.error(f"Async deployment failed: {e}", exc_info=True)
|
|
303
306
|
return {
|
|
304
|
-
|
|
307
|
+
OperationResult.SUCCESS.value: False,
|
|
305
308
|
"error": str(e),
|
|
306
309
|
"deployed": [],
|
|
307
310
|
"updated": [],
|
|
@@ -5,10 +5,12 @@ including template validation, agent file validation, and
|
|
|
5
5
|
deployment environment validation.
|
|
6
6
|
"""
|
|
7
7
|
|
|
8
|
+
from claude_mpm.core.enums import ValidationSeverity
|
|
9
|
+
|
|
8
10
|
from .agent_validator import AgentValidator
|
|
9
11
|
from .deployment_validator import DeploymentValidator
|
|
10
12
|
from .template_validator import TemplateValidator
|
|
11
|
-
from .validation_result import ValidationResult
|
|
13
|
+
from .validation_result import ValidationResult
|
|
12
14
|
|
|
13
15
|
__all__ = [
|
|
14
16
|
"AgentValidator",
|
|
@@ -1,17 +1,9 @@
|
|
|
1
1
|
"""Validation result classes for deployment validation."""
|
|
2
2
|
|
|
3
3
|
from dataclasses import dataclass, field
|
|
4
|
-
from enum import Enum
|
|
5
4
|
from typing import Any, Dict, List, Optional
|
|
6
5
|
|
|
7
|
-
|
|
8
|
-
class ValidationSeverity(Enum):
|
|
9
|
-
"""Severity levels for validation issues."""
|
|
10
|
-
|
|
11
|
-
INFO = "info"
|
|
12
|
-
WARNING = "warning"
|
|
13
|
-
ERROR = "error"
|
|
14
|
-
CRITICAL = "critical"
|
|
6
|
+
from claude_mpm.core.enums import ValidationSeverity
|
|
15
7
|
|
|
16
8
|
|
|
17
9
|
@dataclass
|
|
@@ -182,7 +182,7 @@ class LocalAgentTemplateManager:
|
|
|
182
182
|
self._discover_templates_in_dir(self.user_agents_dir, "user")
|
|
183
183
|
|
|
184
184
|
self._cache_valid = True
|
|
185
|
-
logger.
|
|
185
|
+
logger.debug(f"Discovered {len(self._template_cache)} local agent templates")
|
|
186
186
|
|
|
187
187
|
return self._template_cache
|
|
188
188
|
|
|
@@ -25,6 +25,7 @@ import logging
|
|
|
25
25
|
from typing import Any, ClassVar, Dict, List, Optional, Tuple
|
|
26
26
|
|
|
27
27
|
from claude_mpm.core.config import Config
|
|
28
|
+
from claude_mpm.core.enums import OperationResult
|
|
28
29
|
from claude_mpm.core.interfaces import MemoryServiceInterface
|
|
29
30
|
from claude_mpm.core.unified_paths import get_path_manager
|
|
30
31
|
|
|
@@ -596,9 +597,10 @@ class AgentMemoryManager(MemoryServiceInterface):
|
|
|
596
597
|
"""
|
|
597
598
|
# Deprecated - return informative message
|
|
598
599
|
return {
|
|
599
|
-
"status":
|
|
600
|
+
"status": OperationResult.ERROR, # Deprecated function - calling it is an error
|
|
600
601
|
"message": "Cross-reference analysis has been deprecated in favor of simplified memory management",
|
|
601
602
|
"suggestion": "Use get_memory_status() for memory overview",
|
|
603
|
+
"deprecated": True,
|
|
602
604
|
}
|
|
603
605
|
|
|
604
606
|
def get_all_memories_raw(self) -> Dict[str, Any]:
|
|
@@ -613,9 +615,10 @@ class AgentMemoryManager(MemoryServiceInterface):
|
|
|
613
615
|
"""
|
|
614
616
|
# Deprecated - return informative message
|
|
615
617
|
return {
|
|
616
|
-
"status":
|
|
618
|
+
"status": OperationResult.ERROR, # Deprecated function - calling it is an error
|
|
617
619
|
"message": "Raw memory access has been deprecated in favor of simplified memory management",
|
|
618
620
|
"suggestion": "Use load_agent_memory() for specific agent memories",
|
|
621
|
+
"deprecated": True,
|
|
619
622
|
}
|
|
620
623
|
|
|
621
624
|
def _save_memory_file_wrapper(self, agent_id: str, content: str) -> bool:
|
|
@@ -36,6 +36,7 @@ from watchdog.events import FileSystemEvent, FileSystemEventHandler
|
|
|
36
36
|
from watchdog.observers import Observer
|
|
37
37
|
|
|
38
38
|
from claude_mpm.core.base_service import BaseService
|
|
39
|
+
from claude_mpm.core.enums import OperationResult
|
|
39
40
|
from claude_mpm.core.logging_utils import get_logger
|
|
40
41
|
from claude_mpm.core.unified_agent_registry import UnifiedAgentRegistry as AgentRegistry
|
|
41
42
|
from claude_mpm.core.unified_paths import get_path_manager
|
|
@@ -551,12 +552,14 @@ class AgentModificationTracker(BaseService):
|
|
|
551
552
|
errors.append(f"File does not exist: {modification.file_path}")
|
|
552
553
|
|
|
553
554
|
# Update validation status
|
|
554
|
-
modification.validation_status =
|
|
555
|
+
modification.validation_status = (
|
|
556
|
+
OperationResult.FAILED if errors else OperationResult.SUCCESS
|
|
557
|
+
)
|
|
555
558
|
modification.validation_errors = errors
|
|
556
559
|
|
|
557
560
|
except Exception as e:
|
|
558
561
|
self.logger.error(f"Validation error: {e}")
|
|
559
|
-
modification.validation_status =
|
|
562
|
+
modification.validation_status = OperationResult.ERROR
|
|
560
563
|
modification.validation_errors.append(str(e))
|
|
561
564
|
|
|
562
565
|
async def _invalidate_agent_cache(self, agent_name: str) -> None:
|
|
@@ -12,6 +12,7 @@ Extracted from ClaudeRunner to follow Single Responsibility Principle.
|
|
|
12
12
|
from typing import Any, Dict, List
|
|
13
13
|
|
|
14
14
|
from claude_mpm.core.base_service import BaseService
|
|
15
|
+
from claude_mpm.core.enums import OperationResult
|
|
15
16
|
from claude_mpm.services.core.interfaces import CommandHandlerInterface
|
|
16
17
|
|
|
17
18
|
|
|
@@ -169,7 +170,7 @@ class CommandHandlerService(BaseService, CommandHandlerInterface):
|
|
|
169
170
|
if command == "test":
|
|
170
171
|
success = self._handle_test_command(args)
|
|
171
172
|
return {
|
|
172
|
-
|
|
173
|
+
OperationResult.SUCCESS.value: success,
|
|
173
174
|
"command": command,
|
|
174
175
|
"args": args,
|
|
175
176
|
"message": (
|
|
@@ -179,7 +180,7 @@ class CommandHandlerService(BaseService, CommandHandlerInterface):
|
|
|
179
180
|
if command == "agents":
|
|
180
181
|
success = self._handle_agents_command(args)
|
|
181
182
|
return {
|
|
182
|
-
|
|
183
|
+
OperationResult.SUCCESS.value: success,
|
|
183
184
|
"command": command,
|
|
184
185
|
"args": args,
|
|
185
186
|
"message": (
|
|
@@ -189,14 +190,19 @@ class CommandHandlerService(BaseService, CommandHandlerInterface):
|
|
|
189
190
|
),
|
|
190
191
|
}
|
|
191
192
|
return {
|
|
192
|
-
|
|
193
|
+
OperationResult.SUCCESS.value: False,
|
|
193
194
|
"command": command,
|
|
194
195
|
"args": args,
|
|
195
|
-
|
|
196
|
+
OperationResult.ERROR.value: f"Unknown command: {command}",
|
|
196
197
|
"available_commands": self.get_available_commands(),
|
|
197
198
|
}
|
|
198
199
|
except Exception as e:
|
|
199
|
-
return {
|
|
200
|
+
return {
|
|
201
|
+
OperationResult.SUCCESS.value: False,
|
|
202
|
+
"command": command,
|
|
203
|
+
"args": args,
|
|
204
|
+
OperationResult.ERROR.value: str(e),
|
|
205
|
+
}
|
|
200
206
|
|
|
201
207
|
def get_command_help(self, command: str) -> str:
|
|
202
208
|
"""Get help text for a specific command.
|
|
@@ -43,6 +43,12 @@ from .communication import ( # WebSocket/SocketIO; Project analysis; Ticket man
|
|
|
43
43
|
TicketManagerInterface,
|
|
44
44
|
)
|
|
45
45
|
|
|
46
|
+
# Health interfaces (health monitoring)
|
|
47
|
+
from .health import ( # Health checks; Health monitoring
|
|
48
|
+
IHealthCheck,
|
|
49
|
+
IHealthCheckManager,
|
|
50
|
+
)
|
|
51
|
+
|
|
46
52
|
# Infrastructure interfaces (core framework services)
|
|
47
53
|
from .infrastructure import ( # Type variables; Core dependency injection; Configuration management; Caching; Health monitoring; Template management; Service factory; Logging; Service lifecycle; Error handling; Performance monitoring; Event system
|
|
48
54
|
CacheEntry,
|
|
@@ -65,11 +71,33 @@ from .infrastructure import ( # Type variables; Core dependency injection; Conf
|
|
|
65
71
|
TemplateRenderContext,
|
|
66
72
|
)
|
|
67
73
|
|
|
74
|
+
# Model interfaces (content processing and model providers)
|
|
75
|
+
from .model import ( # Model providers; Routing
|
|
76
|
+
IModelProvider,
|
|
77
|
+
IModelRouter,
|
|
78
|
+
ModelCapability,
|
|
79
|
+
ModelProvider,
|
|
80
|
+
ModelResponse,
|
|
81
|
+
)
|
|
82
|
+
|
|
83
|
+
# Process interfaces (local process management)
|
|
84
|
+
from .process import ( # Process lifecycle; State persistence
|
|
85
|
+
IDeploymentStateManager,
|
|
86
|
+
ILocalProcessManager,
|
|
87
|
+
)
|
|
88
|
+
|
|
68
89
|
# Project interfaces (project analysis and toolchain detection)
|
|
69
90
|
from .project import ( # Toolchain analysis
|
|
70
91
|
IToolchainAnalyzer,
|
|
71
92
|
)
|
|
72
93
|
|
|
94
|
+
# Restart interfaces (auto-restart management)
|
|
95
|
+
from .restart import ( # Crash detection; Restart policy; Restart orchestration
|
|
96
|
+
ICrashDetector,
|
|
97
|
+
IRestartManager,
|
|
98
|
+
IRestartPolicy,
|
|
99
|
+
)
|
|
100
|
+
|
|
73
101
|
# Service interfaces (business services)
|
|
74
102
|
from .service import ( # Version service; Command handling; Memory management; Session management; Utilities; Hook service
|
|
75
103
|
CommandHandlerInterface,
|
|
@@ -81,6 +109,13 @@ from .service import ( # Version service; Command handling; Memory management;
|
|
|
81
109
|
VersionServiceInterface,
|
|
82
110
|
)
|
|
83
111
|
|
|
112
|
+
# Stability interfaces (proactive monitoring and crash prevention)
|
|
113
|
+
from .stability import ( # Memory leak detection; Log monitoring; Resource monitoring
|
|
114
|
+
ILogMonitor,
|
|
115
|
+
IMemoryLeakDetector,
|
|
116
|
+
IResourceMonitor,
|
|
117
|
+
)
|
|
118
|
+
|
|
84
119
|
|
|
85
120
|
# Interface registry for dependency injection discovery
|
|
86
121
|
class InterfaceRegistry:
|
|
@@ -129,6 +164,23 @@ class InterfaceRegistry:
|
|
|
129
164
|
"toolchain_analyzer": IToolchainAnalyzer,
|
|
130
165
|
"agent_recommender": IAgentRecommender,
|
|
131
166
|
"auto_config_manager": IAutoConfigManager,
|
|
167
|
+
# Model interfaces
|
|
168
|
+
"model_provider": IModelProvider,
|
|
169
|
+
"model_router": IModelRouter,
|
|
170
|
+
# Process interfaces
|
|
171
|
+
"deployment_state_manager": IDeploymentStateManager,
|
|
172
|
+
"local_process_manager": ILocalProcessManager,
|
|
173
|
+
# Health interfaces
|
|
174
|
+
"health_check": IHealthCheck,
|
|
175
|
+
"health_check_manager": IHealthCheckManager,
|
|
176
|
+
# Restart interfaces
|
|
177
|
+
"crash_detector": ICrashDetector,
|
|
178
|
+
"restart_policy": IRestartPolicy,
|
|
179
|
+
"restart_manager": IRestartManager,
|
|
180
|
+
# Stability interfaces
|
|
181
|
+
"memory_leak_detector": IMemoryLeakDetector,
|
|
182
|
+
"log_monitor": ILogMonitor,
|
|
183
|
+
"resource_monitor": IResourceMonitor,
|
|
132
184
|
}
|
|
133
185
|
|
|
134
186
|
@classmethod
|
|
@@ -153,7 +205,7 @@ class InterfaceRegistry:
|
|
|
153
205
|
|
|
154
206
|
|
|
155
207
|
# Re-export everything for backward compatibility
|
|
156
|
-
__all__ = [
|
|
208
|
+
__all__ = [ # noqa: RUF022 - Semantic grouping by domain preferred over alphabetical
|
|
157
209
|
"AgentCapabilitiesInterface",
|
|
158
210
|
"AgentDeploymentInterface",
|
|
159
211
|
"AgentMetadata",
|
|
@@ -168,12 +220,29 @@ __all__ = [
|
|
|
168
220
|
"ICacheService",
|
|
169
221
|
"IConfigurationManager",
|
|
170
222
|
"IConfigurationService",
|
|
223
|
+
# Process interfaces
|
|
224
|
+
"IDeploymentStateManager",
|
|
171
225
|
"IErrorHandler",
|
|
172
226
|
"IEventBus",
|
|
227
|
+
# Health interfaces
|
|
228
|
+
"IHealthCheck",
|
|
229
|
+
"IHealthCheckManager",
|
|
173
230
|
"IHealthMonitor",
|
|
231
|
+
# Infrastructure interfaces
|
|
232
|
+
"ILocalProcessManager",
|
|
233
|
+
# Restart interfaces
|
|
234
|
+
"ICrashDetector",
|
|
235
|
+
"IRestartManager",
|
|
236
|
+
"IRestartPolicy",
|
|
237
|
+
# Stability interfaces
|
|
238
|
+
"IMemoryLeakDetector",
|
|
239
|
+
"ILogMonitor",
|
|
240
|
+
"IResourceMonitor",
|
|
241
|
+
# Model interfaces
|
|
242
|
+
"IModelProvider",
|
|
243
|
+
"IModelRouter",
|
|
174
244
|
"IPerformanceMonitor",
|
|
175
245
|
"IPromptCache",
|
|
176
|
-
# Infrastructure interfaces
|
|
177
246
|
"IServiceContainer",
|
|
178
247
|
"IServiceFactory",
|
|
179
248
|
"IServiceLifecycle",
|
|
@@ -183,6 +252,9 @@ __all__ = [
|
|
|
183
252
|
"IToolchainAnalyzer",
|
|
184
253
|
# Registry
|
|
185
254
|
"InterfaceRegistry",
|
|
255
|
+
"ModelCapability",
|
|
256
|
+
"ModelProvider",
|
|
257
|
+
"ModelResponse",
|
|
186
258
|
"MemoryHookInterface",
|
|
187
259
|
"MemoryServiceInterface",
|
|
188
260
|
"ProjectAnalyzerInterface",
|
|
@@ -0,0 +1,172 @@
|
|
|
1
|
+
"""
|
|
2
|
+
Health Check Interfaces for Claude MPM Framework
|
|
3
|
+
=================================================
|
|
4
|
+
|
|
5
|
+
WHY: This module defines interfaces for health monitoring operations,
|
|
6
|
+
enabling the local-ops-agent to perform comprehensive health checks on
|
|
7
|
+
deployed processes including HTTP endpoints, process status, and resource usage.
|
|
8
|
+
|
|
9
|
+
DESIGN DECISION: Health check interfaces are separated to enable modular
|
|
10
|
+
health monitoring with different check types (HTTP, process, resource).
|
|
11
|
+
|
|
12
|
+
ARCHITECTURE:
|
|
13
|
+
- IHealthCheck: Interface for individual health check implementations
|
|
14
|
+
- IHealthCheckManager: Interface for orchestrating multiple health checks
|
|
15
|
+
- Health data models defined in models/health.py
|
|
16
|
+
|
|
17
|
+
USAGE:
|
|
18
|
+
http_check = HttpHealthCheck(endpoint="http://localhost:3000/health")
|
|
19
|
+
process_check = ProcessHealthCheck(process_manager)
|
|
20
|
+
resource_check = ResourceHealthCheck(process_manager)
|
|
21
|
+
|
|
22
|
+
health_manager = HealthCheckManager(
|
|
23
|
+
process_manager=process_manager,
|
|
24
|
+
check_interval=30
|
|
25
|
+
)
|
|
26
|
+
health_manager.start_monitoring()
|
|
27
|
+
"""
|
|
28
|
+
|
|
29
|
+
from abc import ABC, abstractmethod
|
|
30
|
+
from typing import List
|
|
31
|
+
|
|
32
|
+
from claude_mpm.services.core.models.health import (
|
|
33
|
+
DeploymentHealth,
|
|
34
|
+
HealthCheckResult,
|
|
35
|
+
)
|
|
36
|
+
|
|
37
|
+
|
|
38
|
+
class IHealthCheck(ABC):
|
|
39
|
+
"""
|
|
40
|
+
Interface for individual health check implementations.
|
|
41
|
+
|
|
42
|
+
WHY: Abstracts different types of health checks (HTTP, process, resource)
|
|
43
|
+
to enable flexible health monitoring strategies.
|
|
44
|
+
|
|
45
|
+
DESIGN DECISION: Each check type implements this interface to provide
|
|
46
|
+
a consistent API for executing checks and interpreting results.
|
|
47
|
+
|
|
48
|
+
Thread Safety: Implementations must be thread-safe for concurrent execution.
|
|
49
|
+
"""
|
|
50
|
+
|
|
51
|
+
@abstractmethod
|
|
52
|
+
def check(self, deployment_id: str, **kwargs) -> HealthCheckResult:
|
|
53
|
+
"""
|
|
54
|
+
Execute the health check for a deployment.
|
|
55
|
+
|
|
56
|
+
Args:
|
|
57
|
+
deployment_id: Unique deployment identifier
|
|
58
|
+
**kwargs: Check-specific parameters (e.g., endpoint URL, thresholds)
|
|
59
|
+
|
|
60
|
+
Returns:
|
|
61
|
+
HealthCheckResult with check status and details
|
|
62
|
+
|
|
63
|
+
Raises:
|
|
64
|
+
ValueError: If deployment_id not found
|
|
65
|
+
"""
|
|
66
|
+
|
|
67
|
+
@abstractmethod
|
|
68
|
+
def get_check_type(self) -> str:
|
|
69
|
+
"""
|
|
70
|
+
Get the type identifier for this health check.
|
|
71
|
+
|
|
72
|
+
Returns:
|
|
73
|
+
Check type string (e.g., "http", "process", "resource")
|
|
74
|
+
"""
|
|
75
|
+
|
|
76
|
+
|
|
77
|
+
class IHealthCheckManager(ABC):
|
|
78
|
+
"""
|
|
79
|
+
Interface for coordinating health checks across deployments.
|
|
80
|
+
|
|
81
|
+
WHY: Health monitoring requires orchestrating multiple check types,
|
|
82
|
+
aggregating results, and maintaining historical data. This interface
|
|
83
|
+
provides a high-level API for comprehensive health monitoring.
|
|
84
|
+
|
|
85
|
+
DESIGN DECISION: Provides both synchronous (check_health) and asynchronous
|
|
86
|
+
(background monitoring) operations to support different use cases.
|
|
87
|
+
|
|
88
|
+
Background Monitoring:
|
|
89
|
+
- Runs health checks at regular intervals
|
|
90
|
+
- Maintains historical health data
|
|
91
|
+
- Triggers callbacks on status changes
|
|
92
|
+
- Thread-safe with proper locking
|
|
93
|
+
"""
|
|
94
|
+
|
|
95
|
+
@abstractmethod
|
|
96
|
+
def check_health(self, deployment_id: str) -> DeploymentHealth:
|
|
97
|
+
"""
|
|
98
|
+
Execute all health checks for a deployment.
|
|
99
|
+
|
|
100
|
+
WHY: Provides a comprehensive health snapshot by running all
|
|
101
|
+
registered health checks and aggregating results.
|
|
102
|
+
|
|
103
|
+
Args:
|
|
104
|
+
deployment_id: Unique deployment identifier
|
|
105
|
+
|
|
106
|
+
Returns:
|
|
107
|
+
DeploymentHealth with aggregated status and check results
|
|
108
|
+
|
|
109
|
+
Raises:
|
|
110
|
+
ValueError: If deployment_id not found
|
|
111
|
+
"""
|
|
112
|
+
|
|
113
|
+
@abstractmethod
|
|
114
|
+
def start_monitoring(self) -> None:
|
|
115
|
+
"""
|
|
116
|
+
Start background health monitoring.
|
|
117
|
+
|
|
118
|
+
WHY: Enables continuous health tracking without manual polling.
|
|
119
|
+
Monitoring runs in a separate daemon thread.
|
|
120
|
+
|
|
121
|
+
Thread Safety: Creates a daemon thread that performs periodic checks.
|
|
122
|
+
"""
|
|
123
|
+
|
|
124
|
+
@abstractmethod
|
|
125
|
+
def stop_monitoring(self) -> None:
|
|
126
|
+
"""
|
|
127
|
+
Stop background health monitoring.
|
|
128
|
+
|
|
129
|
+
WHY: Gracefully stops the monitoring thread and releases resources.
|
|
130
|
+
"""
|
|
131
|
+
|
|
132
|
+
@abstractmethod
|
|
133
|
+
def is_monitoring(self) -> bool:
|
|
134
|
+
"""
|
|
135
|
+
Check if background monitoring is active.
|
|
136
|
+
|
|
137
|
+
Returns:
|
|
138
|
+
True if monitoring thread is running
|
|
139
|
+
"""
|
|
140
|
+
|
|
141
|
+
@abstractmethod
|
|
142
|
+
def get_health_history(
|
|
143
|
+
self, deployment_id: str, limit: int = 10
|
|
144
|
+
) -> List[DeploymentHealth]:
|
|
145
|
+
"""
|
|
146
|
+
Get historical health check results for a deployment.
|
|
147
|
+
|
|
148
|
+
Args:
|
|
149
|
+
deployment_id: Unique deployment identifier
|
|
150
|
+
limit: Maximum number of historical entries to return
|
|
151
|
+
|
|
152
|
+
Returns:
|
|
153
|
+
List of DeploymentHealth objects, newest first
|
|
154
|
+
"""
|
|
155
|
+
|
|
156
|
+
@abstractmethod
|
|
157
|
+
def register_status_callback(self, callback) -> None:
|
|
158
|
+
"""
|
|
159
|
+
Register a callback for health status changes.
|
|
160
|
+
|
|
161
|
+
WHY: Enables reactive behavior based on health status changes
|
|
162
|
+
(e.g., alerts, auto-recovery, logging).
|
|
163
|
+
|
|
164
|
+
Args:
|
|
165
|
+
callback: Function called with (deployment_id, old_status, new_status)
|
|
166
|
+
"""
|
|
167
|
+
|
|
168
|
+
|
|
169
|
+
__all__ = [
|
|
170
|
+
"IHealthCheck",
|
|
171
|
+
"IHealthCheckManager",
|
|
172
|
+
]
|