claude-mpm 4.25.10__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 (507) hide show
  1. claude_mpm/VERSION +1 -1
  2. claude_mpm/agents/BASE_PM.md +12 -0
  3. claude_mpm/agents/PM_INSTRUCTIONS.md +1055 -2230
  4. claude_mpm/agents/PM_INSTRUCTIONS_TEACH.md +1322 -0
  5. claude_mpm/agents/WORKFLOW.md +4 -4
  6. claude_mpm/agents/__init__.py +6 -0
  7. claude_mpm/agents/agent_loader.py +1 -4
  8. claude_mpm/agents/base_agent_loader.py +10 -35
  9. claude_mpm/agents/templates/{circuit_breakers.md → circuit-breakers.md} +576 -66
  10. claude_mpm/agents/templates/context-management-examples.md +544 -0
  11. claude_mpm/agents/templates/pr-workflow-examples.md +427 -0
  12. claude_mpm/agents/templates/research-gate-examples.md +669 -0
  13. claude_mpm/agents/templates/structured-questions-examples.md +615 -0
  14. claude_mpm/agents/templates/ticket-completeness-examples.md +139 -0
  15. claude_mpm/agents/templates/ticketing-examples.md +277 -0
  16. claude_mpm/cli/__init__.py +28 -3
  17. claude_mpm/cli/commands/__init__.py +2 -0
  18. claude_mpm/cli/commands/agent_source.py +774 -0
  19. claude_mpm/cli/commands/agent_state_manager.py +188 -30
  20. claude_mpm/cli/commands/agents.py +959 -36
  21. claude_mpm/cli/commands/agents_cleanup.py +210 -0
  22. claude_mpm/cli/commands/agents_discover.py +338 -0
  23. claude_mpm/cli/commands/auto_configure.py +537 -239
  24. claude_mpm/cli/commands/config.py +7 -4
  25. claude_mpm/cli/commands/configure.py +924 -45
  26. claude_mpm/cli/commands/configure_navigation.py +63 -46
  27. claude_mpm/cli/commands/doctor.py +10 -2
  28. claude_mpm/cli/commands/local_deploy.py +1 -4
  29. claude_mpm/cli/commands/postmortem.py +401 -0
  30. claude_mpm/cli/commands/run.py +1 -39
  31. claude_mpm/cli/commands/skill_source.py +694 -0
  32. claude_mpm/cli/commands/skills.py +322 -19
  33. claude_mpm/cli/executor.py +22 -3
  34. claude_mpm/cli/interactive/agent_wizard.py +1028 -43
  35. claude_mpm/cli/parsers/agent_source_parser.py +171 -0
  36. claude_mpm/cli/parsers/agents_parser.py +256 -4
  37. claude_mpm/cli/parsers/auto_configure_parser.py +13 -0
  38. claude_mpm/cli/parsers/base_parser.py +25 -0
  39. claude_mpm/cli/parsers/config_parser.py +96 -43
  40. claude_mpm/cli/parsers/skill_source_parser.py +169 -0
  41. claude_mpm/cli/parsers/skills_parser.py +7 -0
  42. claude_mpm/cli/parsers/source_parser.py +138 -0
  43. claude_mpm/cli/startup.py +456 -103
  44. claude_mpm/cli/startup_display.py +4 -4
  45. claude_mpm/commands/{mpm-auto-configure.md → mpm-agents-auto-configure.md} +9 -0
  46. claude_mpm/commands/mpm-agents-detect.md +9 -0
  47. claude_mpm/commands/{mpm-agents.md → mpm-agents-list.md} +9 -0
  48. claude_mpm/commands/mpm-agents-recommend.md +9 -0
  49. claude_mpm/commands/{mpm-config.md → mpm-config-view.md} +9 -0
  50. claude_mpm/commands/mpm-doctor.md +9 -0
  51. claude_mpm/commands/mpm-help.md +14 -2
  52. claude_mpm/commands/mpm-init.md +9 -0
  53. claude_mpm/commands/mpm-monitor.md +9 -0
  54. claude_mpm/commands/mpm-postmortem.md +123 -0
  55. claude_mpm/commands/{mpm-resume.md → mpm-session-resume.md} +9 -0
  56. claude_mpm/commands/mpm-status.md +9 -0
  57. claude_mpm/commands/{mpm-organize.md → mpm-ticket-organize.md} +9 -0
  58. claude_mpm/commands/mpm-ticket-view.md +552 -0
  59. claude_mpm/commands/mpm-version.md +9 -0
  60. claude_mpm/commands/mpm.md +10 -0
  61. claude_mpm/config/agent_presets.py +488 -0
  62. claude_mpm/config/agent_sources.py +325 -0
  63. claude_mpm/config/skill_presets.py +392 -0
  64. claude_mpm/config/skill_sources.py +590 -0
  65. claude_mpm/constants.py +1 -0
  66. claude_mpm/core/claude_runner.py +5 -34
  67. claude_mpm/core/config.py +16 -0
  68. claude_mpm/core/framework/__init__.py +3 -16
  69. claude_mpm/core/framework/loaders/file_loader.py +54 -101
  70. claude_mpm/core/framework/loaders/instruction_loader.py +25 -5
  71. claude_mpm/core/interactive_session.py +83 -7
  72. claude_mpm/core/oneshot_session.py +71 -8
  73. claude_mpm/core/protocols/__init__.py +23 -0
  74. claude_mpm/core/protocols/runner_protocol.py +103 -0
  75. claude_mpm/core/protocols/session_protocol.py +131 -0
  76. claude_mpm/core/shared/singleton_manager.py +11 -4
  77. claude_mpm/core/system_context.py +38 -0
  78. claude_mpm/core/unified_config.py +22 -0
  79. claude_mpm/experimental/cli_enhancements.py +1 -5
  80. claude_mpm/hooks/claude_hooks/__pycache__/__init__.cpython-313.pyc +0 -0
  81. claude_mpm/hooks/claude_hooks/__pycache__/event_handlers.cpython-313.pyc +0 -0
  82. claude_mpm/hooks/claude_hooks/__pycache__/hook_handler.cpython-313.pyc +0 -0
  83. claude_mpm/hooks/claude_hooks/__pycache__/memory_integration.cpython-313.pyc +0 -0
  84. claude_mpm/hooks/claude_hooks/__pycache__/response_tracking.cpython-313.pyc +0 -0
  85. claude_mpm/hooks/claude_hooks/__pycache__/tool_analysis.cpython-313.pyc +0 -0
  86. claude_mpm/hooks/claude_hooks/memory_integration.py +12 -1
  87. claude_mpm/hooks/claude_hooks/services/__pycache__/__init__.cpython-313.pyc +0 -0
  88. claude_mpm/hooks/claude_hooks/services/__pycache__/connection_manager_http.cpython-313.pyc +0 -0
  89. claude_mpm/hooks/claude_hooks/services/__pycache__/duplicate_detector.cpython-313.pyc +0 -0
  90. claude_mpm/hooks/claude_hooks/services/__pycache__/state_manager.cpython-313.pyc +0 -0
  91. claude_mpm/hooks/claude_hooks/services/__pycache__/subagent_processor.cpython-313.pyc +0 -0
  92. claude_mpm/hooks/failure_learning/__init__.py +2 -8
  93. claude_mpm/hooks/failure_learning/failure_detection_hook.py +1 -6
  94. claude_mpm/hooks/failure_learning/fix_detection_hook.py +1 -6
  95. claude_mpm/hooks/failure_learning/learning_extraction_hook.py +1 -6
  96. claude_mpm/hooks/kuzu_response_hook.py +1 -5
  97. claude_mpm/models/git_repository.py +198 -0
  98. claude_mpm/services/agents/agent_builder.py +45 -9
  99. claude_mpm/services/agents/agent_preset_service.py +238 -0
  100. claude_mpm/services/agents/agent_selection_service.py +484 -0
  101. claude_mpm/services/agents/auto_deploy_index_parser.py +569 -0
  102. claude_mpm/services/agents/cache_git_manager.py +621 -0
  103. claude_mpm/services/agents/deployment/agent_deployment.py +126 -2
  104. claude_mpm/services/agents/deployment/agent_discovery_service.py +105 -73
  105. claude_mpm/services/agents/deployment/agent_lifecycle_manager.py +1 -5
  106. claude_mpm/services/agents/deployment/agent_restore_handler.py +1 -4
  107. claude_mpm/services/agents/deployment/agent_template_builder.py +236 -15
  108. claude_mpm/services/agents/deployment/agents_directory_resolver.py +101 -15
  109. claude_mpm/services/agents/deployment/async_agent_deployment.py +2 -1
  110. claude_mpm/services/agents/deployment/multi_source_deployment_service.py +115 -15
  111. claude_mpm/services/agents/deployment/refactored_agent_deployment_service.py +1 -4
  112. claude_mpm/services/agents/deployment/remote_agent_discovery_service.py +363 -0
  113. claude_mpm/services/agents/deployment/single_agent_deployer.py +2 -2
  114. claude_mpm/services/agents/deployment/system_instructions_deployer.py +168 -46
  115. claude_mpm/services/agents/deployment/validation/deployment_validator.py +2 -2
  116. claude_mpm/services/agents/git_source_manager.py +629 -0
  117. claude_mpm/services/agents/loading/framework_agent_loader.py +1 -4
  118. claude_mpm/services/agents/local_template_manager.py +47 -9
  119. claude_mpm/services/agents/single_tier_deployment_service.py +696 -0
  120. claude_mpm/services/agents/sources/__init__.py +13 -0
  121. claude_mpm/services/agents/sources/agent_sync_state.py +516 -0
  122. claude_mpm/services/agents/sources/git_source_sync_service.py +1087 -0
  123. claude_mpm/services/agents/startup_sync.py +239 -0
  124. claude_mpm/services/agents/toolchain_detector.py +474 -0
  125. claude_mpm/services/analysis/__init__.py +25 -0
  126. claude_mpm/services/analysis/postmortem_reporter.py +474 -0
  127. claude_mpm/services/analysis/postmortem_service.py +765 -0
  128. claude_mpm/services/command_deployment_service.py +200 -6
  129. claude_mpm/services/core/base.py +7 -2
  130. claude_mpm/services/core/interfaces/__init__.py +1 -3
  131. claude_mpm/services/core/interfaces/health.py +1 -4
  132. claude_mpm/services/core/models/__init__.py +2 -11
  133. claude_mpm/services/diagnostics/checks/__init__.py +4 -0
  134. claude_mpm/services/diagnostics/checks/agent_sources_check.py +577 -0
  135. claude_mpm/services/diagnostics/checks/mcp_services_check.py +7 -15
  136. claude_mpm/services/diagnostics/checks/skill_sources_check.py +587 -0
  137. claude_mpm/services/diagnostics/diagnostic_runner.py +9 -0
  138. claude_mpm/services/diagnostics/doctor_reporter.py +34 -6
  139. claude_mpm/services/git/__init__.py +21 -0
  140. claude_mpm/services/git/git_operations_service.py +494 -0
  141. claude_mpm/services/github/__init__.py +21 -0
  142. claude_mpm/services/github/github_cli_service.py +397 -0
  143. claude_mpm/services/infrastructure/monitoring/__init__.py +1 -5
  144. claude_mpm/services/infrastructure/monitoring/aggregator.py +1 -6
  145. claude_mpm/services/instructions/__init__.py +9 -0
  146. claude_mpm/services/instructions/instruction_cache_service.py +374 -0
  147. claude_mpm/services/local_ops/__init__.py +3 -13
  148. claude_mpm/services/local_ops/health_checks/__init__.py +1 -3
  149. claude_mpm/services/local_ops/health_manager.py +1 -4
  150. claude_mpm/services/mcp_config_manager.py +75 -145
  151. claude_mpm/services/mcp_gateway/core/process_pool.py +22 -16
  152. claude_mpm/services/mcp_gateway/server/mcp_gateway.py +1 -6
  153. claude_mpm/services/mcp_service_verifier.py +6 -3
  154. claude_mpm/services/monitor/daemon.py +28 -8
  155. claude_mpm/services/monitor/daemon_manager.py +96 -19
  156. claude_mpm/services/pr/__init__.py +14 -0
  157. claude_mpm/services/pr/pr_template_service.py +329 -0
  158. claude_mpm/services/project/project_organizer.py +4 -0
  159. claude_mpm/services/runner_configuration_service.py +16 -3
  160. claude_mpm/services/session_management_service.py +16 -4
  161. claude_mpm/services/skills/__init__.py +18 -0
  162. claude_mpm/services/skills/git_skill_source_manager.py +1169 -0
  163. claude_mpm/services/skills/skill_discovery_service.py +568 -0
  164. claude_mpm/services/socketio/server/core.py +1 -4
  165. claude_mpm/services/socketio/server/main.py +1 -3
  166. claude_mpm/services/unified/deployment_strategies/vercel.py +1 -5
  167. claude_mpm/services/unified/unified_deployment.py +1 -5
  168. claude_mpm/services/visualization/__init__.py +1 -5
  169. claude_mpm/templates/questions/__init__.py +2 -7
  170. claude_mpm/templates/questions/pr_strategy.py +1 -4
  171. claude_mpm/templates/questions/project_init.py +1 -4
  172. claude_mpm/templates/questions/ticket_mgmt.py +1 -4
  173. claude_mpm/utils/agent_dependency_loader.py +77 -10
  174. claude_mpm/utils/agent_filters.py +288 -0
  175. claude_mpm/utils/gitignore.py +3 -0
  176. claude_mpm/utils/migration.py +372 -0
  177. claude_mpm/utils/progress.py +387 -0
  178. {claude_mpm-4.25.10.dist-info → claude_mpm-5.1.8.dist-info}/METADATA +356 -112
  179. {claude_mpm-4.25.10.dist-info → claude_mpm-5.1.8.dist-info}/RECORD +188 -439
  180. claude_mpm/agents/templates/agent-manager.json +0 -273
  181. claude_mpm/agents/templates/agentic-coder-optimizer.json +0 -248
  182. claude_mpm/agents/templates/api_qa.json +0 -183
  183. claude_mpm/agents/templates/clerk-ops.json +0 -235
  184. claude_mpm/agents/templates/code_analyzer.json +0 -101
  185. claude_mpm/agents/templates/content-agent.json +0 -358
  186. claude_mpm/agents/templates/dart_engineer.json +0 -307
  187. claude_mpm/agents/templates/data_engineer.json +0 -225
  188. claude_mpm/agents/templates/documentation.json +0 -238
  189. claude_mpm/agents/templates/engineer.json +0 -210
  190. claude_mpm/agents/templates/gcp_ops_agent.json +0 -253
  191. claude_mpm/agents/templates/golang_engineer.json +0 -270
  192. claude_mpm/agents/templates/imagemagick.json +0 -264
  193. claude_mpm/agents/templates/java_engineer.json +0 -346
  194. claude_mpm/agents/templates/javascript_engineer_agent.json +0 -380
  195. claude_mpm/agents/templates/local_ops_agent.json +0 -1840
  196. claude_mpm/agents/templates/memory_manager.json +0 -158
  197. claude_mpm/agents/templates/nextjs_engineer.json +0 -285
  198. claude_mpm/agents/templates/ops.json +0 -185
  199. claude_mpm/agents/templates/php-engineer.json +0 -287
  200. claude_mpm/agents/templates/product_owner.json +0 -338
  201. claude_mpm/agents/templates/project_organizer.json +0 -144
  202. claude_mpm/agents/templates/prompt-engineer.json +0 -737
  203. claude_mpm/agents/templates/python_engineer.json +0 -387
  204. claude_mpm/agents/templates/qa.json +0 -243
  205. claude_mpm/agents/templates/react_engineer.json +0 -239
  206. claude_mpm/agents/templates/refactoring_engineer.json +0 -276
  207. claude_mpm/agents/templates/research.json +0 -258
  208. claude_mpm/agents/templates/ruby-engineer.json +0 -280
  209. claude_mpm/agents/templates/rust_engineer.json +0 -275
  210. claude_mpm/agents/templates/security.json +0 -202
  211. claude_mpm/agents/templates/svelte-engineer.json +0 -225
  212. claude_mpm/agents/templates/tauri_engineer.json +0 -274
  213. claude_mpm/agents/templates/ticketing.json +0 -181
  214. claude_mpm/agents/templates/typescript_engineer.json +0 -285
  215. claude_mpm/agents/templates/vercel_ops_agent.json +0 -412
  216. claude_mpm/agents/templates/version_control.json +0 -159
  217. claude_mpm/agents/templates/web_qa.json +0 -400
  218. claude_mpm/agents/templates/web_ui.json +0 -189
  219. claude_mpm/cli/README.md +0 -253
  220. claude_mpm/cli/commands/mcp_install_commands.py.backup +0 -284
  221. claude_mpm/cli/commands/mpm_init/README.md +0 -365
  222. claude_mpm/cli_module/refactoring_guide.md +0 -253
  223. claude_mpm/commands/mpm-tickets.md +0 -151
  224. claude_mpm/config/agent_capabilities.yaml +0 -658
  225. claude_mpm/config/async_logging_config.yaml +0 -145
  226. claude_mpm/core/.claude-mpm/logs/hooks_20250730.log +0 -34
  227. claude_mpm/d2/.gitignore +0 -22
  228. claude_mpm/d2/ARCHITECTURE_COMPARISON.md +0 -273
  229. claude_mpm/d2/FLASK_INTEGRATION.md +0 -156
  230. claude_mpm/d2/IMPLEMENTATION_SUMMARY.md +0 -452
  231. claude_mpm/d2/QUICKSTART.md +0 -186
  232. claude_mpm/d2/README.md +0 -232
  233. claude_mpm/d2/STORE_FIX_SUMMARY.md +0 -167
  234. claude_mpm/d2/SVELTE5_STORES_GUIDE.md +0 -180
  235. claude_mpm/d2/TESTING.md +0 -288
  236. claude_mpm/d2/index.html +0 -118
  237. claude_mpm/d2/package.json +0 -19
  238. claude_mpm/d2/src/App.svelte +0 -110
  239. claude_mpm/d2/src/components/Header.svelte +0 -153
  240. claude_mpm/d2/src/components/MainContent.svelte +0 -74
  241. claude_mpm/d2/src/components/Sidebar.svelte +0 -85
  242. claude_mpm/d2/src/components/tabs/EventsTab.svelte +0 -326
  243. claude_mpm/d2/src/lib/socketio.js +0 -144
  244. claude_mpm/d2/src/main.js +0 -7
  245. claude_mpm/d2/src/stores/events.js +0 -114
  246. claude_mpm/d2/src/stores/socket.js +0 -108
  247. claude_mpm/d2/src/stores/theme.js +0 -65
  248. claude_mpm/d2/svelte.config.js +0 -12
  249. claude_mpm/d2/vite.config.js +0 -15
  250. claude_mpm/dashboard/.claude-mpm/memories/README.md +0 -36
  251. claude_mpm/dashboard/BUILD_NUMBER +0 -1
  252. claude_mpm/dashboard/README.md +0 -121
  253. claude_mpm/dashboard/VERSION +0 -1
  254. claude_mpm/dashboard/react/components/DataInspector/DataInspector.module.css +0 -188
  255. claude_mpm/dashboard/react/components/DataInspector/DataInspector.tsx +0 -273
  256. claude_mpm/dashboard/react/components/ErrorBoundary.tsx +0 -75
  257. claude_mpm/dashboard/react/components/EventViewer/EventViewer.module.css +0 -156
  258. claude_mpm/dashboard/react/components/EventViewer/EventViewer.tsx +0 -141
  259. claude_mpm/dashboard/react/components/shared/ConnectionStatus.module.css +0 -38
  260. claude_mpm/dashboard/react/components/shared/ConnectionStatus.tsx +0 -36
  261. claude_mpm/dashboard/react/components/shared/FilterBar.module.css +0 -92
  262. claude_mpm/dashboard/react/components/shared/FilterBar.tsx +0 -89
  263. claude_mpm/dashboard/react/contexts/DashboardContext.tsx +0 -215
  264. claude_mpm/dashboard/react/entries/events.tsx +0 -165
  265. claude_mpm/dashboard/react/hooks/useEvents.ts +0 -191
  266. claude_mpm/dashboard/react/hooks/useSocket.ts +0 -225
  267. claude_mpm/dashboard/static/archive/activity_dashboard_fixed.html +0 -248
  268. claude_mpm/dashboard/static/built/REFACTORING_SUMMARY.md +0 -170
  269. claude_mpm/dashboard/static/built/assets/events.DjpNxWNo.css +0 -1
  270. claude_mpm/dashboard/static/built/components/activity-tree.js +0 -2
  271. claude_mpm/dashboard/static/built/components/activity-tree.js.map +0 -1
  272. claude_mpm/dashboard/static/built/components/agent-hierarchy.js +0 -777
  273. claude_mpm/dashboard/static/built/components/agent-inference.js +0 -2
  274. claude_mpm/dashboard/static/built/components/agent-inference.js.map +0 -1
  275. claude_mpm/dashboard/static/built/components/build-tracker.js +0 -333
  276. claude_mpm/dashboard/static/built/components/code-simple.js +0 -857
  277. claude_mpm/dashboard/static/built/components/code-tree/tree-breadcrumb.js +0 -353
  278. claude_mpm/dashboard/static/built/components/code-tree/tree-constants.js +0 -235
  279. claude_mpm/dashboard/static/built/components/code-tree/tree-search.js +0 -409
  280. claude_mpm/dashboard/static/built/components/code-tree/tree-utils.js +0 -435
  281. claude_mpm/dashboard/static/built/components/code-tree.js +0 -2
  282. claude_mpm/dashboard/static/built/components/code-tree.js.map +0 -1
  283. claude_mpm/dashboard/static/built/components/code-viewer.js +0 -2
  284. claude_mpm/dashboard/static/built/components/code-viewer.js.map +0 -1
  285. claude_mpm/dashboard/static/built/components/connection-debug.js +0 -654
  286. claude_mpm/dashboard/static/built/components/diff-viewer.js +0 -891
  287. claude_mpm/dashboard/static/built/components/event-processor.js +0 -2
  288. claude_mpm/dashboard/static/built/components/event-processor.js.map +0 -1
  289. claude_mpm/dashboard/static/built/components/event-viewer.js +0 -2
  290. claude_mpm/dashboard/static/built/components/event-viewer.js.map +0 -1
  291. claude_mpm/dashboard/static/built/components/export-manager.js +0 -2
  292. claude_mpm/dashboard/static/built/components/export-manager.js.map +0 -1
  293. claude_mpm/dashboard/static/built/components/file-change-tracker.js +0 -443
  294. claude_mpm/dashboard/static/built/components/file-change-viewer.js +0 -690
  295. claude_mpm/dashboard/static/built/components/file-tool-tracker.js +0 -2
  296. claude_mpm/dashboard/static/built/components/file-tool-tracker.js.map +0 -1
  297. claude_mpm/dashboard/static/built/components/file-viewer.js +0 -2
  298. claude_mpm/dashboard/static/built/components/file-viewer.js.map +0 -1
  299. claude_mpm/dashboard/static/built/components/hud-library-loader.js +0 -2
  300. claude_mpm/dashboard/static/built/components/hud-library-loader.js.map +0 -1
  301. claude_mpm/dashboard/static/built/components/hud-manager.js +0 -2
  302. claude_mpm/dashboard/static/built/components/hud-manager.js.map +0 -1
  303. claude_mpm/dashboard/static/built/components/hud-visualizer.js +0 -2
  304. claude_mpm/dashboard/static/built/components/hud-visualizer.js.map +0 -1
  305. claude_mpm/dashboard/static/built/components/module-viewer.js +0 -2
  306. claude_mpm/dashboard/static/built/components/module-viewer.js.map +0 -1
  307. claude_mpm/dashboard/static/built/components/nav-bar.js +0 -145
  308. claude_mpm/dashboard/static/built/components/page-structure.js +0 -429
  309. claude_mpm/dashboard/static/built/components/session-manager.js +0 -2
  310. claude_mpm/dashboard/static/built/components/session-manager.js.map +0 -1
  311. claude_mpm/dashboard/static/built/components/socket-manager.js +0 -2
  312. claude_mpm/dashboard/static/built/components/socket-manager.js.map +0 -1
  313. claude_mpm/dashboard/static/built/components/ui-state-manager.js +0 -2
  314. claude_mpm/dashboard/static/built/components/ui-state-manager.js.map +0 -1
  315. claude_mpm/dashboard/static/built/components/unified-data-viewer.js +0 -2
  316. claude_mpm/dashboard/static/built/components/unified-data-viewer.js.map +0 -1
  317. claude_mpm/dashboard/static/built/components/working-directory.js +0 -2
  318. claude_mpm/dashboard/static/built/components/working-directory.js.map +0 -1
  319. claude_mpm/dashboard/static/built/connection-manager.js +0 -536
  320. claude_mpm/dashboard/static/built/dashboard.js +0 -2
  321. claude_mpm/dashboard/static/built/dashboard.js.map +0 -1
  322. claude_mpm/dashboard/static/built/extension-error-handler.js +0 -164
  323. claude_mpm/dashboard/static/built/react/events.js +0 -30
  324. claude_mpm/dashboard/static/built/react/events.js.map +0 -1
  325. claude_mpm/dashboard/static/built/shared/dom-helpers.js +0 -396
  326. claude_mpm/dashboard/static/built/shared/event-bus.js +0 -330
  327. claude_mpm/dashboard/static/built/shared/event-filter-service.js +0 -540
  328. claude_mpm/dashboard/static/built/shared/logger.js +0 -385
  329. claude_mpm/dashboard/static/built/shared/page-structure.js +0 -249
  330. claude_mpm/dashboard/static/built/shared/tooltip-service.js +0 -253
  331. claude_mpm/dashboard/static/built/socket-client.js +0 -2
  332. claude_mpm/dashboard/static/built/socket-client.js.map +0 -1
  333. claude_mpm/dashboard/static/built/tab-isolation-fix.js +0 -185
  334. claude_mpm/dashboard/static/events.html +0 -607
  335. claude_mpm/dashboard/static/index.html +0 -635
  336. claude_mpm/dashboard/static/js/REFACTORING_SUMMARY.md +0 -170
  337. claude_mpm/dashboard/static/js/shared/dom-helpers.js +0 -396
  338. claude_mpm/dashboard/static/js/shared/event-bus.js +0 -330
  339. claude_mpm/dashboard/static/js/shared/logger.js +0 -385
  340. claude_mpm/dashboard/static/js/shared/tooltip-service.js +0 -253
  341. claude_mpm/dashboard/static/js/stores/dashboard-store.js +0 -562
  342. claude_mpm/dashboard/static/legacy/activity.html +0 -736
  343. claude_mpm/dashboard/static/legacy/agents.html +0 -786
  344. claude_mpm/dashboard/static/legacy/files.html +0 -747
  345. claude_mpm/dashboard/static/legacy/tools.html +0 -831
  346. claude_mpm/dashboard/static/monitors.html +0 -431
  347. claude_mpm/dashboard/static/navigation-test-results.md +0 -118
  348. claude_mpm/dashboard/static/production/events.html +0 -659
  349. claude_mpm/dashboard/static/production/main.html +0 -698
  350. claude_mpm/dashboard/static/production/monitors.html +0 -483
  351. claude_mpm/dashboard/static/test-archive/dashboard.html +0 -635
  352. claude_mpm/dashboard/static/test-archive/debug-events.html +0 -147
  353. claude_mpm/dashboard/static/test-archive/test-navigation.html +0 -256
  354. claude_mpm/dashboard/static/test-archive/test-react-exports.html +0 -180
  355. claude_mpm/dashboard/templates/.claude-mpm/memories/README.md +0 -36
  356. claude_mpm/dashboard/templates/.claude-mpm/memories/engineer_agent.md +0 -39
  357. claude_mpm/dashboard/templates/.claude-mpm/memories/version_control_agent.md +0 -38
  358. claude_mpm/hooks/README.md +0 -143
  359. claude_mpm/hooks/templates/README.md +0 -180
  360. claude_mpm/hooks/templates/settings.json.example +0 -147
  361. claude_mpm/schemas/agent_schema.json +0 -596
  362. claude_mpm/schemas/frontmatter_schema.json +0 -165
  363. claude_mpm/services/event_bus/README.md +0 -244
  364. claude_mpm/services/events/README.md +0 -303
  365. claude_mpm/services/framework_claude_md_generator/README.md +0 -119
  366. claude_mpm/services/mcp_gateway/README.md +0 -185
  367. claude_mpm/services/socketio/handlers/connection.py.backup +0 -217
  368. claude_mpm/services/socketio/handlers/hook.py.backup +0 -154
  369. claude_mpm/services/static/.gitkeep +0 -2
  370. claude_mpm/services/version_control/VERSION +0 -1
  371. claude_mpm/skills/bundled/.gitkeep +0 -2
  372. claude_mpm/skills/bundled/collaboration/brainstorming/SKILL.md +0 -79
  373. claude_mpm/skills/bundled/collaboration/dispatching-parallel-agents/SKILL.md +0 -178
  374. claude_mpm/skills/bundled/collaboration/dispatching-parallel-agents/references/agent-prompts.md +0 -577
  375. claude_mpm/skills/bundled/collaboration/dispatching-parallel-agents/references/coordination-patterns.md +0 -467
  376. claude_mpm/skills/bundled/collaboration/dispatching-parallel-agents/references/examples.md +0 -537
  377. claude_mpm/skills/bundled/collaboration/dispatching-parallel-agents/references/troubleshooting.md +0 -730
  378. claude_mpm/skills/bundled/collaboration/git-worktrees.md +0 -317
  379. claude_mpm/skills/bundled/collaboration/requesting-code-review/SKILL.md +0 -112
  380. claude_mpm/skills/bundled/collaboration/requesting-code-review/references/code-reviewer-template.md +0 -146
  381. claude_mpm/skills/bundled/collaboration/requesting-code-review/references/review-examples.md +0 -412
  382. claude_mpm/skills/bundled/collaboration/stacked-prs.md +0 -251
  383. claude_mpm/skills/bundled/collaboration/writing-plans/SKILL.md +0 -81
  384. claude_mpm/skills/bundled/collaboration/writing-plans/references/best-practices.md +0 -362
  385. claude_mpm/skills/bundled/collaboration/writing-plans/references/plan-structure-templates.md +0 -312
  386. claude_mpm/skills/bundled/debugging/root-cause-tracing/SKILL.md +0 -152
  387. claude_mpm/skills/bundled/debugging/root-cause-tracing/find-polluter.sh +0 -63
  388. claude_mpm/skills/bundled/debugging/root-cause-tracing/references/advanced-techniques.md +0 -668
  389. claude_mpm/skills/bundled/debugging/root-cause-tracing/references/examples.md +0 -587
  390. claude_mpm/skills/bundled/debugging/root-cause-tracing/references/integration.md +0 -438
  391. claude_mpm/skills/bundled/debugging/root-cause-tracing/references/tracing-techniques.md +0 -391
  392. claude_mpm/skills/bundled/debugging/systematic-debugging/CREATION-LOG.md +0 -119
  393. claude_mpm/skills/bundled/debugging/systematic-debugging/SKILL.md +0 -148
  394. claude_mpm/skills/bundled/debugging/systematic-debugging/references/anti-patterns.md +0 -483
  395. claude_mpm/skills/bundled/debugging/systematic-debugging/references/examples.md +0 -452
  396. claude_mpm/skills/bundled/debugging/systematic-debugging/references/troubleshooting.md +0 -449
  397. claude_mpm/skills/bundled/debugging/systematic-debugging/references/workflow.md +0 -411
  398. claude_mpm/skills/bundled/debugging/systematic-debugging/test-academic.md +0 -14
  399. claude_mpm/skills/bundled/debugging/systematic-debugging/test-pressure-1.md +0 -58
  400. claude_mpm/skills/bundled/debugging/systematic-debugging/test-pressure-2.md +0 -68
  401. claude_mpm/skills/bundled/debugging/systematic-debugging/test-pressure-3.md +0 -69
  402. claude_mpm/skills/bundled/debugging/verification-before-completion/SKILL.md +0 -131
  403. claude_mpm/skills/bundled/debugging/verification-before-completion/references/gate-function.md +0 -325
  404. claude_mpm/skills/bundled/debugging/verification-before-completion/references/integration-and-workflows.md +0 -490
  405. claude_mpm/skills/bundled/debugging/verification-before-completion/references/red-flags-and-failures.md +0 -425
  406. claude_mpm/skills/bundled/debugging/verification-before-completion/references/verification-patterns.md +0 -499
  407. claude_mpm/skills/bundled/infrastructure/env-manager/INTEGRATION.md +0 -611
  408. claude_mpm/skills/bundled/infrastructure/env-manager/README.md +0 -596
  409. claude_mpm/skills/bundled/infrastructure/env-manager/SKILL.md +0 -260
  410. claude_mpm/skills/bundled/infrastructure/env-manager/examples/nextjs-env-structure.md +0 -315
  411. claude_mpm/skills/bundled/infrastructure/env-manager/references/frameworks.md +0 -436
  412. claude_mpm/skills/bundled/infrastructure/env-manager/references/security.md +0 -433
  413. claude_mpm/skills/bundled/infrastructure/env-manager/references/synchronization.md +0 -452
  414. claude_mpm/skills/bundled/infrastructure/env-manager/references/troubleshooting.md +0 -404
  415. claude_mpm/skills/bundled/infrastructure/env-manager/references/validation.md +0 -420
  416. claude_mpm/skills/bundled/main/artifacts-builder/LICENSE.txt +0 -202
  417. claude_mpm/skills/bundled/main/artifacts-builder/SKILL.md +0 -86
  418. claude_mpm/skills/bundled/main/artifacts-builder/scripts/bundle-artifact.sh +0 -54
  419. claude_mpm/skills/bundled/main/artifacts-builder/scripts/init-artifact.sh +0 -322
  420. claude_mpm/skills/bundled/main/artifacts-builder/scripts/shadcn-components.tar.gz +0 -0
  421. claude_mpm/skills/bundled/main/internal-comms/LICENSE.txt +0 -202
  422. claude_mpm/skills/bundled/main/internal-comms/SKILL.md +0 -43
  423. claude_mpm/skills/bundled/main/internal-comms/examples/3p-updates.md +0 -47
  424. claude_mpm/skills/bundled/main/internal-comms/examples/company-newsletter.md +0 -65
  425. claude_mpm/skills/bundled/main/internal-comms/examples/faq-answers.md +0 -30
  426. claude_mpm/skills/bundled/main/internal-comms/examples/general-comms.md +0 -16
  427. claude_mpm/skills/bundled/main/mcp-builder/LICENSE.txt +0 -202
  428. claude_mpm/skills/bundled/main/mcp-builder/SKILL.md +0 -160
  429. claude_mpm/skills/bundled/main/mcp-builder/reference/design_principles.md +0 -412
  430. claude_mpm/skills/bundled/main/mcp-builder/reference/evaluation.md +0 -602
  431. claude_mpm/skills/bundled/main/mcp-builder/reference/mcp_best_practices.md +0 -915
  432. claude_mpm/skills/bundled/main/mcp-builder/reference/node_mcp_server.md +0 -916
  433. claude_mpm/skills/bundled/main/mcp-builder/reference/python_mcp_server.md +0 -752
  434. claude_mpm/skills/bundled/main/mcp-builder/reference/workflow.md +0 -1237
  435. claude_mpm/skills/bundled/main/mcp-builder/scripts/example_evaluation.xml +0 -22
  436. claude_mpm/skills/bundled/main/mcp-builder/scripts/requirements.txt +0 -2
  437. claude_mpm/skills/bundled/main/skill-creator/LICENSE.txt +0 -202
  438. claude_mpm/skills/bundled/main/skill-creator/SKILL.md +0 -189
  439. claude_mpm/skills/bundled/main/skill-creator/references/best-practices.md +0 -500
  440. claude_mpm/skills/bundled/main/skill-creator/references/creation-workflow.md +0 -464
  441. claude_mpm/skills/bundled/main/skill-creator/references/examples.md +0 -619
  442. claude_mpm/skills/bundled/main/skill-creator/references/progressive-disclosure.md +0 -437
  443. claude_mpm/skills/bundled/main/skill-creator/references/skill-structure.md +0 -231
  444. claude_mpm/skills/bundled/php/espocrm-development/SKILL.md +0 -170
  445. claude_mpm/skills/bundled/php/espocrm-development/references/architecture.md +0 -602
  446. claude_mpm/skills/bundled/php/espocrm-development/references/common-tasks.md +0 -821
  447. claude_mpm/skills/bundled/php/espocrm-development/references/development-workflow.md +0 -742
  448. claude_mpm/skills/bundled/php/espocrm-development/references/frontend-customization.md +0 -726
  449. claude_mpm/skills/bundled/php/espocrm-development/references/hooks-and-services.md +0 -764
  450. claude_mpm/skills/bundled/php/espocrm-development/references/testing-debugging.md +0 -831
  451. claude_mpm/skills/bundled/react/flexlayout-react.md +0 -742
  452. claude_mpm/skills/bundled/rust/desktop-applications/SKILL.md +0 -226
  453. claude_mpm/skills/bundled/rust/desktop-applications/references/architecture-patterns.md +0 -901
  454. claude_mpm/skills/bundled/rust/desktop-applications/references/native-gui-frameworks.md +0 -901
  455. claude_mpm/skills/bundled/rust/desktop-applications/references/platform-integration.md +0 -775
  456. claude_mpm/skills/bundled/rust/desktop-applications/references/state-management.md +0 -937
  457. claude_mpm/skills/bundled/rust/desktop-applications/references/tauri-framework.md +0 -770
  458. claude_mpm/skills/bundled/rust/desktop-applications/references/testing-deployment.md +0 -961
  459. claude_mpm/skills/bundled/tauri/tauri-async-patterns.md +0 -495
  460. claude_mpm/skills/bundled/tauri/tauri-build-deploy.md +0 -599
  461. claude_mpm/skills/bundled/tauri/tauri-command-patterns.md +0 -535
  462. claude_mpm/skills/bundled/tauri/tauri-error-handling.md +0 -613
  463. claude_mpm/skills/bundled/tauri/tauri-event-system.md +0 -648
  464. claude_mpm/skills/bundled/tauri/tauri-file-system.md +0 -673
  465. claude_mpm/skills/bundled/tauri/tauri-frontend-integration.md +0 -767
  466. claude_mpm/skills/bundled/tauri/tauri-performance.md +0 -669
  467. claude_mpm/skills/bundled/tauri/tauri-state-management.md +0 -573
  468. claude_mpm/skills/bundled/tauri/tauri-testing.md +0 -384
  469. claude_mpm/skills/bundled/tauri/tauri-window-management.md +0 -628
  470. claude_mpm/skills/bundled/testing/condition-based-waiting/SKILL.md +0 -119
  471. claude_mpm/skills/bundled/testing/condition-based-waiting/example.ts +0 -158
  472. claude_mpm/skills/bundled/testing/condition-based-waiting/references/patterns-and-implementation.md +0 -253
  473. claude_mpm/skills/bundled/testing/test-driven-development/SKILL.md +0 -145
  474. claude_mpm/skills/bundled/testing/test-driven-development/references/anti-patterns.md +0 -543
  475. claude_mpm/skills/bundled/testing/test-driven-development/references/examples.md +0 -741
  476. claude_mpm/skills/bundled/testing/test-driven-development/references/integration.md +0 -470
  477. claude_mpm/skills/bundled/testing/test-driven-development/references/philosophy.md +0 -458
  478. claude_mpm/skills/bundled/testing/test-driven-development/references/workflow.md +0 -639
  479. claude_mpm/skills/bundled/testing/test-quality-inspector/SKILL.md +0 -458
  480. claude_mpm/skills/bundled/testing/test-quality-inspector/examples/example-inspection-report.md +0 -411
  481. claude_mpm/skills/bundled/testing/test-quality-inspector/references/assertion-quality.md +0 -317
  482. claude_mpm/skills/bundled/testing/test-quality-inspector/references/inspection-checklist.md +0 -270
  483. claude_mpm/skills/bundled/testing/test-quality-inspector/references/red-flags.md +0 -436
  484. claude_mpm/skills/bundled/testing/testing-anti-patterns/SKILL.md +0 -140
  485. claude_mpm/skills/bundled/testing/testing-anti-patterns/references/completeness-anti-patterns.md +0 -572
  486. claude_mpm/skills/bundled/testing/testing-anti-patterns/references/core-anti-patterns.md +0 -411
  487. claude_mpm/skills/bundled/testing/testing-anti-patterns/references/detection-guide.md +0 -569
  488. claude_mpm/skills/bundled/testing/testing-anti-patterns/references/tdd-connection.md +0 -695
  489. claude_mpm/skills/bundled/testing/webapp-testing/LICENSE.txt +0 -202
  490. claude_mpm/skills/bundled/testing/webapp-testing/SKILL.md +0 -184
  491. claude_mpm/skills/bundled/testing/webapp-testing/decision-tree.md +0 -459
  492. claude_mpm/skills/bundled/testing/webapp-testing/playwright-patterns.md +0 -479
  493. claude_mpm/skills/bundled/testing/webapp-testing/reconnaissance-pattern.md +0 -687
  494. claude_mpm/skills/bundled/testing/webapp-testing/server-management.md +0 -758
  495. claude_mpm/skills/bundled/testing/webapp-testing/troubleshooting.md +0 -868
  496. claude_mpm/templates/questions/EXAMPLES.md +0 -501
  497. claude_mpm/tools/README_SOCKETIO_DEBUG.md +0 -224
  498. claude_mpm/tools/code_tree_analyzer/README.md +0 -64
  499. /claude_mpm/agents/templates/{git_file_tracking.md → git-file-tracking.md} +0 -0
  500. /claude_mpm/agents/templates/{pm_examples.md → pm-examples.md} +0 -0
  501. /claude_mpm/agents/templates/{pm_red_flags.md → pm-red-flags.md} +0 -0
  502. /claude_mpm/agents/templates/{response_format.md → response-format.md} +0 -0
  503. /claude_mpm/agents/templates/{validation_templates.md → validation-templates.md} +0 -0
  504. {claude_mpm-4.25.10.dist-info → claude_mpm-5.1.8.dist-info}/WHEEL +0 -0
  505. {claude_mpm-4.25.10.dist-info → claude_mpm-5.1.8.dist-info}/entry_points.txt +0 -0
  506. {claude_mpm-4.25.10.dist-info → claude_mpm-5.1.8.dist-info}/licenses/LICENSE +0 -0
  507. {claude_mpm-4.25.10.dist-info → claude_mpm-5.1.8.dist-info}/top_level.txt +0 -0
