claude-mpm 4.1.26__py3-none-any.whl → 5.0.9__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


This version of claude-mpm might be problematic. Click here for more details.

Files changed (792) hide show
  1. claude_mpm/BUILD_NUMBER +1 -1
  2. claude_mpm/VERSION +1 -1
  3. claude_mpm/__init__.py +20 -5
  4. claude_mpm/agents/BASE_AGENT_TEMPLATE.md +118 -0
  5. claude_mpm/agents/BASE_DOCUMENTATION.md +53 -0
  6. claude_mpm/agents/BASE_ENGINEER.md +658 -0
  7. claude_mpm/agents/BASE_OPS.md +219 -0
  8. claude_mpm/agents/BASE_PM.md +432 -158
  9. claude_mpm/agents/BASE_PROMPT_ENGINEER.md +787 -0
  10. claude_mpm/agents/BASE_QA.md +167 -0
  11. claude_mpm/agents/BASE_RESEARCH.md +53 -0
  12. claude_mpm/agents/OUTPUT_STYLE.md +254 -29
  13. claude_mpm/agents/PM_INSTRUCTIONS.md +969 -0
  14. claude_mpm/agents/PM_INSTRUCTIONS_TEACH.md +1322 -0
  15. claude_mpm/agents/WORKFLOW.md +355 -191
  16. claude_mpm/agents/__init__.py +6 -0
  17. claude_mpm/agents/agent_loader.py +41 -14
  18. claude_mpm/agents/agent_loader_integration.py +3 -2
  19. claude_mpm/agents/async_agent_loader.py +3 -3
  20. claude_mpm/agents/base_agent.json +6 -3
  21. claude_mpm/agents/base_agent_loader.py +21 -44
  22. claude_mpm/agents/frontmatter_validator.py +292 -252
  23. claude_mpm/agents/system_agent_config.py +3 -2
  24. claude_mpm/agents/templates/README.md +465 -0
  25. claude_mpm/agents/templates/circuit-breakers.md +1005 -0
  26. claude_mpm/agents/templates/context-management-examples.md +544 -0
  27. claude_mpm/agents/templates/git-file-tracking.md +584 -0
  28. claude_mpm/agents/templates/pm-examples.md +474 -0
  29. claude_mpm/agents/templates/pm-red-flags.md +310 -0
  30. claude_mpm/agents/templates/pr-workflow-examples.md +427 -0
  31. claude_mpm/agents/templates/research-gate-examples.md +669 -0
  32. claude_mpm/agents/templates/response-format.md +583 -0
  33. claude_mpm/agents/templates/structured-questions-examples.md +615 -0
  34. claude_mpm/agents/templates/ticket-completeness-examples.md +139 -0
  35. claude_mpm/agents/templates/ticketing-examples.md +277 -0
  36. claude_mpm/agents/templates/validation-templates.md +312 -0
  37. claude_mpm/cli/__init__.py +72 -376
  38. claude_mpm/cli/commands/__init__.py +4 -0
  39. claude_mpm/cli/commands/agent_manager.py +675 -20
  40. claude_mpm/cli/commands/agent_source.py +774 -0
  41. claude_mpm/cli/commands/agent_state_manager.py +344 -0
  42. claude_mpm/cli/commands/agents.py +1673 -178
  43. claude_mpm/cli/commands/agents_cleanup.py +210 -0
  44. claude_mpm/cli/commands/agents_detect.py +380 -0
  45. claude_mpm/cli/commands/agents_discover.py +338 -0
  46. claude_mpm/cli/commands/agents_recommend.py +309 -0
  47. claude_mpm/cli/commands/aggregate.py +11 -7
  48. claude_mpm/cli/commands/analyze.py +18 -13
  49. claude_mpm/cli/commands/analyze_code.py +8 -4
  50. claude_mpm/cli/commands/auto_configure.py +566 -0
  51. claude_mpm/cli/commands/cleanup.py +12 -12
  52. claude_mpm/cli/commands/config.py +54 -17
  53. claude_mpm/cli/commands/configure.py +1184 -1055
  54. claude_mpm/cli/commands/configure_agent_display.py +261 -0
  55. claude_mpm/cli/commands/configure_behavior_manager.py +204 -0
  56. claude_mpm/cli/commands/configure_hook_manager.py +225 -0
  57. claude_mpm/cli/commands/configure_models.py +18 -0
  58. claude_mpm/cli/commands/configure_navigation.py +184 -0
  59. claude_mpm/cli/commands/configure_paths.py +104 -0
  60. claude_mpm/cli/commands/configure_persistence.py +254 -0
  61. claude_mpm/cli/commands/configure_startup_manager.py +646 -0
  62. claude_mpm/cli/commands/configure_template_editor.py +497 -0
  63. claude_mpm/cli/commands/configure_validators.py +73 -0
  64. claude_mpm/cli/commands/dashboard.py +50 -52
  65. claude_mpm/cli/commands/debug.py +19 -19
  66. claude_mpm/cli/commands/doctor.py +51 -7
  67. claude_mpm/cli/commands/hook_errors.py +277 -0
  68. claude_mpm/cli/commands/info.py +3 -4
  69. claude_mpm/cli/commands/local_deploy.py +534 -0
  70. claude_mpm/cli/commands/mcp.py +17 -10
  71. claude_mpm/cli/commands/mcp_command_router.py +11 -0
  72. claude_mpm/cli/commands/mcp_config.py +154 -0
  73. claude_mpm/cli/commands/mcp_external_commands.py +249 -0
  74. claude_mpm/cli/commands/mcp_install_commands.py +101 -32
  75. claude_mpm/cli/commands/mcp_pipx_config.py +2 -2
  76. claude_mpm/cli/commands/mcp_setup_external.py +868 -0
  77. claude_mpm/cli/commands/memory.py +55 -21
  78. claude_mpm/cli/commands/monitor.py +160 -70
  79. claude_mpm/cli/commands/mpm_init/__init__.py +73 -0
  80. claude_mpm/cli/commands/mpm_init/core.py +573 -0
  81. claude_mpm/cli/commands/mpm_init/display.py +341 -0
  82. claude_mpm/cli/commands/mpm_init/git_activity.py +427 -0
  83. claude_mpm/cli/commands/mpm_init/modes.py +397 -0
  84. claude_mpm/cli/commands/mpm_init/prompts.py +442 -0
  85. claude_mpm/cli/commands/mpm_init_cli.py +396 -0
  86. claude_mpm/cli/commands/mpm_init_handler.py +114 -4
  87. claude_mpm/cli/commands/postmortem.py +401 -0
  88. claude_mpm/cli/commands/run.py +252 -167
  89. claude_mpm/cli/commands/search.py +458 -0
  90. claude_mpm/cli/commands/skill_source.py +694 -0
  91. claude_mpm/cli/commands/skills.py +1225 -0
  92. claude_mpm/cli/commands/uninstall.py +176 -0
  93. claude_mpm/cli/commands/upgrade.py +152 -0
  94. claude_mpm/cli/commands/verify.py +119 -0
  95. claude_mpm/cli/executor.py +279 -0
  96. claude_mpm/cli/helpers.py +105 -0
  97. claude_mpm/cli/interactive/__init__.py +21 -0
  98. claude_mpm/cli/interactive/agent_wizard.py +1872 -0
  99. claude_mpm/cli/interactive/skills_wizard.py +491 -0
  100. claude_mpm/cli/parser.py +79 -2
  101. claude_mpm/cli/parsers/__init__.py +7 -1
  102. claude_mpm/cli/parsers/agent_manager_parser.py +161 -1
  103. claude_mpm/cli/parsers/agent_source_parser.py +171 -0
  104. claude_mpm/cli/parsers/agents_parser.py +369 -1
  105. claude_mpm/cli/parsers/auto_configure_parser.py +245 -0
  106. claude_mpm/cli/parsers/base_parser.py +196 -3
  107. claude_mpm/cli/parsers/config_parser.py +96 -43
  108. claude_mpm/cli/parsers/configure_parser.py +11 -15
  109. claude_mpm/cli/parsers/local_deploy_parser.py +227 -0
  110. claude_mpm/cli/parsers/mcp_parser.py +15 -0
  111. claude_mpm/cli/parsers/monitor_parser.py +12 -2
  112. claude_mpm/cli/parsers/mpm_init_parser.py +179 -9
  113. claude_mpm/cli/parsers/run_parser.py +5 -0
  114. claude_mpm/cli/parsers/search_parser.py +245 -0
  115. claude_mpm/cli/parsers/skill_source_parser.py +169 -0
  116. claude_mpm/cli/parsers/skills_parser.py +282 -0
  117. claude_mpm/cli/parsers/source_parser.py +138 -0
  118. claude_mpm/cli/shared/argument_patterns.py +20 -13
  119. claude_mpm/cli/shared/base_command.py +2 -2
  120. claude_mpm/cli/shared/output_formatters.py +28 -19
  121. claude_mpm/cli/startup.py +994 -0
  122. claude_mpm/cli/startup_display.py +480 -0
  123. claude_mpm/cli/startup_logging.py +179 -13
  124. claude_mpm/cli/utils.py +54 -3
  125. claude_mpm/cli_module/commands.py +1 -1
  126. claude_mpm/commands/mpm-agents-auto-configure.md +278 -0
  127. claude_mpm/commands/mpm-agents-detect.md +177 -0
  128. claude_mpm/commands/mpm-agents-list.md +131 -0
  129. claude_mpm/commands/mpm-agents-recommend.md +223 -0
  130. claude_mpm/commands/mpm-config-view.md +150 -0
  131. claude_mpm/commands/mpm-doctor.md +9 -0
  132. claude_mpm/commands/mpm-help.md +297 -5
  133. claude_mpm/commands/mpm-init.md +401 -17
  134. claude_mpm/commands/mpm-monitor.md +418 -0
  135. claude_mpm/commands/mpm-postmortem.md +123 -0
  136. claude_mpm/commands/mpm-session-resume.md +381 -0
  137. claude_mpm/commands/mpm-status.md +79 -8
  138. claude_mpm/commands/mpm-ticket-organize.md +304 -0
  139. claude_mpm/commands/mpm-ticket-view.md +552 -0
  140. claude_mpm/commands/mpm-version.md +122 -0
  141. claude_mpm/commands/mpm.md +12 -0
  142. claude_mpm/config/agent_config.py +4 -4
  143. claude_mpm/config/agent_presets.py +488 -0
  144. claude_mpm/config/agent_sources.py +325 -0
  145. claude_mpm/config/experimental_features.py +7 -7
  146. claude_mpm/config/model_config.py +428 -0
  147. claude_mpm/config/paths.py +3 -2
  148. claude_mpm/config/skill_presets.py +392 -0
  149. claude_mpm/config/skill_sources.py +590 -0
  150. claude_mpm/config/socketio_config.py +3 -3
  151. claude_mpm/constants.py +28 -1
  152. claude_mpm/core/__init__.py +53 -17
  153. claude_mpm/core/agent_name_normalizer.py +3 -2
  154. claude_mpm/core/agent_registry.py +2 -2
  155. claude_mpm/core/agent_session_manager.py +10 -10
  156. claude_mpm/core/api_validator.py +330 -0
  157. claude_mpm/core/base_service.py +33 -23
  158. claude_mpm/core/cache.py +9 -9
  159. claude_mpm/core/claude_runner.py +24 -42
  160. claude_mpm/core/config.py +101 -8
  161. claude_mpm/core/config_aliases.py +7 -6
  162. claude_mpm/core/constants.py +66 -1
  163. claude_mpm/core/container.py +11 -5
  164. claude_mpm/core/enums.py +452 -0
  165. claude_mpm/core/error_handler.py +623 -0
  166. claude_mpm/core/factories.py +1 -1
  167. claude_mpm/core/file_utils.py +764 -0
  168. claude_mpm/core/framework/__init__.py +25 -0
  169. claude_mpm/core/framework/formatters/__init__.py +11 -0
  170. claude_mpm/core/framework/formatters/capability_generator.py +367 -0
  171. claude_mpm/core/framework/formatters/content_formatter.py +288 -0
  172. claude_mpm/core/framework/formatters/context_generator.py +185 -0
  173. claude_mpm/core/framework/loaders/__init__.py +13 -0
  174. claude_mpm/core/framework/loaders/agent_loader.py +210 -0
  175. claude_mpm/core/framework/loaders/file_loader.py +176 -0
  176. claude_mpm/core/framework/loaders/instruction_loader.py +181 -0
  177. claude_mpm/core/framework/loaders/packaged_loader.py +232 -0
  178. claude_mpm/core/framework/processors/__init__.py +11 -0
  179. claude_mpm/core/framework/processors/memory_processor.py +230 -0
  180. claude_mpm/core/framework/processors/metadata_processor.py +146 -0
  181. claude_mpm/core/framework/processors/template_processor.py +244 -0
  182. claude_mpm/core/framework_loader.py +321 -1631
  183. claude_mpm/core/hook_error_memory.py +381 -0
  184. claude_mpm/core/hook_manager.py +49 -8
  185. claude_mpm/core/injectable_service.py +11 -8
  186. claude_mpm/core/instruction_reinforcement_hook.py +4 -3
  187. claude_mpm/core/interactive_session.py +146 -18
  188. claude_mpm/core/interfaces.py +56 -1
  189. claude_mpm/core/lazy.py +3 -3
  190. claude_mpm/core/log_manager.py +92 -23
  191. claude_mpm/core/logger.py +22 -15
  192. claude_mpm/core/logging_config.py +6 -2
  193. claude_mpm/core/logging_utils.py +520 -0
  194. claude_mpm/core/oneshot_session.py +122 -15
  195. claude_mpm/core/optimized_agent_loader.py +9 -9
  196. claude_mpm/core/optimized_startup.py +1 -1
  197. claude_mpm/core/output_style_manager.py +12 -192
  198. claude_mpm/core/pm_hook_interceptor.py +18 -12
  199. claude_mpm/core/protocols/__init__.py +23 -0
  200. claude_mpm/core/protocols/runner_protocol.py +103 -0
  201. claude_mpm/core/protocols/session_protocol.py +131 -0
  202. claude_mpm/core/service_registry.py +7 -3
  203. claude_mpm/core/session_manager.py +14 -12
  204. claude_mpm/core/shared/config_loader.py +1 -1
  205. claude_mpm/core/shared/singleton_manager.py +11 -4
  206. claude_mpm/core/socketio_pool.py +15 -15
  207. claude_mpm/core/system_context.py +38 -0
  208. claude_mpm/core/tool_access_control.py +3 -2
  209. claude_mpm/core/types.py +4 -11
  210. claude_mpm/core/typing_utils.py +7 -6
  211. claude_mpm/core/unified_agent_registry.py +115 -11
  212. claude_mpm/core/unified_config.py +6 -6
  213. claude_mpm/core/unified_paths.py +23 -20
  214. claude_mpm/dashboard/analysis_runner.py +4 -4
  215. claude_mpm/dashboard/api/simple_directory.py +261 -0
  216. claude_mpm/dashboard/static/css/activity.css +69 -69
  217. claude_mpm/dashboard/static/css/connection-status.css +10 -10
  218. claude_mpm/dashboard/static/css/dashboard.css +600 -18
  219. claude_mpm/dashboard/static/js/components/activity-tree.js +181 -195
  220. claude_mpm/dashboard/static/js/components/agent-hierarchy.js +105 -102
  221. claude_mpm/dashboard/static/js/components/agent-inference.js +34 -31
  222. claude_mpm/dashboard/static/js/components/build-tracker.js +67 -59
  223. claude_mpm/dashboard/static/js/components/code-simple.js +857 -0
  224. claude_mpm/dashboard/static/js/components/connection-debug.js +101 -101
  225. claude_mpm/dashboard/static/js/components/diff-viewer.js +891 -0
  226. claude_mpm/dashboard/static/js/components/event-processor.js +3 -0
  227. claude_mpm/dashboard/static/js/components/event-viewer.js +50 -13
  228. claude_mpm/dashboard/static/js/components/export-manager.js +3 -0
  229. claude_mpm/dashboard/static/js/components/file-change-tracker.js +443 -0
  230. claude_mpm/dashboard/static/js/components/file-change-viewer.js +690 -0
  231. claude_mpm/dashboard/static/js/components/file-tool-tracker.js +36 -16
  232. claude_mpm/dashboard/static/js/components/file-viewer.js +580 -0
  233. claude_mpm/dashboard/static/js/components/module-viewer.js +49 -23
  234. claude_mpm/dashboard/static/js/components/session-manager.js +19 -19
  235. claude_mpm/dashboard/static/js/components/socket-manager.js +5 -1
  236. claude_mpm/dashboard/static/js/components/ui-state-manager.js +356 -41
  237. claude_mpm/dashboard/static/js/components/unified-data-viewer.js +520 -88
  238. claude_mpm/dashboard/static/js/components/working-directory.js +46 -11
  239. claude_mpm/dashboard/static/js/connection-manager.js +76 -76
  240. claude_mpm/dashboard/static/js/dashboard.js +309 -178
  241. claude_mpm/dashboard/static/js/extension-error-handler.js +22 -22
  242. claude_mpm/dashboard/static/js/socket-client.js +183 -139
  243. claude_mpm/dashboard/static/js/tab-isolation-fix.js +185 -0
  244. claude_mpm/dashboard/static/socket.io.min.js +7 -0
  245. claude_mpm/dashboard/static/socket.io.v4.8.1.backup.js +7 -0
  246. claude_mpm/dashboard/templates/code_simple.html +153 -0
  247. claude_mpm/dashboard/templates/index.html +125 -122
  248. claude_mpm/experimental/cli_enhancements.py +5 -7
  249. claude_mpm/generators/agent_profile_generator.py +5 -3
  250. claude_mpm/hooks/__init__.py +37 -1
  251. claude_mpm/hooks/base_hook.py +5 -4
  252. claude_mpm/hooks/claude_hooks/__pycache__/__init__.cpython-313.pyc +0 -0
  253. claude_mpm/hooks/claude_hooks/__pycache__/event_handlers.cpython-313.pyc +0 -0
  254. claude_mpm/hooks/claude_hooks/__pycache__/hook_handler.cpython-313.pyc +0 -0
  255. claude_mpm/hooks/claude_hooks/__pycache__/memory_integration.cpython-313.pyc +0 -0
  256. claude_mpm/hooks/claude_hooks/__pycache__/response_tracking.cpython-313.pyc +0 -0
  257. claude_mpm/hooks/claude_hooks/__pycache__/tool_analysis.cpython-313.pyc +0 -0
  258. claude_mpm/hooks/claude_hooks/connection_pool.py +4 -4
  259. claude_mpm/hooks/claude_hooks/event_handlers.py +24 -19
  260. claude_mpm/hooks/claude_hooks/hook_handler.py +29 -22
  261. claude_mpm/hooks/claude_hooks/installer.py +67 -22
  262. claude_mpm/hooks/claude_hooks/memory_integration.py +3 -3
  263. claude_mpm/hooks/claude_hooks/response_tracking.py +57 -17
  264. claude_mpm/hooks/claude_hooks/services/__pycache__/__init__.cpython-313.pyc +0 -0
  265. claude_mpm/hooks/claude_hooks/services/__pycache__/connection_manager_http.cpython-313.pyc +0 -0
  266. claude_mpm/hooks/claude_hooks/services/__pycache__/duplicate_detector.cpython-313.pyc +0 -0
  267. claude_mpm/hooks/claude_hooks/services/__pycache__/state_manager.cpython-313.pyc +0 -0
  268. claude_mpm/hooks/claude_hooks/services/__pycache__/subagent_processor.cpython-313.pyc +0 -0
  269. claude_mpm/hooks/claude_hooks/services/connection_manager.py +62 -64
  270. claude_mpm/hooks/claude_hooks/services/connection_manager_http.py +140 -76
  271. claude_mpm/hooks/claude_hooks/services/state_manager.py +11 -9
  272. claude_mpm/hooks/claude_hooks/services/subagent_processor.py +3 -3
  273. claude_mpm/hooks/failure_learning/__init__.py +54 -0
  274. claude_mpm/hooks/failure_learning/failure_detection_hook.py +230 -0
  275. claude_mpm/hooks/failure_learning/fix_detection_hook.py +212 -0
  276. claude_mpm/hooks/failure_learning/learning_extraction_hook.py +281 -0
  277. claude_mpm/hooks/instruction_reinforcement.py +301 -0
  278. claude_mpm/hooks/kuzu_enrichment_hook.py +263 -0
  279. claude_mpm/hooks/kuzu_memory_hook.py +386 -0
  280. claude_mpm/hooks/kuzu_response_hook.py +179 -0
  281. claude_mpm/hooks/memory_integration_hook.py +1 -1
  282. claude_mpm/hooks/session_resume_hook.py +121 -0
  283. claude_mpm/hooks/templates/pre_tool_use_simple.py +78 -0
  284. claude_mpm/hooks/templates/pre_tool_use_template.py +323 -0
  285. claude_mpm/hooks/tool_call_interceptor.py +8 -5
  286. claude_mpm/hooks/validation_hooks.py +3 -3
  287. claude_mpm/init.py +23 -4
  288. claude_mpm/models/agent_session.py +8 -6
  289. claude_mpm/models/git_repository.py +198 -0
  290. claude_mpm/models/resume_log.py +340 -0
  291. claude_mpm/scripts/claude-hook-handler.sh +35 -9
  292. claude_mpm/scripts/launch_monitor.py +85 -0
  293. claude_mpm/scripts/mcp_server.py +3 -5
  294. claude_mpm/scripts/mpm_doctor.py +3 -2
  295. claude_mpm/scripts/socketio_daemon.py +159 -512
  296. claude_mpm/scripts/start_activity_logging.py +3 -1
  297. claude_mpm/services/__init__.py +144 -160
  298. claude_mpm/services/agents/__init__.py +18 -5
  299. claude_mpm/services/agents/agent_builder.py +56 -18
  300. claude_mpm/services/agents/agent_preset_service.py +238 -0
  301. claude_mpm/services/agents/agent_selection_service.py +484 -0
  302. claude_mpm/services/agents/auto_config_manager.py +796 -0
  303. claude_mpm/services/agents/auto_deploy_index_parser.py +569 -0
  304. claude_mpm/services/agents/cache_git_manager.py +621 -0
  305. claude_mpm/services/agents/deployment/agent_configuration_manager.py +1 -1
  306. claude_mpm/services/agents/deployment/agent_deployment.py +164 -17
  307. claude_mpm/services/agents/deployment/agent_discovery_service.py +191 -41
  308. claude_mpm/services/agents/deployment/agent_filesystem_manager.py +5 -5
  309. claude_mpm/services/agents/deployment/agent_format_converter.py +56 -12
  310. claude_mpm/services/agents/deployment/agent_lifecycle_manager.py +5 -7
  311. claude_mpm/services/agents/deployment/agent_metrics_collector.py +3 -3
  312. claude_mpm/services/agents/deployment/agent_operation_service.py +2 -2
  313. claude_mpm/services/agents/deployment/agent_record_service.py +4 -4
  314. claude_mpm/services/agents/deployment/agent_restore_handler.py +1 -4
  315. claude_mpm/services/agents/deployment/agent_state_service.py +2 -2
  316. claude_mpm/services/agents/deployment/agent_template_builder.py +939 -50
  317. claude_mpm/services/agents/deployment/agent_validator.py +31 -7
  318. claude_mpm/services/agents/deployment/agent_version_manager.py +8 -5
  319. claude_mpm/services/agents/deployment/agent_versioning.py +1 -1
  320. claude_mpm/services/agents/deployment/agents_directory_resolver.py +101 -15
  321. claude_mpm/services/agents/deployment/async_agent_deployment.py +3 -2
  322. claude_mpm/services/agents/deployment/deployment_config_loader.py +131 -7
  323. claude_mpm/services/agents/deployment/deployment_type_detector.py +10 -14
  324. claude_mpm/services/agents/deployment/deployment_wrapper.py +58 -0
  325. claude_mpm/services/agents/deployment/facade/deployment_facade.py +3 -3
  326. claude_mpm/services/agents/deployment/interface_adapter.py +3 -2
  327. claude_mpm/services/agents/deployment/local_template_deployment.py +360 -0
  328. claude_mpm/services/agents/deployment/multi_source_deployment_service.py +249 -53
  329. claude_mpm/services/agents/deployment/pipeline/pipeline_executor.py +2 -2
  330. claude_mpm/services/agents/deployment/pipeline/steps/agent_processing_step.py +8 -7
  331. claude_mpm/services/agents/deployment/pipeline/steps/base_step.py +7 -16
  332. claude_mpm/services/agents/deployment/pipeline/steps/configuration_step.py +4 -3
  333. claude_mpm/services/agents/deployment/pipeline/steps/target_directory_step.py +7 -5
  334. claude_mpm/services/agents/deployment/pipeline/steps/validation_step.py +6 -5
  335. claude_mpm/services/agents/deployment/refactored_agent_deployment_service.py +10 -10
  336. claude_mpm/services/agents/deployment/remote_agent_discovery_service.py +363 -0
  337. claude_mpm/services/agents/deployment/single_agent_deployer.py +2 -2
  338. claude_mpm/services/agents/deployment/system_instructions_deployer.py +168 -43
  339. claude_mpm/services/agents/deployment/validation/__init__.py +3 -1
  340. claude_mpm/services/agents/deployment/validation/deployment_validator.py +2 -2
  341. claude_mpm/services/agents/deployment/validation/template_validator.py +64 -44
  342. claude_mpm/services/agents/deployment/validation/validation_result.py +1 -9
  343. claude_mpm/services/agents/git_source_manager.py +629 -0
  344. claude_mpm/services/agents/loading/agent_profile_loader.py +10 -9
  345. claude_mpm/services/agents/loading/base_agent_manager.py +16 -6
  346. claude_mpm/services/agents/loading/framework_agent_loader.py +11 -14
  347. claude_mpm/services/agents/local_template_manager.py +784 -0
  348. claude_mpm/services/agents/management/agent_capabilities_generator.py +3 -2
  349. claude_mpm/services/agents/management/agent_management_service.py +5 -5
  350. claude_mpm/services/agents/memory/agent_memory_manager.py +32 -29
  351. claude_mpm/services/agents/memory/content_manager.py +17 -9
  352. claude_mpm/services/agents/memory/memory_categorization_service.py +4 -2
  353. claude_mpm/services/agents/memory/memory_file_service.py +32 -6
  354. claude_mpm/services/agents/memory/memory_format_service.py +6 -4
  355. claude_mpm/services/agents/memory/memory_limits_service.py +4 -2
  356. claude_mpm/services/agents/memory/template_generator.py +3 -3
  357. claude_mpm/services/agents/observers.py +547 -0
  358. claude_mpm/services/agents/recommender.py +615 -0
  359. claude_mpm/services/agents/registry/deployed_agent_discovery.py +3 -3
  360. claude_mpm/services/agents/registry/modification_tracker.py +30 -19
  361. claude_mpm/services/agents/single_tier_deployment_service.py +696 -0
  362. claude_mpm/services/agents/sources/__init__.py +13 -0
  363. claude_mpm/services/agents/sources/agent_sync_state.py +516 -0
  364. claude_mpm/services/agents/sources/git_source_sync_service.py +1087 -0
  365. claude_mpm/services/agents/startup_sync.py +239 -0
  366. claude_mpm/services/agents/toolchain_detector.py +474 -0
  367. claude_mpm/services/analysis/__init__.py +25 -0
  368. claude_mpm/services/analysis/postmortem_reporter.py +474 -0
  369. claude_mpm/services/analysis/postmortem_service.py +765 -0
  370. claude_mpm/services/async_session_logger.py +141 -98
  371. claude_mpm/services/claude_session_logger.py +82 -74
  372. claude_mpm/services/cli/agent_cleanup_service.py +5 -0
  373. claude_mpm/services/cli/agent_listing_service.py +5 -5
  374. claude_mpm/services/cli/agent_validation_service.py +3 -1
  375. claude_mpm/services/cli/memory_crud_service.py +12 -7
  376. claude_mpm/services/cli/memory_output_formatter.py +2 -2
  377. claude_mpm/services/cli/resume_service.py +617 -0
  378. claude_mpm/services/cli/session_manager.py +104 -13
  379. claude_mpm/services/cli/session_pause_manager.py +504 -0
  380. claude_mpm/services/cli/session_resume_helper.py +372 -0
  381. claude_mpm/services/cli/startup_checker.py +13 -10
  382. claude_mpm/services/cli/unified_dashboard_manager.py +439 -0
  383. claude_mpm/services/command_deployment_service.py +209 -13
  384. claude_mpm/services/command_handler_service.py +11 -5
  385. claude_mpm/services/core/__init__.py +33 -1
  386. claude_mpm/services/core/base.py +31 -11
  387. claude_mpm/services/core/interfaces/__init__.py +88 -3
  388. claude_mpm/services/core/interfaces/agent.py +184 -0
  389. claude_mpm/services/core/interfaces/health.py +169 -0
  390. claude_mpm/services/core/interfaces/model.py +281 -0
  391. claude_mpm/services/core/interfaces/process.py +372 -0
  392. claude_mpm/services/core/interfaces/project.py +121 -0
  393. claude_mpm/services/core/interfaces/restart.py +307 -0
  394. claude_mpm/services/core/interfaces/stability.py +260 -0
  395. claude_mpm/services/core/interfaces.py +56 -1
  396. claude_mpm/services/core/memory_manager.py +92 -47
  397. claude_mpm/services/core/models/__init__.py +70 -0
  398. claude_mpm/services/core/models/agent_config.py +384 -0
  399. claude_mpm/services/core/models/health.py +162 -0
  400. claude_mpm/services/core/models/process.py +239 -0
  401. claude_mpm/services/core/models/restart.py +302 -0
  402. claude_mpm/services/core/models/stability.py +264 -0
  403. claude_mpm/services/core/models/toolchain.py +306 -0
  404. claude_mpm/services/core/path_resolver.py +36 -14
  405. claude_mpm/services/diagnostics/__init__.py +2 -2
  406. claude_mpm/services/diagnostics/checks/__init__.py +8 -2
  407. claude_mpm/services/diagnostics/checks/agent_check.py +30 -34
  408. claude_mpm/services/diagnostics/checks/agent_sources_check.py +577 -0
  409. claude_mpm/services/diagnostics/checks/claude_code_check.py +270 -0
  410. claude_mpm/services/diagnostics/checks/common_issues_check.py +28 -27
  411. claude_mpm/services/diagnostics/checks/configuration_check.py +26 -25
  412. claude_mpm/services/diagnostics/checks/filesystem_check.py +18 -17
  413. claude_mpm/services/diagnostics/checks/installation_check.py +165 -60
  414. claude_mpm/services/diagnostics/checks/instructions_check.py +21 -21
  415. claude_mpm/services/diagnostics/checks/mcp_check.py +57 -44
  416. claude_mpm/services/diagnostics/checks/mcp_services_check.py +1058 -0
  417. claude_mpm/services/diagnostics/checks/monitor_check.py +24 -24
  418. claude_mpm/services/diagnostics/checks/skill_sources_check.py +587 -0
  419. claude_mpm/services/diagnostics/checks/startup_log_check.py +14 -11
  420. claude_mpm/services/diagnostics/diagnostic_runner.py +31 -13
  421. claude_mpm/services/diagnostics/doctor_reporter.py +305 -47
  422. claude_mpm/services/diagnostics/models.py +37 -21
  423. claude_mpm/services/event_aggregator.py +5 -3
  424. claude_mpm/services/event_bus/direct_relay.py +11 -7
  425. claude_mpm/services/event_bus/event_bus.py +51 -9
  426. claude_mpm/services/event_bus/relay.py +33 -14
  427. claude_mpm/services/events/consumers/dead_letter.py +7 -5
  428. claude_mpm/services/events/consumers/logging.py +1 -2
  429. claude_mpm/services/events/core.py +5 -6
  430. claude_mpm/services/events/producers/hook.py +6 -6
  431. claude_mpm/services/events/producers/system.py +8 -8
  432. claude_mpm/services/exceptions.py +5 -5
  433. claude_mpm/services/framework_claude_md_generator/__init__.py +1 -1
  434. claude_mpm/services/framework_claude_md_generator/content_assembler.py +5 -5
  435. claude_mpm/services/framework_claude_md_generator/content_validator.py +2 -2
  436. claude_mpm/services/framework_claude_md_generator/deployment_manager.py +3 -3
  437. claude_mpm/services/framework_claude_md_generator/section_generators/__init__.py +2 -2
  438. claude_mpm/services/framework_claude_md_generator/version_manager.py +1 -1
  439. claude_mpm/services/git/__init__.py +21 -0
  440. claude_mpm/services/git/git_operations_service.py +494 -0
  441. claude_mpm/services/github/__init__.py +21 -0
  442. claude_mpm/services/github/github_cli_service.py +397 -0
  443. claude_mpm/services/hook_installer_service.py +506 -0
  444. claude_mpm/services/hook_service.py +5 -6
  445. claude_mpm/services/infrastructure/context_preservation.py +13 -11
  446. claude_mpm/services/infrastructure/daemon_manager.py +9 -9
  447. claude_mpm/services/infrastructure/logging.py +2 -2
  448. claude_mpm/services/infrastructure/monitoring/__init__.py +2 -6
  449. claude_mpm/services/infrastructure/monitoring/aggregator.py +13 -18
  450. claude_mpm/services/infrastructure/monitoring/base.py +5 -13
  451. claude_mpm/services/infrastructure/monitoring/network.py +7 -6
  452. claude_mpm/services/infrastructure/monitoring/process.py +13 -12
  453. claude_mpm/services/infrastructure/monitoring/resources.py +8 -7
  454. claude_mpm/services/infrastructure/monitoring/service.py +16 -15
  455. claude_mpm/services/infrastructure/resume_log_generator.py +439 -0
  456. claude_mpm/services/instructions/__init__.py +9 -0
  457. claude_mpm/services/instructions/instruction_cache_service.py +374 -0
  458. claude_mpm/services/local_ops/__init__.py +155 -0
  459. claude_mpm/services/local_ops/crash_detector.py +257 -0
  460. claude_mpm/services/local_ops/health_checks/__init__.py +26 -0
  461. claude_mpm/services/local_ops/health_checks/http_check.py +224 -0
  462. claude_mpm/services/local_ops/health_checks/process_check.py +236 -0
  463. claude_mpm/services/local_ops/health_checks/resource_check.py +255 -0
  464. claude_mpm/services/local_ops/health_manager.py +427 -0
  465. claude_mpm/services/local_ops/log_monitor.py +396 -0
  466. claude_mpm/services/local_ops/memory_leak_detector.py +294 -0
  467. claude_mpm/services/local_ops/process_manager.py +595 -0
  468. claude_mpm/services/local_ops/resource_monitor.py +331 -0
  469. claude_mpm/services/local_ops/restart_manager.py +401 -0
  470. claude_mpm/services/local_ops/restart_policy.py +387 -0
  471. claude_mpm/services/local_ops/state_manager.py +372 -0
  472. claude_mpm/services/local_ops/unified_manager.py +600 -0
  473. claude_mpm/services/mcp_config_manager.py +1542 -0
  474. claude_mpm/services/mcp_gateway/__init__.py +97 -93
  475. claude_mpm/services/mcp_gateway/auto_configure.py +43 -38
  476. claude_mpm/services/mcp_gateway/config/config_loader.py +3 -3
  477. claude_mpm/services/mcp_gateway/config/configuration.py +24 -5
  478. claude_mpm/services/mcp_gateway/core/__init__.py +1 -2
  479. claude_mpm/services/mcp_gateway/core/base.py +20 -33
  480. claude_mpm/services/mcp_gateway/core/process_pool.py +591 -31
  481. claude_mpm/services/mcp_gateway/core/singleton_manager.py +2 -2
  482. claude_mpm/services/mcp_gateway/core/startup_verification.py +3 -3
  483. claude_mpm/services/mcp_gateway/main.py +90 -15
  484. claude_mpm/services/mcp_gateway/registry/service_registry.py +4 -2
  485. claude_mpm/services/mcp_gateway/registry/tool_registry.py +12 -9
  486. claude_mpm/services/mcp_gateway/server/mcp_gateway.py +5 -10
  487. claude_mpm/services/mcp_gateway/server/stdio_server.py +9 -17
  488. claude_mpm/services/mcp_gateway/tools/__init__.py +14 -2
  489. claude_mpm/services/mcp_gateway/tools/base_adapter.py +15 -15
  490. claude_mpm/services/mcp_gateway/tools/document_summarizer.py +10 -9
  491. claude_mpm/services/mcp_gateway/tools/external_mcp_services.py +654 -0
  492. claude_mpm/services/mcp_gateway/tools/health_check_tool.py +36 -34
  493. claude_mpm/services/mcp_gateway/tools/hello_world.py +8 -8
  494. claude_mpm/services/mcp_gateway/tools/kuzu_memory_service.py +555 -0
  495. claude_mpm/services/mcp_gateway/utils/__init__.py +14 -0
  496. claude_mpm/services/mcp_gateway/utils/package_version_checker.py +160 -0
  497. claude_mpm/services/mcp_gateway/utils/update_preferences.py +170 -0
  498. claude_mpm/services/mcp_service_verifier.py +732 -0
  499. claude_mpm/services/memory/builder.py +9 -8
  500. claude_mpm/services/memory/cache/shared_prompt_cache.py +2 -1
  501. claude_mpm/services/memory/cache/simple_cache.py +2 -2
  502. claude_mpm/services/memory/failure_tracker.py +578 -0
  503. claude_mpm/services/memory/indexed_memory.py +8 -8
  504. claude_mpm/services/memory/optimizer.py +8 -9
  505. claude_mpm/services/memory/router.py +3 -3
  506. claude_mpm/services/memory_hook_service.py +165 -4
  507. claude_mpm/services/model/__init__.py +147 -0
  508. claude_mpm/services/model/base_provider.py +365 -0
  509. claude_mpm/services/model/claude_provider.py +412 -0
  510. claude_mpm/services/model/model_router.py +452 -0
  511. claude_mpm/services/model/ollama_provider.py +415 -0
  512. claude_mpm/services/monitor/__init__.py +20 -0
  513. claude_mpm/services/monitor/daemon.py +691 -0
  514. claude_mpm/services/monitor/daemon_manager.py +1040 -0
  515. claude_mpm/services/monitor/event_emitter.py +350 -0
  516. claude_mpm/services/monitor/handlers/__init__.py +21 -0
  517. claude_mpm/services/monitor/handlers/code_analysis.py +332 -0
  518. claude_mpm/services/monitor/handlers/dashboard.py +299 -0
  519. claude_mpm/services/monitor/handlers/file.py +264 -0
  520. claude_mpm/services/monitor/handlers/hooks.py +512 -0
  521. claude_mpm/services/monitor/management/__init__.py +18 -0
  522. claude_mpm/services/monitor/management/health.py +124 -0
  523. claude_mpm/services/monitor/management/lifecycle.py +724 -0
  524. claude_mpm/services/monitor/server.py +817 -0
  525. claude_mpm/services/monitor_build_service.py +2 -2
  526. claude_mpm/services/native_agent_converter.py +356 -0
  527. claude_mpm/services/orphan_detection.py +786 -0
  528. claude_mpm/services/port_manager.py +3 -3
  529. claude_mpm/services/pr/__init__.py +14 -0
  530. claude_mpm/services/pr/pr_template_service.py +329 -0
  531. claude_mpm/services/project/__init__.py +23 -0
  532. claude_mpm/services/project/analyzer.py +3 -3
  533. claude_mpm/services/project/architecture_analyzer.py +5 -5
  534. claude_mpm/services/project/archive_manager.py +1045 -0
  535. claude_mpm/services/project/dependency_analyzer.py +4 -4
  536. claude_mpm/services/project/detection_strategies.py +719 -0
  537. claude_mpm/services/project/documentation_manager.py +554 -0
  538. claude_mpm/services/project/enhanced_analyzer.py +572 -0
  539. claude_mpm/services/project/metrics_collector.py +4 -4
  540. claude_mpm/services/project/project_organizer.py +1005 -0
  541. claude_mpm/services/project/registry.py +13 -7
  542. claude_mpm/services/project/toolchain_analyzer.py +583 -0
  543. claude_mpm/services/project_port_allocator.py +596 -0
  544. claude_mpm/services/response_tracker.py +21 -10
  545. claude_mpm/services/runner_configuration_service.py +17 -3
  546. claude_mpm/services/self_upgrade_service.py +500 -0
  547. claude_mpm/services/session_management_service.py +23 -9
  548. claude_mpm/services/session_manager.py +380 -0
  549. claude_mpm/services/shared/__init__.py +2 -1
  550. claude_mpm/services/shared/async_service_base.py +16 -27
  551. claude_mpm/services/shared/config_service_base.py +17 -14
  552. claude_mpm/services/shared/lifecycle_service_base.py +1 -14
  553. claude_mpm/services/shared/service_factory.py +8 -5
  554. claude_mpm/services/skills/__init__.py +18 -0
  555. claude_mpm/services/skills/git_skill_source_manager.py +1169 -0
  556. claude_mpm/services/skills/skill_discovery_service.py +568 -0
  557. claude_mpm/services/skills_config.py +547 -0
  558. claude_mpm/services/skills_deployer.py +955 -0
  559. claude_mpm/services/socketio/client_proxy.py +60 -5
  560. claude_mpm/services/socketio/dashboard_server.py +361 -0
  561. claude_mpm/services/socketio/event_normalizer.py +10 -6
  562. claude_mpm/services/socketio/handlers/__init__.py +5 -2
  563. claude_mpm/services/socketio/handlers/base.py +2 -2
  564. claude_mpm/services/socketio/handlers/code_analysis.py +90 -27
  565. claude_mpm/services/socketio/handlers/connection.py +22 -41
  566. claude_mpm/services/socketio/handlers/connection_handler.py +13 -10
  567. claude_mpm/services/socketio/handlers/file.py +46 -10
  568. claude_mpm/services/socketio/handlers/git.py +9 -9
  569. claude_mpm/services/socketio/handlers/hook.py +29 -17
  570. claude_mpm/services/socketio/handlers/registry.py +4 -2
  571. claude_mpm/services/socketio/monitor_client.py +364 -0
  572. claude_mpm/services/socketio/server/broadcaster.py +9 -7
  573. claude_mpm/services/socketio/server/connection_manager.py +2 -2
  574. claude_mpm/services/socketio/server/core.py +142 -8
  575. claude_mpm/services/socketio/server/eventbus_integration.py +20 -14
  576. claude_mpm/services/socketio/server/main.py +24 -24
  577. claude_mpm/services/socketio_client_manager.py +4 -4
  578. claude_mpm/services/subprocess_launcher_service.py +19 -15
  579. claude_mpm/services/system_instructions_service.py +3 -5
  580. claude_mpm/services/ticket_services/formatter_service.py +1 -1
  581. claude_mpm/services/ticket_services/validation_service.py +5 -5
  582. claude_mpm/services/unified/__init__.py +65 -0
  583. claude_mpm/services/unified/analyzer_strategies/__init__.py +44 -0
  584. claude_mpm/services/unified/analyzer_strategies/code_analyzer.py +518 -0
  585. claude_mpm/services/unified/analyzer_strategies/dependency_analyzer.py +680 -0
  586. claude_mpm/services/unified/analyzer_strategies/performance_analyzer.py +900 -0
  587. claude_mpm/services/unified/analyzer_strategies/security_analyzer.py +745 -0
  588. claude_mpm/services/unified/analyzer_strategies/structure_analyzer.py +733 -0
  589. claude_mpm/services/unified/config_strategies/__init__.py +175 -0
  590. claude_mpm/services/unified/config_strategies/config_schema.py +731 -0
  591. claude_mpm/services/unified/config_strategies/context_strategy.py +747 -0
  592. claude_mpm/services/unified/config_strategies/error_handling_strategy.py +1005 -0
  593. claude_mpm/services/unified/config_strategies/file_loader_strategy.py +881 -0
  594. claude_mpm/services/unified/config_strategies/unified_config_service.py +823 -0
  595. claude_mpm/services/unified/config_strategies/validation_strategy.py +1148 -0
  596. claude_mpm/services/unified/deployment_strategies/__init__.py +97 -0
  597. claude_mpm/services/unified/deployment_strategies/base.py +553 -0
  598. claude_mpm/services/unified/deployment_strategies/cloud_strategies.py +573 -0
  599. claude_mpm/services/unified/deployment_strategies/local.py +607 -0
  600. claude_mpm/services/unified/deployment_strategies/utils.py +667 -0
  601. claude_mpm/services/unified/deployment_strategies/vercel.py +471 -0
  602. claude_mpm/services/unified/interfaces.py +475 -0
  603. claude_mpm/services/unified/migration.py +509 -0
  604. claude_mpm/services/unified/strategies.py +534 -0
  605. claude_mpm/services/unified/unified_analyzer.py +542 -0
  606. claude_mpm/services/unified/unified_config.py +691 -0
  607. claude_mpm/services/unified/unified_deployment.py +466 -0
  608. claude_mpm/services/utility_service.py +6 -3
  609. claude_mpm/services/version_control/branch_strategy.py +2 -2
  610. claude_mpm/services/version_control/conflict_resolution.py +14 -8
  611. claude_mpm/services/version_control/git_operations.py +26 -24
  612. claude_mpm/services/version_control/semantic_versioning.py +14 -14
  613. claude_mpm/services/version_control/version_parser.py +14 -11
  614. claude_mpm/services/version_service.py +104 -1
  615. claude_mpm/services/visualization/__init__.py +1 -5
  616. claude_mpm/services/visualization/mermaid_generator.py +2 -3
  617. claude_mpm/skills/__init__.py +42 -0
  618. claude_mpm/skills/agent_skills_injector.py +324 -0
  619. claude_mpm/skills/bundled/LICENSE_ATTRIBUTIONS.md +79 -0
  620. claude_mpm/skills/bundled/__init__.py +6 -0
  621. claude_mpm/skills/bundled/api-documentation.md +393 -0
  622. claude_mpm/skills/bundled/async-testing.md +571 -0
  623. claude_mpm/skills/bundled/code-review.md +143 -0
  624. claude_mpm/skills/bundled/database-migration.md +199 -0
  625. claude_mpm/skills/bundled/docker-containerization.md +194 -0
  626. claude_mpm/skills/bundled/express-local-dev.md +1429 -0
  627. claude_mpm/skills/bundled/fastapi-local-dev.md +1199 -0
  628. claude_mpm/skills/bundled/git-workflow.md +414 -0
  629. claude_mpm/skills/bundled/imagemagick.md +204 -0
  630. claude_mpm/skills/bundled/infrastructure/env-manager/scripts/validate_env.py +576 -0
  631. claude_mpm/skills/bundled/json-data-handling.md +223 -0
  632. claude_mpm/skills/bundled/main/mcp-builder/scripts/connections.py +157 -0
  633. claude_mpm/skills/bundled/main/mcp-builder/scripts/evaluation.py +425 -0
  634. claude_mpm/skills/bundled/main/skill-creator/scripts/init_skill.py +303 -0
  635. claude_mpm/skills/bundled/main/skill-creator/scripts/package_skill.py +113 -0
  636. claude_mpm/skills/bundled/main/skill-creator/scripts/quick_validate.py +72 -0
  637. claude_mpm/skills/bundled/nextjs-local-dev.md +807 -0
  638. claude_mpm/skills/bundled/pdf.md +141 -0
  639. claude_mpm/skills/bundled/performance-profiling.md +573 -0
  640. claude_mpm/skills/bundled/refactoring-patterns.md +180 -0
  641. claude_mpm/skills/bundled/security-scanning.md +327 -0
  642. claude_mpm/skills/bundled/systematic-debugging.md +473 -0
  643. claude_mpm/skills/bundled/test-driven-development.md +378 -0
  644. claude_mpm/skills/bundled/testing/webapp-testing/examples/console_logging.py +35 -0
  645. claude_mpm/skills/bundled/testing/webapp-testing/examples/element_discovery.py +44 -0
  646. claude_mpm/skills/bundled/testing/webapp-testing/examples/static_html_automation.py +34 -0
  647. claude_mpm/skills/bundled/testing/webapp-testing/scripts/with_server.py +129 -0
  648. claude_mpm/skills/bundled/vite-local-dev.md +1061 -0
  649. claude_mpm/skills/bundled/web-performance-optimization.md +2305 -0
  650. claude_mpm/skills/bundled/xlsx.md +157 -0
  651. claude_mpm/skills/registry.py +286 -0
  652. claude_mpm/skills/skill_manager.py +310 -0
  653. claude_mpm/skills/skills_registry.py +347 -0
  654. claude_mpm/skills/skills_service.py +739 -0
  655. claude_mpm/storage/state_storage.py +31 -31
  656. claude_mpm/templates/questions/__init__.py +38 -0
  657. claude_mpm/templates/questions/base.py +193 -0
  658. claude_mpm/templates/questions/pr_strategy.py +311 -0
  659. claude_mpm/templates/questions/project_init.py +385 -0
  660. claude_mpm/templates/questions/ticket_mgmt.py +394 -0
  661. claude_mpm/tools/__main__.py +9 -9
  662. claude_mpm/tools/code_tree_analyzer/__init__.py +45 -0
  663. claude_mpm/tools/code_tree_analyzer/analysis.py +299 -0
  664. claude_mpm/tools/code_tree_analyzer/cache.py +131 -0
  665. claude_mpm/tools/code_tree_analyzer/core.py +380 -0
  666. claude_mpm/tools/code_tree_analyzer/discovery.py +403 -0
  667. claude_mpm/tools/code_tree_analyzer/events.py +168 -0
  668. claude_mpm/tools/code_tree_analyzer/gitignore.py +308 -0
  669. claude_mpm/tools/code_tree_analyzer/models.py +39 -0
  670. claude_mpm/tools/code_tree_analyzer/multilang_analyzer.py +224 -0
  671. claude_mpm/tools/code_tree_analyzer/python_analyzer.py +284 -0
  672. claude_mpm/tools/code_tree_builder.py +6 -6
  673. claude_mpm/tools/code_tree_events.py +14 -10
  674. claude_mpm/tools/socketio_debug.py +11 -11
  675. claude_mpm/utils/agent_dependency_loader.py +184 -36
  676. claude_mpm/utils/agent_filters.py +288 -0
  677. claude_mpm/utils/common.py +544 -0
  678. claude_mpm/utils/config_manager.py +12 -6
  679. claude_mpm/utils/database_connector.py +298 -0
  680. claude_mpm/utils/dependency_cache.py +5 -3
  681. claude_mpm/utils/dependency_strategies.py +15 -10
  682. claude_mpm/utils/display_helper.py +260 -0
  683. claude_mpm/utils/environment_context.py +4 -3
  684. claude_mpm/utils/error_handler.py +5 -3
  685. claude_mpm/utils/file_utils.py +13 -14
  686. claude_mpm/utils/git_analyzer.py +407 -0
  687. claude_mpm/utils/gitignore.py +241 -0
  688. claude_mpm/utils/log_cleanup.py +627 -0
  689. claude_mpm/utils/migration.py +372 -0
  690. claude_mpm/utils/path_operations.py +7 -4
  691. claude_mpm/utils/progress.py +387 -0
  692. claude_mpm/utils/robust_installer.py +131 -24
  693. claude_mpm/utils/session_logging.py +2 -2
  694. claude_mpm/utils/structured_questions.py +619 -0
  695. claude_mpm/utils/subprocess_utils.py +9 -8
  696. claude_mpm/validation/agent_validator.py +6 -6
  697. claude_mpm/validation/frontmatter_validator.py +6 -6
  698. claude_mpm-5.0.9.dist-info/METADATA +1028 -0
  699. claude_mpm-5.0.9.dist-info/RECORD +864 -0
  700. {claude_mpm-4.1.26.dist-info → claude_mpm-5.0.9.dist-info}/entry_points.txt +1 -0
  701. claude_mpm/agents/INSTRUCTIONS.md +0 -261
  702. claude_mpm/agents/templates/.claude-mpm/memories/README.md +0 -17
  703. claude_mpm/agents/templates/.claude-mpm/memories/engineer_memories.md +0 -3
  704. claude_mpm/agents/templates/agent-manager.json +0 -270
  705. claude_mpm/agents/templates/agent-manager.md +0 -619
  706. claude_mpm/agents/templates/agentic_coder_optimizer.json +0 -222
  707. claude_mpm/agents/templates/api_qa.json +0 -171
  708. claude_mpm/agents/templates/code_analyzer.json +0 -95
  709. claude_mpm/agents/templates/data_engineer.json +0 -152
  710. claude_mpm/agents/templates/documentation.json +0 -175
  711. claude_mpm/agents/templates/engineer.json +0 -176
  712. claude_mpm/agents/templates/imagemagick.json +0 -261
  713. claude_mpm/agents/templates/logs/prompts/agent_engineer_20250826_014258_728.md +0 -39
  714. claude_mpm/agents/templates/memory_manager.json +0 -155
  715. claude_mpm/agents/templates/ops.json +0 -175
  716. claude_mpm/agents/templates/project_organizer.json +0 -130
  717. claude_mpm/agents/templates/qa.json +0 -223
  718. claude_mpm/agents/templates/refactoring_engineer.json +0 -266
  719. claude_mpm/agents/templates/research.json +0 -163
  720. claude_mpm/agents/templates/security.json +0 -153
  721. claude_mpm/agents/templates/ticketing.json +0 -169
  722. claude_mpm/agents/templates/vercel_ops_agent.json +0 -281
  723. claude_mpm/agents/templates/version_control.json +0 -147
  724. claude_mpm/agents/templates/web_qa.json +0 -254
  725. claude_mpm/agents/templates/web_ui.json +0 -176
  726. claude_mpm/cli/commands/configure_tui.py +0 -1927
  727. claude_mpm/cli/commands/mpm_init.py +0 -594
  728. claude_mpm/cli/commands/socketio_monitor.py +0 -233
  729. claude_mpm/commands/mpm-agents.md +0 -12
  730. claude_mpm/commands/mpm-config.md +0 -18
  731. claude_mpm/commands/mpm-tickets.md +0 -102
  732. claude_mpm/dashboard/.claude-mpm/socketio-instances.json +0 -1
  733. claude_mpm/dashboard/static/built/components/activity-tree.js +0 -2
  734. claude_mpm/dashboard/static/built/components/agent-inference.js +0 -2
  735. claude_mpm/dashboard/static/built/components/code-tree.js +0 -2
  736. claude_mpm/dashboard/static/built/components/code-viewer.js +0 -2
  737. claude_mpm/dashboard/static/built/components/event-processor.js +0 -2
  738. claude_mpm/dashboard/static/built/components/event-viewer.js +0 -2
  739. claude_mpm/dashboard/static/built/components/export-manager.js +0 -2
  740. claude_mpm/dashboard/static/built/components/file-tool-tracker.js +0 -2
  741. claude_mpm/dashboard/static/built/components/hud-library-loader.js +0 -2
  742. claude_mpm/dashboard/static/built/components/hud-manager.js +0 -2
  743. claude_mpm/dashboard/static/built/components/hud-visualizer.js +0 -2
  744. claude_mpm/dashboard/static/built/components/module-viewer.js +0 -2
  745. claude_mpm/dashboard/static/built/components/session-manager.js +0 -2
  746. claude_mpm/dashboard/static/built/components/socket-manager.js +0 -2
  747. claude_mpm/dashboard/static/built/components/ui-state-manager.js +0 -2
  748. claude_mpm/dashboard/static/built/components/unified-data-viewer.js +0 -2
  749. claude_mpm/dashboard/static/built/components/working-directory.js +0 -2
  750. claude_mpm/dashboard/static/built/dashboard.js +0 -2
  751. claude_mpm/dashboard/static/built/socket-client.js +0 -2
  752. claude_mpm/dashboard/static/css/code-tree.css +0 -1408
  753. claude_mpm/dashboard/static/dist/components/activity-tree.js +0 -2
  754. claude_mpm/dashboard/static/dist/components/agent-inference.js +0 -2
  755. claude_mpm/dashboard/static/dist/components/code-tree.js +0 -2
  756. claude_mpm/dashboard/static/dist/components/code-viewer.js +0 -2
  757. claude_mpm/dashboard/static/dist/components/event-processor.js +0 -2
  758. claude_mpm/dashboard/static/dist/components/event-viewer.js +0 -2
  759. claude_mpm/dashboard/static/dist/components/export-manager.js +0 -2
  760. claude_mpm/dashboard/static/dist/components/file-tool-tracker.js +0 -2
  761. claude_mpm/dashboard/static/dist/components/hud-library-loader.js +0 -2
  762. claude_mpm/dashboard/static/dist/components/hud-manager.js +0 -2
  763. claude_mpm/dashboard/static/dist/components/hud-visualizer.js +0 -2
  764. claude_mpm/dashboard/static/dist/components/module-viewer.js +0 -2
  765. claude_mpm/dashboard/static/dist/components/session-manager.js +0 -2
  766. claude_mpm/dashboard/static/dist/components/socket-manager.js +0 -2
  767. claude_mpm/dashboard/static/dist/components/ui-state-manager.js +0 -2
  768. claude_mpm/dashboard/static/dist/components/unified-data-viewer.js +0 -2
  769. claude_mpm/dashboard/static/dist/components/working-directory.js +0 -2
  770. claude_mpm/dashboard/static/dist/dashboard.js +0 -2
  771. claude_mpm/dashboard/static/dist/socket-client.js +0 -2
  772. claude_mpm/dashboard/static/js/components/code-tree.js +0 -3220
  773. claude_mpm/dashboard/static/js/components/code-viewer.js +0 -480
  774. claude_mpm/hooks/claude_hooks/hook_handler_eventbus.py +0 -425
  775. claude_mpm/hooks/claude_hooks/hook_handler_original.py +0 -1040
  776. claude_mpm/hooks/claude_hooks/hook_handler_refactored.py +0 -347
  777. claude_mpm/scripts/socketio_daemon_hardened.py +0 -937
  778. claude_mpm/scripts/socketio_daemon_wrapper.py +0 -78
  779. claude_mpm/scripts/socketio_server_manager.py +0 -349
  780. claude_mpm/services/agents/deployment/agent_lifecycle_manager_refactored.py +0 -575
  781. claude_mpm/services/cli/dashboard_launcher.py +0 -423
  782. claude_mpm/services/cli/socketio_manager.py +0 -537
  783. claude_mpm/services/diagnostics/checks/claude_desktop_check.py +0 -286
  784. claude_mpm/services/mcp_gateway/tools/ticket_tools.py +0 -645
  785. claude_mpm/services/mcp_gateway/tools/unified_ticket_tool.py +0 -602
  786. claude_mpm/services/project/analyzer_refactored.py +0 -450
  787. claude_mpm/tools/code_tree_analyzer.py +0 -1693
  788. claude_mpm-4.1.26.dist-info/METADATA +0 -332
  789. claude_mpm-4.1.26.dist-info/RECORD +0 -606
  790. {claude_mpm-4.1.26.dist-info → claude_mpm-5.0.9.dist-info}/WHEEL +0 -0
  791. {claude_mpm-4.1.26.dist-info → claude_mpm-5.0.9.dist-info}/licenses/LICENSE +0 -0
  792. {claude_mpm-4.1.26.dist-info → claude_mpm-5.0.9.dist-info}/top_level.txt +0 -0
