claude-mpm 4.20.3__py3-none-any.whl → 5.1.8__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 (520) hide show
  1. claude_mpm/VERSION +1 -1
  2. claude_mpm/agents/BASE_PM.md +35 -6
  3. claude_mpm/agents/OUTPUT_STYLE.md +3 -48
  4. claude_mpm/agents/PM_INSTRUCTIONS.md +1241 -667
  5. claude_mpm/agents/PM_INSTRUCTIONS_TEACH.md +1322 -0
  6. claude_mpm/agents/WORKFLOW.md +75 -2
  7. claude_mpm/agents/__init__.py +6 -0
  8. claude_mpm/agents/agent_loader.py +1 -4
  9. claude_mpm/agents/base_agent.json +6 -3
  10. claude_mpm/agents/base_agent_loader.py +10 -35
  11. claude_mpm/agents/frontmatter_validator.py +1 -1
  12. claude_mpm/agents/templates/circuit-breakers.md +1254 -0
  13. claude_mpm/agents/templates/context-management-examples.md +544 -0
  14. claude_mpm/agents/templates/{pm_red_flags.md → pm-red-flags.md} +89 -19
  15. claude_mpm/agents/templates/pr-workflow-examples.md +427 -0
  16. claude_mpm/agents/templates/research-gate-examples.md +669 -0
  17. claude_mpm/agents/templates/structured-questions-examples.md +615 -0
  18. claude_mpm/agents/templates/ticket-completeness-examples.md +139 -0
  19. claude_mpm/agents/templates/ticketing-examples.md +277 -0
  20. claude_mpm/cli/__init__.py +37 -2
  21. claude_mpm/cli/commands/__init__.py +2 -0
  22. claude_mpm/cli/commands/agent_source.py +774 -0
  23. claude_mpm/cli/commands/agent_state_manager.py +188 -30
  24. claude_mpm/cli/commands/agents.py +959 -36
  25. claude_mpm/cli/commands/agents_cleanup.py +210 -0
  26. claude_mpm/cli/commands/agents_discover.py +338 -0
  27. claude_mpm/cli/commands/aggregate.py +1 -1
  28. claude_mpm/cli/commands/analyze.py +3 -3
  29. claude_mpm/cli/commands/auto_configure.py +537 -239
  30. claude_mpm/cli/commands/cleanup.py +1 -1
  31. claude_mpm/cli/commands/config.py +7 -4
  32. claude_mpm/cli/commands/configure.py +924 -45
  33. claude_mpm/cli/commands/configure_agent_display.py +4 -4
  34. claude_mpm/cli/commands/configure_navigation.py +63 -46
  35. claude_mpm/cli/commands/debug.py +12 -12
  36. claude_mpm/cli/commands/doctor.py +10 -2
  37. claude_mpm/cli/commands/hook_errors.py +277 -0
  38. claude_mpm/cli/commands/local_deploy.py +1 -4
  39. claude_mpm/cli/commands/mcp_install_commands.py +1 -1
  40. claude_mpm/cli/commands/mpm_init/__init__.py +73 -0
  41. claude_mpm/cli/commands/mpm_init/core.py +573 -0
  42. claude_mpm/cli/commands/mpm_init/display.py +341 -0
  43. claude_mpm/cli/commands/mpm_init/git_activity.py +427 -0
  44. claude_mpm/cli/commands/mpm_init/modes.py +397 -0
  45. claude_mpm/cli/commands/mpm_init/prompts.py +442 -0
  46. claude_mpm/cli/commands/mpm_init_cli.py +396 -0
  47. claude_mpm/cli/commands/mpm_init_handler.py +67 -1
  48. claude_mpm/cli/commands/postmortem.py +401 -0
  49. claude_mpm/cli/commands/run.py +125 -167
  50. claude_mpm/cli/commands/skill_source.py +694 -0
  51. claude_mpm/cli/commands/skills.py +835 -44
  52. claude_mpm/cli/executor.py +78 -3
  53. claude_mpm/cli/interactive/agent_wizard.py +1032 -47
  54. claude_mpm/cli/parsers/agent_source_parser.py +171 -0
  55. claude_mpm/cli/parsers/agents_parser.py +256 -4
  56. claude_mpm/cli/parsers/auto_configure_parser.py +13 -0
  57. claude_mpm/cli/parsers/base_parser.py +53 -0
  58. claude_mpm/cli/parsers/config_parser.py +96 -43
  59. claude_mpm/cli/parsers/mpm_init_parser.py +42 -0
  60. claude_mpm/cli/parsers/skill_source_parser.py +169 -0
  61. claude_mpm/cli/parsers/skills_parser.py +145 -0
  62. claude_mpm/cli/parsers/source_parser.py +138 -0
  63. claude_mpm/cli/startup.py +564 -108
  64. claude_mpm/cli/startup_display.py +480 -0
  65. claude_mpm/cli/utils.py +1 -1
  66. claude_mpm/cli_module/commands.py +1 -1
  67. claude_mpm/commands/{mpm-auto-configure.md → mpm-agents-auto-configure.md} +9 -0
  68. claude_mpm/commands/mpm-agents-detect.md +9 -0
  69. claude_mpm/commands/{mpm-agents.md → mpm-agents-list.md} +9 -0
  70. claude_mpm/commands/mpm-agents-recommend.md +9 -0
  71. claude_mpm/commands/{mpm-config.md → mpm-config-view.md} +9 -0
  72. claude_mpm/commands/mpm-doctor.md +9 -0
  73. claude_mpm/commands/mpm-help.md +17 -2
  74. claude_mpm/commands/mpm-init.md +28 -3
  75. claude_mpm/commands/mpm-monitor.md +9 -0
  76. claude_mpm/commands/mpm-postmortem.md +123 -0
  77. claude_mpm/commands/mpm-session-resume.md +381 -0
  78. claude_mpm/commands/mpm-status.md +9 -0
  79. claude_mpm/commands/{mpm-organize.md → mpm-ticket-organize.md} +9 -0
  80. claude_mpm/commands/mpm-ticket-view.md +552 -0
  81. claude_mpm/commands/mpm-version.md +9 -0
  82. claude_mpm/commands/mpm.md +11 -0
  83. claude_mpm/config/agent_presets.py +488 -0
  84. claude_mpm/config/agent_sources.py +325 -0
  85. claude_mpm/config/skill_presets.py +392 -0
  86. claude_mpm/config/skill_sources.py +590 -0
  87. claude_mpm/constants.py +13 -0
  88. claude_mpm/core/api_validator.py +1 -1
  89. claude_mpm/core/claude_runner.py +19 -35
  90. claude_mpm/core/config.py +24 -0
  91. claude_mpm/core/constants.py +1 -1
  92. claude_mpm/core/framework/__init__.py +3 -16
  93. claude_mpm/core/framework/loaders/file_loader.py +54 -101
  94. claude_mpm/core/framework/loaders/instruction_loader.py +25 -5
  95. claude_mpm/core/framework/processors/metadata_processor.py +1 -1
  96. claude_mpm/core/hook_error_memory.py +381 -0
  97. claude_mpm/core/hook_manager.py +41 -2
  98. claude_mpm/core/interactive_session.py +131 -10
  99. claude_mpm/core/interfaces.py +56 -1
  100. claude_mpm/core/logger.py +3 -1
  101. claude_mpm/core/oneshot_session.py +110 -8
  102. claude_mpm/core/protocols/__init__.py +23 -0
  103. claude_mpm/core/protocols/runner_protocol.py +103 -0
  104. claude_mpm/core/protocols/session_protocol.py +131 -0
  105. claude_mpm/core/shared/singleton_manager.py +11 -4
  106. claude_mpm/core/system_context.py +38 -0
  107. claude_mpm/core/unified_config.py +22 -0
  108. claude_mpm/dashboard/static/css/activity.css +69 -69
  109. claude_mpm/dashboard/static/css/connection-status.css +10 -10
  110. claude_mpm/dashboard/static/css/dashboard.css +15 -15
  111. claude_mpm/dashboard/static/js/components/activity-tree.js +178 -178
  112. claude_mpm/dashboard/static/js/components/agent-hierarchy.js +101 -101
  113. claude_mpm/dashboard/static/js/components/agent-inference.js +31 -31
  114. claude_mpm/dashboard/static/js/components/build-tracker.js +59 -59
  115. claude_mpm/dashboard/static/js/components/code-simple.js +107 -107
  116. claude_mpm/dashboard/static/js/components/connection-debug.js +101 -101
  117. claude_mpm/dashboard/static/js/components/diff-viewer.js +113 -113
  118. claude_mpm/dashboard/static/js/components/event-viewer.js +12 -12
  119. claude_mpm/dashboard/static/js/components/file-change-tracker.js +57 -57
  120. claude_mpm/dashboard/static/js/components/file-change-viewer.js +74 -74
  121. claude_mpm/dashboard/static/js/components/file-tool-tracker.js +6 -6
  122. claude_mpm/dashboard/static/js/components/file-viewer.js +42 -42
  123. claude_mpm/dashboard/static/js/components/module-viewer.js +27 -27
  124. claude_mpm/dashboard/static/js/components/session-manager.js +14 -14
  125. claude_mpm/dashboard/static/js/components/socket-manager.js +1 -1
  126. claude_mpm/dashboard/static/js/components/ui-state-manager.js +14 -14
  127. claude_mpm/dashboard/static/js/components/unified-data-viewer.js +110 -110
  128. claude_mpm/dashboard/static/js/components/working-directory.js +8 -8
  129. claude_mpm/dashboard/static/js/connection-manager.js +76 -76
  130. claude_mpm/dashboard/static/js/dashboard.js +76 -58
  131. claude_mpm/dashboard/static/js/extension-error-handler.js +22 -22
  132. claude_mpm/dashboard/static/js/socket-client.js +138 -121
  133. claude_mpm/dashboard/templates/code_simple.html +23 -23
  134. claude_mpm/dashboard/templates/index.html +18 -18
  135. claude_mpm/experimental/cli_enhancements.py +1 -5
  136. claude_mpm/hooks/claude_hooks/__pycache__/__init__.cpython-313.pyc +0 -0
  137. claude_mpm/hooks/claude_hooks/__pycache__/event_handlers.cpython-313.pyc +0 -0
  138. claude_mpm/hooks/claude_hooks/__pycache__/hook_handler.cpython-313.pyc +0 -0
  139. claude_mpm/hooks/claude_hooks/__pycache__/memory_integration.cpython-313.pyc +0 -0
  140. claude_mpm/hooks/claude_hooks/__pycache__/response_tracking.cpython-313.pyc +0 -0
  141. claude_mpm/hooks/claude_hooks/__pycache__/tool_analysis.cpython-313.pyc +0 -0
  142. claude_mpm/hooks/claude_hooks/event_handlers.py +3 -1
  143. claude_mpm/hooks/claude_hooks/hook_handler.py +24 -7
  144. claude_mpm/hooks/claude_hooks/installer.py +45 -0
  145. claude_mpm/hooks/claude_hooks/memory_integration.py +12 -1
  146. claude_mpm/hooks/claude_hooks/services/__pycache__/__init__.cpython-313.pyc +0 -0
  147. claude_mpm/hooks/claude_hooks/services/__pycache__/connection_manager_http.cpython-313.pyc +0 -0
  148. claude_mpm/hooks/claude_hooks/services/__pycache__/duplicate_detector.cpython-313.pyc +0 -0
  149. claude_mpm/hooks/claude_hooks/services/__pycache__/state_manager.cpython-313.pyc +0 -0
  150. claude_mpm/hooks/claude_hooks/services/__pycache__/subagent_processor.cpython-313.pyc +0 -0
  151. claude_mpm/hooks/failure_learning/__init__.py +2 -8
  152. claude_mpm/hooks/failure_learning/failure_detection_hook.py +1 -6
  153. claude_mpm/hooks/failure_learning/fix_detection_hook.py +1 -6
  154. claude_mpm/hooks/failure_learning/learning_extraction_hook.py +1 -6
  155. claude_mpm/hooks/kuzu_response_hook.py +1 -5
  156. claude_mpm/hooks/templates/pre_tool_use_simple.py +78 -0
  157. claude_mpm/hooks/templates/pre_tool_use_template.py +323 -0
  158. claude_mpm/models/git_repository.py +198 -0
  159. claude_mpm/scripts/claude-hook-handler.sh +3 -3
  160. claude_mpm/scripts/start_activity_logging.py +3 -1
  161. claude_mpm/services/agents/agent_builder.py +45 -9
  162. claude_mpm/services/agents/agent_preset_service.py +238 -0
  163. claude_mpm/services/agents/agent_selection_service.py +484 -0
  164. claude_mpm/services/agents/auto_deploy_index_parser.py +569 -0
  165. claude_mpm/services/agents/cache_git_manager.py +621 -0
  166. claude_mpm/services/agents/deployment/agent_deployment.py +126 -2
  167. claude_mpm/services/agents/deployment/agent_discovery_service.py +105 -73
  168. claude_mpm/services/agents/deployment/agent_format_converter.py +1 -1
  169. claude_mpm/services/agents/deployment/agent_lifecycle_manager.py +1 -5
  170. claude_mpm/services/agents/deployment/agent_metrics_collector.py +3 -3
  171. claude_mpm/services/agents/deployment/agent_restore_handler.py +1 -4
  172. claude_mpm/services/agents/deployment/agent_template_builder.py +236 -15
  173. claude_mpm/services/agents/deployment/agents_directory_resolver.py +101 -15
  174. claude_mpm/services/agents/deployment/async_agent_deployment.py +2 -1
  175. claude_mpm/services/agents/deployment/facade/deployment_facade.py +3 -3
  176. claude_mpm/services/agents/deployment/multi_source_deployment_service.py +115 -15
  177. claude_mpm/services/agents/deployment/pipeline/pipeline_executor.py +2 -2
  178. claude_mpm/services/agents/deployment/refactored_agent_deployment_service.py +1 -4
  179. claude_mpm/services/agents/deployment/remote_agent_discovery_service.py +363 -0
  180. claude_mpm/services/agents/deployment/single_agent_deployer.py +2 -2
  181. claude_mpm/services/agents/deployment/system_instructions_deployer.py +168 -46
  182. claude_mpm/services/agents/deployment/validation/deployment_validator.py +2 -2
  183. claude_mpm/services/agents/git_source_manager.py +629 -0
  184. claude_mpm/services/agents/loading/framework_agent_loader.py +9 -12
  185. claude_mpm/services/agents/local_template_manager.py +50 -10
  186. claude_mpm/services/agents/single_tier_deployment_service.py +696 -0
  187. claude_mpm/services/agents/sources/__init__.py +13 -0
  188. claude_mpm/services/agents/sources/agent_sync_state.py +516 -0
  189. claude_mpm/services/agents/sources/git_source_sync_service.py +1087 -0
  190. claude_mpm/services/agents/startup_sync.py +239 -0
  191. claude_mpm/services/agents/toolchain_detector.py +474 -0
  192. claude_mpm/services/analysis/__init__.py +25 -0
  193. claude_mpm/services/analysis/postmortem_reporter.py +474 -0
  194. claude_mpm/services/analysis/postmortem_service.py +765 -0
  195. claude_mpm/services/cli/session_pause_manager.py +504 -0
  196. claude_mpm/services/cli/session_resume_helper.py +36 -16
  197. claude_mpm/services/cli/unified_dashboard_manager.py +1 -1
  198. claude_mpm/services/command_deployment_service.py +200 -6
  199. claude_mpm/services/core/base.py +31 -11
  200. claude_mpm/services/core/interfaces/__init__.py +1 -3
  201. claude_mpm/services/core/interfaces/health.py +1 -4
  202. claude_mpm/services/core/interfaces.py +56 -1
  203. claude_mpm/services/core/models/__init__.py +2 -11
  204. claude_mpm/services/core/models/agent_config.py +3 -0
  205. claude_mpm/services/core/models/process.py +4 -0
  206. claude_mpm/services/diagnostics/checks/__init__.py +4 -0
  207. claude_mpm/services/diagnostics/checks/agent_check.py +0 -2
  208. claude_mpm/services/diagnostics/checks/agent_sources_check.py +577 -0
  209. claude_mpm/services/diagnostics/checks/instructions_check.py +1 -2
  210. claude_mpm/services/diagnostics/checks/mcp_check.py +0 -1
  211. claude_mpm/services/diagnostics/checks/mcp_services_check.py +7 -15
  212. claude_mpm/services/diagnostics/checks/monitor_check.py +0 -1
  213. claude_mpm/services/diagnostics/checks/skill_sources_check.py +587 -0
  214. claude_mpm/services/diagnostics/diagnostic_runner.py +9 -0
  215. claude_mpm/services/diagnostics/doctor_reporter.py +40 -10
  216. claude_mpm/services/diagnostics/models.py +21 -0
  217. claude_mpm/services/event_bus/direct_relay.py +3 -3
  218. claude_mpm/services/event_bus/event_bus.py +36 -3
  219. claude_mpm/services/event_bus/relay.py +23 -7
  220. claude_mpm/services/events/consumers/logging.py +1 -2
  221. claude_mpm/services/git/__init__.py +21 -0
  222. claude_mpm/services/git/git_operations_service.py +494 -0
  223. claude_mpm/services/github/__init__.py +21 -0
  224. claude_mpm/services/github/github_cli_service.py +397 -0
  225. claude_mpm/services/infrastructure/monitoring/__init__.py +1 -5
  226. claude_mpm/services/infrastructure/monitoring/aggregator.py +1 -6
  227. claude_mpm/services/infrastructure/monitoring/resources.py +1 -1
  228. claude_mpm/services/instructions/__init__.py +9 -0
  229. claude_mpm/services/instructions/instruction_cache_service.py +374 -0
  230. claude_mpm/services/local_ops/__init__.py +5 -13
  231. claude_mpm/services/local_ops/health_checks/__init__.py +1 -3
  232. claude_mpm/services/local_ops/health_manager.py +1 -4
  233. claude_mpm/services/local_ops/process_manager.py +1 -1
  234. claude_mpm/services/local_ops/resource_monitor.py +2 -2
  235. claude_mpm/services/mcp_config_manager.py +75 -145
  236. claude_mpm/services/mcp_gateway/auto_configure.py +31 -25
  237. claude_mpm/services/mcp_gateway/config/configuration.py +1 -1
  238. claude_mpm/services/mcp_gateway/core/process_pool.py +41 -26
  239. claude_mpm/services/mcp_gateway/server/mcp_gateway.py +1 -6
  240. claude_mpm/services/mcp_gateway/server/stdio_server.py +0 -2
  241. claude_mpm/services/mcp_gateway/tools/document_summarizer.py +1 -1
  242. claude_mpm/services/mcp_gateway/tools/external_mcp_services.py +26 -21
  243. claude_mpm/services/mcp_gateway/tools/kuzu_memory_service.py +6 -2
  244. claude_mpm/services/mcp_service_verifier.py +6 -3
  245. claude_mpm/services/memory/failure_tracker.py +19 -4
  246. claude_mpm/services/memory/optimizer.py +1 -1
  247. claude_mpm/services/model/model_router.py +8 -9
  248. claude_mpm/services/monitor/daemon.py +29 -9
  249. claude_mpm/services/monitor/daemon_manager.py +96 -19
  250. claude_mpm/services/monitor/server.py +2 -2
  251. claude_mpm/services/native_agent_converter.py +356 -0
  252. claude_mpm/services/port_manager.py +1 -1
  253. claude_mpm/services/pr/__init__.py +14 -0
  254. claude_mpm/services/pr/pr_template_service.py +329 -0
  255. claude_mpm/services/project/documentation_manager.py +2 -1
  256. claude_mpm/services/project/project_organizer.py +4 -0
  257. claude_mpm/services/project/toolchain_analyzer.py +3 -1
  258. claude_mpm/services/runner_configuration_service.py +17 -3
  259. claude_mpm/services/self_upgrade_service.py +165 -7
  260. claude_mpm/services/session_management_service.py +16 -4
  261. claude_mpm/services/skills/__init__.py +18 -0
  262. claude_mpm/services/skills/git_skill_source_manager.py +1169 -0
  263. claude_mpm/services/skills/skill_discovery_service.py +568 -0
  264. claude_mpm/services/skills_config.py +547 -0
  265. claude_mpm/services/skills_deployer.py +955 -0
  266. claude_mpm/services/socketio/handlers/connection.py +1 -1
  267. claude_mpm/services/socketio/handlers/git.py +2 -2
  268. claude_mpm/services/socketio/server/core.py +1 -4
  269. claude_mpm/services/socketio/server/main.py +1 -3
  270. claude_mpm/services/system_instructions_service.py +1 -3
  271. claude_mpm/services/unified/analyzer_strategies/performance_analyzer.py +0 -3
  272. claude_mpm/services/unified/analyzer_strategies/security_analyzer.py +0 -1
  273. claude_mpm/services/unified/deployment_strategies/cloud_strategies.py +1 -1
  274. claude_mpm/services/unified/deployment_strategies/vercel.py +1 -5
  275. claude_mpm/services/unified/unified_deployment.py +1 -5
  276. claude_mpm/services/version_control/conflict_resolution.py +6 -4
  277. claude_mpm/services/visualization/__init__.py +1 -5
  278. claude_mpm/services/visualization/mermaid_generator.py +2 -3
  279. claude_mpm/skills/__init__.py +3 -3
  280. claude_mpm/skills/agent_skills_injector.py +42 -49
  281. claude_mpm/skills/bundled/infrastructure/env-manager/scripts/validate_env.py +576 -0
  282. claude_mpm/skills/bundled/main/mcp-builder/scripts/connections.py +17 -10
  283. claude_mpm/skills/bundled/main/mcp-builder/scripts/evaluation.py +92 -39
  284. claude_mpm/skills/bundled/main/skill-creator/scripts/init_skill.py +13 -12
  285. claude_mpm/skills/bundled/main/skill-creator/scripts/package_skill.py +5 -3
  286. claude_mpm/skills/bundled/main/skill-creator/scripts/quick_validate.py +19 -12
  287. claude_mpm/skills/bundled/performance-profiling.md +6 -0
  288. claude_mpm/skills/bundled/testing/webapp-testing/examples/console_logging.py +6 -6
  289. claude_mpm/skills/bundled/testing/webapp-testing/examples/element_discovery.py +13 -9
  290. claude_mpm/skills/bundled/testing/webapp-testing/examples/static_html_automation.py +8 -8
  291. claude_mpm/skills/bundled/testing/webapp-testing/scripts/with_server.py +37 -15
  292. claude_mpm/skills/skills_registry.py +44 -48
  293. claude_mpm/skills/skills_service.py +117 -108
  294. claude_mpm/templates/questions/__init__.py +38 -0
  295. claude_mpm/templates/questions/base.py +193 -0
  296. claude_mpm/templates/questions/pr_strategy.py +311 -0
  297. claude_mpm/templates/questions/project_init.py +385 -0
  298. claude_mpm/templates/questions/ticket_mgmt.py +394 -0
  299. claude_mpm/tools/__main__.py +8 -8
  300. claude_mpm/tools/code_tree_analyzer/__init__.py +45 -0
  301. claude_mpm/tools/code_tree_analyzer/analysis.py +299 -0
  302. claude_mpm/tools/code_tree_analyzer/cache.py +131 -0
  303. claude_mpm/tools/code_tree_analyzer/core.py +380 -0
  304. claude_mpm/tools/code_tree_analyzer/discovery.py +403 -0
  305. claude_mpm/tools/code_tree_analyzer/events.py +168 -0
  306. claude_mpm/tools/code_tree_analyzer/gitignore.py +308 -0
  307. claude_mpm/tools/code_tree_analyzer/models.py +39 -0
  308. claude_mpm/tools/code_tree_analyzer/multilang_analyzer.py +224 -0
  309. claude_mpm/tools/code_tree_analyzer/python_analyzer.py +284 -0
  310. claude_mpm/utils/agent_dependency_loader.py +80 -13
  311. claude_mpm/utils/agent_filters.py +288 -0
  312. claude_mpm/utils/dependency_cache.py +3 -1
  313. claude_mpm/utils/gitignore.py +244 -0
  314. claude_mpm/utils/log_cleanup.py +3 -3
  315. claude_mpm/utils/migration.py +372 -0
  316. claude_mpm/utils/progress.py +387 -0
  317. claude_mpm/utils/robust_installer.py +3 -5
  318. claude_mpm/utils/structured_questions.py +619 -0
  319. {claude_mpm-4.20.3.dist-info → claude_mpm-5.1.8.dist-info}/METADATA +496 -65
  320. {claude_mpm-4.20.3.dist-info → claude_mpm-5.1.8.dist-info}/RECORD +328 -416
  321. claude_mpm/agents/templates/.claude-mpm/memories/README.md +0 -17
  322. claude_mpm/agents/templates/.claude-mpm/memories/engineer_memories.md +0 -3
  323. claude_mpm/agents/templates/agent-manager.json +0 -273
  324. claude_mpm/agents/templates/agentic-coder-optimizer.json +0 -248
  325. claude_mpm/agents/templates/api_qa.json +0 -180
  326. claude_mpm/agents/templates/circuit_breakers.md +0 -638
  327. claude_mpm/agents/templates/clerk-ops.json +0 -235
  328. claude_mpm/agents/templates/code_analyzer.json +0 -101
  329. claude_mpm/agents/templates/content-agent.json +0 -358
  330. claude_mpm/agents/templates/dart_engineer.json +0 -307
  331. claude_mpm/agents/templates/data_engineer.json +0 -225
  332. claude_mpm/agents/templates/documentation.json +0 -211
  333. claude_mpm/agents/templates/engineer.json +0 -210
  334. claude_mpm/agents/templates/gcp_ops_agent.json +0 -253
  335. claude_mpm/agents/templates/golang_engineer.json +0 -270
  336. claude_mpm/agents/templates/imagemagick.json +0 -264
  337. claude_mpm/agents/templates/java_engineer.json +0 -346
  338. claude_mpm/agents/templates/local_ops_agent.json +0 -1840
  339. claude_mpm/agents/templates/logs/prompts/agent_engineer_20250826_014258_728.md +0 -39
  340. claude_mpm/agents/templates/logs/prompts/agent_engineer_20250901_010124_142.md +0 -400
  341. claude_mpm/agents/templates/memory_manager.json +0 -158
  342. claude_mpm/agents/templates/nextjs_engineer.json +0 -285
  343. claude_mpm/agents/templates/ops.json +0 -185
  344. claude_mpm/agents/templates/php-engineer.json +0 -281
  345. claude_mpm/agents/templates/product_owner.json +0 -338
  346. claude_mpm/agents/templates/project_organizer.json +0 -140
  347. claude_mpm/agents/templates/prompt-engineer.json +0 -737
  348. claude_mpm/agents/templates/python_engineer.json +0 -387
  349. claude_mpm/agents/templates/qa.json +0 -242
  350. claude_mpm/agents/templates/react_engineer.json +0 -238
  351. claude_mpm/agents/templates/refactoring_engineer.json +0 -276
  352. claude_mpm/agents/templates/research.json +0 -188
  353. claude_mpm/agents/templates/ruby-engineer.json +0 -280
  354. claude_mpm/agents/templates/rust_engineer.json +0 -275
  355. claude_mpm/agents/templates/security.json +0 -202
  356. claude_mpm/agents/templates/svelte-engineer.json +0 -225
  357. claude_mpm/agents/templates/ticketing.json +0 -177
  358. claude_mpm/agents/templates/typescript_engineer.json +0 -285
  359. claude_mpm/agents/templates/vercel_ops_agent.json +0 -412
  360. claude_mpm/agents/templates/version_control.json +0 -157
  361. claude_mpm/agents/templates/web_qa.json +0 -399
  362. claude_mpm/agents/templates/web_ui.json +0 -189
  363. claude_mpm/cli/commands/mpm_init.py +0 -2093
  364. claude_mpm/commands/mpm-tickets.md +0 -102
  365. claude_mpm/dashboard/.claude-mpm/socketio-instances.json +0 -1
  366. claude_mpm/dashboard/react/components/DataInspector/DataInspector.module.css +0 -188
  367. claude_mpm/dashboard/react/components/EventViewer/EventViewer.module.css +0 -156
  368. claude_mpm/dashboard/react/components/shared/ConnectionStatus.module.css +0 -38
  369. claude_mpm/dashboard/react/components/shared/FilterBar.module.css +0 -92
  370. claude_mpm/dashboard/static/archive/activity_dashboard_fixed.html +0 -248
  371. claude_mpm/dashboard/static/archive/activity_dashboard_test.html +0 -61
  372. claude_mpm/dashboard/static/archive/test_activity_connection.html +0 -179
  373. claude_mpm/dashboard/static/archive/test_claude_tree_tab.html +0 -68
  374. claude_mpm/dashboard/static/archive/test_dashboard.html +0 -409
  375. claude_mpm/dashboard/static/archive/test_dashboard_fixed.html +0 -519
  376. claude_mpm/dashboard/static/archive/test_dashboard_verification.html +0 -181
  377. claude_mpm/dashboard/static/archive/test_file_data.html +0 -315
  378. claude_mpm/dashboard/static/archive/test_file_tree_empty_state.html +0 -243
  379. claude_mpm/dashboard/static/archive/test_file_tree_fix.html +0 -234
  380. claude_mpm/dashboard/static/archive/test_file_tree_rename.html +0 -117
  381. claude_mpm/dashboard/static/archive/test_file_tree_tab.html +0 -115
  382. claude_mpm/dashboard/static/archive/test_file_viewer.html +0 -224
  383. claude_mpm/dashboard/static/archive/test_final_activity.html +0 -220
  384. claude_mpm/dashboard/static/archive/test_tab_fix.html +0 -139
  385. claude_mpm/dashboard/static/built/assets/events.DjpNxWNo.css +0 -1
  386. claude_mpm/dashboard/static/built/components/activity-tree.js +0 -2
  387. claude_mpm/dashboard/static/built/components/agent-hierarchy.js +0 -777
  388. claude_mpm/dashboard/static/built/components/agent-inference.js +0 -2
  389. claude_mpm/dashboard/static/built/components/build-tracker.js +0 -333
  390. claude_mpm/dashboard/static/built/components/code-simple.js +0 -857
  391. claude_mpm/dashboard/static/built/components/code-tree/tree-breadcrumb.js +0 -353
  392. claude_mpm/dashboard/static/built/components/code-tree/tree-constants.js +0 -235
  393. claude_mpm/dashboard/static/built/components/code-tree/tree-search.js +0 -409
  394. claude_mpm/dashboard/static/built/components/code-tree/tree-utils.js +0 -435
  395. claude_mpm/dashboard/static/built/components/code-tree.js +0 -2
  396. claude_mpm/dashboard/static/built/components/code-viewer.js +0 -2
  397. claude_mpm/dashboard/static/built/components/connection-debug.js +0 -654
  398. claude_mpm/dashboard/static/built/components/diff-viewer.js +0 -891
  399. claude_mpm/dashboard/static/built/components/event-processor.js +0 -2
  400. claude_mpm/dashboard/static/built/components/event-viewer.js +0 -2
  401. claude_mpm/dashboard/static/built/components/export-manager.js +0 -2
  402. claude_mpm/dashboard/static/built/components/file-change-tracker.js +0 -443
  403. claude_mpm/dashboard/static/built/components/file-change-viewer.js +0 -690
  404. claude_mpm/dashboard/static/built/components/file-tool-tracker.js +0 -2
  405. claude_mpm/dashboard/static/built/components/file-viewer.js +0 -2
  406. claude_mpm/dashboard/static/built/components/hud-library-loader.js +0 -2
  407. claude_mpm/dashboard/static/built/components/hud-manager.js +0 -2
  408. claude_mpm/dashboard/static/built/components/hud-visualizer.js +0 -2
  409. claude_mpm/dashboard/static/built/components/module-viewer.js +0 -2
  410. claude_mpm/dashboard/static/built/components/nav-bar.js +0 -145
  411. claude_mpm/dashboard/static/built/components/page-structure.js +0 -429
  412. claude_mpm/dashboard/static/built/components/session-manager.js +0 -2
  413. claude_mpm/dashboard/static/built/components/socket-manager.js +0 -2
  414. claude_mpm/dashboard/static/built/components/ui-state-manager.js +0 -2
  415. claude_mpm/dashboard/static/built/components/unified-data-viewer.js +0 -2
  416. claude_mpm/dashboard/static/built/components/working-directory.js +0 -2
  417. claude_mpm/dashboard/static/built/connection-manager.js +0 -536
  418. claude_mpm/dashboard/static/built/dashboard.js +0 -2
  419. claude_mpm/dashboard/static/built/extension-error-handler.js +0 -164
  420. claude_mpm/dashboard/static/built/react/events.js +0 -30
  421. claude_mpm/dashboard/static/built/shared/dom-helpers.js +0 -396
  422. claude_mpm/dashboard/static/built/shared/event-bus.js +0 -330
  423. claude_mpm/dashboard/static/built/shared/event-filter-service.js +0 -540
  424. claude_mpm/dashboard/static/built/shared/logger.js +0 -385
  425. claude_mpm/dashboard/static/built/shared/page-structure.js +0 -249
  426. claude_mpm/dashboard/static/built/shared/tooltip-service.js +0 -253
  427. claude_mpm/dashboard/static/built/socket-client.js +0 -2
  428. claude_mpm/dashboard/static/built/tab-isolation-fix.js +0 -185
  429. claude_mpm/dashboard/static/dist/assets/events.DjpNxWNo.css +0 -1
  430. claude_mpm/dashboard/static/dist/components/activity-tree.js +0 -2
  431. claude_mpm/dashboard/static/dist/components/agent-inference.js +0 -2
  432. claude_mpm/dashboard/static/dist/components/code-tree.js +0 -2
  433. claude_mpm/dashboard/static/dist/components/code-viewer.js +0 -2
  434. claude_mpm/dashboard/static/dist/components/event-processor.js +0 -2
  435. claude_mpm/dashboard/static/dist/components/event-viewer.js +0 -2
  436. claude_mpm/dashboard/static/dist/components/export-manager.js +0 -2
  437. claude_mpm/dashboard/static/dist/components/file-tool-tracker.js +0 -2
  438. claude_mpm/dashboard/static/dist/components/file-viewer.js +0 -2
  439. claude_mpm/dashboard/static/dist/components/hud-library-loader.js +0 -2
  440. claude_mpm/dashboard/static/dist/components/hud-manager.js +0 -2
  441. claude_mpm/dashboard/static/dist/components/hud-visualizer.js +0 -2
  442. claude_mpm/dashboard/static/dist/components/module-viewer.js +0 -2
  443. claude_mpm/dashboard/static/dist/components/session-manager.js +0 -2
  444. claude_mpm/dashboard/static/dist/components/socket-manager.js +0 -2
  445. claude_mpm/dashboard/static/dist/components/ui-state-manager.js +0 -2
  446. claude_mpm/dashboard/static/dist/components/unified-data-viewer.js +0 -2
  447. claude_mpm/dashboard/static/dist/components/working-directory.js +0 -2
  448. claude_mpm/dashboard/static/dist/dashboard.js +0 -2
  449. claude_mpm/dashboard/static/dist/react/events.js +0 -30
  450. claude_mpm/dashboard/static/dist/socket-client.js +0 -2
  451. claude_mpm/dashboard/static/events.html +0 -607
  452. claude_mpm/dashboard/static/index.html +0 -635
  453. claude_mpm/dashboard/static/js/shared/dom-helpers.js +0 -396
  454. claude_mpm/dashboard/static/js/shared/event-bus.js +0 -330
  455. claude_mpm/dashboard/static/js/shared/logger.js +0 -385
  456. claude_mpm/dashboard/static/js/shared/tooltip-service.js +0 -253
  457. claude_mpm/dashboard/static/js/stores/dashboard-store.js +0 -562
  458. claude_mpm/dashboard/static/legacy/activity.html +0 -736
  459. claude_mpm/dashboard/static/legacy/agents.html +0 -786
  460. claude_mpm/dashboard/static/legacy/files.html +0 -747
  461. claude_mpm/dashboard/static/legacy/tools.html +0 -831
  462. claude_mpm/dashboard/static/monitors.html +0 -431
  463. claude_mpm/dashboard/static/production/events.html +0 -659
  464. claude_mpm/dashboard/static/production/main.html +0 -698
  465. claude_mpm/dashboard/static/production/monitors.html +0 -483
  466. claude_mpm/dashboard/static/test-archive/dashboard.html +0 -635
  467. claude_mpm/dashboard/static/test-archive/debug-events.html +0 -147
  468. claude_mpm/dashboard/static/test-archive/test-navigation.html +0 -256
  469. claude_mpm/dashboard/static/test-archive/test-react-exports.html +0 -180
  470. claude_mpm/dashboard/static/test-archive/test_debug.html +0 -25
  471. claude_mpm/skills/bundled/collaboration/brainstorming/SKILL.md +0 -75
  472. claude_mpm/skills/bundled/collaboration/dispatching-parallel-agents/SKILL.md +0 -184
  473. claude_mpm/skills/bundled/collaboration/requesting-code-review/SKILL.md +0 -107
  474. claude_mpm/skills/bundled/collaboration/requesting-code-review/code-reviewer.md +0 -146
  475. claude_mpm/skills/bundled/collaboration/writing-plans/SKILL.md +0 -118
  476. claude_mpm/skills/bundled/debugging/root-cause-tracing/SKILL.md +0 -177
  477. claude_mpm/skills/bundled/debugging/systematic-debugging/CREATION-LOG.md +0 -119
  478. claude_mpm/skills/bundled/debugging/systematic-debugging/SKILL.md +0 -148
  479. claude_mpm/skills/bundled/debugging/systematic-debugging/references/anti-patterns.md +0 -483
  480. claude_mpm/skills/bundled/debugging/systematic-debugging/references/examples.md +0 -452
  481. claude_mpm/skills/bundled/debugging/systematic-debugging/references/troubleshooting.md +0 -449
  482. claude_mpm/skills/bundled/debugging/systematic-debugging/references/workflow.md +0 -411
  483. claude_mpm/skills/bundled/debugging/systematic-debugging/test-academic.md +0 -14
  484. claude_mpm/skills/bundled/debugging/systematic-debugging/test-pressure-1.md +0 -58
  485. claude_mpm/skills/bundled/debugging/systematic-debugging/test-pressure-2.md +0 -68
  486. claude_mpm/skills/bundled/debugging/systematic-debugging/test-pressure-3.md +0 -69
  487. claude_mpm/skills/bundled/debugging/verification-before-completion/SKILL.md +0 -175
  488. claude_mpm/skills/bundled/debugging/verification-before-completion/references/common-failures.md +0 -213
  489. claude_mpm/skills/bundled/debugging/verification-before-completion/references/gate-function.md +0 -314
  490. claude_mpm/skills/bundled/debugging/verification-before-completion/references/verification-patterns.md +0 -227
  491. claude_mpm/skills/bundled/main/artifacts-builder/SKILL.md +0 -74
  492. claude_mpm/skills/bundled/main/internal-comms/SKILL.md +0 -32
  493. claude_mpm/skills/bundled/main/internal-comms/examples/3p-updates.md +0 -47
  494. claude_mpm/skills/bundled/main/internal-comms/examples/company-newsletter.md +0 -65
  495. claude_mpm/skills/bundled/main/internal-comms/examples/faq-answers.md +0 -30
  496. claude_mpm/skills/bundled/main/internal-comms/examples/general-comms.md +0 -16
  497. claude_mpm/skills/bundled/main/mcp-builder/SKILL.md +0 -328
  498. claude_mpm/skills/bundled/main/mcp-builder/reference/evaluation.md +0 -602
  499. claude_mpm/skills/bundled/main/mcp-builder/reference/mcp_best_practices.md +0 -915
  500. claude_mpm/skills/bundled/main/mcp-builder/reference/node_mcp_server.md +0 -916
  501. claude_mpm/skills/bundled/main/mcp-builder/reference/python_mcp_server.md +0 -752
  502. claude_mpm/skills/bundled/main/skill-creator/SKILL.md +0 -209
  503. claude_mpm/skills/bundled/testing/condition-based-waiting/SKILL.md +0 -123
  504. claude_mpm/skills/bundled/testing/test-driven-development/SKILL.md +0 -145
  505. claude_mpm/skills/bundled/testing/test-driven-development/references/anti-patterns.md +0 -543
  506. claude_mpm/skills/bundled/testing/test-driven-development/references/examples.md +0 -741
  507. claude_mpm/skills/bundled/testing/test-driven-development/references/integration.md +0 -470
  508. claude_mpm/skills/bundled/testing/test-driven-development/references/philosophy.md +0 -458
  509. claude_mpm/skills/bundled/testing/test-driven-development/references/workflow.md +0 -639
  510. claude_mpm/skills/bundled/testing/testing-anti-patterns/SKILL.md +0 -304
  511. claude_mpm/skills/bundled/testing/webapp-testing/SKILL.md +0 -96
  512. claude_mpm/tools/code_tree_analyzer.py +0 -1825
  513. /claude_mpm/agents/templates/{git_file_tracking.md → git-file-tracking.md} +0 -0
  514. /claude_mpm/agents/templates/{pm_examples.md → pm-examples.md} +0 -0
  515. /claude_mpm/agents/templates/{response_format.md → response-format.md} +0 -0
  516. /claude_mpm/agents/templates/{validation_templates.md → validation-templates.md} +0 -0
  517. {claude_mpm-4.20.3.dist-info → claude_mpm-5.1.8.dist-info}/WHEEL +0 -0
  518. {claude_mpm-4.20.3.dist-info → claude_mpm-5.1.8.dist-info}/entry_points.txt +0 -0
  519. {claude_mpm-4.20.3.dist-info → claude_mpm-5.1.8.dist-info}/licenses/LICENSE +0 -0
  520. {claude_mpm-4.20.3.dist-info → claude_mpm-5.1.8.dist-info}/top_level.txt +0 -0
