claude-mpm 4.20.3__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 (454) hide show
  1. claude_mpm/VERSION +1 -1
  2. claude_mpm/agents/BASE_PM.md +23 -6
  3. claude_mpm/agents/OUTPUT_STYLE.md +3 -48
  4. claude_mpm/agents/PM_INSTRUCTIONS.md +1783 -34
  5. claude_mpm/agents/WORKFLOW.md +75 -2
  6. claude_mpm/agents/base_agent.json +6 -3
  7. claude_mpm/agents/frontmatter_validator.py +1 -1
  8. claude_mpm/agents/templates/api_qa.json +5 -2
  9. claude_mpm/agents/templates/circuit_breakers.md +108 -2
  10. claude_mpm/agents/templates/documentation.json +33 -6
  11. claude_mpm/agents/templates/javascript_engineer_agent.json +380 -0
  12. claude_mpm/agents/templates/php-engineer.json +10 -4
  13. claude_mpm/agents/templates/pm_red_flags.md +89 -19
  14. claude_mpm/agents/templates/project_organizer.json +7 -3
  15. claude_mpm/agents/templates/qa.json +2 -1
  16. claude_mpm/agents/templates/react_engineer.json +1 -0
  17. claude_mpm/agents/templates/research.json +82 -12
  18. claude_mpm/agents/templates/security.json +4 -4
  19. claude_mpm/agents/templates/tauri_engineer.json +274 -0
  20. claude_mpm/agents/templates/ticketing.json +10 -6
  21. claude_mpm/agents/templates/version_control.json +4 -2
  22. claude_mpm/agents/templates/web_qa.json +2 -1
  23. claude_mpm/cli/README.md +253 -0
  24. claude_mpm/cli/__init__.py +11 -1
  25. claude_mpm/cli/commands/aggregate.py +1 -1
  26. claude_mpm/cli/commands/analyze.py +3 -3
  27. claude_mpm/cli/commands/cleanup.py +1 -1
  28. claude_mpm/cli/commands/configure_agent_display.py +4 -4
  29. claude_mpm/cli/commands/debug.py +12 -12
  30. claude_mpm/cli/commands/hook_errors.py +277 -0
  31. claude_mpm/cli/commands/mcp_install_commands.py +1 -1
  32. claude_mpm/cli/commands/mcp_install_commands.py.backup +284 -0
  33. claude_mpm/cli/commands/mpm_init/README.md +365 -0
  34. claude_mpm/cli/commands/mpm_init/__init__.py +73 -0
  35. claude_mpm/cli/commands/mpm_init/core.py +573 -0
  36. claude_mpm/cli/commands/mpm_init/display.py +341 -0
  37. claude_mpm/cli/commands/mpm_init/git_activity.py +427 -0
  38. claude_mpm/cli/commands/mpm_init/modes.py +397 -0
  39. claude_mpm/cli/commands/mpm_init/prompts.py +442 -0
  40. claude_mpm/cli/commands/mpm_init_cli.py +396 -0
  41. claude_mpm/cli/commands/mpm_init_handler.py +67 -1
  42. claude_mpm/cli/commands/run.py +124 -128
  43. claude_mpm/cli/commands/skills.py +522 -34
  44. claude_mpm/cli/executor.py +56 -0
  45. claude_mpm/cli/interactive/agent_wizard.py +5 -5
  46. claude_mpm/cli/parsers/base_parser.py +28 -0
  47. claude_mpm/cli/parsers/mpm_init_parser.py +42 -0
  48. claude_mpm/cli/parsers/skills_parser.py +138 -0
  49. claude_mpm/cli/startup.py +111 -8
  50. claude_mpm/cli/startup_display.py +480 -0
  51. claude_mpm/cli/utils.py +1 -1
  52. claude_mpm/cli_module/commands.py +1 -1
  53. claude_mpm/cli_module/refactoring_guide.md +253 -0
  54. claude_mpm/commands/mpm-help.md +3 -0
  55. claude_mpm/commands/mpm-init.md +19 -3
  56. claude_mpm/commands/mpm-resume.md +372 -0
  57. claude_mpm/commands/mpm-tickets.md +56 -7
  58. claude_mpm/commands/mpm.md +1 -0
  59. claude_mpm/config/agent_capabilities.yaml +658 -0
  60. claude_mpm/config/async_logging_config.yaml +145 -0
  61. claude_mpm/constants.py +12 -0
  62. claude_mpm/core/.claude-mpm/logs/hooks_20250730.log +34 -0
  63. claude_mpm/core/api_validator.py +1 -1
  64. claude_mpm/core/claude_runner.py +14 -1
  65. claude_mpm/core/config.py +8 -0
  66. claude_mpm/core/constants.py +1 -1
  67. claude_mpm/core/framework/processors/metadata_processor.py +1 -1
  68. claude_mpm/core/hook_error_memory.py +381 -0
  69. claude_mpm/core/hook_manager.py +41 -2
  70. claude_mpm/core/interactive_session.py +48 -3
  71. claude_mpm/core/interfaces.py +56 -1
  72. claude_mpm/core/logger.py +3 -1
  73. claude_mpm/core/oneshot_session.py +39 -0
  74. claude_mpm/d2/.gitignore +22 -0
  75. claude_mpm/d2/ARCHITECTURE_COMPARISON.md +273 -0
  76. claude_mpm/d2/FLASK_INTEGRATION.md +156 -0
  77. claude_mpm/d2/IMPLEMENTATION_SUMMARY.md +452 -0
  78. claude_mpm/d2/QUICKSTART.md +186 -0
  79. claude_mpm/d2/README.md +232 -0
  80. claude_mpm/d2/STORE_FIX_SUMMARY.md +167 -0
  81. claude_mpm/d2/SVELTE5_STORES_GUIDE.md +180 -0
  82. claude_mpm/d2/TESTING.md +288 -0
  83. claude_mpm/d2/index.html +118 -0
  84. claude_mpm/d2/package.json +19 -0
  85. claude_mpm/d2/src/App.svelte +110 -0
  86. claude_mpm/d2/src/components/Header.svelte +153 -0
  87. claude_mpm/d2/src/components/MainContent.svelte +74 -0
  88. claude_mpm/d2/src/components/Sidebar.svelte +85 -0
  89. claude_mpm/d2/src/components/tabs/EventsTab.svelte +326 -0
  90. claude_mpm/d2/src/lib/socketio.js +144 -0
  91. claude_mpm/d2/src/main.js +7 -0
  92. claude_mpm/d2/src/stores/events.js +114 -0
  93. claude_mpm/d2/src/stores/socket.js +108 -0
  94. claude_mpm/d2/src/stores/theme.js +65 -0
  95. claude_mpm/d2/svelte.config.js +12 -0
  96. claude_mpm/d2/vite.config.js +15 -0
  97. claude_mpm/dashboard/.claude-mpm/memories/README.md +36 -0
  98. claude_mpm/dashboard/BUILD_NUMBER +1 -0
  99. claude_mpm/dashboard/README.md +121 -0
  100. claude_mpm/dashboard/VERSION +1 -0
  101. claude_mpm/dashboard/react/components/DataInspector/DataInspector.tsx +273 -0
  102. claude_mpm/dashboard/react/components/ErrorBoundary.tsx +75 -0
  103. claude_mpm/dashboard/react/components/EventViewer/EventViewer.tsx +141 -0
  104. claude_mpm/dashboard/react/components/shared/ConnectionStatus.tsx +36 -0
  105. claude_mpm/dashboard/react/components/shared/FilterBar.tsx +89 -0
  106. claude_mpm/dashboard/react/contexts/DashboardContext.tsx +215 -0
  107. claude_mpm/dashboard/react/entries/events.tsx +165 -0
  108. claude_mpm/dashboard/react/hooks/useEvents.ts +191 -0
  109. claude_mpm/dashboard/react/hooks/useSocket.ts +225 -0
  110. claude_mpm/dashboard/static/built/REFACTORING_SUMMARY.md +170 -0
  111. claude_mpm/dashboard/static/built/components/activity-tree.js.map +1 -0
  112. claude_mpm/dashboard/static/built/components/agent-hierarchy.js +101 -101
  113. claude_mpm/dashboard/static/built/components/agent-inference.js.map +1 -0
  114. claude_mpm/dashboard/static/built/components/build-tracker.js +59 -59
  115. claude_mpm/dashboard/static/built/components/code-simple.js +107 -107
  116. claude_mpm/dashboard/static/built/components/code-tree/tree-breadcrumb.js +29 -29
  117. claude_mpm/dashboard/static/built/components/code-tree/tree-constants.js +24 -24
  118. claude_mpm/dashboard/static/built/components/code-tree/tree-search.js +27 -27
  119. claude_mpm/dashboard/static/built/components/code-tree/tree-utils.js +25 -25
  120. claude_mpm/dashboard/static/built/components/code-tree.js.map +1 -0
  121. claude_mpm/dashboard/static/built/components/code-viewer.js.map +1 -0
  122. claude_mpm/dashboard/static/built/components/connection-debug.js +101 -101
  123. claude_mpm/dashboard/static/built/components/diff-viewer.js +113 -113
  124. claude_mpm/dashboard/static/built/components/event-processor.js.map +1 -0
  125. claude_mpm/dashboard/static/built/components/event-viewer.js.map +1 -0
  126. claude_mpm/dashboard/static/built/components/export-manager.js.map +1 -0
  127. claude_mpm/dashboard/static/built/components/file-change-tracker.js +57 -57
  128. claude_mpm/dashboard/static/built/components/file-change-viewer.js +74 -74
  129. claude_mpm/dashboard/static/built/components/file-tool-tracker.js.map +1 -0
  130. claude_mpm/dashboard/static/built/components/file-viewer.js.map +1 -0
  131. claude_mpm/dashboard/static/built/components/hud-library-loader.js.map +1 -0
  132. claude_mpm/dashboard/static/built/components/hud-manager.js.map +1 -0
  133. claude_mpm/dashboard/static/built/components/hud-visualizer.js.map +1 -0
  134. claude_mpm/dashboard/static/built/components/module-viewer.js.map +1 -0
  135. claude_mpm/dashboard/static/built/components/session-manager.js.map +1 -0
  136. claude_mpm/dashboard/static/built/components/socket-manager.js.map +1 -0
  137. claude_mpm/dashboard/static/built/components/ui-state-manager.js.map +1 -0
  138. claude_mpm/dashboard/static/built/components/unified-data-viewer.js.map +1 -0
  139. claude_mpm/dashboard/static/built/components/working-directory.js.map +1 -0
  140. claude_mpm/dashboard/static/built/connection-manager.js +76 -76
  141. claude_mpm/dashboard/static/built/dashboard.js.map +1 -0
  142. claude_mpm/dashboard/static/built/extension-error-handler.js +22 -22
  143. claude_mpm/dashboard/static/built/react/events.js.map +1 -0
  144. claude_mpm/dashboard/static/built/shared/dom-helpers.js +9 -9
  145. claude_mpm/dashboard/static/built/shared/event-bus.js +5 -5
  146. claude_mpm/dashboard/static/built/shared/logger.js +16 -16
  147. claude_mpm/dashboard/static/built/shared/tooltip-service.js +6 -6
  148. claude_mpm/dashboard/static/built/socket-client.js.map +1 -0
  149. claude_mpm/dashboard/static/css/activity.css +69 -69
  150. claude_mpm/dashboard/static/css/connection-status.css +10 -10
  151. claude_mpm/dashboard/static/css/dashboard.css +15 -15
  152. claude_mpm/dashboard/static/index.html +22 -22
  153. claude_mpm/dashboard/static/js/REFACTORING_SUMMARY.md +170 -0
  154. claude_mpm/dashboard/static/js/components/activity-tree.js +178 -178
  155. claude_mpm/dashboard/static/js/components/agent-hierarchy.js +101 -101
  156. claude_mpm/dashboard/static/js/components/agent-inference.js +31 -31
  157. claude_mpm/dashboard/static/js/components/build-tracker.js +59 -59
  158. claude_mpm/dashboard/static/js/components/code-simple.js +107 -107
  159. claude_mpm/dashboard/static/js/components/connection-debug.js +101 -101
  160. claude_mpm/dashboard/static/js/components/diff-viewer.js +113 -113
  161. claude_mpm/dashboard/static/js/components/event-viewer.js +12 -12
  162. claude_mpm/dashboard/static/js/components/file-change-tracker.js +57 -57
  163. claude_mpm/dashboard/static/js/components/file-change-viewer.js +74 -74
  164. claude_mpm/dashboard/static/js/components/file-tool-tracker.js +6 -6
  165. claude_mpm/dashboard/static/js/components/file-viewer.js +42 -42
  166. claude_mpm/dashboard/static/js/components/module-viewer.js +27 -27
  167. claude_mpm/dashboard/static/js/components/session-manager.js +14 -14
  168. claude_mpm/dashboard/static/js/components/socket-manager.js +1 -1
  169. claude_mpm/dashboard/static/js/components/ui-state-manager.js +14 -14
  170. claude_mpm/dashboard/static/js/components/unified-data-viewer.js +110 -110
  171. claude_mpm/dashboard/static/js/components/working-directory.js +8 -8
  172. claude_mpm/dashboard/static/js/connection-manager.js +76 -76
  173. claude_mpm/dashboard/static/js/dashboard.js +76 -58
  174. claude_mpm/dashboard/static/js/extension-error-handler.js +22 -22
  175. claude_mpm/dashboard/static/js/shared/dom-helpers.js +9 -9
  176. claude_mpm/dashboard/static/js/shared/event-bus.js +5 -5
  177. claude_mpm/dashboard/static/js/shared/logger.js +16 -16
  178. claude_mpm/dashboard/static/js/shared/tooltip-service.js +6 -6
  179. claude_mpm/dashboard/static/js/socket-client.js +138 -121
  180. claude_mpm/dashboard/static/navigation-test-results.md +118 -0
  181. claude_mpm/dashboard/static/production/main.html +21 -21
  182. claude_mpm/dashboard/static/test-archive/dashboard.html +22 -22
  183. claude_mpm/dashboard/templates/.claude-mpm/memories/README.md +36 -0
  184. claude_mpm/dashboard/templates/.claude-mpm/memories/engineer_agent.md +39 -0
  185. claude_mpm/dashboard/templates/.claude-mpm/memories/version_control_agent.md +38 -0
  186. claude_mpm/dashboard/templates/code_simple.html +23 -23
  187. claude_mpm/dashboard/templates/index.html +18 -18
  188. claude_mpm/hooks/README.md +143 -0
  189. claude_mpm/hooks/claude_hooks/event_handlers.py +3 -1
  190. claude_mpm/hooks/claude_hooks/hook_handler.py +24 -7
  191. claude_mpm/hooks/claude_hooks/installer.py +45 -0
  192. claude_mpm/hooks/templates/README.md +180 -0
  193. claude_mpm/hooks/templates/pre_tool_use_simple.py +78 -0
  194. claude_mpm/hooks/templates/pre_tool_use_template.py +323 -0
  195. claude_mpm/hooks/templates/settings.json.example +147 -0
  196. claude_mpm/schemas/agent_schema.json +596 -0
  197. claude_mpm/schemas/frontmatter_schema.json +165 -0
  198. claude_mpm/scripts/claude-hook-handler.sh +3 -3
  199. claude_mpm/scripts/start_activity_logging.py +3 -1
  200. claude_mpm/services/agents/deployment/agent_format_converter.py +1 -1
  201. claude_mpm/services/agents/deployment/agent_metrics_collector.py +3 -3
  202. claude_mpm/services/agents/deployment/facade/deployment_facade.py +3 -3
  203. claude_mpm/services/agents/deployment/pipeline/pipeline_executor.py +2 -2
  204. claude_mpm/services/agents/loading/framework_agent_loader.py +8 -8
  205. claude_mpm/services/agents/local_template_manager.py +3 -1
  206. claude_mpm/services/cli/session_pause_manager.py +504 -0
  207. claude_mpm/services/cli/session_resume_helper.py +36 -16
  208. claude_mpm/services/cli/unified_dashboard_manager.py +1 -1
  209. claude_mpm/services/core/base.py +26 -11
  210. claude_mpm/services/core/interfaces.py +56 -1
  211. claude_mpm/services/core/models/agent_config.py +3 -0
  212. claude_mpm/services/core/models/process.py +4 -0
  213. claude_mpm/services/diagnostics/checks/agent_check.py +0 -2
  214. claude_mpm/services/diagnostics/checks/instructions_check.py +1 -2
  215. claude_mpm/services/diagnostics/checks/mcp_check.py +0 -1
  216. claude_mpm/services/diagnostics/checks/monitor_check.py +0 -1
  217. claude_mpm/services/diagnostics/doctor_reporter.py +6 -4
  218. claude_mpm/services/diagnostics/models.py +21 -0
  219. claude_mpm/services/event_bus/README.md +244 -0
  220. claude_mpm/services/event_bus/direct_relay.py +3 -3
  221. claude_mpm/services/event_bus/event_bus.py +36 -3
  222. claude_mpm/services/event_bus/relay.py +23 -7
  223. claude_mpm/services/events/README.md +303 -0
  224. claude_mpm/services/events/consumers/logging.py +1 -2
  225. claude_mpm/services/framework_claude_md_generator/README.md +119 -0
  226. claude_mpm/services/infrastructure/monitoring/resources.py +1 -1
  227. claude_mpm/services/local_ops/__init__.py +2 -0
  228. claude_mpm/services/local_ops/process_manager.py +1 -1
  229. claude_mpm/services/local_ops/resource_monitor.py +2 -2
  230. claude_mpm/services/mcp_gateway/README.md +185 -0
  231. claude_mpm/services/mcp_gateway/auto_configure.py +31 -25
  232. claude_mpm/services/mcp_gateway/config/configuration.py +1 -1
  233. claude_mpm/services/mcp_gateway/core/process_pool.py +19 -10
  234. claude_mpm/services/mcp_gateway/server/stdio_server.py +0 -2
  235. claude_mpm/services/mcp_gateway/tools/document_summarizer.py +1 -1
  236. claude_mpm/services/mcp_gateway/tools/external_mcp_services.py +26 -21
  237. claude_mpm/services/mcp_gateway/tools/kuzu_memory_service.py +6 -2
  238. claude_mpm/services/memory/failure_tracker.py +19 -4
  239. claude_mpm/services/memory/optimizer.py +1 -1
  240. claude_mpm/services/model/model_router.py +8 -9
  241. claude_mpm/services/monitor/daemon.py +1 -1
  242. claude_mpm/services/monitor/server.py +2 -2
  243. claude_mpm/services/native_agent_converter.py +356 -0
  244. claude_mpm/services/port_manager.py +1 -1
  245. claude_mpm/services/project/documentation_manager.py +2 -1
  246. claude_mpm/services/project/toolchain_analyzer.py +3 -1
  247. claude_mpm/services/runner_configuration_service.py +1 -0
  248. claude_mpm/services/self_upgrade_service.py +165 -7
  249. claude_mpm/services/skills_config.py +547 -0
  250. claude_mpm/services/skills_deployer.py +955 -0
  251. claude_mpm/services/socketio/handlers/connection.py +1 -1
  252. claude_mpm/services/socketio/handlers/connection.py.backup +217 -0
  253. claude_mpm/services/socketio/handlers/git.py +2 -2
  254. claude_mpm/services/socketio/handlers/hook.py.backup +154 -0
  255. claude_mpm/services/static/.gitkeep +2 -0
  256. claude_mpm/services/system_instructions_service.py +1 -3
  257. claude_mpm/services/unified/analyzer_strategies/performance_analyzer.py +0 -3
  258. claude_mpm/services/unified/analyzer_strategies/security_analyzer.py +0 -1
  259. claude_mpm/services/unified/deployment_strategies/cloud_strategies.py +1 -1
  260. claude_mpm/services/version_control/VERSION +1 -0
  261. claude_mpm/services/version_control/conflict_resolution.py +6 -4
  262. claude_mpm/services/visualization/mermaid_generator.py +2 -3
  263. claude_mpm/skills/__init__.py +3 -3
  264. claude_mpm/skills/agent_skills_injector.py +42 -49
  265. claude_mpm/skills/bundled/.gitkeep +2 -0
  266. claude_mpm/skills/bundled/collaboration/brainstorming/SKILL.md +4 -0
  267. claude_mpm/skills/bundled/collaboration/dispatching-parallel-agents/SKILL.md +108 -114
  268. claude_mpm/skills/bundled/collaboration/dispatching-parallel-agents/references/agent-prompts.md +577 -0
  269. claude_mpm/skills/bundled/collaboration/dispatching-parallel-agents/references/coordination-patterns.md +467 -0
  270. claude_mpm/skills/bundled/collaboration/dispatching-parallel-agents/references/examples.md +537 -0
  271. claude_mpm/skills/bundled/collaboration/dispatching-parallel-agents/references/troubleshooting.md +730 -0
  272. claude_mpm/skills/bundled/collaboration/git-worktrees.md +317 -0
  273. claude_mpm/skills/bundled/collaboration/requesting-code-review/SKILL.md +46 -41
  274. claude_mpm/skills/bundled/collaboration/requesting-code-review/references/review-examples.md +412 -0
  275. claude_mpm/skills/bundled/collaboration/stacked-prs.md +251 -0
  276. claude_mpm/skills/bundled/collaboration/writing-plans/SKILL.md +36 -73
  277. claude_mpm/skills/bundled/collaboration/writing-plans/references/best-practices.md +362 -0
  278. claude_mpm/skills/bundled/collaboration/writing-plans/references/plan-structure-templates.md +312 -0
  279. claude_mpm/skills/bundled/debugging/root-cause-tracing/SKILL.md +100 -125
  280. claude_mpm/skills/bundled/debugging/root-cause-tracing/find-polluter.sh +63 -0
  281. claude_mpm/skills/bundled/debugging/root-cause-tracing/references/advanced-techniques.md +668 -0
  282. claude_mpm/skills/bundled/debugging/root-cause-tracing/references/examples.md +587 -0
  283. claude_mpm/skills/bundled/debugging/root-cause-tracing/references/integration.md +438 -0
  284. claude_mpm/skills/bundled/debugging/root-cause-tracing/references/tracing-techniques.md +391 -0
  285. claude_mpm/skills/bundled/debugging/verification-before-completion/SKILL.md +28 -72
  286. claude_mpm/skills/bundled/debugging/verification-before-completion/references/gate-function.md +11 -0
  287. claude_mpm/skills/bundled/debugging/verification-before-completion/references/integration-and-workflows.md +490 -0
  288. claude_mpm/skills/bundled/debugging/verification-before-completion/references/red-flags-and-failures.md +425 -0
  289. claude_mpm/skills/bundled/debugging/verification-before-completion/references/verification-patterns.md +272 -0
  290. claude_mpm/skills/bundled/infrastructure/env-manager/INTEGRATION.md +611 -0
  291. claude_mpm/skills/bundled/infrastructure/env-manager/README.md +596 -0
  292. claude_mpm/skills/bundled/infrastructure/env-manager/SKILL.md +260 -0
  293. claude_mpm/skills/bundled/infrastructure/env-manager/examples/nextjs-env-structure.md +315 -0
  294. claude_mpm/skills/bundled/infrastructure/env-manager/references/frameworks.md +436 -0
  295. claude_mpm/skills/bundled/infrastructure/env-manager/references/security.md +433 -0
  296. claude_mpm/skills/bundled/infrastructure/env-manager/references/synchronization.md +452 -0
  297. claude_mpm/skills/bundled/infrastructure/env-manager/references/troubleshooting.md +404 -0
  298. claude_mpm/skills/bundled/infrastructure/env-manager/references/validation.md +420 -0
  299. claude_mpm/skills/bundled/infrastructure/env-manager/scripts/validate_env.py +576 -0
  300. claude_mpm/skills/bundled/main/artifacts-builder/LICENSE.txt +202 -0
  301. claude_mpm/skills/bundled/main/artifacts-builder/SKILL.md +13 -1
  302. claude_mpm/skills/bundled/main/artifacts-builder/scripts/bundle-artifact.sh +54 -0
  303. claude_mpm/skills/bundled/main/artifacts-builder/scripts/init-artifact.sh +322 -0
  304. claude_mpm/skills/bundled/main/artifacts-builder/scripts/shadcn-components.tar.gz +0 -0
  305. claude_mpm/skills/bundled/main/internal-comms/LICENSE.txt +202 -0
  306. claude_mpm/skills/bundled/main/internal-comms/SKILL.md +11 -0
  307. claude_mpm/skills/bundled/main/mcp-builder/LICENSE.txt +202 -0
  308. claude_mpm/skills/bundled/main/mcp-builder/SKILL.md +109 -277
  309. claude_mpm/skills/bundled/main/mcp-builder/reference/design_principles.md +412 -0
  310. claude_mpm/skills/bundled/main/mcp-builder/reference/workflow.md +1237 -0
  311. claude_mpm/skills/bundled/main/mcp-builder/scripts/connections.py +17 -10
  312. claude_mpm/skills/bundled/main/mcp-builder/scripts/evaluation.py +92 -39
  313. claude_mpm/skills/bundled/main/mcp-builder/scripts/example_evaluation.xml +22 -0
  314. claude_mpm/skills/bundled/main/mcp-builder/scripts/requirements.txt +2 -0
  315. claude_mpm/skills/bundled/main/skill-creator/LICENSE.txt +202 -0
  316. claude_mpm/skills/bundled/main/skill-creator/SKILL.md +135 -155
  317. claude_mpm/skills/bundled/main/skill-creator/references/best-practices.md +500 -0
  318. claude_mpm/skills/bundled/main/skill-creator/references/creation-workflow.md +464 -0
  319. claude_mpm/skills/bundled/main/skill-creator/references/examples.md +619 -0
  320. claude_mpm/skills/bundled/main/skill-creator/references/progressive-disclosure.md +437 -0
  321. claude_mpm/skills/bundled/main/skill-creator/references/skill-structure.md +231 -0
  322. claude_mpm/skills/bundled/main/skill-creator/scripts/init_skill.py +13 -12
  323. claude_mpm/skills/bundled/main/skill-creator/scripts/package_skill.py +5 -3
  324. claude_mpm/skills/bundled/main/skill-creator/scripts/quick_validate.py +19 -12
  325. claude_mpm/skills/bundled/performance-profiling.md +6 -0
  326. claude_mpm/skills/bundled/php/espocrm-development/SKILL.md +170 -0
  327. claude_mpm/skills/bundled/php/espocrm-development/references/architecture.md +602 -0
  328. claude_mpm/skills/bundled/php/espocrm-development/references/common-tasks.md +821 -0
  329. claude_mpm/skills/bundled/php/espocrm-development/references/development-workflow.md +742 -0
  330. claude_mpm/skills/bundled/php/espocrm-development/references/frontend-customization.md +726 -0
  331. claude_mpm/skills/bundled/php/espocrm-development/references/hooks-and-services.md +764 -0
  332. claude_mpm/skills/bundled/php/espocrm-development/references/testing-debugging.md +831 -0
  333. claude_mpm/skills/bundled/react/flexlayout-react.md +742 -0
  334. claude_mpm/skills/bundled/rust/desktop-applications/SKILL.md +226 -0
  335. claude_mpm/skills/bundled/rust/desktop-applications/references/architecture-patterns.md +901 -0
  336. claude_mpm/skills/bundled/rust/desktop-applications/references/native-gui-frameworks.md +901 -0
  337. claude_mpm/skills/bundled/rust/desktop-applications/references/platform-integration.md +775 -0
  338. claude_mpm/skills/bundled/rust/desktop-applications/references/state-management.md +937 -0
  339. claude_mpm/skills/bundled/rust/desktop-applications/references/tauri-framework.md +770 -0
  340. claude_mpm/skills/bundled/rust/desktop-applications/references/testing-deployment.md +961 -0
  341. claude_mpm/skills/bundled/tauri/tauri-async-patterns.md +495 -0
  342. claude_mpm/skills/bundled/tauri/tauri-build-deploy.md +599 -0
  343. claude_mpm/skills/bundled/tauri/tauri-command-patterns.md +535 -0
  344. claude_mpm/skills/bundled/tauri/tauri-error-handling.md +613 -0
  345. claude_mpm/skills/bundled/tauri/tauri-event-system.md +648 -0
  346. claude_mpm/skills/bundled/tauri/tauri-file-system.md +673 -0
  347. claude_mpm/skills/bundled/tauri/tauri-frontend-integration.md +767 -0
  348. claude_mpm/skills/bundled/tauri/tauri-performance.md +669 -0
  349. claude_mpm/skills/bundled/tauri/tauri-state-management.md +573 -0
  350. claude_mpm/skills/bundled/tauri/tauri-testing.md +384 -0
  351. claude_mpm/skills/bundled/tauri/tauri-window-management.md +628 -0
  352. claude_mpm/skills/bundled/testing/condition-based-waiting/SKILL.md +21 -25
  353. claude_mpm/skills/bundled/testing/condition-based-waiting/example.ts +158 -0
  354. claude_mpm/skills/bundled/testing/condition-based-waiting/references/patterns-and-implementation.md +253 -0
  355. claude_mpm/skills/bundled/testing/test-quality-inspector/SKILL.md +458 -0
  356. claude_mpm/skills/bundled/testing/test-quality-inspector/examples/example-inspection-report.md +411 -0
  357. claude_mpm/skills/bundled/testing/test-quality-inspector/references/assertion-quality.md +317 -0
  358. claude_mpm/skills/bundled/testing/test-quality-inspector/references/inspection-checklist.md +270 -0
  359. claude_mpm/skills/bundled/testing/test-quality-inspector/references/red-flags.md +436 -0
  360. claude_mpm/skills/bundled/testing/testing-anti-patterns/SKILL.md +86 -250
  361. claude_mpm/skills/bundled/testing/testing-anti-patterns/references/completeness-anti-patterns.md +572 -0
  362. claude_mpm/skills/bundled/testing/testing-anti-patterns/references/core-anti-patterns.md +411 -0
  363. claude_mpm/skills/bundled/testing/testing-anti-patterns/references/detection-guide.md +569 -0
  364. claude_mpm/skills/bundled/testing/testing-anti-patterns/references/tdd-connection.md +695 -0
  365. claude_mpm/skills/bundled/testing/webapp-testing/LICENSE.txt +202 -0
  366. claude_mpm/skills/bundled/testing/webapp-testing/SKILL.md +145 -57
  367. claude_mpm/skills/bundled/testing/webapp-testing/decision-tree.md +459 -0
  368. claude_mpm/skills/bundled/testing/webapp-testing/examples/console_logging.py +6 -6
  369. claude_mpm/skills/bundled/testing/webapp-testing/examples/element_discovery.py +13 -9
  370. claude_mpm/skills/bundled/testing/webapp-testing/examples/static_html_automation.py +8 -8
  371. claude_mpm/skills/bundled/testing/webapp-testing/playwright-patterns.md +479 -0
  372. claude_mpm/skills/bundled/testing/webapp-testing/reconnaissance-pattern.md +687 -0
  373. claude_mpm/skills/bundled/testing/webapp-testing/scripts/with_server.py +37 -15
  374. claude_mpm/skills/bundled/testing/webapp-testing/server-management.md +758 -0
  375. claude_mpm/skills/bundled/testing/webapp-testing/troubleshooting.md +868 -0
  376. claude_mpm/skills/skills_registry.py +44 -48
  377. claude_mpm/skills/skills_service.py +117 -108
  378. claude_mpm/templates/questions/EXAMPLES.md +501 -0
  379. claude_mpm/templates/questions/__init__.py +43 -0
  380. claude_mpm/templates/questions/base.py +193 -0
  381. claude_mpm/templates/questions/pr_strategy.py +314 -0
  382. claude_mpm/templates/questions/project_init.py +388 -0
  383. claude_mpm/templates/questions/ticket_mgmt.py +397 -0
  384. claude_mpm/tools/README_SOCKETIO_DEBUG.md +224 -0
  385. claude_mpm/tools/__main__.py +8 -8
  386. claude_mpm/tools/code_tree_analyzer/README.md +64 -0
  387. claude_mpm/tools/code_tree_analyzer/__init__.py +45 -0
  388. claude_mpm/tools/code_tree_analyzer/analysis.py +299 -0
  389. claude_mpm/tools/code_tree_analyzer/cache.py +131 -0
  390. claude_mpm/tools/code_tree_analyzer/core.py +380 -0
  391. claude_mpm/tools/code_tree_analyzer/discovery.py +403 -0
  392. claude_mpm/tools/code_tree_analyzer/events.py +168 -0
  393. claude_mpm/tools/code_tree_analyzer/gitignore.py +308 -0
  394. claude_mpm/tools/code_tree_analyzer/models.py +39 -0
  395. claude_mpm/tools/code_tree_analyzer/multilang_analyzer.py +224 -0
  396. claude_mpm/tools/code_tree_analyzer/python_analyzer.py +284 -0
  397. claude_mpm/utils/agent_dependency_loader.py +3 -3
  398. claude_mpm/utils/dependency_cache.py +3 -1
  399. claude_mpm/utils/gitignore.py +241 -0
  400. claude_mpm/utils/log_cleanup.py +3 -3
  401. claude_mpm/utils/robust_installer.py +3 -5
  402. claude_mpm/utils/structured_questions.py +619 -0
  403. {claude_mpm-4.20.3.dist-info → claude_mpm-4.25.10.dist-info}/METADATA +218 -31
  404. {claude_mpm-4.20.3.dist-info → claude_mpm-4.25.10.dist-info}/RECORD +409 -246
  405. claude_mpm/agents/templates/.claude-mpm/memories/README.md +0 -17
  406. claude_mpm/agents/templates/.claude-mpm/memories/engineer_memories.md +0 -3
  407. claude_mpm/agents/templates/logs/prompts/agent_engineer_20250826_014258_728.md +0 -39
  408. claude_mpm/agents/templates/logs/prompts/agent_engineer_20250901_010124_142.md +0 -400
  409. claude_mpm/cli/commands/mpm_init.py +0 -2093
  410. claude_mpm/dashboard/.claude-mpm/socketio-instances.json +0 -1
  411. claude_mpm/dashboard/static/archive/activity_dashboard_test.html +0 -61
  412. claude_mpm/dashboard/static/archive/test_activity_connection.html +0 -179
  413. claude_mpm/dashboard/static/archive/test_claude_tree_tab.html +0 -68
  414. claude_mpm/dashboard/static/archive/test_dashboard.html +0 -409
  415. claude_mpm/dashboard/static/archive/test_dashboard_fixed.html +0 -519
  416. claude_mpm/dashboard/static/archive/test_dashboard_verification.html +0 -181
  417. claude_mpm/dashboard/static/archive/test_file_data.html +0 -315
  418. claude_mpm/dashboard/static/archive/test_file_tree_empty_state.html +0 -243
  419. claude_mpm/dashboard/static/archive/test_file_tree_fix.html +0 -234
  420. claude_mpm/dashboard/static/archive/test_file_tree_rename.html +0 -117
  421. claude_mpm/dashboard/static/archive/test_file_tree_tab.html +0 -115
  422. claude_mpm/dashboard/static/archive/test_file_viewer.html +0 -224
  423. claude_mpm/dashboard/static/archive/test_final_activity.html +0 -220
  424. claude_mpm/dashboard/static/archive/test_tab_fix.html +0 -139
  425. claude_mpm/dashboard/static/dist/assets/events.DjpNxWNo.css +0 -1
  426. claude_mpm/dashboard/static/dist/components/activity-tree.js +0 -2
  427. claude_mpm/dashboard/static/dist/components/agent-inference.js +0 -2
  428. claude_mpm/dashboard/static/dist/components/code-tree.js +0 -2
  429. claude_mpm/dashboard/static/dist/components/code-viewer.js +0 -2
  430. claude_mpm/dashboard/static/dist/components/event-processor.js +0 -2
  431. claude_mpm/dashboard/static/dist/components/event-viewer.js +0 -2
  432. claude_mpm/dashboard/static/dist/components/export-manager.js +0 -2
  433. claude_mpm/dashboard/static/dist/components/file-tool-tracker.js +0 -2
  434. claude_mpm/dashboard/static/dist/components/file-viewer.js +0 -2
  435. claude_mpm/dashboard/static/dist/components/hud-library-loader.js +0 -2
  436. claude_mpm/dashboard/static/dist/components/hud-manager.js +0 -2
  437. claude_mpm/dashboard/static/dist/components/hud-visualizer.js +0 -2
  438. claude_mpm/dashboard/static/dist/components/module-viewer.js +0 -2
  439. claude_mpm/dashboard/static/dist/components/session-manager.js +0 -2
  440. claude_mpm/dashboard/static/dist/components/socket-manager.js +0 -2
  441. claude_mpm/dashboard/static/dist/components/ui-state-manager.js +0 -2
  442. claude_mpm/dashboard/static/dist/components/unified-data-viewer.js +0 -2
  443. claude_mpm/dashboard/static/dist/components/working-directory.js +0 -2
  444. claude_mpm/dashboard/static/dist/dashboard.js +0 -2
  445. claude_mpm/dashboard/static/dist/react/events.js +0 -30
  446. claude_mpm/dashboard/static/dist/socket-client.js +0 -2
  447. claude_mpm/dashboard/static/test-archive/test_debug.html +0 -25
  448. claude_mpm/skills/bundled/debugging/verification-before-completion/references/common-failures.md +0 -213
  449. claude_mpm/tools/code_tree_analyzer.py +0 -1825
  450. /claude_mpm/skills/bundled/collaboration/requesting-code-review/{code-reviewer.md → references/code-reviewer-template.md} +0 -0
  451. {claude_mpm-4.20.3.dist-info → claude_mpm-4.25.10.dist-info}/WHEEL +0 -0
  452. {claude_mpm-4.20.3.dist-info → claude_mpm-4.25.10.dist-info}/entry_points.txt +0 -0
  453. {claude_mpm-4.20.3.dist-info → claude_mpm-4.25.10.dist-info}/licenses/LICENSE +0 -0
  454. {claude_mpm-4.20.3.dist-info → claude_mpm-4.25.10.dist-info}/top_level.txt +0 -0