@@ -6,24 +6,31 @@ and aggregate results for reporting.
6
6
  """
7
7
 
8
8
  import asyncio
9
- import logging
10
9
  from concurrent.futures import ThreadPoolExecutor, as_completed
11
10
  from typing import List, Type
12
11
 
12
+ from claude_mpm.core.enums import ValidationSeverity
13
+ from claude_mpm.core.logging_utils import get_logger
14
+
13
15
  from .checks import (
14
16
  AgentCheck,
17
+ AgentSourcesCheck,
15
18
  BaseDiagnosticCheck,
16
- ClaudeDesktopCheck,
19
+ ClaudeCodeCheck,
17
20
  CommonIssuesCheck,
18
21
  ConfigurationCheck,
19
22
  FilesystemCheck,
20
23
  InstallationCheck,
21
24
  InstructionsCheck,
22
25
  MCPCheck,
26
+ MCPServicesCheck,
23
27
  MonitorCheck,
28
+ SkillSourcesCheck,
24
29
  StartupLogCheck,
25
30
  )
26
- from .models import DiagnosticResult, DiagnosticStatus, DiagnosticSummary
31
+ from .models import DiagnosticResult, DiagnosticSummary
32
+
33
+ logger = get_logger(__name__)
27
34
 
28
35
 
29
36
  class DiagnosticRunner:
@@ -42,17 +49,19 @@ class DiagnosticRunner:
42
49
  """
