claude-mpm 4.14.6__py3-none-any.whl → 4.21.0__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 (353) hide show
  1. claude_mpm/VERSION +1 -1
  2. claude_mpm/agents/BASE_ENGINEER.md +286 -0
  3. claude_mpm/agents/BASE_PM.md +272 -23
  4. claude_mpm/agents/OUTPUT_STYLE.md +48 -3
  5. claude_mpm/agents/PM_INSTRUCTIONS.md +49 -0
  6. claude_mpm/agents/agent_loader.py +17 -5
  7. claude_mpm/agents/frontmatter_validator.py +284 -253
  8. claude_mpm/agents/templates/agentic-coder-optimizer.json +9 -2
  9. claude_mpm/agents/templates/api_qa.json +7 -1
  10. claude_mpm/agents/templates/clerk-ops.json +8 -1
  11. claude_mpm/agents/templates/code_analyzer.json +4 -1
  12. claude_mpm/agents/templates/dart_engineer.json +11 -1
  13. claude_mpm/agents/templates/data_engineer.json +11 -1
  14. claude_mpm/agents/templates/documentation.json +6 -1
  15. claude_mpm/agents/templates/engineer.json +18 -1
  16. claude_mpm/agents/templates/gcp_ops_agent.json +8 -1
  17. claude_mpm/agents/templates/golang_engineer.json +11 -1
  18. claude_mpm/agents/templates/java_engineer.json +12 -2
  19. claude_mpm/agents/templates/local_ops_agent.json +216 -37
  20. claude_mpm/agents/templates/nextjs_engineer.json +11 -1
  21. claude_mpm/agents/templates/ops.json +8 -1
  22. claude_mpm/agents/templates/php-engineer.json +20 -4
  23. claude_mpm/agents/templates/project_organizer.json +10 -3
  24. claude_mpm/agents/templates/prompt-engineer.json +5 -1
  25. claude_mpm/agents/templates/python_engineer.json +19 -4
  26. claude_mpm/agents/templates/qa.json +7 -1
  27. claude_mpm/agents/templates/react_engineer.json +11 -1
  28. claude_mpm/agents/templates/refactoring_engineer.json +8 -1
  29. claude_mpm/agents/templates/research.json +4 -1
  30. claude_mpm/agents/templates/ruby-engineer.json +11 -1
  31. claude_mpm/agents/templates/rust_engineer.json +23 -8
  32. claude_mpm/agents/templates/security.json +6 -1
  33. claude_mpm/agents/templates/svelte-engineer.json +225 -0
  34. claude_mpm/agents/templates/ticketing.json +6 -1
  35. claude_mpm/agents/templates/typescript_engineer.json +11 -1
  36. claude_mpm/agents/templates/vercel_ops_agent.json +8 -1
  37. claude_mpm/agents/templates/version_control.json +8 -1
  38. claude_mpm/agents/templates/web_qa.json +7 -1
  39. claude_mpm/agents/templates/web_ui.json +11 -1
  40. claude_mpm/cli/__init__.py +34 -740
  41. claude_mpm/cli/commands/__init__.py +2 -0
  42. claude_mpm/cli/commands/agent_manager.py +25 -12
  43. claude_mpm/cli/commands/agent_state_manager.py +186 -0
  44. claude_mpm/cli/commands/agents.py +204 -148
  45. claude_mpm/cli/commands/aggregate.py +7 -3
  46. claude_mpm/cli/commands/analyze.py +9 -4
  47. claude_mpm/cli/commands/analyze_code.py +7 -2
  48. claude_mpm/cli/commands/auto_configure.py +7 -9
  49. claude_mpm/cli/commands/config.py +47 -13
  50. claude_mpm/cli/commands/configure.py +294 -1788
  51. claude_mpm/cli/commands/configure_agent_display.py +261 -0
  52. claude_mpm/cli/commands/configure_behavior_manager.py +204 -0
  53. claude_mpm/cli/commands/configure_hook_manager.py +225 -0
  54. claude_mpm/cli/commands/configure_models.py +18 -0
  55. claude_mpm/cli/commands/configure_navigation.py +167 -0
  56. claude_mpm/cli/commands/configure_paths.py +104 -0
  57. claude_mpm/cli/commands/configure_persistence.py +254 -0
  58. claude_mpm/cli/commands/configure_startup_manager.py +646 -0
  59. claude_mpm/cli/commands/configure_template_editor.py +497 -0
  60. claude_mpm/cli/commands/configure_validators.py +73 -0
  61. claude_mpm/cli/commands/local_deploy.py +3 -2
  62. claude_mpm/cli/commands/memory.py +54 -20
  63. claude_mpm/cli/commands/mpm_init/__init__.py +73 -0
  64. claude_mpm/cli/commands/mpm_init/core.py +525 -0
  65. claude_mpm/cli/commands/mpm_init/display.py +341 -0
  66. claude_mpm/cli/commands/mpm_init/git_activity.py +427 -0
  67. claude_mpm/cli/commands/mpm_init/modes.py +397 -0
  68. claude_mpm/cli/commands/mpm_init/prompts.py +442 -0
  69. claude_mpm/cli/commands/mpm_init_cli.py +396 -0
  70. claude_mpm/cli/commands/mpm_init_handler.py +75 -4
  71. claude_mpm/cli/commands/skills.py +488 -0
  72. claude_mpm/cli/executor.py +204 -0
  73. claude_mpm/cli/helpers.py +105 -0
  74. claude_mpm/cli/interactive/__init__.py +3 -0
  75. claude_mpm/cli/interactive/skills_wizard.py +491 -0
  76. claude_mpm/cli/parsers/base_parser.py +7 -0
  77. claude_mpm/cli/parsers/mpm_init_parser.py +42 -0
  78. claude_mpm/cli/parsers/skills_parser.py +137 -0
  79. claude_mpm/cli/shared/output_formatters.py +28 -19
  80. claude_mpm/cli/startup.py +538 -0
  81. claude_mpm/commands/mpm-auto-configure.md +52 -0
  82. claude_mpm/commands/mpm-help.md +3 -0
  83. claude_mpm/commands/mpm-init.md +112 -6
  84. claude_mpm/commands/mpm-version.md +113 -0
  85. claude_mpm/commands/mpm.md +1 -0
  86. claude_mpm/config/agent_config.py +2 -2
  87. claude_mpm/constants.py +12 -0
  88. claude_mpm/core/base_service.py +13 -12
  89. claude_mpm/core/config.py +42 -0
  90. claude_mpm/core/enums.py +452 -0
  91. claude_mpm/core/factories.py +1 -1
  92. claude_mpm/core/instruction_reinforcement_hook.py +2 -1
  93. claude_mpm/core/interactive_session.py +6 -3
  94. claude_mpm/core/interfaces.py +56 -1
  95. claude_mpm/core/logging_config.py +6 -2
  96. claude_mpm/core/oneshot_session.py +8 -4
  97. claude_mpm/core/optimized_agent_loader.py +3 -3
  98. claude_mpm/core/output_style_manager.py +12 -192
  99. claude_mpm/core/service_registry.py +5 -1
  100. claude_mpm/core/types.py +2 -9
  101. claude_mpm/core/typing_utils.py +7 -6
  102. claude_mpm/dashboard/static/js/dashboard.js +0 -14
  103. claude_mpm/dashboard/templates/index.html +3 -41
  104. claude_mpm/hooks/__init__.py +8 -0
  105. claude_mpm/hooks/claude_hooks/response_tracking.py +35 -1
  106. claude_mpm/hooks/instruction_reinforcement.py +7 -2
  107. claude_mpm/hooks/session_resume_hook.py +121 -0
  108. claude_mpm/models/resume_log.py +340 -0
  109. claude_mpm/services/agents/auto_config_manager.py +10 -11
  110. claude_mpm/services/agents/deployment/agent_configuration_manager.py +1 -1
  111. claude_mpm/services/agents/deployment/agent_record_service.py +1 -1
  112. claude_mpm/services/agents/deployment/agent_validator.py +17 -1
  113. claude_mpm/services/agents/deployment/async_agent_deployment.py +1 -1
  114. claude_mpm/services/agents/deployment/interface_adapter.py +3 -2
  115. claude_mpm/services/agents/deployment/local_template_deployment.py +1 -1
  116. claude_mpm/services/agents/deployment/pipeline/steps/agent_processing_step.py +7 -6
  117. claude_mpm/services/agents/deployment/pipeline/steps/base_step.py +7 -16
  118. claude_mpm/services/agents/deployment/pipeline/steps/configuration_step.py +4 -3
  119. claude_mpm/services/agents/deployment/pipeline/steps/target_directory_step.py +5 -3
  120. claude_mpm/services/agents/deployment/pipeline/steps/validation_step.py +6 -5
  121. claude_mpm/services/agents/deployment/refactored_agent_deployment_service.py +9 -6
  122. claude_mpm/services/agents/deployment/validation/__init__.py +3 -1
  123. claude_mpm/services/agents/deployment/validation/validation_result.py +1 -9
  124. claude_mpm/services/agents/local_template_manager.py +1 -1
  125. claude_mpm/services/agents/memory/agent_memory_manager.py +5 -2
  126. claude_mpm/services/agents/recommender.py +47 -0
  127. claude_mpm/services/agents/registry/modification_tracker.py +5 -2
  128. claude_mpm/services/cli/resume_service.py +617 -0
  129. claude_mpm/services/cli/session_manager.py +87 -0
  130. claude_mpm/services/cli/session_pause_manager.py +504 -0
  131. claude_mpm/services/cli/session_resume_helper.py +372 -0
  132. claude_mpm/services/command_handler_service.py +11 -5
  133. claude_mpm/services/core/interfaces/process.py +6 -6
  134. claude_mpm/services/core/interfaces.py +56 -1
  135. claude_mpm/services/core/models/__init__.py +0 -2
  136. claude_mpm/services/core/models/agent_config.py +15 -28
  137. claude_mpm/services/core/models/health.py +1 -28
  138. claude_mpm/services/core/models/process.py +22 -41
  139. claude_mpm/services/core/path_resolver.py +1 -1
  140. claude_mpm/services/diagnostics/__init__.py +2 -2
  141. claude_mpm/services/diagnostics/checks/agent_check.py +25 -24
  142. claude_mpm/services/diagnostics/checks/claude_code_check.py +24 -23
  143. claude_mpm/services/diagnostics/checks/common_issues_check.py +25 -24
  144. claude_mpm/services/diagnostics/checks/configuration_check.py +24 -23
  145. claude_mpm/services/diagnostics/checks/filesystem_check.py +18 -17
  146. claude_mpm/services/diagnostics/checks/installation_check.py +30 -29
  147. claude_mpm/services/diagnostics/checks/instructions_check.py +20 -19
  148. claude_mpm/services/diagnostics/checks/mcp_check.py +50 -36
  149. claude_mpm/services/diagnostics/checks/mcp_services_check.py +36 -31
  150. claude_mpm/services/diagnostics/checks/monitor_check.py +23 -22
  151. claude_mpm/services/diagnostics/checks/startup_log_check.py +9 -8
  152. claude_mpm/services/diagnostics/diagnostic_runner.py +6 -5
  153. claude_mpm/services/diagnostics/doctor_reporter.py +28 -25
  154. claude_mpm/services/diagnostics/models.py +37 -21
  155. claude_mpm/services/infrastructure/monitoring/__init__.py +1 -1
  156. claude_mpm/services/infrastructure/monitoring/aggregator.py +12 -12
  157. claude_mpm/services/infrastructure/monitoring/base.py +5 -13
  158. claude_mpm/services/infrastructure/monitoring/network.py +7 -6
  159. claude_mpm/services/infrastructure/monitoring/process.py +13 -12
  160. claude_mpm/services/infrastructure/monitoring/resources.py +7 -6
  161. claude_mpm/services/infrastructure/monitoring/service.py +16 -15
  162. claude_mpm/services/infrastructure/resume_log_generator.py +439 -0
  163. claude_mpm/services/local_ops/__init__.py +5 -3
  164. claude_mpm/services/local_ops/crash_detector.py +1 -1
  165. claude_mpm/services/local_ops/health_checks/http_check.py +2 -1
  166. claude_mpm/services/local_ops/health_checks/process_check.py +2 -1
  167. claude_mpm/services/local_ops/health_checks/resource_check.py +2 -1
  168. claude_mpm/services/local_ops/health_manager.py +1 -1
  169. claude_mpm/services/local_ops/process_manager.py +12 -12
  170. claude_mpm/services/local_ops/restart_manager.py +1 -1
  171. claude_mpm/services/local_ops/state_manager.py +6 -5
  172. claude_mpm/services/local_ops/unified_manager.py +2 -2
  173. claude_mpm/services/mcp_config_manager.py +7 -126
  174. claude_mpm/services/mcp_gateway/auto_configure.py +31 -25
  175. claude_mpm/services/mcp_gateway/core/__init__.py +1 -2
  176. claude_mpm/services/mcp_gateway/core/base.py +18 -31
  177. claude_mpm/services/mcp_gateway/core/process_pool.py +19 -10
  178. claude_mpm/services/mcp_gateway/tools/external_mcp_services.py +97 -45
  179. claude_mpm/services/mcp_gateway/tools/health_check_tool.py +30 -28
  180. claude_mpm/services/memory_hook_service.py +4 -1
  181. claude_mpm/services/monitor/daemon_manager.py +3 -2
  182. claude_mpm/services/monitor/handlers/dashboard.py +2 -1
  183. claude_mpm/services/monitor/handlers/hooks.py +2 -1
  184. claude_mpm/services/monitor/management/lifecycle.py +3 -2
  185. claude_mpm/services/monitor/server.py +2 -1
  186. claude_mpm/services/session_management_service.py +3 -2
  187. claude_mpm/services/session_manager.py +205 -1
  188. claude_mpm/services/shared/async_service_base.py +16 -27
  189. claude_mpm/services/shared/lifecycle_service_base.py +1 -14
  190. claude_mpm/services/socketio/handlers/__init__.py +5 -2
  191. claude_mpm/services/socketio/handlers/hook.py +13 -2
  192. claude_mpm/services/socketio/handlers/registry.py +4 -2
  193. claude_mpm/services/socketio/server/main.py +10 -8
  194. claude_mpm/services/subprocess_launcher_service.py +14 -5
  195. claude_mpm/services/unified/analyzer_strategies/code_analyzer.py +8 -7
  196. claude_mpm/services/unified/analyzer_strategies/dependency_analyzer.py +6 -5
  197. claude_mpm/services/unified/analyzer_strategies/performance_analyzer.py +8 -7
  198. claude_mpm/services/unified/analyzer_strategies/security_analyzer.py +7 -6
  199. claude_mpm/services/unified/analyzer_strategies/structure_analyzer.py +5 -4
  200. claude_mpm/services/unified/config_strategies/validation_strategy.py +13 -9
  201. claude_mpm/services/unified/deployment_strategies/cloud_strategies.py +10 -3
  202. claude_mpm/services/unified/deployment_strategies/local.py +6 -5
  203. claude_mpm/services/unified/deployment_strategies/utils.py +6 -5
  204. claude_mpm/services/unified/deployment_strategies/vercel.py +7 -6
  205. claude_mpm/services/unified/interfaces.py +3 -1
  206. claude_mpm/services/unified/unified_analyzer.py +14 -10
  207. claude_mpm/services/unified/unified_config.py +2 -1
  208. claude_mpm/services/unified/unified_deployment.py +9 -4
  209. claude_mpm/services/version_service.py +104 -1
  210. claude_mpm/skills/__init__.py +42 -0
  211. claude_mpm/skills/agent_skills_injector.py +324 -0
  212. claude_mpm/skills/bundled/LICENSE_ATTRIBUTIONS.md +79 -0
  213. claude_mpm/skills/bundled/__init__.py +6 -0
  214. claude_mpm/skills/bundled/api-documentation.md +393 -0
  215. claude_mpm/skills/bundled/async-testing.md +571 -0
  216. claude_mpm/skills/bundled/code-review.md +143 -0
  217. claude_mpm/skills/bundled/collaboration/brainstorming/SKILL.md +79 -0
  218. claude_mpm/skills/bundled/collaboration/dispatching-parallel-agents/SKILL.md +178 -0
  219. claude_mpm/skills/bundled/collaboration/dispatching-parallel-agents/references/agent-prompts.md +577 -0
  220. claude_mpm/skills/bundled/collaboration/dispatching-parallel-agents/references/coordination-patterns.md +467 -0
  221. claude_mpm/skills/bundled/collaboration/dispatching-parallel-agents/references/examples.md +537 -0
  222. claude_mpm/skills/bundled/collaboration/dispatching-parallel-agents/references/troubleshooting.md +730 -0
  223. claude_mpm/skills/bundled/collaboration/requesting-code-review/SKILL.md +112 -0
  224. claude_mpm/skills/bundled/collaboration/requesting-code-review/references/code-reviewer-template.md +146 -0
  225. claude_mpm/skills/bundled/collaboration/requesting-code-review/references/review-examples.md +412 -0
  226. claude_mpm/skills/bundled/collaboration/writing-plans/SKILL.md +81 -0
  227. claude_mpm/skills/bundled/collaboration/writing-plans/references/best-practices.md +362 -0
  228. claude_mpm/skills/bundled/collaboration/writing-plans/references/plan-structure-templates.md +312 -0
  229. claude_mpm/skills/bundled/database-migration.md +199 -0
  230. claude_mpm/skills/bundled/debugging/root-cause-tracing/SKILL.md +152 -0
  231. claude_mpm/skills/bundled/debugging/root-cause-tracing/references/advanced-techniques.md +668 -0
  232. claude_mpm/skills/bundled/debugging/root-cause-tracing/references/examples.md +587 -0
  233. claude_mpm/skills/bundled/debugging/root-cause-tracing/references/integration.md +438 -0
  234. claude_mpm/skills/bundled/debugging/root-cause-tracing/references/tracing-techniques.md +391 -0
  235. claude_mpm/skills/bundled/debugging/systematic-debugging/CREATION-LOG.md +119 -0
  236. claude_mpm/skills/bundled/debugging/systematic-debugging/SKILL.md +148 -0
  237. claude_mpm/skills/bundled/debugging/systematic-debugging/references/anti-patterns.md +483 -0
  238. claude_mpm/skills/bundled/debugging/systematic-debugging/references/examples.md +452 -0
  239. claude_mpm/skills/bundled/debugging/systematic-debugging/references/troubleshooting.md +449 -0
  240. claude_mpm/skills/bundled/debugging/systematic-debugging/references/workflow.md +411 -0
  241. claude_mpm/skills/bundled/debugging/systematic-debugging/test-academic.md +14 -0
  242. claude_mpm/skills/bundled/debugging/systematic-debugging/test-pressure-1.md +58 -0
  243. claude_mpm/skills/bundled/debugging/systematic-debugging/test-pressure-2.md +68 -0
  244. claude_mpm/skills/bundled/debugging/systematic-debugging/test-pressure-3.md +69 -0
  245. claude_mpm/skills/bundled/debugging/verification-before-completion/SKILL.md +131 -0
  246. claude_mpm/skills/bundled/debugging/verification-before-completion/references/gate-function.md +325 -0
  247. claude_mpm/skills/bundled/debugging/verification-before-completion/references/integration-and-workflows.md +490 -0
  248. claude_mpm/skills/bundled/debugging/verification-before-completion/references/red-flags-and-failures.md +425 -0
  249. claude_mpm/skills/bundled/debugging/verification-before-completion/references/verification-patterns.md +499 -0
  250. claude_mpm/skills/bundled/docker-containerization.md +194 -0
  251. claude_mpm/skills/bundled/express-local-dev.md +1429 -0
  252. claude_mpm/skills/bundled/fastapi-local-dev.md +1199 -0
  253. claude_mpm/skills/bundled/git-workflow.md +414 -0
  254. claude_mpm/skills/bundled/imagemagick.md +204 -0
  255. claude_mpm/skills/bundled/json-data-handling.md +223 -0
  256. claude_mpm/skills/bundled/main/artifacts-builder/SKILL.md +86 -0
  257. claude_mpm/skills/bundled/main/internal-comms/SKILL.md +43 -0
  258. claude_mpm/skills/bundled/main/internal-comms/examples/3p-updates.md +47 -0
  259. claude_mpm/skills/bundled/main/internal-comms/examples/company-newsletter.md +65 -0
  260. claude_mpm/skills/bundled/main/internal-comms/examples/faq-answers.md +30 -0
  261. claude_mpm/skills/bundled/main/internal-comms/examples/general-comms.md +16 -0
  262. claude_mpm/skills/bundled/main/mcp-builder/SKILL.md +160 -0
  263. claude_mpm/skills/bundled/main/mcp-builder/reference/design_principles.md +412 -0
  264. claude_mpm/skills/bundled/main/mcp-builder/reference/evaluation.md +602 -0
  265. claude_mpm/skills/bundled/main/mcp-builder/reference/mcp_best_practices.md +915 -0
  266. claude_mpm/skills/bundled/main/mcp-builder/reference/node_mcp_server.md +916 -0
  267. claude_mpm/skills/bundled/main/mcp-builder/reference/python_mcp_server.md +752 -0
  268. claude_mpm/skills/bundled/main/mcp-builder/reference/workflow.md +1237 -0
  269. claude_mpm/skills/bundled/main/mcp-builder/scripts/connections.py +157 -0
  270. claude_mpm/skills/bundled/main/mcp-builder/scripts/evaluation.py +425 -0
  271. claude_mpm/skills/bundled/main/skill-creator/SKILL.md +189 -0
  272. claude_mpm/skills/bundled/main/skill-creator/references/best-practices.md +500 -0
  273. claude_mpm/skills/bundled/main/skill-creator/references/creation-workflow.md +464 -0
  274. claude_mpm/skills/bundled/main/skill-creator/references/examples.md +619 -0
  275. claude_mpm/skills/bundled/main/skill-creator/references/progressive-disclosure.md +437 -0
  276. claude_mpm/skills/bundled/main/skill-creator/references/skill-structure.md +231 -0
  277. claude_mpm/skills/bundled/main/skill-creator/scripts/init_skill.py +303 -0
  278. claude_mpm/skills/bundled/main/skill-creator/scripts/package_skill.py +113 -0
  279. claude_mpm/skills/bundled/main/skill-creator/scripts/quick_validate.py +72 -0
  280. claude_mpm/skills/bundled/nextjs-local-dev.md +807 -0
  281. claude_mpm/skills/bundled/pdf.md +141 -0
  282. claude_mpm/skills/bundled/performance-profiling.md +567 -0
  283. claude_mpm/skills/bundled/php/espocrm-development/SKILL.md +170 -0
  284. claude_mpm/skills/bundled/php/espocrm-development/references/architecture.md +602 -0
  285. claude_mpm/skills/bundled/php/espocrm-development/references/common-tasks.md +821 -0
  286. claude_mpm/skills/bundled/php/espocrm-development/references/development-workflow.md +742 -0
  287. claude_mpm/skills/bundled/php/espocrm-development/references/frontend-customization.md +726 -0
  288. claude_mpm/skills/bundled/php/espocrm-development/references/hooks-and-services.md +764 -0
  289. claude_mpm/skills/bundled/php/espocrm-development/references/testing-debugging.md +831 -0
  290. claude_mpm/skills/bundled/refactoring-patterns.md +180 -0
  291. claude_mpm/skills/bundled/rust/desktop-applications/SKILL.md +226 -0
  292. claude_mpm/skills/bundled/rust/desktop-applications/references/architecture-patterns.md +901 -0
  293. claude_mpm/skills/bundled/rust/desktop-applications/references/native-gui-frameworks.md +901 -0
  294. claude_mpm/skills/bundled/rust/desktop-applications/references/platform-integration.md +775 -0
  295. claude_mpm/skills/bundled/rust/desktop-applications/references/state-management.md +937 -0
  296. claude_mpm/skills/bundled/rust/desktop-applications/references/tauri-framework.md +770 -0
  297. claude_mpm/skills/bundled/rust/desktop-applications/references/testing-deployment.md +961 -0
  298. claude_mpm/skills/bundled/security-scanning.md +327 -0
  299. claude_mpm/skills/bundled/systematic-debugging.md +473 -0
  300. claude_mpm/skills/bundled/test-driven-development.md +378 -0
  301. claude_mpm/skills/bundled/testing/condition-based-waiting/SKILL.md +119 -0
  302. claude_mpm/skills/bundled/testing/condition-based-waiting/references/patterns-and-implementation.md +253 -0
  303. claude_mpm/skills/bundled/testing/test-driven-development/SKILL.md +145 -0
  304. claude_mpm/skills/bundled/testing/test-driven-development/references/anti-patterns.md +543 -0
  305. claude_mpm/skills/bundled/testing/test-driven-development/references/examples.md +741 -0
  306. claude_mpm/skills/bundled/testing/test-driven-development/references/integration.md +470 -0
  307. claude_mpm/skills/bundled/testing/test-driven-development/references/philosophy.md +458 -0
  308. claude_mpm/skills/bundled/testing/test-driven-development/references/workflow.md +639 -0
  309. claude_mpm/skills/bundled/testing/testing-anti-patterns/SKILL.md +140 -0
  310. claude_mpm/skills/bundled/testing/testing-anti-patterns/references/completeness-anti-patterns.md +572 -0
  311. claude_mpm/skills/bundled/testing/testing-anti-patterns/references/core-anti-patterns.md +411 -0
  312. claude_mpm/skills/bundled/testing/testing-anti-patterns/references/detection-guide.md +569 -0
  313. claude_mpm/skills/bundled/testing/testing-anti-patterns/references/tdd-connection.md +695 -0
  314. claude_mpm/skills/bundled/testing/webapp-testing/SKILL.md +184 -0
  315. claude_mpm/skills/bundled/testing/webapp-testing/decision-tree.md +459 -0
  316. claude_mpm/skills/bundled/testing/webapp-testing/examples/console_logging.py +35 -0
  317. claude_mpm/skills/bundled/testing/webapp-testing/examples/element_discovery.py +44 -0
  318. claude_mpm/skills/bundled/testing/webapp-testing/examples/static_html_automation.py +34 -0
  319. claude_mpm/skills/bundled/testing/webapp-testing/playwright-patterns.md +479 -0
  320. claude_mpm/skills/bundled/testing/webapp-testing/reconnaissance-pattern.md +687 -0
  321. claude_mpm/skills/bundled/testing/webapp-testing/scripts/with_server.py +129 -0
  322. claude_mpm/skills/bundled/testing/webapp-testing/server-management.md +758 -0
  323. claude_mpm/skills/bundled/testing/webapp-testing/troubleshooting.md +868 -0
  324. claude_mpm/skills/bundled/vite-local-dev.md +1061 -0
  325. claude_mpm/skills/bundled/web-performance-optimization.md +2305 -0
  326. claude_mpm/skills/bundled/xlsx.md +157 -0
  327. claude_mpm/skills/registry.py +286 -0
  328. claude_mpm/skills/skill_manager.py +310 -0
  329. claude_mpm/skills/skills_registry.py +348 -0
  330. claude_mpm/skills/skills_service.py +739 -0
  331. claude_mpm/tools/code_tree_analyzer.py +177 -141
  332. claude_mpm/tools/code_tree_events.py +4 -2
  333. claude_mpm/utils/agent_dependency_loader.py +2 -2
  334. {claude_mpm-4.14.6.dist-info → claude_mpm-4.21.0.dist-info}/METADATA +211 -33
  335. {claude_mpm-4.14.6.dist-info → claude_mpm-4.21.0.dist-info}/RECORD +339 -199
  336. claude_mpm/agents/INSTRUCTIONS_OLD_DEPRECATED.md +0 -602
  337. claude_mpm/cli/commands/mpm_init.py +0 -1994
  338. claude_mpm/dashboard/static/css/code-tree.css +0 -1639
  339. claude_mpm/dashboard/static/js/components/code-tree/tree-breadcrumb.js +0 -353
  340. claude_mpm/dashboard/static/js/components/code-tree/tree-constants.js +0 -235
  341. claude_mpm/dashboard/static/js/components/code-tree/tree-search.js +0 -409
  342. claude_mpm/dashboard/static/js/components/code-tree/tree-utils.js +0 -435
  343. claude_mpm/dashboard/static/js/components/code-tree.js +0 -5869
  344. claude_mpm/dashboard/static/js/components/code-viewer.js +0 -1386
  345. claude_mpm/hooks/claude_hooks/hook_handler_eventbus.py +0 -425
  346. claude_mpm/hooks/claude_hooks/hook_handler_original.py +0 -1041
  347. claude_mpm/hooks/claude_hooks/hook_handler_refactored.py +0 -347
  348. claude_mpm/services/agents/deployment/agent_lifecycle_manager_refactored.py +0 -575
  349. claude_mpm/services/project/analyzer_refactored.py +0 -450
  350. {claude_mpm-4.14.6.dist-info → claude_mpm-4.21.0.dist-info}/WHEEL +0 -0
  351. {claude_mpm-4.14.6.dist-info → claude_mpm-4.21.0.dist-info}/entry_points.txt +0 -0
  352. {claude_mpm-4.14.6.dist-info → claude_mpm-4.21.0.dist-info}/licenses/LICENSE +0 -0
  353. {claude_mpm-4.14.6.dist-info → claude_mpm-4.21.0.dist-info}/top_level.txt +0 -0
