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
@@ -11,7 +11,8 @@ import sys
11
11
  from pathlib import Path
12
12
  from typing import Optional
13
13
 
14
- from ..models import DiagnosticResult, DiagnosticStatus
14
+ from ....core.enums import OperationResult, ValidationSeverity
15
+ from ..models import DiagnosticResult
15
16
  from .base_check import BaseDiagnosticCheck
16
17
 
17
18
 
@@ -54,14 +55,14 @@ class InstallationCheck(BaseDiagnosticCheck):
54
55
  details["dependencies"] = deps_result.details.get("status")
55
56
 
56
57
  # Determine overall status
57
- if any(r.status == DiagnosticStatus.ERROR for r in sub_results):
58
- status = DiagnosticStatus.ERROR
58
+ if any(r.status == ValidationSeverity.ERROR for r in sub_results):
59
+ status = ValidationSeverity.ERROR
59
60
  message = "Installation has critical issues"
60
- elif any(r.status == DiagnosticStatus.WARNING for r in sub_results):
61
- status = DiagnosticStatus.WARNING
61
+ elif any(r.status == ValidationSeverity.WARNING for r in sub_results):
62
+ status = ValidationSeverity.WARNING
62
63
  message = "Installation has minor issues"
63
64
  else:
64
- status = DiagnosticStatus.OK
65
+ status = OperationResult.SUCCESS
65
66
  message = "Installation is healthy"
66
67
 