43
50
  self.verbose = verbose
44
51
  self.fix = fix
45
- self.logger = logging.getLogger(__name__)
46
-
52
+ self.logger = logger # Add logger initialization
47
53
  # Define check order (dependencies first)
48
54
  self.check_classes: List[Type[BaseDiagnosticCheck]] = [
49
55
  InstallationCheck,
50
56
  ConfigurationCheck,
51
57
  FilesystemCheck,
52
58
  InstructionsCheck, # Check instruction files early
53
- ClaudeDesktopCheck,
59
+ ClaudeCodeCheck,
54
60
  AgentCheck,
61
+ AgentSourcesCheck, # Check agent sources configuration
62
+ SkillSourcesCheck, # Check skill sources configuration
55
63
  MCPCheck,
64
+ MCPServicesCheck, # Check external MCP services
56
65
  MonitorCheck,
57
66
  StartupLogCheck, # Check startup logs for recent issues
58
67
  CommonIssuesCheck,
@@ -88,7 +97,7 @@ class DiagnosticRunner:
88
97
  self.logger.error(f"Check {check_class.__name__} failed: {e}")
89
98
  error_result = DiagnosticResult(
90
99
  category=check_class.__name__.replace("Check", ""),
91
- status=DiagnosticStatus.ERROR,
100
+ status=ValidationSeverity.ERROR,
92
101
  message=f"Check failed: {e!s}",
93
102
  details={"error": str(e)},
94
103
  )
@@ -117,9 +126,12 @@ class DiagnosticRunner:
117
126
  ]