@@ -228,8 +228,8 @@ class AgentDisplay:
228
228
  [bold]Model:[/bold] {model}
229
229
  [bold]Agent Version:[/bold] {agent_version}
230
230
  [bold]Schema Version:[/bold] {schema_version}
231
- [bold]Tags:[/bold] {', '.join(tags) if tags else 'None'}
232
- [bold]Tools:[/bold] {', '.join(tools[:5]) if tools else 'None'}{'...' if len(tools) > 5 else ''}
231
+ [bold]Tags:[/bold] {", ".join(tags) if tags else "None"}
232
+ [bold]Tools:[/bold] {", ".join(tools[:5]) if tools else "None"}{"..." if len(tools) > 5 else ""}
233
233
  """
234
234
  except Exception:
235
235
  pass
@@ -237,9 +237,9 @@ class AgentDisplay:
237
237
  # Create detail panel
238
238
  detail_text = f"""
239
239
  [bold]Name:[/bold] {agent.name}
240
- [bold]Status:[/bold] {'[green]Enabled[/green]' if self.agent_manager.is_agent_enabled(agent.name) else '[red]Disabled[/red]'}
240
+ [bold]Status:[/bold] {"[green]Enabled[/green]" if self.agent_manager.is_agent_enabled(agent.name) else "[red]Disabled[/red]"}
241
241
  [bold]Template Path:[/bold] {template_path}
