claude-mpm 4.21.3__py3-none-any.whl → 5.0.2__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.
Files changed (484) hide show
  1. claude_mpm/VERSION +1 -1
  2. claude_mpm/agents/BASE_PM.md +12 -0
  3. claude_mpm/agents/OUTPUT_STYLE.md +3 -48
  4. claude_mpm/agents/PM_INSTRUCTIONS.md +632 -334
  5. claude_mpm/agents/WORKFLOW.md +75 -2
  6. claude_mpm/agents/__init__.py +6 -0
  7. claude_mpm/agents/agent_loader.py +1 -4
  8. claude_mpm/agents/base_agent.json +6 -3
  9. claude_mpm/agents/frontmatter_validator.py +1 -1
  10. claude_mpm/agents/templates/{circuit_breakers.md → circuit-breakers.md} +370 -3
  11. claude_mpm/agents/templates/context-management-examples.md +544 -0
  12. claude_mpm/agents/templates/{pm_red_flags.md → pm-red-flags.md} +89 -19
  13. claude_mpm/agents/templates/pr-workflow-examples.md +427 -0
  14. claude_mpm/agents/templates/research-gate-examples.md +669 -0
  15. claude_mpm/agents/templates/structured-questions-examples.md +615 -0
  16. claude_mpm/agents/templates/ticket-completeness-examples.md +139 -0
  17. claude_mpm/agents/templates/ticketing-examples.md +277 -0
  18. claude_mpm/cli/__init__.py +38 -2
  19. claude_mpm/cli/commands/agent_source.py +774 -0
  20. claude_mpm/cli/commands/agent_state_manager.py +125 -20
  21. claude_mpm/cli/commands/agents.py +684 -13
  22. claude_mpm/cli/commands/agents_cleanup.py +210 -0
  23. claude_mpm/cli/commands/agents_discover.py +338 -0
  24. claude_mpm/cli/commands/aggregate.py +1 -1
  25. claude_mpm/cli/commands/analyze.py +3 -3
  26. claude_mpm/cli/commands/auto_configure.py +2 -6
  27. claude_mpm/cli/commands/cleanup.py +1 -1
  28. claude_mpm/cli/commands/config.py +7 -4
  29. claude_mpm/cli/commands/configure.py +478 -44
  30. claude_mpm/cli/commands/configure_agent_display.py +4 -4
  31. claude_mpm/cli/commands/configure_navigation.py +63 -46
  32. claude_mpm/cli/commands/debug.py +12 -12
  33. claude_mpm/cli/commands/doctor.py +10 -2
  34. claude_mpm/cli/commands/hook_errors.py +277 -0
  35. claude_mpm/cli/commands/local_deploy.py +1 -4
  36. claude_mpm/cli/commands/mcp_install_commands.py +1 -1
  37. claude_mpm/cli/commands/mpm_init/core.py +50 -2
  38. claude_mpm/cli/commands/mpm_init/git_activity.py +10 -10
  39. claude_mpm/cli/commands/mpm_init/prompts.py +6 -6
  40. claude_mpm/cli/commands/run.py +124 -128
  41. claude_mpm/cli/commands/skill_source.py +694 -0
  42. claude_mpm/cli/commands/skills.py +435 -1
  43. claude_mpm/cli/executor.py +78 -3
  44. claude_mpm/cli/interactive/agent_wizard.py +919 -41
  45. claude_mpm/cli/parsers/agent_source_parser.py +171 -0
  46. claude_mpm/cli/parsers/agents_parser.py +173 -4
  47. claude_mpm/cli/parsers/base_parser.py +49 -0
  48. claude_mpm/cli/parsers/config_parser.py +96 -43
  49. claude_mpm/cli/parsers/skill_source_parser.py +169 -0
  50. claude_mpm/cli/parsers/skills_parser.py +138 -0
  51. claude_mpm/cli/parsers/source_parser.py +138 -0
  52. claude_mpm/cli/startup.py +499 -84
  53. claude_mpm/cli/startup_display.py +480 -0
  54. claude_mpm/cli/utils.py +1 -1
  55. claude_mpm/cli_module/commands.py +1 -1
  56. claude_mpm/commands/{mpm-auto-configure.md → mpm-agents-auto-configure.md} +9 -0
  57. claude_mpm/commands/mpm-agents-detect.md +9 -0
  58. claude_mpm/commands/{mpm-agents.md → mpm-agents-list.md} +9 -0
  59. claude_mpm/commands/mpm-agents-recommend.md +9 -0
  60. claude_mpm/commands/{mpm-config.md → mpm-config-view.md} +9 -0
  61. claude_mpm/commands/mpm-doctor.md +9 -0
  62. claude_mpm/commands/mpm-help.md +11 -2
  63. claude_mpm/commands/mpm-init.md +27 -2
  64. claude_mpm/commands/mpm-monitor.md +9 -0
  65. claude_mpm/commands/{mpm-resume.md → mpm-session-resume.md} +9 -0
  66. claude_mpm/commands/mpm-status.md +9 -0
  67. claude_mpm/commands/{mpm-organize.md → mpm-ticket-organize.md} +9 -0
  68. claude_mpm/commands/mpm-ticket-view.md +552 -0
  69. claude_mpm/commands/mpm-version.md +9 -0
  70. claude_mpm/commands/mpm.md +10 -0
  71. claude_mpm/config/agent_presets.py +258 -0
  72. claude_mpm/config/agent_sources.py +325 -0
  73. claude_mpm/config/skill_sources.py +590 -0
  74. claude_mpm/constants.py +12 -0
  75. claude_mpm/core/api_validator.py +1 -1
  76. claude_mpm/core/claude_runner.py +17 -10
  77. claude_mpm/core/config.py +24 -0
  78. claude_mpm/core/constants.py +1 -1
  79. claude_mpm/core/framework/__init__.py +3 -16
  80. claude_mpm/core/framework/loaders/instruction_loader.py +25 -5
  81. claude_mpm/core/framework/processors/metadata_processor.py +1 -1
  82. claude_mpm/core/hook_error_memory.py +381 -0
  83. claude_mpm/core/hook_manager.py +41 -2
  84. claude_mpm/core/interactive_session.py +112 -5
  85. claude_mpm/core/logger.py +3 -1
  86. claude_mpm/core/oneshot_session.py +94 -4
  87. claude_mpm/dashboard/static/css/activity.css +69 -69
  88. claude_mpm/dashboard/static/css/connection-status.css +10 -10
  89. claude_mpm/dashboard/static/css/dashboard.css +15 -15
  90. claude_mpm/dashboard/static/js/components/activity-tree.js +178 -178
  91. claude_mpm/dashboard/static/js/components/agent-hierarchy.js +101 -101
  92. claude_mpm/dashboard/static/js/components/agent-inference.js +31 -31
  93. claude_mpm/dashboard/static/js/components/build-tracker.js +59 -59
  94. claude_mpm/dashboard/static/js/components/code-simple.js +107 -107
  95. claude_mpm/dashboard/static/js/components/connection-debug.js +101 -101
  96. claude_mpm/dashboard/static/js/components/diff-viewer.js +113 -113
  97. claude_mpm/dashboard/static/js/components/event-viewer.js +12 -12
  98. claude_mpm/dashboard/static/js/components/file-change-tracker.js +57 -57
  99. claude_mpm/dashboard/static/js/components/file-change-viewer.js +74 -74
  100. claude_mpm/dashboard/static/js/components/file-tool-tracker.js +6 -6
  101. claude_mpm/dashboard/static/js/components/file-viewer.js +42 -42
  102. claude_mpm/dashboard/static/js/components/module-viewer.js +27 -27
  103. claude_mpm/dashboard/static/js/components/session-manager.js +14 -14
  104. claude_mpm/dashboard/static/js/components/socket-manager.js +1 -1
  105. claude_mpm/dashboard/static/js/components/ui-state-manager.js +14 -14
  106. claude_mpm/dashboard/static/js/components/unified-data-viewer.js +110 -110
  107. claude_mpm/dashboard/static/js/components/working-directory.js +8 -8
  108. claude_mpm/dashboard/static/js/connection-manager.js +76 -76
  109. claude_mpm/dashboard/static/js/dashboard.js +76 -58
  110. claude_mpm/dashboard/static/js/extension-error-handler.js +22 -22
  111. claude_mpm/dashboard/static/js/socket-client.js +138 -121
  112. claude_mpm/dashboard/templates/code_simple.html +23 -23
  113. claude_mpm/dashboard/templates/index.html +18 -18
  114. claude_mpm/experimental/cli_enhancements.py +1 -5
  115. claude_mpm/hooks/claude_hooks/event_handlers.py +3 -1
  116. claude_mpm/hooks/claude_hooks/hook_handler.py +24 -7
  117. claude_mpm/hooks/claude_hooks/installer.py +45 -0
  118. claude_mpm/hooks/failure_learning/__init__.py +2 -8
  119. claude_mpm/hooks/failure_learning/failure_detection_hook.py +1 -6
  120. claude_mpm/hooks/failure_learning/fix_detection_hook.py +1 -6
  121. claude_mpm/hooks/failure_learning/learning_extraction_hook.py +1 -6
  122. claude_mpm/hooks/kuzu_response_hook.py +1 -5
  123. claude_mpm/hooks/templates/pre_tool_use_simple.py +78 -0
  124. claude_mpm/hooks/templates/pre_tool_use_template.py +323 -0
  125. claude_mpm/models/git_repository.py +198 -0
  126. claude_mpm/scripts/claude-hook-handler.sh +3 -3
  127. claude_mpm/scripts/start_activity_logging.py +3 -1
  128. claude_mpm/services/agents/agent_builder.py +45 -9
  129. claude_mpm/services/agents/agent_preset_service.py +238 -0
  130. claude_mpm/services/agents/agent_selection_service.py +484 -0
  131. claude_mpm/services/agents/auto_deploy_index_parser.py +569 -0
  132. claude_mpm/services/agents/deployment/agent_deployment.py +126 -2
  133. claude_mpm/services/agents/deployment/agent_discovery_service.py +105 -73
  134. claude_mpm/services/agents/deployment/agent_format_converter.py +1 -1
  135. claude_mpm/services/agents/deployment/agent_lifecycle_manager.py +1 -5
  136. claude_mpm/services/agents/deployment/agent_metrics_collector.py +3 -3
  137. claude_mpm/services/agents/deployment/agent_restore_handler.py +1 -4
  138. claude_mpm/services/agents/deployment/agent_template_builder.py +236 -15
  139. claude_mpm/services/agents/deployment/agents_directory_resolver.py +101 -15
  140. claude_mpm/services/agents/deployment/async_agent_deployment.py +2 -1
  141. claude_mpm/services/agents/deployment/facade/deployment_facade.py +3 -3
  142. claude_mpm/services/agents/deployment/multi_source_deployment_service.py +115 -15
  143. claude_mpm/services/agents/deployment/pipeline/pipeline_executor.py +2 -2
  144. claude_mpm/services/agents/deployment/refactored_agent_deployment_service.py +1 -4
  145. claude_mpm/services/agents/deployment/remote_agent_discovery_service.py +363 -0
  146. claude_mpm/services/agents/deployment/single_agent_deployer.py +2 -2
  147. claude_mpm/services/agents/deployment/system_instructions_deployer.py +168 -46
  148. claude_mpm/services/agents/deployment/validation/deployment_validator.py +2 -2
  149. claude_mpm/services/agents/git_source_manager.py +629 -0
  150. claude_mpm/services/agents/loading/framework_agent_loader.py +9 -12
  151. claude_mpm/services/agents/local_template_manager.py +50 -10
  152. claude_mpm/services/agents/single_tier_deployment_service.py +696 -0
  153. claude_mpm/services/agents/sources/__init__.py +13 -0
  154. claude_mpm/services/agents/sources/agent_sync_state.py +516 -0
  155. claude_mpm/services/agents/sources/git_source_sync_service.py +1055 -0
  156. claude_mpm/services/agents/startup_sync.py +239 -0
  157. claude_mpm/services/agents/toolchain_detector.py +474 -0
  158. claude_mpm/services/cli/session_pause_manager.py +1 -1
  159. claude_mpm/services/cli/unified_dashboard_manager.py +1 -1
  160. claude_mpm/services/command_deployment_service.py +92 -1
  161. claude_mpm/services/core/interfaces/__init__.py +1 -3
  162. claude_mpm/services/core/interfaces/health.py +1 -4
  163. claude_mpm/services/core/models/__init__.py +2 -11
  164. claude_mpm/services/diagnostics/checks/__init__.py +4 -0
  165. claude_mpm/services/diagnostics/checks/agent_check.py +0 -2
  166. claude_mpm/services/diagnostics/checks/agent_sources_check.py +577 -0
  167. claude_mpm/services/diagnostics/checks/instructions_check.py +1 -2
  168. claude_mpm/services/diagnostics/checks/mcp_check.py +0 -1
  169. claude_mpm/services/diagnostics/checks/monitor_check.py +0 -1
  170. claude_mpm/services/diagnostics/checks/skill_sources_check.py +587 -0
  171. claude_mpm/services/diagnostics/diagnostic_runner.py +9 -0
  172. claude_mpm/services/diagnostics/doctor_reporter.py +40 -10
  173. claude_mpm/services/event_bus/direct_relay.py +3 -3
  174. claude_mpm/services/event_bus/event_bus.py +36 -3
  175. claude_mpm/services/events/consumers/logging.py +1 -2
  176. claude_mpm/services/git/__init__.py +21 -0
  177. claude_mpm/services/git/git_operations_service.py +494 -0
  178. claude_mpm/services/github/__init__.py +21 -0
  179. claude_mpm/services/github/github_cli_service.py +397 -0
  180. claude_mpm/services/infrastructure/monitoring/__init__.py +1 -5
  181. claude_mpm/services/infrastructure/monitoring/aggregator.py +1 -6
  182. claude_mpm/services/infrastructure/monitoring/resources.py +1 -1
  183. claude_mpm/services/instructions/__init__.py +9 -0
  184. claude_mpm/services/instructions/instruction_cache_service.py +374 -0
  185. claude_mpm/services/local_ops/__init__.py +3 -13
  186. claude_mpm/services/local_ops/health_checks/__init__.py +1 -3
  187. claude_mpm/services/local_ops/health_manager.py +1 -4
  188. claude_mpm/services/local_ops/process_manager.py +1 -1
  189. claude_mpm/services/local_ops/resource_monitor.py +2 -2
  190. claude_mpm/services/mcp_gateway/config/configuration.py +1 -1
  191. claude_mpm/services/mcp_gateway/server/mcp_gateway.py +1 -6
  192. claude_mpm/services/mcp_gateway/server/stdio_server.py +0 -2
  193. claude_mpm/services/mcp_gateway/tools/document_summarizer.py +1 -1
  194. claude_mpm/services/mcp_gateway/tools/kuzu_memory_service.py +6 -2
  195. claude_mpm/services/memory/optimizer.py +1 -1
  196. claude_mpm/services/model/model_router.py +8 -9
  197. claude_mpm/services/monitor/daemon.py +1 -1
  198. claude_mpm/services/monitor/server.py +2 -2
  199. claude_mpm/services/native_agent_converter.py +356 -0
  200. claude_mpm/services/port_manager.py +1 -1
  201. claude_mpm/services/pr/__init__.py +14 -0
  202. claude_mpm/services/pr/pr_template_service.py +329 -0
  203. claude_mpm/services/project/documentation_manager.py +2 -1
  204. claude_mpm/services/project/toolchain_analyzer.py +3 -1
  205. claude_mpm/services/runner_configuration_service.py +1 -0
  206. claude_mpm/services/self_upgrade_service.py +165 -7
  207. claude_mpm/services/skills/__init__.py +18 -0
  208. claude_mpm/services/skills/git_skill_source_manager.py +1169 -0
  209. claude_mpm/services/skills/skill_discovery_service.py +568 -0
  210. claude_mpm/services/skills_config.py +547 -0
  211. claude_mpm/services/skills_deployer.py +955 -0
  212. claude_mpm/services/socketio/handlers/connection.py +1 -1
  213. claude_mpm/services/socketio/handlers/git.py +2 -2
  214. claude_mpm/services/socketio/server/core.py +1 -4
  215. claude_mpm/services/socketio/server/main.py +1 -3
  216. claude_mpm/services/system_instructions_service.py +1 -3
  217. claude_mpm/services/unified/analyzer_strategies/performance_analyzer.py +0 -3
  218. claude_mpm/services/unified/analyzer_strategies/security_analyzer.py +0 -1
  219. claude_mpm/services/unified/deployment_strategies/cloud_strategies.py +1 -1
  220. claude_mpm/services/unified/deployment_strategies/vercel.py +1 -5
  221. claude_mpm/services/unified/unified_deployment.py +1 -5
  222. claude_mpm/services/version_control/conflict_resolution.py +6 -4
  223. claude_mpm/services/visualization/__init__.py +1 -5
  224. claude_mpm/services/visualization/mermaid_generator.py +2 -3
  225. claude_mpm/skills/bundled/infrastructure/env-manager/scripts/validate_env.py +576 -0
  226. claude_mpm/skills/bundled/performance-profiling.md +6 -0
  227. claude_mpm/skills/bundled/testing/webapp-testing/scripts/with_server.py +2 -2
  228. claude_mpm/skills/skills_registry.py +0 -1
  229. claude_mpm/templates/questions/__init__.py +38 -0
  230. claude_mpm/templates/questions/base.py +193 -0
  231. claude_mpm/templates/questions/pr_strategy.py +311 -0
  232. claude_mpm/templates/questions/project_init.py +385 -0
  233. claude_mpm/templates/questions/ticket_mgmt.py +394 -0
  234. claude_mpm/tools/__main__.py +8 -8
  235. claude_mpm/tools/code_tree_analyzer/analysis.py +1 -1
  236. claude_mpm/utils/agent_dependency_loader.py +80 -13
  237. claude_mpm/utils/dependency_cache.py +3 -1
  238. claude_mpm/utils/gitignore.py +241 -0
  239. claude_mpm/utils/log_cleanup.py +3 -3
  240. claude_mpm/utils/progress.py +383 -0
  241. claude_mpm/utils/robust_installer.py +3 -5
  242. claude_mpm/utils/structured_questions.py +619 -0
  243. {claude_mpm-4.21.3.dist-info → claude_mpm-5.0.2.dist-info}/METADATA +429 -59
  244. {claude_mpm-4.21.3.dist-info → claude_mpm-5.0.2.dist-info}/RECORD +252 -425
  245. claude_mpm/agents/templates/.claude-mpm/memories/README.md +0 -17
  246. claude_mpm/agents/templates/.claude-mpm/memories/engineer_memories.md +0 -3
  247. claude_mpm/agents/templates/agent-manager.json +0 -273
  248. claude_mpm/agents/templates/agentic-coder-optimizer.json +0 -248
  249. claude_mpm/agents/templates/api_qa.json +0 -180
  250. claude_mpm/agents/templates/clerk-ops.json +0 -235
  251. claude_mpm/agents/templates/code_analyzer.json +0 -101
  252. claude_mpm/agents/templates/content-agent.json +0 -358
  253. claude_mpm/agents/templates/dart_engineer.json +0 -307
  254. claude_mpm/agents/templates/data_engineer.json +0 -225
  255. claude_mpm/agents/templates/documentation.json +0 -211
  256. claude_mpm/agents/templates/engineer.json +0 -210
  257. claude_mpm/agents/templates/gcp_ops_agent.json +0 -253
  258. claude_mpm/agents/templates/golang_engineer.json +0 -270
  259. claude_mpm/agents/templates/imagemagick.json +0 -264
  260. claude_mpm/agents/templates/java_engineer.json +0 -346
  261. claude_mpm/agents/templates/local_ops_agent.json +0 -1840
  262. claude_mpm/agents/templates/logs/prompts/agent_engineer_20250826_014258_728.md +0 -39
  263. claude_mpm/agents/templates/logs/prompts/agent_engineer_20250901_010124_142.md +0 -400
  264. claude_mpm/agents/templates/memory_manager.json +0 -158
  265. claude_mpm/agents/templates/nextjs_engineer.json +0 -285
  266. claude_mpm/agents/templates/ops.json +0 -185
  267. claude_mpm/agents/templates/php-engineer.json +0 -287
  268. claude_mpm/agents/templates/product_owner.json +0 -338
  269. claude_mpm/agents/templates/project_organizer.json +0 -140
  270. claude_mpm/agents/templates/prompt-engineer.json +0 -737
  271. claude_mpm/agents/templates/python_engineer.json +0 -387
  272. claude_mpm/agents/templates/qa.json +0 -242
  273. claude_mpm/agents/templates/react_engineer.json +0 -238
  274. claude_mpm/agents/templates/refactoring_engineer.json +0 -276
  275. claude_mpm/agents/templates/research.json +0 -188
  276. claude_mpm/agents/templates/ruby-engineer.json +0 -280
  277. claude_mpm/agents/templates/rust_engineer.json +0 -275
  278. claude_mpm/agents/templates/security.json +0 -202
  279. claude_mpm/agents/templates/svelte-engineer.json +0 -225
  280. claude_mpm/agents/templates/ticketing.json +0 -177
  281. claude_mpm/agents/templates/typescript_engineer.json +0 -285
  282. claude_mpm/agents/templates/vercel_ops_agent.json +0 -412
  283. claude_mpm/agents/templates/version_control.json +0 -157
  284. claude_mpm/agents/templates/web_qa.json +0 -399
  285. claude_mpm/agents/templates/web_ui.json +0 -189
  286. claude_mpm/commands/mpm-tickets.md +0 -102
  287. claude_mpm/dashboard/.claude-mpm/socketio-instances.json +0 -1
  288. claude_mpm/dashboard/react/components/DataInspector/DataInspector.module.css +0 -188
  289. claude_mpm/dashboard/react/components/EventViewer/EventViewer.module.css +0 -156
  290. claude_mpm/dashboard/react/components/shared/ConnectionStatus.module.css +0 -38
  291. claude_mpm/dashboard/react/components/shared/FilterBar.module.css +0 -92
  292. claude_mpm/dashboard/static/archive/activity_dashboard_fixed.html +0 -248
  293. claude_mpm/dashboard/static/archive/activity_dashboard_test.html +0 -61
  294. claude_mpm/dashboard/static/archive/test_activity_connection.html +0 -179
  295. claude_mpm/dashboard/static/archive/test_claude_tree_tab.html +0 -68
  296. claude_mpm/dashboard/static/archive/test_dashboard.html +0 -409
  297. claude_mpm/dashboard/static/archive/test_dashboard_fixed.html +0 -519
  298. claude_mpm/dashboard/static/archive/test_dashboard_verification.html +0 -181
  299. claude_mpm/dashboard/static/archive/test_file_data.html +0 -315
  300. claude_mpm/dashboard/static/archive/test_file_tree_empty_state.html +0 -243
  301. claude_mpm/dashboard/static/archive/test_file_tree_fix.html +0 -234
  302. claude_mpm/dashboard/static/archive/test_file_tree_rename.html +0 -117
  303. claude_mpm/dashboard/static/archive/test_file_tree_tab.html +0 -115
  304. claude_mpm/dashboard/static/archive/test_file_viewer.html +0 -224
  305. claude_mpm/dashboard/static/archive/test_final_activity.html +0 -220
  306. claude_mpm/dashboard/static/archive/test_tab_fix.html +0 -139
  307. claude_mpm/dashboard/static/built/assets/events.DjpNxWNo.css +0 -1
  308. claude_mpm/dashboard/static/built/components/activity-tree.js +0 -2
  309. claude_mpm/dashboard/static/built/components/agent-hierarchy.js +0 -777
  310. claude_mpm/dashboard/static/built/components/agent-inference.js +0 -2
  311. claude_mpm/dashboard/static/built/components/build-tracker.js +0 -333
  312. claude_mpm/dashboard/static/built/components/code-simple.js +0 -857
  313. claude_mpm/dashboard/static/built/components/code-tree/tree-breadcrumb.js +0 -353
  314. claude_mpm/dashboard/static/built/components/code-tree/tree-constants.js +0 -235
  315. claude_mpm/dashboard/static/built/components/code-tree/tree-search.js +0 -409
  316. claude_mpm/dashboard/static/built/components/code-tree/tree-utils.js +0 -435
  317. claude_mpm/dashboard/static/built/components/code-tree.js +0 -2
  318. claude_mpm/dashboard/static/built/components/code-viewer.js +0 -2
  319. claude_mpm/dashboard/static/built/components/connection-debug.js +0 -654
  320. claude_mpm/dashboard/static/built/components/diff-viewer.js +0 -891
  321. claude_mpm/dashboard/static/built/components/event-processor.js +0 -2
  322. claude_mpm/dashboard/static/built/components/event-viewer.js +0 -2
  323. claude_mpm/dashboard/static/built/components/export-manager.js +0 -2
  324. claude_mpm/dashboard/static/built/components/file-change-tracker.js +0 -443
  325. claude_mpm/dashboard/static/built/components/file-change-viewer.js +0 -690
  326. claude_mpm/dashboard/static/built/components/file-tool-tracker.js +0 -2
  327. claude_mpm/dashboard/static/built/components/file-viewer.js +0 -2
  328. claude_mpm/dashboard/static/built/components/hud-library-loader.js +0 -2
  329. claude_mpm/dashboard/static/built/components/hud-manager.js +0 -2
  330. claude_mpm/dashboard/static/built/components/hud-visualizer.js +0 -2
  331. claude_mpm/dashboard/static/built/components/module-viewer.js +0 -2
  332. claude_mpm/dashboard/static/built/components/nav-bar.js +0 -145
  333. claude_mpm/dashboard/static/built/components/page-structure.js +0 -429
  334. claude_mpm/dashboard/static/built/components/session-manager.js +0 -2
  335. claude_mpm/dashboard/static/built/components/socket-manager.js +0 -2
  336. claude_mpm/dashboard/static/built/components/ui-state-manager.js +0 -2
  337. claude_mpm/dashboard/static/built/components/unified-data-viewer.js +0 -2
  338. claude_mpm/dashboard/static/built/components/working-directory.js +0 -2
  339. claude_mpm/dashboard/static/built/connection-manager.js +0 -536
  340. claude_mpm/dashboard/static/built/dashboard.js +0 -2
  341. claude_mpm/dashboard/static/built/extension-error-handler.js +0 -164
  342. claude_mpm/dashboard/static/built/react/events.js +0 -30
  343. claude_mpm/dashboard/static/built/shared/dom-helpers.js +0 -396
  344. claude_mpm/dashboard/static/built/shared/event-bus.js +0 -330
  345. claude_mpm/dashboard/static/built/shared/event-filter-service.js +0 -540
  346. claude_mpm/dashboard/static/built/shared/logger.js +0 -385
  347. claude_mpm/dashboard/static/built/shared/page-structure.js +0 -249
  348. claude_mpm/dashboard/static/built/shared/tooltip-service.js +0 -253
  349. claude_mpm/dashboard/static/built/socket-client.js +0 -2
  350. claude_mpm/dashboard/static/built/tab-isolation-fix.js +0 -185
  351. claude_mpm/dashboard/static/dist/assets/events.DjpNxWNo.css +0 -1
  352. claude_mpm/dashboard/static/dist/components/activity-tree.js +0 -2
  353. claude_mpm/dashboard/static/dist/components/agent-inference.js +0 -2
  354. claude_mpm/dashboard/static/dist/components/code-tree.js +0 -2
  355. claude_mpm/dashboard/static/dist/components/code-viewer.js +0 -2
  356. claude_mpm/dashboard/static/dist/components/event-processor.js +0 -2
  357. claude_mpm/dashboard/static/dist/components/event-viewer.js +0 -2
  358. claude_mpm/dashboard/static/dist/components/export-manager.js +0 -2
  359. claude_mpm/dashboard/static/dist/components/file-tool-tracker.js +0 -2
  360. claude_mpm/dashboard/static/dist/components/file-viewer.js +0 -2
  361. claude_mpm/dashboard/static/dist/components/hud-library-loader.js +0 -2
  362. claude_mpm/dashboard/static/dist/components/hud-manager.js +0 -2
  363. claude_mpm/dashboard/static/dist/components/hud-visualizer.js +0 -2
  364. claude_mpm/dashboard/static/dist/components/module-viewer.js +0 -2
  365. claude_mpm/dashboard/static/dist/components/session-manager.js +0 -2
  366. claude_mpm/dashboard/static/dist/components/socket-manager.js +0 -2
  367. claude_mpm/dashboard/static/dist/components/ui-state-manager.js +0 -2
  368. claude_mpm/dashboard/static/dist/components/unified-data-viewer.js +0 -2
  369. claude_mpm/dashboard/static/dist/components/working-directory.js +0 -2
  370. claude_mpm/dashboard/static/dist/dashboard.js +0 -2
  371. claude_mpm/dashboard/static/dist/react/events.js +0 -30
  372. claude_mpm/dashboard/static/dist/socket-client.js +0 -2
  373. claude_mpm/dashboard/static/events.html +0 -607
  374. claude_mpm/dashboard/static/index.html +0 -635
  375. claude_mpm/dashboard/static/js/shared/dom-helpers.js +0 -396
  376. claude_mpm/dashboard/static/js/shared/event-bus.js +0 -330
  377. claude_mpm/dashboard/static/js/shared/logger.js +0 -385
  378. claude_mpm/dashboard/static/js/shared/tooltip-service.js +0 -253
  379. claude_mpm/dashboard/static/js/stores/dashboard-store.js +0 -562
  380. claude_mpm/dashboard/static/legacy/activity.html +0 -736
  381. claude_mpm/dashboard/static/legacy/agents.html +0 -786
  382. claude_mpm/dashboard/static/legacy/files.html +0 -747
  383. claude_mpm/dashboard/static/legacy/tools.html +0 -831
  384. claude_mpm/dashboard/static/monitors.html +0 -431
  385. claude_mpm/dashboard/static/production/events.html +0 -659
  386. claude_mpm/dashboard/static/production/main.html +0 -698
  387. claude_mpm/dashboard/static/production/monitors.html +0 -483
  388. claude_mpm/dashboard/static/test-archive/dashboard.html +0 -635
  389. claude_mpm/dashboard/static/test-archive/debug-events.html +0 -147
  390. claude_mpm/dashboard/static/test-archive/test-navigation.html +0 -256
  391. claude_mpm/dashboard/static/test-archive/test-react-exports.html +0 -180
  392. claude_mpm/dashboard/static/test-archive/test_debug.html +0 -25
  393. claude_mpm/skills/bundled/collaboration/brainstorming/SKILL.md +0 -79
  394. claude_mpm/skills/bundled/collaboration/dispatching-parallel-agents/SKILL.md +0 -178
  395. claude_mpm/skills/bundled/collaboration/dispatching-parallel-agents/references/agent-prompts.md +0 -577
  396. claude_mpm/skills/bundled/collaboration/dispatching-parallel-agents/references/coordination-patterns.md +0 -467
  397. claude_mpm/skills/bundled/collaboration/dispatching-parallel-agents/references/examples.md +0 -537
  398. claude_mpm/skills/bundled/collaboration/dispatching-parallel-agents/references/troubleshooting.md +0 -730
  399. claude_mpm/skills/bundled/collaboration/requesting-code-review/SKILL.md +0 -112
  400. claude_mpm/skills/bundled/collaboration/requesting-code-review/references/code-reviewer-template.md +0 -146
  401. claude_mpm/skills/bundled/collaboration/requesting-code-review/references/review-examples.md +0 -412
  402. claude_mpm/skills/bundled/collaboration/writing-plans/SKILL.md +0 -81
  403. claude_mpm/skills/bundled/collaboration/writing-plans/references/best-practices.md +0 -362
  404. claude_mpm/skills/bundled/collaboration/writing-plans/references/plan-structure-templates.md +0 -312
  405. claude_mpm/skills/bundled/debugging/root-cause-tracing/SKILL.md +0 -152
  406. claude_mpm/skills/bundled/debugging/root-cause-tracing/references/advanced-techniques.md +0 -668
  407. claude_mpm/skills/bundled/debugging/root-cause-tracing/references/examples.md +0 -587
  408. claude_mpm/skills/bundled/debugging/root-cause-tracing/references/integration.md +0 -438
  409. claude_mpm/skills/bundled/debugging/root-cause-tracing/references/tracing-techniques.md +0 -391
  410. claude_mpm/skills/bundled/debugging/systematic-debugging/CREATION-LOG.md +0 -119
  411. claude_mpm/skills/bundled/debugging/systematic-debugging/SKILL.md +0 -148
  412. claude_mpm/skills/bundled/debugging/systematic-debugging/references/anti-patterns.md +0 -483
  413. claude_mpm/skills/bundled/debugging/systematic-debugging/references/examples.md +0 -452
  414. claude_mpm/skills/bundled/debugging/systematic-debugging/references/troubleshooting.md +0 -449
  415. claude_mpm/skills/bundled/debugging/systematic-debugging/references/workflow.md +0 -411
  416. claude_mpm/skills/bundled/debugging/systematic-debugging/test-academic.md +0 -14
  417. claude_mpm/skills/bundled/debugging/systematic-debugging/test-pressure-1.md +0 -58
  418. claude_mpm/skills/bundled/debugging/systematic-debugging/test-pressure-2.md +0 -68
  419. claude_mpm/skills/bundled/debugging/systematic-debugging/test-pressure-3.md +0 -69
  420. claude_mpm/skills/bundled/debugging/verification-before-completion/SKILL.md +0 -131
  421. claude_mpm/skills/bundled/debugging/verification-before-completion/references/gate-function.md +0 -325
  422. claude_mpm/skills/bundled/debugging/verification-before-completion/references/integration-and-workflows.md +0 -490
  423. claude_mpm/skills/bundled/debugging/verification-before-completion/references/red-flags-and-failures.md +0 -425
  424. claude_mpm/skills/bundled/debugging/verification-before-completion/references/verification-patterns.md +0 -499
  425. claude_mpm/skills/bundled/main/artifacts-builder/SKILL.md +0 -86
  426. claude_mpm/skills/bundled/main/internal-comms/SKILL.md +0 -43
  427. claude_mpm/skills/bundled/main/internal-comms/examples/3p-updates.md +0 -47
  428. claude_mpm/skills/bundled/main/internal-comms/examples/company-newsletter.md +0 -65
  429. claude_mpm/skills/bundled/main/internal-comms/examples/faq-answers.md +0 -30
  430. claude_mpm/skills/bundled/main/internal-comms/examples/general-comms.md +0 -16
  431. claude_mpm/skills/bundled/main/mcp-builder/SKILL.md +0 -160
  432. claude_mpm/skills/bundled/main/mcp-builder/reference/design_principles.md +0 -412
  433. claude_mpm/skills/bundled/main/mcp-builder/reference/evaluation.md +0 -602
  434. claude_mpm/skills/bundled/main/mcp-builder/reference/mcp_best_practices.md +0 -915
  435. claude_mpm/skills/bundled/main/mcp-builder/reference/node_mcp_server.md +0 -916
  436. claude_mpm/skills/bundled/main/mcp-builder/reference/python_mcp_server.md +0 -752
  437. claude_mpm/skills/bundled/main/mcp-builder/reference/workflow.md +0 -1237
  438. claude_mpm/skills/bundled/main/skill-creator/SKILL.md +0 -189
  439. claude_mpm/skills/bundled/main/skill-creator/references/best-practices.md +0 -500
  440. claude_mpm/skills/bundled/main/skill-creator/references/creation-workflow.md +0 -464
  441. claude_mpm/skills/bundled/main/skill-creator/references/examples.md +0 -619
  442. claude_mpm/skills/bundled/main/skill-creator/references/progressive-disclosure.md +0 -437
  443. claude_mpm/skills/bundled/main/skill-creator/references/skill-structure.md +0 -231
  444. claude_mpm/skills/bundled/php/espocrm-development/SKILL.md +0 -170
  445. claude_mpm/skills/bundled/php/espocrm-development/references/architecture.md +0 -602
  446. claude_mpm/skills/bundled/php/espocrm-development/references/common-tasks.md +0 -821
  447. claude_mpm/skills/bundled/php/espocrm-development/references/development-workflow.md +0 -742
  448. claude_mpm/skills/bundled/php/espocrm-development/references/frontend-customization.md +0 -726
  449. claude_mpm/skills/bundled/php/espocrm-development/references/hooks-and-services.md +0 -764
  450. claude_mpm/skills/bundled/php/espocrm-development/references/testing-debugging.md +0 -831
  451. claude_mpm/skills/bundled/rust/desktop-applications/SKILL.md +0 -226
  452. claude_mpm/skills/bundled/rust/desktop-applications/references/architecture-patterns.md +0 -901
  453. claude_mpm/skills/bundled/rust/desktop-applications/references/native-gui-frameworks.md +0 -901
  454. claude_mpm/skills/bundled/rust/desktop-applications/references/platform-integration.md +0 -775
  455. claude_mpm/skills/bundled/rust/desktop-applications/references/state-management.md +0 -937
  456. claude_mpm/skills/bundled/rust/desktop-applications/references/tauri-framework.md +0 -770
  457. claude_mpm/skills/bundled/rust/desktop-applications/references/testing-deployment.md +0 -961
  458. claude_mpm/skills/bundled/testing/condition-based-waiting/SKILL.md +0 -119
  459. claude_mpm/skills/bundled/testing/condition-based-waiting/references/patterns-and-implementation.md +0 -253
  460. claude_mpm/skills/bundled/testing/test-driven-development/SKILL.md +0 -145
  461. claude_mpm/skills/bundled/testing/test-driven-development/references/anti-patterns.md +0 -543
  462. claude_mpm/skills/bundled/testing/test-driven-development/references/examples.md +0 -741
  463. claude_mpm/skills/bundled/testing/test-driven-development/references/integration.md +0 -470
  464. claude_mpm/skills/bundled/testing/test-driven-development/references/philosophy.md +0 -458
  465. claude_mpm/skills/bundled/testing/test-driven-development/references/workflow.md +0 -639
  466. claude_mpm/skills/bundled/testing/testing-anti-patterns/SKILL.md +0 -140
  467. claude_mpm/skills/bundled/testing/testing-anti-patterns/references/completeness-anti-patterns.md +0 -572
  468. claude_mpm/skills/bundled/testing/testing-anti-patterns/references/core-anti-patterns.md +0 -411
  469. claude_mpm/skills/bundled/testing/testing-anti-patterns/references/detection-guide.md +0 -569
  470. claude_mpm/skills/bundled/testing/testing-anti-patterns/references/tdd-connection.md +0 -695
  471. claude_mpm/skills/bundled/testing/webapp-testing/SKILL.md +0 -184
  472. claude_mpm/skills/bundled/testing/webapp-testing/decision-tree.md +0 -459
  473. claude_mpm/skills/bundled/testing/webapp-testing/playwright-patterns.md +0 -479
  474. claude_mpm/skills/bundled/testing/webapp-testing/reconnaissance-pattern.md +0 -687
  475. claude_mpm/skills/bundled/testing/webapp-testing/server-management.md +0 -758
  476. claude_mpm/skills/bundled/testing/webapp-testing/troubleshooting.md +0 -868
  477. /claude_mpm/agents/templates/{git_file_tracking.md → git-file-tracking.md} +0 -0
  478. /claude_mpm/agents/templates/{pm_examples.md → pm-examples.md} +0 -0
  479. /claude_mpm/agents/templates/{response_format.md → response-format.md} +0 -0
  480. /claude_mpm/agents/templates/{validation_templates.md → validation-templates.md} +0 -0
  481. {claude_mpm-4.21.3.dist-info → claude_mpm-5.0.2.dist-info}/WHEEL +0 -0
  482. {claude_mpm-4.21.3.dist-info → claude_mpm-5.0.2.dist-info}/entry_points.txt +0 -0
  483. {claude_mpm-4.21.3.dist-info → claude_mpm-5.0.2.dist-info}/licenses/LICENSE +0 -0
  484. {claude_mpm-4.21.3.dist-info → claude_mpm-5.0.2.dist-info}/top_level.txt +0 -0