@@ -0,0 +1,253 @@
1
+ # Claude MPM CLI Architecture
2
+
3
+ This document describes the refactored CLI architecture for claude-mpm.
4
+
5
+ ## Overview
6
+
7
+ The CLI has been refactored from a single monolithic `cli.py` file into a modular structure that improves maintainability and code organization.
8
+
9
+ ## Directory Structure
10
+
11
+ ```
12
+ cli/
13
+ ├── __init__.py # Main entry point - orchestrates the CLI flow
14
+ ├── parser.py # Argument parsing logic - single source of truth for CLI arguments
15
+ ├── utils.py # Shared utility functions
16
+ ├── commands/ # Individual command implementations
17
+ │ ├── __init__.py
18
+ │ ├── run.py # Default command - runs Claude sessions
19
+ │ ├── tickets.py # Comprehensive ticket management commands
20
+ │ ├── info.py # Shows system information
21
+ │ ├── agents.py # Manages agent deployments
22
+ │ ├── memory.py # Agent memory management
23
+ │ ├── monitor.py # System monitoring
24
+ │ ├── config.py # Configuration management
25
+ │ └── aggregate.py # Event aggregation
26
+ └── README.md # This file
27
+ ```
28
+
29
+ ## Key Design Decisions
30
+
31
+ ### 1. Modular Command Structure
32
+ Each command is implemented in its own module under `commands/`. This makes it easy to:
33
+ - Add new commands without touching existing code
34
+ - Test commands in isolation
35
+ - Understand what each command does
36
+
37
+ ### 2. Centralized Argument Parsing
38
+ All argument definitions are in `parser.py`. This provides:
39
+ - Single source of truth for CLI arguments
40
+ - Reusable argument groups (common arguments, run arguments)
41
+ - Clear separation of parsing from execution
42
+
43
+ ### 3. Shared Utilities
44
+ Common functions are in `utils.py`:
45
+ - `get_user_input()` - Handles input from files, stdin, or command line
46
+ - `get_agent_versions_display()` - Formats agent version information
47
+ - `setup_logging()` - Configures logging based on arguments
48
+ - `ensure_directories()` - Creates required directories on first run
49
+
50
+ ### 4. Backward Compatibility
51
+ The refactoring maintains full backward compatibility:
52
+ - `__main__.py` still imports from `claude_mpm.cli`
53
+ - The main `cli/__init__.py` exports the same `main()` function
54
+ - All existing commands and arguments work exactly as before
55
+
56
+ ## Entry Points
57
+
58
+ 1. **Package execution**: `python -m claude_mpm`
59
+ - Uses `__main__.py` which imports from `cli/__init__.py`
60
+
61
+ 2. **Direct import**: `from claude_mpm.cli import main`
62
+ - Imports the main function from `cli/__init__.py`
63
+
64
+ 3. **Shell script**: `claude-mpm` command
65
+ - Calls `python -m claude_mpm` with proper environment setup
66
+
67
+ ## Adding New Commands
68
+
69
+ To add a new command:
70
+
71
+ 1. Create a new module in `commands/`:
72
+ ```python
73
+ # commands/mycommand.py
74
+ def my_command(args):
75
+ """Execute my command."""
76
+ # Implementation here
77
+ ```
78
+
79
+ 2. Add the command to `commands/__init__.py`:
80
+ ```python
81
+ from .mycommand import my_command
82
+ ```
83
+
84
+ 3. Add parser configuration in `parser.py`:
85
+ ```python
86
+ # In create_parser()
87
+ mycommand_parser = subparsers.add_parser(
88
+ "mycommand",
89
+ help="Description of my command"
90
+ )
91
+ # Add command-specific arguments
92
+ ```
93
+
94
+ 4. Add the command mapping in `cli/__init__.py`:
95
+ ```python
96
+ # In _execute_command()
97
+ command_map = {
98
+ # ... existing commands ...
99
+ "mycommand": my_command,
100
+ }
101
+ ```
102
+
103
+ ## Command Reference
104
+
105
+ ### Core Commands
106
+
107
+ **`run`** - Execute Claude sessions (default command)
108
+ - Interactive and non-interactive modes
109
+ - Hook service integration
110
+ - Agent selection and deployment
111
+ - Custom input processing
112
+
113
+ **`tickets`** - Comprehensive ticket management system
114
+ - Full CRUD operations for tickets
115
+ - Hierarchical ticket organization (Epics → Issues → Tasks)
116
+ - Search and filtering capabilities
117
+ - Workflow state management
118
+ - Integration with ai-trackdown-pytools
119
+
120
+ **`agents`** - Manage agent deployments
121
+ - List available agents by tier (PROJECT > USER > SYSTEM)
122
+ - Deploy agents to Claude Code compatibility format
123
+ - Validate agent configurations
124
+ - Clean up deployment artifacts
125
+
126
+ **`info`** - Display system information
127
+ - Version details and environment status
128
+ - Configuration validation
129
+ - Agent availability and status
130
+ - System health checks
131
+
132
+ ### Ticket Management Commands
133
+
134
+ The `tickets` command provides a complete ticketing solution with the following subcommands:
135
+
136
+ #### Core Ticket Operations
137
+ - **`create`** - Create new tickets with proper classification
138
+ - Support for epics, issues, tasks, bugs, and features
139
+ - Priority assignment and hierarchical linking
140
+ - Tag management and assignee support
141
+ - Automatic ID generation and metadata
142
+
143
+ - **`list`** - Display recent tickets with filtering
144
+ - Type and status filtering
145
+ - Configurable result limits
146
+ - Verbose mode for detailed information
147
+ - Visual status indicators with emoji
148
+
149
+ - **`view`** - Show detailed ticket information
150
+ - Complete ticket metadata and description
151
+ - Parent/child relationship display
152
+ - Assignment and tag information
153
+ - Creation and update timestamps
154
+
155
+ - **`update`** - Modify ticket properties
156
+ - Status and priority changes
157
+ - Description and tag updates
158
+ - Assignment management
159
+ - Fallback to aitrackdown CLI for complex operations
160
+
161
+ #### Advanced Ticket Operations
162
+ - **`search`** - Find tickets by content
163
+ - Full-text search in titles, descriptions, and tags
164
+ - Type and status filtering
165
+ - Context snippets for relevant matches
166
+ - Configurable result limits
167
+
168
+ - **`close`** - Mark tickets as completed
169
+ - Resolution reason capture
170
+ - Automatic status transition
171
+ - Comment integration for closure notes
172
+
173
+ - **`delete`** - Remove tickets permanently
174
+ - Confirmation prompts for safety
175
+ - Force option for batch operations
176
+ - Integration with aitrackdown cleanup
177
+
178
+ - **`comment`** - Add discussion to tickets
179
+ - Progress updates and technical notes
180
+ - Team communication and coordination
181
+ - Rich text support through aitrackdown
182
+
183
+ - **`workflow`** - Manage workflow states
184
+ - State transition validation
185
+ - Comment integration for change reasons
186
+ - Status mapping to aitrackdown workflow
187
+
188
+ #### Ticket System Features
189
+
190
+ **Hierarchical Organization:**
191
+ ```
192
+ Epic (Strategic Level) - EP-XXXX
193
+ ├── Issue (Feature Level) - ISS-XXXX
194
+ │ ├── Task (Implementation) - TSK-XXXX
195
+ │ └── Task (Implementation) - TSK-XXXX
196
+ └── Issue (Feature Level) - ISS-XXXX
197
+ └── Task (Implementation) - TSK-XXXX
198
+ ```
199
+
200
+ **Status Management:**
201
+ - `open` - Ready to start work
202
+ - `in_progress` - Currently being developed
203
+ - `blocked` - Cannot proceed due to dependencies
204
+ - `ready` - Awaiting review or testing
205
+ - `tested` - QA approved
206
+ - `done` - Completed successfully
207
+ - `closed` - Finalized (completed or cancelled)
208
+
209
+ **Priority Levels:**
210
+ - `critical` (P0) - System down, data loss, security breach
211
+ - `high` (P1) - Major feature broken, significant user impact
212
+ - `medium` (P2) - Minor issues, workarounds available
213
+ - `low` (P3) - Cosmetic issues, convenience features
214
+
215
+ **Integration Points:**
216
+ - **ai-trackdown-pytools**: Backend storage and advanced operations
217
+ - **TicketManager**: Primary interface for ticket operations
218
+ - **Claude Sessions**: Automatic ticket creation from patterns
219
+ - **Hook System**: Event-driven ticket updates and notifications
220
+
221
+ ### Additional Management Commands
222
+
223
+ **`memory`** - Agent memory system management
224
+ - Initialize and configure agent memory
225
+ - View and optimize memory stores
226
+ - Cross-reference management
227
+ - Memory routing and building
228
+
229
+ **`monitor`** - System monitoring and health
230
+ - Start/stop/restart monitoring services
231
+ - Port management and status checks
232
+ - Performance metrics and alerts
233
+
234
+ **`config`** - Configuration management
235
+ - Validate system configuration
236
+ - View current settings
237
+ - Status reporting and diagnostics
238
+
239
+ **`aggregate`** - Event aggregation system
240
+ - Session management and tracking
241
+ - Event export and analysis
242
+ - Historical data management
243
+
244
+ ## Removed Files
245
+
246
+ - `cli_main.py` - Redundant entry point, functionality moved to `__main__.py`
247
+ - Original `cli.py` - Split into the modular structure described above
248
+
249
+ ## Preserved Files
250
+
251
+ - `cli_enhancements.py` - Experimental Click-based CLI with enhanced features
252
+ - Kept for reference and future enhancement ideas
253
+ - Not currently used in production
@@ -31,6 +31,7 @@ from .startup import (
31
31
  setup_mcp_server_logging,
32
32
  should_skip_background_services,
33
33
  )
