moai-adk 0.25.4__py3-none-any.whl → 0.32.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 moai-adk might be problematic. Click here for more details.
- moai_adk/__init__.py +2 -5
- moai_adk/__main__.py +114 -82
- moai_adk/cli/__init__.py +6 -1
- moai_adk/cli/commands/__init__.py +1 -3
- moai_adk/cli/commands/analyze.py +5 -16
- moai_adk/cli/commands/doctor.py +6 -18
- moai_adk/cli/commands/init.py +56 -125
- moai_adk/cli/commands/language.py +14 -35
- moai_adk/cli/commands/status.py +9 -15
- moai_adk/cli/commands/update.py +1555 -190
- moai_adk/cli/prompts/init_prompts.py +112 -56
- moai_adk/cli/spec_status.py +263 -0
- moai_adk/cli/ui/__init__.py +44 -0
- moai_adk/cli/ui/progress.py +422 -0
- moai_adk/cli/ui/prompts.py +389 -0
- moai_adk/cli/ui/theme.py +129 -0
- moai_adk/cli/worktree/__init__.py +27 -0
- moai_adk/cli/worktree/__main__.py +31 -0
- moai_adk/cli/worktree/cli.py +672 -0
- moai_adk/cli/worktree/exceptions.py +89 -0
- moai_adk/cli/worktree/manager.py +490 -0
- moai_adk/cli/worktree/models.py +65 -0
- moai_adk/cli/worktree/registry.py +128 -0
- moai_adk/core/PHASE2_OPTIMIZATIONS.md +467 -0
- moai_adk/core/analysis/session_analyzer.py +17 -56
- moai_adk/core/claude_integration.py +26 -54
- moai_adk/core/command_helpers.py +10 -10
- moai_adk/core/comprehensive_monitoring_system.py +1183 -0
- moai_adk/core/config/auto_spec_config.py +5 -11
- moai_adk/core/config/migration.py +19 -9
- moai_adk/core/config/unified.py +436 -0
- moai_adk/core/context_manager.py +6 -12
- moai_adk/core/enterprise_features.py +1404 -0
- moai_adk/core/error_recovery_system.py +725 -112
- moai_adk/core/event_driven_hook_system.py +1371 -0
- moai_adk/core/git/__init__.py +8 -0
- moai_adk/core/git/branch_manager.py +3 -11
- moai_adk/core/git/checkpoint.py +1 -3
- moai_adk/core/git/conflict_detector.py +413 -0
- moai_adk/core/git/manager.py +91 -1
- moai_adk/core/hooks/post_tool_auto_spec_completion.py +56 -80
- moai_adk/core/input_validation_middleware.py +1006 -0
- moai_adk/core/integration/engine.py +6 -18
- moai_adk/core/integration/integration_tester.py +10 -9
- moai_adk/core/integration/utils.py +1 -1
- moai_adk/core/issue_creator.py +10 -28
- moai_adk/core/jit_context_loader.py +956 -0
- moai_adk/core/jit_enhanced_hook_manager.py +1987 -0
- moai_adk/core/language_config_resolver.py +485 -0
- moai_adk/core/language_validator.py +28 -41
- moai_adk/core/mcp/setup.py +15 -12
- moai_adk/core/merge/__init__.py +9 -0
- moai_adk/core/merge/analyzer.py +481 -0
- moai_adk/core/migration/alfred_to_moai_migrator.py +383 -0
- moai_adk/core/migration/backup_manager.py +78 -9
- moai_adk/core/migration/custom_element_scanner.py +358 -0
- moai_adk/core/migration/file_migrator.py +8 -17
- moai_adk/core/migration/interactive_checkbox_ui.py +488 -0
- moai_adk/core/migration/selective_restorer.py +470 -0
- moai_adk/core/migration/template_utils.py +74 -0
- moai_adk/core/migration/user_selection_ui.py +338 -0
- moai_adk/core/migration/version_detector.py +6 -10
- moai_adk/core/migration/version_migrator.py +3 -3
- moai_adk/core/performance/cache_system.py +8 -10
- moai_adk/core/phase_optimized_hook_scheduler.py +879 -0
- moai_adk/core/project/checker.py +2 -4
- moai_adk/core/project/detector.py +1 -3
- moai_adk/core/project/initializer.py +135 -23
- moai_adk/core/project/phase_executor.py +54 -81
- moai_adk/core/project/validator.py +6 -12
- moai_adk/core/quality/trust_checker.py +9 -27
- moai_adk/core/realtime_monitoring_dashboard.py +1724 -0
- moai_adk/core/robust_json_parser.py +611 -0
- moai_adk/core/rollback_manager.py +73 -148
- moai_adk/core/session_manager.py +10 -26
- moai_adk/core/skill_loading_system.py +579 -0
- moai_adk/core/spec/confidence_scoring.py +31 -100
- moai_adk/core/spec/ears_template_engine.py +351 -286
- moai_adk/core/spec/quality_validator.py +35 -69
- moai_adk/core/spec_status_manager.py +64 -74
- moai_adk/core/template/backup.py +45 -20
- moai_adk/core/template/config.py +112 -39
- moai_adk/core/template/merger.py +11 -19
- moai_adk/core/template/processor.py +253 -149
- moai_adk/core/template_engine.py +73 -40
- moai_adk/core/template_variable_synchronizer.py +417 -0
- moai_adk/core/unified_permission_manager.py +745 -0
- moai_adk/core/user_behavior_analytics.py +851 -0
- moai_adk/core/version_sync.py +429 -0
- moai_adk/foundation/__init__.py +56 -0
- moai_adk/foundation/backend.py +1027 -0
- moai_adk/foundation/database.py +1115 -0
- moai_adk/foundation/devops.py +1585 -0
- moai_adk/foundation/ears.py +431 -0
- moai_adk/foundation/frontend.py +870 -0
- moai_adk/foundation/git/commit_templates.py +4 -12
- moai_adk/foundation/git.py +376 -0
- moai_adk/foundation/langs.py +484 -0
- moai_adk/foundation/ml_ops.py +1162 -0
- moai_adk/foundation/testing.py +1524 -0
- moai_adk/foundation/trust/trust_principles.py +23 -72
- moai_adk/foundation/trust/validation_checklist.py +57 -162
- moai_adk/project/__init__.py +0 -0
- moai_adk/project/configuration.py +1084 -0
- moai_adk/project/documentation.py +566 -0
- moai_adk/project/schema.py +447 -0
- moai_adk/statusline/alfred_detector.py +1 -3
- moai_adk/statusline/config.py +13 -4
- moai_adk/statusline/enhanced_output_style_detector.py +23 -15
- moai_adk/statusline/main.py +51 -15
- moai_adk/statusline/renderer.py +104 -48
- moai_adk/statusline/update_checker.py +3 -9
- moai_adk/statusline/version_reader.py +140 -46
- moai_adk/templates/.claude/agents/moai/ai-nano-banana.md +549 -0
- moai_adk/templates/.claude/agents/moai/builder-agent.md +445 -0
- moai_adk/templates/.claude/agents/moai/builder-command.md +1132 -0
- moai_adk/templates/.claude/agents/moai/builder-skill.md +601 -0
- moai_adk/templates/.claude/agents/moai/expert-backend.md +831 -0
- moai_adk/templates/.claude/agents/moai/expert-database.md +774 -0
- moai_adk/templates/.claude/agents/moai/expert-debug.md +396 -0
- moai_adk/templates/.claude/agents/moai/expert-devops.md +711 -0
- moai_adk/templates/.claude/agents/moai/expert-frontend.md +666 -0
- moai_adk/templates/.claude/agents/moai/expert-security.md +474 -0
- moai_adk/templates/.claude/agents/moai/expert-uiux.md +1038 -0
- moai_adk/templates/.claude/agents/moai/manager-claude-code.md +429 -0
- moai_adk/templates/.claude/agents/moai/manager-docs.md +570 -0
- moai_adk/templates/.claude/agents/moai/manager-git.md +937 -0
- moai_adk/templates/.claude/agents/moai/manager-project.md +891 -0
- moai_adk/templates/.claude/agents/moai/manager-quality.md +598 -0
- moai_adk/templates/.claude/agents/moai/manager-spec.md +713 -0
- moai_adk/templates/.claude/agents/moai/manager-strategy.md +600 -0
- moai_adk/templates/.claude/agents/moai/manager-tdd.md +603 -0
- moai_adk/templates/.claude/agents/moai/mcp-context7.md +369 -0
- moai_adk/templates/.claude/agents/moai/mcp-figma.md +1567 -0
- moai_adk/templates/.claude/agents/moai/mcp-notion.md +749 -0
- moai_adk/templates/.claude/agents/moai/mcp-playwright.md +427 -0
- moai_adk/templates/.claude/agents/moai/mcp-sequential-thinking.md +994 -0
- moai_adk/templates/.claude/commands/moai/0-project.md +1143 -0
- moai_adk/templates/.claude/commands/moai/1-plan.md +1435 -0
- moai_adk/templates/.claude/commands/moai/2-run.md +883 -0
- moai_adk/templates/.claude/commands/moai/3-sync.md +993 -0
- moai_adk/templates/.claude/commands/moai/9-feedback.md +314 -0
- moai_adk/templates/.claude/hooks/__init__.py +8 -0
- moai_adk/templates/.claude/hooks/moai/__init__.py +8 -0
- moai_adk/templates/.claude/hooks/moai/lib/__init__.py +85 -0
- moai_adk/templates/.claude/hooks/moai/lib/checkpoint.py +244 -0
- moai_adk/templates/.claude/hooks/moai/lib/common.py +131 -0
- moai_adk/templates/.claude/hooks/moai/lib/config_manager.py +446 -0
- moai_adk/templates/.claude/hooks/moai/lib/config_validator.py +639 -0
- moai_adk/templates/.claude/hooks/moai/lib/example_config.json +104 -0
- moai_adk/templates/.claude/hooks/moai/lib/git_operations_manager.py +590 -0
- moai_adk/templates/.claude/hooks/moai/lib/language_validator.py +317 -0
- moai_adk/templates/.claude/hooks/moai/lib/models.py +102 -0
- moai_adk/templates/.claude/hooks/moai/lib/path_utils.py +28 -0
- moai_adk/templates/.claude/hooks/moai/lib/project.py +768 -0
- moai_adk/templates/.claude/hooks/moai/lib/test_hooks_improvements.py +443 -0
- moai_adk/templates/.claude/hooks/moai/lib/timeout.py +160 -0
- moai_adk/templates/.claude/hooks/moai/lib/unified_timeout_manager.py +530 -0
- moai_adk/templates/.claude/hooks/moai/session_end__auto_cleanup.py +862 -0
- moai_adk/templates/.claude/hooks/moai/session_start__show_project_info.py +921 -0
- moai_adk/templates/.claude/output-styles/moai/r2d2.md +380 -0
- moai_adk/templates/.claude/output-styles/moai/yoda.md +338 -0
- moai_adk/templates/.claude/settings.json +172 -0
- moai_adk/templates/.claude/skills/moai-docs-generation/SKILL.md +247 -0
- moai_adk/templates/.claude/skills/moai-docs-generation/modules/README.md +44 -0
- moai_adk/templates/.claude/skills/moai-docs-generation/modules/api-documentation.md +130 -0
- moai_adk/templates/.claude/skills/moai-docs-generation/modules/code-documentation.md +152 -0
- moai_adk/templates/.claude/skills/moai-docs-generation/modules/multi-format-output.md +178 -0
- moai_adk/templates/.claude/skills/moai-docs-generation/modules/user-guides.md +147 -0
- moai_adk/templates/.claude/skills/moai-domain-backend/SKILL.md +319 -0
- moai_adk/templates/.claude/skills/moai-domain-database/SKILL.md +320 -0
- moai_adk/templates/.claude/skills/moai-domain-database/modules/README.md +53 -0
- moai_adk/templates/.claude/skills/moai-domain-database/modules/mongodb.md +231 -0
- moai_adk/templates/.claude/skills/moai-domain-database/modules/postgresql.md +169 -0
- moai_adk/templates/.claude/skills/moai-domain-database/modules/redis.md +262 -0
- moai_adk/templates/.claude/skills/moai-domain-frontend/SKILL.md +496 -0
- moai_adk/templates/.claude/skills/moai-domain-uiux/SKILL.md +453 -0
- moai_adk/templates/.claude/skills/moai-domain-uiux/examples.md +560 -0
- moai_adk/templates/.claude/skills/moai-domain-uiux/modules/accessibility-wcag.md +260 -0
- moai_adk/templates/.claude/skills/moai-domain-uiux/modules/component-architecture.md +228 -0
- moai_adk/templates/.claude/skills/moai-domain-uiux/modules/design-system-tokens.md +405 -0
- moai_adk/templates/.claude/skills/moai-domain-uiux/modules/icon-libraries.md +401 -0
- moai_adk/templates/.claude/skills/moai-domain-uiux/modules/theming-system.md +373 -0
- moai_adk/templates/.claude/skills/moai-domain-uiux/reference.md +243 -0
- moai_adk/templates/.claude/skills/moai-formats-data/SKILL.md +491 -0
- moai_adk/templates/.claude/skills/moai-formats-data/modules/README.md +98 -0
- moai_adk/templates/.claude/skills/moai-formats-data/modules/SKILL-MODULARIZATION-TEMPLATE.md +278 -0
- moai_adk/templates/.claude/skills/moai-formats-data/modules/caching-performance.md +459 -0
- moai_adk/templates/.claude/skills/moai-formats-data/modules/data-validation.md +485 -0
- moai_adk/templates/.claude/skills/moai-formats-data/modules/json-optimization.md +374 -0
- moai_adk/templates/.claude/skills/moai-formats-data/modules/toon-encoding.md +308 -0
- moai_adk/templates/.claude/skills/moai-foundation-claude/SKILL.md +201 -0
- moai_adk/templates/.claude/skills/moai-foundation-claude/reference/best-practices-checklist.md +616 -0
- moai_adk/templates/.claude/skills/moai-foundation-claude/reference/claude-code-custom-slash-commands-official.md +729 -0
- moai_adk/templates/.claude/skills/moai-foundation-claude/reference/claude-code-hooks-official.md +560 -0
- moai_adk/templates/.claude/skills/moai-foundation-claude/reference/claude-code-iam-official.md +635 -0
- moai_adk/templates/.claude/skills/moai-foundation-claude/reference/claude-code-memory-official.md +543 -0
- moai_adk/templates/.claude/skills/moai-foundation-claude/reference/claude-code-settings-official.md +663 -0
- moai_adk/templates/.claude/skills/moai-foundation-claude/reference/claude-code-skills-official.md +113 -0
- moai_adk/templates/.claude/skills/moai-foundation-claude/reference/claude-code-sub-agents-official.md +238 -0
- moai_adk/templates/.claude/skills/moai-foundation-claude/reference/complete-configuration-guide.md +175 -0
- moai_adk/templates/.claude/skills/moai-foundation-claude/reference/skill-examples.md +1674 -0
- moai_adk/templates/.claude/skills/moai-foundation-claude/reference/skill-formatting-guide.md +729 -0
- moai_adk/templates/.claude/skills/moai-foundation-claude/reference/sub-agents/sub-agent-examples.md +1513 -0
- moai_adk/templates/.claude/skills/moai-foundation-claude/reference/sub-agents/sub-agent-formatting-guide.md +1086 -0
- moai_adk/templates/.claude/skills/moai-foundation-claude/reference/sub-agents/sub-agent-integration-patterns.md +1100 -0
- moai_adk/templates/.claude/skills/moai-foundation-context/SKILL.md +438 -0
- moai_adk/templates/.claude/skills/moai-foundation-core/SKILL.md +515 -0
- moai_adk/templates/.claude/skills/moai-foundation-core/modules/README.md +296 -0
- moai_adk/templates/.claude/skills/moai-foundation-core/modules/agents-reference.md +346 -0
- moai_adk/templates/.claude/skills/moai-foundation-core/modules/commands-reference.md +432 -0
- moai_adk/templates/.claude/skills/moai-foundation-core/modules/delegation-patterns.md +757 -0
- moai_adk/templates/.claude/skills/moai-foundation-core/modules/execution-rules.md +687 -0
- moai_adk/templates/.claude/skills/moai-foundation-core/modules/modular-system.md +665 -0
- moai_adk/templates/.claude/skills/moai-foundation-core/modules/progressive-disclosure.md +649 -0
- moai_adk/templates/.claude/skills/moai-foundation-core/modules/spec-first-tdd.md +864 -0
- moai_adk/templates/.claude/skills/moai-foundation-core/modules/token-optimization.md +708 -0
- moai_adk/templates/.claude/skills/moai-foundation-core/modules/trust-5-framework.md +981 -0
- moai_adk/templates/.claude/skills/moai-foundation-quality/SKILL.md +362 -0
- moai_adk/templates/.claude/skills/moai-foundation-quality/examples.md +1232 -0
- moai_adk/templates/.claude/skills/moai-foundation-quality/modules/best-practices.md +261 -0
- moai_adk/templates/.claude/skills/moai-foundation-quality/modules/integration-patterns.md +194 -0
- moai_adk/templates/.claude/skills/moai-foundation-quality/modules/proactive-analysis.md +229 -0
- moai_adk/templates/.claude/skills/moai-foundation-quality/modules/trust5-validation.md +169 -0
- moai_adk/templates/.claude/skills/moai-foundation-quality/reference.md +1266 -0
- moai_adk/templates/.claude/skills/moai-foundation-quality/scripts/quality-gate.sh +668 -0
- moai_adk/templates/.claude/skills/moai-foundation-quality/templates/github-actions-quality.yml +481 -0
- moai_adk/templates/.claude/skills/moai-foundation-quality/templates/quality-config.yaml +519 -0
- moai_adk/templates/.claude/skills/moai-integration-mcp/SKILL.md +352 -0
- moai_adk/templates/.claude/skills/moai-integration-mcp/modules/README.md +52 -0
- moai_adk/templates/.claude/skills/moai-integration-mcp/modules/error-handling.md +334 -0
- moai_adk/templates/.claude/skills/moai-integration-mcp/modules/integration-patterns.md +310 -0
- moai_adk/templates/.claude/skills/moai-integration-mcp/modules/security-authentication.md +256 -0
- moai_adk/templates/.claude/skills/moai-integration-mcp/modules/server-architecture.md +253 -0
- moai_adk/templates/.claude/skills/moai-lang-unified/README.md +133 -0
- moai_adk/templates/.claude/skills/moai-lang-unified/SKILL.md +296 -0
- moai_adk/templates/.claude/skills/moai-lang-unified/examples.md +1269 -0
- moai_adk/templates/.claude/skills/moai-lang-unified/reference.md +331 -0
- moai_adk/templates/.claude/skills/moai-library-mermaid/SKILL.md +298 -0
- moai_adk/templates/.claude/skills/moai-library-mermaid/advanced-patterns.md +465 -0
- moai_adk/templates/.claude/skills/moai-library-mermaid/examples.md +270 -0
- moai_adk/templates/.claude/skills/moai-library-mermaid/optimization.md +440 -0
- moai_adk/templates/.claude/skills/moai-library-mermaid/reference.md +228 -0
- moai_adk/templates/.claude/skills/moai-library-nextra/SKILL.md +316 -0
- moai_adk/templates/.claude/skills/moai-library-nextra/advanced-patterns.md +336 -0
- moai_adk/templates/.claude/skills/moai-library-nextra/modules/advanced-deployment-patterns.md +182 -0
- moai_adk/templates/.claude/skills/moai-library-nextra/modules/advanced-patterns.md +17 -0
- moai_adk/templates/.claude/skills/moai-library-nextra/modules/configuration.md +57 -0
- moai_adk/templates/.claude/skills/moai-library-nextra/modules/content-architecture-optimization.md +162 -0
- moai_adk/templates/.claude/skills/moai-library-nextra/modules/deployment.md +52 -0
- moai_adk/templates/.claude/skills/moai-library-nextra/modules/framework-core-configuration.md +186 -0
- moai_adk/templates/.claude/skills/moai-library-nextra/modules/i18n-setup.md +55 -0
- moai_adk/templates/.claude/skills/moai-library-nextra/modules/mdx-components.md +52 -0
- moai_adk/templates/.claude/skills/moai-library-nextra/optimization.md +303 -0
- moai_adk/templates/.claude/skills/moai-library-shadcn/SKILL.md +370 -0
- moai_adk/templates/.claude/skills/moai-library-shadcn/examples.md +575 -0
- moai_adk/templates/.claude/skills/moai-library-shadcn/modules/advanced-patterns.md +394 -0
- moai_adk/templates/.claude/skills/moai-library-shadcn/modules/optimization.md +278 -0
- moai_adk/templates/.claude/skills/moai-library-shadcn/modules/shadcn-components.md +457 -0
- moai_adk/templates/.claude/skills/moai-library-shadcn/modules/shadcn-theming.md +373 -0
- moai_adk/templates/.claude/skills/moai-library-shadcn/reference.md +74 -0
- moai_adk/templates/.claude/skills/moai-platform-baas/README.md +186 -0
- moai_adk/templates/.claude/skills/moai-platform-baas/SKILL.md +290 -0
- moai_adk/templates/.claude/skills/moai-platform-baas/examples.md +1225 -0
- moai_adk/templates/.claude/skills/moai-platform-baas/reference.md +567 -0
- moai_adk/templates/.claude/skills/moai-platform-baas/scripts/provider-selector.py +323 -0
- moai_adk/templates/.claude/skills/moai-platform-baas/templates/stack-config.yaml +204 -0
- moai_adk/templates/.claude/skills/moai-workflow-jit-docs/SKILL.md +446 -0
- moai_adk/templates/.claude/skills/moai-workflow-jit-docs/advanced-patterns.md +379 -0
- moai_adk/templates/.claude/skills/moai-workflow-jit-docs/optimization.md +286 -0
- moai_adk/templates/.claude/skills/moai-workflow-project/README.md +190 -0
- moai_adk/templates/.claude/skills/moai-workflow-project/SKILL.md +387 -0
- moai_adk/templates/.claude/skills/moai-workflow-project/__init__.py +520 -0
- moai_adk/templates/.claude/skills/moai-workflow-project/complete_workflow_demo_fixed.py +574 -0
- moai_adk/templates/.claude/skills/moai-workflow-project/examples/complete_project_setup.py +317 -0
- moai_adk/templates/.claude/skills/moai-workflow-project/examples/complete_workflow_demo.py +663 -0
- moai_adk/templates/.claude/skills/moai-workflow-project/examples/config-migration-example.json +190 -0
- moai_adk/templates/.claude/skills/moai-workflow-project/examples/question-examples.json +135 -0
- moai_adk/templates/.claude/skills/moai-workflow-project/examples/quick_start.py +196 -0
- moai_adk/templates/.claude/skills/moai-workflow-project/modules/__init__.py +17 -0
- moai_adk/templates/.claude/skills/moai-workflow-project/modules/advanced-patterns.md +158 -0
- moai_adk/templates/.claude/skills/moai-workflow-project/modules/ask_user_integration.py +340 -0
- moai_adk/templates/.claude/skills/moai-workflow-project/modules/batch_questions.py +713 -0
- moai_adk/templates/.claude/skills/moai-workflow-project/modules/config_manager.py +538 -0
- moai_adk/templates/.claude/skills/moai-workflow-project/modules/documentation_manager.py +1336 -0
- moai_adk/templates/.claude/skills/moai-workflow-project/modules/language_initializer.py +730 -0
- moai_adk/templates/.claude/skills/moai-workflow-project/modules/migration_manager.py +608 -0
- moai_adk/templates/.claude/skills/moai-workflow-project/modules/template_optimizer.py +1005 -0
- moai_adk/templates/.claude/skills/moai-workflow-project/schemas/config-schema.json +316 -0
- moai_adk/templates/.claude/skills/moai-workflow-project/schemas/tab_schema.json +1362 -0
- moai_adk/templates/.claude/skills/moai-workflow-project/templates/config-template.json +71 -0
- moai_adk/templates/.claude/skills/moai-workflow-project/templates/doc-templates/product-template.md +44 -0
- moai_adk/templates/.claude/skills/moai-workflow-project/templates/doc-templates/structure-template.md +48 -0
- moai_adk/templates/.claude/skills/moai-workflow-project/templates/doc-templates/tech-template.md +71 -0
- moai_adk/templates/.claude/skills/moai-workflow-project/templates/question-templates/config-manager-setup.json +109 -0
- moai_adk/templates/.claude/skills/moai-workflow-project/templates/question-templates/language-initializer.json +228 -0
- moai_adk/templates/.claude/skills/moai-workflow-project/templates/question-templates/menu-project-config.json +130 -0
- moai_adk/templates/.claude/skills/moai-workflow-project/templates/question-templates/project-batch-questions.json +97 -0
- moai_adk/templates/.claude/skills/moai-workflow-project/templates/question-templates/spec-workflow-setup.json +150 -0
- moai_adk/templates/.claude/skills/moai-workflow-project/test_integration_simple.py +436 -0
- moai_adk/templates/.claude/skills/moai-workflow-templates/SKILL.md +374 -0
- moai_adk/templates/.claude/skills/moai-workflow-templates/modules/code-templates.md +124 -0
- moai_adk/templates/.claude/skills/moai-workflow-templates/modules/feedback-templates.md +100 -0
- moai_adk/templates/.claude/skills/moai-workflow-templates/modules/template-optimizer.md +138 -0
- moai_adk/templates/.claude/skills/moai-workflow-testing/LICENSE.txt +202 -0
- moai_adk/templates/.claude/skills/moai-workflow-testing/SKILL.md +453 -0
- moai_adk/templates/.claude/skills/moai-workflow-testing/advanced-patterns.md +576 -0
- moai_adk/templates/.claude/skills/moai-workflow-testing/examples/ai-powered-testing.py +294 -0
- moai_adk/templates/.claude/skills/moai-workflow-testing/examples/console_logging.py +35 -0
- moai_adk/templates/.claude/skills/moai-workflow-testing/examples/element_discovery.py +40 -0
- moai_adk/templates/.claude/skills/moai-workflow-testing/examples/static_html_automation.py +34 -0
- moai_adk/templates/.claude/skills/moai-workflow-testing/modules/README.md +220 -0
- moai_adk/templates/.claude/skills/moai-workflow-testing/modules/ai-debugging.md +845 -0
- moai_adk/templates/.claude/skills/moai-workflow-testing/modules/automated-code-review.md +1416 -0
- moai_adk/templates/.claude/skills/moai-workflow-testing/modules/performance-optimization.md +1234 -0
- moai_adk/templates/.claude/skills/moai-workflow-testing/modules/smart-refactoring.md +1243 -0
- moai_adk/templates/.claude/skills/moai-workflow-testing/modules/tdd-context7.md +1260 -0
- moai_adk/templates/.claude/skills/moai-workflow-testing/optimization.md +505 -0
- moai_adk/templates/.claude/skills/moai-workflow-testing/reference/playwright-best-practices.md +57 -0
- moai_adk/templates/.claude/skills/moai-workflow-testing/scripts/with_server.py +218 -0
- moai_adk/templates/.claude/skills/moai-workflow-testing/templates/alfred-integration.md +376 -0
- moai_adk/templates/.claude/skills/moai-workflow-testing/workflows/enterprise-testing-workflow.py +571 -0
- moai_adk/templates/.claude/skills/moai-worktree/SKILL.md +410 -0
- moai_adk/templates/.claude/skills/moai-worktree/examples.md +606 -0
- moai_adk/templates/.claude/skills/moai-worktree/modules/integration-patterns.md +982 -0
- moai_adk/templates/.claude/skills/moai-worktree/modules/parallel-development.md +778 -0
- moai_adk/templates/.claude/skills/moai-worktree/modules/worktree-commands.md +646 -0
- moai_adk/templates/.claude/skills/moai-worktree/modules/worktree-management.md +782 -0
- moai_adk/templates/.claude/skills/moai-worktree/reference.md +357 -0
- moai_adk/templates/.git-hooks/pre-commit +103 -41
- moai_adk/templates/.git-hooks/pre-push +116 -21
- moai_adk/templates/.github/workflows/ci-universal.yml +513 -0
- moai_adk/templates/.github/workflows/security-secrets-check.yml +179 -0
- moai_adk/templates/.gitignore +184 -44
- moai_adk/templates/.mcp.json +7 -9
- moai_adk/templates/.moai/cache/personalization.json +10 -0
- moai_adk/templates/.moai/config/config.yaml +344 -0
- moai_adk/templates/.moai/config/presets/manual.yaml +28 -0
- moai_adk/templates/.moai/config/presets/personal.yaml +30 -0
- moai_adk/templates/.moai/config/presets/team.yaml +33 -0
- moai_adk/templates/.moai/config/questions/_schema.yaml +79 -0
- moai_adk/templates/.moai/config/questions/tab1-user.yaml +108 -0
- moai_adk/templates/.moai/config/questions/tab2-project.yaml +122 -0
- moai_adk/templates/.moai/config/questions/tab3-git.yaml +542 -0
- moai_adk/templates/.moai/config/questions/tab4-quality.yaml +167 -0
- moai_adk/templates/.moai/config/questions/tab5-system.yaml +152 -0
- moai_adk/templates/.moai/config/sections/git-strategy.yaml +40 -0
- moai_adk/templates/.moai/config/sections/language.yaml +11 -0
- moai_adk/templates/.moai/config/sections/project.yaml +13 -0
- moai_adk/templates/.moai/config/sections/quality.yaml +15 -0
- moai_adk/templates/.moai/config/sections/system.yaml +14 -0
- moai_adk/templates/.moai/config/sections/user.yaml +5 -0
- moai_adk/templates/.moai/config/statusline-config.yaml +86 -0
- moai_adk/templates/.moai/scripts/setup-glm.py +136 -0
- moai_adk/templates/CLAUDE.md +382 -501
- moai_adk/utils/__init__.py +24 -1
- moai_adk/utils/banner.py +7 -10
- moai_adk/utils/common.py +16 -30
- moai_adk/utils/link_validator.py +4 -12
- moai_adk/utils/safe_file_reader.py +2 -6
- moai_adk/utils/timeout.py +160 -0
- moai_adk/utils/toon_utils.py +256 -0
- moai_adk/version.py +22 -0
- moai_adk-0.32.8.dist-info/METADATA +2478 -0
- moai_adk-0.32.8.dist-info/RECORD +396 -0
- {moai_adk-0.25.4.dist-info → moai_adk-0.32.8.dist-info}/WHEEL +1 -1
- {moai_adk-0.25.4.dist-info → moai_adk-0.32.8.dist-info}/entry_points.txt +1 -0
- moai_adk/cli/commands/backup.py +0 -82
- moai_adk/cli/commands/improve_user_experience.py +0 -348
- moai_adk/cli/commands/migrate.py +0 -158
- moai_adk/cli/commands/validate_links.py +0 -118
- moai_adk/templates/.github/workflows/moai-gitflow.yml +0 -413
- moai_adk/templates/.github/workflows/moai-release-create.yml +0 -100
- moai_adk/templates/.github/workflows/moai-release-pipeline.yml +0 -188
- moai_adk/utils/user_experience.py +0 -531
- moai_adk-0.25.4.dist-info/METADATA +0 -2279
- moai_adk-0.25.4.dist-info/RECORD +0 -112
- {moai_adk-0.25.4.dist-info → moai_adk-0.32.8.dist-info}/licenses/LICENSE +0 -0
|
@@ -0,0 +1,505 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: moai-workflow-testing/optimization
|
|
3
|
+
description: Performance optimization, parallel execution, and resource management for Playwright testing
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Playwright Testing Optimization (v5.0.0)
|
|
7
|
+
|
|
8
|
+
## Test Execution Optimization
|
|
9
|
+
|
|
10
|
+
### 1. Parallel Execution Strategy
|
|
11
|
+
|
|
12
|
+
```typescript
|
|
13
|
+
import { defineConfig } from '@playwright/test';
|
|
14
|
+
|
|
15
|
+
export default defineConfig({
|
|
16
|
+
// Global test timeout
|
|
17
|
+
timeout: 30000,
|
|
18
|
+
|
|
19
|
+
// Parallel workers configuration
|
|
20
|
+
workers: process.env.CI ? 1 : 4,
|
|
21
|
+
|
|
22
|
+
// Retry failed tests
|
|
23
|
+
retries: process.env.CI ? 2 : 0,
|
|
24
|
+
|
|
25
|
+
// Reporter configuration
|
|
26
|
+
reporter: [
|
|
27
|
+
['html', { outputFolder: 'playwright-report' }],
|
|
28
|
+
['json', { outputFile: 'test-results.json' }],
|
|
29
|
+
['junit', { outputFile: 'junit-results.xml' }]
|
|
30
|
+
],
|
|
31
|
+
|
|
32
|
+
projects: [
|
|
33
|
+
{
|
|
34
|
+
name: 'chromium',
|
|
35
|
+
use: { ...devices['Desktop Chrome'] },
|
|
36
|
+
// Shard tests across multiple machines
|
|
37
|
+
fullyParallel: true
|
|
38
|
+
},
|
|
39
|
+
{
|
|
40
|
+
name: 'firefox',
|
|
41
|
+
use: { ...devices['Desktop Firefox'] },
|
|
42
|
+
fullyParallel: true
|
|
43
|
+
}
|
|
44
|
+
]
|
|
45
|
+
});
|
|
46
|
+
```
|
|
47
|
+
|
|
48
|
+
### 2. Test Sharding Across Machines
|
|
49
|
+
|
|
50
|
+
```typescript
|
|
51
|
+
// Run on machine 1 (test shards 1-3)
|
|
52
|
+
// npx playwright test --shard=1/3
|
|
53
|
+
|
|
54
|
+
// Run on machine 2 (test shards 4-6)
|
|
55
|
+
// npx playwright test --shard=2/3
|
|
56
|
+
|
|
57
|
+
// Run on machine 3 (test shards 7-10)
|
|
58
|
+
// npx playwright test --shard=3/3
|
|
59
|
+
|
|
60
|
+
// Merge results locally
|
|
61
|
+
// npx playwright merge-reports ./blob-report
|
|
62
|
+
|
|
63
|
+
export default defineConfig({
|
|
64
|
+
// Use blob reporting for merging across shards
|
|
65
|
+
reporter: [['blob', { outputFile: 'blob-report.zip' }]],
|
|
66
|
+
|
|
67
|
+
webServer: {
|
|
68
|
+
command: 'npm run start',
|
|
69
|
+
port: 3000,
|
|
70
|
+
reuseExistingServer: !process.env.CI
|
|
71
|
+
}
|
|
72
|
+
});
|
|
73
|
+
```
|
|
74
|
+
|
|
75
|
+
### 3. Resource Pool Management
|
|
76
|
+
|
|
77
|
+
```typescript
|
|
78
|
+
class BrowserPoolManager {
|
|
79
|
+
private pool: Browser[] = [];
|
|
80
|
+
private activeConnections = 0;
|
|
81
|
+
private maxConnections = 5;
|
|
82
|
+
private queue: (() => Promise<Browser>)[] = [];
|
|
83
|
+
|
|
84
|
+
async getBrowser(): Promise<Browser> {
|
|
85
|
+
if (this.activeConnections >= this.maxConnections) {
|
|
86
|
+
// Wait for browser to become available
|
|
87
|
+
return new Promise((resolve) => {
|
|
88
|
+
this.queue.push(() => {
|
|
89
|
+
this.activeConnections++;
|
|
90
|
+
return this.getAvailableBrowser().then(browser => {
|
|
91
|
+
resolve(browser);
|
|
92
|
+
return browser;
|
|
93
|
+
});
|
|
94
|
+
});
|
|
95
|
+
});
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
this.activeConnections++;
|
|
99
|
+
return this.getAvailableBrowser();
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
private async getAvailableBrowser(): Promise<Browser> {
|
|
103
|
+
if (this.pool.length > 0) {
|
|
104
|
+
return this.pool.pop()!;
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
const playwright = require('playwright');
|
|
108
|
+
return playwright.chromium.launch({
|
|
109
|
+
args: ['--disable-extensions']
|
|
110
|
+
});
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
async releaseBrowser(browser: Browser) {
|
|
114
|
+
this.activeConnections--;
|
|
115
|
+
|
|
116
|
+
if (this.queue.length > 0) {
|
|
117
|
+
const fn = this.queue.shift()!;
|
|
118
|
+
fn();
|
|
119
|
+
} else {
|
|
120
|
+
this.pool.push(browser);
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
async cleanup() {
|
|
125
|
+
for (const browser of this.pool) {
|
|
126
|
+
await browser.close();
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
```
|
|
131
|
+
|
|
132
|
+
## Memory and Performance Optimization
|
|
133
|
+
|
|
134
|
+
### 1. Memory-Efficient Page Management
|
|
135
|
+
|
|
136
|
+
```typescript
|
|
137
|
+
class PagePoolManager {
|
|
138
|
+
private pagePool: Map<string, Page> = new Map();
|
|
139
|
+
private maxPages = 5;
|
|
140
|
+
|
|
141
|
+
async getOrCreatePage(context: BrowserContext): Promise<Page> {
|
|
142
|
+
// Reuse existing pages
|
|
143
|
+
for (const [, page] of this.pagePool) {
|
|
144
|
+
if (!page.isClosed()) {
|
|
145
|
+
return page;
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
|
|
149
|
+
if (this.pagePool.size >= this.maxPages) {
|
|
150
|
+
// Close oldest page
|
|
151
|
+
const oldest = Array.from(this.pagePool.entries())[0];
|
|
152
|
+
await oldest[1].close();
|
|
153
|
+
this.pagePool.delete(oldest[0]);
|
|
154
|
+
}
|
|
155
|
+
|
|
156
|
+
const page = await context.newPage();
|
|
157
|
+
|
|
158
|
+
// Set memory limits
|
|
159
|
+
await page.addInitScript(() => {
|
|
160
|
+
// Clear unnecessary data
|
|
161
|
+
(window as any).localStorage.clear();
|
|
162
|
+
(window as any).sessionStorage.clear();
|
|
163
|
+
});
|
|
164
|
+
|
|
165
|
+
return page;
|
|
166
|
+
}
|
|
167
|
+
|
|
168
|
+
async cleanup() {
|
|
169
|
+
for (const [, page] of this.pagePool) {
|
|
170
|
+
await page.close();
|
|
171
|
+
}
|
|
172
|
+
this.pagePool.clear();
|
|
173
|
+
}
|
|
174
|
+
}
|
|
175
|
+
```
|
|
176
|
+
|
|
177
|
+
### 2. Screenshot and Video Optimization
|
|
178
|
+
|
|
179
|
+
```typescript
|
|
180
|
+
class MediaOptimizer {
|
|
181
|
+
async optimizeScreenshots(testResults: TestResult[]) {
|
|
182
|
+
for (const result of testResults) {
|
|
183
|
+
if (result.screenshotPath) {
|
|
184
|
+
// Compress screenshots to 50% quality
|
|
185
|
+
await sharp(result.screenshotPath)
|
|
186
|
+
.png({ quality: 50, progressive: true })
|
|
187
|
+
.toFile(result.screenshotPath);
|
|
188
|
+
}
|
|
189
|
+
}
|
|
190
|
+
}
|
|
191
|
+
|
|
192
|
+
async optimizeVideos(videoPath: string) {
|
|
193
|
+
// Convert to webm format for smaller file size
|
|
194
|
+
return new Promise((resolve, reject) => {
|
|
195
|
+
ffmpeg(videoPath)
|
|
196
|
+
.output(`${videoPath}.webm`)
|
|
197
|
+
.videoCodec('libvpx-vp9')
|
|
198
|
+
.audioBitrate('64k')
|
|
199
|
+
.on('end', () => resolve(`${videoPath}.webm`))
|
|
200
|
+
.on('error', reject)
|
|
201
|
+
.run();
|
|
202
|
+
});
|
|
203
|
+
}
|
|
204
|
+
|
|
205
|
+
configureRecording() {
|
|
206
|
+
return {
|
|
207
|
+
video: 'retain-on-failure',
|
|
208
|
+
videoSize: { width: 1280, height: 720 },
|
|
209
|
+
videoSnapshotInterval: 500, // 2fps instead of default
|
|
210
|
+
};
|
|
211
|
+
}
|
|
212
|
+
}
|
|
213
|
+
```
|
|
214
|
+
|
|
215
|
+
## Test Optimization Patterns
|
|
216
|
+
|
|
217
|
+
### 1. Smart Test Grouping
|
|
218
|
+
|
|
219
|
+
```typescript
|
|
220
|
+
// Group related tests to share setup
|
|
221
|
+
test.describe('User Authentication', () => {
|
|
222
|
+
test.beforeAll(async () => {
|
|
223
|
+
// Setup test data once for all tests in group
|
|
224
|
+
await setupTestDatabase();
|
|
225
|
+
await createTestUsers();
|
|
226
|
+
});
|
|
227
|
+
|
|
228
|
+
test('login with valid credentials', async ({ page }) => {
|
|
229
|
+
// Uses shared test data
|
|
230
|
+
});
|
|
231
|
+
|
|
232
|
+
test('logout clears session', async ({ page }) => {
|
|
233
|
+
// Uses shared test data
|
|
234
|
+
});
|
|
235
|
+
|
|
236
|
+
test.afterAll(async () => {
|
|
237
|
+
// Cleanup once for all tests
|
|
238
|
+
await cleanupTestDatabase();
|
|
239
|
+
});
|
|
240
|
+
});
|
|
241
|
+
```
|
|
242
|
+
|
|
243
|
+
### 2. Fixture-Based Optimization
|
|
244
|
+
|
|
245
|
+
```typescript
|
|
246
|
+
import { test as base } from '@playwright/test';
|
|
247
|
+
|
|
248
|
+
// Create reusable fixtures
|
|
249
|
+
type TestFixtures = {
|
|
250
|
+
authenticatedPage: Page;
|
|
251
|
+
apiClient: APIClient;
|
|
252
|
+
database: DatabaseConnection;
|
|
253
|
+
};
|
|
254
|
+
|
|
255
|
+
const test = base.extend<TestFixtures>({
|
|
256
|
+
// Fixture with automatic cleanup
|
|
257
|
+
authenticatedPage: async ({ page }, use) => {
|
|
258
|
+
// Setup: Login user
|
|
259
|
+
await page.goto('/login');
|
|
260
|
+
await page.fill('[name="email"]', 'test@example.com');
|
|
261
|
+
await page.fill('[name="password"]', 'password123');
|
|
262
|
+
await page.click('button[type="submit"]');
|
|
263
|
+
await page.waitForNavigation();
|
|
264
|
+
|
|
265
|
+
// Use the page in tests
|
|
266
|
+
await use(page);
|
|
267
|
+
|
|
268
|
+
// Cleanup: Logout
|
|
269
|
+
await page.click('[aria-label="User menu"]');
|
|
270
|
+
await page.click('[aria-label="Logout"]');
|
|
271
|
+
},
|
|
272
|
+
|
|
273
|
+
apiClient: async ({}, use) => {
|
|
274
|
+
const client = new APIClient('http://localhost:3000');
|
|
275
|
+
await client.connect();
|
|
276
|
+
|
|
277
|
+
await use(client);
|
|
278
|
+
|
|
279
|
+
await client.disconnect();
|
|
280
|
+
},
|
|
281
|
+
|
|
282
|
+
database: async ({}, use) => {
|
|
283
|
+
const db = new DatabaseConnection('postgresql://...');
|
|
284
|
+
await db.connect();
|
|
285
|
+
|
|
286
|
+
// Clear test data before each test
|
|
287
|
+
await db.clearTestData();
|
|
288
|
+
|
|
289
|
+
await use(db);
|
|
290
|
+
|
|
291
|
+
await db.disconnect();
|
|
292
|
+
}
|
|
293
|
+
});
|
|
294
|
+
|
|
295
|
+
export { test };
|
|
296
|
+
|
|
297
|
+
// Usage in tests
|
|
298
|
+
test('user can update profile', async ({ authenticatedPage, database }) => {
|
|
299
|
+
// No setup needed - fixtures handle it
|
|
300
|
+
await authenticatedPage.goto('/profile');
|
|
301
|
+
await authenticatedPage.fill('[name="bio"]', 'Updated bio');
|
|
302
|
+
await authenticatedPage.click('button[type="submit"]');
|
|
303
|
+
|
|
304
|
+
// Verify in database
|
|
305
|
+
const user = await database.query('SELECT * FROM users WHERE id = 1');
|
|
306
|
+
expect(user.bio).toBe('Updated bio');
|
|
307
|
+
});
|
|
308
|
+
```
|
|
309
|
+
|
|
310
|
+
## CI/CD Optimization
|
|
311
|
+
|
|
312
|
+
### 1. Smart Test Selection
|
|
313
|
+
|
|
314
|
+
```typescript
|
|
315
|
+
// Run only tests affected by code changes
|
|
316
|
+
import { spawnSync } from 'child_process';
|
|
317
|
+
|
|
318
|
+
function getChangedFiles(): string[] {
|
|
319
|
+
const result = spawnSync('git', ['diff', '--name-only', 'main...HEAD'], {
|
|
320
|
+
encoding: 'utf-8'
|
|
321
|
+
});
|
|
322
|
+
return result.stdout.trim().split('\n');
|
|
323
|
+
}
|
|
324
|
+
|
|
325
|
+
function selectTestsForChanges(changedFiles: string[]): string[] {
|
|
326
|
+
const testMap = {
|
|
327
|
+
'src/auth': 'tests/auth.spec.ts',
|
|
328
|
+
'src/profile': 'tests/profile.spec.ts',
|
|
329
|
+
'src/payments': 'tests/payments.spec.ts'
|
|
330
|
+
};
|
|
331
|
+
|
|
332
|
+
const testsToRun = new Set<string>();
|
|
333
|
+
|
|
334
|
+
for (const file of changedFiles) {
|
|
335
|
+
for (const [srcPath, testFile] of Object.entries(testMap)) {
|
|
336
|
+
if (file.includes(srcPath)) {
|
|
337
|
+
testsToRun.add(testFile);
|
|
338
|
+
}
|
|
339
|
+
}
|
|
340
|
+
}
|
|
341
|
+
|
|
342
|
+
return Array.from(testsToRun);
|
|
343
|
+
}
|
|
344
|
+
|
|
345
|
+
// Usage in CI
|
|
346
|
+
if (process.env.CI) {
|
|
347
|
+
const changedFiles = getChangedFiles();
|
|
348
|
+
const testsToRun = selectTestsForChanges(changedFiles);
|
|
349
|
+
console.log(`Running ${testsToRun.length} affected tests`);
|
|
350
|
+
}
|
|
351
|
+
```
|
|
352
|
+
|
|
353
|
+
### 2. Test Result Caching
|
|
354
|
+
|
|
355
|
+
```typescript
|
|
356
|
+
class TestResultCache {
|
|
357
|
+
async getCachedResults(testHash: string): Promise<TestResult | null> {
|
|
358
|
+
const cacheKey = `test-results-${testHash}`;
|
|
359
|
+
const cached = await redis.get(cacheKey);
|
|
360
|
+
|
|
361
|
+
if (cached) {
|
|
362
|
+
return JSON.parse(cached);
|
|
363
|
+
}
|
|
364
|
+
|
|
365
|
+
return null;
|
|
366
|
+
}
|
|
367
|
+
|
|
368
|
+
async cacheResults(testHash: string, results: TestResult) {
|
|
369
|
+
const cacheKey = `test-results-${testHash}`;
|
|
370
|
+
|
|
371
|
+
// Cache for 24 hours
|
|
372
|
+
await redis.setex(cacheKey, 86400, JSON.stringify(results));
|
|
373
|
+
}
|
|
374
|
+
|
|
375
|
+
generateTestHash(testCode: string, dependencies: string[]): string {
|
|
376
|
+
const hash = crypto
|
|
377
|
+
.createHash('sha256')
|
|
378
|
+
.update(testCode)
|
|
379
|
+
.update(dependencies.join(''))
|
|
380
|
+
.digest('hex');
|
|
381
|
+
|
|
382
|
+
return hash;
|
|
383
|
+
}
|
|
384
|
+
}
|
|
385
|
+
```
|
|
386
|
+
|
|
387
|
+
### 3. Performance Budgets
|
|
388
|
+
|
|
389
|
+
```typescript
|
|
390
|
+
interface PerformanceBudget {
|
|
391
|
+
maxTestDuration: number; // milliseconds
|
|
392
|
+
maxMemoryUsage: number; // MB
|
|
393
|
+
maxNetworkRequests: number;
|
|
394
|
+
allowedRetries: number;
|
|
395
|
+
}
|
|
396
|
+
|
|
397
|
+
const budgets: Record<string, PerformanceBudget> = {
|
|
398
|
+
'unit-test': {
|
|
399
|
+
maxTestDuration: 500,
|
|
400
|
+
maxMemoryUsage: 50,
|
|
401
|
+
maxNetworkRequests: 0,
|
|
402
|
+
allowedRetries: 0
|
|
403
|
+
},
|
|
404
|
+
'integration-test': {
|
|
405
|
+
maxTestDuration: 5000,
|
|
406
|
+
maxMemoryUsage: 200,
|
|
407
|
+
maxNetworkRequests: 5,
|
|
408
|
+
allowedRetries: 1
|
|
409
|
+
},
|
|
410
|
+
'e2e-test': {
|
|
411
|
+
maxTestDuration: 30000,
|
|
412
|
+
maxMemoryUsage: 500,
|
|
413
|
+
maxNetworkRequests: 50,
|
|
414
|
+
allowedRetries: 2
|
|
415
|
+
}
|
|
416
|
+
};
|
|
417
|
+
|
|
418
|
+
async function validatePerformanceBudget(testName: string, metrics: TestMetrics) {
|
|
419
|
+
const budget = budgets[testName] || budgets['e2e-test'];
|
|
420
|
+
const violations: string[] = [];
|
|
421
|
+
|
|
422
|
+
if (metrics.duration > budget.maxTestDuration) {
|
|
423
|
+
violations.push(`Duration ${metrics.duration}ms exceeds ${budget.maxTestDuration}ms`);
|
|
424
|
+
}
|
|
425
|
+
|
|
426
|
+
if (metrics.memoryUsage > budget.maxMemoryUsage) {
|
|
427
|
+
violations.push(`Memory ${metrics.memoryUsage}MB exceeds ${budget.maxMemoryUsage}MB`);
|
|
428
|
+
}
|
|
429
|
+
|
|
430
|
+
if (violations.length > 0) {
|
|
431
|
+
throw new Error(`Performance budget exceeded:\n${violations.join('\n')}`);
|
|
432
|
+
}
|
|
433
|
+
}
|
|
434
|
+
```
|
|
435
|
+
|
|
436
|
+
## Monitoring and Observability
|
|
437
|
+
|
|
438
|
+
### 1. Test Metrics Collection
|
|
439
|
+
|
|
440
|
+
```typescript
|
|
441
|
+
class TestMetricsCollector {
|
|
442
|
+
async collectMetrics(testResult: TestResult) {
|
|
443
|
+
const metrics = {
|
|
444
|
+
testName: testResult.title,
|
|
445
|
+
status: testResult.status,
|
|
446
|
+
duration: testResult.duration,
|
|
447
|
+
retries: testResult.retries,
|
|
448
|
+
memoryUsage: process.memoryUsage().heapUsed / 1024 / 1024,
|
|
449
|
+
browserMetrics: {
|
|
450
|
+
domNodes: await testResult.page?.evaluate(() => document.querySelectorAll('*').length),
|
|
451
|
+
eventListeners: await testResult.page?.evaluate(() => {
|
|
452
|
+
let count = 0;
|
|
453
|
+
for (const elem of document.querySelectorAll('*')) {
|
|
454
|
+
count += getEventListeners(elem).length;
|
|
455
|
+
}
|
|
456
|
+
return count;
|
|
457
|
+
})
|
|
458
|
+
},
|
|
459
|
+
timestamp: new Date().toISOString()
|
|
460
|
+
};
|
|
461
|
+
|
|
462
|
+
// Send to monitoring service
|
|
463
|
+
await sendMetrics(metrics);
|
|
464
|
+
return metrics;
|
|
465
|
+
}
|
|
466
|
+
}
|
|
467
|
+
```
|
|
468
|
+
|
|
469
|
+
### 2. Test Report Generation
|
|
470
|
+
|
|
471
|
+
```typescript
|
|
472
|
+
import { reportPortalClient } from '@reportportal/client-javascript';
|
|
473
|
+
|
|
474
|
+
// Configure ReportPortal integration
|
|
475
|
+
const client = new reportPortalClient({
|
|
476
|
+
endpoint: 'https://rp.example.com',
|
|
477
|
+
project: 'my-project',
|
|
478
|
+
token: process.env.RP_TOKEN
|
|
479
|
+
});
|
|
480
|
+
|
|
481
|
+
// Send test results
|
|
482
|
+
function reportTestResults(results: TestResult[]) {
|
|
483
|
+
for (const result of results) {
|
|
484
|
+
client.startTest({
|
|
485
|
+
name: result.title,
|
|
486
|
+
startTime: result.startTime
|
|
487
|
+
});
|
|
488
|
+
|
|
489
|
+
client.log({
|
|
490
|
+
message: result.error || 'Test passed',
|
|
491
|
+
level: result.status === 'passed' ? 'INFO' : 'ERROR',
|
|
492
|
+
time: new Date()
|
|
493
|
+
});
|
|
494
|
+
|
|
495
|
+
client.finishTest({
|
|
496
|
+
endTime: result.endTime,
|
|
497
|
+
status: result.status === 'passed' ? 'PASSED' : 'FAILED'
|
|
498
|
+
});
|
|
499
|
+
}
|
|
500
|
+
}
|
|
501
|
+
```
|
|
502
|
+
|
|
503
|
+
---
|
|
504
|
+
|
|
505
|
+
Version: 5.0.0 | Last Updated: 2025-11-22 | Enterprise Ready:
|
moai_adk/templates/.claude/skills/moai-workflow-testing/reference/playwright-best-practices.md
ADDED
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
# Playwright Best Practices & Context7 Integration
|
|
2
|
+
|
|
3
|
+
## Official Documentation
|
|
4
|
+
- Playwright Official: https://playwright.dev/
|
|
5
|
+
- Python Documentation: https://playwright.dev/python/
|
|
6
|
+
- API Reference: https://playwright.dev/python/docs/api/class-playwright
|
|
7
|
+
|
|
8
|
+
## Context7 MCP Integration
|
|
9
|
+
- Latest Patterns: Access via `/microsoft/playwright` library ID
|
|
10
|
+
- Version-Specific: Context7 provides version-specific best practices
|
|
11
|
+
- Community Knowledge: Leverages collective testing wisdom
|
|
12
|
+
- Real-Time Updates: Always current with latest Playwright releases
|
|
13
|
+
|
|
14
|
+
## Enterprise Testing Patterns
|
|
15
|
+
### Test Organization
|
|
16
|
+
- Page Object Model: Maintainable test architecture
|
|
17
|
+
- Fixture Pattern: Reusable test setup and teardown
|
|
18
|
+
- Data-Driven Testing: Parameterized test execution
|
|
19
|
+
- Test Tagging: Categorize and filter tests
|
|
20
|
+
|
|
21
|
+
### Cross-Browser Strategy
|
|
22
|
+
- Browser Matrix: Chrome, Firefox, Safari coverage
|
|
23
|
+
- Device Emulation: Mobile and tablet testing
|
|
24
|
+
- Viewport Testing: Responsive design validation
|
|
25
|
+
- Network Conditions: Slow 3G, offline testing
|
|
26
|
+
|
|
27
|
+
### Performance Integration
|
|
28
|
+
- Web Vitals: Core performance metrics
|
|
29
|
+
- Network Monitoring: Request/response analysis
|
|
30
|
+
- Resource Timing: Asset loading optimization
|
|
31
|
+
- Memory Usage: Leak detection and optimization
|
|
32
|
+
|
|
33
|
+
## AI-Enhanced Testing
|
|
34
|
+
### Pattern Recognition
|
|
35
|
+
- UI Element Detection: Smart selector generation
|
|
36
|
+
- Test Flow Analysis: User journey optimization
|
|
37
|
+
- Failure Classification: Intelligent bug categorization
|
|
38
|
+
- Maintenance Prediction: Proactive test updates
|
|
39
|
+
|
|
40
|
+
### Visual Regression
|
|
41
|
+
- AI Comparison: Intelligent diff analysis
|
|
42
|
+
- Ignore Regions: Dynamic content handling
|
|
43
|
+
- Threshold Tuning: Sensitivity optimization
|
|
44
|
+
- Baseline Management: Version control integration
|
|
45
|
+
|
|
46
|
+
## MoAI-ADK Integration
|
|
47
|
+
### Alfred Workflow
|
|
48
|
+
- 4-Step Process: Plan, Generate, Execute, Analyze
|
|
49
|
+
- Agent Coordination: Multi-agent test orchestration
|
|
50
|
+
- Context Sharing: Knowledge base integration
|
|
51
|
+
- Learning Loop: Continuous improvement
|
|
52
|
+
|
|
53
|
+
### Quality Assurance
|
|
54
|
+
- TRUST 5 Principles: Test-driven quality
|
|
55
|
+
- Coverage Analysis: Comprehensive test metrics
|
|
56
|
+
- Automated Validation: Continuous integration
|
|
57
|
+
- Performance Monitoring: Real-time insights
|