@@ -24,50 +24,50 @@
24
24
  border-radius: 4px;
25
25
  margin-bottom: 20px;
26
26
  }
27
-
27
+
28
28
  /* Tree visualization styles */
29
29
  .tree-node {
30
30
  cursor: pointer;
31
31
  }
32
-
32
+
33
33
  .tree-node circle {
34
34
  fill: #fff;
35
35
  stroke: steelblue;
36
36
  stroke-width: 2px;
37
37
  transition: all 0.3s ease;
38
38
  }
39
-
39
+
40
40
  .tree-node:hover circle {
41
41
  fill: #e6f3ff;
42
42
  stroke-width: 3px;
43
43
  }
44
-
44
+
45
45
  .tree-node text {
46
46
  font: 12px sans-serif;
47
47
  pointer-events: none;
48
48
  }
49
-
49
+
50
50
  .tree-link {
51
51
  fill: none;
52
52
  stroke: #ccc;
53
53
  stroke-width: 2px;
54
54
  }
55
-
55
+
56
56
  .view-toggle button {
57
57
  transition: all 0.3s ease;
58
58
  }
59
-
59
+
60
60
  .view-toggle button:hover {
61
61
  transform: translateY(-1px);
62
62
  box-shadow: 0 2px 4px rgba(0,0,0,0.2);
63
63
  }