34
+ from .startup_display import display_startup_banner, should_show_banner
34
35
  from .utils import ensure_directories, setup_logging
35
36
 
36
37
  # Version resolution
@@ -65,10 +66,19 @@ def main(argv: Optional[list] = None):
65
66
 
66
67
  setup_configure_command_environment(args)
67
68
 
69
+ # CRITICAL: Setup logging BEFORE any initialization that creates loggers
70
+ # This ensures that ensure_directories() and run_background_services()
71
+ # respect the user's logging preference (default: OFF)
72
+ logger = setup_mcp_server_logging(args)
73
+
68
74
  ensure_directories()
69
75
  if not should_skip_background_services(args, processed_argv):
70
76
  run_background_services()
71
- logger = setup_mcp_server_logging(args)
77
+
78
+ # Display startup banner (unless help/version/utility commands)
79
+ if should_show_banner(args):
80
+ logging_level = getattr(args, "logging", "OFF")
81
+ display_startup_banner(__version__, logging_level)
72
82
 
73
83
  if hasattr(args, "debug") and args.debug:
74
84
  logger.debug(f"Command: {args.command}")
@@ -365,7 +365,7 @@ def view_command_legacy(args):
365
365
  print(f" Tools: {len(delegation.tool_operations)}")
366
366
  print(f" Files: {len(delegation.file_changes)}")