242
- [bold]Is System Template:[/bold] {'Yes' if str(template_path).startswith(str(self.agent_manager.templates_dir)) else 'No (Custom)'}
242
+ [bold]Is System Template:[/bold] {"Yes" if str(template_path).startswith(str(self.agent_manager.templates_dir)) else "No (Custom)"}
243
243
  {extra_info}
244
244
  """
245
245
 
@@ -14,12 +14,13 @@ DESIGN DECISIONS:
14
14
  import os
15
15
  from pathlib import Path
16
16
 
17
+ import questionary
18
+ from questionary import Style
17
19
  from rich.box import ROUNDED
18
20
  from rich.columns import Columns
19
21
  from rich.console import Console
20
22
  from rich.panel import Panel
21
23
  from rich.prompt import Prompt
22
- from rich.table import Table
23
24
  from rich.text import Text
24
25
 
25
26
 
@@ -33,6 +34,16 @@ class ConfigNavigation:
33
34
  - Claude MPM launch integration
34
35
  """
35
36
 
37
+ # Questionary style matching Rich cyan theme
38
+ QUESTIONARY_STYLE = Style(
39
+ [
40
+ ("selected", "fg:cyan bold"),
41
+ ("pointer", "fg:cyan bold"),
42
+ ("highlighted", "fg:cyan"),
43
+ ("question", "fg:cyan bold"),
44
+ ]
45
+ )
46
+
36
47
  def __init__(self, console: Console, project_dir: Path):
