claude-mpm 4.7.4__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 (308) hide show
  1. claude_mpm/VERSION +1 -1
  2. claude_mpm/agents/BASE_AGENT_TEMPLATE.md +118 -0
  3. claude_mpm/agents/BASE_ENGINEER.md +286 -0
  4. claude_mpm/agents/BASE_PM.md +106 -1
  5. claude_mpm/agents/OUTPUT_STYLE.md +329 -11
  6. claude_mpm/agents/PM_INSTRUCTIONS.md +397 -459
  7. claude_mpm/agents/agent_loader.py +17 -5
  8. claude_mpm/agents/frontmatter_validator.py +284 -253
  9. claude_mpm/agents/templates/README.md +465 -0
  10. claude_mpm/agents/templates/agent-manager.json +4 -1
  11. claude_mpm/agents/templates/agentic-coder-optimizer.json +13 -3
  12. claude_mpm/agents/templates/api_qa.json +11 -2
  13. claude_mpm/agents/templates/circuit_breakers.md +638 -0
  14. claude_mpm/agents/templates/clerk-ops.json +12 -2
  15. claude_mpm/agents/templates/code_analyzer.json +8 -2
  16. claude_mpm/agents/templates/content-agent.json +358 -0
  17. claude_mpm/agents/templates/dart_engineer.json +15 -2
  18. claude_mpm/agents/templates/data_engineer.json +15 -2
  19. claude_mpm/agents/templates/documentation.json +10 -2
  20. claude_mpm/agents/templates/engineer.json +21 -1
  21. claude_mpm/agents/templates/gcp_ops_agent.json +12 -2
  22. claude_mpm/agents/templates/git_file_tracking.md +584 -0
  23. claude_mpm/agents/templates/golang_engineer.json +270 -0
  24. claude_mpm/agents/templates/imagemagick.json +4 -1
  25. claude_mpm/agents/templates/java_engineer.json +346 -0
  26. claude_mpm/agents/templates/local_ops_agent.json +1227 -6
  27. claude_mpm/agents/templates/memory_manager.json +4 -1
  28. claude_mpm/agents/templates/nextjs_engineer.json +141 -133
  29. claude_mpm/agents/templates/ops.json +12 -2
  30. claude_mpm/agents/templates/php-engineer.json +270 -174
  31. claude_mpm/agents/templates/pm_examples.md +474 -0
  32. claude_mpm/agents/templates/pm_red_flags.md +240 -0
  33. claude_mpm/agents/templates/product_owner.json +338 -0
  34. claude_mpm/agents/templates/project_organizer.json +14 -4
  35. claude_mpm/agents/templates/prompt-engineer.json +13 -2
  36. claude_mpm/agents/templates/python_engineer.json +174 -81
  37. claude_mpm/agents/templates/qa.json +11 -2
  38. claude_mpm/agents/templates/react_engineer.json +16 -3
  39. claude_mpm/agents/templates/refactoring_engineer.json +12 -2
  40. claude_mpm/agents/templates/research.json +34 -21
  41. claude_mpm/agents/templates/response_format.md +583 -0
  42. claude_mpm/agents/templates/ruby-engineer.json +129 -192
  43. claude_mpm/agents/templates/rust_engineer.json +270 -0
  44. claude_mpm/agents/templates/security.json +10 -2
  45. claude_mpm/agents/templates/svelte-engineer.json +225 -0
  46. claude_mpm/agents/templates/ticketing.json +10 -2
  47. claude_mpm/agents/templates/typescript_engineer.json +116 -125
  48. claude_mpm/agents/templates/validation_templates.md +312 -0
  49. claude_mpm/agents/templates/vercel_ops_agent.json +12 -2
  50. claude_mpm/agents/templates/version_control.json +12 -2
  51. claude_mpm/agents/templates/web_qa.json +11 -2
  52. claude_mpm/agents/templates/web_ui.json +15 -2
  53. claude_mpm/cli/__init__.py +34 -614
  54. claude_mpm/cli/commands/agent_manager.py +25 -12
  55. claude_mpm/cli/commands/agent_state_manager.py +186 -0
  56. claude_mpm/cli/commands/agents.py +235 -148
  57. claude_mpm/cli/commands/agents_detect.py +380 -0
  58. claude_mpm/cli/commands/agents_recommend.py +309 -0
  59. claude_mpm/cli/commands/aggregate.py +7 -3
  60. claude_mpm/cli/commands/analyze.py +9 -4
  61. claude_mpm/cli/commands/analyze_code.py +7 -2
  62. claude_mpm/cli/commands/auto_configure.py +570 -0
  63. claude_mpm/cli/commands/config.py +47 -13
  64. claude_mpm/cli/commands/configure.py +419 -1571
  65. claude_mpm/cli/commands/configure_agent_display.py +261 -0
  66. claude_mpm/cli/commands/configure_behavior_manager.py +204 -0
  67. claude_mpm/cli/commands/configure_hook_manager.py +225 -0
  68. claude_mpm/cli/commands/configure_models.py +18 -0
  69. claude_mpm/cli/commands/configure_navigation.py +167 -0
  70. claude_mpm/cli/commands/configure_paths.py +104 -0
  71. claude_mpm/cli/commands/configure_persistence.py +254 -0
  72. claude_mpm/cli/commands/configure_startup_manager.py +646 -0
  73. claude_mpm/cli/commands/configure_template_editor.py +497 -0
  74. claude_mpm/cli/commands/configure_validators.py +73 -0
  75. claude_mpm/cli/commands/local_deploy.py +537 -0
  76. claude_mpm/cli/commands/memory.py +54 -20
  77. claude_mpm/cli/commands/mpm_init.py +585 -196
  78. claude_mpm/cli/commands/mpm_init_handler.py +37 -3
  79. claude_mpm/cli/commands/search.py +170 -4
  80. claude_mpm/cli/commands/upgrade.py +152 -0
  81. claude_mpm/cli/executor.py +202 -0
  82. claude_mpm/cli/helpers.py +105 -0
  83. claude_mpm/cli/interactive/__init__.py +3 -0
  84. claude_mpm/cli/interactive/skills_wizard.py +491 -0
  85. claude_mpm/cli/parsers/__init__.py +7 -1
  86. claude_mpm/cli/parsers/agents_parser.py +9 -0
  87. claude_mpm/cli/parsers/auto_configure_parser.py +245 -0
  88. claude_mpm/cli/parsers/base_parser.py +110 -3
  89. claude_mpm/cli/parsers/local_deploy_parser.py +227 -0
  90. claude_mpm/cli/parsers/mpm_init_parser.py +65 -5
  91. claude_mpm/cli/shared/output_formatters.py +28 -19
  92. claude_mpm/cli/startup.py +481 -0
  93. claude_mpm/cli/utils.py +52 -1
  94. claude_mpm/commands/mpm-agents-detect.md +168 -0
  95. claude_mpm/commands/mpm-agents-recommend.md +214 -0
  96. claude_mpm/commands/mpm-agents.md +75 -1
  97. claude_mpm/commands/mpm-auto-configure.md +217 -0
  98. claude_mpm/commands/mpm-help.md +163 -0
  99. claude_mpm/commands/mpm-init.md +148 -3
  100. claude_mpm/commands/mpm-version.md +113 -0
  101. claude_mpm/commands/mpm.md +1 -0
  102. claude_mpm/config/agent_config.py +2 -2
  103. claude_mpm/config/model_config.py +428 -0
  104. claude_mpm/constants.py +1 -0
  105. claude_mpm/core/base_service.py +13 -12
  106. claude_mpm/core/enums.py +452 -0
  107. claude_mpm/core/factories.py +1 -1
  108. claude_mpm/core/instruction_reinforcement_hook.py +2 -1
  109. claude_mpm/core/interactive_session.py +9 -3
  110. claude_mpm/core/log_manager.py +2 -0
  111. claude_mpm/core/logging_config.py +6 -2
  112. claude_mpm/core/oneshot_session.py +8 -4
  113. claude_mpm/core/optimized_agent_loader.py +3 -3
  114. claude_mpm/core/output_style_manager.py +12 -192
  115. claude_mpm/core/service_registry.py +5 -1
  116. claude_mpm/core/types.py +2 -9
  117. claude_mpm/core/typing_utils.py +7 -6
  118. claude_mpm/dashboard/static/js/dashboard.js +0 -14
  119. claude_mpm/dashboard/templates/index.html +3 -41
  120. claude_mpm/hooks/__init__.py +20 -0
  121. claude_mpm/hooks/claude_hooks/event_handlers.py +4 -2
  122. claude_mpm/hooks/claude_hooks/response_tracking.py +35 -1
  123. claude_mpm/hooks/claude_hooks/services/connection_manager_http.py +23 -2
  124. claude_mpm/hooks/failure_learning/__init__.py +60 -0
  125. claude_mpm/hooks/failure_learning/failure_detection_hook.py +235 -0
  126. claude_mpm/hooks/failure_learning/fix_detection_hook.py +217 -0
  127. claude_mpm/hooks/failure_learning/learning_extraction_hook.py +286 -0
  128. claude_mpm/hooks/instruction_reinforcement.py +7 -2
  129. claude_mpm/hooks/kuzu_enrichment_hook.py +263 -0
  130. claude_mpm/hooks/kuzu_memory_hook.py +37 -12
  131. claude_mpm/hooks/kuzu_response_hook.py +183 -0
  132. claude_mpm/models/resume_log.py +340 -0
  133. claude_mpm/services/agents/__init__.py +18 -5
  134. claude_mpm/services/agents/auto_config_manager.py +796 -0
  135. claude_mpm/services/agents/deployment/agent_configuration_manager.py +1 -1
  136. claude_mpm/services/agents/deployment/agent_record_service.py +1 -1
  137. claude_mpm/services/agents/deployment/agent_validator.py +17 -1
  138. claude_mpm/services/agents/deployment/async_agent_deployment.py +1 -1
  139. claude_mpm/services/agents/deployment/interface_adapter.py +3 -2
  140. claude_mpm/services/agents/deployment/local_template_deployment.py +1 -1
  141. claude_mpm/services/agents/deployment/pipeline/steps/agent_processing_step.py +7 -6
  142. claude_mpm/services/agents/deployment/pipeline/steps/base_step.py +7 -16
  143. claude_mpm/services/agents/deployment/pipeline/steps/configuration_step.py +4 -3
  144. claude_mpm/services/agents/deployment/pipeline/steps/target_directory_step.py +5 -3
  145. claude_mpm/services/agents/deployment/pipeline/steps/validation_step.py +6 -5
  146. claude_mpm/services/agents/deployment/refactored_agent_deployment_service.py +9 -6
  147. claude_mpm/services/agents/deployment/validation/__init__.py +3 -1
  148. claude_mpm/services/agents/deployment/validation/validation_result.py +1 -9
  149. claude_mpm/services/agents/local_template_manager.py +1 -1
  150. claude_mpm/services/agents/memory/agent_memory_manager.py +5 -2
  151. claude_mpm/services/agents/observers.py +547 -0
  152. claude_mpm/services/agents/recommender.py +568 -0
  153. claude_mpm/services/agents/registry/modification_tracker.py +5 -2
  154. claude_mpm/services/command_handler_service.py +11 -5
  155. claude_mpm/services/core/__init__.py +33 -1
  156. claude_mpm/services/core/interfaces/__init__.py +90 -3
  157. claude_mpm/services/core/interfaces/agent.py +184 -0
  158. claude_mpm/services/core/interfaces/health.py +172 -0
  159. claude_mpm/services/core/interfaces/model.py +281 -0
  160. claude_mpm/services/core/interfaces/process.py +372 -0
  161. claude_mpm/services/core/interfaces/project.py +121 -0
  162. claude_mpm/services/core/interfaces/restart.py +307 -0
  163. claude_mpm/services/core/interfaces/stability.py +260 -0
  164. claude_mpm/services/core/memory_manager.py +11 -24
  165. claude_mpm/services/core/models/__init__.py +79 -0
  166. claude_mpm/services/core/models/agent_config.py +381 -0
  167. claude_mpm/services/core/models/health.py +162 -0
  168. claude_mpm/services/core/models/process.py +235 -0
  169. claude_mpm/services/core/models/restart.py +302 -0
  170. claude_mpm/services/core/models/stability.py +264 -0
  171. claude_mpm/services/core/models/toolchain.py +306 -0
  172. claude_mpm/services/core/path_resolver.py +23 -7
  173. claude_mpm/services/diagnostics/__init__.py +2 -2
  174. claude_mpm/services/diagnostics/checks/agent_check.py +25 -24
  175. claude_mpm/services/diagnostics/checks/claude_code_check.py +24 -23
  176. claude_mpm/services/diagnostics/checks/common_issues_check.py +25 -24
  177. claude_mpm/services/diagnostics/checks/configuration_check.py +24 -23
  178. claude_mpm/services/diagnostics/checks/filesystem_check.py +18 -17
  179. claude_mpm/services/diagnostics/checks/installation_check.py +30 -29
  180. claude_mpm/services/diagnostics/checks/instructions_check.py +20 -19
  181. claude_mpm/services/diagnostics/checks/mcp_check.py +50 -36
  182. claude_mpm/services/diagnostics/checks/mcp_services_check.py +38 -33
  183. claude_mpm/services/diagnostics/checks/monitor_check.py +23 -22
  184. claude_mpm/services/diagnostics/checks/startup_log_check.py +9 -8
  185. claude_mpm/services/diagnostics/diagnostic_runner.py +6 -5
  186. claude_mpm/services/diagnostics/doctor_reporter.py +28 -25
  187. claude_mpm/services/diagnostics/models.py +19 -24
  188. claude_mpm/services/infrastructure/monitoring/__init__.py +1 -1
  189. claude_mpm/services/infrastructure/monitoring/aggregator.py +12 -12
  190. claude_mpm/services/infrastructure/monitoring/base.py +5 -13
  191. claude_mpm/services/infrastructure/monitoring/network.py +7 -6
  192. claude_mpm/services/infrastructure/monitoring/process.py +13 -12
  193. claude_mpm/services/infrastructure/monitoring/resources.py +7 -6
  194. claude_mpm/services/infrastructure/monitoring/service.py +16 -15
  195. claude_mpm/services/infrastructure/resume_log_generator.py +439 -0
  196. claude_mpm/services/local_ops/__init__.py +163 -0
  197. claude_mpm/services/local_ops/crash_detector.py +257 -0
  198. claude_mpm/services/local_ops/health_checks/__init__.py +28 -0
  199. claude_mpm/services/local_ops/health_checks/http_check.py +224 -0
  200. claude_mpm/services/local_ops/health_checks/process_check.py +236 -0
  201. claude_mpm/services/local_ops/health_checks/resource_check.py +255 -0
  202. claude_mpm/services/local_ops/health_manager.py +430 -0
  203. claude_mpm/services/local_ops/log_monitor.py +396 -0
  204. claude_mpm/services/local_ops/memory_leak_detector.py +294 -0
  205. claude_mpm/services/local_ops/process_manager.py +595 -0
  206. claude_mpm/services/local_ops/resource_monitor.py +331 -0
  207. claude_mpm/services/local_ops/restart_manager.py +401 -0
  208. claude_mpm/services/local_ops/restart_policy.py +387 -0
  209. claude_mpm/services/local_ops/state_manager.py +372 -0
  210. claude_mpm/services/local_ops/unified_manager.py +600 -0
  211. claude_mpm/services/mcp_config_manager.py +9 -4
  212. claude_mpm/services/mcp_gateway/core/__init__.py +1 -2
  213. claude_mpm/services/mcp_gateway/core/base.py +18 -31
  214. claude_mpm/services/mcp_gateway/main.py +30 -0
  215. claude_mpm/services/mcp_gateway/tools/external_mcp_services.py +206 -32
  216. claude_mpm/services/mcp_gateway/tools/health_check_tool.py +30 -28
  217. claude_mpm/services/mcp_gateway/tools/kuzu_memory_service.py +25 -5
  218. claude_mpm/services/mcp_service_verifier.py +1 -1
  219. claude_mpm/services/memory/failure_tracker.py +563 -0
  220. claude_mpm/services/memory_hook_service.py +165 -4
  221. claude_mpm/services/model/__init__.py +147 -0
  222. claude_mpm/services/model/base_provider.py +365 -0
  223. claude_mpm/services/model/claude_provider.py +412 -0
  224. claude_mpm/services/model/model_router.py +453 -0
  225. claude_mpm/services/model/ollama_provider.py +415 -0
  226. claude_mpm/services/monitor/daemon_manager.py +3 -2
  227. claude_mpm/services/monitor/handlers/dashboard.py +2 -1
  228. claude_mpm/services/monitor/handlers/hooks.py +2 -1
  229. claude_mpm/services/monitor/management/lifecycle.py +3 -2
  230. claude_mpm/services/monitor/server.py +2 -1
  231. claude_mpm/services/project/__init__.py +23 -0
  232. claude_mpm/services/project/detection_strategies.py +719 -0
  233. claude_mpm/services/project/toolchain_analyzer.py +581 -0
  234. claude_mpm/services/self_upgrade_service.py +342 -0
  235. claude_mpm/services/session_management_service.py +3 -2
  236. claude_mpm/services/session_manager.py +205 -1
  237. claude_mpm/services/shared/async_service_base.py +16 -27
  238. claude_mpm/services/shared/lifecycle_service_base.py +1 -14
  239. claude_mpm/services/socketio/handlers/__init__.py +5 -2
  240. claude_mpm/services/socketio/handlers/hook.py +13 -2
  241. claude_mpm/services/socketio/handlers/registry.py +4 -2
  242. claude_mpm/services/socketio/server/main.py +10 -8
  243. claude_mpm/services/subprocess_launcher_service.py +14 -5
  244. claude_mpm/services/unified/analyzer_strategies/code_analyzer.py +8 -7
  245. claude_mpm/services/unified/analyzer_strategies/dependency_analyzer.py +6 -5
  246. claude_mpm/services/unified/analyzer_strategies/performance_analyzer.py +8 -7
  247. claude_mpm/services/unified/analyzer_strategies/security_analyzer.py +7 -6
  248. claude_mpm/services/unified/analyzer_strategies/structure_analyzer.py +5 -4
  249. claude_mpm/services/unified/config_strategies/validation_strategy.py +13 -9
  250. claude_mpm/services/unified/deployment_strategies/cloud_strategies.py +10 -3
  251. claude_mpm/services/unified/deployment_strategies/local.py +6 -5
  252. claude_mpm/services/unified/deployment_strategies/utils.py +6 -5
  253. claude_mpm/services/unified/deployment_strategies/vercel.py +7 -6
  254. claude_mpm/services/unified/interfaces.py +3 -1
  255. claude_mpm/services/unified/unified_analyzer.py +14 -10
  256. claude_mpm/services/unified/unified_config.py +2 -1
  257. claude_mpm/services/unified/unified_deployment.py +9 -4
  258. claude_mpm/services/version_service.py +104 -1
  259. claude_mpm/skills/__init__.py +21 -0
  260. claude_mpm/skills/bundled/__init__.py +6 -0
  261. claude_mpm/skills/bundled/api-documentation.md +393 -0
  262. claude_mpm/skills/bundled/async-testing.md +571 -0
  263. claude_mpm/skills/bundled/code-review.md +143 -0
  264. claude_mpm/skills/bundled/database-migration.md +199 -0
  265. claude_mpm/skills/bundled/docker-containerization.md +194 -0
  266. claude_mpm/skills/bundled/express-local-dev.md +1429 -0
  267. claude_mpm/skills/bundled/fastapi-local-dev.md +1199 -0
  268. claude_mpm/skills/bundled/git-workflow.md +414 -0
  269. claude_mpm/skills/bundled/imagemagick.md +204 -0
  270. claude_mpm/skills/bundled/json-data-handling.md +223 -0
  271. claude_mpm/skills/bundled/nextjs-local-dev.md +807 -0
  272. claude_mpm/skills/bundled/pdf.md +141 -0
  273. claude_mpm/skills/bundled/performance-profiling.md +567 -0
  274. claude_mpm/skills/bundled/refactoring-patterns.md +180 -0
  275. claude_mpm/skills/bundled/security-scanning.md +327 -0
  276. claude_mpm/skills/bundled/systematic-debugging.md +473 -0
  277. claude_mpm/skills/bundled/test-driven-development.md +378 -0
  278. claude_mpm/skills/bundled/vite-local-dev.md +1061 -0
  279. claude_mpm/skills/bundled/web-performance-optimization.md +2305 -0
  280. claude_mpm/skills/bundled/xlsx.md +157 -0
  281. claude_mpm/skills/registry.py +286 -0
  282. claude_mpm/skills/skill_manager.py +310 -0
  283. claude_mpm/storage/state_storage.py +15 -15
  284. claude_mpm/tools/code_tree_analyzer.py +177 -141
  285. claude_mpm/tools/code_tree_events.py +4 -2
  286. claude_mpm/utils/agent_dependency_loader.py +40 -20
  287. claude_mpm/utils/display_helper.py +260 -0
  288. claude_mpm/utils/git_analyzer.py +407 -0
  289. claude_mpm/utils/robust_installer.py +73 -19
  290. {claude_mpm-4.7.4.dist-info → claude_mpm-4.18.2.dist-info}/METADATA +129 -12
  291. {claude_mpm-4.7.4.dist-info → claude_mpm-4.18.2.dist-info}/RECORD +295 -193
  292. claude_mpm/dashboard/static/css/code-tree.css +0 -1639
  293. claude_mpm/dashboard/static/index-hub-backup.html +0 -713
  294. claude_mpm/dashboard/static/js/components/code-tree/tree-breadcrumb.js +0 -353
  295. claude_mpm/dashboard/static/js/components/code-tree/tree-constants.js +0 -235
  296. claude_mpm/dashboard/static/js/components/code-tree/tree-search.js +0 -409
  297. claude_mpm/dashboard/static/js/components/code-tree/tree-utils.js +0 -435
  298. claude_mpm/dashboard/static/js/components/code-tree.js +0 -5869
  299. claude_mpm/dashboard/static/js/components/code-viewer.js +0 -1386
  300. claude_mpm/hooks/claude_hooks/hook_handler_eventbus.py +0 -425
  301. claude_mpm/hooks/claude_hooks/hook_handler_original.py +0 -1041
  302. claude_mpm/hooks/claude_hooks/hook_handler_refactored.py +0 -347
  303. claude_mpm/services/agents/deployment/agent_lifecycle_manager_refactored.py +0 -575
  304. claude_mpm/services/project/analyzer_refactored.py +0 -450
  305. {claude_mpm-4.7.4.dist-info → claude_mpm-4.18.2.dist-info}/WHEEL +0 -0
  306. {claude_mpm-4.7.4.dist-info → claude_mpm-4.18.2.dist-info}/entry_points.txt +0 -0
  307. {claude_mpm-4.7.4.dist-info → claude_mpm-4.18.2.dist-info}/licenses/LICENSE +0 -0
  308. {claude_mpm-4.7.4.dist-info → claude_mpm-4.18.2.dist-info}/top_level.txt +0 -0