367
367
  if delegation.duration_ms:
368
- print(f" Duration: {delegation.duration_ms/1000:.1f}s")
368
+ print(f" Duration: {delegation.duration_ms / 1000:.1f}s")
369
369
  print(f" Status: {'✅ Success' if delegation.success else '❌ Failed'}")
370
370
  if delegation.error:
371
371
  print(f" Error: {delegation.error}")
@@ -350,7 +350,7 @@ class AnalyzeCommand(BaseCommand):
350
350
 
351
351
  for i, match in enumerate(matches):
352
352
  # Try to extract title from preceding line
353
- title = f"diagram_{i+1}"
353
+ title = f"diagram_{i + 1}"
354
354
 
355
355
  # Look for a title pattern before the diagram
356
356
  title_pattern = r"(?:#+\s*)?([^\n]+)\n+```mermaid"
@@ -456,7 +456,7 @@ class AnalyzeCommand(BaseCommand):
456
456
  return output
457
457
 
458
458
  # text format
459
- output = f"Code Analysis Report\n{'='*50}\n\n"
459
+ output = f"Code Analysis Report\n{'=' * 50}\n\n"
460
460
  output += f"Target: {result_data['target']}\n"
461
461
 
462
462
  if diagrams:
@@ -469,7 +469,7 @@ class AnalyzeCommand(BaseCommand):
469
469
  for filepath in result_data["saved_diagrams"]:
470
470
  output += f" • {filepath}\n"
471
471
 
472
- output += f"\n{'-'*50}\nAnalysis Results:\n{'-'*50}\n"
472
+ output += f"\n{'-' * 50}\nAnalysis Results:\n{'-' * 50}\n"
473
473
  output += result_data.get("analysis", "No analysis results")
474
474
 
475
475
  return output
@@ -436,7 +436,7 @@ def _cleanup_memory_original(args):
436
436
 
437
437
  # Analyze current state
438
438
  print("\n📊 Analyzing current conversation history...")
439
- stats, issues = analyze_claude_json(claude_json)
439
+ stats, _issues = analyze_claude_json(claude_json)
440
440
 
441
441
  # Display current status
442
442
  print(f"\n📁 File: {claude_json}")
@@ -228,8 +228,8 @@ class AgentDisplay:
228
228
  [bold]Model:[/bold] {model}
229
229
  [bold]Agent Version:[/bold] {agent_version}
230
230
  [bold]Schema Version:[/bold] {schema_version}
231
- [bold]Tags:[/bold] {', '.join(tags) if tags else 'None'}
232
- [bold]Tools:[/bold] {', '.join(tools[:5]) if tools else 'None'}{'...' if len(tools) > 5 else ''}
231
+ [bold]Tags:[/bold] {", ".join(tags) if tags else "None"}
232
+ [bold]Tools:[/bold] {", ".join(tools[:5]) if tools else "None"}{"..." if len(tools) > 5 else ""}
233
233
  """
234
234
  except Exception:
235
235
  pass
@@ -237,9 +237,9 @@ class AgentDisplay:
237
237
  # Create detail panel
238
238
  detail_text = f"""
