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,145 @@
1
+ # Async Logging Configuration
2
+ # Optimized logging configuration for high-performance scenarios
3
+
4
+ logging:
5
+ # Enable async logging for improved performance
6
+ async:
7
+ enabled: true
8
+
9
+ # Log format options: json, syslog, journald
10
+ format: json
11
+
12
+ # Maximum queue size for async writes
13
+ max_queue_size: 10000
14
+
15
+ # Enable compression for JSON logs (reduces disk usage)
16
+ compression: false
17
+
18
+ # Worker threads for async processing
19
+ worker_threads: 4
20
+
21
+ # Flush timeout in seconds
22
+ flush_timeout: 5.0
23
+
24
+ # Session logger settings
25
+ session:
26
+ # Base directory for logs
27
+ base_dir: ".claude-mpm/responses"
28
+
29
+ # Use timestamp-based filenames (eliminates race conditions)
30
+ timestamp_filenames: true
31
+
32
+ # Include microseconds in timestamps for uniqueness
33
+ microsecond_precision: true
34
+
35
+ # Filename format with available variables:
36
+ # {agent} - Agent name
37
+ # {timestamp} - ISO timestamp
38
+ # {microseconds} - Microsecond component
39
+ # {session} - Session ID
40
+ filename_format: "{agent}_{timestamp}_{microseconds}.json"
41
+
42
+ # OS-native logging options (for extreme performance)
43
+ syslog:
44
+ # Syslog address (auto-detected by default)
45
+ # address: /var/run/syslog # macOS
46
+ # address: /dev/log # Linux
47
+ # address: ["localhost", 514] # Network
48
+
49
+ # Syslog facility
50
+ facility: local0
51
+
52
+ # Include structured data
53
+ structured_data: true
54
+
55
+ # Performance tuning
56
+ performance:
57
+ # Fire-and-forget mode (don't wait for write confirmation)
58
+ fire_and_forget: true
59
+
60
+ # Drop logs if queue is full (prevents blocking)
61
+ drop_on_full: true
62
+
63
+ # Batch writes for efficiency
64
+ batch_writes: true
65
+ batch_size: 10
66
+ batch_timeout_ms: 100
67
+
68
+ # Hook system optimization
69
+ hooks:
70
+ # Enable hook system
71
+ enabled: true
72
+
73
+ # Optimization settings
74
+ optimization:
75
+ # Cache hook configurations at startup
76
+ cache_configs: true
77
+
78
+ # Lazy load hook implementations
79
+ lazy_loading: true
80
+
81
+ # Use singleton pattern for hook service
82
+ singleton: true
83
+
84
+ # Enable async hook execution
85
+ async_execution: true
86
+
87
+ # Maximum workers for parallel hook execution
88
+ max_workers: 4
89
+
90
+ # Pre-delegation hooks
91
+ pre_delegation:
92
+ enabled: true
93
+
94
+ # Parallel execution for independent hooks
95
+ parallel_safe_hooks:
96
+ - memory_context_hook
97
+ - validation_hook
98
+ - auth_hook
99
+
100
+ # Post-delegation hooks
101
+ post_delegation:
102
+ enabled: true
103
+
104
+ # Parallel execution for independent hooks
105
+ parallel_safe_hooks:
106
+ - logging_hook
107
+ - metrics_hook
108
+ - cleanup_hook
109
+
110
+ # Registered hooks with lazy loading
111
+ registered:
112
+ # NOTE: The builtin hooks have been deprecated and removed
113
+ # These references are kept commented for historical reference
114
+ # memory_context_hook:
115
+ # module: claude_mpm.hooks.builtin.memory_hooks
116
+ # class: MemoryContextHook
117
+ # priority: 10
118
+ # enabled: true
119
+ # params:
120
+ # cache_size: 1000
121
+ #
122
+ # response_logger_hook:
123
+ # module: claude_mpm.hooks.builtin.logging_hooks
124
+ # class: ResponseLoggerHook
125
+ # priority: 90
126
+ # enabled: true
127
+ # params:
128
+ # async: true
129
+ #
130
+ # metrics_hook:
131
+ # module: claude_mpm.hooks.builtin.metrics_hooks
132
+ # class: MetricsCollectorHook
133
+ # priority: 95
134
+ # enabled: true
135
+ # params:
136
+ # buffer_size: 100
137
+
138
+ # Environment variable overrides
139
+ # These can override any setting above:
140
+ #
141
+ # CLAUDE_USE_ASYNC_LOG=true # Enable async logging
142
+ # CLAUDE_LOG_FORMAT=syslog # Use syslog format
143
+ # CLAUDE_LOG_SYNC=true # Disable async (for debugging)
144
+ # CLAUDE_HOOKS_CACHE=true # Enable hook caching
145
+ # CLAUDE_HOOKS_ASYNC=true # Enable async hooks
claude_mpm/constants.py CHANGED
@@ -168,6 +168,18 @@ class SkillsCommands(str, Enum):
168
168
  UPDATE = "update"
