claude-mpm 4.16.0__py3-none-any.whl → 4.25.10__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 (531) hide show
  1. claude_mpm/VERSION +1 -1
  2. claude_mpm/agents/BASE_ENGINEER.md +286 -0
  3. claude_mpm/agents/BASE_PM.md +272 -23
  4. claude_mpm/agents/OUTPUT_STYLE.md +3 -48
  5. claude_mpm/agents/PM_INSTRUCTIONS.md +1821 -32
  6. claude_mpm/agents/WORKFLOW.md +75 -2
  7. claude_mpm/agents/agent_loader.py +4 -4
  8. claude_mpm/agents/base_agent.json +6 -3
  9. claude_mpm/agents/frontmatter_validator.py +1 -1
  10. claude_mpm/agents/templates/api_qa.json +5 -2
  11. claude_mpm/agents/templates/circuit_breakers.md +108 -2
  12. claude_mpm/agents/templates/documentation.json +33 -6
  13. claude_mpm/agents/templates/engineer.json +5 -1
  14. claude_mpm/agents/templates/javascript_engineer_agent.json +380 -0
  15. claude_mpm/agents/templates/php-engineer.json +10 -4
  16. claude_mpm/agents/templates/pm_red_flags.md +89 -19
  17. claude_mpm/agents/templates/project_organizer.json +7 -3
  18. claude_mpm/agents/templates/python_engineer.json +8 -3
  19. claude_mpm/agents/templates/qa.json +2 -1
  20. claude_mpm/agents/templates/react_engineer.json +1 -0
  21. claude_mpm/agents/templates/research.json +82 -12
  22. claude_mpm/agents/templates/rust_engineer.json +12 -7
  23. claude_mpm/agents/templates/security.json +4 -4
  24. claude_mpm/agents/templates/svelte-engineer.json +225 -0
  25. claude_mpm/agents/templates/tauri_engineer.json +274 -0
  26. claude_mpm/agents/templates/ticketing.json +10 -6
  27. claude_mpm/agents/templates/version_control.json +4 -2
  28. claude_mpm/agents/templates/web_qa.json +2 -1
  29. claude_mpm/cli/README.md +253 -0
  30. claude_mpm/cli/__init__.py +11 -1
  31. claude_mpm/cli/commands/__init__.py +2 -0
  32. claude_mpm/cli/commands/aggregate.py +1 -1
  33. claude_mpm/cli/commands/analyze.py +3 -3
  34. claude_mpm/cli/commands/cleanup.py +1 -1
  35. claude_mpm/cli/commands/configure_agent_display.py +4 -4
  36. claude_mpm/cli/commands/debug.py +12 -12
  37. claude_mpm/cli/commands/hook_errors.py +277 -0
  38. claude_mpm/cli/commands/mcp_install_commands.py +1 -1
  39. claude_mpm/cli/commands/mcp_install_commands.py.backup +284 -0
  40. claude_mpm/cli/commands/mpm_init/README.md +365 -0
  41. claude_mpm/cli/commands/mpm_init/__init__.py +73 -0
  42. claude_mpm/cli/commands/mpm_init/core.py +573 -0
  43. claude_mpm/cli/commands/mpm_init/display.py +341 -0
  44. claude_mpm/cli/commands/mpm_init/git_activity.py +427 -0
  45. claude_mpm/cli/commands/mpm_init/modes.py +397 -0
  46. claude_mpm/cli/commands/mpm_init/prompts.py +442 -0
  47. claude_mpm/cli/commands/mpm_init_cli.py +396 -0
  48. claude_mpm/cli/commands/mpm_init_handler.py +67 -1
  49. claude_mpm/cli/commands/run.py +124 -128
  50. claude_mpm/cli/commands/skills.py +922 -0
  51. claude_mpm/cli/executor.py +58 -0
  52. claude_mpm/cli/interactive/agent_wizard.py +5 -5
  53. claude_mpm/cli/parsers/base_parser.py +35 -0
  54. claude_mpm/cli/parsers/mpm_init_parser.py +42 -0
  55. claude_mpm/cli/parsers/skills_parser.py +275 -0
  56. claude_mpm/cli/startup.py +168 -8
  57. claude_mpm/cli/startup_display.py +480 -0
  58. claude_mpm/cli/utils.py +1 -1
  59. claude_mpm/cli_module/commands.py +1 -1
  60. claude_mpm/cli_module/refactoring_guide.md +253 -0
  61. claude_mpm/commands/mpm-auto-configure.md +52 -0
  62. claude_mpm/commands/mpm-help.md +6 -0
  63. claude_mpm/commands/mpm-init.md +130 -8
  64. claude_mpm/commands/mpm-resume.md +372 -0
  65. claude_mpm/commands/mpm-tickets.md +56 -7
  66. claude_mpm/commands/mpm-version.md +113 -0
  67. claude_mpm/commands/mpm.md +2 -0
  68. claude_mpm/config/agent_capabilities.yaml +658 -0
  69. claude_mpm/config/agent_config.py +2 -2
  70. claude_mpm/config/async_logging_config.yaml +145 -0
  71. claude_mpm/constants.py +24 -0
  72. claude_mpm/core/.claude-mpm/logs/hooks_20250730.log +34 -0
  73. claude_mpm/core/api_validator.py +1 -1
  74. claude_mpm/core/claude_runner.py +14 -1
  75. claude_mpm/core/config.py +50 -0
  76. claude_mpm/core/constants.py +1 -1
  77. claude_mpm/core/factories.py +1 -1
  78. claude_mpm/core/framework/processors/metadata_processor.py +1 -1
  79. claude_mpm/core/hook_error_memory.py +381 -0
  80. claude_mpm/core/hook_manager.py +41 -2
  81. claude_mpm/core/interactive_session.py +48 -3
  82. claude_mpm/core/interfaces.py +56 -1
  83. claude_mpm/core/logger.py +3 -1
  84. claude_mpm/core/oneshot_session.py +39 -0
  85. claude_mpm/core/optimized_agent_loader.py +3 -3
  86. claude_mpm/d2/.gitignore +22 -0
  87. claude_mpm/d2/ARCHITECTURE_COMPARISON.md +273 -0
  88. claude_mpm/d2/FLASK_INTEGRATION.md +156 -0
  89. claude_mpm/d2/IMPLEMENTATION_SUMMARY.md +452 -0
  90. claude_mpm/d2/QUICKSTART.md +186 -0
  91. claude_mpm/d2/README.md +232 -0
  92. claude_mpm/d2/STORE_FIX_SUMMARY.md +167 -0
  93. claude_mpm/d2/SVELTE5_STORES_GUIDE.md +180 -0
  94. claude_mpm/d2/TESTING.md +288 -0
  95. claude_mpm/d2/index.html +118 -0
  96. claude_mpm/d2/package.json +19 -0
  97. claude_mpm/d2/src/App.svelte +110 -0
  98. claude_mpm/d2/src/components/Header.svelte +153 -0
  99. claude_mpm/d2/src/components/MainContent.svelte +74 -0
  100. claude_mpm/d2/src/components/Sidebar.svelte +85 -0
  101. claude_mpm/d2/src/components/tabs/EventsTab.svelte +326 -0
  102. claude_mpm/d2/src/lib/socketio.js +144 -0
  103. claude_mpm/d2/src/main.js +7 -0
  104. claude_mpm/d2/src/stores/events.js +114 -0
  105. claude_mpm/d2/src/stores/socket.js +108 -0
  106. claude_mpm/d2/src/stores/theme.js +65 -0
  107. claude_mpm/d2/svelte.config.js +12 -0
  108. claude_mpm/d2/vite.config.js +15 -0
  109. claude_mpm/dashboard/.claude-mpm/memories/README.md +36 -0
  110. claude_mpm/dashboard/BUILD_NUMBER +1 -0
  111. claude_mpm/dashboard/README.md +121 -0
  112. claude_mpm/dashboard/VERSION +1 -0
  113. claude_mpm/dashboard/react/components/DataInspector/DataInspector.tsx +273 -0
  114. claude_mpm/dashboard/react/components/ErrorBoundary.tsx +75 -0
  115. claude_mpm/dashboard/react/components/EventViewer/EventViewer.tsx +141 -0
  116. claude_mpm/dashboard/react/components/shared/ConnectionStatus.tsx +36 -0
  117. claude_mpm/dashboard/react/components/shared/FilterBar.tsx +89 -0
  118. claude_mpm/dashboard/react/contexts/DashboardContext.tsx +215 -0
  119. claude_mpm/dashboard/react/entries/events.tsx +165 -0
  120. claude_mpm/dashboard/react/hooks/useEvents.ts +191 -0
  121. claude_mpm/dashboard/react/hooks/useSocket.ts +225 -0
  122. claude_mpm/dashboard/static/built/REFACTORING_SUMMARY.md +170 -0
  123. claude_mpm/dashboard/static/built/components/activity-tree.js.map +1 -0
  124. claude_mpm/dashboard/static/built/components/agent-hierarchy.js +101 -101
  125. claude_mpm/dashboard/static/built/components/agent-inference.js.map +1 -0
  126. claude_mpm/dashboard/static/built/components/build-tracker.js +59 -59
  127. claude_mpm/dashboard/static/built/components/code-simple.js +107 -107
  128. claude_mpm/dashboard/static/built/components/code-tree/tree-breadcrumb.js +29 -29
  129. claude_mpm/dashboard/static/built/components/code-tree/tree-constants.js +24 -24
  130. claude_mpm/dashboard/static/built/components/code-tree/tree-search.js +27 -27
  131. claude_mpm/dashboard/static/built/components/code-tree/tree-utils.js +25 -25
  132. claude_mpm/dashboard/static/built/components/code-tree.js.map +1 -0
  133. claude_mpm/dashboard/static/built/components/code-viewer.js.map +1 -0
  134. claude_mpm/dashboard/static/built/components/connection-debug.js +101 -101
  135. claude_mpm/dashboard/static/built/components/diff-viewer.js +113 -113
  136. claude_mpm/dashboard/static/built/components/event-processor.js.map +1 -0
  137. claude_mpm/dashboard/static/built/components/event-viewer.js.map +1 -0
  138. claude_mpm/dashboard/static/built/components/export-manager.js.map +1 -0
  139. claude_mpm/dashboard/static/built/components/file-change-tracker.js +57 -57
  140. claude_mpm/dashboard/static/built/components/file-change-viewer.js +74 -74
  141. claude_mpm/dashboard/static/built/components/file-tool-tracker.js.map +1 -0
  142. claude_mpm/dashboard/static/built/components/file-viewer.js.map +1 -0
  143. claude_mpm/dashboard/static/built/components/hud-library-loader.js.map +1 -0
  144. claude_mpm/dashboard/static/built/components/hud-manager.js.map +1 -0
  145. claude_mpm/dashboard/static/built/components/hud-visualizer.js.map +1 -0
  146. claude_mpm/dashboard/static/built/components/module-viewer.js.map +1 -0
  147. claude_mpm/dashboard/static/built/components/session-manager.js.map +1 -0
  148. claude_mpm/dashboard/static/built/components/socket-manager.js.map +1 -0
  149. claude_mpm/dashboard/static/built/components/ui-state-manager.js.map +1 -0
  150. claude_mpm/dashboard/static/built/components/unified-data-viewer.js.map +1 -0
  151. claude_mpm/dashboard/static/built/components/working-directory.js.map +1 -0
  152. claude_mpm/dashboard/static/built/connection-manager.js +76 -76
  153. claude_mpm/dashboard/static/built/dashboard.js.map +1 -0
  154. claude_mpm/dashboard/static/built/extension-error-handler.js +22 -22
  155. claude_mpm/dashboard/static/built/react/events.js.map +1 -0
  156. claude_mpm/dashboard/static/built/shared/dom-helpers.js +9 -9
  157. claude_mpm/dashboard/static/built/shared/event-bus.js +5 -5
  158. claude_mpm/dashboard/static/built/shared/logger.js +16 -16
  159. claude_mpm/dashboard/static/built/shared/tooltip-service.js +6 -6
  160. claude_mpm/dashboard/static/built/socket-client.js.map +1 -0
  161. claude_mpm/dashboard/static/css/activity.css +69 -69
  162. claude_mpm/dashboard/static/css/connection-status.css +10 -10
  163. claude_mpm/dashboard/static/css/dashboard.css +15 -15
  164. claude_mpm/dashboard/static/index.html +22 -22
  165. claude_mpm/dashboard/static/js/REFACTORING_SUMMARY.md +170 -0
  166. claude_mpm/dashboard/static/js/components/activity-tree.js +178 -178
  167. claude_mpm/dashboard/static/js/components/agent-hierarchy.js +101 -101
  168. claude_mpm/dashboard/static/js/components/agent-inference.js +31 -31
  169. claude_mpm/dashboard/static/js/components/build-tracker.js +59 -59
  170. claude_mpm/dashboard/static/js/components/code-simple.js +107 -107
  171. claude_mpm/dashboard/static/js/components/connection-debug.js +101 -101
  172. claude_mpm/dashboard/static/js/components/diff-viewer.js +113 -113
  173. claude_mpm/dashboard/static/js/components/event-viewer.js +12 -12
  174. claude_mpm/dashboard/static/js/components/file-change-tracker.js +57 -57
  175. claude_mpm/dashboard/static/js/components/file-change-viewer.js +74 -74
  176. claude_mpm/dashboard/static/js/components/file-tool-tracker.js +6 -6
  177. claude_mpm/dashboard/static/js/components/file-viewer.js +42 -42
  178. claude_mpm/dashboard/static/js/components/module-viewer.js +27 -27
  179. claude_mpm/dashboard/static/js/components/session-manager.js +14 -14
  180. claude_mpm/dashboard/static/js/components/socket-manager.js +1 -1
  181. claude_mpm/dashboard/static/js/components/ui-state-manager.js +14 -14
  182. claude_mpm/dashboard/static/js/components/unified-data-viewer.js +110 -110
  183. claude_mpm/dashboard/static/js/components/working-directory.js +8 -8
  184. claude_mpm/dashboard/static/js/connection-manager.js +76 -76
  185. claude_mpm/dashboard/static/js/dashboard.js +76 -58
  186. claude_mpm/dashboard/static/js/extension-error-handler.js +22 -22
  187. claude_mpm/dashboard/static/js/shared/dom-helpers.js +9 -9
  188. claude_mpm/dashboard/static/js/shared/event-bus.js +5 -5
  189. claude_mpm/dashboard/static/js/shared/logger.js +16 -16
  190. claude_mpm/dashboard/static/js/shared/tooltip-service.js +6 -6
  191. claude_mpm/dashboard/static/js/socket-client.js +138 -121
  192. claude_mpm/dashboard/static/navigation-test-results.md +118 -0
  193. claude_mpm/dashboard/static/production/main.html +21 -21
  194. claude_mpm/dashboard/static/test-archive/dashboard.html +22 -22
  195. claude_mpm/dashboard/templates/.claude-mpm/memories/README.md +36 -0
  196. claude_mpm/dashboard/templates/.claude-mpm/memories/engineer_agent.md +39 -0
  197. claude_mpm/dashboard/templates/.claude-mpm/memories/version_control_agent.md +38 -0
  198. claude_mpm/dashboard/templates/code_simple.html +23 -23
  199. claude_mpm/dashboard/templates/index.html +18 -18
  200. claude_mpm/hooks/README.md +143 -0
  201. claude_mpm/hooks/__init__.py +8 -0
  202. claude_mpm/hooks/claude_hooks/event_handlers.py +3 -1
  203. claude_mpm/hooks/claude_hooks/hook_handler.py +24 -7
  204. claude_mpm/hooks/claude_hooks/installer.py +45 -0
  205. claude_mpm/hooks/claude_hooks/response_tracking.py +35 -1
  206. claude_mpm/hooks/session_resume_hook.py +121 -0
  207. claude_mpm/hooks/templates/README.md +180 -0
  208. claude_mpm/hooks/templates/pre_tool_use_simple.py +78 -0
  209. claude_mpm/hooks/templates/pre_tool_use_template.py +323 -0
  210. claude_mpm/hooks/templates/settings.json.example +147 -0
  211. claude_mpm/models/resume_log.py +340 -0
  212. claude_mpm/schemas/agent_schema.json +596 -0
  213. claude_mpm/schemas/frontmatter_schema.json +165 -0
  214. claude_mpm/scripts/claude-hook-handler.sh +3 -3
  215. claude_mpm/scripts/start_activity_logging.py +3 -1
  216. claude_mpm/services/agents/auto_config_manager.py +1 -1
  217. claude_mpm/services/agents/deployment/agent_configuration_manager.py +1 -1
  218. claude_mpm/services/agents/deployment/agent_format_converter.py +1 -1
  219. claude_mpm/services/agents/deployment/agent_metrics_collector.py +3 -3
  220. claude_mpm/services/agents/deployment/agent_record_service.py +1 -1
  221. claude_mpm/services/agents/deployment/agent_validator.py +17 -1
  222. claude_mpm/services/agents/deployment/async_agent_deployment.py +1 -1
  223. claude_mpm/services/agents/deployment/facade/deployment_facade.py +3 -3
  224. claude_mpm/services/agents/deployment/local_template_deployment.py +1 -1
  225. claude_mpm/services/agents/deployment/pipeline/pipeline_executor.py +2 -2
  226. claude_mpm/services/agents/loading/framework_agent_loader.py +8 -8
  227. claude_mpm/services/agents/local_template_manager.py +4 -2
  228. claude_mpm/services/agents/recommender.py +47 -0
  229. claude_mpm/services/cli/resume_service.py +617 -0
  230. claude_mpm/services/cli/session_manager.py +87 -0
  231. claude_mpm/services/cli/session_pause_manager.py +504 -0
  232. claude_mpm/services/cli/session_resume_helper.py +372 -0
  233. claude_mpm/services/cli/unified_dashboard_manager.py +1 -1
  234. claude_mpm/services/core/base.py +26 -11
  235. claude_mpm/services/core/interfaces.py +56 -1
  236. claude_mpm/services/core/models/agent_config.py +3 -0
  237. claude_mpm/services/core/models/process.py +4 -0
  238. claude_mpm/services/core/path_resolver.py +1 -1
  239. claude_mpm/services/diagnostics/checks/agent_check.py +0 -2
  240. claude_mpm/services/diagnostics/checks/instructions_check.py +1 -2
  241. claude_mpm/services/diagnostics/checks/mcp_check.py +0 -1
  242. claude_mpm/services/diagnostics/checks/monitor_check.py +0 -1
  243. claude_mpm/services/diagnostics/doctor_reporter.py +6 -4
  244. claude_mpm/services/diagnostics/models.py +21 -0
  245. claude_mpm/services/event_bus/README.md +244 -0
  246. claude_mpm/services/event_bus/direct_relay.py +3 -3
  247. claude_mpm/services/event_bus/event_bus.py +36 -3
  248. claude_mpm/services/event_bus/relay.py +23 -7
  249. claude_mpm/services/events/README.md +303 -0
  250. claude_mpm/services/events/consumers/logging.py +1 -2
  251. claude_mpm/services/framework_claude_md_generator/README.md +119 -0
  252. claude_mpm/services/infrastructure/monitoring/resources.py +1 -1
  253. claude_mpm/services/infrastructure/resume_log_generator.py +439 -0
  254. claude_mpm/services/local_ops/__init__.py +2 -0
  255. claude_mpm/services/local_ops/process_manager.py +1 -1
  256. claude_mpm/services/local_ops/resource_monitor.py +2 -2
  257. claude_mpm/services/mcp_config_manager.py +7 -131
  258. claude_mpm/services/mcp_gateway/README.md +185 -0
  259. claude_mpm/services/mcp_gateway/auto_configure.py +31 -25
  260. claude_mpm/services/mcp_gateway/config/configuration.py +1 -1
  261. claude_mpm/services/mcp_gateway/core/process_pool.py +19 -10
  262. claude_mpm/services/mcp_gateway/server/stdio_server.py +0 -2
  263. claude_mpm/services/mcp_gateway/tools/document_summarizer.py +1 -1
  264. claude_mpm/services/mcp_gateway/tools/external_mcp_services.py +26 -21
  265. claude_mpm/services/mcp_gateway/tools/kuzu_memory_service.py +6 -2
  266. claude_mpm/services/memory/failure_tracker.py +19 -4
  267. claude_mpm/services/memory/optimizer.py +1 -1
  268. claude_mpm/services/model/model_router.py +8 -9
  269. claude_mpm/services/monitor/daemon.py +1 -1
  270. claude_mpm/services/monitor/server.py +2 -2
  271. claude_mpm/services/native_agent_converter.py +356 -0
  272. claude_mpm/services/port_manager.py +1 -1
  273. claude_mpm/services/project/documentation_manager.py +2 -1
  274. claude_mpm/services/project/toolchain_analyzer.py +3 -1
  275. claude_mpm/services/runner_configuration_service.py +1 -0
  276. claude_mpm/services/self_upgrade_service.py +165 -7
  277. claude_mpm/services/session_manager.py +205 -1
  278. claude_mpm/services/skills_config.py +547 -0
  279. claude_mpm/services/skills_deployer.py +955 -0
  280. claude_mpm/services/socketio/handlers/connection.py +1 -1
  281. claude_mpm/services/socketio/handlers/connection.py.backup +217 -0
  282. claude_mpm/services/socketio/handlers/git.py +2 -2
  283. claude_mpm/services/socketio/handlers/hook.py.backup +154 -0
  284. claude_mpm/services/static/.gitkeep +2 -0
  285. claude_mpm/services/system_instructions_service.py +1 -3
  286. claude_mpm/services/unified/analyzer_strategies/performance_analyzer.py +0 -3
  287. claude_mpm/services/unified/analyzer_strategies/security_analyzer.py +0 -1
  288. claude_mpm/services/unified/deployment_strategies/cloud_strategies.py +1 -1
  289. claude_mpm/services/unified/deployment_strategies/local.py +1 -1
  290. claude_mpm/services/version_control/VERSION +1 -0
  291. claude_mpm/services/version_control/conflict_resolution.py +6 -4
  292. claude_mpm/services/version_service.py +104 -1
  293. claude_mpm/services/visualization/mermaid_generator.py +2 -3
  294. claude_mpm/skills/__init__.py +21 -0
  295. claude_mpm/skills/agent_skills_injector.py +324 -0
  296. claude_mpm/skills/bundled/.gitkeep +2 -0
  297. claude_mpm/skills/bundled/LICENSE_ATTRIBUTIONS.md +79 -0
  298. claude_mpm/skills/bundled/api-documentation.md +393 -0
  299. claude_mpm/skills/bundled/async-testing.md +571 -0
  300. claude_mpm/skills/bundled/code-review.md +143 -0
  301. claude_mpm/skills/bundled/collaboration/brainstorming/SKILL.md +79 -0
  302. claude_mpm/skills/bundled/collaboration/dispatching-parallel-agents/SKILL.md +178 -0
  303. claude_mpm/skills/bundled/collaboration/dispatching-parallel-agents/references/agent-prompts.md +577 -0
  304. claude_mpm/skills/bundled/collaboration/dispatching-parallel-agents/references/coordination-patterns.md +467 -0
  305. claude_mpm/skills/bundled/collaboration/dispatching-parallel-agents/references/examples.md +537 -0
  306. claude_mpm/skills/bundled/collaboration/dispatching-parallel-agents/references/troubleshooting.md +730 -0
  307. claude_mpm/skills/bundled/collaboration/git-worktrees.md +317 -0
  308. claude_mpm/skills/bundled/collaboration/requesting-code-review/SKILL.md +112 -0
  309. claude_mpm/skills/bundled/collaboration/requesting-code-review/references/code-reviewer-template.md +146 -0
  310. claude_mpm/skills/bundled/collaboration/requesting-code-review/references/review-examples.md +412 -0
  311. claude_mpm/skills/bundled/collaboration/stacked-prs.md +251 -0
  312. claude_mpm/skills/bundled/collaboration/writing-plans/SKILL.md +81 -0
  313. claude_mpm/skills/bundled/collaboration/writing-plans/references/best-practices.md +362 -0
  314. claude_mpm/skills/bundled/collaboration/writing-plans/references/plan-structure-templates.md +312 -0
  315. claude_mpm/skills/bundled/database-migration.md +199 -0
  316. claude_mpm/skills/bundled/debugging/root-cause-tracing/SKILL.md +152 -0
  317. claude_mpm/skills/bundled/debugging/root-cause-tracing/find-polluter.sh +63 -0
  318. claude_mpm/skills/bundled/debugging/root-cause-tracing/references/advanced-techniques.md +668 -0
  319. claude_mpm/skills/bundled/debugging/root-cause-tracing/references/examples.md +587 -0
  320. claude_mpm/skills/bundled/debugging/root-cause-tracing/references/integration.md +438 -0
  321. claude_mpm/skills/bundled/debugging/root-cause-tracing/references/tracing-techniques.md +391 -0
  322. claude_mpm/skills/bundled/debugging/systematic-debugging/CREATION-LOG.md +119 -0
  323. claude_mpm/skills/bundled/debugging/systematic-debugging/SKILL.md +148 -0
  324. claude_mpm/skills/bundled/debugging/systematic-debugging/references/anti-patterns.md +483 -0
  325. claude_mpm/skills/bundled/debugging/systematic-debugging/references/examples.md +452 -0
  326. claude_mpm/skills/bundled/debugging/systematic-debugging/references/troubleshooting.md +449 -0
  327. claude_mpm/skills/bundled/debugging/systematic-debugging/references/workflow.md +411 -0
  328. claude_mpm/skills/bundled/debugging/systematic-debugging/test-academic.md +14 -0
  329. claude_mpm/skills/bundled/debugging/systematic-debugging/test-pressure-1.md +58 -0
  330. claude_mpm/skills/bundled/debugging/systematic-debugging/test-pressure-2.md +68 -0
  331. claude_mpm/skills/bundled/debugging/systematic-debugging/test-pressure-3.md +69 -0
  332. claude_mpm/skills/bundled/debugging/verification-before-completion/SKILL.md +131 -0
  333. claude_mpm/skills/bundled/debugging/verification-before-completion/references/gate-function.md +325 -0
  334. claude_mpm/skills/bundled/debugging/verification-before-completion/references/integration-and-workflows.md +490 -0
  335. claude_mpm/skills/bundled/debugging/verification-before-completion/references/red-flags-and-failures.md +425 -0
  336. claude_mpm/skills/bundled/debugging/verification-before-completion/references/verification-patterns.md +499 -0
  337. claude_mpm/skills/bundled/docker-containerization.md +194 -0
  338. claude_mpm/skills/bundled/express-local-dev.md +1429 -0
  339. claude_mpm/skills/bundled/fastapi-local-dev.md +1199 -0
  340. claude_mpm/skills/bundled/git-workflow.md +414 -0
  341. claude_mpm/skills/bundled/imagemagick.md +204 -0
  342. claude_mpm/skills/bundled/infrastructure/env-manager/INTEGRATION.md +611 -0
  343. claude_mpm/skills/bundled/infrastructure/env-manager/README.md +596 -0
  344. claude_mpm/skills/bundled/infrastructure/env-manager/SKILL.md +260 -0
  345. claude_mpm/skills/bundled/infrastructure/env-manager/examples/nextjs-env-structure.md +315 -0
  346. claude_mpm/skills/bundled/infrastructure/env-manager/references/frameworks.md +436 -0
  347. claude_mpm/skills/bundled/infrastructure/env-manager/references/security.md +433 -0
  348. claude_mpm/skills/bundled/infrastructure/env-manager/references/synchronization.md +452 -0
  349. claude_mpm/skills/bundled/infrastructure/env-manager/references/troubleshooting.md +404 -0
  350. claude_mpm/skills/bundled/infrastructure/env-manager/references/validation.md +420 -0
  351. claude_mpm/skills/bundled/infrastructure/env-manager/scripts/validate_env.py +576 -0
  352. claude_mpm/skills/bundled/json-data-handling.md +223 -0
  353. claude_mpm/skills/bundled/main/artifacts-builder/LICENSE.txt +202 -0
  354. claude_mpm/skills/bundled/main/artifacts-builder/SKILL.md +86 -0
  355. claude_mpm/skills/bundled/main/artifacts-builder/scripts/bundle-artifact.sh +54 -0
  356. claude_mpm/skills/bundled/main/artifacts-builder/scripts/init-artifact.sh +322 -0
  357. claude_mpm/skills/bundled/main/artifacts-builder/scripts/shadcn-components.tar.gz +0 -0
  358. claude_mpm/skills/bundled/main/internal-comms/LICENSE.txt +202 -0
  359. claude_mpm/skills/bundled/main/internal-comms/SKILL.md +43 -0
  360. claude_mpm/skills/bundled/main/internal-comms/examples/3p-updates.md +47 -0
  361. claude_mpm/skills/bundled/main/internal-comms/examples/company-newsletter.md +65 -0
  362. claude_mpm/skills/bundled/main/internal-comms/examples/faq-answers.md +30 -0
  363. claude_mpm/skills/bundled/main/internal-comms/examples/general-comms.md +16 -0
  364. claude_mpm/skills/bundled/main/mcp-builder/LICENSE.txt +202 -0
  365. claude_mpm/skills/bundled/main/mcp-builder/SKILL.md +160 -0
  366. claude_mpm/skills/bundled/main/mcp-builder/reference/design_principles.md +412 -0
  367. claude_mpm/skills/bundled/main/mcp-builder/reference/evaluation.md +602 -0
  368. claude_mpm/skills/bundled/main/mcp-builder/reference/mcp_best_practices.md +915 -0
  369. claude_mpm/skills/bundled/main/mcp-builder/reference/node_mcp_server.md +916 -0
  370. claude_mpm/skills/bundled/main/mcp-builder/reference/python_mcp_server.md +752 -0
  371. claude_mpm/skills/bundled/main/mcp-builder/reference/workflow.md +1237 -0
  372. claude_mpm/skills/bundled/main/mcp-builder/scripts/connections.py +157 -0
  373. claude_mpm/skills/bundled/main/mcp-builder/scripts/evaluation.py +425 -0
  374. claude_mpm/skills/bundled/main/mcp-builder/scripts/example_evaluation.xml +22 -0
  375. claude_mpm/skills/bundled/main/mcp-builder/scripts/requirements.txt +2 -0
  376. claude_mpm/skills/bundled/main/skill-creator/LICENSE.txt +202 -0
  377. claude_mpm/skills/bundled/main/skill-creator/SKILL.md +189 -0
  378. claude_mpm/skills/bundled/main/skill-creator/references/best-practices.md +500 -0
  379. claude_mpm/skills/bundled/main/skill-creator/references/creation-workflow.md +464 -0
  380. claude_mpm/skills/bundled/main/skill-creator/references/examples.md +619 -0
  381. claude_mpm/skills/bundled/main/skill-creator/references/progressive-disclosure.md +437 -0
  382. claude_mpm/skills/bundled/main/skill-creator/references/skill-structure.md +231 -0
  383. claude_mpm/skills/bundled/main/skill-creator/scripts/init_skill.py +303 -0
  384. claude_mpm/skills/bundled/main/skill-creator/scripts/package_skill.py +113 -0
  385. claude_mpm/skills/bundled/main/skill-creator/scripts/quick_validate.py +72 -0
  386. claude_mpm/skills/bundled/nextjs-local-dev.md +807 -0
  387. claude_mpm/skills/bundled/pdf.md +141 -0
  388. claude_mpm/skills/bundled/performance-profiling.md +573 -0
  389. claude_mpm/skills/bundled/php/espocrm-development/SKILL.md +170 -0
  390. claude_mpm/skills/bundled/php/espocrm-development/references/architecture.md +602 -0
  391. claude_mpm/skills/bundled/php/espocrm-development/references/common-tasks.md +821 -0
  392. claude_mpm/skills/bundled/php/espocrm-development/references/development-workflow.md +742 -0
  393. claude_mpm/skills/bundled/php/espocrm-development/references/frontend-customization.md +726 -0
  394. claude_mpm/skills/bundled/php/espocrm-development/references/hooks-and-services.md +764 -0
  395. claude_mpm/skills/bundled/php/espocrm-development/references/testing-debugging.md +831 -0
  396. claude_mpm/skills/bundled/react/flexlayout-react.md +742 -0
  397. claude_mpm/skills/bundled/refactoring-patterns.md +180 -0
  398. claude_mpm/skills/bundled/rust/desktop-applications/SKILL.md +226 -0
  399. claude_mpm/skills/bundled/rust/desktop-applications/references/architecture-patterns.md +901 -0
  400. claude_mpm/skills/bundled/rust/desktop-applications/references/native-gui-frameworks.md +901 -0
  401. claude_mpm/skills/bundled/rust/desktop-applications/references/platform-integration.md +775 -0
  402. claude_mpm/skills/bundled/rust/desktop-applications/references/state-management.md +937 -0
  403. claude_mpm/skills/bundled/rust/desktop-applications/references/tauri-framework.md +770 -0
  404. claude_mpm/skills/bundled/rust/desktop-applications/references/testing-deployment.md +961 -0
  405. claude_mpm/skills/bundled/security-scanning.md +327 -0
  406. claude_mpm/skills/bundled/systematic-debugging.md +473 -0
  407. claude_mpm/skills/bundled/tauri/tauri-async-patterns.md +495 -0
  408. claude_mpm/skills/bundled/tauri/tauri-build-deploy.md +599 -0
  409. claude_mpm/skills/bundled/tauri/tauri-command-patterns.md +535 -0
  410. claude_mpm/skills/bundled/tauri/tauri-error-handling.md +613 -0
  411. claude_mpm/skills/bundled/tauri/tauri-event-system.md +648 -0
  412. claude_mpm/skills/bundled/tauri/tauri-file-system.md +673 -0
  413. claude_mpm/skills/bundled/tauri/tauri-frontend-integration.md +767 -0
  414. claude_mpm/skills/bundled/tauri/tauri-performance.md +669 -0
  415. claude_mpm/skills/bundled/tauri/tauri-state-management.md +573 -0
  416. claude_mpm/skills/bundled/tauri/tauri-testing.md +384 -0
  417. claude_mpm/skills/bundled/tauri/tauri-window-management.md +628 -0
  418. claude_mpm/skills/bundled/test-driven-development.md +378 -0
  419. claude_mpm/skills/bundled/testing/condition-based-waiting/SKILL.md +119 -0
  420. claude_mpm/skills/bundled/testing/condition-based-waiting/example.ts +158 -0
  421. claude_mpm/skills/bundled/testing/condition-based-waiting/references/patterns-and-implementation.md +253 -0
  422. claude_mpm/skills/bundled/testing/test-driven-development/SKILL.md +145 -0
  423. claude_mpm/skills/bundled/testing/test-driven-development/references/anti-patterns.md +543 -0
  424. claude_mpm/skills/bundled/testing/test-driven-development/references/examples.md +741 -0
  425. claude_mpm/skills/bundled/testing/test-driven-development/references/integration.md +470 -0
  426. claude_mpm/skills/bundled/testing/test-driven-development/references/philosophy.md +458 -0
  427. claude_mpm/skills/bundled/testing/test-driven-development/references/workflow.md +639 -0
  428. claude_mpm/skills/bundled/testing/test-quality-inspector/SKILL.md +458 -0
  429. claude_mpm/skills/bundled/testing/test-quality-inspector/examples/example-inspection-report.md +411 -0
  430. claude_mpm/skills/bundled/testing/test-quality-inspector/references/assertion-quality.md +317 -0
  431. claude_mpm/skills/bundled/testing/test-quality-inspector/references/inspection-checklist.md +270 -0
  432. claude_mpm/skills/bundled/testing/test-quality-inspector/references/red-flags.md +436 -0
  433. claude_mpm/skills/bundled/testing/testing-anti-patterns/SKILL.md +140 -0
  434. claude_mpm/skills/bundled/testing/testing-anti-patterns/references/completeness-anti-patterns.md +572 -0
  435. claude_mpm/skills/bundled/testing/testing-anti-patterns/references/core-anti-patterns.md +411 -0
  436. claude_mpm/skills/bundled/testing/testing-anti-patterns/references/detection-guide.md +569 -0
  437. claude_mpm/skills/bundled/testing/testing-anti-patterns/references/tdd-connection.md +695 -0
  438. claude_mpm/skills/bundled/testing/webapp-testing/LICENSE.txt +202 -0
  439. claude_mpm/skills/bundled/testing/webapp-testing/SKILL.md +184 -0
  440. claude_mpm/skills/bundled/testing/webapp-testing/decision-tree.md +459 -0
  441. claude_mpm/skills/bundled/testing/webapp-testing/examples/console_logging.py +35 -0
  442. claude_mpm/skills/bundled/testing/webapp-testing/examples/element_discovery.py +44 -0
  443. claude_mpm/skills/bundled/testing/webapp-testing/examples/static_html_automation.py +34 -0
  444. claude_mpm/skills/bundled/testing/webapp-testing/playwright-patterns.md +479 -0
  445. claude_mpm/skills/bundled/testing/webapp-testing/reconnaissance-pattern.md +687 -0
  446. claude_mpm/skills/bundled/testing/webapp-testing/scripts/with_server.py +129 -0
  447. claude_mpm/skills/bundled/testing/webapp-testing/server-management.md +758 -0
  448. claude_mpm/skills/bundled/testing/webapp-testing/troubleshooting.md +868 -0
  449. claude_mpm/skills/bundled/vite-local-dev.md +1061 -0
  450. claude_mpm/skills/bundled/web-performance-optimization.md +2305 -0
  451. claude_mpm/skills/bundled/xlsx.md +157 -0
  452. claude_mpm/skills/registry.py +97 -9
  453. claude_mpm/skills/skills_registry.py +347 -0
  454. claude_mpm/skills/skills_service.py +739 -0
  455. claude_mpm/templates/questions/EXAMPLES.md +501 -0
  456. claude_mpm/templates/questions/__init__.py +43 -0
  457. claude_mpm/templates/questions/base.py +193 -0
  458. claude_mpm/templates/questions/pr_strategy.py +314 -0
  459. claude_mpm/templates/questions/project_init.py +388 -0
  460. claude_mpm/templates/questions/ticket_mgmt.py +397 -0
  461. claude_mpm/tools/README_SOCKETIO_DEBUG.md +224 -0
  462. claude_mpm/tools/__main__.py +8 -8
  463. claude_mpm/tools/code_tree_analyzer/README.md +64 -0
  464. claude_mpm/tools/code_tree_analyzer/__init__.py +45 -0
  465. claude_mpm/tools/code_tree_analyzer/analysis.py +299 -0
  466. claude_mpm/tools/code_tree_analyzer/cache.py +131 -0
  467. claude_mpm/tools/code_tree_analyzer/core.py +380 -0
  468. claude_mpm/tools/code_tree_analyzer/discovery.py +403 -0
  469. claude_mpm/tools/code_tree_analyzer/events.py +168 -0
  470. claude_mpm/tools/code_tree_analyzer/gitignore.py +308 -0
  471. claude_mpm/tools/code_tree_analyzer/models.py +39 -0
  472. claude_mpm/tools/code_tree_analyzer/multilang_analyzer.py +224 -0
  473. claude_mpm/tools/code_tree_analyzer/python_analyzer.py +284 -0
  474. claude_mpm/utils/agent_dependency_loader.py +5 -5
  475. claude_mpm/utils/dependency_cache.py +3 -1
  476. claude_mpm/utils/gitignore.py +241 -0
  477. claude_mpm/utils/log_cleanup.py +3 -3
  478. claude_mpm/utils/robust_installer.py +3 -5
  479. claude_mpm/utils/structured_questions.py +619 -0
  480. claude_mpm-4.25.10.dist-info/METADATA +789 -0
  481. {claude_mpm-4.16.0.dist-info → claude_mpm-4.25.10.dist-info}/RECORD +485 -240
  482. claude_mpm/agents/INSTRUCTIONS_OLD_DEPRECATED.md +0 -602
  483. claude_mpm/agents/templates/.claude-mpm/memories/README.md +0 -17
  484. claude_mpm/agents/templates/.claude-mpm/memories/engineer_memories.md +0 -3
  485. claude_mpm/agents/templates/logs/prompts/agent_engineer_20250826_014258_728.md +0 -39
  486. claude_mpm/agents/templates/logs/prompts/agent_engineer_20250901_010124_142.md +0 -400
  487. claude_mpm/cli/commands/mpm_init.py +0 -2008
  488. claude_mpm/dashboard/.claude-mpm/socketio-instances.json +0 -1
  489. claude_mpm/dashboard/static/archive/activity_dashboard_test.html +0 -61
  490. claude_mpm/dashboard/static/archive/test_activity_connection.html +0 -179
  491. claude_mpm/dashboard/static/archive/test_claude_tree_tab.html +0 -68
  492. claude_mpm/dashboard/static/archive/test_dashboard.html +0 -409
  493. claude_mpm/dashboard/static/archive/test_dashboard_fixed.html +0 -519
  494. claude_mpm/dashboard/static/archive/test_dashboard_verification.html +0 -181
  495. claude_mpm/dashboard/static/archive/test_file_data.html +0 -315
  496. claude_mpm/dashboard/static/archive/test_file_tree_empty_state.html +0 -243
  497. claude_mpm/dashboard/static/archive/test_file_tree_fix.html +0 -234
  498. claude_mpm/dashboard/static/archive/test_file_tree_rename.html +0 -117
  499. claude_mpm/dashboard/static/archive/test_file_tree_tab.html +0 -115
  500. claude_mpm/dashboard/static/archive/test_file_viewer.html +0 -224
  501. claude_mpm/dashboard/static/archive/test_final_activity.html +0 -220
  502. claude_mpm/dashboard/static/archive/test_tab_fix.html +0 -139
  503. claude_mpm/dashboard/static/dist/assets/events.DjpNxWNo.css +0 -1
  504. claude_mpm/dashboard/static/dist/components/activity-tree.js +0 -2
  505. claude_mpm/dashboard/static/dist/components/agent-inference.js +0 -2
  506. claude_mpm/dashboard/static/dist/components/code-tree.js +0 -2
  507. claude_mpm/dashboard/static/dist/components/code-viewer.js +0 -2
  508. claude_mpm/dashboard/static/dist/components/event-processor.js +0 -2
  509. claude_mpm/dashboard/static/dist/components/event-viewer.js +0 -2
  510. claude_mpm/dashboard/static/dist/components/export-manager.js +0 -2
  511. claude_mpm/dashboard/static/dist/components/file-tool-tracker.js +0 -2
  512. claude_mpm/dashboard/static/dist/components/file-viewer.js +0 -2
  513. claude_mpm/dashboard/static/dist/components/hud-library-loader.js +0 -2
  514. claude_mpm/dashboard/static/dist/components/hud-manager.js +0 -2
  515. claude_mpm/dashboard/static/dist/components/hud-visualizer.js +0 -2
  516. claude_mpm/dashboard/static/dist/components/module-viewer.js +0 -2
  517. claude_mpm/dashboard/static/dist/components/session-manager.js +0 -2
  518. claude_mpm/dashboard/static/dist/components/socket-manager.js +0 -2
  519. claude_mpm/dashboard/static/dist/components/ui-state-manager.js +0 -2
  520. claude_mpm/dashboard/static/dist/components/unified-data-viewer.js +0 -2
  521. claude_mpm/dashboard/static/dist/components/working-directory.js +0 -2
  522. claude_mpm/dashboard/static/dist/dashboard.js +0 -2
  523. claude_mpm/dashboard/static/dist/react/events.js +0 -30
  524. claude_mpm/dashboard/static/dist/socket-client.js +0 -2
  525. claude_mpm/dashboard/static/test-archive/test_debug.html +0 -25
  526. claude_mpm/tools/code_tree_analyzer.py +0 -1825
  527. claude_mpm-4.16.0.dist-info/METADATA +0 -453
  528. {claude_mpm-4.16.0.dist-info → claude_mpm-4.25.10.dist-info}/WHEEL +0 -0
  529. {claude_mpm-4.16.0.dist-info → claude_mpm-4.25.10.dist-info}/entry_points.txt +0 -0
  530. {claude_mpm-4.16.0.dist-info → claude_mpm-4.25.10.dist-info}/licenses/LICENSE +0 -0
  531. {claude_mpm-4.16.0.dist-info → claude_mpm-4.25.10.dist-info}/top_level.txt +0 -0