37
48
  """Initialize navigation handler.
38
49
 
@@ -81,56 +92,62 @@ class ConfigNavigation:
81
92
  self.console.print()
82
93
 
83
94
  def show_main_menu(self) -> str:
84
- """Show the main menu and get user choice.
95
+ """Show the main menu and get user choice with arrow-key navigation.
85
96
 
86
97
  Displays main configuration menu with options:
87
- 1. Agent Management
88
- 2. Skills Management
89
- 3. Template Editing
90
- 4. Behavior Files
91
- 5. Startup Configuration
92
- 6. Switch Scope
93
- 7. Version Info
94
- l. Save & Launch
95
- q. Quit
98
+ - Agent Management
99
+ - Skills Management
100
+ - Template Editing
101
+ - Behavior Files
102
+ - Startup Configuration
103
+ - Switch Scope
104
+ - Version Info
105
+ - Save & Launch
106
+ - Quit
96
107
 
97
108
  Returns:
98
- User's menu choice (lowercase, stripped)
109
+ User's menu choice mapped to original key (1-7, l, q) for
110
+ backward compatibility with existing code
99
111
  """
100
- menu_items = [
101
- ("1", "Agent Management", "Enable/disable agents and customize settings"),
102
- ("2", "Skills Management", "Configure skills for agents"),
103
- ("3", "Template Editing", "Edit agent JSON templates"),
104
- ("4", "Behavior Files", "Manage identity and workflow configurations"),
105
- (
106
- "5",
107
- "Startup Configuration",
108
- "Configure MCP services and agents to start",
109
- ),
110
- ("6", "Switch Scope", f"Current: {self.current_scope}"),
111
- ("7", "Version Info", "Display MPM and Claude versions"),
112
- ("l", "Save & Launch", "Save all changes and start Claude MPM"),
113
- ("q", "Quit", "Exit without launching"),
114
- ]
115
-
116
- table = Table(show_header=False, box=None, padding=(0, 2))
117
- table.add_column("Key", style="bold blue", width=4) # Bolder shortcuts
118
- table.add_column("Option", style="bold", width=24) # Wider for titles
119
- table.add_column("Description", style="") # Use default terminal color
120
-
121
- for key, option, desc in menu_items:
122
- table.add_row(f"\\[{key}]", option, desc)
123
-
124
- menu_panel = Panel(
125
- table, title="[bold]Main Menu[/bold]", box=ROUNDED, style="green"
126
- )
127
-
128
- self.console.print(menu_panel)
129
- self.console.print()
130
-
131
- choice = Prompt.ask("[bold blue]Select an option[/bold blue]", default="q")
132
- # Strip whitespace to handle leading/trailing spaces
133
- return choice.strip().lower()
112
+ try:
113
+ choice = questionary.select(
114
+ "Main Menu:",
115
+ choices=[
116
+ "Agent Management",
117
+ "Skills Management",
118
+ "Template Editing",
119
+ "Behavior Files",
120
+ "Startup Configuration",
121
+ f"Switch Scope (Current: {self.current_scope})",
122
+ "Version Info",
123
+ questionary.Separator(),
124
+ "Save & Launch Claude MPM",
125
+ "Quit",
126
+ ],
127
+ style=self.QUESTIONARY_STYLE,
128
+ ).ask()
129
+
130
+ if choice is None:
131
+ return "q"
132
+
133
+ # Map natural language choices back to original key-based system
134
+ # for backward compatibility
135
+ choice_map = {
136
+ "Agent Management": "1",
137
+ "Skills Management": "2",
138
+ "Template Editing": "3",
139
+ "Behavior Files": "4",
140
+ "Startup Configuration": "5",
141
+ f"Switch Scope (Current: {self.current_scope})": "6",
142
+ "Version Info": "7",
143
+ "Save & Launch Claude MPM": "l",
144
+ "Quit": "q",
145
+ }
146
+
147
+ return choice_map.get(choice, "q")
148
+
149
+ except KeyboardInterrupt:
150
+ return "q"
134
151
 