169
169
  INFO = "info"
170
170
  CONFIG = "config"
171
+ # GitHub deployment commands
172
+ DEPLOY_FROM_GITHUB = "deploy-github"
173
+ LIST_AVAILABLE = "list-available"
174
+ CHECK_DEPLOYED = "check-deployed"
175
+ REMOVE = "remove"
176
+ # Collection management commands
177
+ COLLECTION_LIST = "collection-list"
178
+ COLLECTION_ADD = "collection-add"
179
+ COLLECTION_REMOVE = "collection-remove"
180
+ COLLECTION_ENABLE = "collection-enable"
181
+ COLLECTION_DISABLE = "collection-disable"
182
+ COLLECTION_SET_DEFAULT = "collection-set-default"
171
183
 
172
184
 
173
185
  class CLIFlags(str, Enum):
@@ -0,0 +1,34 @@
1
+ 2025-07-30 12:40:20,992 - claude_mpm_hooks_core - INFO - hook_handler.py:231 - Claude Code hook event: PostToolUse (session: df539357)
2
+ 2025-07-30 12:40:20,992 - claude_mpm_hooks_core - INFO - hook_handler.py:254 - PostToolUse: Bash (exit code: N/A)
3
+ 2025-07-30 12:40:33,117 - claude_mpm_hooks_core - INFO - hook_handler.py:231 - Claude Code hook event: PreToolUse (session: df539357)
4
+ 2025-07-30 12:40:33,117 - claude_mpm_hooks_core - INFO - hook_handler.py:247 - PreToolUse: Edit
5
+ 2025-07-30 12:40:33,276 - claude_mpm_hooks_core - INFO - hook_handler.py:231 - Claude Code hook event: PostToolUse (session: df539357)
6
+ 2025-07-30 12:40:33,276 - claude_mpm_hooks_core - INFO - hook_handler.py:254 - PostToolUse: Edit (exit code: N/A)
7
+ 2025-07-30 12:40:39,276 - claude_mpm_hooks_core - INFO - hook_handler.py:231 - Claude Code hook event: PreToolUse (session: df539357)
8
+ 2025-07-30 12:40:39,276 - claude_mpm_hooks_core - INFO - hook_handler.py:247 - PreToolUse: Bash
9
+ 2025-07-30 12:40:39,541 - claude_mpm_hooks_core - INFO - hook_handler.py:231 - Claude Code hook event: PostToolUse (session: df539357)
10
+ 2025-07-30 12:40:39,541 - claude_mpm_hooks_core - INFO - hook_handler.py:254 - PostToolUse: Bash (exit code: N/A)
11
+ 2025-07-30 12:40:48,610 - claude_mpm_hooks_core - INFO - hook_handler.py:231 - Claude Code hook event: PreToolUse (session: df539357)
12
+ 2025-07-30 12:40:48,610 - claude_mpm_hooks_core - INFO - hook_handler.py:247 - PreToolUse: Bash
13
+ 2025-07-30 12:40:49,941 - claude_mpm_hooks_core - INFO - hook_handler.py:231 - Claude Code hook event: PostToolUse (session: df539357)
14
+ 2025-07-30 12:40:49,941 - claude_mpm_hooks_core - INFO - hook_handler.py:254 - PostToolUse: Bash (exit code: N/A)
15
+ 2025-07-30 12:44:50,358 - claude_mpm_hooks_core - INFO - hook_handler.py:231 - Claude Code hook event: UserPromptSubmit (session: df539357)
16
+ 2025-07-30 12:44:50,358 - claude_mpm_hooks_core - INFO - hook_handler.py:244 - UserPromptSubmit: OK. Let's make the subprocess the default method
17
+ 2025-07-30 13:05:35,872 - claude_mpm_hooks_core - INFO - hook_handler.py:231 - Claude Code hook event: UserPromptSubmit (session: df539357)
18
+ 2025-07-30 13:05:35,872 - claude_mpm_hooks_core - INFO - hook_handler.py:244 - UserPromptSubmit: actually leave as is. I want to figure out a simple test to trigger the terminal flow. Use docs/de...
19
+ 2025-07-30 13:05:42,930 - claude_mpm_hooks_core - INFO - hook_handler.py:231 - Claude Code hook event: PreToolUse (session: df539357)
20
+ 2025-07-30 13:05:42,930 - claude_mpm_hooks_core - INFO - hook_handler.py:247 - PreToolUse: Read
21
+ 2025-07-30 13:05:43,133 - claude_mpm_hooks_core - INFO - hook_handler.py:231 - Claude Code hook event: PostToolUse (session: df539357)
22
+ 2025-07-30 13:05:43,133 - claude_mpm_hooks_core - INFO - hook_handler.py:254 - PostToolUse: Read (exit code: N/A)
23
+ 2025-07-30 13:05:49,996 - claude_mpm_hooks_core - INFO - hook_handler.py:231 - Claude Code hook event: PreToolUse (session: df539357)
24
+ 2025-07-30 13:05:49,996 - claude_mpm_hooks_core - INFO - hook_handler.py:247 - PreToolUse: Grep
25
+ 2025-07-30 13:05:50,548 - claude_mpm_hooks_core - INFO - hook_handler.py:231 - Claude Code hook event: PostToolUse (session: df539357)
26
+ 2025-07-30 13:05:50,548 - claude_mpm_hooks_core - INFO - hook_handler.py:254 - PostToolUse: Grep (exit code: N/A)
27
+ 2025-07-30 13:05:56,341 - claude_mpm_hooks_core - INFO - hook_handler.py:231 - Claude Code hook event: PreToolUse (session: df539357)
28
+ 2025-07-30 13:05:56,341 - claude_mpm_hooks_core - INFO - hook_handler.py:247 - PreToolUse: Read
29
+ 2025-07-30 13:05:56,527 - claude_mpm_hooks_core - INFO - hook_handler.py:231 - Claude Code hook event: PostToolUse (session: df539357)
30
+ 2025-07-30 13:05:56,528 - claude_mpm_hooks_core - INFO - hook_handler.py:254 - PostToolUse: Read (exit code: N/A)
31
+ 2025-07-30 13:06:01,890 - claude_mpm_hooks_core - INFO - hook_handler.py:231 - Claude Code hook event: PreToolUse (session: df539357)
32
+ 2025-07-30 13:06:01,890 - claude_mpm_hooks_core - INFO - hook_handler.py:247 - PreToolUse: Bash
33
+ 2025-07-30 13:06:08,115 - claude_mpm_hooks_core - INFO - hook_handler.py:231 - Claude Code hook event: PreToolUse (session: df539357)
34
+ 2025-07-30 13:06:08,115 - claude_mpm_hooks_core - INFO - hook_handler.py:247 - PreToolUse: Bash
@@ -326,5 +326,5 @@ def validate_api_keys(config: Optional[Dict] = None, strict: bool = True) -> boo
326
326
  ValueError: If strict=True and any validation fails