67
68
  return DiagnosticResult(
@@ -75,7 +76,7 @@ class InstallationCheck(BaseDiagnosticCheck):
75
76
  except Exception as e:
76
77
  return DiagnosticResult(
77
78
  category=self.category,
78
- status=DiagnosticStatus.ERROR,
79
+ status=ValidationSeverity.ERROR,
79
80
  message=f"Installation check failed: {e!s}",
80
81
  details={"error": str(e)},
81
82
  )
@@ -91,7 +92,7 @@ class InstallationCheck(BaseDiagnosticCheck):
91
92
  if version_info < min_version:
92
93
  return DiagnosticResult(
93
94
  category="Python Version",
94
- status=DiagnosticStatus.ERROR,
95
+ status=ValidationSeverity.ERROR,
95
96
  message=f"Python {version_info.major}.{version_info.minor} is below minimum required {min_version[0]}.{min_version[1]}",
96
97
  details={"version": version},
97
98
  fix_description="Upgrade Python to 3.9 or higher",
@@ -99,13 +100,13 @@ class InstallationCheck(BaseDiagnosticCheck):
99
100
  if version_info < recommended_version:
100
101
  return DiagnosticResult(
101
102
  category="Python Version",
102
- status=DiagnosticStatus.WARNING,
103
+ status=ValidationSeverity.WARNING,
103
104
  message=f"Python {version_info.major}.{version_info.minor} works but {recommended_version[0]}.{recommended_version[1]}+ is recommended",
104
105
  details={"version": version},
105
106
  )
106
107
  return DiagnosticResult(
107
108
  category="Python Version",
108
- status=DiagnosticStatus.OK,
109
+ status=OperationResult.SUCCESS,
109
110
  message=f"Python {version_info.major}.{version_info.minor}.{version_info.micro}",
110
111
  details={"version": version},
111
112
  )
@@ -122,7 +123,7 @@ class InstallationCheck(BaseDiagnosticCheck):
122
123
 
123
124
  return DiagnosticResult(
124
125
  category="Claude MPM Version",
125
- status=DiagnosticStatus.OK,
126
+ status=OperationResult.SUCCESS,
126
127
  message=f"Version: {version}",
127
128
  details={
128
129
  "version": semantic_version,
@@ -133,7 +134,7 @@ class InstallationCheck(BaseDiagnosticCheck):
133
134
  except Exception as e:
134
135
  return DiagnosticResult(
135
136
  category="Claude MPM Version",
136
- status=DiagnosticStatus.WARNING,
137
+ status=ValidationSeverity.WARNING,
137
138
  message="Could not determine version",
138
139
  details={"error": str(e)},
139
140
  )
@@ -243,7 +244,7 @@ class InstallationCheck(BaseDiagnosticCheck):
243
244
  if not methods_found:
244
245
  return DiagnosticResult(
245
246
  category="Installation Method",
246
- status=DiagnosticStatus.WARNING,
247
+ status=ValidationSeverity.WARNING,
247
248
  message="Installation method unknown",
248
249
  details=details,
249
250
  )
@@ -259,7 +260,7 @@ class InstallationCheck(BaseDiagnosticCheck):
259
260
  container_msg += " with virtual environment"
260
261
  return DiagnosticResult(
261
262
  category="Installation Method",
262
- status=DiagnosticStatus.OK,
263
+ status=OperationResult.SUCCESS,
263
264
  message=container_msg,
264
265
  details=details,
265
266
  )
@@ -268,7 +269,7 @@ class InstallationCheck(BaseDiagnosticCheck):
268
269
  if "pipx" in methods_found:
269
270
  return DiagnosticResult(
270
271
  category="Installation Method",
271
- status=DiagnosticStatus.OK,
272
+ status=OperationResult.SUCCESS,
272
273
  message="Running from pipx environment (recommended)",
273
274
  details=details,
274
275
  )
@@ -278,7 +279,7 @@ class InstallationCheck(BaseDiagnosticCheck):
278
279
  venv_name = Path(sys.prefix).name
279
280
  return DiagnosticResult(
280
281
  category="Installation Method",
281
- status=DiagnosticStatus.OK,
282
+ status=OperationResult.SUCCESS,
282
283
  message=f"Development mode in virtual environment '{venv_name}'",
283
284
  details=details,
284
285
  )
@@ -288,7 +289,7 @@ class InstallationCheck(BaseDiagnosticCheck):
288
289
  venv_name = Path(sys.prefix).name
289
290
  return DiagnosticResult(
290
291
  category="Installation Method",
291
- status=DiagnosticStatus.OK,
292
+ status=OperationResult.SUCCESS,
292
293
  message=f"Virtual environment '{venv_name}'",
293
294
  details=details,
294
295
  )
@@ -297,7 +298,7 @@ class InstallationCheck(BaseDiagnosticCheck):
297
298
  if "development" in methods_found and "homebrew" in methods_found:
298
299
  return DiagnosticResult(
299
300
  category="Installation Method",
300
- status=DiagnosticStatus.OK,
301
+ status=OperationResult.SUCCESS,
301
302
  message="Development mode with Homebrew Python",
302
303
  details=details,
303
304
  )
@@ -305,7 +306,7 @@ class InstallationCheck(BaseDiagnosticCheck):
305
306
  if "development" in methods_found:
306
307
  return DiagnosticResult(
307
308
  category="Installation Method",
308
- status=DiagnosticStatus.OK,
309
+ status=OperationResult.SUCCESS,
309
310
  message="Development mode",
310
311
  details=details,
311
312
  )
@@ -315,9 +316,9 @@ class InstallationCheck(BaseDiagnosticCheck):
315
316
  msg = "Homebrew Python"
316
317
  if details.get("pipx_installed"):
317
318
  msg += " (pipx is installed but not active - consider using 'pipx run claude-mpm')"
318
- status = DiagnosticStatus.WARNING
319
+ status = ValidationSeverity.WARNING
319
320
  else:
320
- status = DiagnosticStatus.OK
321
+ status = OperationResult.SUCCESS
321
322
  return DiagnosticResult(
322
323
  category="Installation Method",
323
324
  status=status,
@@ -329,7 +330,7 @@ class InstallationCheck(BaseDiagnosticCheck):
329
330
  if "pip" in methods_found:
330
331
  return DiagnosticResult(
331
332
  category="Installation Method",
332
- status=DiagnosticStatus.WARNING,
333
+ status=ValidationSeverity.WARNING,
333
334
  message="System pip installation (consider using pipx or venv instead)",
334
335
  details=details,
335
336
  fix_description="Consider reinstalling with pipx for isolated environment",
@@ -339,7 +340,7 @@ class InstallationCheck(BaseDiagnosticCheck):
339
340
  if "system" in methods_found:
340
341
  return DiagnosticResult(
341
342
  category="Installation Method",
342
- status=DiagnosticStatus.WARNING,
343
+ status=ValidationSeverity.WARNING,
343
344
  message="System Python (consider using pipx or venv)",
344
345
  details=details,
345
346
  )
@@ -347,7 +348,7 @@ class InstallationCheck(BaseDiagnosticCheck):
347
348
  # Fallback for any other combination
348
349
  return DiagnosticResult(
349
350
  category="Installation Method",
350
- status=DiagnosticStatus.OK,
351
+ status=OperationResult.SUCCESS,
351
352
  message=f"Installed via {', '.join(methods_found)}",
352
353
  details=details,
353
354
  )
@@ -399,7 +400,7 @@ class InstallationCheck(BaseDiagnosticCheck):
399
400
 
400
401
  return DiagnosticResult(
401
402
  category="Dependencies",
402
- status=DiagnosticStatus.ERROR,
403
+ status=ValidationSeverity.ERROR,
403
404
  message=f"Missing critical dependencies: {', '.join(missing)}",
404
405
  details={
405
406
  "missing": missing,
@@ -414,11 +415,11 @@ class InstallationCheck(BaseDiagnosticCheck):
414
415
  if warnings:
415
416
  return DiagnosticResult(
416
417
  category="Dependencies",
417
- status=DiagnosticStatus.WARNING,
418
+ status=ValidationSeverity.WARNING,
418
419
  message=f"Missing optional dependencies: {', '.join(warnings)}",
419
420
  details={
420
421
  "optional_missing": warnings,
421
- "status": "partial",
422
+ "status": OperationResult.PARTIAL,
422
423
  "installed": installed,
423
424
  "python_executable": sys.executable,
424
425
  "in_venv": in_venv,
@@ -426,10 +427,10 @@ class InstallationCheck(BaseDiagnosticCheck):
426
427
  )
427
428
  return DiagnosticResult(
428
429
  category="Dependencies",
429
- status=DiagnosticStatus.OK,
430
+ status=OperationResult.SUCCESS,
430
431
  message="All dependencies installed",
431
432
  details={
432
- "status": "complete",
433
+ "status": OperationResult.COMPLETED,
433
434
  "installed": installed,
434
435
  "python_executable": sys.executable,
435
436
  "in_venv": in_venv,
@@ -11,7 +11,8 @@ from collections import defaultdict
11
11
  from pathlib import Path
12
12
  from typing import Dict
13
13
 
14
- from ..models import DiagnosticResult, DiagnosticStatus
14
+ from ....core.enums import OperationResult, ValidationSeverity
15
+ from ..models import DiagnosticResult
15
16
  from .base_check import BaseDiagnosticCheck
16
17
 
17
18
 
@@ -77,14 +78,14 @@ class InstructionsCheck(BaseDiagnosticCheck):
77
78
  sub_results.append(separation_result)
78
79
 
79
80
  # Determine overall status
80
- if any(r.status == DiagnosticStatus.ERROR for r in sub_results):
81
- status = DiagnosticStatus.ERROR
81
+ if any(r.status == ValidationSeverity.ERROR for r in sub_results):
82
+ status = ValidationSeverity.ERROR
82
83
  message = "Found critical issues with instruction files"
83
- elif any(r.status == DiagnosticStatus.WARNING for r in sub_results):
84
- status = DiagnosticStatus.WARNING
84
+ elif any(r.status == ValidationSeverity.WARNING for r in sub_results):
85
+ status = ValidationSeverity.WARNING
85
86
  message = "Found minor issues with instruction files"
86
87
  else:
87
- status = DiagnosticStatus.OK
88
+ status = OperationResult.SUCCESS
88
89
  message = "Instruction files are properly configured"
89
90
 
90
91
  return DiagnosticResult(
@@ -98,7 +99,7 @@ class InstructionsCheck(BaseDiagnosticCheck):
98
99
  except Exception as e:
99
100
  return DiagnosticResult(
100
101
  category=self.category,
101
- status=DiagnosticStatus.ERROR,
102
+ status=ValidationSeverity.ERROR,
102
103
  message=f"Instructions check failed: {e!s}",
103
104
  details={"error": str(e)},
104
105
  )
@@ -146,7 +147,7 @@ class InstructionsCheck(BaseDiagnosticCheck):
146
147
  if not claude_files:
147
148
  return DiagnosticResult(
148
149
  category="CLAUDE.md Placement",
149
- status=DiagnosticStatus.OK,
150
+ status=OperationResult.SUCCESS,
150
151
  message="No CLAUDE.md files found",
151
152
  details={},
152
153
  )
@@ -170,7 +171,7 @@ class InstructionsCheck(BaseDiagnosticCheck):
170
171
  if issues:
171
172
  return DiagnosticResult(
172
173
  category="CLAUDE.md Placement",
173
- status=DiagnosticStatus.WARNING,
174
+ status=ValidationSeverity.WARNING,
174
175
  message=f"Found {len(issues)} misplaced CLAUDE.md file(s)",
175
176
  details={"issues": issues},
176
177
  fix_description=(
@@ -181,7 +182,7 @@ class InstructionsCheck(BaseDiagnosticCheck):
181
182
 
182
183
  return DiagnosticResult(
183
184
  category="CLAUDE.md Placement",
184
- status=DiagnosticStatus.OK,
185
+ status=OperationResult.SUCCESS,
185
186
  message="CLAUDE.md properly placed in project root",
186
187
  details={"count": len(claude_files)},
187
188
  )
@@ -191,7 +192,7 @@ class InstructionsCheck(BaseDiagnosticCheck):
191
192
  if len(files) < 2:
192
193
  return DiagnosticResult(
193
194
  category="Duplicate Content",
194
- status=DiagnosticStatus.OK,
195
+ status=OperationResult.SUCCESS,
195
196
  message="No duplicate content detected",
196
197
  details={},
197
198
  )
@@ -226,7 +227,7 @@ class InstructionsCheck(BaseDiagnosticCheck):
226
227
  if duplicates:
227
228
  return DiagnosticResult(
228
229
  category="Duplicate Content",
229
- status=DiagnosticStatus.WARNING,
230
+ status=ValidationSeverity.WARNING,
230
231
  message=f"Found {len(duplicates)} duplicate content block(s)",
231
232
  details={"duplicates": duplicates[:5]}, # Limit to first 5
232
233
  fix_description=(
@@ -238,7 +239,7 @@ class InstructionsCheck(BaseDiagnosticCheck):
238
239
 
239
240
  return DiagnosticResult(
240
241
  category="Duplicate Content",
241
- status=DiagnosticStatus.OK,
242
+ status=OperationResult.SUCCESS,
242
243
  message="No significant duplicate content found",
243
244
  details={},
244
245
  )
@@ -280,7 +281,7 @@ class InstructionsCheck(BaseDiagnosticCheck):
280
281
  if conflicts:
281
282
  return DiagnosticResult(
282
283
  category="Conflicting Directives",
283
- status=DiagnosticStatus.ERROR,
284
+ status=ValidationSeverity.ERROR,
284
285
  message=f"Found {len(conflicts)} potential conflict(s)",
285
286
  details={"conflicts": conflicts},
286
287
  fix_description=(
@@ -292,7 +293,7 @@ class InstructionsCheck(BaseDiagnosticCheck):
292
293
 
293
294
  return DiagnosticResult(
294
295
  category="Conflicting Directives",
295
- status=DiagnosticStatus.OK,
296
+ status=OperationResult.SUCCESS,
296
297
  message="No conflicting directives detected",
297
298
  details={},
298
299
  )
@@ -330,7 +331,7 @@ class InstructionsCheck(BaseDiagnosticCheck):
330
331
  if duplicates:
331
332
  return DiagnosticResult(
332
333
  category="Agent Definitions",
333
- status=DiagnosticStatus.WARNING,
334
+ status=ValidationSeverity.WARNING,
334
335
  message=f"Found {len(duplicates)} duplicate agent definition(s)",
335
336
  details={"duplicates": duplicates},
336
337
  fix_description=(
@@ -341,7 +342,7 @@ class InstructionsCheck(BaseDiagnosticCheck):
341
342
 
342
343
  return DiagnosticResult(
343
344
  category="Agent Definitions",
344
- status=DiagnosticStatus.OK,
345
+ status=OperationResult.SUCCESS,
345
346
  message="Agent definitions are unique",
346
347
  details={"total_agents": len(agent_definitions)},
347
348
  )
@@ -396,7 +397,7 @@ class InstructionsCheck(BaseDiagnosticCheck):
396
397
  if issues:
397
398
  return DiagnosticResult(
398
399
  category="Separation of Concerns",
399
- status=DiagnosticStatus.WARNING,
400
+ status=ValidationSeverity.WARNING,
400
401
  message=f"Found {len(issues)} separation of concerns issue(s)",
401
402
  details={"issues": issues},
402
403
  fix_description=(
@@ -409,7 +410,7 @@ class InstructionsCheck(BaseDiagnosticCheck):
409
410
 
410
411
  return DiagnosticResult(
411
412
  category="Separation of Concerns",
412
- status=DiagnosticStatus.OK,
413
+ status=OperationResult.SUCCESS,
413
414
  message="Instruction files properly separated",
414
415
  details={},
415
416
  )
@@ -9,7 +9,9 @@ import json
9
9
  import subprocess
10
10
  from pathlib import Path
11
11
 
12
- from ..models import DiagnosticResult, DiagnosticStatus
12
+ from claude_mpm.core.enums import OperationResult, ServiceState, ValidationSeverity
13
+
14
+ from ..models import DiagnosticResult
13
15
  from .base_check import BaseDiagnosticCheck
14
16
 
15
17
 
@@ -34,13 +36,13 @@ class MCPCheck(BaseDiagnosticCheck):
34
36
  # Check if MCP is installed
35
37
  install_result = self._check_installation()
36
38
  sub_results.append(install_result)
37
- details["installed"] = install_result.status == DiagnosticStatus.OK
39
+ details["installed"] = install_result.status == OperationResult.SUCCESS
38
40
 
39
- if install_result.status == DiagnosticStatus.OK:
41
+ if install_result.status == OperationResult.SUCCESS:
40
42
  # Check MCP configuration
41
43
  config_result = self._check_configuration()
42
44
  sub_results.append(config_result)
43
- details["configured"] = config_result.status == DiagnosticStatus.OK
45
+ details["configured"] = config_result.status == OperationResult.SUCCESS
44
46
 
45
47
  # Check MCP server status
46
48
  status_result = self._check_server_status()
@@ -52,17 +54,17 @@ class MCPCheck(BaseDiagnosticCheck):
52
54
  sub_results.append(startup_result)
53
55
 
54
56
  # Determine overall status
55
- if any(r.status == DiagnosticStatus.ERROR for r in sub_results):
56
- status = DiagnosticStatus.ERROR
57
+ if any(r.status == ValidationSeverity.ERROR for r in sub_results):
58
+ status = ValidationSeverity.ERROR
57
59
  message = "MCP server has critical issues"
58
60
  elif not details.get("installed", False):
59
- status = DiagnosticStatus.WARNING
61
+ status = ValidationSeverity.WARNING
60
62
  message = "MCP server not installed"
61
- elif any(r.status == DiagnosticStatus.WARNING for r in sub_results):
62
- status = DiagnosticStatus.WARNING
63
+ elif any(r.status == ValidationSeverity.WARNING for r in sub_results):
64
+ status = ValidationSeverity.WARNING
63
65
  message = "MCP server needs configuration"
64
66
  else:
65
- status = DiagnosticStatus.OK
67
+ status = OperationResult.SUCCESS
66
68
  message = "MCP server properly configured"
67
69
 
68
70
  return DiagnosticResult(
@@ -76,7 +78,7 @@ class MCPCheck(BaseDiagnosticCheck):
76
78
  except Exception as e:
77
79
  return DiagnosticResult(
78
80
  category=self.category,
79
- status=DiagnosticStatus.ERROR,
81
+ status=ValidationSeverity.ERROR,
80
82
  message=f"MCP check failed: {e!s}",
81
83
  details={"error": str(e)},
82
84
  )
@@ -94,7 +96,7 @@ class MCPCheck(BaseDiagnosticCheck):
94
96
  if mcp_path.exists():
95
97
  return DiagnosticResult(
96
98
  category="MCP Installation",
97
- status=DiagnosticStatus.OK,
99
+ status=OperationResult.SUCCESS,
98
100
  message="MCP server installed",
99
101
  details={"path": str(mcp_path), "installed": True},
100
102
  )
@@ -112,7 +114,7 @@ class MCPCheck(BaseDiagnosticCheck):
112
114
  path = result.stdout.strip()
113
115
  return DiagnosticResult(
114
116
  category="MCP Installation",
115
- status=DiagnosticStatus.OK,
117
+ status=OperationResult.SUCCESS,
116
118
  message="MCP server installed",
117
119
  details={"path": path, "installed": True},
118
120
  )
@@ -121,7 +123,7 @@ class MCPCheck(BaseDiagnosticCheck):
121
123
 
122
124
  return DiagnosticResult(
123
125
  category="MCP Installation",
124
- status=DiagnosticStatus.WARNING,
126
+ status=ValidationSeverity.WARNING,
125
127
  message="MCP server not installed",
126
128
  details={"installed": False},
127
129
  fix_command="claude-mpm mcp install",
@@ -146,7 +148,7 @@ class MCPCheck(BaseDiagnosticCheck):
146
148
  if not config_path:
147
149
  return DiagnosticResult(
148
150
  category="MCP Configuration",
149
- status=DiagnosticStatus.WARNING,
151
+ status=ValidationSeverity.WARNING,
150
152
  message="Claude Code config not found",
151
153
  details={"configured": False},
152
154
  fix_command="claude-mpm mcp config",
@@ -163,7 +165,7 @@ class MCPCheck(BaseDiagnosticCheck):
163
165
  if not gateway:
164
166
  return DiagnosticResult(
165
167
  category="MCP Configuration",
166
- status=DiagnosticStatus.WARNING,
168
+ status=ValidationSeverity.WARNING,
167
169
  message="MCP gateway not configured",
168
170
  details={"configured": False, "config_path": str(config_path)},
169
171
  fix_command="claude-mpm mcp config",
@@ -175,7 +177,7 @@ class MCPCheck(BaseDiagnosticCheck):
175
177
  if not command:
176
178
  return DiagnosticResult(
177
179
  category="MCP Configuration",
178
- status=DiagnosticStatus.ERROR,
180
+ status=ValidationSeverity.ERROR,
179
181
  message="MCP gateway misconfigured (no command)",
180
182
  details={
181
183
  "configured": True,
@@ -188,7 +190,7 @@ class MCPCheck(BaseDiagnosticCheck):
188
190
 
189
191
  return DiagnosticResult(
190
192
  category="MCP Configuration",
191
- status=DiagnosticStatus.OK,
193
+ status=OperationResult.SUCCESS,
192
194
  message="MCP gateway configured",
193
195
  details={
194
196
  "configured": True,
@@ -200,7 +202,7 @@ class MCPCheck(BaseDiagnosticCheck):
200
202
  except json.JSONDecodeError as e:
201
203
  return DiagnosticResult(
202
204
  category="MCP Configuration",
203
- status=DiagnosticStatus.ERROR,
205
+ status=ValidationSeverity.ERROR,
204
206
  message="Invalid JSON in config file",
205
207
  details={"error": str(e), "config_path": str(config_path)},
206
208
  fix_description="Fix JSON syntax in Claude Code config",
@@ -208,7 +210,7 @@ class MCPCheck(BaseDiagnosticCheck):
208
210
  except Exception as e:
209
211
  return DiagnosticResult(
210
212
  category="MCP Configuration",
211
- status=DiagnosticStatus.WARNING,
213
+ status=ValidationSeverity.WARNING,
212
214
  message=f"Could not check configuration: {e!s}",
213
215
  details={"error": str(e)},
214
216
  )
@@ -226,41 +228,53 @@ class MCPCheck(BaseDiagnosticCheck):
226
228
  )
227
229
 
228
230
  if result.returncode == 0:
229
- if "running" in result.stdout.lower():
231
+ if ServiceState.RUNNING.value in result.stdout.lower():
230
232
  return DiagnosticResult(
231
233
  category="MCP Server Status",
232
- status=DiagnosticStatus.OK,
234
+ status=OperationResult.SUCCESS,
233
235
  message="MCP server is running",
234
- details={"running": True},
236
+ details={"running": True, "state": ServiceState.RUNNING},
235
237
  )
236
238
  return DiagnosticResult(
237
239
  category="MCP Server Status",
238
- status=DiagnosticStatus.WARNING,
240
+ status=ValidationSeverity.WARNING,
239
241
  message="MCP server not running",
240
- details={"running": False},
242
+ details={"running": False, "state": ServiceState.STOPPED},
241
243
  fix_command="claude-mpm mcp start",
242
244
  fix_description="Start the MCP server",
243
245
  )
244
246
  return DiagnosticResult(
245
247
  category="MCP Server Status",
246
- status=DiagnosticStatus.WARNING,
248
+ status=ValidationSeverity.WARNING,
247
249
  message="Could not determine server status",
248
- details={"running": "unknown", "error": result.stderr},
250
+ details={
251
+ "running": "unknown",
252
+ "state": ServiceState.UNKNOWN,
253
+ "error": result.stderr,
254
+ },
249
255
  )
250
256
 
251
257
  except subprocess.TimeoutExpired:
252
258
  return DiagnosticResult(
253
259
  category="MCP Server Status",
254
- status=DiagnosticStatus.WARNING,
260
+ status=ValidationSeverity.WARNING,
255
261
  message="Server status check timed out",
256
- details={"running": "unknown", "error": "timeout"},
262
+ details={
263
+ "running": "unknown",
264
+ "state": ServiceState.UNKNOWN,
265
+ "error": "timeout",
266
+ },
257
267
  )
258
268
  except Exception as e:
259
269
  return DiagnosticResult(
260
270
  category="MCP Server Status",
261
- status=DiagnosticStatus.WARNING,
271
+ status=ValidationSeverity.WARNING,
262
272
  message=f"Could not check server status: {e!s}",
263
- details={"running": "unknown", "error": str(e)},
273
+ details={
274
+ "running": "unknown",
275
+ "state": ServiceState.UNKNOWN,
276
+ "error": str(e),
277
+ },
264
278
  )
265
279
 
266
280
  def _check_startup_verification(self) -> DiagnosticResult:
@@ -276,7 +290,7 @@ class MCPCheck(BaseDiagnosticCheck):
276
290
  if not issues:
277
291
  return DiagnosticResult(
278
292
  category="MCP Startup Verification",
279
- status=DiagnosticStatus.OK,
293
+ status=OperationResult.SUCCESS,
280
294
  message="Startup verification passed",
281
295
  details={"issues": []},
282
296
  )
@@ -290,20 +304,20 @@ class MCPCheck(BaseDiagnosticCheck):
290
304
  if errors:
291
305
  return DiagnosticResult(
292
306
  category="MCP Startup Verification",
293
- status=DiagnosticStatus.ERROR,
307
+ status=ValidationSeverity.ERROR,
294
308
  message=f"{len(errors)} critical issue(s) found",
295
309
  details={"errors": errors, "warnings": warnings},
296
310
  )
297
311
  if warnings:
298
312
  return DiagnosticResult(
299
313
  category="MCP Startup Verification",
300
- status=DiagnosticStatus.WARNING,
314
+ status=ValidationSeverity.WARNING,
301
315
  message=f"{len(warnings)} warning(s) found",
302
316
  details={"warnings": warnings},
303
317
  )
304
318
  return DiagnosticResult(
305
319
  category="MCP Startup Verification",
306
- status=DiagnosticStatus.OK,
320
+ status=OperationResult.SUCCESS,
307
321
  message="Startup verification passed",
308
322
  details={"issues": []},
309
323
  )
@@ -311,7 +325,7 @@ class MCPCheck(BaseDiagnosticCheck):
311
325
  except Exception as e:
312
326
  return DiagnosticResult(
313
327
  category="MCP Startup Verification",
314
- status=DiagnosticStatus.WARNING,
328
+ status=ValidationSeverity.WARNING,
315
329
  message=f"Could not verify startup: {e!s}",
316
330
  details={"error": str(e)},
317
331
  )