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.
Files changed (250) hide show
  1. claude_mpm/VERSION +1 -1
  2. claude_mpm/agents/BASE_ENGINEER.md +286 -0
  3. claude_mpm/agents/BASE_PM.md +48 -17
  4. claude_mpm/agents/OUTPUT_STYLE.md +329 -11
  5. claude_mpm/agents/PM_INSTRUCTIONS.md +227 -8
  6. claude_mpm/agents/agent_loader.py +17 -5
  7. claude_mpm/agents/frontmatter_validator.py +284 -253
  8. claude_mpm/agents/templates/agentic-coder-optimizer.json +9 -2
  9. claude_mpm/agents/templates/api_qa.json +7 -1
  10. claude_mpm/agents/templates/clerk-ops.json +8 -1
  11. claude_mpm/agents/templates/code_analyzer.json +4 -1
  12. claude_mpm/agents/templates/dart_engineer.json +11 -1
  13. claude_mpm/agents/templates/data_engineer.json +11 -1
  14. claude_mpm/agents/templates/documentation.json +6 -1
  15. claude_mpm/agents/templates/engineer.json +18 -1
  16. claude_mpm/agents/templates/gcp_ops_agent.json +8 -1
  17. claude_mpm/agents/templates/golang_engineer.json +11 -1
  18. claude_mpm/agents/templates/java_engineer.json +12 -2
  19. claude_mpm/agents/templates/local_ops_agent.json +1217 -6
  20. claude_mpm/agents/templates/nextjs_engineer.json +11 -1
  21. claude_mpm/agents/templates/ops.json +8 -1
  22. claude_mpm/agents/templates/php-engineer.json +11 -1
  23. claude_mpm/agents/templates/project_organizer.json +10 -3
  24. claude_mpm/agents/templates/prompt-engineer.json +5 -1
  25. claude_mpm/agents/templates/python_engineer.json +11 -1
  26. claude_mpm/agents/templates/qa.json +7 -1
  27. claude_mpm/agents/templates/react_engineer.json +11 -1
  28. claude_mpm/agents/templates/refactoring_engineer.json +8 -1
  29. claude_mpm/agents/templates/research.json +4 -1
  30. claude_mpm/agents/templates/ruby-engineer.json +11 -1
  31. claude_mpm/agents/templates/rust_engineer.json +11 -1
  32. claude_mpm/agents/templates/security.json +6 -1
  33. claude_mpm/agents/templates/svelte-engineer.json +225 -0
  34. claude_mpm/agents/templates/ticketing.json +6 -1
  35. claude_mpm/agents/templates/typescript_engineer.json +11 -1
  36. claude_mpm/agents/templates/vercel_ops_agent.json +8 -1
  37. claude_mpm/agents/templates/version_control.json +8 -1
  38. claude_mpm/agents/templates/web_qa.json +7 -1
  39. claude_mpm/agents/templates/web_ui.json +11 -1
  40. claude_mpm/cli/__init__.py +34 -706
  41. claude_mpm/cli/commands/agent_manager.py +25 -12
  42. claude_mpm/cli/commands/agent_state_manager.py +186 -0
  43. claude_mpm/cli/commands/agents.py +204 -148
  44. claude_mpm/cli/commands/aggregate.py +7 -3
  45. claude_mpm/cli/commands/analyze.py +9 -4
  46. claude_mpm/cli/commands/analyze_code.py +7 -2
  47. claude_mpm/cli/commands/auto_configure.py +7 -9
  48. claude_mpm/cli/commands/config.py +47 -13
  49. claude_mpm/cli/commands/configure.py +294 -1788
  50. claude_mpm/cli/commands/configure_agent_display.py +261 -0
  51. claude_mpm/cli/commands/configure_behavior_manager.py +204 -0
  52. claude_mpm/cli/commands/configure_hook_manager.py +225 -0
  53. claude_mpm/cli/commands/configure_models.py +18 -0
  54. claude_mpm/cli/commands/configure_navigation.py +167 -0
  55. claude_mpm/cli/commands/configure_paths.py +104 -0
  56. claude_mpm/cli/commands/configure_persistence.py +254 -0
  57. claude_mpm/cli/commands/configure_startup_manager.py +646 -0
  58. claude_mpm/cli/commands/configure_template_editor.py +497 -0
  59. claude_mpm/cli/commands/configure_validators.py +73 -0
  60. claude_mpm/cli/commands/local_deploy.py +537 -0
  61. claude_mpm/cli/commands/memory.py +54 -20
  62. claude_mpm/cli/commands/mpm_init.py +39 -25
  63. claude_mpm/cli/commands/mpm_init_handler.py +8 -3
  64. claude_mpm/cli/executor.py +202 -0
  65. claude_mpm/cli/helpers.py +105 -0
  66. claude_mpm/cli/interactive/__init__.py +3 -0
  67. claude_mpm/cli/interactive/skills_wizard.py +491 -0
  68. claude_mpm/cli/parsers/__init__.py +7 -1
  69. claude_mpm/cli/parsers/base_parser.py +98 -3
  70. claude_mpm/cli/parsers/local_deploy_parser.py +227 -0
  71. claude_mpm/cli/shared/output_formatters.py +28 -19
  72. claude_mpm/cli/startup.py +481 -0
  73. claude_mpm/cli/utils.py +52 -1
  74. claude_mpm/commands/mpm-help.md +3 -0
  75. claude_mpm/commands/mpm-version.md +113 -0
  76. claude_mpm/commands/mpm.md +1 -0
  77. claude_mpm/config/agent_config.py +2 -2
  78. claude_mpm/config/model_config.py +428 -0
  79. claude_mpm/core/base_service.py +13 -12
  80. claude_mpm/core/enums.py +452 -0
  81. claude_mpm/core/factories.py +1 -1
  82. claude_mpm/core/instruction_reinforcement_hook.py +2 -1
  83. claude_mpm/core/interactive_session.py +9 -3
  84. claude_mpm/core/logging_config.py +6 -2
  85. claude_mpm/core/oneshot_session.py +8 -4
  86. claude_mpm/core/optimized_agent_loader.py +3 -3
  87. claude_mpm/core/output_style_manager.py +12 -192
  88. claude_mpm/core/service_registry.py +5 -1
  89. claude_mpm/core/types.py +2 -9
  90. claude_mpm/core/typing_utils.py +7 -6
  91. claude_mpm/dashboard/static/js/dashboard.js +0 -14
  92. claude_mpm/dashboard/templates/index.html +3 -41
  93. claude_mpm/hooks/claude_hooks/response_tracking.py +35 -1
  94. claude_mpm/hooks/instruction_reinforcement.py +7 -2
  95. claude_mpm/models/resume_log.py +340 -0
  96. claude_mpm/services/agents/auto_config_manager.py +10 -11
  97. claude_mpm/services/agents/deployment/agent_configuration_manager.py +1 -1
  98. claude_mpm/services/agents/deployment/agent_record_service.py +1 -1
  99. claude_mpm/services/agents/deployment/agent_validator.py +17 -1
  100. claude_mpm/services/agents/deployment/async_agent_deployment.py +1 -1
  101. claude_mpm/services/agents/deployment/interface_adapter.py +3 -2
  102. claude_mpm/services/agents/deployment/local_template_deployment.py +1 -1
  103. claude_mpm/services/agents/deployment/pipeline/steps/agent_processing_step.py +7 -6
  104. claude_mpm/services/agents/deployment/pipeline/steps/base_step.py +7 -16
  105. claude_mpm/services/agents/deployment/pipeline/steps/configuration_step.py +4 -3
  106. claude_mpm/services/agents/deployment/pipeline/steps/target_directory_step.py +5 -3
  107. claude_mpm/services/agents/deployment/pipeline/steps/validation_step.py +6 -5
  108. claude_mpm/services/agents/deployment/refactored_agent_deployment_service.py +9 -6
  109. claude_mpm/services/agents/deployment/validation/__init__.py +3 -1
  110. claude_mpm/services/agents/deployment/validation/validation_result.py +1 -9
  111. claude_mpm/services/agents/local_template_manager.py +1 -1
  112. claude_mpm/services/agents/memory/agent_memory_manager.py +5 -2
  113. claude_mpm/services/agents/registry/modification_tracker.py +5 -2
  114. claude_mpm/services/command_handler_service.py +11 -5
  115. claude_mpm/services/core/interfaces/__init__.py +74 -2
  116. claude_mpm/services/core/interfaces/health.py +172 -0
  117. claude_mpm/services/core/interfaces/model.py +281 -0
  118. claude_mpm/services/core/interfaces/process.py +372 -0
  119. claude_mpm/services/core/interfaces/restart.py +307 -0
  120. claude_mpm/services/core/interfaces/stability.py +260 -0
  121. claude_mpm/services/core/models/__init__.py +33 -0
  122. claude_mpm/services/core/models/agent_config.py +12 -28
  123. claude_mpm/services/core/models/health.py +162 -0
  124. claude_mpm/services/core/models/process.py +235 -0
  125. claude_mpm/services/core/models/restart.py +302 -0
  126. claude_mpm/services/core/models/stability.py +264 -0
  127. claude_mpm/services/core/path_resolver.py +23 -7
  128. claude_mpm/services/diagnostics/__init__.py +2 -2
  129. claude_mpm/services/diagnostics/checks/agent_check.py +25 -24
  130. claude_mpm/services/diagnostics/checks/claude_code_check.py +24 -23
  131. claude_mpm/services/diagnostics/checks/common_issues_check.py +25 -24
  132. claude_mpm/services/diagnostics/checks/configuration_check.py +24 -23
  133. claude_mpm/services/diagnostics/checks/filesystem_check.py +18 -17
  134. claude_mpm/services/diagnostics/checks/installation_check.py +30 -29
  135. claude_mpm/services/diagnostics/checks/instructions_check.py +20 -19
  136. claude_mpm/services/diagnostics/checks/mcp_check.py +50 -36
  137. claude_mpm/services/diagnostics/checks/mcp_services_check.py +36 -31
  138. claude_mpm/services/diagnostics/checks/monitor_check.py +23 -22
  139. claude_mpm/services/diagnostics/checks/startup_log_check.py +9 -8
  140. claude_mpm/services/diagnostics/diagnostic_runner.py +6 -5
  141. claude_mpm/services/diagnostics/doctor_reporter.py +28 -25
  142. claude_mpm/services/diagnostics/models.py +19 -24
  143. claude_mpm/services/infrastructure/monitoring/__init__.py +1 -1
  144. claude_mpm/services/infrastructure/monitoring/aggregator.py +12 -12
  145. claude_mpm/services/infrastructure/monitoring/base.py +5 -13
  146. claude_mpm/services/infrastructure/monitoring/network.py +7 -6
  147. claude_mpm/services/infrastructure/monitoring/process.py +13 -12
  148. claude_mpm/services/infrastructure/monitoring/resources.py +7 -6
  149. claude_mpm/services/infrastructure/monitoring/service.py +16 -15
  150. claude_mpm/services/infrastructure/resume_log_generator.py +439 -0
  151. claude_mpm/services/local_ops/__init__.py +163 -0
  152. claude_mpm/services/local_ops/crash_detector.py +257 -0
  153. claude_mpm/services/local_ops/health_checks/__init__.py +28 -0
  154. claude_mpm/services/local_ops/health_checks/http_check.py +224 -0
  155. claude_mpm/services/local_ops/health_checks/process_check.py +236 -0
  156. claude_mpm/services/local_ops/health_checks/resource_check.py +255 -0
  157. claude_mpm/services/local_ops/health_manager.py +430 -0
  158. claude_mpm/services/local_ops/log_monitor.py +396 -0
  159. claude_mpm/services/local_ops/memory_leak_detector.py +294 -0
  160. claude_mpm/services/local_ops/process_manager.py +595 -0
  161. claude_mpm/services/local_ops/resource_monitor.py +331 -0
  162. claude_mpm/services/local_ops/restart_manager.py +401 -0
  163. claude_mpm/services/local_ops/restart_policy.py +387 -0
  164. claude_mpm/services/local_ops/state_manager.py +372 -0
  165. claude_mpm/services/local_ops/unified_manager.py +600 -0
  166. claude_mpm/services/mcp_config_manager.py +9 -4
  167. claude_mpm/services/mcp_gateway/core/__init__.py +1 -2
  168. claude_mpm/services/mcp_gateway/core/base.py +18 -31
  169. claude_mpm/services/mcp_gateway/tools/external_mcp_services.py +71 -24
  170. claude_mpm/services/mcp_gateway/tools/health_check_tool.py +30 -28
  171. claude_mpm/services/memory_hook_service.py +4 -1
  172. claude_mpm/services/model/__init__.py +147 -0
  173. claude_mpm/services/model/base_provider.py +365 -0
  174. claude_mpm/services/model/claude_provider.py +412 -0
  175. claude_mpm/services/model/model_router.py +453 -0
  176. claude_mpm/services/model/ollama_provider.py +415 -0
  177. claude_mpm/services/monitor/daemon_manager.py +3 -2
  178. claude_mpm/services/monitor/handlers/dashboard.py +2 -1
  179. claude_mpm/services/monitor/handlers/hooks.py +2 -1
  180. claude_mpm/services/monitor/management/lifecycle.py +3 -2
  181. claude_mpm/services/monitor/server.py +2 -1
  182. claude_mpm/services/session_management_service.py +3 -2
  183. claude_mpm/services/session_manager.py +205 -1
  184. claude_mpm/services/shared/async_service_base.py +16 -27
  185. claude_mpm/services/shared/lifecycle_service_base.py +1 -14
  186. claude_mpm/services/socketio/handlers/__init__.py +5 -2
  187. claude_mpm/services/socketio/handlers/hook.py +13 -2
  188. claude_mpm/services/socketio/handlers/registry.py +4 -2
  189. claude_mpm/services/socketio/server/main.py +10 -8
  190. claude_mpm/services/subprocess_launcher_service.py +14 -5
  191. claude_mpm/services/unified/analyzer_strategies/code_analyzer.py +8 -7
  192. claude_mpm/services/unified/analyzer_strategies/dependency_analyzer.py +6 -5
  193. claude_mpm/services/unified/analyzer_strategies/performance_analyzer.py +8 -7
  194. claude_mpm/services/unified/analyzer_strategies/security_analyzer.py +7 -6
  195. claude_mpm/services/unified/analyzer_strategies/structure_analyzer.py +5 -4
  196. claude_mpm/services/unified/config_strategies/validation_strategy.py +13 -9
  197. claude_mpm/services/unified/deployment_strategies/cloud_strategies.py +10 -3
  198. claude_mpm/services/unified/deployment_strategies/local.py +6 -5
  199. claude_mpm/services/unified/deployment_strategies/utils.py +6 -5
  200. claude_mpm/services/unified/deployment_strategies/vercel.py +7 -6
  201. claude_mpm/services/unified/interfaces.py +3 -1
  202. claude_mpm/services/unified/unified_analyzer.py +14 -10
  203. claude_mpm/services/unified/unified_config.py +2 -1
  204. claude_mpm/services/unified/unified_deployment.py +9 -4
  205. claude_mpm/services/version_service.py +104 -1
  206. claude_mpm/skills/__init__.py +21 -0
  207. claude_mpm/skills/bundled/__init__.py +6 -0
  208. claude_mpm/skills/bundled/api-documentation.md +393 -0
  209. claude_mpm/skills/bundled/async-testing.md +571 -0
  210. claude_mpm/skills/bundled/code-review.md +143 -0
  211. claude_mpm/skills/bundled/database-migration.md +199 -0
  212. claude_mpm/skills/bundled/docker-containerization.md +194 -0
  213. claude_mpm/skills/bundled/express-local-dev.md +1429 -0
  214. claude_mpm/skills/bundled/fastapi-local-dev.md +1199 -0
  215. claude_mpm/skills/bundled/git-workflow.md +414 -0
  216. claude_mpm/skills/bundled/imagemagick.md +204 -0
  217. claude_mpm/skills/bundled/json-data-handling.md +223 -0
  218. claude_mpm/skills/bundled/nextjs-local-dev.md +807 -0
  219. claude_mpm/skills/bundled/pdf.md +141 -0
  220. claude_mpm/skills/bundled/performance-profiling.md +567 -0
  221. claude_mpm/skills/bundled/refactoring-patterns.md +180 -0
  222. claude_mpm/skills/bundled/security-scanning.md +327 -0
  223. claude_mpm/skills/bundled/systematic-debugging.md +473 -0
  224. claude_mpm/skills/bundled/test-driven-development.md +378 -0
  225. claude_mpm/skills/bundled/vite-local-dev.md +1061 -0
  226. claude_mpm/skills/bundled/web-performance-optimization.md +2305 -0
  227. claude_mpm/skills/bundled/xlsx.md +157 -0
  228. claude_mpm/skills/registry.py +286 -0
  229. claude_mpm/skills/skill_manager.py +310 -0
  230. claude_mpm/tools/code_tree_analyzer.py +177 -141
  231. claude_mpm/tools/code_tree_events.py +4 -2
  232. claude_mpm/utils/agent_dependency_loader.py +2 -2
  233. {claude_mpm-4.13.2.dist-info → claude_mpm-4.18.2.dist-info}/METADATA +117 -8
  234. {claude_mpm-4.13.2.dist-info → claude_mpm-4.18.2.dist-info}/RECORD +238 -174
  235. claude_mpm/dashboard/static/css/code-tree.css +0 -1639
  236. claude_mpm/dashboard/static/js/components/code-tree/tree-breadcrumb.js +0 -353
  237. claude_mpm/dashboard/static/js/components/code-tree/tree-constants.js +0 -235
  238. claude_mpm/dashboard/static/js/components/code-tree/tree-search.js +0 -409
  239. claude_mpm/dashboard/static/js/components/code-tree/tree-utils.js +0 -435
  240. claude_mpm/dashboard/static/js/components/code-tree.js +0 -5869
  241. claude_mpm/dashboard/static/js/components/code-viewer.js +0 -1386
  242. claude_mpm/hooks/claude_hooks/hook_handler_eventbus.py +0 -425
  243. claude_mpm/hooks/claude_hooks/hook_handler_original.py +0 -1041
  244. claude_mpm/hooks/claude_hooks/hook_handler_refactored.py +0 -347
  245. claude_mpm/services/agents/deployment/agent_lifecycle_manager_refactored.py +0 -575
  246. claude_mpm/services/project/analyzer_refactored.py +0 -450
  247. {claude_mpm-4.13.2.dist-info → claude_mpm-4.18.2.dist-info}/WHEEL +0 -0
  248. {claude_mpm-4.13.2.dist-info → claude_mpm-4.18.2.dist-info}/entry_points.txt +0 -0
  249. {claude_mpm-4.13.2.dist-info → claude_mpm-4.18.2.dist-info}/licenses/LICENSE +0 -0
  250. {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 .base_step import BaseDeploymentStep, StepResult, StepStatus
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=StepStatus.SUCCESS,
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=StepStatus.FAILURE,
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, StepStatus
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 = StepStatus.FAILURE
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 = StepStatus.WARNING
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 = StepStatus.SUCCESS
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=StepStatus.FAILURE,
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 "success" not in results:
120
- results["success"] = not bool(results.get("errors", []))
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
- "success": False,
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": "ready",
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": "error",
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
- "success": False,
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, ValidationSeverity
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.info(f"Discovered {len(self._template_cache)} local agent templates")
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": "deprecated",
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": "deprecated",
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 = "failed" if errors else "passed"
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 = "error"
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
- "success": success,
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
- "success": success,
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
- "success": False,
193
+ OperationResult.SUCCESS.value: False,
193
194
  "command": command,
194
195
  "args": args,
195
- "error": f"Unknown command: {command}",
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 {"success": False, "command": command, "args": args, "error": str(e)}
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
+ ]