135
152
  def switch_scope(self) -> None:
136
153
  """Switch between project and user scope.
@@ -693,9 +693,9 @@ def debug_hooks(args, logger):
693
693
  max_time = max(times)
694
694
 
695
695
  print(f"\n {hook.name}:")
696
- print(f" Average: {avg_time*1000:.2f}ms")
697
- print(f" Min: {min_time*1000:.2f}ms")
698
- print(f" Max: {max_time*1000:.2f}ms")
696
+ print(f" Average: {avg_time * 1000:.2f}ms")
697
+ print(f" Min: {min_time * 1000:.2f}ms")
698
+ print(f" Max: {max_time * 1000:.2f}ms")
699
699
 
700
700
  else:
701
701
  # Default: show summary
@@ -767,7 +767,7 @@ def debug_cache(args, logger):
767
767
  print(f" Location: {cache_dir}")
768
768
  print(f" Total Files: {file_count}")
769
769
  print(
770
- f" Total Size: {total_size:,} bytes ({total_size/1024/1024:.2f} MB)"
770
+ f" Total Size: {total_size:,} bytes ({total_size / 1024 / 1024:.2f} MB)"
771
771
  )
772
772
 
773
773
  print("\n📁 Categories:")
@@ -871,7 +871,7 @@ def debug_cache(args, logger):
871
871
 
872
872
  print(f"Location: {cache_dir}")
873
873
  print(f"Files: {file_count}")
874
- print(f"Size: {total_size:,} bytes ({total_size/1024/1024:.2f} MB)")
874
+ print(f"Size: {total_size:,} bytes ({total_size / 1024 / 1024:.2f} MB)")
875
875
  else:
876
876
  print("No cache found")
877
877
 
@@ -998,22 +998,22 @@ def debug_performance(args, logger):
998
998
  # Memory info
999
999
  mem = psutil.virtual_memory()
1000
1000
  print("\n💾 Memory:")
1001
- print(f" Total: {mem.total/1024/1024/1024:.2f} GB")
1002
- print(f" Used: {mem.used/1024/1024/1024:.2f} GB ({mem.percent}%)")
1003
- print(f" Available: {mem.available/1024/1024/1024:.2f} GB")
1001
+ print(f" Total: {mem.total / 1024 / 1024 / 1024:.2f} GB")
1002
+ print(f" Used: {mem.used / 1024 / 1024 / 1024:.2f} GB ({mem.percent}%)")
1003
+ print(f" Available: {mem.available / 1024 / 1024 / 1024:.2f} GB")
1004
1004
 
1005
1005
  # Disk info
1006
1006
  disk = psutil.disk_usage("/")
1007
1007
  print("\n💿 Disk:")
1008
- print(f" Total: {disk.total/1024/1024/1024:.2f} GB")
1009
- print(f" Used: {disk.used/1024/1024/1024:.2f} GB ({disk.percent}%)")
1010
- print(f" Free: {disk.free/1024/1024/1024:.2f} GB")
1008
+ print(f" Total: {disk.total / 1024 / 1024 / 1024:.2f} GB")
1009
+ print(f" Used: {disk.used / 1024 / 1024 / 1024:.2f} GB ({disk.percent}%)")
1010
+ print(f" Free: {disk.free / 1024 / 1024 / 1024:.2f} GB")
1011
1011
 
1012
1012
  # Process info
1013
1013
  process = psutil.Process()
1014
1014
  print("\n📦 Current Process:")
1015
1015
  print(f" PID: {process.pid}")
1016
- print(f" Memory: {process.memory_info().rss/1024/1024:.2f} MB")
1016
+ print(f" Memory: {process.memory_info().rss / 1024 / 1024:.2f} MB")
1017
1017
  print(f" CPU: {process.cpu_percent()}%")
1018
1018
  print(f" Threads: {process.num_threads()}")
1019
1019
 
@@ -60,6 +60,7 @@ def add_doctor_parser(subparsers):
60
60
  "filesystem",
61
61
  "claude",
62
62
  "agents",
63
+ "agent-sources",
63
64
  "mcp",
64
65
  "monitor",
65
66
  "common",
@@ -116,6 +117,8 @@ def doctor_command(args):
116
117
  Exit code (0 for success, 1 for warnings, 2 for errors)
117
118
  """