@@ -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)
@@ -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,284 @@
1
+ """MCP install command implementations.
2
+
3
+ This module provides MCP installation and configuration commands.
4
+ Extracted from mcp.py to reduce complexity and improve maintainability.
5
+ """
6
+
7
+ import subprocess
8
+ import sys
9
+ from pathlib import Path
10
+
11
+
12
+ class MCPInstallCommands:
13
+ """Handles MCP install commands."""
14
+
15
+ def __init__(self, logger):
16
+ """Initialize the MCP install commands handler."""
17
+ self.logger = logger
18
+
19
+ def install_gateway(self, args):
20
+ """Install and configure MCP gateway.
21
+
22
+ WHY: This command installs the MCP package dependencies and configures
23
+ Claude Code to use the MCP gateway server directly via the CLI command.
24
+
25
+ DESIGN DECISION: We handle both package installation and configuration
26
+ in one command for user convenience, using the new direct CLI approach.
27
+ """
28
+ self.logger.info("MCP gateway installation command called")
29
+ print("📦 Installing and Configuring MCP Gateway")
30
+ print("=" * 50)
31
+
32
+ # Step 1: Install MCP package if needed
33
+ print("\n1️⃣ Checking MCP package installation...")
34
+ try:
35
+ import mcp
36
+ print("✅ MCP package already installed")
37
+ except ImportError:
38
+ print("📦 Installing MCP package...")
39
+ try:
40
+ subprocess.check_call([sys.executable, "-m", "pip", "install", "mcp"])
41
+ print("✅ MCP package installed successfully")
42
+ except subprocess.CalledProcessError as e:
43
+ print(f"❌ Error installing MCP package: {e}")
44
+ print("\nPlease install manually with: pip install mcp")
45
+ return 1
46
+
47
+ # Step 2: Configure Claude Code with the new CLI command
48
+ print("\n2️⃣ Configuring Claude Code...")
49
+ try:
50
+ success = self._configure_claude_desktop(args.force)
51
+ if success:
52
+ print("✅ Configuration completed successfully")
53
+ print("\n🎉 MCP Gateway is ready to use!")
54
+ print("\nNext steps:")
55
+ print("1. Restart Claude Code")
56
+ print("2. Test the server: claude-mpm mcp server --test")
57
+ print("3. Check status: claude-mpm mcp status")
58
+ return 0
59
+ else:
60
+ print("❌ Configuration failed")
61
+ return 1
62
+
63
+ except Exception as e:
64
+ print(f"❌ Error during configuration: {e}")
65
+ return 1
66
+
67
+ def _configure_claude_desktop(self, force=False):
68
+ """Configure Claude Code to use the MCP gateway via CLI command.
69
+
70
+ Args:
71
+ force: Whether to overwrite existing configuration
72
+
73
+ Returns:
74
+ bool: True if configuration was successful
75
+ """
76
+ import json
77
+ import platform
78
+ from pathlib import Path
79
+ from datetime import datetime
80
+
81
+ # Determine Claude Code config path
82
+ config_path = self._get_claude_config_path()
83
+ if not config_path:
84
+ print("❌ Could not determine Claude Code configuration path")
85
+ return False
86
+
87
+ print(f" Configuration path: {config_path}")
88
+
89
+ # Load existing configuration or create new one
90
+ config = self._load_or_create_config(config_path, force)
91
+ if config is None:
92
+ return False
93
+
94
+ # Configure the claude-mpm-gateway server using the CLI command
95
+ claude_mpm_path = self._find_claude_mpm_executable()
96
+ if not claude_mpm_path:
97
+ print("❌ Could not find claude-mpm executable")
98
+ return False
99
+
100
+ # Determine if we need to use -m claude_mpm or direct command
101
+ if claude_mpm_path.endswith(('python', 'python3', 'python.exe', 'python3.exe')):
102
+ # Using Python interpreter directly
103
+ mcp_config = {
104
+ "command": claude_mpm_path,
105
+ "args": ["-m", "claude_mpm", "mcp", "server"],
106
+ "env": {
107
+ "PYTHONPATH": str(Path(__file__).parent.parent.parent.parent),
108
+ "MCP_MODE": "production"
109
+ }
110
+ }
111
+ else:
112
+ # Using installed claude-mpm command
113
+ mcp_config = {
114
+ "command": claude_mpm_path,
115
+ "args": ["mcp", "server"],
116
+ "env": {
117
+ "PYTHONPATH": str(Path(__file__).parent.parent.parent.parent),
118
+ "MCP_MODE": "production"
119
+ }
120
+ }
121
+
122
+ # Update configuration
123
+ if "mcpServers" not in config:
124
+ config["mcpServers"] = {}
125
+
126
+ config["mcpServers"]["claude-mpm-gateway"] = mcp_config
127
+
128
+ print("\n✅ Configured claude-mpm-gateway server:")
129
+ print(f" Command: {mcp_config['command']}")
130
+ print(f" Args: {mcp_config['args']}")
131
+ print(f" Environment variables: {list(mcp_config['env'].keys())}")
132
+
133
+ # Save configuration
134
+ return self._save_config(config, config_path)
135
+
136
+ def _get_claude_config_path(self):
137
+ """Get the Claude Code configuration file path.
138
+
139
+ Returns:
140
+ Path or None: Path to Claude Code config file
141
+ """
142
+ from pathlib import Path
143
+
144
+ # Claude Code uses ~/.claude/settings.local.json regardless of platform
145
+ return Path.home() / ".claude" / "settings.local.json"
146
+
147
+ def _find_claude_mpm_executable(self):
148
+ """Find the claude-mpm executable path.
149
+
150
+ WHY: We need to find the installed claude-mpm command to use as the
151
+ MCP server command. This ensures we're using the properly installed
152
+ version with all dependencies, not a raw Python script.
153
+
154
+ DESIGN DECISION: We prioritize in this order:
155
+ 1. System-installed claude-mpm (most reliable)
156
+ 2. Virtual environment claude-mpm (development)
157
+ 3. Python module invocation (fallback)
158
+
159
+ Returns:
160
+ str or None: Path to claude-mpm executable
161
+ """
162
+ import shutil
163
+ import sys
164
+ import os
165
+
166
+ # 1. Try to find claude-mpm in PATH (system-wide or venv)
167
+ claude_mpm_path = shutil.which("claude-mpm")
168
+ if claude_mpm_path:
169
+ print(f" Found claude-mpm: {claude_mpm_path}")
170
+ return claude_mpm_path
171
+
172
+ # 2. Check if we're in a virtual environment
173
+ if hasattr(sys, 'real_prefix') or (hasattr(sys, 'base_prefix') and sys.base_prefix != sys.prefix):
174
+ # We're in a virtual environment
175
+ venv_bin = Path(sys.prefix) / ("Scripts" if sys.platform == "win32" else "bin")
176
+ venv_claude_mpm = venv_bin / "claude-mpm"
177
+ if venv_claude_mpm.exists():
178
+ print(f" Found claude-mpm in venv: {venv_claude_mpm}")
179
+ return str(venv_claude_mpm)
180
+
181
+ # 3. Check if claude_mpm module is installed and use Python to run it
182
+ try:
183
+ import claude_mpm
184
+ # Return the Python executable - we'll handle the -m args separately
185
+ print(f" Using Python module: {sys.executable} -m claude_mpm")
186
+ return sys.executable
187
+ except ImportError:
188
+ pass
189
+
190
+ # 4. Last resort: check project's local venv (development mode)
191
+ project_root = Path(__file__).parent.parent.parent.parent.parent
192
+ local_venv_bin = project_root / "venv" / ("Scripts" if sys.platform == "win32" else "bin")
193
+ local_claude_mpm = local_venv_bin / "claude-mpm"
194
+ if local_claude_mpm.exists():
195
+ print(f" Found claude-mpm in project venv: {local_claude_mpm}")
196
+ return str(local_claude_mpm)
197
+
198
+ return None
199
+
200
+ def _load_or_create_config(self, config_path, force=False):
201
+ """Load existing configuration or create a new one.
202
+
203
+ Args:
204
+ config_path: Path to configuration file
205
+ force: Whether to overwrite existing configuration
206
+
207
+ Returns:
208
+ dict or None: Configuration dictionary
209
+ """
210
+ import json
211
+ from datetime import datetime
212
+
213
+ config = {}
214
+
215
+ if config_path.exists():
216
+ if not force:
217
+ # Check if claude-mpm-gateway already exists
218
+ try:
219
+ with open(config_path, 'r') as f:
220
+ existing_config = json.load(f)
221
+
222
+ if (existing_config.get("mcpServers", {}).get("claude-mpm-gateway") and
223
+ not force):
224
+ print("⚠️ claude-mpm-gateway is already configured")
225
+ response = input("Do you want to overwrite it? (y/N): ").strip().lower()
226
+ if response not in ['y', 'yes']:
227
+ print("❌ Configuration cancelled")
228
+ return None
229
+
230
+ config = existing_config
231
+
232
+ except (json.JSONDecodeError, IOError) as e:
233
+ print(f"⚠️ Error reading existing config: {e}")
234
+ print("Creating backup and starting fresh...")
235
+
236
+ # Create backup
237
+ backup_path = config_path.with_suffix(f'.backup.{datetime.now().strftime("%Y%m%d_%H%M%S")}.json')
238
+ try:
239
+ config_path.rename(backup_path)
240
+ print(f" Backup created: {backup_path}")
241
+ except Exception as backup_error:
242
+ print(f" Warning: Could not create backup: {backup_error}")
243
+ else:
244
+ # Force mode - create backup but proceed
245
+ try:
246
+ with open(config_path, 'r') as f:
247
+ existing_config = json.load(f)
248
+ config = existing_config
249
+ print(" Force mode: Overwriting existing configuration")
250
+ except:
251
+ pass # File doesn't exist or is invalid, start fresh
252
+
253
+ # Ensure mcpServers section exists
254
+ if "mcpServers" not in config:
255
+ config["mcpServers"] = {}
256
+
257
+ return config
258
+
259
+ def _save_config(self, config, config_path):
260
+ """Save configuration to file.
261
+
262
+ Args:
263
+ config: Configuration dictionary
264
+ config_path: Path to save configuration
265
+
266
+ Returns:
267
+ bool: True if successful
268
+ """
269
+ import json
270
+
271
+ try:
272
+ # Ensure directory exists
273
+ config_path.parent.mkdir(parents=True, exist_ok=True)
274
+
275
+ # Write configuration with nice formatting
276
+ with open(config_path, 'w') as f:
277
+ json.dump(config, f, indent=2)
278
+
279
+ print(f"\n✅ Configuration saved to {config_path}")
280
+ return True
281
+
282
+ except Exception as e:
283
+ print(f"❌ Error saving configuration: {e}")
284
+ return False