@@ -26,6 +26,7 @@ from typing import Any, Dict
26
26
  import psutil
27
27
 
28
28
  from claude_mpm.config.paths import paths
29
+ from claude_mpm.core.enums import HealthStatus, OperationResult, ServiceState
29
30
  from claude_mpm.core.logger import get_logger
30
31
  from claude_mpm.services.mcp_gateway.core.interfaces import (
31
32
  MCPToolDefinition,
@@ -168,20 +169,20 @@ class HealthCheckTool(BaseToolAdapter):
168
169
  if i < len(check_results):
169
170
  if isinstance(check_results[i], Exception):
170
171
  results["checks"][check_name] = {
171
- "status": "error",
172
+ "status": OperationResult.ERROR,
172
173
  "error": str(check_results[i]),
173
174
  }
174
175
  else:
175
176
  results["checks"][check_name] = check_results[i]
176
177
  else:
177
178
  results["checks"][check_name] = {
178
- "status": "timeout",
179
+ "status": OperationResult.TIMEOUT,
179
180
  "error": "Check timed out",
180
181
  }
181
182
 
182
183
  except asyncio.TimeoutError:
183
184
  results["checks"]["timeout"] = {
184
- "status": "error",
185
+ "status": OperationResult.ERROR,
185
186
  "error": f"Health checks timed out after {timeout} seconds",
186
187
  }
187
188
 
@@ -194,7 +195,7 @@ class HealthCheckTool(BaseToolAdapter):
194
195
  async def _check_system_health(self, detailed: bool) -> Dict[str, Any]:
195
196
  """Check system health (CPU, memory, disk, etc.)."""
196
197
  check_result = {
197
- "status": "healthy",
198
+ "status": ServiceState.RUNNING,
198
199
  "checks": {},
199
200
  "warnings": [],
200
201
  "errors": [],
@@ -219,7 +220,7 @@ class HealthCheckTool(BaseToolAdapter):
219
220
 
220
221
  if memory_usage > 90:
221
222
  check_result["errors"].append("High memory usage detected")
222
- check_result["status"] = "unhealthy"
223
+ check_result["status"] = HealthStatus.UNHEALTHY
223
224
  elif memory_usage > 80:
224
225
  check_result["warnings"].append("Elevated memory usage")
225
226
 
@@ -232,7 +233,7 @@ class HealthCheckTool(BaseToolAdapter):
232
233
 
233
234
  if cpu_usage > 95:
234
235
  check_result["errors"].append("High CPU usage detected")
235
- check_result["status"] = "unhealthy"
236
+ check_result["status"] = HealthStatus.UNHEALTHY
236
237
  elif cpu_usage > 80:
237
238
  check_result["warnings"].append("Elevated CPU usage")
238
239
 
@@ -248,7 +249,7 @@ class HealthCheckTool(BaseToolAdapter):
248
249
 
249
250
  if disk_usage_percent > 95:
250
251
  check_result["errors"].append("Disk space critically low")
251
- check_result["status"] = "unhealthy"
252
+ check_result["status"] = HealthStatus.UNHEALTHY
252
253
  elif disk_usage_percent > 85:
253
254
  check_result["warnings"].append("Disk space running low")
254
255
 
@@ -262,7 +263,7 @@ class HealthCheckTool(BaseToolAdapter):
262
263
  }
263
264
 
264
265
  except Exception as e:
265
- check_result["status"] = "error"
266
+ check_result["status"] = HealthStatus.UNHEALTHY
266
267
  check_result["errors"].append(f"System health check failed: {e}")
267
268
 
268
269
  return check_result
@@ -270,7 +271,7 @@ class HealthCheckTool(BaseToolAdapter):
270
271
  async def _check_gateway_health(self, detailed: bool) -> Dict[str, Any]:
271
272
  """Check MCP Gateway health."""
272
273
  check_result = {
273
- "status": "healthy",
274
+ "status": ServiceState.RUNNING,
274
275
  "checks": {},
275
276
  "warnings": [],
276
277
  "errors": [],
@@ -302,10 +303,10 @@ class HealthCheckTool(BaseToolAdapter):
302
303
 
303
304
  if not mcp_dir.exists():
304
305
  check_result["errors"].append("MCP directory does not exist")
305
- check_result["status"] = "unhealthy"
306
+ check_result["status"] = HealthStatus.UNHEALTHY
306
307
 
307
308
  except Exception as e:
308
- check_result["status"] = "error"
309
+ check_result["status"] = HealthStatus.UNHEALTHY
309
310
  check_result["errors"].append(f"Gateway health check failed: {e}")
310
311
 
311
312
  return check_result
@@ -313,7 +314,7 @@ class HealthCheckTool(BaseToolAdapter):
313
314
  async def _check_tools_health(self, detailed: bool) -> Dict[str, Any]:
314
315
  """Check MCP tools health."""
315
316
  check_result = {
316
- "status": "healthy",
317
+ "status": ServiceState.RUNNING,
317
318
  "checks": {},
318
319
  "warnings": [],
319
320
  "errors": [],
@@ -353,11 +354,11 @@ class HealthCheckTool(BaseToolAdapter):
353
354
  )
354
355
 
355
356
  if len(available_essential) == 0:
356
- check_result["status"] = "unhealthy"
357
+ check_result["status"] = HealthStatus.UNHEALTHY
357
358
  check_result["errors"].append("No essential tools available")
358
359
 
359
360
  except Exception as e:
360
- check_result["status"] = "error"
361
+ check_result["status"] = HealthStatus.UNHEALTHY
361
362
  check_result["errors"].append(f"Tools health check failed: {e}")
362
363
 
363
364
  return check_result
@@ -365,7 +366,7 @@ class HealthCheckTool(BaseToolAdapter):
365
366
  async def _check_config_health(self, detailed: bool) -> Dict[str, Any]:
366
367
  """Check configuration health."""
367
368
  check_result = {
368
- "status": "healthy",
369
+ "status": ServiceState.RUNNING,
369
370
  "checks": {},
370
371
  "warnings": [],
371
372
  "errors": [],
@@ -401,7 +402,7 @@ class HealthCheckTool(BaseToolAdapter):
401
402
  }
402
403
 
403
404
  except Exception as e:
404
- check_result["status"] = "error"
405
+ check_result["status"] = HealthStatus.UNHEALTHY
405
406
  check_result["errors"].append(f"Config health check failed: {e}")
406
407
 
407
408
  return check_result
@@ -413,13 +414,13 @@ class HealthCheckTool(BaseToolAdapter):
413
414
 
414
415
  statuses = [check.get("status", "unknown") for check in checks.values()]
415
416
 
416
- if "error" in statuses:
417
- return "error"
418
- if "unhealthy" in statuses:
417
+ # Check for unhealthy (handle both string and enum)
418
+ if HealthStatus.UNHEALTHY in statuses or "unhealthy" in statuses:
419
419
  return "unhealthy"
420
420
  if "warning" in statuses:
421
421
  return "warning"
422
- if all(status == "healthy" for status in statuses):
422
+ # Check for healthy (handle both string and enum)
423
+ if all(status in (HealthStatus.HEALTHY, "healthy") for status in statuses):
423
424
  return "healthy"
424
425
  return "unknown"
425
426
 
@@ -436,19 +437,20 @@ class HealthCheckTool(BaseToolAdapter):
436
437
  for check_name, check_result in checks.items():
437
438
  status = check_result.get("status", "unknown")
438
439
 
439
- if status == "healthy":
440
+ # Check for healthy (handle both string and enum)
441
+ if status in (HealthStatus.HEALTHY, "healthy"):
440
442
  summary["healthy"] += 1
441
- elif status in ["warning", "unhealthy"]:
443
+ elif status in ["warning", HealthStatus.UNHEALTHY, "unhealthy"]:
442
444
  summary["warnings"] += 1
443
445
  # Collect warning messages
444
446
  warnings = check_result.get("warnings", [])
445
447
  for warning in warnings:
446
448
  summary["issues"].append(f"{check_name}: {warning}")
447
- elif status == "error":
448
- summary["errors"] += 1
449
- # Collect error messages
450
- errors = check_result.get("errors", [])
451
- for error in errors:
452
- summary["issues"].append(f"{check_name}: {error}")
449
+ # Collect error messages if status is unhealthy
450
+ if status in (HealthStatus.UNHEALTHY, "unhealthy"):
451
+ summary["errors"] += 1
452
+ errors = check_result.get("errors", [])
453
+ for error in errors:
454
+ summary["issues"].append(f"{check_name}: {error}")
453
455
 
454
456
  return summary
@@ -13,6 +13,7 @@ DESIGN DECISIONS:
13
13
  - Provides high-level tools that abstract kuzu-memory complexity
14
14
  - Includes context enrichment for better memory retrieval
15
15
  - Supports tagging for organized knowledge management
16
+ - kuzu-memory>=1.1.5 is now a REQUIRED dependency (moved from optional in v4.8.6)
16
17
  """
17
18
 
18
19
  import json
@@ -111,7 +112,13 @@ class KuzuMemoryService(BaseToolAdapter):
111
112
  return False
112
113
 
113
114
  async def _install_package(self) -> bool:
114
- """Install kuzu-memory using pipx (preferred over pip)."""
115
+ """
116
+ Install kuzu-memory using pipx (preferred over pip).
117
+
118
+ NOTE: As of v4.8.6, kuzu-memory is a required dependency and should be
119
+ installed via pip along with claude-mpm. This method is kept for backward
120
+ compatibility and edge cases where the package may be missing.
121
+ """
115
122
  try:
116
123
  # Check if pipx is available
117
124
  import shutil
@@ -120,6 +127,9 @@ class KuzuMemoryService(BaseToolAdapter):
120
127
  self.log_warning(
121
128
  "pipx not found. Install it first: python -m pip install --user pipx"
122
129
  )
130
+ self.log_info(
131
+ "Alternatively, kuzu-memory should be installed via pip with claude-mpm dependencies"
132
+ )
123
133
  return False
124
134
 
125
135
  self.log_info("Installing kuzu-memory via pipx...")
@@ -143,23 +153,33 @@ class KuzuMemoryService(BaseToolAdapter):
143
153
  return False
144
154
 
145
155
  async def initialize(self) -> bool:
146
- """Initialize the kuzu-memory service."""
156
+ """
157
+ Initialize the kuzu-memory service.
158
+
159
+ NOTE: As of v4.8.6, kuzu-memory is a required dependency. This method
160
+ checks for installation and provides helpful messages if missing.
161
+ """
147
162
  try:
148
163
  # Check if package is installed
149
164
  self._is_installed = await self._check_installation()
150
165
 
151
166
  if not self._is_installed:
152
167
  self.log_warning(
153
- f"{self.package_name} not installed, attempting installation..."
168
+ f"{self.package_name} not found in PATH. "
169
+ f"Since v4.8.6, it's a required dependency."
154
170
  )
171
+ self.log_info("Attempting installation via pipx as fallback...")
155
172
  await self._install_package()
156
173
  self._is_installed = await self._check_installation()
157
174
 
158
175
  if not self._is_installed:
159
- self.log_error(f"Failed to install {self.package_name}")
176
+ self.log_error(
177
+ f"Failed to initialize {self.package_name}. "
178
+ f"Please install manually: pip install kuzu-memory>=1.1.5"
179
+ )
160
180
  return False
161
181
 
162
- self.log_info(f"{self.package_name} is available")
182
+ self.log_info(f"{self.package_name} is available and ready")
163
183
  self._initialized = True
164
184
  return True
165
185
 
@@ -550,7 +550,7 @@ class MCPServiceVerifier:
550
550
 
551
551
  try:
552
552
  # Build test command - add --help to test without side effects
553
- test_cmd = [command] + args[:2] if args else [command] # Include base args
553
+ test_cmd = [command, *args[:2]] if args else [command] # Include base args
554
554
  test_cmd.append("--help")
555
555
 
556
556
  result = subprocess.run(