claude-mpm 4.24.0__py3-none-any.whl → 5.4.41__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 (623) hide show
  1. claude_mpm/VERSION +1 -1
  2. claude_mpm/__init__.py +4 -0
  3. claude_mpm/agents/BASE_AGENT.md +164 -0
  4. claude_mpm/agents/{OUTPUT_STYLE.md → CLAUDE_MPM_OUTPUT_STYLE.md} +3 -48
  5. claude_mpm/agents/CLAUDE_MPM_TEACHER_OUTPUT_STYLE.md +2002 -0
  6. claude_mpm/agents/MEMORY.md +1 -1
  7. claude_mpm/agents/PM_INSTRUCTIONS.md +735 -925
  8. claude_mpm/agents/WORKFLOW.md +5 -254
  9. claude_mpm/agents/__init__.py +6 -0
  10. claude_mpm/agents/agent_loader.py +14 -48
  11. claude_mpm/agents/base_agent.json +7 -4
  12. claude_mpm/agents/frontmatter_validator.py +71 -3
  13. claude_mpm/agents/templates/circuit-breakers.md +1391 -0
  14. claude_mpm/agents/templates/context-management-examples.md +544 -0
  15. claude_mpm/agents/templates/{pm_red_flags.md → pm-red-flags.md} +48 -0
  16. claude_mpm/agents/templates/pr-workflow-examples.md +427 -0
  17. claude_mpm/agents/templates/research-gate-examples.md +669 -0
  18. claude_mpm/agents/templates/structured-questions-examples.md +615 -0
  19. claude_mpm/agents/templates/ticket-completeness-examples.md +139 -0
  20. claude_mpm/agents/templates/ticketing-examples.md +277 -0
  21. claude_mpm/cli/__init__.py +37 -2
  22. claude_mpm/cli/__main__.py +4 -0
  23. claude_mpm/cli/chrome_devtools_installer.py +175 -0
  24. claude_mpm/cli/commands/__init__.py +2 -0
  25. claude_mpm/cli/commands/agent_source.py +774 -0
  26. claude_mpm/cli/commands/agent_state_manager.py +180 -31
  27. claude_mpm/cli/commands/agents.py +1116 -55
  28. claude_mpm/cli/commands/agents_cleanup.py +210 -0
  29. claude_mpm/cli/commands/agents_discover.py +338 -0
  30. claude_mpm/cli/commands/aggregate.py +1 -1
  31. claude_mpm/cli/commands/analyze.py +3 -3
  32. claude_mpm/cli/commands/auto_configure.py +725 -242
  33. claude_mpm/cli/commands/config.py +95 -6
  34. claude_mpm/cli/commands/configure.py +1875 -46
  35. claude_mpm/cli/commands/configure_agent_display.py +29 -10
  36. claude_mpm/cli/commands/configure_navigation.py +63 -46
  37. claude_mpm/cli/commands/debug.py +12 -12
  38. claude_mpm/cli/commands/doctor.py +10 -2
  39. claude_mpm/cli/commands/hook_errors.py +277 -0
  40. claude_mpm/cli/commands/local_deploy.py +1 -4
  41. claude_mpm/cli/commands/mcp_install_commands.py +1 -1
  42. claude_mpm/cli/commands/mpm_init/core.py +229 -2
  43. claude_mpm/cli/commands/mpm_init/git_activity.py +10 -10
  44. claude_mpm/cli/commands/mpm_init/knowledge_extractor.py +481 -0
  45. claude_mpm/cli/commands/mpm_init/prompts.py +286 -6
  46. claude_mpm/cli/commands/postmortem.py +401 -0
  47. claude_mpm/cli/commands/profile.py +277 -0
  48. claude_mpm/cli/commands/run.py +123 -165
  49. claude_mpm/cli/commands/skill_source.py +694 -0
  50. claude_mpm/cli/commands/skills.py +782 -20
  51. claude_mpm/cli/commands/summarize.py +413 -0
  52. claude_mpm/cli/executor.py +96 -3
  53. claude_mpm/cli/interactive/agent_wizard.py +1030 -45
  54. claude_mpm/cli/parsers/agent_source_parser.py +171 -0
  55. claude_mpm/cli/parsers/agents_parser.py +307 -10
  56. claude_mpm/cli/parsers/auto_configure_parser.py +13 -138
  57. claude_mpm/cli/parsers/base_parser.py +65 -0
  58. claude_mpm/cli/parsers/config_parser.py +162 -39
  59. claude_mpm/cli/parsers/profile_parser.py +148 -0
  60. claude_mpm/cli/parsers/skill_source_parser.py +169 -0
  61. claude_mpm/cli/parsers/skills_parser.py +146 -0
  62. claude_mpm/cli/parsers/source_parser.py +138 -0
  63. claude_mpm/cli/startup.py +1280 -118
  64. claude_mpm/cli/startup_display.py +480 -0
  65. claude_mpm/cli/utils.py +1 -1
  66. claude_mpm/cli_module/commands.py +1 -1
  67. claude_mpm/commands/mpm-config.md +21 -134
  68. claude_mpm/commands/mpm-doctor.md +16 -20
  69. claude_mpm/commands/mpm-help.md +13 -283
  70. claude_mpm/commands/mpm-init.md +88 -489
  71. claude_mpm/commands/mpm-monitor.md +23 -401
  72. claude_mpm/commands/mpm-organize.md +72 -247
  73. claude_mpm/commands/mpm-postmortem.md +21 -0
  74. claude_mpm/commands/mpm-session-resume.md +30 -0
  75. claude_mpm/commands/mpm-status.md +13 -68
  76. claude_mpm/commands/mpm-ticket-view.md +109 -0
  77. claude_mpm/commands/mpm-version.md +13 -106
  78. claude_mpm/commands/mpm.md +10 -0
  79. claude_mpm/config/agent_presets.py +488 -0
  80. claude_mpm/config/agent_sources.py +352 -0
  81. claude_mpm/config/skill_presets.py +392 -0
  82. claude_mpm/config/skill_sources.py +590 -0
  83. claude_mpm/constants.py +13 -0
  84. claude_mpm/core/claude_runner.py +5 -34
  85. claude_mpm/core/config.py +15 -1
  86. claude_mpm/core/constants.py +1 -1
  87. claude_mpm/core/framework/__init__.py +3 -16
  88. claude_mpm/core/framework/formatters/content_formatter.py +3 -13
  89. claude_mpm/core/framework/loaders/agent_loader.py +8 -5
  90. claude_mpm/core/framework/loaders/file_loader.py +54 -101
  91. claude_mpm/core/framework/loaders/instruction_loader.py +66 -5
  92. claude_mpm/core/framework_loader.py +4 -2
  93. claude_mpm/core/hook_error_memory.py +381 -0
  94. claude_mpm/core/hook_manager.py +41 -2
  95. claude_mpm/core/interactive_session.py +91 -10
  96. claude_mpm/core/logger.py +16 -1
  97. claude_mpm/core/oneshot_session.py +71 -8
  98. claude_mpm/core/optimized_startup.py +59 -0
  99. claude_mpm/core/output_style_manager.py +173 -43
  100. claude_mpm/core/protocols/__init__.py +23 -0
  101. claude_mpm/core/protocols/runner_protocol.py +103 -0
  102. claude_mpm/core/protocols/session_protocol.py +131 -0
  103. claude_mpm/core/shared/config_loader.py +1 -1
  104. claude_mpm/core/shared/singleton_manager.py +11 -4
  105. claude_mpm/core/socketio_pool.py +3 -3
  106. claude_mpm/core/system_context.py +38 -0
  107. claude_mpm/core/unified_agent_registry.py +134 -16
  108. claude_mpm/core/unified_config.py +22 -0
  109. claude_mpm/dashboard/static/svelte-build/_app/env.js +1 -0
  110. claude_mpm/dashboard/static/svelte-build/_app/immutable/assets/0.B_FtCwCQ.css +1 -0
  111. claude_mpm/dashboard/static/svelte-build/_app/immutable/assets/2.Cl_eSA4x.css +1 -0
  112. claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/BgChzWQ1.js +1 -0
  113. claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/CIXEwuWe.js +1 -0
  114. claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/CWc5urbQ.js +1 -0
  115. claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/DMkZpdF2.js +2 -0
  116. claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/DjhvlsAc.js +1 -0
  117. claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/N4qtv3Hx.js +2 -0
  118. claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/uj46x2Wr.js +1 -0
  119. claude_mpm/dashboard/static/svelte-build/_app/immutable/entry/app.DTL5mJO-.js +2 -0
  120. claude_mpm/dashboard/static/svelte-build/_app/immutable/entry/start.DzuEhzqh.js +1 -0
  121. claude_mpm/dashboard/static/svelte-build/_app/immutable/nodes/0.CAGBuiOw.js +1 -0
  122. claude_mpm/dashboard/static/svelte-build/_app/immutable/nodes/1.DFLC8jdE.js +1 -0
  123. claude_mpm/dashboard/static/svelte-build/_app/immutable/nodes/2.DPvEihJJ.js +10 -0
  124. claude_mpm/dashboard/static/svelte-build/_app/version.json +1 -0
  125. claude_mpm/dashboard/static/svelte-build/favicon.svg +7 -0
  126. claude_mpm/dashboard/static/svelte-build/index.html +36 -0
  127. claude_mpm/experimental/cli_enhancements.py +1 -5
  128. claude_mpm/hooks/claude_hooks/__pycache__/__init__.cpython-311.pyc +0 -0
  129. claude_mpm/hooks/claude_hooks/__pycache__/correlation_manager.cpython-311.pyc +0 -0
  130. claude_mpm/hooks/claude_hooks/__pycache__/event_handlers.cpython-311.pyc +0 -0
  131. claude_mpm/hooks/claude_hooks/__pycache__/hook_handler.cpython-311.pyc +0 -0
  132. claude_mpm/hooks/claude_hooks/__pycache__/installer.cpython-311.pyc +0 -0
  133. claude_mpm/hooks/claude_hooks/__pycache__/memory_integration.cpython-311.pyc +0 -0
  134. claude_mpm/hooks/claude_hooks/__pycache__/response_tracking.cpython-311.pyc +0 -0
  135. claude_mpm/hooks/claude_hooks/__pycache__/tool_analysis.cpython-311.pyc +0 -0
  136. claude_mpm/hooks/claude_hooks/correlation_manager.py +60 -0
  137. claude_mpm/hooks/claude_hooks/event_handlers.py +214 -79
  138. claude_mpm/hooks/claude_hooks/hook_handler.py +155 -1
  139. claude_mpm/hooks/claude_hooks/installer.py +33 -10
  140. claude_mpm/hooks/claude_hooks/memory_integration.py +28 -0
  141. claude_mpm/hooks/claude_hooks/response_tracking.py +2 -3
  142. claude_mpm/hooks/claude_hooks/services/__pycache__/__init__.cpython-311.pyc +0 -0
  143. claude_mpm/hooks/claude_hooks/services/__pycache__/connection_manager.cpython-311.pyc +0 -0
  144. claude_mpm/hooks/claude_hooks/services/__pycache__/connection_manager_http.cpython-311.pyc +0 -0
  145. claude_mpm/hooks/claude_hooks/services/__pycache__/duplicate_detector.cpython-311.pyc +0 -0
  146. claude_mpm/hooks/claude_hooks/services/__pycache__/state_manager.cpython-311.pyc +0 -0
  147. claude_mpm/hooks/claude_hooks/services/__pycache__/subagent_processor.cpython-311.pyc +0 -0
  148. claude_mpm/hooks/claude_hooks/services/connection_manager.py +30 -6
  149. claude_mpm/hooks/failure_learning/__init__.py +2 -8
  150. claude_mpm/hooks/failure_learning/failure_detection_hook.py +1 -6
  151. claude_mpm/hooks/failure_learning/fix_detection_hook.py +1 -6
  152. claude_mpm/hooks/failure_learning/learning_extraction_hook.py +1 -6
  153. claude_mpm/hooks/kuzu_response_hook.py +1 -5
  154. claude_mpm/hooks/memory_integration_hook.py +46 -1
  155. claude_mpm/init.py +63 -19
  156. claude_mpm/models/agent_definition.py +7 -0
  157. claude_mpm/models/git_repository.py +198 -0
  158. claude_mpm/scripts/claude-hook-handler.sh +60 -20
  159. claude_mpm/scripts/launch_monitor.py +93 -13
  160. claude_mpm/scripts/start_activity_logging.py +3 -1
  161. claude_mpm/services/agents/agent_builder.py +48 -12
  162. claude_mpm/services/agents/agent_preset_service.py +238 -0
  163. claude_mpm/services/agents/agent_recommendation_service.py +278 -0
  164. claude_mpm/services/agents/agent_review_service.py +280 -0
  165. claude_mpm/services/agents/agent_selection_service.py +484 -0
  166. claude_mpm/services/agents/auto_deploy_index_parser.py +569 -0
  167. claude_mpm/services/agents/cache_git_manager.py +621 -0
  168. claude_mpm/services/agents/deployment/agent_deployment.py +148 -2
  169. claude_mpm/services/agents/deployment/agent_discovery_service.py +104 -73
  170. claude_mpm/services/agents/deployment/agent_format_converter.py +1 -1
  171. claude_mpm/services/agents/deployment/agent_lifecycle_manager.py +1 -5
  172. claude_mpm/services/agents/deployment/agent_metrics_collector.py +3 -3
  173. claude_mpm/services/agents/deployment/agent_restore_handler.py +1 -4
  174. claude_mpm/services/agents/deployment/agent_template_builder.py +238 -15
  175. claude_mpm/services/agents/deployment/agents_directory_resolver.py +101 -15
  176. claude_mpm/services/agents/deployment/async_agent_deployment.py +2 -1
  177. claude_mpm/services/agents/deployment/facade/deployment_facade.py +3 -3
  178. claude_mpm/services/agents/deployment/multi_source_deployment_service.py +422 -31
  179. claude_mpm/services/agents/deployment/pipeline/pipeline_executor.py +2 -2
  180. claude_mpm/services/agents/deployment/refactored_agent_deployment_service.py +1 -4
  181. claude_mpm/services/agents/deployment/remote_agent_discovery_service.py +841 -0
  182. claude_mpm/services/agents/deployment/single_agent_deployer.py +2 -2
  183. claude_mpm/services/agents/deployment/system_instructions_deployer.py +168 -46
  184. claude_mpm/services/agents/deployment/validation/deployment_validator.py +2 -2
  185. claude_mpm/services/agents/git_source_manager.py +663 -0
  186. claude_mpm/services/agents/loading/base_agent_manager.py +1 -13
  187. claude_mpm/services/agents/loading/framework_agent_loader.py +9 -12
  188. claude_mpm/services/agents/local_template_manager.py +50 -10
  189. claude_mpm/services/agents/recommender.py +5 -3
  190. claude_mpm/services/agents/single_tier_deployment_service.py +696 -0
  191. claude_mpm/services/agents/sources/__init__.py +13 -0
  192. claude_mpm/services/agents/sources/agent_sync_state.py +516 -0
  193. claude_mpm/services/agents/sources/git_source_sync_service.py +1094 -0
  194. claude_mpm/services/agents/startup_sync.py +259 -0
  195. claude_mpm/services/agents/toolchain_detector.py +478 -0
  196. claude_mpm/services/analysis/__init__.py +35 -0
  197. claude_mpm/services/analysis/clone_detector.py +1030 -0
  198. claude_mpm/services/analysis/postmortem_reporter.py +474 -0
  199. claude_mpm/services/analysis/postmortem_service.py +765 -0
  200. claude_mpm/services/cli/session_pause_manager.py +1 -1
  201. claude_mpm/services/command_deployment_service.py +271 -6
  202. claude_mpm/services/core/base.py +7 -2
  203. claude_mpm/services/core/interfaces/__init__.py +1 -3
  204. claude_mpm/services/core/interfaces/health.py +1 -4
  205. claude_mpm/services/core/models/__init__.py +2 -11
  206. claude_mpm/services/diagnostics/checks/__init__.py +4 -0
  207. claude_mpm/services/diagnostics/checks/agent_check.py +2 -4
  208. claude_mpm/services/diagnostics/checks/agent_sources_check.py +577 -0
  209. claude_mpm/services/diagnostics/checks/instructions_check.py +1 -2
  210. claude_mpm/services/diagnostics/checks/mcp_check.py +0 -1
  211. claude_mpm/services/diagnostics/checks/mcp_services_check.py +7 -15
  212. claude_mpm/services/diagnostics/checks/monitor_check.py +0 -1
  213. claude_mpm/services/diagnostics/checks/skill_sources_check.py +587 -0
  214. claude_mpm/services/diagnostics/diagnostic_runner.py +9 -0
  215. claude_mpm/services/diagnostics/doctor_reporter.py +40 -10
  216. claude_mpm/services/event_bus/config.py +3 -1
  217. claude_mpm/services/event_bus/direct_relay.py +3 -3
  218. claude_mpm/services/events/consumers/logging.py +1 -2
  219. claude_mpm/services/git/__init__.py +21 -0
  220. claude_mpm/services/git/git_operations_service.py +579 -0
  221. claude_mpm/services/github/__init__.py +21 -0
  222. claude_mpm/services/github/github_cli_service.py +397 -0
  223. claude_mpm/services/infrastructure/monitoring/__init__.py +1 -5
  224. claude_mpm/services/infrastructure/monitoring/aggregator.py +1 -6
  225. claude_mpm/services/instructions/__init__.py +9 -0
  226. claude_mpm/services/instructions/instruction_cache_service.py +374 -0
  227. claude_mpm/services/local_ops/__init__.py +3 -13
  228. claude_mpm/services/local_ops/health_checks/__init__.py +1 -3
  229. claude_mpm/services/local_ops/health_manager.py +1 -4
  230. claude_mpm/services/local_ops/resource_monitor.py +1 -1
  231. claude_mpm/services/mcp_config_manager.py +75 -145
  232. claude_mpm/services/mcp_service_verifier.py +6 -3
  233. claude_mpm/services/model/model_router.py +1 -2
  234. claude_mpm/services/monitor/daemon.py +38 -11
  235. claude_mpm/services/monitor/daemon_manager.py +134 -21
  236. claude_mpm/services/monitor/management/lifecycle.py +8 -1
  237. claude_mpm/services/monitor/server.py +700 -24
  238. claude_mpm/services/pm_skills_deployer.py +676 -0
  239. claude_mpm/services/port_manager.py +1 -1
  240. claude_mpm/services/pr/__init__.py +14 -0
  241. claude_mpm/services/pr/pr_template_service.py +329 -0
  242. claude_mpm/services/profile_manager.py +331 -0
  243. claude_mpm/services/project/documentation_manager.py +2 -1
  244. claude_mpm/services/project/project_organizer.py +4 -0
  245. claude_mpm/services/project/toolchain_analyzer.py +3 -1
  246. claude_mpm/services/runner_configuration_service.py +16 -3
  247. claude_mpm/services/self_upgrade_service.py +120 -12
  248. claude_mpm/services/session_management_service.py +16 -4
  249. claude_mpm/services/skills/__init__.py +21 -0
  250. claude_mpm/services/skills/git_skill_source_manager.py +1297 -0
  251. claude_mpm/services/skills/selective_skill_deployer.py +704 -0
  252. claude_mpm/services/skills/skill_discovery_service.py +568 -0
  253. claude_mpm/services/skills/skill_to_agent_mapper.py +406 -0
  254. claude_mpm/services/skills_config.py +547 -0
  255. claude_mpm/services/skills_deployer.py +1072 -0
  256. claude_mpm/services/socketio/dashboard_server.py +1 -0
  257. claude_mpm/services/socketio/event_normalizer.py +51 -6
  258. claude_mpm/services/socketio/handlers/connection.py +1 -1
  259. claude_mpm/services/socketio/handlers/git.py +1 -1
  260. claude_mpm/services/socketio/server/core.py +387 -112
  261. claude_mpm/services/socketio/server/main.py +1 -3
  262. claude_mpm/services/system_instructions_service.py +1 -3
  263. claude_mpm/services/unified/analyzer_strategies/performance_analyzer.py +0 -3
  264. claude_mpm/services/unified/analyzer_strategies/security_analyzer.py +0 -1
  265. claude_mpm/services/unified/deployment_strategies/vercel.py +1 -5
  266. claude_mpm/services/unified/unified_deployment.py +1 -5
  267. claude_mpm/services/version_control/conflict_resolution.py +6 -4
  268. claude_mpm/services/version_control/git_operations.py +103 -0
  269. claude_mpm/services/visualization/__init__.py +1 -5
  270. claude_mpm/services/visualization/mermaid_generator.py +2 -3
  271. claude_mpm/skills/bundled/testing/webapp-testing/scripts/with_server.py +2 -2
  272. claude_mpm/skills/skill_manager.py +92 -3
  273. claude_mpm/skills/skills_registry.py +0 -1
  274. claude_mpm/templates/questions/__init__.py +38 -0
  275. claude_mpm/templates/questions/base.py +193 -0
  276. claude_mpm/templates/questions/pr_strategy.py +311 -0
  277. claude_mpm/templates/questions/project_init.py +385 -0
  278. claude_mpm/templates/questions/ticket_mgmt.py +394 -0
  279. claude_mpm/tools/__main__.py +8 -8
  280. claude_mpm/utils/agent_dependency_loader.py +91 -12
  281. claude_mpm/utils/agent_filters.py +261 -0
  282. claude_mpm/utils/dependency_cache.py +3 -1
  283. claude_mpm/utils/gitignore.py +244 -0
  284. claude_mpm/utils/migration.py +372 -0
  285. claude_mpm/utils/progress.py +387 -0
  286. claude_mpm/utils/robust_installer.py +49 -7
  287. claude_mpm/utils/structured_questions.py +619 -0
  288. {claude_mpm-4.24.0.dist-info → claude_mpm-5.4.41.dist-info}/METADATA +445 -122
  289. {claude_mpm-4.24.0.dist-info → claude_mpm-5.4.41.dist-info}/RECORD +298 -503
  290. claude_mpm-5.4.41.dist-info/entry_points.txt +5 -0
  291. claude_mpm-5.4.41.dist-info/licenses/LICENSE +94 -0
  292. claude_mpm-5.4.41.dist-info/licenses/LICENSE-FAQ.md +153 -0
  293. claude_mpm/agents/BASE_AGENT_TEMPLATE.md +0 -292
  294. claude_mpm/agents/BASE_DOCUMENTATION.md +0 -53
  295. claude_mpm/agents/BASE_OPS.md +0 -219
  296. claude_mpm/agents/BASE_PM.md +0 -468
  297. claude_mpm/agents/BASE_PROMPT_ENGINEER.md +0 -787
  298. claude_mpm/agents/BASE_QA.md +0 -167
  299. claude_mpm/agents/BASE_RESEARCH.md +0 -53
  300. claude_mpm/agents/base_agent_loader.py +0 -626
  301. claude_mpm/agents/templates/.claude-mpm/memories/README.md +0 -17
  302. claude_mpm/agents/templates/.claude-mpm/memories/engineer_memories.md +0 -3
  303. claude_mpm/agents/templates/agent-manager.json +0 -273
  304. claude_mpm/agents/templates/agentic-coder-optimizer.json +0 -248
  305. claude_mpm/agents/templates/api_qa.json +0 -183
  306. claude_mpm/agents/templates/circuit_breakers.md +0 -638
  307. claude_mpm/agents/templates/clerk-ops.json +0 -235
  308. claude_mpm/agents/templates/code_analyzer.json +0 -101
  309. claude_mpm/agents/templates/content-agent.json +0 -358
  310. claude_mpm/agents/templates/dart_engineer.json +0 -307
  311. claude_mpm/agents/templates/data_engineer.json +0 -225
  312. claude_mpm/agents/templates/documentation.json +0 -238
  313. claude_mpm/agents/templates/engineer.json +0 -210
  314. claude_mpm/agents/templates/gcp_ops_agent.json +0 -253
  315. claude_mpm/agents/templates/golang_engineer.json +0 -270
  316. claude_mpm/agents/templates/imagemagick.json +0 -264
  317. claude_mpm/agents/templates/java_engineer.json +0 -346
  318. claude_mpm/agents/templates/javascript_engineer_agent.json +0 -380
  319. claude_mpm/agents/templates/local_ops_agent.json +0 -1840
  320. claude_mpm/agents/templates/logs/prompts/agent_engineer_20250826_014258_728.md +0 -39
  321. claude_mpm/agents/templates/logs/prompts/agent_engineer_20250901_010124_142.md +0 -400
  322. claude_mpm/agents/templates/memory_manager.json +0 -158
  323. claude_mpm/agents/templates/nextjs_engineer.json +0 -285
  324. claude_mpm/agents/templates/ops.json +0 -185
  325. claude_mpm/agents/templates/php-engineer.json +0 -287
  326. claude_mpm/agents/templates/product_owner.json +0 -338
  327. claude_mpm/agents/templates/project_organizer.json +0 -144
  328. claude_mpm/agents/templates/prompt-engineer.json +0 -737
  329. claude_mpm/agents/templates/python_engineer.json +0 -387
  330. claude_mpm/agents/templates/qa.json +0 -243
  331. claude_mpm/agents/templates/react_engineer.json +0 -239
  332. claude_mpm/agents/templates/refactoring_engineer.json +0 -276
  333. claude_mpm/agents/templates/research.json +0 -188
  334. claude_mpm/agents/templates/ruby-engineer.json +0 -280
  335. claude_mpm/agents/templates/rust_engineer.json +0 -275
  336. claude_mpm/agents/templates/security.json +0 -202
  337. claude_mpm/agents/templates/svelte-engineer.json +0 -225
  338. claude_mpm/agents/templates/tauri_engineer.json +0 -274
  339. claude_mpm/agents/templates/ticketing.json +0 -178
  340. claude_mpm/agents/templates/typescript_engineer.json +0 -285
  341. claude_mpm/agents/templates/vercel_ops_agent.json +0 -412
  342. claude_mpm/agents/templates/version_control.json +0 -159
  343. claude_mpm/agents/templates/web_qa.json +0 -400
  344. claude_mpm/agents/templates/web_ui.json +0 -189
  345. claude_mpm/cli/commands/agents_detect.py +0 -380
  346. claude_mpm/cli/commands/agents_recommend.py +0 -309
  347. claude_mpm/cli/ticket_cli.py +0 -35
  348. claude_mpm/commands/mpm-agents-detect.md +0 -168
  349. claude_mpm/commands/mpm-agents-recommend.md +0 -214
  350. claude_mpm/commands/mpm-agents.md +0 -122
  351. claude_mpm/commands/mpm-auto-configure.md +0 -269
  352. claude_mpm/commands/mpm-resume.md +0 -372
  353. claude_mpm/commands/mpm-tickets.md +0 -151
  354. claude_mpm/dashboard/.claude-mpm/socketio-instances.json +0 -1
  355. claude_mpm/dashboard/analysis_runner.py +0 -455
  356. claude_mpm/dashboard/index.html +0 -13
  357. claude_mpm/dashboard/open_dashboard.py +0 -66
  358. claude_mpm/dashboard/react/components/DataInspector/DataInspector.module.css +0 -188
  359. claude_mpm/dashboard/react/components/EventViewer/EventViewer.module.css +0 -156
  360. claude_mpm/dashboard/react/components/shared/ConnectionStatus.module.css +0 -38
  361. claude_mpm/dashboard/react/components/shared/FilterBar.module.css +0 -92
  362. claude_mpm/dashboard/static/archive/activity_dashboard_fixed.html +0 -248
  363. claude_mpm/dashboard/static/archive/activity_dashboard_test.html +0 -61
  364. claude_mpm/dashboard/static/archive/test_activity_connection.html +0 -179
  365. claude_mpm/dashboard/static/archive/test_claude_tree_tab.html +0 -68
  366. claude_mpm/dashboard/static/archive/test_dashboard.html +0 -409
  367. claude_mpm/dashboard/static/archive/test_dashboard_fixed.html +0 -519
  368. claude_mpm/dashboard/static/archive/test_dashboard_verification.html +0 -181
  369. claude_mpm/dashboard/static/archive/test_file_data.html +0 -315
  370. claude_mpm/dashboard/static/archive/test_file_tree_empty_state.html +0 -243
  371. claude_mpm/dashboard/static/archive/test_file_tree_fix.html +0 -234
  372. claude_mpm/dashboard/static/archive/test_file_tree_rename.html +0 -117
  373. claude_mpm/dashboard/static/archive/test_file_tree_tab.html +0 -115
  374. claude_mpm/dashboard/static/archive/test_file_viewer.html +0 -224
  375. claude_mpm/dashboard/static/archive/test_final_activity.html +0 -220
  376. claude_mpm/dashboard/static/archive/test_tab_fix.html +0 -139
  377. claude_mpm/dashboard/static/built/assets/events.DjpNxWNo.css +0 -1
  378. claude_mpm/dashboard/static/built/components/activity-tree.js +0 -2
  379. claude_mpm/dashboard/static/built/components/agent-hierarchy.js +0 -777
  380. claude_mpm/dashboard/static/built/components/agent-inference.js +0 -2
  381. claude_mpm/dashboard/static/built/components/build-tracker.js +0 -333
  382. claude_mpm/dashboard/static/built/components/code-simple.js +0 -857
  383. claude_mpm/dashboard/static/built/components/code-tree/tree-breadcrumb.js +0 -353
  384. claude_mpm/dashboard/static/built/components/code-tree/tree-constants.js +0 -235
  385. claude_mpm/dashboard/static/built/components/code-tree/tree-search.js +0 -409
  386. claude_mpm/dashboard/static/built/components/code-tree/tree-utils.js +0 -435
  387. claude_mpm/dashboard/static/built/components/code-tree.js +0 -2
  388. claude_mpm/dashboard/static/built/components/code-viewer.js +0 -2
  389. claude_mpm/dashboard/static/built/components/connection-debug.js +0 -654
  390. claude_mpm/dashboard/static/built/components/diff-viewer.js +0 -891
  391. claude_mpm/dashboard/static/built/components/event-processor.js +0 -2
  392. claude_mpm/dashboard/static/built/components/event-viewer.js +0 -2
  393. claude_mpm/dashboard/static/built/components/export-manager.js +0 -2
  394. claude_mpm/dashboard/static/built/components/file-change-tracker.js +0 -443
  395. claude_mpm/dashboard/static/built/components/file-change-viewer.js +0 -690
  396. claude_mpm/dashboard/static/built/components/file-tool-tracker.js +0 -2
  397. claude_mpm/dashboard/static/built/components/file-viewer.js +0 -2
  398. claude_mpm/dashboard/static/built/components/hud-library-loader.js +0 -2
  399. claude_mpm/dashboard/static/built/components/hud-manager.js +0 -2
  400. claude_mpm/dashboard/static/built/components/hud-visualizer.js +0 -2
  401. claude_mpm/dashboard/static/built/components/module-viewer.js +0 -2
  402. claude_mpm/dashboard/static/built/components/nav-bar.js +0 -145
  403. claude_mpm/dashboard/static/built/components/page-structure.js +0 -429
  404. claude_mpm/dashboard/static/built/components/session-manager.js +0 -2
  405. claude_mpm/dashboard/static/built/components/socket-manager.js +0 -2
  406. claude_mpm/dashboard/static/built/components/ui-state-manager.js +0 -2
  407. claude_mpm/dashboard/static/built/components/unified-data-viewer.js +0 -2
  408. claude_mpm/dashboard/static/built/components/working-directory.js +0 -2
  409. claude_mpm/dashboard/static/built/connection-manager.js +0 -536
  410. claude_mpm/dashboard/static/built/dashboard.js +0 -2
  411. claude_mpm/dashboard/static/built/extension-error-handler.js +0 -164
  412. claude_mpm/dashboard/static/built/react/events.js +0 -30
  413. claude_mpm/dashboard/static/built/shared/dom-helpers.js +0 -396
  414. claude_mpm/dashboard/static/built/shared/event-bus.js +0 -330
  415. claude_mpm/dashboard/static/built/shared/event-filter-service.js +0 -540
  416. claude_mpm/dashboard/static/built/shared/logger.js +0 -385
  417. claude_mpm/dashboard/static/built/shared/page-structure.js +0 -249
  418. claude_mpm/dashboard/static/built/shared/tooltip-service.js +0 -253
  419. claude_mpm/dashboard/static/built/socket-client.js +0 -2
  420. claude_mpm/dashboard/static/built/tab-isolation-fix.js +0 -185
  421. claude_mpm/dashboard/static/css/activity.css +0 -1958
  422. claude_mpm/dashboard/static/css/connection-status.css +0 -370
  423. claude_mpm/dashboard/static/css/dashboard.css +0 -4701
  424. claude_mpm/dashboard/static/dist/assets/events.DjpNxWNo.css +0 -1
  425. claude_mpm/dashboard/static/dist/components/activity-tree.js +0 -2
  426. claude_mpm/dashboard/static/dist/components/agent-inference.js +0 -2
  427. claude_mpm/dashboard/static/dist/components/code-tree.js +0 -2
  428. claude_mpm/dashboard/static/dist/components/code-viewer.js +0 -2
  429. claude_mpm/dashboard/static/dist/components/event-processor.js +0 -2
  430. claude_mpm/dashboard/static/dist/components/event-viewer.js +0 -2
  431. claude_mpm/dashboard/static/dist/components/export-manager.js +0 -2
  432. claude_mpm/dashboard/static/dist/components/file-tool-tracker.js +0 -2
  433. claude_mpm/dashboard/static/dist/components/file-viewer.js +0 -2
  434. claude_mpm/dashboard/static/dist/components/hud-library-loader.js +0 -2
  435. claude_mpm/dashboard/static/dist/components/hud-manager.js +0 -2
  436. claude_mpm/dashboard/static/dist/components/hud-visualizer.js +0 -2
  437. claude_mpm/dashboard/static/dist/components/module-viewer.js +0 -2
  438. claude_mpm/dashboard/static/dist/components/session-manager.js +0 -2
  439. claude_mpm/dashboard/static/dist/components/socket-manager.js +0 -2
  440. claude_mpm/dashboard/static/dist/components/ui-state-manager.js +0 -2
  441. claude_mpm/dashboard/static/dist/components/unified-data-viewer.js +0 -2
  442. claude_mpm/dashboard/static/dist/components/working-directory.js +0 -2
  443. claude_mpm/dashboard/static/dist/dashboard.js +0 -2
  444. claude_mpm/dashboard/static/dist/react/events.js +0 -30
  445. claude_mpm/dashboard/static/dist/socket-client.js +0 -2
  446. claude_mpm/dashboard/static/events.html +0 -607
  447. claude_mpm/dashboard/static/index.html +0 -635
  448. claude_mpm/dashboard/static/js/components/activity-tree.js +0 -1871
  449. claude_mpm/dashboard/static/js/components/agent-hierarchy.js +0 -777
  450. claude_mpm/dashboard/static/js/components/agent-inference.js +0 -956
  451. claude_mpm/dashboard/static/js/components/build-tracker.js +0 -333
  452. claude_mpm/dashboard/static/js/components/code-simple.js +0 -857
  453. claude_mpm/dashboard/static/js/components/connection-debug.js +0 -654
  454. claude_mpm/dashboard/static/js/components/diff-viewer.js +0 -891
  455. claude_mpm/dashboard/static/js/components/event-processor.js +0 -542
  456. claude_mpm/dashboard/static/js/components/event-viewer.js +0 -1155
  457. claude_mpm/dashboard/static/js/components/export-manager.js +0 -368
  458. claude_mpm/dashboard/static/js/components/file-change-tracker.js +0 -443
  459. claude_mpm/dashboard/static/js/components/file-change-viewer.js +0 -690
  460. claude_mpm/dashboard/static/js/components/file-tool-tracker.js +0 -724
  461. claude_mpm/dashboard/static/js/components/file-viewer.js +0 -580
  462. claude_mpm/dashboard/static/js/components/hud-library-loader.js +0 -211
  463. claude_mpm/dashboard/static/js/components/hud-manager.js +0 -671
  464. claude_mpm/dashboard/static/js/components/hud-visualizer.js +0 -1718
  465. claude_mpm/dashboard/static/js/components/module-viewer.js +0 -2764
  466. claude_mpm/dashboard/static/js/components/session-manager.js +0 -579
  467. claude_mpm/dashboard/static/js/components/socket-manager.js +0 -368
  468. claude_mpm/dashboard/static/js/components/ui-state-manager.js +0 -749
  469. claude_mpm/dashboard/static/js/components/unified-data-viewer.js +0 -1824
  470. claude_mpm/dashboard/static/js/components/working-directory.js +0 -920
  471. claude_mpm/dashboard/static/js/connection-manager.js +0 -536
  472. claude_mpm/dashboard/static/js/dashboard.js +0 -1896
  473. claude_mpm/dashboard/static/js/extension-error-handler.js +0 -164
  474. claude_mpm/dashboard/static/js/shared/dom-helpers.js +0 -396
  475. claude_mpm/dashboard/static/js/shared/event-bus.js +0 -330
  476. claude_mpm/dashboard/static/js/shared/logger.js +0 -385
  477. claude_mpm/dashboard/static/js/shared/tooltip-service.js +0 -253
  478. claude_mpm/dashboard/static/js/socket-client.js +0 -1457
  479. claude_mpm/dashboard/static/js/stores/dashboard-store.js +0 -562
  480. claude_mpm/dashboard/static/js/tab-isolation-fix.js +0 -185
  481. claude_mpm/dashboard/static/legacy/activity.html +0 -736
  482. claude_mpm/dashboard/static/legacy/agents.html +0 -786
  483. claude_mpm/dashboard/static/legacy/files.html +0 -747
  484. claude_mpm/dashboard/static/legacy/tools.html +0 -831
  485. claude_mpm/dashboard/static/monitors.html +0 -431
  486. claude_mpm/dashboard/static/production/events.html +0 -659
  487. claude_mpm/dashboard/static/production/main.html +0 -698
  488. claude_mpm/dashboard/static/production/monitors.html +0 -483
  489. claude_mpm/dashboard/static/socket.io.min.js +0 -7
  490. claude_mpm/dashboard/static/socket.io.v4.8.1.backup.js +0 -7
  491. claude_mpm/dashboard/static/test-archive/dashboard.html +0 -635
  492. claude_mpm/dashboard/static/test-archive/debug-events.html +0 -147
  493. claude_mpm/dashboard/static/test-archive/test-navigation.html +0 -256
  494. claude_mpm/dashboard/static/test-archive/test-react-exports.html +0 -180
  495. claude_mpm/dashboard/static/test-archive/test_debug.html +0 -25
  496. claude_mpm/dashboard/templates/code_simple.html +0 -153
  497. claude_mpm/dashboard/templates/index.html +0 -606
  498. claude_mpm/dashboard/test_dashboard.html +0 -372
  499. claude_mpm/scripts/mcp_server.py +0 -75
  500. claude_mpm/scripts/mcp_wrapper.py +0 -39
  501. claude_mpm/services/mcp_gateway/__init__.py +0 -159
  502. claude_mpm/services/mcp_gateway/auto_configure.py +0 -369
  503. claude_mpm/services/mcp_gateway/config/__init__.py +0 -17
  504. claude_mpm/services/mcp_gateway/config/config_loader.py +0 -296
  505. claude_mpm/services/mcp_gateway/config/config_schema.py +0 -243
  506. claude_mpm/services/mcp_gateway/config/configuration.py +0 -429
  507. claude_mpm/services/mcp_gateway/core/__init__.py +0 -43
  508. claude_mpm/services/mcp_gateway/core/base.py +0 -312
  509. claude_mpm/services/mcp_gateway/core/exceptions.py +0 -253
  510. claude_mpm/services/mcp_gateway/core/interfaces.py +0 -443
  511. claude_mpm/services/mcp_gateway/core/process_pool.py +0 -971
  512. claude_mpm/services/mcp_gateway/core/singleton_manager.py +0 -315
  513. claude_mpm/services/mcp_gateway/core/startup_verification.py +0 -316
  514. claude_mpm/services/mcp_gateway/main.py +0 -589
  515. claude_mpm/services/mcp_gateway/registry/__init__.py +0 -12
  516. claude_mpm/services/mcp_gateway/registry/service_registry.py +0 -412
  517. claude_mpm/services/mcp_gateway/registry/tool_registry.py +0 -489
  518. claude_mpm/services/mcp_gateway/server/__init__.py +0 -15
  519. claude_mpm/services/mcp_gateway/server/mcp_gateway.py +0 -419
  520. claude_mpm/services/mcp_gateway/server/stdio_handler.py +0 -372
  521. claude_mpm/services/mcp_gateway/server/stdio_server.py +0 -714
  522. claude_mpm/services/mcp_gateway/tools/__init__.py +0 -36
  523. claude_mpm/services/mcp_gateway/tools/base_adapter.py +0 -485
  524. claude_mpm/services/mcp_gateway/tools/document_summarizer.py +0 -789
  525. claude_mpm/services/mcp_gateway/tools/external_mcp_services.py +0 -654
  526. claude_mpm/services/mcp_gateway/tools/health_check_tool.py +0 -456
  527. claude_mpm/services/mcp_gateway/tools/hello_world.py +0 -551
  528. claude_mpm/services/mcp_gateway/tools/kuzu_memory_service.py +0 -551
  529. claude_mpm/services/mcp_gateway/utils/__init__.py +0 -14
  530. claude_mpm/services/mcp_gateway/utils/package_version_checker.py +0 -160
  531. claude_mpm/services/mcp_gateway/utils/update_preferences.py +0 -170
  532. claude_mpm/skills/bundled/collaboration/brainstorming/SKILL.md +0 -79
  533. claude_mpm/skills/bundled/collaboration/dispatching-parallel-agents/SKILL.md +0 -178
  534. claude_mpm/skills/bundled/collaboration/dispatching-parallel-agents/references/agent-prompts.md +0 -577
  535. claude_mpm/skills/bundled/collaboration/dispatching-parallel-agents/references/coordination-patterns.md +0 -467
  536. claude_mpm/skills/bundled/collaboration/dispatching-parallel-agents/references/examples.md +0 -537
  537. claude_mpm/skills/bundled/collaboration/dispatching-parallel-agents/references/troubleshooting.md +0 -730
  538. claude_mpm/skills/bundled/collaboration/requesting-code-review/SKILL.md +0 -112
  539. claude_mpm/skills/bundled/collaboration/requesting-code-review/references/code-reviewer-template.md +0 -146
  540. claude_mpm/skills/bundled/collaboration/requesting-code-review/references/review-examples.md +0 -412
  541. claude_mpm/skills/bundled/collaboration/writing-plans/SKILL.md +0 -81
  542. claude_mpm/skills/bundled/collaboration/writing-plans/references/best-practices.md +0 -362
  543. claude_mpm/skills/bundled/collaboration/writing-plans/references/plan-structure-templates.md +0 -312
  544. claude_mpm/skills/bundled/debugging/root-cause-tracing/SKILL.md +0 -152
  545. claude_mpm/skills/bundled/debugging/root-cause-tracing/references/advanced-techniques.md +0 -668
  546. claude_mpm/skills/bundled/debugging/root-cause-tracing/references/examples.md +0 -587
  547. claude_mpm/skills/bundled/debugging/root-cause-tracing/references/integration.md +0 -438
  548. claude_mpm/skills/bundled/debugging/root-cause-tracing/references/tracing-techniques.md +0 -391
  549. claude_mpm/skills/bundled/debugging/systematic-debugging/CREATION-LOG.md +0 -119
  550. claude_mpm/skills/bundled/debugging/systematic-debugging/SKILL.md +0 -148
  551. claude_mpm/skills/bundled/debugging/systematic-debugging/references/anti-patterns.md +0 -483
  552. claude_mpm/skills/bundled/debugging/systematic-debugging/references/examples.md +0 -452
  553. claude_mpm/skills/bundled/debugging/systematic-debugging/references/troubleshooting.md +0 -449
  554. claude_mpm/skills/bundled/debugging/systematic-debugging/references/workflow.md +0 -411
  555. claude_mpm/skills/bundled/debugging/systematic-debugging/test-academic.md +0 -14
  556. claude_mpm/skills/bundled/debugging/systematic-debugging/test-pressure-1.md +0 -58
  557. claude_mpm/skills/bundled/debugging/systematic-debugging/test-pressure-2.md +0 -68
  558. claude_mpm/skills/bundled/debugging/systematic-debugging/test-pressure-3.md +0 -69
  559. claude_mpm/skills/bundled/debugging/verification-before-completion/SKILL.md +0 -131
  560. claude_mpm/skills/bundled/debugging/verification-before-completion/references/gate-function.md +0 -325
  561. claude_mpm/skills/bundled/debugging/verification-before-completion/references/integration-and-workflows.md +0 -490
  562. claude_mpm/skills/bundled/debugging/verification-before-completion/references/red-flags-and-failures.md +0 -425
  563. claude_mpm/skills/bundled/debugging/verification-before-completion/references/verification-patterns.md +0 -499
  564. claude_mpm/skills/bundled/main/artifacts-builder/SKILL.md +0 -86
  565. claude_mpm/skills/bundled/main/internal-comms/SKILL.md +0 -43
  566. claude_mpm/skills/bundled/main/internal-comms/examples/3p-updates.md +0 -47
  567. claude_mpm/skills/bundled/main/internal-comms/examples/company-newsletter.md +0 -65
  568. claude_mpm/skills/bundled/main/internal-comms/examples/faq-answers.md +0 -30
  569. claude_mpm/skills/bundled/main/internal-comms/examples/general-comms.md +0 -16
  570. claude_mpm/skills/bundled/main/mcp-builder/SKILL.md +0 -160
  571. claude_mpm/skills/bundled/main/mcp-builder/reference/design_principles.md +0 -412
  572. claude_mpm/skills/bundled/main/mcp-builder/reference/evaluation.md +0 -602
  573. claude_mpm/skills/bundled/main/mcp-builder/reference/mcp_best_practices.md +0 -915
  574. claude_mpm/skills/bundled/main/mcp-builder/reference/node_mcp_server.md +0 -916
  575. claude_mpm/skills/bundled/main/mcp-builder/reference/python_mcp_server.md +0 -752
  576. claude_mpm/skills/bundled/main/mcp-builder/reference/workflow.md +0 -1237
  577. claude_mpm/skills/bundled/main/skill-creator/SKILL.md +0 -189
  578. claude_mpm/skills/bundled/main/skill-creator/references/best-practices.md +0 -500
  579. claude_mpm/skills/bundled/main/skill-creator/references/creation-workflow.md +0 -464
  580. claude_mpm/skills/bundled/main/skill-creator/references/examples.md +0 -619
  581. claude_mpm/skills/bundled/main/skill-creator/references/progressive-disclosure.md +0 -437
  582. claude_mpm/skills/bundled/main/skill-creator/references/skill-structure.md +0 -231
  583. claude_mpm/skills/bundled/php/espocrm-development/SKILL.md +0 -170
  584. claude_mpm/skills/bundled/php/espocrm-development/references/architecture.md +0 -602
  585. claude_mpm/skills/bundled/php/espocrm-development/references/common-tasks.md +0 -821
  586. claude_mpm/skills/bundled/php/espocrm-development/references/development-workflow.md +0 -742
  587. claude_mpm/skills/bundled/php/espocrm-development/references/frontend-customization.md +0 -726
  588. claude_mpm/skills/bundled/php/espocrm-development/references/hooks-and-services.md +0 -764
  589. claude_mpm/skills/bundled/php/espocrm-development/references/testing-debugging.md +0 -831
  590. claude_mpm/skills/bundled/rust/desktop-applications/SKILL.md +0 -226
  591. claude_mpm/skills/bundled/rust/desktop-applications/references/architecture-patterns.md +0 -901
  592. claude_mpm/skills/bundled/rust/desktop-applications/references/native-gui-frameworks.md +0 -901
  593. claude_mpm/skills/bundled/rust/desktop-applications/references/platform-integration.md +0 -775
  594. claude_mpm/skills/bundled/rust/desktop-applications/references/state-management.md +0 -937
  595. claude_mpm/skills/bundled/rust/desktop-applications/references/tauri-framework.md +0 -770
  596. claude_mpm/skills/bundled/rust/desktop-applications/references/testing-deployment.md +0 -961
  597. claude_mpm/skills/bundled/testing/condition-based-waiting/SKILL.md +0 -119
  598. claude_mpm/skills/bundled/testing/condition-based-waiting/references/patterns-and-implementation.md +0 -253
  599. claude_mpm/skills/bundled/testing/test-driven-development/SKILL.md +0 -145
  600. claude_mpm/skills/bundled/testing/test-driven-development/references/anti-patterns.md +0 -543
  601. claude_mpm/skills/bundled/testing/test-driven-development/references/examples.md +0 -741
  602. claude_mpm/skills/bundled/testing/test-driven-development/references/integration.md +0 -470
  603. claude_mpm/skills/bundled/testing/test-driven-development/references/philosophy.md +0 -458
  604. claude_mpm/skills/bundled/testing/test-driven-development/references/workflow.md +0 -639
  605. claude_mpm/skills/bundled/testing/testing-anti-patterns/SKILL.md +0 -140
  606. claude_mpm/skills/bundled/testing/testing-anti-patterns/references/completeness-anti-patterns.md +0 -572
  607. claude_mpm/skills/bundled/testing/testing-anti-patterns/references/core-anti-patterns.md +0 -411
  608. claude_mpm/skills/bundled/testing/testing-anti-patterns/references/detection-guide.md +0 -569
  609. claude_mpm/skills/bundled/testing/testing-anti-patterns/references/tdd-connection.md +0 -695
  610. claude_mpm/skills/bundled/testing/webapp-testing/SKILL.md +0 -184
  611. claude_mpm/skills/bundled/testing/webapp-testing/decision-tree.md +0 -459
  612. claude_mpm/skills/bundled/testing/webapp-testing/playwright-patterns.md +0 -479
  613. claude_mpm/skills/bundled/testing/webapp-testing/reconnaissance-pattern.md +0 -687
  614. claude_mpm/skills/bundled/testing/webapp-testing/server-management.md +0 -758
  615. claude_mpm/skills/bundled/testing/webapp-testing/troubleshooting.md +0 -868
  616. claude_mpm-4.24.0.dist-info/entry_points.txt +0 -10
  617. claude_mpm-4.24.0.dist-info/licenses/LICENSE +0 -21
  618. /claude_mpm/agents/templates/{git_file_tracking.md → git-file-tracking.md} +0 -0
  619. /claude_mpm/agents/templates/{pm_examples.md → pm-examples.md} +0 -0
  620. /claude_mpm/agents/templates/{response_format.md → response-format.md} +0 -0
  621. /claude_mpm/agents/templates/{validation_templates.md → validation-templates.md} +0 -0
  622. {claude_mpm-4.24.0.dist-info → claude_mpm-5.4.41.dist-info}/WHEEL +0 -0
  623. {claude_mpm-4.24.0.dist-info → claude_mpm-5.4.41.dist-info}/top_level.txt +0 -0