327
327
  """
328
328
  validator = APIKeyValidator(config)
329
- success, errors, warnings = validator.validate_all_keys(strict=strict)
329
+ success, _errors, _warnings = validator.validate_all_keys(strict=strict)
330
330
  return success
@@ -42,8 +42,19 @@ class ClaudeRunner:
42
42
  launch_method: str = "exec", # "exec" or "subprocess"
43
43
  enable_websocket: bool = False,
44
44
  websocket_port: int = 8765,
45
+ use_native_agents: bool = False, # Use --agents flag instead of file deployment
45
46
  ):
46
- """Initialize the Claude runner."""
47
+ """Initialize the Claude runner.
48
+
49
+ Args:
50
+ enable_tickets: Enable ticket extraction (deprecated)
51
+ log_level: Logging level
52
+ claude_args: Additional arguments for Claude CLI
53
+ launch_method: "exec" or "subprocess" launch mode
54
+ enable_websocket: Enable WebSocket server
55
+ websocket_port: WebSocket server port
56
+ use_native_agents: Use --agents CLI flag instead of .claude/agents/ deployment
57
+ """
47
58
  self.logger = get_logger(__name__)
48
59
 
49
60
  # Initialize configuration service
@@ -75,6 +86,7 @@ class ClaudeRunner:
75
86
  launch_method=launch_method,
76
87
  enable_websocket=enable_websocket,
77
88
  websocket_port=websocket_port,
89
+ use_native_agents=use_native_agents,
78
90
  )
79
91
 
80
92
  # Set configuration attributes
@@ -84,6 +96,7 @@ class ClaudeRunner:
84
96
  self.launch_method = config_data["launch_method"]
85
97
  self.enable_websocket = config_data["enable_websocket"]
86
98
  self.websocket_port = config_data["websocket_port"]
99
+ self.use_native_agents = config_data.get("use_native_agents", False)
87
100
  self.config = config_data["config"]
88
101
 
89
102
  # Initialize project logger using the service
claude_mpm/core/config.py CHANGED
@@ -583,6 +583,14 @@ class Config:
583
583
  "auto_save": True, # Enable automatic session saving
584
584
  "save_interval": 300, # Auto-save interval in seconds (5 minutes)
585
585
  },
586
+ # Update checking configuration
587
+ "updates": {
588
+ "check_enabled": True, # Enable automatic update checks
589
+ "check_frequency": "daily", # Options: "always", "daily", "weekly", "never"
590
+ "check_claude_code": True, # Check Claude Code version compatibility
591
+ "auto_upgrade": False, # Automatically upgrade without prompting (use with caution)
592
+ "cache_ttl": 86400, # Cache update check results (24 hours)
593
+ },
586
594
  }
587
595
 
588
596
  # Apply defaults for missing keys
@@ -215,7 +215,7 @@ class Defaults:
215
215
  DEFAULT_TEMPERATURE = 0.5
216
216
 
217
217
  # Logging defaults
218
- DEFAULT_LOG_LEVEL = "INFO"
218
+ DEFAULT_LOG_LEVEL = "OFF"
219
219
  DEFAULT_LOG_FORMAT = "%(asctime)s - %(name)s - %(levelname)s - %(message)s"
220
220
 
221
221
  # Session defaults
@@ -127,7 +127,7 @@ class MetadataProcessor:
127
127
  True if cache is valid, False otherwise
128
128
  """