118
119
  # Configure logging
120
+ from datetime import datetime, timezone
121
+
119
122
  from claude_mpm.core.logging_utils import get_logger
120
123
 
121
124
  logger = get_logger(__name__)
@@ -123,13 +126,18 @@ def doctor_command(args):
123
126
  # Handle output file parameter - support both --output and --output-file
124
127
  output_file = args.output or args.output_file
125
128
  if output_file is not None:
126
- # If output_file is specified without a path, use default
129
+ # If output_file is specified without a path, use default with timestamp
127
130
  if str(output_file) == ".":
128
- output_file = Path("mpm-doctor-report.md")
131
+ timestamp = datetime.now(timezone.utc).strftime("%Y%m%d-%H%M%S")
132
+ output_file = Path(f"mpm-doctor-report-{timestamp}.md")
129
133
  elif not str(output_file).endswith((".md", ".json", ".txt")):
130
134
  # Add .md extension if no extension provided
131
135
  output_file = Path(str(output_file) + ".md")
132
136
 
137
+ # Create parent directories if needed
138
+ output_file = output_file.absolute()
139
+ output_file.parent.mkdir(parents=True, exist_ok=True)
140
+
133
141
  # Determine output format
134
142
  if args.json:
135
143
  output_format = "json"
@@ -0,0 +1,277 @@
1
+ """CLI commands for managing hook error memory.
2
+
3
+ WHY this command is needed:
4
+ - Users need visibility into what hooks are failing
5
+ - Must be able to clear error memory to retry failed hooks
6
+ - Provides diagnostics for troubleshooting
7
+ - Makes error memory accessible without manual file editing
8
+ """
9
+
10
+ import json
11
+ from pathlib import Path
12
+
13
+ import click
14
+
15
+ from claude_mpm.core.hook_error_memory import get_hook_error_memory
16
+
17
+
18
+ @click.group(name="hook-errors")
19
+ def hook_errors_group():
20
+ """Manage hook error memory and diagnostics.
21
+
22
+ The hook error memory system tracks failing hooks to prevent
23
+ repeated execution of known-failing operations.
24
+ """
25
+
26
+
27
+ @hook_errors_group.command(name="list")
28
+ @click.option(
29
+ "--format",
30
+ type=click.Choice(["table", "json"], case_sensitive=False),
31
+ default="table",
32
+ help="Output format (table or json)",
33
+ )
34
+ @click.option(
35
+ "--hook-type",
36
+ help="Filter by hook type (e.g., PreToolUse, PostToolUse)",
37
+ )
38
+ def list_errors(format, hook_type):
39
+ """List all recorded hook errors.
40
+
41
+ Shows errors that have been detected during hook execution,
42
+ including failure counts and last seen timestamps.
43
+
44
+ Examples:
45
+ claude-mpm hook-errors list
46
+ claude-mpm hook-errors list --format json
47
+ claude-mpm hook-errors list --hook-type PreToolUse
48
+ """
49
+ error_memory = get_hook_error_memory()
50
+
51
+ # Filter errors if hook type specified
52
+ errors = error_memory.errors
53
+ if hook_type:
54
+ errors = {
55
+ key: data for key, data in errors.items() if data["hook_type"] == hook_type
56
+ }
57
+
58
+ if not errors:
59
+ if hook_type:
60
+ click.echo(f"No errors recorded for hook type: {hook_type}")
61
+ else:
62
+ click.echo("No errors recorded. Hook system is healthy! ✅")
63
+ return
64
+
65
+ if format == "json":
66
+ # JSON output
67
+ click.echo(json.dumps(errors, indent=2))
68
+ else:
69
+ # Table output
70
+ click.echo("\n" + "=" * 80)
71
+ click.echo("Hook Error Memory Report")
72
+ click.echo("=" * 80)
73
+
74
+ for key, data in errors.items():
75
+ click.echo(f"\n🔴 Error: {data['type']}")
76
+ click.echo(f" Hook Type: {data['hook_type']}")
77
+ click.echo(f" Details: {data['details']}")
78
+ click.echo(f" Match: {data['match']}")
79
+ click.echo(f" Count: {data['count']} occurrences")
80
+ click.echo(f" First Seen: {data['first_seen']}")
81
+ click.echo(f" Last Seen: {data['last_seen']}")
82
+
83
+ click.echo("\n" + "=" * 80)
84
+ click.echo(f"Total unique errors: {len(errors)}")
85
+ click.echo(f"Memory file: {error_memory.memory_file}")
86
+ click.echo("\nTo clear errors: claude-mpm hook-errors clear")
87
+
88
+
89
+ @hook_errors_group.command(name="summary")
90
+ def show_summary():
91
+ """Show summary statistics of hook errors.
92
+
93
+ Provides overview of error counts by type and hook type.
94
+
95
+ Example:
96
+ claude-mpm hook-errors summary
97
+ """
98
+ error_memory = get_hook_error_memory()
99
+ summary = error_memory.get_error_summary()
100
+
101
+ if summary["total_errors"] == 0:
102
+ click.echo("No errors recorded. Hook system is healthy! ✅")
103
+ return
104
+
105
+ click.echo("\n" + "=" * 80)
106
+ click.echo("Hook Error Summary")
107
+ click.echo("=" * 80)
108
+ click.echo("\n📊 Statistics:")
109
+ click.echo(f" Total Errors: {summary['total_errors']}")
110
+ click.echo(f" Unique Errors: {summary['unique_errors']}")
111
+
112
+ if summary["errors_by_type"]:
113
+ click.echo("\n🔍 Errors by Type:")
114
+ for error_type, count in summary["errors_by_type"].items():
115
+ click.echo(f" {error_type}: {count}")
116
+
117
+ if summary["errors_by_hook"]:
118
+ click.echo("\n🎣 Errors by Hook Type:")
119
+ for hook_type, count in summary["errors_by_hook"].items():
120
+ click.echo(f" {hook_type}: {count}")
121
+
122
+ click.echo(f"\n📁 Memory File: {summary['memory_file']}")
123
+ click.echo("\nFor detailed list: claude-mpm hook-errors list")
124
+
125
+
126
+ @hook_errors_group.command(name="clear")
127
+ @click.option(
128
+ "--hook-type",
129
+ help="Clear errors only for specific hook type",
130
+ )
131
+ @click.option(
132
+ "--yes",
133
+ "-y",
134
+ is_flag=True,
135
+ help="Skip confirmation prompt",
136
+ )
137
+ def clear_errors(hook_type, yes):
138
+ """Clear hook error memory to allow retry.
139
+
140
+ This removes error records, allowing previously failing hooks
141
+ to be executed again. Use this after fixing the underlying issue.
142
+
143
+ Examples:
144
+ claude-mpm hook-errors clear
145
+ claude-mpm hook-errors clear --hook-type PreToolUse
146
+ claude-mpm hook-errors clear -y # Skip confirmation
147
+ """
148
+ error_memory = get_hook_error_memory()
149
+
150
+ # Count errors to be cleared
151
+ if hook_type:
152
+ count = sum(
153
+ 1 for data in error_memory.errors.values() if data["hook_type"] == hook_type
154
+ )
155
+ scope = f"for hook type '{hook_type}'"
156
+ else:
157
+ count = len(error_memory.errors)
158
+ scope = "all hook types"
159
+
160
+ if count == 0:
161
+ click.echo(f"No errors to clear {scope}.")
162
+ return
163
+
164
+ # Confirm if not using -y flag
165
+ if not yes:
166
+ message = f"Clear {count} error(s) {scope}?"
167
+ if not click.confirm(message):
168
+ click.echo("Cancelled.")
169
+ return
170
+
171
+ # Clear errors
172
+ error_memory.clear_errors(hook_type)
173
+
174
+ click.echo(f"✅ Cleared {count} error(s) {scope}.")
175
+ click.echo("\nHooks will be retried on next execution.")
176
+
177
+
178
+ @hook_errors_group.command(name="diagnose")
179
+ @click.argument("hook_type", required=False)
180
+ def diagnose_errors(hook_type):
181
+ """Diagnose hook errors and suggest fixes.
182
+
183
+ Provides detailed diagnostics and actionable suggestions for
184
+ resolving hook errors.
185
+
186
+ Arguments:
187
+ HOOK_TYPE: Optional hook type to diagnose (e.g., PreToolUse)
188
+
189
+ Examples:
190
+ claude-mpm hook-errors diagnose
191
+ claude-mpm hook-errors diagnose PreToolUse
192
+ """
193
+ error_memory = get_hook_error_memory()
194
+
195
+ # Filter errors if hook type specified
196
+ errors = error_memory.errors
197
+ if hook_type:
198
+ errors = {
199
+ key: data for key, data in errors.items() if data["hook_type"] == hook_type
200
+ }
201
+
202
+ if not errors:
203
+ if hook_type:
204
+ click.echo(f"No errors to diagnose for hook type: {hook_type}")
205
+ else:
206
+ click.echo("No errors to diagnose. Hook system is healthy! ✅")
207
+ return
208
+
209
+ click.echo("\n" + "=" * 80)
210
+ click.echo("Hook Error Diagnostics")
211
+ click.echo("=" * 80)
212
+
213
+ for key, data in errors.items():
214
+ click.echo(f"\n🔴 Error: {data['type']}")
215
+ click.echo(f" Hook: {data['hook_type']}")
216
+ click.echo(f" Count: {data['count']} failures")
217
+
218
+ # Generate and show fix suggestion
219
+ error_info = {
220
+ "type": data["type"],
221
+ "details": data["details"],
222
+ "match": data["match"],
223
+ }
224
+ suggestion = error_memory.suggest_fix(error_info)
225
+
226
+ click.echo("\n" + "-" * 80)
227
+ click.echo(suggestion)
228
+ click.echo("-" * 80)
229
+
230
+ click.echo("\n" + "=" * 80)
231
+ click.echo("After fixing issues, clear errors to retry:")
232
+ click.echo(" claude-mpm hook-errors clear")
233
+
234
+
235
+ @hook_errors_group.command(name="status")
236
+ def show_status():
237
+ """Show hook error memory status.
238
+
239
+ Quick overview of hook error system state.
240
+
241
+ Example:
242
+ claude-mpm hook-errors status
243
+ """
244
+ error_memory = get_hook_error_memory()
245
+ summary = error_memory.get_error_summary()
246
+
247
+ click.echo("\n📊 Hook Error Memory Status")
248
+ click.echo("=" * 80)
249
+
250
+ if summary["total_errors"] == 0:
251
+ click.echo("✅ Status: Healthy (no errors recorded)")
252
+ else:
253
+ click.echo(f"⚠️ Status: {summary['total_errors']} error(s) recorded")
254
+ click.echo(f" Unique errors: {summary['unique_errors']}")
255
+
256
+ # Show which hooks are affected
257
+ if summary["errors_by_hook"]:
258
+ affected_hooks = list(summary["errors_by_hook"].keys())
259
+ click.echo(f" Affected hooks: {', '.join(affected_hooks)}")
260
+
261
+ click.echo(f"\n📁 Memory file: {summary['memory_file']}")
262
+ click.echo(f" Exists: {Path(summary['memory_file']).exists()}")
263
+
264
+ click.echo("\nCommands:")
265
+ click.echo(" claude-mpm hook-errors list # View detailed errors")
266
+ click.echo(" claude-mpm hook-errors diagnose # Get fix suggestions")
267
+ click.echo(" claude-mpm hook-errors clear # Clear and retry")
268
+
269
+
270
+ # Register the command group
271
+ def register_commands(cli):
272
+ """Register hook error commands with CLI.
273
+
274
+ Args:
275
+ cli: Click CLI group to register commands with
276
+ """
277
+ cli.add_command(hook_errors_group)
@@ -25,10 +25,7 @@ from rich.text import Text
25
25
 