@@ -1,184 +0,0 @@
1
- ---
2
- name: webapp-testing
3
- version: 2.0.0
4
- category: testing
5
- description: Automated webapp testing with Playwright. Server management, UI testing, visual debugging, and reconnaissance-first approach.
6
- license: Complete terms in LICENSE.txt
7
- progressive_disclosure:
8
- entry_point:
9
- summary: "Reconnaissance before action: verify server state and page load before testing"
10
- when_to_use: "When testing web applications with Playwright. Server verification, UI testing, frontend debugging."
11
- quick_start: "1. Check server with lsof 2. Start with with_server.py 3. Wait for networkidle 4. Screenshot and verify"
12
- references:
13
- - playwright-patterns.md
14
- - server-management.md
15
- - reconnaissance-pattern.md
16
- - decision-tree.md
17
- - troubleshooting.md
18
- ---
19
-
20
- # Webapp Testing
21
-
22
- ## Overview
23
-
24
- **Core Principle: Reconnaissance Before Action**
25
-
26
- Automated webapp testing using Playwright with a focus on verifying system state (server status, page load, element presence) before taking any action. This ensures reliable, debuggable tests that fail for clear reasons.
27
-
28
- **Key capabilities:**
29
- - Automated browser testing with Playwright
30
- - Server lifecycle management
31
- - Visual reconnaissance (screenshots, DOM inspection)
32
- - Network monitoring and debugging
33
-
34
- ## When to Use This Skill
35
-
36
- - **Web application testing** - UI behavior, forms, navigation, integration testing
37
- - **Frontend debugging** - Screenshots, DOM inspection, console monitoring
38
- - **Regression testing** - Ensure changes don't break existing functionality
39
- - **Server verification** - Check servers are running and responding
40
-
41
- **Not suitable for:** Unit testing (use Jest/pytest), load testing, or API-only testing.
42
-
43
- ## The Iron Law
44
-
45
- **RECONNAISSANCE BEFORE ACTION**
46
-
47
- Never execute test actions without first:
48
- 1. **Verify server state** - `lsof -i :PORT` and `curl` checks
49
- 2. **Wait for page ready** - `page.wait_for_load_state('networkidle')`
50
- 3. **Visual confirmation** - Screenshot before actions
51
- 4. **Read complete output** - Examine full results before claiming success
52
-
53
- **Why:** Tests fail mysteriously when servers aren't ready, selectors break when DOM is still building, and 5 seconds of reconnaissance saves 30 minutes of debugging.
54
-
55
- ## Quick Start
56
-
57
- ### Step 1: Verify Server State
58
-
59
- ```bash
60
- lsof -i :3000 -sTCP:LISTEN # Check server listening
61
- curl -f http://localhost:3000/health # Test response
62
- ```
63
-
64
- ### Step 2: Start Server (If Needed)
65
-
66
- ```bash
67
- # Single server
68
- python scripts/with_server.py --server "npm run dev" --port 5173 -- python test.py
69
-
70
- # Multiple servers (backend + frontend)
71
- python scripts/with_server.py \
72
- --server "cd backend && python server.py" --port 3000 \
73
- --server "cd frontend && npm run dev" --port 5173 \
74
- -- python test.py
75
- ```
76
-
77
- ### Step 3: Write Test with Reconnaissance
78
-
79
- ```python
80
- from playwright.sync_api import sync_playwright
81
-
82
- with sync_playwright() as p:
83
- browser = p.chromium.launch(headless=True)
84
- page = browser.new_page()
85
-
86
- # 1. Navigate and wait
87
- page.goto('http://localhost:5173')
88
- page.wait_for_load_state('networkidle') # CRITICAL
89
-
90
- # 2. Reconnaissance
91
- page.screenshot(path='/tmp/before.png', full_page=True)
92
- buttons = page.locator('button').all()
93
- print(f"Found {len(buttons)} buttons")
94
-
95
- # 3. Execute
96
- page.click('button.submit')
97
-
98
- # 4. Verify
99
- page.wait_for_selector('.success-message')
100
- page.screenshot(path='/tmp/after.png', full_page=True)
101
-
102
- browser.close()
103
- ```
104
-
105
- ### Step 4: Verify Results
106
-
107
- Review console output, check for errors, verify state changes, examine screenshots.
108
-
109
- ## Key Patterns
110
-
111
- **Server Management** - Check → Start → Wait → Test → Cleanup
112
- - Use `with_server.py` for automatic lifecycle management
113
- - Check status with `lsof`, test with `curl`
114
- - Automatic cleanup on exit
115
-
116
- **Reconnaissance** - Inspect → Understand → Act → Verify
117
- - Screenshot current state
118
- - Inspect DOM for elements
119
- - Act on discovered selectors
120
- - Verify results visually
121
-
122
- **Wait Strategy** - Load → Idle → Element → Action
123
- - Always wait for `networkidle` on dynamic apps
124
- - Wait for specific elements before interaction
125
- - Playwright auto-waits but explicit waits prevent race conditions
126
-
127
- **Selector Priority** - data-testid > role > text > CSS > XPath
128
- - `[data-testid="submit"]` - most stable
129
- - `role=button[name="Submit"]` - semantic
130
- - `text=Submit` - readable
131
- - `button.submit` - acceptable
132
- - XPath - last resort
133
-
134
- ## Common Pitfalls
135
-
136
- ❌ **Testing without server verification** - Always check `lsof` and `curl` first
137
- ❌ **Ignoring timeout errors** - TimeoutError means something is wrong, investigate
138
- ❌ **Not waiting for networkidle** - Dynamic apps need full page load
139
- ❌ **Poor selector strategies** - Use data-testid for stability
140
- ❌ **Missing network verification** - Check API responses complete
141
- ❌ **Incomplete cleanup** - Close browsers, stop servers properly
142
-
143
- ## Reference Documentation
144
-
145
- **[playwright-patterns.md](playwright-patterns.md)** - Complete Playwright reference
146
- Selectors, waits, interactions, assertions, test organization, network interception, screenshots, debugging
147
-
148
- **[server-management.md](server-management.md)** - Server lifecycle and operations
149
- with_server.py usage, manual management, port management, process control, environment config, health checks
150
-
151
- **[reconnaissance-pattern.md](reconnaissance-pattern.md)** - Philosophy and practice
152
- Why reconnaissance first, complete process, server checks, network diagnostics, DOM inspection, log analysis
153
-
154
- **[decision-tree.md](decision-tree.md)** - Flowcharts for every scenario
155
- New test decisions, server state paths, test failure diagnosis, debugging flows, selector/wait strategies
156
-
157
- **[troubleshooting.md](troubleshooting.md)** - Solutions to common problems
158
- Timeout issues, selector problems, server crashes, network errors, environment config, debugging workflow
159
-
160
- ## Examples and Scripts
161
-
162
- **Examples** (`examples/` directory):
163
- - `element_discovery.py` - Discovering page elements
164
- - `static_html_automation.py` - Testing local HTML files
165
- - `console_logging.py` - Capturing console output
166
-
167
- **Scripts** (`scripts/` directory):
168
- - `with_server.py` - Server lifecycle management (run with `--help` first)
169
-
170
- ## Integration with Other Skills
171
-
172
- **Mandatory:** verification-before-completion
173
- **Recommended:** systematic-debugging, test-driven-development
174
- **Related:** playwright-testing, selenium-automation
175
-
176
- ## Bottom Line
177
-
178
- 1. **Reconnaissance always comes first** - Verify before acting
179
- 2. **Never skip server checks** - 5 seconds saves 30 minutes
180
- 3. **Wait for networkidle** - Dynamic apps need time
181
- 4. **Read complete output** - Verify before claiming success
182
- 5. **Screenshot everything** - Visual evidence is invaluable
183
-
184
- The reconnaissance-then-action pattern is not optional - it's the foundation of reliable webapp testing.
@@ -1,459 +0,0 @@
1
- # Decision Tree Reference
2
-
3
- Complete flowcharts and decision guides for webapp testing scenarios.
4
-
5
- ## Table of Contents
6
-
7
- - [Start Here: New Test Decision Tree](#start-here-new-test-decision-tree)
8
- - [Server State Decision Tree](#server-state-decision-tree)
9
- - [Test Failure Decision Tree](#test-failure-decision-tree)
10
- - [Debugging Decision Tree](#debugging-decision-tree)
11
- - [Selector Strategy Decision Tree](#selector-strategy-decision-tree)
12
- - [Wait Strategy Decision Tree](#wait-strategy-decision-tree)
13
- - [Environment Selection Decision Tree](#environment-selection-decision-tree)
14
- - [Testing Approach Decision Tree](#testing-approach-decision-tree)
15
-
16
- ## Start Here: New Test Decision Tree
17
-
18
- ```
19
- User requests webapp testing
20
-
21
- Is it a local webapp?
22
- ├─ No → Ask for deployment URL
23
- │ ├─ Public URL → Test directly with Playwright
24
- │ └─ Private URL → Configure authentication first
25
-
26
- └─ Yes → What type of webapp?
27
- ├─ Static HTML file
28
- │ ├─ Read HTML source directly
29
- │ │ ├─ Can identify selectors? → Write test
30
- │ │ └─ Need to see rendered? → Use file:// URL
31
- │ └─ Write Playwright script with file:// URL
32
-
33
- ├─ Dynamic webapp (React, Vue, Angular, etc.)
34
- │ └─ Is server already running?
35
- │ ├─ Yes → Check server status
36
- │ │ ├─ lsof -i :PORT shows LISTEN
37
- │ │ │ └─ curl http://localhost:PORT succeeds
38
- │ │ │ └─ Write Playwright test
39
- │ │ └─ Server not responding
40
- │ │ └─ Restart server
41
- │ │
42
- │ └─ No → Need to start server
43
- │ ├─ Single server
44
- │ │ └─ Use with_server.py:
45
- │ │ python scripts/with_server.py \
46
- │ │ --server "npm start" --port 3000 \
47
- │ │ -- python test.py
48
- │ │
49
- │ └─ Multiple servers (backend + frontend)
50
- │ └─ Use with_server.py with multiple --server flags:
51
- │ python scripts/with_server.py \
52
- │ --server "cd backend && npm start" --port 4000 \
53
- │ --server "cd frontend && npm start" --port 3000 \
54
- │ -- python test.py
55
-
56
- └─ Server-side rendered (Django, Flask, Rails, etc.)
57
- └─ Follow dynamic webapp path above
58
- ```
59
-
60
- ## Server State Decision Tree
61
-
62
- ```
63
- Need to test webapp
64
-
65
- Check if server is running
66
- └─ lsof -i :PORT -sTCP:LISTEN
67
- ├─ No output (server not running)
68
- │ └─ Need to start server
69
- │ ├─ Know server command?
70
- │ │ ├─ Yes → Use with_server.py
71
- │ │ └─ No → Check package.json or README
72
- │ │ ├─ Found start command
73
- │ │ │ └─ Use with_server.py
74
- │ │ └─ Can't find command
75
- │ │ └─ Ask user for startup instructions
76
- │ │
77
- │ └─ Port conflict?
78
- │ ├─ Check: lsof -i :PORT (without LISTEN filter)
79
- │ │ └─ Shows process using port
80
- │ │ ├─ Different app using port
81
- │ │ │ └─ Kill: lsof -t -i :PORT | xargs kill
82
- │ │ └─ Old instance of same app
83
- │ │ └─ Kill and restart
84
- │ └─ Port available
85
- │ └─ Start server on this port
86
-
87
- └─ Shows server (server running)
88
- └─ Test HTTP response
89
- └─ curl -f http://localhost:PORT/health
90
- ├─ Success (200 OK)
91
- │ └─ Server is healthy
92
- │ └─ Proceed with testing
93
-
94
- ├─ Connection refused
95
- │ └─ Process running but not accepting connections
96
- │ ├─ Check logs: tail -f server.log
97
- │ ├─ Check if still starting up
98
- │ │ └─ Wait 10-30 seconds and retry
99
- │ └─ Server may have crashed during startup
100
- │ └─ Restart server
101
-
102
- ├─ Timeout
103
- │ └─ Server responding slowly
104
- │ ├─ Check server resource usage
105
- │ │ └─ ps -p PID -o %cpu,%mem
106
- │ ├─ High CPU/memory?
107
- │ │ └─ Server may be overloaded
108
- │ └─ Increase timeout or wait longer
109
-
110
- └─ 404 or other error
111
- └─ Server running but endpoint doesn't exist
112
- ├─ Try root: curl http://localhost:PORT/
113
- └─ Check server routes/endpoints
114
- ```
115
-
116
- ## Test Failure Decision Tree
117
-
118
- ```
119
- Playwright test failed
120
-
121
- What type of error?
122
- ├─ TimeoutError: Timeout 30000ms exceeded
123
- │ └─ What was timing out?
124
- │ ├─ page.goto() timeout
125
- │ │ └─ Server issues
126
- │ │ ├─ Check server is running
127
- │ │ ├─ Check server response time: curl -w "Time: %{time_total}s\n"
128
- │ │ ├─ Increase timeout: goto(url, timeout=60000)
129
- │ │ └─ Check network connectivity
130
- │ │
131
- │ ├─ wait_for_selector() timeout
132
- │ │ └─ Element not appearing
133
- │ │ ├─ Did you wait for networkidle first?
134
- │ │ │ └─ No → Add page.wait_for_load_state('networkidle')
135
- │ │ ├─ Take screenshot to see actual state
136
- │ │ │ └─ page.screenshot(path='/tmp/debug.png', full_page=True)
137
- │ │ ├─ Is selector correct?
138
- │ │ │ └─ Inspect DOM: page.content()
139
- │ │ └─ Is element conditionally rendered?
140
- │ │ └─ Check application state
141
- │ │
142
- │ ├─ page.click() timeout
143
- │ │ └─ Element not clickable
144
- │ │ ├─ Element not visible?
145
- │ │ │ └─ Check: page.locator(selector).is_visible()
146
- │ │ ├─ Element disabled?
147
- │ │ │ └─ Check: page.locator(selector).is_enabled()
148
- │ │ ├─ Element obscured by another element?
149
- │ │ │ └─ Try: page.click(selector, force=True)
150
- │ │ └─ Selector matches multiple elements?
151
- │ │ └─ Make selector more specific
152
- │ │
153
- │ └─ wait_for_load_state() timeout
154
- │ └─ Page never reaches networkidle
155
- │ ├─ Polling API?
156
- │ │ └─ Use 'load' instead of 'networkidle'
157
- │ ├─ WebSocket connection?
158
- │ │ └─ Use 'load' instead of 'networkidle'
159
- │ └─ Long-running requests?
160
- │ └─ Wait for specific element instead
161
-
162
- ├─ Error: Element not found
163
- │ └─ Selector doesn't match
164
- │ ├─ Wrong selector syntax?
165
- │ │ ├─ text= for text content
166
- │ │ ├─ role= for ARIA roles
167
- │ │ ├─ CSS selector for classes/IDs
168
- │ │ └─ xpath= for XPath
169
- │ ├─ Element doesn't exist?
170
- │ │ └─ Inspect DOM: page.content()
171
- │ ├─ Element inside iframe?
172
- │ │ └─ Use: page.frame_locator('iframe').locator(selector)
173
- │ └─ Element created dynamically?
174
- │ └─ Wait for element first: page.wait_for_selector(selector)
175
-
176
- ├─ Error: Element is not visible
177
- │ └─ Element exists but not visible
178
- │ ├─ Display: none or visibility: hidden?
179
- │ │ └─ Check CSS properties
180
- │ ├─ Outside viewport?
181
- │ │ └─ Scroll to element: page.locator(selector).scroll_into_view_if_needed()
182
- │ ├─ Hidden by parent?
183
- │ │ └─ Check parent visibility
184
- │ └─ Animation in progress?
185
- │ └─ Wait for animation: page.wait_for_timeout(500)
186
-
187
- ├─ Error: Element is not enabled
188
- │ └─ Button/input disabled
189
- │ ├─ Check application state
190
- │ │ └─ What conditions enable this element?
191
- │ ├─ Need to fill other fields first?
192
- │ │ └─ Complete prerequisite steps
193
- │ └─ Network request must complete first?
194
- │ └─ Wait for API response
195
-
196
- ├─ Error: Connection refused / ECONNREFUSED
197
- │ └─ Server not accessible
198
- │ └─ Follow Server State Decision Tree above
199
-
200
- ├─ JavaScript error in console
201
- │ └─ Application error
202
- │ ├─ Capture console logs
203
- │ │ └─ page.on("console", lambda msg: print(msg.text))
204
- │ ├─ Check browser console in headed mode
205
- │ │ └─ launch(headless=False)
206
- │ └─ Review application code
207
-
208
- └─ Test assertion failed
209
- └─ Unexpected state
210
- ├─ Take screenshot: page.screenshot(path='/tmp/actual.png')
211
- ├─ Compare with expected state
212
- ├─ Check console for errors
213
- └─ Review test logic
214
- ```
215
-
216
- ## Debugging Decision Tree
217
-
218
- ```
219
- Test is failing, need to debug
220
-
221
- Start with reconnaissance
222
- ├─ Server reconnaissance
223
- │ ├─ lsof -i :PORT -sTCP:LISTEN
224
- │ ├─ curl http://localhost:PORT/health
225
- │ └─ tail -f server.log
226
-
227
- ├─ Visual reconnaissance
228
- │ ├─ page.screenshot(path='/tmp/debug.png', full_page=True)
229
- │ └─ Open screenshot to see actual state
230
-
231
- ├─ DOM reconnaissance
232
- │ ├─ content = page.content()
233
- │ ├─ print(content[:500])
234
- │ └─ Search for expected elements
235
-
236
- └─ Console reconnaissance
237
- ├─ page.on("console", handler)
238
- └─ Check for JavaScript errors
239
-
240
- Analyze reconnaissance data
241
- ├─ Server not running?
242
- │ └─ Follow Server State Decision Tree
243
-
244
- ├─ Page not loaded correctly?
245
- │ ├─ Screenshot shows blank page
246
- │ │ ├─ Network issue?
247
- │ │ ├─ Server returned error?
248
- │ │ └─ Wrong URL?
249
- │ ├─ Screenshot shows loading spinner
250
- │ │ ├─ Wait longer: wait_for_load_state('networkidle')
251
- │ │ └─ Check for blocking requests
252
- │ └─ Screenshot shows error page
253
- │ └─ Check server logs for errors
254
-
255
- ├─ Element not found?
256
- │ ├─ Search DOM content for element
257
- │ │ ├─ Not in DOM → Wait longer or check conditions
258
- │ │ └─ In DOM → Selector is wrong
259
- │ └─ Highlight element to verify
260
- │ └─ page.locator(selector).evaluate('el => el.style.border = "3px solid red"')
261
-
262
- ├─ Console errors?
263
- │ ├─ JavaScript syntax error
264
- │ │ └─ Application bug
265
- │ ├─ Network request failed
266
- │ │ └─ API server issue
267
- │ └─ React/Vue error
268
- │ └─ Component issue
269
-
270
- └─ Still unclear?
271
- └─ Progressive debugging
272
- ├─ Run in headed mode: launch(headless=False)
273
- ├─ Add slow motion: launch(slow_mo=1000)
274
- ├─ Add pause: page.pause()
275
- └─ Enable verbose logging: DEBUG=pw:api python test.py
276
- ```
277
-
278
- ## Selector Strategy Decision Tree
279
-
280
- ```
281
- Need to select an element
282
-
283
- What do you know about the element?
284
- ├─ Has data-testid attribute?
285
- │ └─ USE: page.click('[data-testid="submit"]')
286
- │ → Most stable, won't break with UI changes
287
-
288
- ├─ Has unique text content?
289
- │ └─ USE: page.click('text=Submit Form')
290
- │ → Readable, but text may change
291
- │ ├─ Exact match: 'text="Submit"'
292
- │ └─ Regex: 'text=/submit/i'
293
-
294
- ├─ Has semantic role?
295
- │ └─ USE: page.click('role=button[name="Submit"]')
296
- │ → Accessible, semantic, stable
297
- │ ├─ Common roles: button, link, textbox, checkbox
298
- │ └─ With name: role=button[name="Submit"]
299
-
300
- ├─ Has unique ID?
301
- │ └─ USE: page.click('#submit-button')
302
- │ → Fast, stable if ID doesn't change
303
- │ └─ Avoid dynamically generated IDs
304
-
305
- ├─ Has unique class?
306
- │ └─ USE: page.click('.submit-button')
307
- │ → May break with CSS refactoring
308
- │ └─ Combine with tag: 'button.submit'
309
-
310
- ├─ Need complex selection?
311
- │ └─ USE: CSS combinators
312
- │ ├─ Child: 'form > button'
313
- │ ├─ Descendant: 'form button'
314
- │ ├─ Sibling: '.label + input'
315
- │ └─ Nth child: 'button:nth-child(2)'
316
-
317
- ├─ Nothing else works?
318
- │ └─ USE: XPath (last resort)
319
- │ └─ 'xpath=//button[contains(text(), "Submit")]'
320
-
321
- └─ Multiple matches?
322
- └─ Make selector more specific
323
- ├─ Chain: page.locator('form').locator('button.submit')
324
- ├─ Combine: 'button.submit[type="submit"]'
325
- └─ Use parent context: 'div.modal >> button.submit'
326
- ```
327
-
328
- ## Wait Strategy Decision Tree
329
-
330
- ```
331
- Need to wait for something
332
-
333
- What are you waiting for?
334
- ├─ Page to load
335
- │ └─ What type of page?
336
- │ ├─ Dynamic (React, Vue, Angular)
337
- │ │ └─ USE: page.wait_for_load_state('networkidle')
338
- │ │ → Waits for network requests to finish
339
- │ ├─ Static with images
340
- │ │ └─ USE: page.wait_for_load_state('load')
341
- │ │ → Waits for all resources
342
- │ └─ Server-side rendered
343
- │ └─ USE: page.wait_for_load_state('domcontentloaded')
344
- │ → Waits for HTML to parse
345
-
346
- ├─ Specific element
347
- │ └─ What state?
348
- │ ├─ Element to appear
349
- │ │ └─ USE: page.wait_for_selector('.modal', state='visible')
350
- │ ├─ Element to disappear
351
- │ │ └─ USE: page.wait_for_selector('.loading', state='hidden')
352
- │ ├─ Element to exist in DOM
353
- │ │ └─ USE: page.wait_for_selector('.data', state='attached')
354
- │ └─ Element to be removed from DOM
355
- │ └─ USE: page.wait_for_selector('.temp', state='detached')
356
-
357
- ├─ Network request
358
- │ └─ Specific API call
359
- │ ├─ Wait for response
360
- │ │ └─ USE: with page.expect_response('**/api/data'):
361
- │ ├─ Wait for request
362
- │ │ └─ USE: with page.expect_request('**/api/data'):
363
- │ └─ All network idle
364
- │ └─ USE: page.wait_for_load_state('networkidle')
365
-
366
- ├─ JavaScript condition
367
- │ └─ Custom condition
368
- │ ├─ Variable set
369
- │ │ └─ USE: page.wait_for_function('() => window.appReady')
370
- │ ├─ Element content
371
- │ │ └─ USE: page.wait_for_function('() => document.body.innerText.includes("Ready")')
372
- │ └─ Animation complete
373
- │ └─ USE: page.wait_for_function('() => !document.querySelector(".animated")')
374
-
375
- ├─ Fixed time (avoid if possible)
376
- │ └─ Known delay
377
- │ └─ USE: page.wait_for_timeout(1000)
378
- │ → Only use when no other option works
379
-
380
- └─ Multiple conditions
381
- └─ Combine waits
382
- ├─ Sequential: wait_for_selector() then wait_for_function()
383
- └─ Parallel: Use Promise.all() in async context
384
- ```
385
-
386
- ## Environment Selection Decision Tree
387
-
388
- ```
389
- Setting up test environment
390
-
391
- What environment do you need?
392
- ├─ Local development
393
- │ ├─ Testing during development
394
- │ │ ├─ Server: npm run dev (hot reload)
395
- │ │ ├─ Port: 3000 (dev port)
396
- │ │ └─ Database: Local SQLite/Postgres
397
- │ └─ Quick iteration cycle
398
-
399
- ├─ CI/CD pipeline
400
- │ ├─ Automated testing
401
- │ │ ├─ Server: npm run build && npm start
402
- │ │ ├─ Port: Any available port
403
- │ │ ├─ Database: Test database / fixtures
404
- │ │ └─ Headless: Always true
405
- │ └─ Environment variables from CI secrets
406
-
407
- ├─ Staging
408
- │ ├─ Pre-production testing
409
- │ │ ├─ Server: Remote staging URL
410
- │ │ ├─ Database: Staging database
411
- │ │ └─ Real API keys (staging)
412
- │ └─ Similar to production
413
-
414
- └─ Production (careful!)
415
- ├─ Read-only tests only
416
- ├─ No data modification
417
- └─ Minimal load generation
418
- ```
419
-
420
- ## Testing Approach Decision Tree
421
-
422
- ```
423
- What kind of test do you need?
424
-
425
- ├─ Unit test (single function/component)
426
- │ └─ NOT this skill
427
- │ → Use testing framework (Jest, pytest)
428
-
429
- ├─ Integration test (multiple components)
430
- │ └─ Do components interact via UI?
431
- │ ├─ Yes → Use this skill (Playwright)
432
- │ └─ No → Use API testing or unit tests
433
-
434
- ├─ End-to-end test (full user flow)
435
- │ └─ USE THIS SKILL
436
- │ ├─ Start server(s) with with_server.py
437
- │ ├─ Write Playwright script for user journey
438
- │ └─ Test complete workflow
439
-
440
- ├─ Visual regression test
441
- │ └─ USE THIS SKILL + Screenshot comparison
442
- │ ├─ Capture baseline: page.screenshot()
443
- │ ├─ Capture current: page.screenshot()
444
- │ └─ Compare images (external tool)
445
-
446
- ├─ Performance test
447
- │ └─ What metrics?
448
- │ ├─ Page load time
449
- │ │ └─ Measure: page.goto() timing
450
- │ ├─ API response time
451
- │ │ └─ Monitor: page.on("response")
452
- │ └─ Heavy load
453
- │ → Not this skill, use load testing tool
454
-
455
- └─ Accessibility test
456
- └─ USE THIS SKILL + axe-core
457
- ├─ Inject axe: page.evaluate()
458
- └─ Run audit: Check ARIA, contrast, etc.
459
- ```