claude-mpm 4.25.10__py3-none-any.whl → 5.1.8__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.
- claude_mpm/VERSION +1 -1
- claude_mpm/agents/BASE_PM.md +12 -0
- claude_mpm/agents/PM_INSTRUCTIONS.md +1055 -2230
- claude_mpm/agents/PM_INSTRUCTIONS_TEACH.md +1322 -0
- claude_mpm/agents/WORKFLOW.md +4 -4
- claude_mpm/agents/__init__.py +6 -0
- claude_mpm/agents/agent_loader.py +1 -4
- claude_mpm/agents/base_agent_loader.py +10 -35
- claude_mpm/agents/templates/{circuit_breakers.md → circuit-breakers.md} +576 -66
- claude_mpm/agents/templates/context-management-examples.md +544 -0
- claude_mpm/agents/templates/pr-workflow-examples.md +427 -0
- claude_mpm/agents/templates/research-gate-examples.md +669 -0
- claude_mpm/agents/templates/structured-questions-examples.md +615 -0
- claude_mpm/agents/templates/ticket-completeness-examples.md +139 -0
- claude_mpm/agents/templates/ticketing-examples.md +277 -0
- claude_mpm/cli/__init__.py +28 -3
- claude_mpm/cli/commands/__init__.py +2 -0
- claude_mpm/cli/commands/agent_source.py +774 -0
- claude_mpm/cli/commands/agent_state_manager.py +188 -30
- claude_mpm/cli/commands/agents.py +959 -36
- claude_mpm/cli/commands/agents_cleanup.py +210 -0
- claude_mpm/cli/commands/agents_discover.py +338 -0
- claude_mpm/cli/commands/auto_configure.py +537 -239
- claude_mpm/cli/commands/config.py +7 -4
- claude_mpm/cli/commands/configure.py +924 -45
- claude_mpm/cli/commands/configure_navigation.py +63 -46
- claude_mpm/cli/commands/doctor.py +10 -2
- claude_mpm/cli/commands/local_deploy.py +1 -4
- claude_mpm/cli/commands/postmortem.py +401 -0
- claude_mpm/cli/commands/run.py +1 -39
- claude_mpm/cli/commands/skill_source.py +694 -0
- claude_mpm/cli/commands/skills.py +322 -19
- claude_mpm/cli/executor.py +22 -3
- claude_mpm/cli/interactive/agent_wizard.py +1028 -43
- claude_mpm/cli/parsers/agent_source_parser.py +171 -0
- claude_mpm/cli/parsers/agents_parser.py +256 -4
- claude_mpm/cli/parsers/auto_configure_parser.py +13 -0
- claude_mpm/cli/parsers/base_parser.py +25 -0
- claude_mpm/cli/parsers/config_parser.py +96 -43
- claude_mpm/cli/parsers/skill_source_parser.py +169 -0
- claude_mpm/cli/parsers/skills_parser.py +7 -0
- claude_mpm/cli/parsers/source_parser.py +138 -0
- claude_mpm/cli/startup.py +456 -103
- claude_mpm/cli/startup_display.py +4 -4
- claude_mpm/commands/{mpm-auto-configure.md → mpm-agents-auto-configure.md} +9 -0
- claude_mpm/commands/mpm-agents-detect.md +9 -0
- claude_mpm/commands/{mpm-agents.md → mpm-agents-list.md} +9 -0
- claude_mpm/commands/mpm-agents-recommend.md +9 -0
- claude_mpm/commands/{mpm-config.md → mpm-config-view.md} +9 -0
- claude_mpm/commands/mpm-doctor.md +9 -0
- claude_mpm/commands/mpm-help.md +14 -2
- claude_mpm/commands/mpm-init.md +9 -0
- claude_mpm/commands/mpm-monitor.md +9 -0
- claude_mpm/commands/mpm-postmortem.md +123 -0
- claude_mpm/commands/{mpm-resume.md → mpm-session-resume.md} +9 -0
- claude_mpm/commands/mpm-status.md +9 -0
- claude_mpm/commands/{mpm-organize.md → mpm-ticket-organize.md} +9 -0
- claude_mpm/commands/mpm-ticket-view.md +552 -0
- claude_mpm/commands/mpm-version.md +9 -0
- claude_mpm/commands/mpm.md +10 -0
- claude_mpm/config/agent_presets.py +488 -0
- claude_mpm/config/agent_sources.py +325 -0
- claude_mpm/config/skill_presets.py +392 -0
- claude_mpm/config/skill_sources.py +590 -0
- claude_mpm/constants.py +1 -0
- claude_mpm/core/claude_runner.py +5 -34
- claude_mpm/core/config.py +16 -0
- claude_mpm/core/framework/__init__.py +3 -16
- claude_mpm/core/framework/loaders/file_loader.py +54 -101
- claude_mpm/core/framework/loaders/instruction_loader.py +25 -5
- claude_mpm/core/interactive_session.py +83 -7
- claude_mpm/core/oneshot_session.py +71 -8
- claude_mpm/core/protocols/__init__.py +23 -0
- claude_mpm/core/protocols/runner_protocol.py +103 -0
- claude_mpm/core/protocols/session_protocol.py +131 -0
- claude_mpm/core/shared/singleton_manager.py +11 -4
- claude_mpm/core/system_context.py +38 -0
- claude_mpm/core/unified_config.py +22 -0
- claude_mpm/experimental/cli_enhancements.py +1 -5
- claude_mpm/hooks/claude_hooks/__pycache__/__init__.cpython-313.pyc +0 -0
- claude_mpm/hooks/claude_hooks/__pycache__/event_handlers.cpython-313.pyc +0 -0
- claude_mpm/hooks/claude_hooks/__pycache__/hook_handler.cpython-313.pyc +0 -0
- claude_mpm/hooks/claude_hooks/__pycache__/memory_integration.cpython-313.pyc +0 -0
- claude_mpm/hooks/claude_hooks/__pycache__/response_tracking.cpython-313.pyc +0 -0
- claude_mpm/hooks/claude_hooks/__pycache__/tool_analysis.cpython-313.pyc +0 -0
- claude_mpm/hooks/claude_hooks/memory_integration.py +12 -1
- claude_mpm/hooks/claude_hooks/services/__pycache__/__init__.cpython-313.pyc +0 -0
- claude_mpm/hooks/claude_hooks/services/__pycache__/connection_manager_http.cpython-313.pyc +0 -0
- claude_mpm/hooks/claude_hooks/services/__pycache__/duplicate_detector.cpython-313.pyc +0 -0
- claude_mpm/hooks/claude_hooks/services/__pycache__/state_manager.cpython-313.pyc +0 -0
- claude_mpm/hooks/claude_hooks/services/__pycache__/subagent_processor.cpython-313.pyc +0 -0
- claude_mpm/hooks/failure_learning/__init__.py +2 -8
- claude_mpm/hooks/failure_learning/failure_detection_hook.py +1 -6
- claude_mpm/hooks/failure_learning/fix_detection_hook.py +1 -6
- claude_mpm/hooks/failure_learning/learning_extraction_hook.py +1 -6
- claude_mpm/hooks/kuzu_response_hook.py +1 -5
- claude_mpm/models/git_repository.py +198 -0
- claude_mpm/services/agents/agent_builder.py +45 -9
- claude_mpm/services/agents/agent_preset_service.py +238 -0
- claude_mpm/services/agents/agent_selection_service.py +484 -0
- claude_mpm/services/agents/auto_deploy_index_parser.py +569 -0
- claude_mpm/services/agents/cache_git_manager.py +621 -0
- claude_mpm/services/agents/deployment/agent_deployment.py +126 -2
- claude_mpm/services/agents/deployment/agent_discovery_service.py +105 -73
- claude_mpm/services/agents/deployment/agent_lifecycle_manager.py +1 -5
- claude_mpm/services/agents/deployment/agent_restore_handler.py +1 -4
- claude_mpm/services/agents/deployment/agent_template_builder.py +236 -15
- claude_mpm/services/agents/deployment/agents_directory_resolver.py +101 -15
- claude_mpm/services/agents/deployment/async_agent_deployment.py +2 -1
- claude_mpm/services/agents/deployment/multi_source_deployment_service.py +115 -15
- claude_mpm/services/agents/deployment/refactored_agent_deployment_service.py +1 -4
- claude_mpm/services/agents/deployment/remote_agent_discovery_service.py +363 -0
- claude_mpm/services/agents/deployment/single_agent_deployer.py +2 -2
- claude_mpm/services/agents/deployment/system_instructions_deployer.py +168 -46
- claude_mpm/services/agents/deployment/validation/deployment_validator.py +2 -2
- claude_mpm/services/agents/git_source_manager.py +629 -0
- claude_mpm/services/agents/loading/framework_agent_loader.py +1 -4
- claude_mpm/services/agents/local_template_manager.py +47 -9
- claude_mpm/services/agents/single_tier_deployment_service.py +696 -0
- claude_mpm/services/agents/sources/__init__.py +13 -0
- claude_mpm/services/agents/sources/agent_sync_state.py +516 -0
- claude_mpm/services/agents/sources/git_source_sync_service.py +1087 -0
- claude_mpm/services/agents/startup_sync.py +239 -0
- claude_mpm/services/agents/toolchain_detector.py +474 -0
- claude_mpm/services/analysis/__init__.py +25 -0
- claude_mpm/services/analysis/postmortem_reporter.py +474 -0
- claude_mpm/services/analysis/postmortem_service.py +765 -0
- claude_mpm/services/command_deployment_service.py +200 -6
- claude_mpm/services/core/base.py +7 -2
- claude_mpm/services/core/interfaces/__init__.py +1 -3
- claude_mpm/services/core/interfaces/health.py +1 -4
- claude_mpm/services/core/models/__init__.py +2 -11
- claude_mpm/services/diagnostics/checks/__init__.py +4 -0
- claude_mpm/services/diagnostics/checks/agent_sources_check.py +577 -0
- claude_mpm/services/diagnostics/checks/mcp_services_check.py +7 -15
- claude_mpm/services/diagnostics/checks/skill_sources_check.py +587 -0
- claude_mpm/services/diagnostics/diagnostic_runner.py +9 -0
- claude_mpm/services/diagnostics/doctor_reporter.py +34 -6
- claude_mpm/services/git/__init__.py +21 -0
- claude_mpm/services/git/git_operations_service.py +494 -0
- claude_mpm/services/github/__init__.py +21 -0
- claude_mpm/services/github/github_cli_service.py +397 -0
- claude_mpm/services/infrastructure/monitoring/__init__.py +1 -5
- claude_mpm/services/infrastructure/monitoring/aggregator.py +1 -6
- claude_mpm/services/instructions/__init__.py +9 -0
- claude_mpm/services/instructions/instruction_cache_service.py +374 -0
- claude_mpm/services/local_ops/__init__.py +3 -13
- claude_mpm/services/local_ops/health_checks/__init__.py +1 -3
- claude_mpm/services/local_ops/health_manager.py +1 -4
- claude_mpm/services/mcp_config_manager.py +75 -145
- claude_mpm/services/mcp_gateway/core/process_pool.py +22 -16
- claude_mpm/services/mcp_gateway/server/mcp_gateway.py +1 -6
- claude_mpm/services/mcp_service_verifier.py +6 -3
- claude_mpm/services/monitor/daemon.py +28 -8
- claude_mpm/services/monitor/daemon_manager.py +96 -19
- claude_mpm/services/pr/__init__.py +14 -0
- claude_mpm/services/pr/pr_template_service.py +329 -0
- claude_mpm/services/project/project_organizer.py +4 -0
- claude_mpm/services/runner_configuration_service.py +16 -3
- claude_mpm/services/session_management_service.py +16 -4
- claude_mpm/services/skills/__init__.py +18 -0
- claude_mpm/services/skills/git_skill_source_manager.py +1169 -0
- claude_mpm/services/skills/skill_discovery_service.py +568 -0
- claude_mpm/services/socketio/server/core.py +1 -4
- claude_mpm/services/socketio/server/main.py +1 -3
- claude_mpm/services/unified/deployment_strategies/vercel.py +1 -5
- claude_mpm/services/unified/unified_deployment.py +1 -5
- claude_mpm/services/visualization/__init__.py +1 -5
- claude_mpm/templates/questions/__init__.py +2 -7
- claude_mpm/templates/questions/pr_strategy.py +1 -4
- claude_mpm/templates/questions/project_init.py +1 -4
- claude_mpm/templates/questions/ticket_mgmt.py +1 -4
- claude_mpm/utils/agent_dependency_loader.py +77 -10
- claude_mpm/utils/agent_filters.py +288 -0
- claude_mpm/utils/gitignore.py +3 -0
- claude_mpm/utils/migration.py +372 -0
- claude_mpm/utils/progress.py +387 -0
- {claude_mpm-4.25.10.dist-info → claude_mpm-5.1.8.dist-info}/METADATA +356 -112
- {claude_mpm-4.25.10.dist-info → claude_mpm-5.1.8.dist-info}/RECORD +188 -439
- claude_mpm/agents/templates/agent-manager.json +0 -273
- claude_mpm/agents/templates/agentic-coder-optimizer.json +0 -248
- claude_mpm/agents/templates/api_qa.json +0 -183
- claude_mpm/agents/templates/clerk-ops.json +0 -235
- claude_mpm/agents/templates/code_analyzer.json +0 -101
- claude_mpm/agents/templates/content-agent.json +0 -358
- claude_mpm/agents/templates/dart_engineer.json +0 -307
- claude_mpm/agents/templates/data_engineer.json +0 -225
- claude_mpm/agents/templates/documentation.json +0 -238
- claude_mpm/agents/templates/engineer.json +0 -210
- claude_mpm/agents/templates/gcp_ops_agent.json +0 -253
- claude_mpm/agents/templates/golang_engineer.json +0 -270
- claude_mpm/agents/templates/imagemagick.json +0 -264
- claude_mpm/agents/templates/java_engineer.json +0 -346
- claude_mpm/agents/templates/javascript_engineer_agent.json +0 -380
- claude_mpm/agents/templates/local_ops_agent.json +0 -1840
- claude_mpm/agents/templates/memory_manager.json +0 -158
- claude_mpm/agents/templates/nextjs_engineer.json +0 -285
- claude_mpm/agents/templates/ops.json +0 -185
- claude_mpm/agents/templates/php-engineer.json +0 -287
- claude_mpm/agents/templates/product_owner.json +0 -338
- claude_mpm/agents/templates/project_organizer.json +0 -144
- claude_mpm/agents/templates/prompt-engineer.json +0 -737
- claude_mpm/agents/templates/python_engineer.json +0 -387
- claude_mpm/agents/templates/qa.json +0 -243
- claude_mpm/agents/templates/react_engineer.json +0 -239
- claude_mpm/agents/templates/refactoring_engineer.json +0 -276
- claude_mpm/agents/templates/research.json +0 -258
- claude_mpm/agents/templates/ruby-engineer.json +0 -280
- claude_mpm/agents/templates/rust_engineer.json +0 -275
- claude_mpm/agents/templates/security.json +0 -202
- claude_mpm/agents/templates/svelte-engineer.json +0 -225
- claude_mpm/agents/templates/tauri_engineer.json +0 -274
- claude_mpm/agents/templates/ticketing.json +0 -181
- claude_mpm/agents/templates/typescript_engineer.json +0 -285
- claude_mpm/agents/templates/vercel_ops_agent.json +0 -412
- claude_mpm/agents/templates/version_control.json +0 -159
- claude_mpm/agents/templates/web_qa.json +0 -400
- claude_mpm/agents/templates/web_ui.json +0 -189
- claude_mpm/cli/README.md +0 -253
- claude_mpm/cli/commands/mcp_install_commands.py.backup +0 -284
- claude_mpm/cli/commands/mpm_init/README.md +0 -365
- claude_mpm/cli_module/refactoring_guide.md +0 -253
- claude_mpm/commands/mpm-tickets.md +0 -151
- claude_mpm/config/agent_capabilities.yaml +0 -658
- claude_mpm/config/async_logging_config.yaml +0 -145
- claude_mpm/core/.claude-mpm/logs/hooks_20250730.log +0 -34
- claude_mpm/d2/.gitignore +0 -22
- claude_mpm/d2/ARCHITECTURE_COMPARISON.md +0 -273
- claude_mpm/d2/FLASK_INTEGRATION.md +0 -156
- claude_mpm/d2/IMPLEMENTATION_SUMMARY.md +0 -452
- claude_mpm/d2/QUICKSTART.md +0 -186
- claude_mpm/d2/README.md +0 -232
- claude_mpm/d2/STORE_FIX_SUMMARY.md +0 -167
- claude_mpm/d2/SVELTE5_STORES_GUIDE.md +0 -180
- claude_mpm/d2/TESTING.md +0 -288
- claude_mpm/d2/index.html +0 -118
- claude_mpm/d2/package.json +0 -19
- claude_mpm/d2/src/App.svelte +0 -110
- claude_mpm/d2/src/components/Header.svelte +0 -153
- claude_mpm/d2/src/components/MainContent.svelte +0 -74
- claude_mpm/d2/src/components/Sidebar.svelte +0 -85
- claude_mpm/d2/src/components/tabs/EventsTab.svelte +0 -326
- claude_mpm/d2/src/lib/socketio.js +0 -144
- claude_mpm/d2/src/main.js +0 -7
- claude_mpm/d2/src/stores/events.js +0 -114
- claude_mpm/d2/src/stores/socket.js +0 -108
- claude_mpm/d2/src/stores/theme.js +0 -65
- claude_mpm/d2/svelte.config.js +0 -12
- claude_mpm/d2/vite.config.js +0 -15
- claude_mpm/dashboard/.claude-mpm/memories/README.md +0 -36
- claude_mpm/dashboard/BUILD_NUMBER +0 -1
- claude_mpm/dashboard/README.md +0 -121
- claude_mpm/dashboard/VERSION +0 -1
- claude_mpm/dashboard/react/components/DataInspector/DataInspector.module.css +0 -188
- claude_mpm/dashboard/react/components/DataInspector/DataInspector.tsx +0 -273
- claude_mpm/dashboard/react/components/ErrorBoundary.tsx +0 -75
- claude_mpm/dashboard/react/components/EventViewer/EventViewer.module.css +0 -156
- claude_mpm/dashboard/react/components/EventViewer/EventViewer.tsx +0 -141
- claude_mpm/dashboard/react/components/shared/ConnectionStatus.module.css +0 -38
- claude_mpm/dashboard/react/components/shared/ConnectionStatus.tsx +0 -36
- claude_mpm/dashboard/react/components/shared/FilterBar.module.css +0 -92
- claude_mpm/dashboard/react/components/shared/FilterBar.tsx +0 -89
- claude_mpm/dashboard/react/contexts/DashboardContext.tsx +0 -215
- claude_mpm/dashboard/react/entries/events.tsx +0 -165
- claude_mpm/dashboard/react/hooks/useEvents.ts +0 -191
- claude_mpm/dashboard/react/hooks/useSocket.ts +0 -225
- claude_mpm/dashboard/static/archive/activity_dashboard_fixed.html +0 -248
- claude_mpm/dashboard/static/built/REFACTORING_SUMMARY.md +0 -170
- claude_mpm/dashboard/static/built/assets/events.DjpNxWNo.css +0 -1
- claude_mpm/dashboard/static/built/components/activity-tree.js +0 -2
- claude_mpm/dashboard/static/built/components/activity-tree.js.map +0 -1
- claude_mpm/dashboard/static/built/components/agent-hierarchy.js +0 -777
- claude_mpm/dashboard/static/built/components/agent-inference.js +0 -2
- claude_mpm/dashboard/static/built/components/agent-inference.js.map +0 -1
- claude_mpm/dashboard/static/built/components/build-tracker.js +0 -333
- claude_mpm/dashboard/static/built/components/code-simple.js +0 -857
- claude_mpm/dashboard/static/built/components/code-tree/tree-breadcrumb.js +0 -353
- claude_mpm/dashboard/static/built/components/code-tree/tree-constants.js +0 -235
- claude_mpm/dashboard/static/built/components/code-tree/tree-search.js +0 -409
- claude_mpm/dashboard/static/built/components/code-tree/tree-utils.js +0 -435
- claude_mpm/dashboard/static/built/components/code-tree.js +0 -2
- claude_mpm/dashboard/static/built/components/code-tree.js.map +0 -1
- claude_mpm/dashboard/static/built/components/code-viewer.js +0 -2
- claude_mpm/dashboard/static/built/components/code-viewer.js.map +0 -1
- claude_mpm/dashboard/static/built/components/connection-debug.js +0 -654
- claude_mpm/dashboard/static/built/components/diff-viewer.js +0 -891
- claude_mpm/dashboard/static/built/components/event-processor.js +0 -2
- claude_mpm/dashboard/static/built/components/event-processor.js.map +0 -1
- claude_mpm/dashboard/static/built/components/event-viewer.js +0 -2
- claude_mpm/dashboard/static/built/components/event-viewer.js.map +0 -1
- claude_mpm/dashboard/static/built/components/export-manager.js +0 -2
- claude_mpm/dashboard/static/built/components/export-manager.js.map +0 -1
- claude_mpm/dashboard/static/built/components/file-change-tracker.js +0 -443
- claude_mpm/dashboard/static/built/components/file-change-viewer.js +0 -690
- claude_mpm/dashboard/static/built/components/file-tool-tracker.js +0 -2
- claude_mpm/dashboard/static/built/components/file-tool-tracker.js.map +0 -1
- claude_mpm/dashboard/static/built/components/file-viewer.js +0 -2
- claude_mpm/dashboard/static/built/components/file-viewer.js.map +0 -1
- claude_mpm/dashboard/static/built/components/hud-library-loader.js +0 -2
- claude_mpm/dashboard/static/built/components/hud-library-loader.js.map +0 -1
- claude_mpm/dashboard/static/built/components/hud-manager.js +0 -2
- claude_mpm/dashboard/static/built/components/hud-manager.js.map +0 -1
- claude_mpm/dashboard/static/built/components/hud-visualizer.js +0 -2
- claude_mpm/dashboard/static/built/components/hud-visualizer.js.map +0 -1
- claude_mpm/dashboard/static/built/components/module-viewer.js +0 -2
- claude_mpm/dashboard/static/built/components/module-viewer.js.map +0 -1
- claude_mpm/dashboard/static/built/components/nav-bar.js +0 -145
- claude_mpm/dashboard/static/built/components/page-structure.js +0 -429
- claude_mpm/dashboard/static/built/components/session-manager.js +0 -2
- claude_mpm/dashboard/static/built/components/session-manager.js.map +0 -1
- claude_mpm/dashboard/static/built/components/socket-manager.js +0 -2
- claude_mpm/dashboard/static/built/components/socket-manager.js.map +0 -1
- claude_mpm/dashboard/static/built/components/ui-state-manager.js +0 -2
- claude_mpm/dashboard/static/built/components/ui-state-manager.js.map +0 -1
- claude_mpm/dashboard/static/built/components/unified-data-viewer.js +0 -2
- claude_mpm/dashboard/static/built/components/unified-data-viewer.js.map +0 -1
- claude_mpm/dashboard/static/built/components/working-directory.js +0 -2
- claude_mpm/dashboard/static/built/components/working-directory.js.map +0 -1
- claude_mpm/dashboard/static/built/connection-manager.js +0 -536
- claude_mpm/dashboard/static/built/dashboard.js +0 -2
- claude_mpm/dashboard/static/built/dashboard.js.map +0 -1
- claude_mpm/dashboard/static/built/extension-error-handler.js +0 -164
- claude_mpm/dashboard/static/built/react/events.js +0 -30
- claude_mpm/dashboard/static/built/react/events.js.map +0 -1
- claude_mpm/dashboard/static/built/shared/dom-helpers.js +0 -396
- claude_mpm/dashboard/static/built/shared/event-bus.js +0 -330
- claude_mpm/dashboard/static/built/shared/event-filter-service.js +0 -540
- claude_mpm/dashboard/static/built/shared/logger.js +0 -385
- claude_mpm/dashboard/static/built/shared/page-structure.js +0 -249
- claude_mpm/dashboard/static/built/shared/tooltip-service.js +0 -253
- claude_mpm/dashboard/static/built/socket-client.js +0 -2
- claude_mpm/dashboard/static/built/socket-client.js.map +0 -1
- claude_mpm/dashboard/static/built/tab-isolation-fix.js +0 -185
- claude_mpm/dashboard/static/events.html +0 -607
- claude_mpm/dashboard/static/index.html +0 -635
- claude_mpm/dashboard/static/js/REFACTORING_SUMMARY.md +0 -170
- claude_mpm/dashboard/static/js/shared/dom-helpers.js +0 -396
- claude_mpm/dashboard/static/js/shared/event-bus.js +0 -330
- claude_mpm/dashboard/static/js/shared/logger.js +0 -385
- claude_mpm/dashboard/static/js/shared/tooltip-service.js +0 -253
- claude_mpm/dashboard/static/js/stores/dashboard-store.js +0 -562
- claude_mpm/dashboard/static/legacy/activity.html +0 -736
- claude_mpm/dashboard/static/legacy/agents.html +0 -786
- claude_mpm/dashboard/static/legacy/files.html +0 -747
- claude_mpm/dashboard/static/legacy/tools.html +0 -831
- claude_mpm/dashboard/static/monitors.html +0 -431
- claude_mpm/dashboard/static/navigation-test-results.md +0 -118
- claude_mpm/dashboard/static/production/events.html +0 -659
- claude_mpm/dashboard/static/production/main.html +0 -698
- claude_mpm/dashboard/static/production/monitors.html +0 -483
- claude_mpm/dashboard/static/test-archive/dashboard.html +0 -635
- claude_mpm/dashboard/static/test-archive/debug-events.html +0 -147
- claude_mpm/dashboard/static/test-archive/test-navigation.html +0 -256
- claude_mpm/dashboard/static/test-archive/test-react-exports.html +0 -180
- claude_mpm/dashboard/templates/.claude-mpm/memories/README.md +0 -36
- claude_mpm/dashboard/templates/.claude-mpm/memories/engineer_agent.md +0 -39
- claude_mpm/dashboard/templates/.claude-mpm/memories/version_control_agent.md +0 -38
- claude_mpm/hooks/README.md +0 -143
- claude_mpm/hooks/templates/README.md +0 -180
- claude_mpm/hooks/templates/settings.json.example +0 -147
- claude_mpm/schemas/agent_schema.json +0 -596
- claude_mpm/schemas/frontmatter_schema.json +0 -165
- claude_mpm/services/event_bus/README.md +0 -244
- claude_mpm/services/events/README.md +0 -303
- claude_mpm/services/framework_claude_md_generator/README.md +0 -119
- claude_mpm/services/mcp_gateway/README.md +0 -185
- claude_mpm/services/socketio/handlers/connection.py.backup +0 -217
- claude_mpm/services/socketio/handlers/hook.py.backup +0 -154
- claude_mpm/services/static/.gitkeep +0 -2
- claude_mpm/services/version_control/VERSION +0 -1
- claude_mpm/skills/bundled/.gitkeep +0 -2
- claude_mpm/skills/bundled/collaboration/brainstorming/SKILL.md +0 -79
- claude_mpm/skills/bundled/collaboration/dispatching-parallel-agents/SKILL.md +0 -178
- claude_mpm/skills/bundled/collaboration/dispatching-parallel-agents/references/agent-prompts.md +0 -577
- claude_mpm/skills/bundled/collaboration/dispatching-parallel-agents/references/coordination-patterns.md +0 -467
- claude_mpm/skills/bundled/collaboration/dispatching-parallel-agents/references/examples.md +0 -537
- claude_mpm/skills/bundled/collaboration/dispatching-parallel-agents/references/troubleshooting.md +0 -730
- claude_mpm/skills/bundled/collaboration/git-worktrees.md +0 -317
- claude_mpm/skills/bundled/collaboration/requesting-code-review/SKILL.md +0 -112
- claude_mpm/skills/bundled/collaboration/requesting-code-review/references/code-reviewer-template.md +0 -146
- claude_mpm/skills/bundled/collaboration/requesting-code-review/references/review-examples.md +0 -412
- claude_mpm/skills/bundled/collaboration/stacked-prs.md +0 -251
- claude_mpm/skills/bundled/collaboration/writing-plans/SKILL.md +0 -81
- claude_mpm/skills/bundled/collaboration/writing-plans/references/best-practices.md +0 -362
- claude_mpm/skills/bundled/collaboration/writing-plans/references/plan-structure-templates.md +0 -312
- claude_mpm/skills/bundled/debugging/root-cause-tracing/SKILL.md +0 -152
- claude_mpm/skills/bundled/debugging/root-cause-tracing/find-polluter.sh +0 -63
- claude_mpm/skills/bundled/debugging/root-cause-tracing/references/advanced-techniques.md +0 -668
- claude_mpm/skills/bundled/debugging/root-cause-tracing/references/examples.md +0 -587
- claude_mpm/skills/bundled/debugging/root-cause-tracing/references/integration.md +0 -438
- claude_mpm/skills/bundled/debugging/root-cause-tracing/references/tracing-techniques.md +0 -391
- claude_mpm/skills/bundled/debugging/systematic-debugging/CREATION-LOG.md +0 -119
- claude_mpm/skills/bundled/debugging/systematic-debugging/SKILL.md +0 -148
- claude_mpm/skills/bundled/debugging/systematic-debugging/references/anti-patterns.md +0 -483
- claude_mpm/skills/bundled/debugging/systematic-debugging/references/examples.md +0 -452
- claude_mpm/skills/bundled/debugging/systematic-debugging/references/troubleshooting.md +0 -449
- claude_mpm/skills/bundled/debugging/systematic-debugging/references/workflow.md +0 -411
- claude_mpm/skills/bundled/debugging/systematic-debugging/test-academic.md +0 -14
- claude_mpm/skills/bundled/debugging/systematic-debugging/test-pressure-1.md +0 -58
- claude_mpm/skills/bundled/debugging/systematic-debugging/test-pressure-2.md +0 -68
- claude_mpm/skills/bundled/debugging/systematic-debugging/test-pressure-3.md +0 -69
- claude_mpm/skills/bundled/debugging/verification-before-completion/SKILL.md +0 -131
- claude_mpm/skills/bundled/debugging/verification-before-completion/references/gate-function.md +0 -325
- claude_mpm/skills/bundled/debugging/verification-before-completion/references/integration-and-workflows.md +0 -490
- claude_mpm/skills/bundled/debugging/verification-before-completion/references/red-flags-and-failures.md +0 -425
- claude_mpm/skills/bundled/debugging/verification-before-completion/references/verification-patterns.md +0 -499
- claude_mpm/skills/bundled/infrastructure/env-manager/INTEGRATION.md +0 -611
- claude_mpm/skills/bundled/infrastructure/env-manager/README.md +0 -596
- claude_mpm/skills/bundled/infrastructure/env-manager/SKILL.md +0 -260
- claude_mpm/skills/bundled/infrastructure/env-manager/examples/nextjs-env-structure.md +0 -315
- claude_mpm/skills/bundled/infrastructure/env-manager/references/frameworks.md +0 -436
- claude_mpm/skills/bundled/infrastructure/env-manager/references/security.md +0 -433
- claude_mpm/skills/bundled/infrastructure/env-manager/references/synchronization.md +0 -452
- claude_mpm/skills/bundled/infrastructure/env-manager/references/troubleshooting.md +0 -404
- claude_mpm/skills/bundled/infrastructure/env-manager/references/validation.md +0 -420
- claude_mpm/skills/bundled/main/artifacts-builder/LICENSE.txt +0 -202
- claude_mpm/skills/bundled/main/artifacts-builder/SKILL.md +0 -86
- claude_mpm/skills/bundled/main/artifacts-builder/scripts/bundle-artifact.sh +0 -54
- claude_mpm/skills/bundled/main/artifacts-builder/scripts/init-artifact.sh +0 -322
- claude_mpm/skills/bundled/main/artifacts-builder/scripts/shadcn-components.tar.gz +0 -0
- claude_mpm/skills/bundled/main/internal-comms/LICENSE.txt +0 -202
- claude_mpm/skills/bundled/main/internal-comms/SKILL.md +0 -43
- claude_mpm/skills/bundled/main/internal-comms/examples/3p-updates.md +0 -47
- claude_mpm/skills/bundled/main/internal-comms/examples/company-newsletter.md +0 -65
- claude_mpm/skills/bundled/main/internal-comms/examples/faq-answers.md +0 -30
- claude_mpm/skills/bundled/main/internal-comms/examples/general-comms.md +0 -16
- claude_mpm/skills/bundled/main/mcp-builder/LICENSE.txt +0 -202
- claude_mpm/skills/bundled/main/mcp-builder/SKILL.md +0 -160
- claude_mpm/skills/bundled/main/mcp-builder/reference/design_principles.md +0 -412
- claude_mpm/skills/bundled/main/mcp-builder/reference/evaluation.md +0 -602
- claude_mpm/skills/bundled/main/mcp-builder/reference/mcp_best_practices.md +0 -915
- claude_mpm/skills/bundled/main/mcp-builder/reference/node_mcp_server.md +0 -916
- claude_mpm/skills/bundled/main/mcp-builder/reference/python_mcp_server.md +0 -752
- claude_mpm/skills/bundled/main/mcp-builder/reference/workflow.md +0 -1237
- claude_mpm/skills/bundled/main/mcp-builder/scripts/example_evaluation.xml +0 -22
- claude_mpm/skills/bundled/main/mcp-builder/scripts/requirements.txt +0 -2
- claude_mpm/skills/bundled/main/skill-creator/LICENSE.txt +0 -202
- claude_mpm/skills/bundled/main/skill-creator/SKILL.md +0 -189
- claude_mpm/skills/bundled/main/skill-creator/references/best-practices.md +0 -500
- claude_mpm/skills/bundled/main/skill-creator/references/creation-workflow.md +0 -464
- claude_mpm/skills/bundled/main/skill-creator/references/examples.md +0 -619
- claude_mpm/skills/bundled/main/skill-creator/references/progressive-disclosure.md +0 -437
- claude_mpm/skills/bundled/main/skill-creator/references/skill-structure.md +0 -231
- claude_mpm/skills/bundled/php/espocrm-development/SKILL.md +0 -170
- claude_mpm/skills/bundled/php/espocrm-development/references/architecture.md +0 -602
- claude_mpm/skills/bundled/php/espocrm-development/references/common-tasks.md +0 -821
- claude_mpm/skills/bundled/php/espocrm-development/references/development-workflow.md +0 -742
- claude_mpm/skills/bundled/php/espocrm-development/references/frontend-customization.md +0 -726
- claude_mpm/skills/bundled/php/espocrm-development/references/hooks-and-services.md +0 -764
- claude_mpm/skills/bundled/php/espocrm-development/references/testing-debugging.md +0 -831
- claude_mpm/skills/bundled/react/flexlayout-react.md +0 -742
- claude_mpm/skills/bundled/rust/desktop-applications/SKILL.md +0 -226
- claude_mpm/skills/bundled/rust/desktop-applications/references/architecture-patterns.md +0 -901
- claude_mpm/skills/bundled/rust/desktop-applications/references/native-gui-frameworks.md +0 -901
- claude_mpm/skills/bundled/rust/desktop-applications/references/platform-integration.md +0 -775
- claude_mpm/skills/bundled/rust/desktop-applications/references/state-management.md +0 -937
- claude_mpm/skills/bundled/rust/desktop-applications/references/tauri-framework.md +0 -770
- claude_mpm/skills/bundled/rust/desktop-applications/references/testing-deployment.md +0 -961
- claude_mpm/skills/bundled/tauri/tauri-async-patterns.md +0 -495
- claude_mpm/skills/bundled/tauri/tauri-build-deploy.md +0 -599
- claude_mpm/skills/bundled/tauri/tauri-command-patterns.md +0 -535
- claude_mpm/skills/bundled/tauri/tauri-error-handling.md +0 -613
- claude_mpm/skills/bundled/tauri/tauri-event-system.md +0 -648
- claude_mpm/skills/bundled/tauri/tauri-file-system.md +0 -673
- claude_mpm/skills/bundled/tauri/tauri-frontend-integration.md +0 -767
- claude_mpm/skills/bundled/tauri/tauri-performance.md +0 -669
- claude_mpm/skills/bundled/tauri/tauri-state-management.md +0 -573
- claude_mpm/skills/bundled/tauri/tauri-testing.md +0 -384
- claude_mpm/skills/bundled/tauri/tauri-window-management.md +0 -628
- claude_mpm/skills/bundled/testing/condition-based-waiting/SKILL.md +0 -119
- claude_mpm/skills/bundled/testing/condition-based-waiting/example.ts +0 -158
- claude_mpm/skills/bundled/testing/condition-based-waiting/references/patterns-and-implementation.md +0 -253
- claude_mpm/skills/bundled/testing/test-driven-development/SKILL.md +0 -145
- claude_mpm/skills/bundled/testing/test-driven-development/references/anti-patterns.md +0 -543
- claude_mpm/skills/bundled/testing/test-driven-development/references/examples.md +0 -741
- claude_mpm/skills/bundled/testing/test-driven-development/references/integration.md +0 -470
- claude_mpm/skills/bundled/testing/test-driven-development/references/philosophy.md +0 -458
- claude_mpm/skills/bundled/testing/test-driven-development/references/workflow.md +0 -639
- claude_mpm/skills/bundled/testing/test-quality-inspector/SKILL.md +0 -458
- claude_mpm/skills/bundled/testing/test-quality-inspector/examples/example-inspection-report.md +0 -411
- claude_mpm/skills/bundled/testing/test-quality-inspector/references/assertion-quality.md +0 -317
- claude_mpm/skills/bundled/testing/test-quality-inspector/references/inspection-checklist.md +0 -270
- claude_mpm/skills/bundled/testing/test-quality-inspector/references/red-flags.md +0 -436
- claude_mpm/skills/bundled/testing/testing-anti-patterns/SKILL.md +0 -140
- claude_mpm/skills/bundled/testing/testing-anti-patterns/references/completeness-anti-patterns.md +0 -572
- claude_mpm/skills/bundled/testing/testing-anti-patterns/references/core-anti-patterns.md +0 -411
- claude_mpm/skills/bundled/testing/testing-anti-patterns/references/detection-guide.md +0 -569
- claude_mpm/skills/bundled/testing/testing-anti-patterns/references/tdd-connection.md +0 -695
- claude_mpm/skills/bundled/testing/webapp-testing/LICENSE.txt +0 -202
- claude_mpm/skills/bundled/testing/webapp-testing/SKILL.md +0 -184
- claude_mpm/skills/bundled/testing/webapp-testing/decision-tree.md +0 -459
- claude_mpm/skills/bundled/testing/webapp-testing/playwright-patterns.md +0 -479
- claude_mpm/skills/bundled/testing/webapp-testing/reconnaissance-pattern.md +0 -687
- claude_mpm/skills/bundled/testing/webapp-testing/server-management.md +0 -758
- claude_mpm/skills/bundled/testing/webapp-testing/troubleshooting.md +0 -868
- claude_mpm/templates/questions/EXAMPLES.md +0 -501
- claude_mpm/tools/README_SOCKETIO_DEBUG.md +0 -224
- claude_mpm/tools/code_tree_analyzer/README.md +0 -64
- /claude_mpm/agents/templates/{git_file_tracking.md → git-file-tracking.md} +0 -0
- /claude_mpm/agents/templates/{pm_examples.md → pm-examples.md} +0 -0
- /claude_mpm/agents/templates/{pm_red_flags.md → pm-red-flags.md} +0 -0
- /claude_mpm/agents/templates/{response_format.md → response-format.md} +0 -0
- /claude_mpm/agents/templates/{validation_templates.md → validation-templates.md} +0 -0
- {claude_mpm-4.25.10.dist-info → claude_mpm-5.1.8.dist-info}/WHEEL +0 -0
- {claude_mpm-4.25.10.dist-info → claude_mpm-5.1.8.dist-info}/entry_points.txt +0 -0
- {claude_mpm-4.25.10.dist-info → claude_mpm-5.1.8.dist-info}/licenses/LICENSE +0 -0
- {claude_mpm-4.25.10.dist-info → claude_mpm-5.1.8.dist-info}/top_level.txt +0 -0
|
@@ -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
|
-
```
|