118
127
  # Level 2: May depend on level 1
119
128
  level2 = [
120
- ClaudeDesktopCheck,
129
+ ClaudeCodeCheck,
121
130
  AgentCheck,
131
+ AgentSourcesCheck,
132
+ SkillSourcesCheck,
122
133
  MCPCheck,
134
+ MCPServicesCheck,
123
135
  MonitorCheck,
124
136
  StartupLogCheck,
125
137
  ]
@@ -162,7 +174,7 @@ class DiagnosticRunner:
162
174
  results.append(
163
175
  DiagnosticResult(
164
176
  category=check_class.__name__.replace("Check", ""),
165
- status=DiagnosticStatus.ERROR,
177
+ status=ValidationSeverity.ERROR,
166
178
  message=f"Check initialization failed: {e!s}",
167
179
  details={"error": str(e)},
168
180
  )
@@ -178,7 +190,7 @@ class DiagnosticRunner:
178
190
  results.append(
179
191
  DiagnosticResult(
180
192
  category=check_name.replace("Check", ""),
181
- status=DiagnosticStatus.ERROR,
193
+ status=ValidationSeverity.ERROR,
182
194
  message=f"Check execution failed: {e!s}",
183
195
  details={"error": str(e)},
184
196
  )
@@ -204,11 +216,17 @@ class DiagnosticRunner:
204
216
  "config": ConfigurationCheck,
205
217
  "filesystem": FilesystemCheck,
206
218
  "fs": FilesystemCheck,
207
- "claude": ClaudeDesktopCheck,
208
- "claude_desktop": ClaudeDesktopCheck,
219
+ "claude": ClaudeCodeCheck,
220
+ "claude_code": ClaudeCodeCheck,
209
221
  "agents": AgentCheck,
210
222
  "agent": AgentCheck,
223
+ "agent-sources": AgentSourcesCheck,
224
+ "agent_sources": AgentSourcesCheck,
225
+ "sources": AgentSourcesCheck,
211
226
  "mcp": MCPCheck,
227
+ "mcp_services": MCPServicesCheck,
228
+ "mcp-services": MCPServicesCheck,
229
+ "external": MCPServicesCheck,
212
230
  "monitor": MonitorCheck,
213
231
  "monitoring": MonitorCheck,
214
232
  "common": CommonIssuesCheck,
@@ -230,7 +248,7 @@ class DiagnosticRunner:
230
248
  self.logger.error(f"Check {name} failed: {e}")
231
249
  error_result = DiagnosticResult(
232
250
  category=check_class.__name__.replace("Check", ""),
233
- status=DiagnosticStatus.ERROR,
251
+ status=ValidationSeverity.ERROR,
234
252
  message=f"Check failed: {e!s}",
235
253
  details={"error": str(e)},
236
254
  )
@@ -8,7 +8,9 @@ formatting for terminal display and JSON export.
8
8
  import json
9
9
  import sys
10
10
 
11
- from .models import DiagnosticResult, DiagnosticStatus, DiagnosticSummary
11
+ from claude_mpm.core.enums import OperationResult, ValidationSeverity
12
+
13
+ from .models import DiagnosticResult, DiagnosticSummary
12
14
 
13
15
 
14
16
  class DoctorReporter:
@@ -20,10 +22,10 @@ class DoctorReporter:
20
22
 
21
23
  # Status symbols and colors
22
24
  STATUS_SYMBOLS = {
23
- DiagnosticStatus.OK: "✅",
24
- DiagnosticStatus.WARNING: "⚠️ ",
25
- DiagnosticStatus.ERROR: "❌",
26
- DiagnosticStatus.SKIPPED: "⏭️ ",
25
+ OperationResult.SUCCESS: "✅",
26
+ ValidationSeverity.WARNING: "⚠️ ",
27
+ ValidationSeverity.ERROR: "❌",
28
+ OperationResult.SKIPPED: "⏭️ ",
27
29
  }
28
30
 
29
31
  # ANSI color codes
@@ -94,11 +96,11 @@ class DoctorReporter:
94
96
  # Main result line
95
97
  line = f"{indent_str}{symbol} {result.category}: "
96
98
 
97
- if result.status == DiagnosticStatus.OK:
99
+ if result.status == OperationResult.SUCCESS:
98
100
  line += self._color("OK", color)
99
- elif result.status == DiagnosticStatus.WARNING:
101
+ elif result.status == ValidationSeverity.WARNING:
100
102
  line += self._color("Warning", color)
101
- elif result.status == DiagnosticStatus.ERROR:
103
+ elif result.status == ValidationSeverity.ERROR:
102
104
  line += self._color("Error", color)
103
105
  else:
104
106
  line += self._color("Skipped", color)
@@ -163,9 +165,9 @@ class DoctorReporter:
163
165
 
164
166
  # Overall health
165
167
  overall = summary.overall_status
166
- if overall == DiagnosticStatus.OK:
168
+ if overall == OperationResult.SUCCESS:
167
169
  print(self._color("\n✅ System is healthy!", "green"))
168
- elif overall == DiagnosticStatus.WARNING:
170
+ elif overall == ValidationSeverity.WARNING:
169
171
  print(
170
172
  self._color(
171
173
  "\n⚠️ System has minor issues that should be addressed.", "yellow"
@@ -242,40 +244,91 @@ class DoctorReporter:
242
244
  print(json.dumps(output, indent=2))
243
245
 
244
246
  def _report_markdown(self, summary: DiagnosticSummary):
245
- """Generate Markdown-formatted report."""
246
- print("# Claude MPM Doctor Report\n")
247
-
248
- # Summary table
249
- print("## Summary\n")
250
- print("| Status | Count |")
251
- print("|--------|-------|")
252
- print(f"| ✅ OK | {summary.ok_count} |")
253
- print(f"| ⚠️ Warning | {summary.warning_count} |")
254
- print(f"| Error | {summary.error_count} |")
255
- print(f"| ⏭️ Skipped | {summary.skipped_count} |")
247
+ """Generate comprehensive Markdown-formatted report."""
248
+ import datetime
249
+ import platform
250
+ import sys
251
+
252
+ # Header with timestamp and system info
253
+ print("# Claude MPM Doctor Report")
254
+ print()
255
+ now = datetime.datetime.now(datetime.timezone.utc)
256
+ print(f"**Generated:** {now.strftime('%Y-%m-%d %H:%M:%S %Z')}")
257
+ print(
258
+ f"**System:** {platform.system()} {platform.release()} ({platform.machine()})"
259
+ )
260
+ print(f"**Python:** {sys.version.split()[0]}")
261
+ print(f"**claude-mpm:** {self._get_version()}")
262
+
263
+ # Get current working directory for context
264
+ from pathlib import Path
265
+
266
+ cwd = Path.cwd()
267
+ print(f"**Working Directory:** {cwd}")
268
+
269
+ print()
270
+ print("---")
271
+ print()
272
+
273
+ # System Overview
274
+ print("## System Overview\n")
275
+ self._print_system_overview_markdown(summary)
276
+ print()
277
+
278
+ # Summary Statistics
279
+ print("## Summary Statistics\n")
280
+ print("| Status | Count | Percentage |")
281
+ print("|--------|-------|------------|")
282
+ total = (
283
+ summary.ok_count
284
+ + summary.warning_count
285
+ + summary.error_count
286
+ + summary.skipped_count
287
+ )
288
+ if total > 0:
289
+ print(
290
+ f"| ✅ OK | {summary.ok_count} | {summary.ok_count * 100 // total}% |"
291
+ )
292
+ print(
293
+ f"| ⚠️ Warning | {summary.warning_count} | {summary.warning_count * 100 // total}% |"
294
+ )
295
+ print(
296
+ f"| ❌ Error | {summary.error_count} | {summary.error_count * 100 // total}% |"
297
+ )
298
+ print(
299
+ f"| ⏭️ Skipped | {summary.skipped_count} | {summary.skipped_count * 100 // total}% |"
300
+ )
256
301
  print()
257
302
 
258
- # Detailed results
259
- print("## Diagnostic Results\n")
303
+ # Overall Health Status
304
+ overall = summary.overall_status
305
+ if overall == OperationResult.SUCCESS:
306
+ print("### 🎉 Overall Status: **Healthy**")
307
+ print("Your Claude MPM installation is functioning properly.\n")
308
+ elif overall == ValidationSeverity.WARNING:
309
+ print("### ⚠️ Overall Status: **Needs Attention**")
310
+ print("Your installation has minor issues that should be addressed.\n")
311
+ else:
312
+ print("### ❌ Overall Status: **Critical Issues**")
313
+ print(
314
+ "Your installation has critical issues that need immediate attention.\n"
315
+ )
260
316
 
317
+ # MCP Services Status (if available)
318
+ self._print_mcp_services_markdown(summary)
319
+
320
+ # Installation Details
321
+ self._print_installation_details_markdown(summary)
322
+
323
+ # Detailed Diagnostic Results
324
+ print("## Detailed Diagnostic Results\n")
261
325
  for result in summary.results:
262
- symbol = self.STATUS_SYMBOLS.get(result.status, "?")
263
- print(f"### {symbol} {result.category}\n")
264
- print(f"**Status:** {result.status.value}")
265
- print(f"**Message:** {result.message}\n")
266
-
267
- if result.fix_command:
268
- print(f"**Fix:** `{result.fix_command}`")
269
- if result.fix_description:
270
- print(f"_{result.fix_description}_\n")
271
-
272
- if self.verbose and result.details:
273
- print("**Details:**")
274
- for key, value in result.details.items():
275
- print(f"- {key}: {value}")
276
- print()
326
+ self._print_result_markdown(result)
327
+
328
+ # Recommendations Section
329
+ self._print_recommendations_markdown(summary)
277
330
 
278
- # Fixes section
331
+ # Fixes Section
279
332
  fixes = [
280
333
  (r.category, r.fix_command, r.fix_description)
281
334
  for r in summary.results
@@ -283,13 +336,37 @@ class DoctorReporter:
283
336
  ]
284
337
 
285
338
  if fixes:
286
- print("## Suggested Fixes\n")
339
+ print("## 🔧 Suggested Fixes\n")
340
+ print("Run these commands to fix identified issues:\n")
341
+ print("```bash")
287
342
  for category, command, description in fixes:
288
- print(f"- **{category}:** `{command}`")
343
+ print(f"# Fix: {category}")
289
344
  if description:
290
- print(f" - {description}")
345
+ print(f"# {description}")
346
+ print(command)
347
+ print()
348
+ print("```")
291
349
  print()
292
350
 
351
+ # Footer with generation metadata
352
+ print("---")
353
+ print()
354
+ print("## Report Metadata")
355
+ print()
356
+ print("- **Tool:** `claude-mpm doctor`")
357
+ print(f"- **Version:** {self._get_version()}")
358
+ print(f"- **Generated:** {now.strftime('%Y-%m-%d %H:%M:%S %Z')}")
359
+ if self.verbose:
360
+ print("- **Verbose Mode:** Enabled")
361
+ print()
362
+ print("---")
363
+ print()
364
+ print("🤖 *Generated with [Claude Code](https://claude.com/claude-code)*")
365
+ print()
366
+ print(
367
+ "*For more information, run `claude-mpm doctor --verbose` or visit the [documentation](https://github.com/bobmatnyc/claude-mpm).*"
368
+ )
369
+
293
370
  def _color(self, text: str, color: str) -> str:
294
371
  """Apply color to text if colors are enabled."""
295
372
  if not self.use_color:
@@ -299,13 +376,13 @@ class DoctorReporter:
299
376
  reset_code = self.COLORS["reset"]
300
377
  return f"{color_code}{text}{reset_code}"
301
378
 
302
- def _get_status_color(self, status: DiagnosticStatus) -> str:
379
+ def _get_status_color(self, status) -> str:
303
380
  """Get color for a status."""
304
381
  color_map = {
305
- DiagnosticStatus.OK: "green",
306
- DiagnosticStatus.WARNING: "yellow",
307
- DiagnosticStatus.ERROR: "red",
308
- DiagnosticStatus.SKIPPED: "gray",
382
+ OperationResult.SUCCESS: "green",
383
+ ValidationSeverity.WARNING: "yellow",
384
+ ValidationSeverity.ERROR: "red",
385
+ OperationResult.SKIPPED: "gray",
309
386
  }
310
387
  return color_map.get(status, "reset")
311
388
 
@@ -318,3 +395,184 @@ class DoctorReporter:
318
395
  return service.get_version()
319
396
  except Exception:
320
397
  return "unknown"
398
+
399
+ def _print_system_overview_markdown(self, summary: DiagnosticSummary):
400
+ """Print system overview in markdown format."""
401
+ import platform
402
+ import sys
403
+
404
+ print("| Component | Value |")
405
+ print("|-----------|-------|")
406
+ print(f"| Platform | {platform.system()} {platform.release()} |")
407
+ print(f"| Python Version | {sys.version.split()[0]} |")
408
+
409
+ # Extract key details from results
410
+ for result in summary.results:
411
+ if result.category == "Installation":
412
+ if result.details.get("claude_mpm_version"):
413
+ print(
414
+ f"| Claude MPM Version | {result.details['claude_mpm_version']} |"
415
+ )
416
+ if result.details.get("installation_method"):
417
+ print(
418
+ f"| Installation Method | {result.details['installation_method']} |"
419
+ )
420
+ elif result.category == "Claude Code":
421
+ if result.details.get("version"):
422
+ print(f"| Claude Code (CLI) | {result.details['version']} |")
423
+
424
+ def _print_mcp_services_markdown(self, summary: DiagnosticSummary):
425
+ """Print MCP services status table in markdown."""
426
+ # Find MCP Services result
427
+ mcp_services_result = None
428
+ for result in summary.results:
429
+ if result.category == "MCP Services":
430
+ mcp_services_result = result
431
+ break
432
+
433
+ if not mcp_services_result or not mcp_services_result.details.get("services"):
434
+ return
435
+
436
+ print("## MCP Services Status\n")
437
+ print("| Service | Installed | Accessible | Version | Status |")
438
+ print("|---------|-----------|------------|---------|--------|")
439
+
440
+ services = mcp_services_result.details.get("services", {})
441
+ for service_name, service_info in services.items():
442
+ installed = "✅" if service_info.get("installed") else "❌"
443
+ accessible = "✅" if service_info.get("accessible") else "❌"
444
+ version = service_info.get("version")
445
+ if version:
446
+ version = str(version)[:20] # Truncate long versions
447
+ else:
448
+ version = "N/A"
449
+ status = service_info.get("status", "unknown")
450
+
451
+ # Map status to emoji
452
+ if status == "ok":
453
+ status_emoji = "✅"
454
+ elif status == "warning":
455
+ status_emoji = "⚠️"
456
+ elif status == "error":
457
+ status_emoji = "❌"
458
+ else:
459
+ status_emoji = "❓"
460
+
461
+ print(
462
+ f"| {service_name} | {installed} | {accessible} | {version} | {status_emoji} |"
463
+ )
464
+ print()
465
+
466
+ def _print_installation_details_markdown(self, summary: DiagnosticSummary):
467
+ """Print installation details in markdown."""
468
+ # Find installation result
469
+ install_result = None
470
+ for result in summary.results:
471
+ if result.category == "Installation":
472
+ install_result = result
473
+ break
474
+
475
+ if not install_result:
476
+ return
477
+
478
+ print("## Installation Details\n")
479
+
480
+ # Print sub-results if available
481
+ if install_result.sub_results and self.verbose:
482
+ for sub in install_result.sub_results:
483
+ if sub.category == "Python Version":
484
+ print("### Python Environment")
485
+ print(f"- **Version:** {sub.message}")
486
+ elif sub.category == "Installation Method":
487
+ print("### Installation Method")
488
+ print(f"- **Method:** {sub.message}")
489
+ if sub.details.get("container_type"):
490
+ print(f"- **Container:** {sub.details['container_type']}")
491
+ if sub.details.get("pipx_metadata"):
492
+ metadata = sub.details["pipx_metadata"]
493
+ if metadata.get("version"):
494
+ print(f"- **Pipx Version:** {metadata['version']}")
495
+ elif sub.category == "Dependencies":
496
+ print("### Dependencies")
497
+ print(f"- **Status:** {sub.message}")
498
+ if sub.details.get("installed"):
499
+ print(
500
+ f"- **Installed Packages:** {len(sub.details['installed'])}"
501
+ )
502
+ print()
503
+
504
+ def _print_result_markdown(self, result: DiagnosticResult):
505
+ """Print a single result in markdown format."""
506
+ symbol = self.STATUS_SYMBOLS.get(result.status, "?")
507
+ print(f"### {symbol} {result.category}\n")
508
+
509
+ # Status badge
510
+ status_badge_map = {
511
+ OperationResult.SUCCESS: "![OK](https://img.shields.io/badge/status-OK-green)",
512
+ ValidationSeverity.WARNING: "![Warning](https://img.shields.io/badge/status-Warning-yellow)",
513
+ ValidationSeverity.ERROR: "![Error](https://img.shields.io/badge/status-Error-red)",
514
+ OperationResult.SKIPPED: "![Skipped](https://img.shields.io/badge/status-Skipped-gray)",
515
+ }
516
+ status_badge = status_badge_map.get(result.status, "")
517
+
518
+ print(f"{status_badge}")
519
+ print(f"\n**Message:** {result.message}\n")
520
+
521
+ if result.fix_command:
522
+ print("**Fix Available:**")
523
+ print("```bash")
524
+ print(result.fix_command)
525
+ print("```")
526
+ if result.fix_description:
527
+ print(f"*{result.fix_description}*\n")
528
+
529
+ if self.verbose and result.details:
530
+ print("<details>")
531
+ print("<summary>Details</summary>\n")
532
+ print("```json")
533
+ import json
534
+
535
+ print(json.dumps(result.details, indent=2, default=str))
536
+ print("```")
537
+ print("</details>\n")
538
+
539
+ def _print_recommendations_markdown(self, summary: DiagnosticSummary):
540
+ """Print recommendations based on diagnostic results."""
541
+ recommendations = []
542
+
543
+ # Analyze results for recommendations
544
+
545
+ # Check specific conditions
546
+ for result in summary.results:
547
+ if (
548
+ result.category == "Installation"
549
+ and result.status != OperationResult.SUCCESS
550
+ ):
551
+ if "pipx" not in str(result.details.get("installation_method", "")):
552
+ recommendations.append(
553
+ "Consider using pipx for isolated installation: `pipx install claude-mpm`"
554
+ )
555
+
556
+ if result.category == "MCP Services":
557
+ services = result.details.get("services", {})
558
+ missing = [
559
+ s for s, info in services.items() if not info.get("installed")
560
+ ]
561
+ if missing:
562
+ recommendations.append(
563
+ f"Install missing MCP services for enhanced features: {', '.join(missing)}"
564
+ )
565
+
566
+ if (
567
+ result.category == "Claude Code"
568
+ and result.status == ValidationSeverity.WARNING
569
+ ):
570
+ recommendations.append(
571
+ "Update Claude Code (CLI) to the latest version for best compatibility"
572
+ )
573
+
574
+ if recommendations:
575
+ print("## 📋 Recommendations\n")
576
+ for i, rec in enumerate(recommendations, 1):
577
+ print(f"{i}. {rec}")
578
+ print()
@@ -7,16 +7,29 @@ consistency across all checks and reporting.
7
7
 
8
8
  from dataclasses import dataclass, field
9
9
  from enum import Enum
10
- from typing import Any, Dict, List, Optional
10
+ from typing import Any, Dict, List, Optional, Union
11
11
 
12
+ from ...core.enums import OperationResult, ValidationSeverity
12
13
 
13
- class DiagnosticStatus(Enum):
14
- """Status levels for diagnostic results."""
15
14
 
16
- OK = "ok"
17
- WARNING = "warning"
18
- ERROR = "error"
19
- SKIPPED = "skipped"
15
+ class DiagnosticStatus(str, Enum):
16
+ """Backward compatibility wrapper for diagnostic status values.
17
+
18
+ WHY: Provides backward compatibility for tests and code that use
19
+ DiagnosticStatus instead of the consolidated OperationResult/ValidationSeverity.
20
+
21
+ DESIGN DECISION: Maps to the appropriate consolidated enum values:
22
+ - OK → OperationResult.SUCCESS
23
+ - WARNING → ValidationSeverity.WARNING
24
+ - ERROR → ValidationSeverity.ERROR
25
+
26
+ Note: This is a compatibility layer. New code should use OperationResult
27
+ and ValidationSeverity directly.
28
+ """
29
+
30
+ OK = "success" # Maps to OperationResult.SUCCESS
31
+ WARNING = "warning" # Maps to ValidationSeverity.WARNING
32
+ ERROR = "error" # Maps to ValidationSeverity.ERROR
20
33
 
21
34
 
22
35
  @dataclass
@@ -25,10 +38,13 @@ class DiagnosticResult:
25
38
 
26
39
  WHY: Standardized result format ensures consistent reporting
27
40
  and makes it easy to aggregate and display results.
41
+
42
+ Note: status uses Union[OperationResult, ValidationSeverity] to support both
43
+ operation results (SUCCESS, SKIPPED) and validation results (WARNING, ERROR).
28
44
  """
29
45
 
30
46
  category: str # e.g., "Installation", "Agents", "MCP Server"
31
- status: DiagnosticStatus
47
+ status: Union[OperationResult, ValidationSeverity]
32
48
  message: str
33
49
  details: Dict[str, Any] = field(default_factory=dict)
34
50
  fix_command: Optional[str] = None
@@ -50,16 +66,16 @@ class DiagnosticResult:
50
66
  @property
51
67
  def has_issues(self) -> bool:
52
68
  """Check if this result indicates any issues."""
53
- return self.status in (DiagnosticStatus.WARNING, DiagnosticStatus.ERROR)
69
+ return self.status in (ValidationSeverity.WARNING, ValidationSeverity.ERROR)
54
70
 
55
71
  @property
56
72
  def severity_level(self) -> int:
57
73
  """Get numeric severity level for sorting."""
58
74
  severity_map = {
59
- DiagnosticStatus.OK: 0,
60
- DiagnosticStatus.SKIPPED: 1,
61
- DiagnosticStatus.WARNING: 2,
62
- DiagnosticStatus.ERROR: 3,
75
+ OperationResult.SUCCESS: 0,
76
+ OperationResult.SKIPPED: 1,
77
+ ValidationSeverity.WARNING: 2,
78
+ ValidationSeverity.ERROR: 3,
63
79
  }
64
80
  return severity_map.get(self.status, 0)
65
81
 
@@ -84,13 +100,13 @@ class DiagnosticSummary:
84
100
  self.results.append(result)
85
101
  self.total_checks += 1
86
102
 
87
- if result.status == DiagnosticStatus.OK:
103
+ if result.status == OperationResult.SUCCESS:
88
104
  self.ok_count += 1
89
- elif result.status == DiagnosticStatus.WARNING:
105
+ elif result.status == ValidationSeverity.WARNING:
90
106
  self.warning_count += 1
91
- elif result.status == DiagnosticStatus.ERROR:
107
+ elif result.status == ValidationSeverity.ERROR:
92
108
  self.error_count += 1
93
- elif result.status == DiagnosticStatus.SKIPPED:
109
+ elif result.status == OperationResult.SKIPPED:
94
110
  self.skipped_count += 1
95
111
 
96
112
  @property
@@ -99,13 +115,13 @@ class DiagnosticSummary:
99
115
  return self.warning_count > 0 or self.error_count > 0
100
116
 
101
117
  @property
102
- def overall_status(self) -> DiagnosticStatus:
118
+ def overall_status(self) -> Union[OperationResult, ValidationSeverity]:
103
119
  """Get overall system status."""
104
120
  if self.error_count > 0:
105
- return DiagnosticStatus.ERROR
121
+ return ValidationSeverity.ERROR
106
122
  if self.warning_count > 0:
107
- return DiagnosticStatus.WARNING
108
- return DiagnosticStatus.OK
123
+ return ValidationSeverity.WARNING
124
+ return OperationResult.SUCCESS
109
125
 
110
126
  def to_dict(self) -> Dict[str, Any]:
111
127
  """Convert to dictionary for JSON serialization."""
@@ -18,7 +18,7 @@ import sys
18
18
  import threading
19
19
  import time
20
20
  from collections import defaultdict
21
- from datetime import datetime
21
+ from datetime import datetime, timezone
22
22
  from typing import Any, Dict, List, Optional
23
23
 
24
24
  try:
@@ -267,7 +267,9 @@ class EventAggregator:
267
267
  try:
268
268
  # Extract event metadata
269
269
  event_type = event_data.get("type", "unknown")
270
- timestamp = event_data.get("timestamp", datetime.utcnow().isoformat() + "Z")
270
+ timestamp = event_data.get(
271
+ "timestamp", datetime.now(timezone.utc).isoformat() + "Z"
272
+ )
271
273
  data = event_data.get("data", {})
272
274
 
273
275
  # Update statistics
@@ -489,7 +491,7 @@ class EventAggregator:
489
491
  for filepath in session_files:
490
492
  try:
491
493
  # Load just the metadata, not the full session
492
- with open(filepath) as f:
494
+ with filepath.open() as f:
493
495
  data = json.load(f)
494
496
 
495
497
  sessions.append(