239
239
  [bold]Name:[/bold] {agent.name}
240
- [bold]Status:[/bold] {'[green]Enabled[/green]' if self.agent_manager.is_agent_enabled(agent.name) else '[red]Disabled[/red]'}
240
+ [bold]Status:[/bold] {"[green]Enabled[/green]" if self.agent_manager.is_agent_enabled(agent.name) else "[red]Disabled[/red]"}
241
241
  [bold]Template Path:[/bold] {template_path}
242
- [bold]Is System Template:[/bold] {'Yes' if str(template_path).startswith(str(self.agent_manager.templates_dir)) else 'No (Custom)'}
242
+ [bold]Is System Template:[/bold] {"Yes" if str(template_path).startswith(str(self.agent_manager.templates_dir)) else "No (Custom)"}
243
243
  {extra_info}
244
244
  """
245
245
 
@@ -693,9 +693,9 @@ def debug_hooks(args, logger):
693
693
  max_time = max(times)
694
694
 
695
695
  print(f"\n {hook.name}:")
696
- print(f" Average: {avg_time*1000:.2f}ms")
697
- print(f" Min: {min_time*1000:.2f}ms")
698
- print(f" Max: {max_time*1000:.2f}ms")
696
+ print(f" Average: {avg_time * 1000:.2f}ms")
697
+ print(f" Min: {min_time * 1000:.2f}ms")
698
+ print(f" Max: {max_time * 1000:.2f}ms")
699
699
 
700
700
  else:
701
701
  # Default: show summary
@@ -767,7 +767,7 @@ def debug_cache(args, logger):
767
767
  print(f" Location: {cache_dir}")
768
768
  print(f" Total Files: {file_count}")
769
769
  print(
770
- f" Total Size: {total_size:,} bytes ({total_size/1024/1024:.2f} MB)"
770
+ f" Total Size: {total_size:,} bytes ({total_size / 1024 / 1024:.2f} MB)"
771
771
  )
772
772
 
773
773
  print("\n📁 Categories:")
@@ -871,7 +871,7 @@ def debug_cache(args, logger):
871
871
 
872
872
  print(f"Location: {cache_dir}")
873
873
  print(f"Files: {file_count}")
874
- print(f"Size: {total_size:,} bytes ({total_size/1024/1024:.2f} MB)")
874
+ print(f"Size: {total_size:,} bytes ({total_size / 1024 / 1024:.2f} MB)")
875
875
  else:
876
876
  print("No cache found")
877
877
 
@@ -998,22 +998,22 @@ def debug_performance(args, logger):
998
998
  # Memory info
999
999
  mem = psutil.virtual_memory()
1000
1000
  print("\n💾 Memory:")
1001
- print(f" Total: {mem.total/1024/1024/1024:.2f} GB")
1002
- print(f" Used: {mem.used/1024/1024/1024:.2f} GB ({mem.percent}%)")
1003
- print(f" Available: {mem.available/1024/1024/1024:.2f} GB")
1001
+ print(f" Total: {mem.total / 1024 / 1024 / 1024:.2f} GB")
1002
+ print(f" Used: {mem.used / 1024 / 1024 / 1024:.2f} GB ({mem.percent}%)")
1003
+ print(f" Available: {mem.available / 1024 / 1024 / 1024:.2f} GB")
1004
1004
 
1005
1005
  # Disk info
1006
1006
  disk = psutil.disk_usage("/")
1007
1007
  print("\n💿 Disk:")
1008
- print(f" Total: {disk.total/1024/1024/1024:.2f} GB")
1009
- print(f" Used: {disk.used/1024/1024/1024:.2f} GB ({disk.percent}%)")
1010
- print(f" Free: {disk.free/1024/1024/1024:.2f} GB")
1008
+ print(f" Total: {disk.total / 1024 / 1024 / 1024:.2f} GB")
1009
+ print(f" Used: {disk.used / 1024 / 1024 / 1024:.2f} GB ({disk.percent}%)")
1010
+ print(f" Free: {disk.free / 1024 / 1024 / 1024:.2f} GB")
1011
1011
 
1012
1012
  # Process info
1013
1013
  process = psutil.Process()
1014
1014
  print("\n📦 Current Process:")
1015
1015
  print(f" PID: {process.pid}")
1016
- print(f" Memory: {process.memory_info().rss/1024/1024:.2f} MB")
1016
+ print(f" Memory: {process.memory_info().rss / 1024 / 1024:.2f} MB")
1017
1017
  print(f" CPU: {process.cpu_percent()}%")
1018
1018
  print(f" Threads: {process.num_threads()}")
1019
1019
 
@@ -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)