@@ -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.
@@ -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"
@@ -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
 
@@ -0,0 +1,401 @@
1
+ """
2
+ Postmortem command implementation for claude-mpm.
3
+
4
+ WHY: Provide a comprehensive analysis tool to help users identify, categorize,
5
+ and fix errors encountered during their session, with automated improvements
6
+ for framework code and suggestions for user code.
7
+
8
+ DESIGN DECISIONS:
9
+ - Leverages existing FailureTracker for error data
10
+ - Categorizes errors by source (script/skill/agent/user)
11
+ - Provides action-specific handling (auto-fix/update/PR/suggest)
12
+ - Supports dry-run mode for safety
13
+ """
14
+
15
+ import sys
16
+ from pathlib import Path
17
+
18
+ from claude_mpm.core.logging_utils import get_logger
19
+ from claude_mpm.services.analysis import get_postmortem_service
20
+ from claude_mpm.services.analysis.postmortem_reporter import PostmortemReporter
21
+
22
+ logger = get_logger(__name__)
23
+
24
+
25
+ def add_postmortem_parser(subparsers):
26
+ """Add postmortem command parser.
27
+
28
+ WHY: This command helps users analyze session errors and generate
29
+ actionable improvement suggestions based on error source.
30
+ """
31
+ parser = subparsers.add_parser(
32
+ "postmortem",
33
+ aliases=["pm-analysis"],
34
+ help="Analyze session errors and suggest improvements",
35
+ description="Perform comprehensive analysis of errors encountered during the session",
36
+ )
37
+
38
+ parser.add_argument(
39
+ "--dry-run",
40
+ action="store_true",
41
+ help="Preview analysis without making changes (default for destructive operations)",
42
+ )
43
+
44
+ parser.add_argument(
45
+ "--auto-fix",
46
+ action="store_true",
47
+ help="Automatically apply fixes to scripts and skills",
48
+ )
49
+
50
+ parser.add_argument(
51
+ "--create-prs",
52
+ action="store_true",
53
+ help="Create pull requests for agent improvements",
54
+ )
55
+
56
+ parser.add_argument(
57
+ "--session-id",
58
+ type=str,
59
+ help="Analyze specific session (default: current session)",
60
+ )
61
+
62
+ parser.add_argument(
63
+ "--format",
64
+ choices=["terminal", "json", "markdown"],
65
+ default="terminal",
66
+ help="Output format (default: terminal)",
67
+ )
68
+
69
+ parser.add_argument(
70
+ "--output",
71
+ "-o",
72
+ type=Path,
73
+ help="Save report to file",
74
+ )
75
+
76
+ parser.add_argument(
77
+ "--verbose",
78
+ "-v",
79
+ action="store_true",
80
+ help="Include detailed error traces and analysis",
81
+ )
82
+
83
+ parser.add_argument(
84
+ "--no-color",
85
+ action="store_true",
86
+ help="Disable colored output",
87
+ )
88
+
89
+ parser.set_defaults(func=postmortem_command)
90
+
91
+
92
+ def run_postmortem(args):
93
+ """Main entry point for postmortem command (used by CLI).
94
+
95
+ Args:
96
+ args: Parsed command-line arguments
97
+
98
+ Returns:
99
+ Exit code (0 for success, 1 for warnings, 2 for errors)
100
+ """
101
+ return postmortem_command(args)
102
+
103
+
104
+ def postmortem_command(args):
105
+ """Execute the postmortem command.
106
+
107
+ WHY: Provides comprehensive error analysis with categorization and
108
+ actionable improvements, helping users understand and fix issues
109
+ encountered during their session.
110
+
111
+ Args:
112
+ args: Parsed command-line arguments
113
+
114
+ Returns:
115
+ Exit code (0 for success, 1 for warnings, 2 for errors)
116
+ """
117
+ logger.info("Starting postmortem analysis")
118
+
119
+ # Get postmortem service
120
+ service = get_postmortem_service()
121
+
122
+ try:
123
+ # Analyze session
124
+ report = service.analyze_session(session_id=args.session_id)
125
+
126
+ # Handle output file
127
+ output_file = args.output
128
+ if output_file:
129
+ # Ensure file extension matches format
130
+ if args.format == "json" and not str(output_file).endswith(".json"):
131
+ output_file = Path(str(output_file) + ".json")
132
+ elif args.format == "markdown" and not str(output_file).endswith(".md"):
133
+ output_file = Path(str(output_file) + ".md")
134
+
135
+ # Create parent directories
136
+ output_file = output_file.absolute()
137
+ output_file.parent.mkdir(parents=True, exist_ok=True)
138
+
139
+ # Determine output format
140
+ output_format = args.format
141
+
142
+ # Create reporter
143
+ reporter = PostmortemReporter(
144
+ use_color=not args.no_color,
145
+ verbose=args.verbose,
146
+ )
147
+
148
+ # Output results
149
+ if output_file:
150
+ # Save to file
151
+ try:
152
+ with output_file.open("w") as f:
153
+ original_output = reporter.output
154
+ reporter.output = f
155
+ reporter.report(report, format=output_format)
156
+ reporter.output = original_output
157
+
158
+ print(f"✅ Report saved to: {output_file}")
159
+
160
+ # Print brief summary to terminal
161
+ if report.total_errors > 0:
162
+ print(f"\n{report.total_errors} error(s) analyzed")
163
+ print(
164
+ f"{report.stats['total_actions']} improvement action(s) generated"
165
+ )
166
+ else:
167
+ print("\n✅ No errors detected in session!")
168
+
169
+ except Exception as e:
170
+ logger.error(f"Failed to save report: {e}")
171
+ print(f"❌ Failed to save report: {e!s}")
172
+ # Still output to terminal
173
+ reporter.report(report, format="terminal")
174
+ else:
175
+ # Output to terminal
176
+ reporter.report(report, format=output_format)
177
+
178
+ # Apply fixes if requested
179
+ if args.auto_fix and not args.dry_run:
180
+ exit_code = _apply_auto_fixes(report, args.verbose)
181
+ if exit_code != 0:
182
+ return exit_code
183
+
184
+ # Create PRs if requested
185
+ if args.create_prs and not args.dry_run:
186
+ exit_code = _create_prs(report, args.verbose)
187
+ if exit_code != 0:
188
+ return exit_code
189
+
190
+ # Dry-run message
191
+ if args.dry_run and (args.auto_fix or args.create_prs):
192
+ print("\n🔍 Dry-run mode: No changes applied")
193
+ print(" Remove --dry-run to apply changes")
194
+
195
+ # Determine exit code
196
+ if report.total_errors == 0:
197
+ return 0 # No errors
198
+
199
+ if report.stats.get("critical_priority", 0) > 0:
200
+ return 2 # Critical errors found
201
+
202
+ return 1 # Non-critical errors found
203
+
204
+ except KeyboardInterrupt:
205
+ print("\nPostmortem analysis interrupted by user")
206
+ return 130
207
+
208
+ except Exception as e:
209
+ logger.error(f"Postmortem analysis failed: {e}", exc_info=True)
210
+ print(f"\n❌ Postmortem analysis failed: {e!s}")
211
+ if args.verbose:
212
+ import traceback
213
+
214
+ traceback.print_exc()
215
+ return 2
216
+
217
+
218
+ def _apply_auto_fixes(report, verbose: bool) -> int:
219
+ """Apply auto-fix actions from report.
220
+
221
+ Args:
222
+ report: Postmortem report
223
+ verbose: Show detailed output
224
+
225
+ Returns:
226
+ Exit code (0 for success, non-zero for errors)
227
+ """
228
+ from claude_mpm.services.analysis import ActionType
229
+
230
+ auto_fix_actions = report.get_actions_by_type(ActionType.AUTO_FIX)
231
+
232
+ if not auto_fix_actions:
233
+ print("\n✅ No auto-fixable errors found")
234
+ return 0
235
+
236
+ print(f"\n🔧 Applying {len(auto_fix_actions)} auto-fix action(s)...")
237
+
238
+ import subprocess
239
+
240
+ success_count = 0
241
+ fail_count = 0
242
+
243
+ for i, action in enumerate(auto_fix_actions, 1):
244
+ print(f"\n[{i}/{len(auto_fix_actions)}] {action.description}")
245
+
246
+ # Run each command
247
+ for cmd in action.commands:
248
+ if verbose:
249
+ print(f" Running: {cmd}")
250
+
251
+ try:
252
+ result = subprocess.run(
253
+ cmd,
254
+ check=False,
255
+ shell=True,
256
+ capture_output=True,
257
+ text=True,
258
+ timeout=30,
259
+ )
260
+
261
+ if result.returncode == 0:
262
+ action.status = "completed"
263
+ if verbose:
264
+ print(f" ✅ Success: {cmd}")
265
+ else:
266
+ action.status = "failed"
267
+ action.error_message = result.stderr or result.stdout
268
+ print(f" ❌ Failed: {cmd}")
269
+ if verbose and result.stderr:
270
+ print(f" {result.stderr}")
271
+ fail_count += 1
272
+ break # Stop on first failure for this action
273
+
274
+ except subprocess.TimeoutExpired:
275
+ action.status = "failed"
276
+ action.error_message = "Command timed out"
277
+ print(f" ❌ Timeout: {cmd}")
278
+ fail_count += 1
279
+ break
280
+
281
+ except Exception as e:
282
+ action.status = "failed"
283
+ action.error_message = str(e)
284
+ print(f" ❌ Error: {e}")
285
+ fail_count += 1
286
+ break
287
+
288
+ if action.status == "completed":
289
+ success_count += 1
290
+
291
+ # Summary
292
+ print("\n📊 Auto-fix Results:")
293
+ print(f" ✅ Successful: {success_count}")
294
+ print(f" ❌ Failed: {fail_count}")
295
+
296
+ return 0 if fail_count == 0 else 1
297
+
298
+
299
+ def _create_prs(report, verbose: bool) -> int:
300
+ """Create PRs for agent improvements.
301
+
302
+ Args:
303
+ report: Postmortem report
304
+ verbose: Show detailed output
305
+
306
+ Returns:
307
+ Exit code (0 for success, non-zero for errors)
308
+ """
309
+ from claude_mpm.services.analysis import ActionType
310
+
311
+ pr_actions = report.get_actions_by_type(ActionType.CREATE_PR)
312
+
313
+ if not pr_actions:
314
+ print("\n✅ No PR actions needed")
315
+ return 0
316
+
317
+ print(f"\n🤖 Creating {len(pr_actions)} PR(s) for agent improvements...")
318
+
319
+ # Check if we're in the agent cache git repo
320
+ agent_cache_path = Path.home() / ".claude-mpm" / "cache" / "remote-agents"
321
+
322
+ if not agent_cache_path.exists():
323
+ print(f"❌ Agent cache not found at: {agent_cache_path}")
324
+ print(" Run 'claude-mpm agents sync' first")
325
+ return 2
326
+
327
+ success_count = 0
328
+ fail_count = 0
329
+
330
+ for i, action in enumerate(pr_actions, 1):
331
+ print(f"\n[{i}/{len(pr_actions)}] {action.description}")
332
+
333
+ try:
334
+ # Check if file is in agent cache
335
+ analysis = action.error_analysis
336
+ if not analysis.affected_file:
337
+ print(" ⚠️ Cannot determine affected file, skipping")
338
+ action.status = "failed"
339
+ action.error_message = "No affected file identified"
340
+ fail_count += 1
341
+ continue
342
+
343
+ # For MVP, print PR template instead of actually creating
344
+ # Full implementation would use GitHub CLI or API
345
+ print(" 📝 PR Template Generated:")
346
+ print(f" Branch: {action.pr_branch}")
347
+ print(f" Title: {action.pr_title}")
348
+
349
+ if verbose:
350
+ print("\n--- PR Body ---")
351
+ print(action.pr_body)
352
+ print("--- End PR Body ---\n")
353
+
354
+ print("\n ℹ️ To create PR manually:")
355
+ print(f" cd {agent_cache_path}")
356
+ print(f" git checkout -b {action.pr_branch}")
357
+ print(f" # Make your changes to {analysis.affected_file}")
358
+ print(f" git add {analysis.affected_file}")
359
+ print(f' git commit -m "{action.pr_title}"')
360
+ print(f" git push origin {action.pr_branch}")
361
+ print(
362
+ f' gh pr create --title "{action.pr_title}" --body-file pr_body.md'
363
+ )
364
+
365
+ action.status = "completed"
366
+ success_count += 1
367
+
368
+ except Exception as e:
369
+ logger.error(f"Failed to create PR: {e}")
370
+ print(f" ❌ Error: {e}")
371
+ action.status = "failed"
372
+ action.error_message = str(e)
373
+ fail_count += 1
374
+
375
+ # Summary
376
+ print("\n📊 PR Creation Results:")
377
+ print(f" ✅ Templates generated: {success_count}")
378
+ print(f" ❌ Failed: {fail_count}")
379
+
380
+ return 0 if fail_count == 0 else 1
381
+
382
+
383
+ # Optional: Standalone execution for testing
384
+ if __name__ == "__main__":
385
+ import argparse
386
+
387
+ parser = argparse.ArgumentParser(description="Claude MPM Postmortem Analysis")
388
+ parser.add_argument("--dry-run", action="store_true")
389
+ parser.add_argument("--auto-fix", action="store_true")
390
+ parser.add_argument("--create-prs", action="store_true")
391
+ parser.add_argument("--session-id", type=str)
392
+ parser.add_argument(
393
+ "--format", choices=["terminal", "json", "markdown"], default="terminal"
394
+ )
395
+ parser.add_argument("--output", "-o", type=Path)
396
+ parser.add_argument("--verbose", "-v", action="store_true")
397
+ parser.add_argument("--no-color", action="store_true")
398
+
399
+ args = parser.parse_args()
400
+
401
+ sys.exit(postmortem_command(args))
@@ -569,41 +569,6 @@ class RunCommand(BaseCommand):
569
569
  return False