@@ -0,0 +1,602 @@
1
+ # EspoCRM Architecture Reference
2
+
3
+ ## Metadata-Driven Architecture
4
+
5
+ EspoCRM's core architecture is built on metadata - JSON configuration files that define entities, fields, relationships, and behaviors.
6
+
7
+ ### Metadata Structure
8
+
9
+ Metadata lives in several locations with a priority order:
10
+
11
+ ```
12
+ 1. custom/Espo/Custom/Resources/metadata/ (highest priority)
13
+ 2. custom/Espo/Modules/{ModuleName}/Resources/metadata/
14
+ 3. application/Espo/Modules/{ModuleName}/Resources/metadata/
15
+ 4. application/Espo/Resources/metadata/ (lowest priority)
16
+ ```
17
+
18
+ ### Key Metadata Types
19
+
20
+ **Entity Definitions** (`entityDefs/{EntityType}.json`):
21
+ ```json
22
+ {
23
+ "fields": {
24
+ "name": {
25
+ "type": "varchar",
26
+ "required": true,
27
+ "maxLength": 255
28
+ },
29
+ "status": {
30
+ "type": "enum",
31
+ "options": ["New", "In Progress", "Complete"],
32
+ "default": "New"
33
+ }
34
+ },
35
+ "links": {
36
+ "account": {
37
+ "type": "belongsTo",
38
+ "entity": "Account",
39
+ "foreign": "contacts"
40
+ }
41
+ }
42
+ }
43
+ ```
44
+
45
+ **Client Definitions** (`clientDefs/{EntityType}.json`):
46
+ ```json
47
+ {
48
+ "controller": "custom:controllers/my-entity",
49
+ "views": {
50
+ "detail": "custom:views/my-entity/detail"
51
+ },
52
+ "recordViews": {
53
+ "detail": "custom:views/my-entity/record/detail"
54
+ },
55
+ "sidePanels": {
56
+ "detail": [
57
+ {
58
+ "name": "activities",
59
+ "label": "Activities",
60
+ "view": "crm:views/record/panels/activities"
61
+ }
62
+ ]
63
+ }
64
+ }
65
+ ```
66
+
67
+ **Scopes** (`scopes/{EntityType}.json`):
68
+ ```json
69
+ {
70
+ "entity": true,
71
+ "object": true,
72
+ "layouts": true,
73
+ "tab": true,
74
+ "acl": true,
75
+ "module": "MyModule",
76
+ "stream": true
77
+ }
78
+ ```
79
+
80
+ ### Metadata Access in Code
81
+
82
+ ```php
83
+ use Espo\Core\Utils\Metadata;
84
+
85
+ class MyService {
86
+ public function __construct(private Metadata $metadata) {}
87
+
88
+ public function getEntityFields(string $entityType): array {
89
+ return $this->metadata->get(['entityDefs', $entityType, 'fields']) ?? [];
90
+ }
91
+
92
+ public function isFieldRequired(string $entityType, string $field): bool {
93
+ return $this->metadata
94
+ ->get(['entityDefs', $entityType, 'fields', $field, 'required']) ?? false;
95
+ }
96
+ }
97
+ ```
98
+
99
+ ## ORM EntityManager
100
+
101
+ EntityManager is the central access point for ALL database operations in EspoCRM.
102
+
103
+ ### Core EntityManager Methods
104
+
105
+ ```php
106
+ use Espo\ORM\EntityManager;
107
+
108
+ class DataService {
109
+ public function __construct(private EntityManager $entityManager) {}
110
+
111
+ // Get entity by ID
112
+ public function getById(string $entityType, string $id): ?Entity {
113
+ return $this->entityManager->getEntityById($entityType, $id);
114
+ }
115
+
116
+ // Create new entity
117
+ public function create(string $entityType): Entity {
118
+ return $this->entityManager->getNewEntity($entityType);
119
+ }
120
+
121
+ // Save entity
122
+ public function save(Entity $entity): void {
123
+ $this->entityManager->saveEntity($entity);
124
+ }
125
+
126
+ // Delete entity
127
+ public function delete(Entity $entity): void {
128
+ $this->entityManager->removeEntity($entity);
129
+ }
130
+
131
+ // Get repository
132
+ public function getRepository(string $entityType): RDBRepository {
133
+ return $this->entityManager->getRDBRepository($entityType);
134
+ }
135
+ }
136
+ ```
137
+
138
+ ### Repository Pattern
139
+
140
+ Never access repositories directly - always through EntityManager:
141
+
142
+ ```php
143
+ // Query with conditions
144
+ $contacts = $this->entityManager
145
+ ->getRDBRepository('Contact')
146
+ ->where([
147
+ 'accountId' => $accountId,
148
+ 'deleted' => false
149
+ ])
150
+ ->find();
151
+
152
+ // Complex queries
153
+ $query = $this->entityManager
154
+ ->getQueryBuilder()
155
+ ->select()
156
+ ->from('Opportunity')
157
+ ->where([
158
+ 'stage' => ['Proposal', 'Negotiation'],
159
+ 'amount>=' => 10000
160
+ ])
161
+ ->order('createdAt', 'DESC')
162
+ ->build();
163
+
164
+ $collection = $this->entityManager
165
+ ->getRDBRepository('Opportunity')
166
+ ->clone($query)
167
+ ->find();
168
+ ```
169
+
170
+ ### Transaction Handling
171
+
172
+ ```php
173
+ use Espo\ORM\TransactionManager;
174
+
175
+ class TransactionalService {
176
+ public function __construct(
177
+ private EntityManager $entityManager,
178
+ private TransactionManager $transactionManager
179
+ ) {}
180
+
181
+ public function performComplexOperation(): void {
182
+ $this->transactionManager->run(function () {
183
+ // All operations within this closure are transactional
184
+ $entity1 = $this->entityManager->getNewEntity('Account');
185
+ $entity1->set('name', 'Test');
186
+ $this->entityManager->saveEntity($entity1);
187
+
188
+ $entity2 = $this->entityManager->getNewEntity('Contact');
189
+ $entity2->set('accountId', $entity1->getId());
190
+ $this->entityManager->saveEntity($entity2);
191
+
192
+ // If any exception is thrown, all changes are rolled back
193
+ });
194
+ }
195
+ }
196
+ ```
197
+
198
+ ### STH Collections for Large Datasets
199
+
200
+ For operations on large datasets, use STH (Statement Handle) collections to avoid memory issues:
201
+
202
+ ```php
203
+ $sthCollection = $this->entityManager
204
+ ->getRDBRepository('Contact')
205
+ ->sth() // Returns STH collection instead of loading all into memory
206
+ ->where(['accountId' => $accountId])
207
+ ->find();
208
+
209
+ foreach ($sthCollection as $contact) {
210
+ // Process one at a time
211
+ $contact->set('status', 'Active');
212
+ $this->entityManager->saveEntity($contact);
213
+ }
214
+ ```
215
+
216
+ ## Dependency Injection Container
217
+
218
+ EspoCRM uses a DI container for dependency management.
219
+
220
+ ### Constructor Injection (CORRECT)
221
+
222
+ ```php
223
+ namespace Espo\Modules\MyModule\Services;
224
+
225
+ use Espo\ORM\EntityManager;
226
+ use Espo\Core\Utils\Metadata;
227
+ use Espo\Core\Mail\EmailSender;
228
+
229
+ class MyService {
230
+ public function __construct(
231
+ private EntityManager $entityManager,
232
+ private Metadata $metadata,
233
+ private EmailSender $emailSender
234
+ ) {}
235
+ }
236
+ ```
237
+
238
+ ### NEVER Pass Container
239
+
240
+ ```php
241
+ // ❌ WRONG - Never do this
242
+ use Espo\Core\Container;
243
+
244
+ class BadService {
245
+ public function __construct(private Container $container) {}
246
+ }
247
+
248
+ // ✅ CORRECT - Inject specific dependencies
249
+ class GoodService {
250
+ public function __construct(
251
+ private EntityManager $entityManager,
252
+ private Metadata $metadata
253
+ ) {}
254
+ }
255
+ ```
256
+
257
+ ### Injectable Services
258
+
259
+ Common services available for injection:
260
+
261
+ - `EntityManager` - ORM access
262
+ - `Metadata` - Metadata access
263
+ - `Config` - Application configuration
264
+ - `FileStorageManager` - File operations
265
+ - `InjectableFactory` - Create objects with DI
266
+ - `ServiceFactory` - Access record services
267
+ - `EmailSender` - Send emails
268
+ - `Acl` - Access control
269
+ - `User` - Current user
270
+ - `DateTime` - Date/time utilities
271
+ - `Language` - Translations
272
+ - `TransactionManager` - Database transactions
273
+
274
+ ## Service Layer Architecture
275
+
276
+ Business logic belongs in Service classes, not hooks or controllers.
277
+
278
+ ### Service Hierarchy
279
+
280
+ ```
281
+ Record Service (base for all entity services)
282
+
283
+ Custom Service (your entity-specific logic)
284
+ ```
285
+
286
+ ### Extending Record Service
287
+
288
+ ```php
289
+ namespace Espo\Modules\MyModule\Services;
290
+
291
+ use Espo\Services\Record;
292
+ use Espo\ORM\Entity;
293
+
294
+ class Opportunity extends Record {
295
+ // Override to add custom logic before create
296
+ protected function beforeCreateEntity(Entity $entity, array $data): void {
297
+ parent::beforeCreateEntity($entity, $data);
298
+
299
+ // Custom logic
300
+ if ($entity->get('amount') > 100000) {
301
+ $entity->set('priority', 'High');
302
+ }
303
+ }
304
+
305
+ // Custom action
306
+ public function markAsWon(string $id): Entity {
307
+ $entity = $this->getEntity($id);
308
+
309
+ if (!$entity) {
310
+ throw new NotFound();
311
+ }
312
+
313
+ $entity->set('stage', 'Closed Won');
314
+ $this->entityManager->saveEntity($entity);
315
+
316
+ // Trigger additional business logic
317
+ $this->createWinNotification($entity);
318
+
319
+ return $entity;
320
+ }
321
+
322
+ private function createWinNotification(Entity $opportunity): void {
323
+ // Implementation
324
+ }
325
+ }
326
+ ```
327
+
328
+ ### Service Access
329
+
330
+ ```php
331
+ use Espo\Core\ServiceFactory;
332
+
333
+ class MyClass {
334
+ public function __construct(private ServiceFactory $serviceFactory) {}
335
+
336
+ public function useService(): void {
337
+ $opportunityService = $this->serviceFactory->create('Opportunity');
338
+ $opportunityService->markAsWon($id);
339
+ }
340
+ }
341
+ ```
342
+
343
+ ## Hook System Architecture
344
+
345
+ Hooks are for lifecycle events - validation and side effects ONLY. Business logic belongs in Services.
346
+
347
+ ### The 7 Hook Interfaces
348
+
349
+ ```php
350
+ namespace Espo\Core\Hook\Hook;
351
+
352
+ interface BeforeSave {
353
+ public function beforeSave(Entity $entity, array $options): void;
354
+ }
355
+
356
+ interface AfterSave {
357
+ public function afterSave(Entity $entity, array $options): void;
358
+ }
359
+
360
+ interface BeforeRemove {
361
+ public function beforeRemove(Entity $entity, array $options): void;
362
+ }
363
+
364
+ interface AfterRemove {
365
+ public function afterRemove(Entity $entity, array $options): void;
366
+ }
367
+
368
+ interface AfterRelate {
369
+ public function afterRelate(Entity $entity, string $relationName, Entity $foreign, ?array $columnData, array $options): void;
370
+ }
371
+
372
+ interface AfterUnrelate {
373
+ public function afterUnrelate(Entity $entity, string $relationName, Entity $foreign, array $options): void;
374
+ }
375
+
376
+ interface AfterMassRelate {
377
+ public function afterMassRelate(Entity $entity, string $relationName, array $params, array $options): void;
378
+ }
379
+ ```
380
+
381
+ ### Hook Implementation Example
382
+
383
+ ```php
384
+ namespace Espo\Modules\MyModule\Hooks\Account;
385
+
386
+ use Espo\ORM\Entity;
387
+ use Espo\Core\Hook\Hook\BeforeSave;
388
+ use Espo\Core\ServiceFactory;
389
+
390
+ class ValidateWebsite implements BeforeSave {
391
+ public function __construct(private ServiceFactory $serviceFactory) {}
392
+
393
+ public function beforeSave(Entity $entity, array $options): void {
394
+ // Validation only
395
+ if ($entity->isAttributeChanged('website')) {
396
+ $website = $entity->get('website');
397
+ if ($website && !filter_var($website, FILTER_VALIDATE_URL)) {
398
+ throw new \Espo\Core\Exceptions\BadRequest('Invalid website URL');
399
+ }
400
+ }
401
+ }
402
+ }
403
+ ```
404
+
405
+ ### Hook Registration
406
+
407
+ Hooks are auto-discovered in:
408
+ ```
409
+ custom/Espo/Modules/{ModuleName}/Hooks/{EntityType}/{HookName}.php
410
+ ```
411
+
412
+ ## Coding Standards
413
+
414
+ ### Type Declarations (Required)
415
+
416
+ ```php
417
+ // ✅ CORRECT - All types declared
418
+ class MyService {
419
+ public function processData(string $id, array $data): object {
420
+ return $this->entityManager->getEntityById('Account', $id);
421
+ }
422
+ }
423
+
424
+ // ❌ WRONG - Missing types
425
+ class BadService {
426
+ public function processData($id, $data) {
427
+ return $this->entityManager->getEntityById('Account', $id);
428
+ }
429
+ }
430
+ ```
431
+
432
+ ### Exception Handling (Not Booleans)
433
+
434
+ ```php
435
+ // ✅ CORRECT - Use exceptions
436
+ use Espo\Core\Exceptions\{NotFound, Forbidden, BadRequest};
437
+
438
+ public function getAccount(string $id): Entity {
439
+ $account = $this->entityManager->getEntityById('Account', $id);
440
+
441
+ if (!$account) {
442
+ throw new NotFound();
443
+ }
444
+
445
+ if (!$this->acl->check($account, 'read')) {
446
+ throw new Forbidden();
447
+ }
448
+
449
+ return $account;
450
+ }
451
+
452
+ // ❌ WRONG - Returning booleans for errors
453
+ public function getAccount(string $id): ?Entity {
454
+ $account = $this->entityManager->getEntityById('Account', $id);
455
+ if (!$account) {
456
+ return null; // Lost error context
457
+ }
458
+ return $account;
459
+ }
460
+ ```
461
+
462
+ ### Composition Over Inheritance
463
+
464
+ ```php
465
+ // ✅ CORRECT - Composition with traits/utilities
466
+ class MyService extends Record {
467
+ use ValidationTrait;
468
+
469
+ public function __construct(
470
+ private ValidationHelper $validationHelper,
471
+ private NotificationHelper $notificationHelper
472
+ ) {
473
+ parent::__construct();
474
+ }
475
+ }
476
+
477
+ // ❌ WRONG - Deep inheritance hierarchy
478
+ class MyService extends IntermediateService extends BaseService extends Record {
479
+ // Too many levels
480
+ }
481
+ ```
482
+
483
+ ### DTOs Over Arrays
484
+
485
+ ```php
486
+ // ✅ CORRECT - Use DTOs
487
+ class CreateAccountData {
488
+ public function __construct(
489
+ public readonly string $name,
490
+ public readonly ?string $website,
491
+ public readonly array $tags
492
+ ) {}
493
+ }
494
+
495
+ public function createAccount(CreateAccountData $data): Entity {
496
+ // Type-safe operations
497
+ }
498
+
499
+ // ❌ WRONG - Untyped arrays
500
+ public function createAccount(array $data): Entity {
501
+ $name = $data['name'] ?? ''; // Fragile, no IDE support
502
+ }
503
+ ```
504
+
505
+ ### Maximum 2 Indentation Levels
506
+
507
+ ```php
508
+ // ✅ CORRECT - Early returns, extracted methods
509
+ public function process(Entity $entity): void {
510
+ if (!$this->validate($entity)) {
511
+ return;
512
+ }
513
+
514
+ $this->performUpdate($entity);
515
+ }
516
+
517
+ private function performUpdate(Entity $entity): void {
518
+ if ($entity->isNew()) {
519
+ $this->handleNew($entity);
520
+ return;
521
+ }
522
+
523
+ $this->handleExisting($entity);
524
+ }
525
+
526
+ // ❌ WRONG - Deep nesting
527
+ public function process(Entity $entity): void {
528
+ if ($this->validate($entity)) {
529
+ if ($entity->isNew()) {
530
+ if ($this->hasPermission()) {
531
+ // Three levels deep - hard to read
532
+ }
533
+ }
534
+ }
535
+ }
536
+ ```
537
+
538
+ ## Formula Scripting
539
+
540
+ EspoCRM supports declarative logic through Formula scripts - use for simple field calculations instead of hooks.
541
+
542
+ ### Formula in Metadata
543
+
544
+ ```json
545
+ {
546
+ "fields": {
547
+ "totalPrice": {
548
+ "type": "currency",
549
+ "formula": "quantity * unitPrice"
550
+ },
551
+ "displayName": {
552
+ "type": "varchar",
553
+ "formula": "string\\concatenate(firstName, ' ', lastName)"
554
+ }
555
+ }
556
+ }
557
+ ```
558
+
559
+ ### When to Use Formula vs. Hooks
560
+
561
+ **Use Formula for:**
562
+ - Simple field calculations
563
+ - String concatenation
564
+ - Conditional field values
565
+ - Date calculations
566
+
567
+ **Use Hooks/Services for:**
568
+ - Complex business logic
569
+ - External API calls
570
+ - Multi-entity operations
571
+ - Validation requiring database queries
572
+
573
+ ## Cache Management
574
+
575
+ ### Rebuild Cache After Metadata Changes
576
+
577
+ ```bash
578
+ # Always run after changing metadata
579
+ bin/command rebuild
580
+ ```
581
+
582
+ ### Clear Cache Programmatically
583
+
584
+ ```php
585
+ use Espo\Core\Utils\DataCache;
586
+
587
+ class MyService {
588
+ public function __construct(private DataCache $dataCache) {}
589
+
590
+ public function clearCache(): void {
591
+ $this->dataCache->clear();
592
+ }
593
+ }
594
+ ```
595
+
596
+ ### Cache Keys
597
+
598
+ Common cache keys to be aware of:
599
+ - `metadata` - All metadata
600
+ - `entityDefs` - Entity definitions
601
+ - `clientDefs` - Client definitions
602
+ - `aclDefs` - ACL definitions