64
-
64
+
65
65
  .file-selector input:focus {
66
66
  outline: none;
67
67
  border-color: #007cba;
68
68
  box-shadow: 0 0 0 2px rgba(0, 124, 186, 0.2);
69
69
  }
70
-
70
+
71
71
  .tree-legend {
72
72
  position: absolute;
73
73
  top: 10px;
@@ -79,13 +79,13 @@
79
79
  font-size: 12px;
80
80
  z-index: 1000;
81
81
  }
82
-
82
+
83
83
  .tree-legend-item {
84
84
  margin: 2px 0;
85
85
  display: flex;
86
86
  align-items: center;
87
87
  }
88
-
88
+
89
89
  .tree-legend-color {
90
90
  width: 12px;
91
91
  height: 12px;
@@ -103,15 +103,15 @@
103
103
  <div>⏳ Page loaded...</div>
104
104
  </div>
105
105
  </div>
106
-
106
+
107
107
  <div id="code-container">
108
108
  <!-- SimpleCodeView will render here -->
109
109
  </div>
110
110
  </div>
111
-
111
+
112
112
  <script>
113
113
  console.log('[HTML] Page script starting');
114
-
114
+
115
115
  function addStatus(message) {
116
116
  const statusDiv = document.getElementById('status-messages');
117
117
  if (statusDiv) {
@@ -119,27 +119,27 @@
119
119
  }
120
120
  console.log('[HTML Status]', message);
121
121
  }
122
-
122
+
123
123
  addStatus('⏳ Loading code-simple.js...');
124
124
  </script>
125
-
125
+
126
126
  <!-- D3.js for tree visualization -->
127
- <script src="https://d3js.org/d3.v7.min.js"
127
+ <script src="https://d3js.org/d3.v7.min.js"
128
128
  onload="addStatus('✅ D3.js loaded successfully')"
129
129
  onerror="addStatus('❌ Failed to load D3.js')"></script>
130
-
130
+
131
131
  <!-- Socket.IO for real-time communication -->
132
- <script src="https://cdn.socket.io/4.7.2/socket.io.min.js"
132
+ <script src="https://cdn.socket.io/4.7.2/socket.io.min.js"
133
133
  onload="addStatus('✅ Socket.IO loaded successfully')"
134
134
  onerror="addStatus('❌ Failed to load Socket.IO')"></script>
135
-
136
- <script src="/static/js/components/code-simple.js"
135
+
136
+ <script src="/static/js/components/code-simple.js"
137
137
  onload="addStatus('✅ code-simple.js loaded successfully')"
138
138
  onerror="addStatus('❌ Failed to load code-simple.js')"></script>
139
-
139
+
140
140
  <script>
141
141
  addStatus('⏳ Waiting for initialization...');
142
-
142
+
143
143
  // Check initialization after a delay
144
144
  setTimeout(() => {
145
145
  if (window.simpleCodeView) {
@@ -15,10 +15,10 @@
15
15
 
16
16
  <!-- External Dependencies -->
17
17
  <script src="https://cdn.socket.io/4.7.5/socket.io.min.js"></script>
18
-
18
+
19
19
  <!-- D3.js for Activity Tree Visualization -->
20
20
  <script src="https://d3js.org/d3.v7.min.js"></script>
21
-
21
+
22
22
  <!-- Font Awesome for icons -->
23
23
  <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.0/css/all.min.css">
24
24
 
@@ -141,7 +141,7 @@
141
141
  <body>
142
142
  <!-- Connection Notifications Area -->
143
143
  <div id="connection-notifications" class="connection-notifications"></div>
144
-
144
+
145
145
  <div class="container">
146
146
  <!-- Header Section -->
147
147
  <div class="header">
@@ -435,19 +435,19 @@
435
435
  // Set up working directory environment variables
436
436
  // These will be used by the working-directory component
437
437
  // The server will inject these values through a separate API call
438
-
438
+
439
439
  // Get the current working directory from the server
440
440
  fetch('/api/working-directory')
441
441
  .then(response => response.json())
442
442
  .then(data => {
443
443
  window.processWorkingDirectory = data.working_directory || '/Users/masa/Projects/claude-mpm';
444
444
  window.homeDirectory = data.home_directory || '/Users/masa';
445
-
445
+
446
446
  // Store in session storage for persistence
447
447
  if (window.processWorkingDirectory && window.processWorkingDirectory !== '/') {
448
448
  sessionStorage.setItem('currentWorkingDirectory', window.processWorkingDirectory);
449
449
  }
450
-
450
+
451
451
  // Dispatch event to notify components that working directory is ready
452
452
  window.dispatchEvent(new CustomEvent('workingDirectoryInitialized', {
453
453
  detail: {
@@ -462,10 +462,10 @@
462
462
  window.processWorkingDirectory = '/Users/masa/Projects/claude-mpm';
463
463
  window.homeDirectory = '/Users/masa';
464
464
  });
465
-
465
+
466
466
  // Add timestamp-based cache busting and ensure proper loading order
467
467
  const timestamp = Date.now();
468
-
468
+
469
469
  // Load modules sequentially to ensure dashboard.js loads first
470
470
  const loadModule = (src) => {
471
471
  return new Promise((resolve, reject) => {
@@ -477,7 +477,7 @@
477
477
  document.body.appendChild(script);
478
478
  });
479
479
  };
480
-
480
+
481
481
  // Load shared services first, then components
482
482
  // Load services sequentially to ensure dependencies are available
483
483
  loadModule('/static/js/shared/tooltip-service.js')
@@ -540,21 +540,21 @@
540
540
  console.error('[CRITICAL] Error loading dashboard modules:', error);
541
541
  console.error('Stack trace:', error.stack);
542
542
  });
543
-
543
+
544
544
  // Give modules time to execute and initialize dashboard
545
545
  setTimeout(() => {
546
546
  console.log('Checking dashboard initialization...');
547
-
547
+
548
548
  if (window.dashboard) {
549
549
  console.log('Dashboard found, checking auto-connect status...');
550
-
550
+
551
551
  // Force auto-connect if not already connected
552
552
  if (window.dashboard.socketManager) {
553
553
  const socketManager = window.dashboard.socketManager;
554
-
554
+
555
555
  if (!socketManager.isConnected() && !socketManager.isConnecting()) {
556
556
  console.log('Dashboard loaded but not connected, forcing auto-connect...');
557
-
557
+
558
558
  // Try to trigger auto-connect manually
559
559
  const params = new URLSearchParams(window.location.search);
560
560
  socketManager.initializeFromURL(params);
@@ -566,23 +566,23 @@
566
566
  }
567
567
  } else {
568
568
  console.warn('Dashboard still not initialized after module loading');
569
-
569
+
570
570
  // Try to manually trigger initialization
571
571
  if (document.readyState === 'complete' || document.readyState === 'interactive') {
572
572
  console.log('Document ready, attempting to trigger dashboard initialization...');
573
573
  document.dispatchEvent(new Event('DOMContentLoaded'));
574
574
  }
575
575
  }
576
-
576
+
577
577
  // Debug: Test connection settings button
578
578
  const connectionToggleBtn = document.getElementById('connection-toggle-btn');
579
579
  if (connectionToggleBtn) {
580
580
  console.log('Connection toggle button found, testing functionality...');
581
-
581
+
582
582
  // Add a debug click handler to ensure the button works
583
583
  connectionToggleBtn.addEventListener('click', () => {
584
584
  console.log('Connection toggle button clicked (debug handler)');
585
-
585
+
586
586
  if (window.dashboard && window.dashboard.socketManager) {
587
587
  console.log('Calling socketManager.toggleConnectionControls()');
588
588
  window.dashboard.socketManager.toggleConnectionControls();
@@ -31,11 +31,7 @@ import click
31
31
 
32
32
  from claude_mpm.core.logging_utils import get_logger
33
33
  from claude_mpm.hooks.validation_hooks import ValidationHooks
34
- from claude_mpm.utils.error_handler import (
35
- ErrorContext,
36
- MPMError,
37
- handle_errors,
38
- )
34
+ from claude_mpm.utils.error_handler import ErrorContext, MPMError, handle_errors
39
35
  from claude_mpm.validation import AgentValidator, ValidationResult
40
36
 
41
37
  logger = get_logger(__name__)
@@ -393,7 +393,9 @@ class EventHandlers:
393
393
  "status": (
394
394
  "success"
395
395
  if exit_code == 0
396
- else "blocked" if exit_code == 2 else "error"
396
+ else "blocked"
397
+ if exit_code == 2
398
+ else "error"
397
399
  ),
398
400
  "duration_ms": duration,
399
401
  "result_summary": result_data,
@@ -311,11 +311,12 @@ class ClaudeHookHandler:
311
311
  )
312
312
 
313
313
  # Route event to appropriate handler
314
- self._route_event(event)
314
+ # Handlers can optionally return modified input for PreToolUse events
315
+ modified_input = self._route_event(event)
315
316
 
316
317
  # Always continue execution (only if not already sent)
317
318
  if not _continue_sent:
318
- self._continue_execution()
319
+ self._continue_execution(modified_input)
319
320
  _continue_sent = True
320
321
 
321
322
  except Exception:
@@ -376,7 +377,7 @@ class ClaudeHookHandler:
376
377
  print(f"Error reading hook event: {e}", file=sys.stderr)
377
378
  return None
378
379
 
379
- def _route_event(self, event: dict) -> None:
380
+ def _route_event(self, event: dict) -> Optional[dict]:
380
381
  """
381
382
  Route event to appropriate handler based on type.
382
383
 
@@ -385,6 +386,9 @@ class ClaudeHookHandler:
385
386
 
386
387
  Args:
387
388
  event: Hook event dictionary
389
+
390
+ Returns:
391
+ Modified input for PreToolUse events (v2.0.30+), None otherwise
388
392
  """
389
393
  # Try multiple field names for compatibility
390
394
  hook_type = (
@@ -416,23 +420,36 @@ class ClaudeHookHandler:
416
420
  handler = event_handlers.get(hook_type)
417
421
  if handler:
418
422
  try:
419
- handler(event)
423
+ # Handlers can optionally return modified input
424
+ result = handler(event)
425
+ # Only PreToolUse handlers should return modified input
426
+ if hook_type == "PreToolUse" and result is not None:
427
+ return result
420
428
  except Exception as e:
421
429
  if DEBUG:
422
430
  print(f"Error handling {hook_type}: {e}", file=sys.stderr)
423
431
 
432
+ return None
433
+
424
434
  def handle_subagent_stop(self, event: dict):
425
435
  """Delegate subagent stop processing to the specialized processor."""
426
436
  self.subagent_processor.process_subagent_stop(event)
427
437
 
428
- def _continue_execution(self) -> None:
438
+ def _continue_execution(self, modified_input: Optional[dict] = None) -> None:
429
439
  """
430
- Send continue action to Claude.
440
+ Send continue action to Claude with optional input modification.
431
441
 
432
442
  WHY: Centralized response ensures consistent format
433
443
  and makes it easier to add response modifications.
444
+
445
+ Args:
446
+ modified_input: Modified tool parameters for PreToolUse hooks (v2.0.30+)
434
447
  """
435
- print(json.dumps({"action": "continue"}))
448
+ if modified_input is not None:
449
+ # Claude Code v2.0.30+ supports modifying PreToolUse tool inputs
450
+ print(json.dumps({"action": "continue", "tool_input": modified_input}))
451
+ else:
452
+ print(json.dumps({"action": "continue"}))
436
453
 
437
454
  # Delegation methods for compatibility with event_handlers
438
455
  def _track_delegation(self, session_id: str, agent_type: str, request_data=None):
@@ -192,6 +192,8 @@ main "$@"
192
192
 
193
193
  # Minimum Claude Code version required for hook monitoring
194
194
  MIN_CLAUDE_VERSION = "1.0.92"
195
+ # Minimum version for PreToolUse input modification support
196
+ MIN_PRETOOL_MODIFY_VERSION = "2.0.30"
195
197
 
196
198
  def __init__(self):
197
199
  """Initialize the hook installer."""
@@ -292,6 +294,42 @@ main "$@"
292
294
 
293
295
  return (True, f"Claude Code {version} is compatible with hook monitoring.")
294
296
 
297
+ def supports_pretool_modify(self) -> bool:
298
+ """
299
+ Check if the installed Claude Code version supports PreToolUse input modification.
300
+
301
+ PreToolUse input modification was added in Claude Code v2.0.30.
302
+
303
+ Returns:
304
+ True if version supports input modification, False otherwise
305
+ """
306
+ version = self.get_claude_version()
307
+
308
+ if version is None:
309
+ return False
310
+
311
+ def parse_version(v: str) -> List[int]:
312
+ """Parse semantic version string to list of integers."""
313
+ try:
314
+ return [int(x) for x in v.split(".")]
315
+ except (ValueError, AttributeError):
316
+ return [0]
317
+
318
+ current = parse_version(version)
319
+ required = parse_version(self.MIN_PRETOOL_MODIFY_VERSION)
320
+
321
+ # Compare versions
322
+ for i in range(max(len(current), len(required))):
323
+ curr_part = current[i] if i < len(current) else 0
324
+ req_part = required[i] if i < len(required) else 0
325
+
326
+ if curr_part < req_part:
327
+ return False
328
+ if curr_part > req_part:
329
+ return True
330
+
331
+ return True
332
+
295
333
  def get_hook_script_path(self) -> Path:
296
334
  """Get the path to the hook handler script based on installation method.
297
335
 
@@ -677,6 +715,7 @@ main "$@"
677
715
  # Check version compatibility
678
716
  claude_version = self.get_claude_version()
679
717
  is_compatible, version_message = self.is_version_compatible()
718
+ pretool_modify_supported = self.supports_pretool_modify()
680
719
 
681
720
  is_valid, issues = self.verify_hooks()
682
721
 
@@ -701,6 +740,12 @@ main "$@"
701
740
  "version_compatible": is_compatible,
702
741
  "version_message": version_message,
703
742
  "deployment_type": "deployment-root", # New field to indicate new architecture
743
+ "pretool_modify_supported": pretool_modify_supported, # v2.0.30+ feature
744
+ "pretool_modify_message": (
745
+ f"PreToolUse input modification supported (v{claude_version})"
746
+ if pretool_modify_supported
747
+ else f"PreToolUse input modification requires Claude Code {self.MIN_PRETOOL_MODIFY_VERSION}+ (current: {claude_version or 'unknown'})"
748
+ ),
704
749
  }
705
750
 
706
751
  # Check Claude settings for hook configuration
@@ -35,14 +35,8 @@ Usage:
35
35
  hook_service.register_hook(get_learning_extraction_hook())
36
36
  """
37
37
 
38
- from .failure_detection_hook import (
39
- FailureDetectionHook,
40
- get_failure_detection_hook,
41
- )
42
- from .fix_detection_hook import (
43
- FixDetectionHook,
44
- get_fix_detection_hook,
45
- )
38
+ from .failure_detection_hook import FailureDetectionHook, get_failure_detection_hook
39
+ from .fix_detection_hook import FixDetectionHook, get_fix_detection_hook
46
40
  from .learning_extraction_hook import (
47
41
  LearningExtractionHook,
48
42
  get_learning_extraction_hook,
@@ -21,12 +21,7 @@ Integration points:
21
21
  import logging
22
22
  from typing import Any, Dict
23
23
 
24
- from claude_mpm.hooks.base_hook import (
25
- BaseHook,
26
- HookContext,
27
- HookResult,
28
- HookType,
29
- )
24
+ from claude_mpm.hooks.base_hook import BaseHook, HookContext, HookResult, HookType
30
25
  from claude_mpm.services.memory.failure_tracker import get_failure_tracker
31
26
 
32
27
  logger = logging.getLogger(__name__)
@@ -23,12 +23,7 @@ Integration points:
23
23
  import logging
24
24
  from typing import Any, Dict
25
25
 
26
- from claude_mpm.hooks.base_hook import (
27
- BaseHook,
28
- HookContext,
29
- HookResult,
30
- HookType,
31
- )
26
+ from claude_mpm.hooks.base_hook import BaseHook, HookContext, HookResult, HookType
32
27
  from claude_mpm.services.memory.failure_tracker import get_failure_tracker
33
28
 
34
29
  logger = logging.getLogger(__name__)
@@ -23,12 +23,7 @@ Integration points:
23
23
  import logging
24
24
  from typing import Any
25
25
 
26
- from claude_mpm.hooks.base_hook import (
27
- BaseHook,
28
- HookContext,
29
- HookResult,
30
- HookType,
31
- )
26
+ from claude_mpm.hooks.base_hook import BaseHook, HookContext, HookResult, HookType
32
27
  from claude_mpm.services.memory.failure_tracker import get_failure_tracker
33
28
 
34
29
  logger = logging.getLogger(__name__)
@@ -20,11 +20,7 @@ DESIGN DECISIONS:
20
20
  import logging
21
21
  from typing import Any, Optional
22
22
 
23
- from claude_mpm.hooks.base_hook import (
24
- HookContext,
25
- HookResult,
26
- PostDelegationHook,
27
- )
23
+ from claude_mpm.hooks.base_hook import HookContext, HookResult, PostDelegationHook
28
24
  from claude_mpm.hooks.kuzu_memory_hook import get_kuzu_memory_hook
29
25
 
30
26
  logger = logging.getLogger(__name__)
@@ -0,0 +1,78 @@
1
+ #!/usr/bin/env python3
2
+ """
3
+ Simple PreToolUse Hook Example for Claude Code v2.0.30+
4
+
5
+ This is a minimal example showing the basic structure of a PreToolUse hook
6
+ that can modify tool inputs.
7
+
8
+ To use this hook:
9
+ 1. Copy this file to ~/.claude-mpm/hooks/
10
+ 2. Make it executable: chmod +x ~/.claude-mpm/hooks/pre_tool_use_simple.py
11
+ 3. Add to ~/.claude/settings.json:
12
+
13
+ {
14
+ "hooks": {
15
+ "PreToolUse": [
16
+ {
17
+ "matcher": "*",
18
+ "hooks": [
19
+ {
20
+ "type": "command",
21
+ "command": "/Users/YOUR_USERNAME/.claude-mpm/hooks/pre_tool_use_simple.py",
22
+ "modifyInput": true
23
+ }
24
+ ]
25
+ }
26
+ ]
27
+ }
28
+ }
29
+ """
30
+
31
+ import json
32
+ import sys
33
+
34
+
35
+ def main():
36
+ """Process PreToolUse event and optionally modify input."""
37
+ try:
38
+ # Read event from stdin
39
+ event_data = sys.stdin.read()
40
+ if not event_data.strip():
41
+ print(json.dumps({"action": "continue"}))
42
+ return
43
+
44
+ event = json.loads(event_data)
45
+ tool_name = event.get("tool_name", "")
46
+ tool_input = event.get("tool_input", {})
47
+
48
+ # Example: Add line numbers to all Grep operations
49
+ if tool_name == "Grep" and "-n" not in tool_input:
50
+ modified_input = tool_input.copy()
51
+ modified_input["-n"] = True
52
+ print(json.dumps({"action": "continue", "tool_input": modified_input}))
53
+ return
54
+
55
+ # Example: Block operations on .env files
56
+ if tool_name in ["Write", "Edit", "Read"]:
57
+ file_path = tool_input.get("file_path", "")
58
+ if ".env" in file_path:
59
+ print(
60
+ json.dumps(
61
+ {
62
+ "action": "block",
63
+ "message": "Access to .env file blocked for security",
64
+ }
65
+ )
66
+ )
67
+ return
68
+
69
+ # Default: continue without modification
70
+ print(json.dumps({"action": "continue"}))
71
+
72
+ except Exception:
73
+ # Always continue on error to avoid blocking Claude
74
+ print(json.dumps({"action": "continue"}))
75
+
76
+
77
+ if __name__ == "__main__":
78
+ main()