570
570
 
571
571
 
572
- def _ensure_mcp_services_configured(logger):
573
- """
574
- Ensure MCP services are configured in .mcp.json on startup.
575
-
576
- This function automatically configures the core MCP services
577
- (mcp-vector-search, mcp-browser, mcp-ticketer) if they're not
578
- already configured in the project's .mcp.json file.
579
-
580
- Args:
581
- logger: Logger instance for output
582
- """
583
- try:
584
- from ...services.mcp_config_manager import MCPConfigManager
585
-
586
- logger.debug("Checking MCP service configuration...")
587
- manager = MCPConfigManager()
588
-
589
- # Check and auto-configure missing MCP services
590
- success, message = manager.ensure_mcp_services_configured()
591
-
592
- if success:
593
- if "already configured" not in message.lower():
594
- logger.info(message)
595
- print(f"✅ {message}")
596
- else:
597
- logger.debug(message)
598
- else:
599
- logger.warning(f"MCP auto-configuration issue: {message}")
600
- # Don't fail the session, just warn
601
-
602
- except Exception as e:
603
- logger.debug(f"MCP auto-configuration skipped: {e}")
604
- # Don't fail the session if auto-configuration fails
605
-
606
-
607
572
  def _handle_reload_agents(logger):
608
573
  """
609
574
  Handle the --reload-agents flag by deleting all local claude-mpm system agents.
@@ -738,10 +703,7 @@ def run_session_legacy(args):
738
703
  if getattr(args, "reload_agents", False):
739
704
  _handle_reload_agents(logger)
740
705
 
741
- # Auto-configure MCP services on startup
742
- _ensure_mcp_services_configured(logger)
743
-
744
- # Trigger vector search indexing after MCP is configured
706
+ # Trigger vector search indexing
745
707
  try:
746
708
  from ...cli.startup_logging import start_vector_search_indexing
747
709