129
129
  try:
130
- data, cache_time = cached_data
130
+ _data, cache_time = cached_data
131
131
  current_time = time.time()
132
132
 
133
133
  # Check TTL
@@ -0,0 +1,381 @@
1
+ """Hook Error Memory System.
2
+
3
+ This module provides error detection and memory for hook execution to prevent
4
+ repeated errors and provide helpful diagnostics.
5
+
6
+ WHY this is needed:
7
+ - Hook processor can encounter transient or persistent errors
8
+ - Repeated failing commands waste resources and clutter logs
9
+ - Users need actionable suggestions to fix configuration issues
10
+ - System should learn from errors and prevent repetition
11
+
12
+ DESIGN DECISION: Store errors in JSON file rather than database because:
13
+ - Simple, human-readable format
14
+ - Easy to inspect and manually clear
15
+ - No additional dependencies
16
+ - Fast read/write for small datasets
17
+ - Users can easily delete to retry failed commands
18
+ """
19
+
20
+ import json
21
+ import re
22
+ from datetime import datetime, timezone
23
+ from pathlib import Path
24
+ from typing import Any, Dict, Optional
25
+
26
+ from ..core.logger import get_logger
27
+
28
+
29
+ class HookErrorMemory:
30
+ """Tracks and prevents repeated hook execution errors.
31
+
32
+ WHY this design:
33
+ - Detects common error patterns automatically
34
+ - Stores error history to prevent repetition
35
+ - Provides actionable fix suggestions
36
+ - Allows manual retry by clearing memory
37
+ - Minimal performance overhead (<1ms per check)
38
+ """
39
+
40
+ # Error pattern definitions with detection regexes
41
+ ERROR_PATTERNS = [
42
+ (r"no such file or directory[:\s]+(.+?)(?:\n|$)", "file_not_found"),
43
+ (r"command not found[:\s]+(.+?)(?:\n|$)", "command_not_found"),
44
+ (r"permission denied[:\s]+(.+?)(?:\n|$)", "permission_denied"),
45
+ (r"syntax error", "syntax_error"),
46
+ (r"Error:\s*\(eval\):(\d+):\s*(.+?)(?:\n|$)", "eval_error"),
47
+ (r"Error:\s*(.+?)(?:\n|$)", "general_error"),
48
+ ]
49
+
50
+ def __init__(self, memory_file: Optional[Path] = None):
51
+ """Initialize hook error memory.
52
+
53
+ Args:
54
+ memory_file: Path to memory file (default: .claude-mpm/hook_errors.json)
55
+ """
56
+ self.logger = get_logger("hook_error_memory")
57
+
58
+ # Use default location if not specified
59
+ if memory_file is None:
60
+ memory_file = Path.cwd() / ".claude-mpm" / "hook_errors.json"
61
+
62
+ self.memory_file = memory_file
63
+ self.errors: Dict[str, Any] = self._load_errors()
64
+
65
+ def _load_errors(self) -> Dict[str, Any]:
66
+ """Load previously encountered errors from disk.
67
+
68
+ Returns:
69
+ Dictionary of error records
70
+ """
71
+ if not self.memory_file.exists():
72
+ return {}
73
+
74
+ try:
75
+ content = self.memory_file.read_text()
76
+ if not content.strip():
77
+ return {}
78
+ return json.loads(content)
79
+ except json.JSONDecodeError as e:
80
+ self.logger.warning(f"Failed to parse error memory file: {e}")
81
+ return {}
82
+ except Exception as e:
83
+ self.logger.error(f"Error loading error memory: {e}")
84
+ return {}
85
+
86
+ def _save_errors(self):
87
+ """Persist errors to disk."""
88
+ try:
89
+ # Ensure directory exists
90
+ self.memory_file.parent.mkdir(parents=True, exist_ok=True)
91
+
92
+ # Write with pretty formatting for human readability
93
+ self.memory_file.write_text(json.dumps(self.errors, indent=2))
94
+ except Exception as e:
95
+ self.logger.error(f"Failed to save error memory: {e}")
96
+
97
+ def detect_error(
98
+ self, output: str, stderr: str, returncode: int
99
+ ) -> Optional[Dict[str, str]]:
100
+ """Detect if output contains an error.
101
+
102
+ WHY check both stdout and stderr:
103
+ - Some commands write errors to stdout
104
+ - Some write to stderr
105
+ - Return code alone isn't enough (some hooks return non-zero on purpose)
106
+
107
+ Args:
108
+ output: Standard output from command
109
+ stderr: Standard error from command
110
+ returncode: Exit code from command
111
+
112
+ Returns:
113
+ Dict with error info if detected, None otherwise
114
+ """
115
+ # Combine output sources for comprehensive error detection
116
+ combined_output = f"{output}\n{stderr}"
117
+
118
+ # Try each pattern in order of specificity
119
+ for pattern, error_type in self.ERROR_PATTERNS:
120
+ match = re.search(pattern, combined_output, re.IGNORECASE | re.MULTILINE)
121
+ if match:
122
+ # Extract details from the match
123
+ details = match.group(1) if match.groups() else match.group(0)
124
+
125
+ return {
126
+ "type": error_type,
127
+ "pattern": pattern,
128
+ "match": match.group(0).strip(),
129
+ "details": details.strip() if details else "",
130
+ "returncode": returncode,
131
+ }
132
+
133
+ # If no pattern matched but returncode is non-zero, record as generic error
134
+ if returncode != 0 and combined_output.strip():
135
+ return {
136
+ "type": "unknown_error",
137
+ "pattern": "non-zero exit code",
138
+ "match": f"Exit code: {returncode}",
139
+ "details": combined_output[:200].strip(), # First 200 chars
140
+ "returncode": returncode,
141
+ }
142
+
143
+ return None
144
+
145
+ def record_error(self, error_info: Dict[str, str], hook_type: str):
146
+ """Record an error to prevent future repetition.
147
+
148
+ WHY use composite key:
149
+ - Same error type can occur with different details
150
+ - Want to track specific error instances
151
+ - Hook type context helps with diagnosis
152
+
153
+ Args:
154
+ error_info: Error information from detect_error()
155
+ hook_type: Type of hook that failed (e.g., "PreToolUse")
156
+ """
157
+ # Create unique key for this error
158
+ key = f"{error_info['type']}:{hook_type}:{error_info['details']}"
159
+
160
+ now = datetime.now(timezone.utc).isoformat()
161
+
162
+ if key in self.errors:
163
+ # Update existing error
164
+ self.errors[key]["count"] += 1
165
+ self.errors[key]["last_seen"] = now
166
+ else:
167
+ # Record new error
168
+ self.errors[key] = {
169
+ "type": error_info["type"],
170
+ "hook_type": hook_type,
171
+ "details": error_info["details"],
172
+ "match": error_info["match"],
173
+ "returncode": error_info.get("returncode", 1),
174
+ "count": 1,
175
+ "first_seen": now,
176
+ "last_seen": now,
177
+ }
178
+
179
+ self._save_errors()
180
+ self.logger.debug(
181
+ f"Recorded error: {error_info['type']} (count: {self.errors[key]['count']})"
182
+ )
183
+
184
+ def is_known_failing_hook(self, hook_type: str) -> Optional[Dict[str, Any]]:
185
+ """Check if a hook type is known to fail repeatedly.
186
+
187
+ WHY check for 2+ failures:
188
+ - Single failure could be transient
189
+ - 2+ failures indicate persistent issue
190
+ - Balance between retry attempts and error prevention
191
+
192
+ Args:
193
+ hook_type: Type of hook to check
194
+
195
+ Returns:
196
+ Error data if hook is known to fail, None otherwise
197
+ """
198
+ # Find any errors for this hook type with 2+ occurrences
199
+ for key, error_data in self.errors.items():
200
+ if error_data["hook_type"] == hook_type and error_data["count"] >= 2:
201
+ return error_data
202
+
203
+ return None
204
+
205
+ def should_skip_hook(self, hook_type: str, threshold: int = 2) -> bool:
206
+ """Determine if a hook should be skipped due to repeated failures.
207
+
208
+ Args:
209
+ hook_type: Type of hook to check
210
+ threshold: Minimum failure count to skip (default: 2)
211
+
212
+ Returns:
213
+ True if hook should be skipped
214
+ """
215
+ error_data = self.is_known_failing_hook(hook_type)
216
+ return error_data is not None and error_data["count"] >= threshold
217
+
218
+ def suggest_fix(self, error_info: Dict[str, str]) -> str:
219
+ """Suggest a fix for the detected error.
220
+
221
+ WHY provide suggestions:
222
+ - Users need actionable guidance
223
+ - Common errors have known solutions
224
+ - Reduces support burden
225
+ - Improves user experience
226
+
227
+ Args:
228
+ error_info: Error information from detect_error()
229
+
230
+ Returns:
231
+ Human-readable fix suggestion
232
+ """
233
+ error_type = error_info["type"]
234
+ details = error_info.get("details", "")
235
+
236
+ suggestions = {
237
+ "file_not_found": f"""File not found: {details}
238
+
239
+ Possible fixes:
240
+ 1. Check if the file exists: ls -la {details}
241
+ 2. Verify the path is correct in your hook configuration
242
+ 3. If it's a script, ensure it's executable: chmod +x {details}
243
+ 4. Clear error memory to retry: rm {self.memory_file}
244
+ """,
245
+ "command_not_found": f"""Command not found: {details}
246
+
247
+ Possible fixes:
248
+ 1. Install the missing command
249
+ 2. Check if it's in your PATH: which {details}
250
+ 3. Update hook configuration to use absolute path
251
+ 4. Remove the hook if no longer needed
252
+ """,
253
+ "permission_denied": f"""Permission denied: {details}
254
+
255
+ Possible fixes:
256
+ 1. Check file permissions: ls -la {details}
257
+ 2. Make file executable: chmod +x {details}
258
+ 3. Run with appropriate privileges
259
+ 4. Check file ownership
260
+ """,
261
+ "syntax_error": """Syntax error in hook configuration or script
262
+
263
+ Possible fixes:
264
+ 1. Review hook configuration in .claude-mpm/config
265
+ 2. Check script syntax if using shell hooks
266
+ 3. Validate JSON configuration format
267
+ 4. Check for typos in hook definitions
268
+ """,
269
+ "eval_error": f"""Error in hook execution: {details}
270
+
271
+ Possible fixes:
272
+ 1. Review hook handler logs for details
273
+ 2. Check hook configuration syntax
274
+ 3. Verify all required dependencies are available
275
+ 4. Test hook handler manually: python {details}
276
+ """,
277
+ "general_error": f"""Error during hook execution: {error_info.get("match", "Unknown error")}
278
+
279
+ Possible fixes:
280
+ 1. Check logs for detailed error information
281
+ 2. Verify hook configuration is correct
282
+ 3. Ensure all dependencies are installed
283
+ 4. Clear error memory to retry: rm {self.memory_file}
284
+ """,
285
+ }
286
+
287
+ return suggestions.get(
288
+ error_type, f"Unknown error type: {error_type}\n\nDetails: {details}"
289
+ )
290
+
291
+ def clear_errors(self, hook_type: Optional[str] = None):
292
+ """Clear error memory to allow retry of failed hooks.
293
+
294
+ Args:
295
+ hook_type: If specified, only clear errors for this hook type
296
+ """
297
+ if hook_type is None:
298
+ # Clear all errors
299
+ count = len(self.errors)
300
+ self.errors.clear()
301
+ self._save_errors()
302
+ self.logger.info(f"Cleared all {count} error records")
303
+ else:
304
+ # Clear errors for specific hook type
305
+ keys_to_remove = [
306
+ key
307
+ for key, data in self.errors.items()
308
+ if data["hook_type"] == hook_type
309
+ ]
310
+ for key in keys_to_remove:
311
+ del self.errors[key]
312
+ self._save_errors()
313
+ self.logger.info(
314
+ f"Cleared {len(keys_to_remove)} error records for {hook_type}"
315
+ )
316
+
317
+ def get_error_summary(self) -> Dict[str, Any]:
318
+ """Get summary of all recorded errors.
319
+
320
+ Returns:
321
+ Dictionary with error statistics and details
322
+ """
323
+ if not self.errors:
324
+ return {
325
+ "total_errors": 0,
326
+ "unique_errors": 0,
327
+ "errors_by_type": {},
328
+ "errors_by_hook": {},
329
+ }
330
+
331
+ errors_by_type = {}
332
+ errors_by_hook = {}
333
+
334
+ total_count = 0
335
+
336
+ for error_data in self.errors.values():
337
+ error_type = error_data["type"]
338
+ hook_type = error_data["hook_type"]
339
+ count = error_data["count"]
340
+
341
+ total_count += count
342
+
343
+ errors_by_type[error_type] = errors_by_type.get(error_type, 0) + count
344
+ errors_by_hook[hook_type] = errors_by_hook.get(hook_type, 0) + count
345
+
346
+ return {
347
+ "total_errors": total_count,
348
+ "unique_errors": len(self.errors),
349
+ "errors_by_type": errors_by_type,
350
+ "errors_by_hook": errors_by_hook,
351
+ "memory_file": str(self.memory_file),
352
+ }
353
+
354
+
355
+ # Global instance
356
+ _hook_error_memory: Optional[HookErrorMemory] = None
357
+
358
+
359
+ def get_hook_error_memory(memory_file: Optional[Path] = None) -> HookErrorMemory:
360
+ """Get the global hook error memory instance.
361
+
362
+ Args:
363
+ memory_file: Optional custom memory file path
364
+
365
+ Returns:
366
+ HookErrorMemory instance
367
+ """
368
+ global _hook_error_memory
369
+ if _hook_error_memory is None:
370
+ _hook_error_memory = HookErrorMemory(memory_file)
371
+ return _hook_error_memory
372
+
373
+
374
+ def clear_hook_errors(hook_type: Optional[str] = None):
375
+ """Convenience function to clear hook error memory.
376
+
377
+ Args:
378
+ hook_type: If specified, only clear errors for this hook type
379
+ """
380
+ memory = get_hook_error_memory()
381
+ memory.clear_errors(hook_type)