26
26
  from claude_mpm.core.enums import ServiceState
27
27
 
28
- from ...services.local_ops import (
29
- StartConfig,
30
- UnifiedLocalOpsManager,
31
- )
28
+ from ...services.local_ops import StartConfig, UnifiedLocalOpsManager
32
29
  from ..shared import BaseCommand, CommandResult
33
30
 
34
31
 
@@ -295,7 +295,7 @@ class MCPInstallCommands:
295
295
 
296
296
  # Create backup
297
297
  backup_path = config_path.with_suffix(
298
- f'.backup.{datetime.now(timezone.utc).strftime("%Y%m%d_%H%M%S")}.json'
298
+ f".backup.{datetime.now(timezone.utc).strftime('%Y%m%d_%H%M%S')}.json"
299
299
  )
300
300
  try:
301
301
  config_path.rename(backup_path)
@@ -0,0 +1,73 @@
1
+ """MPM initialization command package.
2
+
3
+ This package provides comprehensive project initialization and update capabilities
4
+ for Claude Code and Claude MPM. It includes:
5
+
6
+ - Core command class (MPMInitCommand) for orchestrating initialization
7
+ - Click CLI commands for command-line interface
8
+ - Modular components for prompts, display, git analysis, and modes
9
+ - Support for multiple initialization modes (create, update, review, quick-update, catchup)
10
+
11
+ Main Components:
12
+ - core.py: MPMInitCommand class - main initialization orchestrator
13
+ - mpm_init_cli.py: Click command definitions and CLI entry points
14
+ - prompts.py: Prompt building functions for agent delegation
15
+ - display.py: Display and UI helper functions
16
+ - git_activity.py: Git history analysis and context building
17
+ - modes.py: Mode-specific handlers (review, dry-run, quick-update, etc.)
18
+
19
+ Public API:
20
+ - MPMInitCommand: Main command class (from core)
21
+ - mpm_init: Click command group (from mpm_init_cli)
22
+
23
+ Example Usage:
24
+ # Programmatic usage
25
+ from claude_mpm.cli.commands.mpm_init import MPMInitCommand
26
+ command = MPMInitCommand(project_path)
27
+ result = command.initialize_project()
28
+
29
+ # CLI usage (via Click)
30
+ from claude_mpm.cli.commands.mpm_init import mpm_init
31
+ # Command is registered with Click and invoked via CLI
32
+ """
33
+
34
+ # Import core components for re-export
35
+ from .core import MPMInitCommand
36
+
37
+ # Import the Click command group - this must be imported from parent level
38
+ # to avoid circular dependencies, as mpm_init_cli imports from core
39
+ # We'll handle this via late import in __all__
40
+
41
+ __all__ = [
42
+ # Main command class
43
+ "MPMInitCommand",
44
+ "core",
45
+ # Internal modules (for internal package use)
46
+ "display",
47
+ "git_activity",
48
+ "modes",
49
+ # Click CLI command (imported via __getattr__ to avoid circular import)
50
+ "mpm_init",
51
+ "prompts",
52
+ ]
53
+
54
+
55
+ def __getattr__(name):
56
+ """Lazy import to avoid circular dependencies.
57
+
58
+ This allows importing mpm_init Click command without importing
59
+ mpm_init_cli at module load time, which would cause circular imports.
60
+ """
61
+ if name == "mpm_init":
62
+ # Lazy import the Click command group
63
+ from ..mpm_init_cli import mpm_init as _mpm_init
64
+
65
+ return _mpm_init
66
+
67
+ # For internal module imports, import them directly
68
+ if name in ("display", "git_activity", "prompts", "modes", "core"):
69
+ import importlib
70
+
71
+ return importlib.import_module(f".{name}", __package__)
72
+
73
+ raise AttributeError(f"module {__name__!r} has no attribute {name!r}")