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,218 @@
|
|
|
1
|
+
#!/usr/bin/env python3
|
|
2
|
+
"""
|
|
3
|
+
Start one or more servers, wait for them to be ready, run a command, then clean up.
|
|
4
|
+
|
|
5
|
+
Usage:
|
|
6
|
+
# Single server
|
|
7
|
+
python scripts/with_server.py --server "npm run dev" --port 5173 -- python automation.py
|
|
8
|
+
python scripts/with_server.py --server "npm start" --port 3000 -- python test.py
|
|
9
|
+
|
|
10
|
+
# Multiple servers with working directories
|
|
11
|
+
python scripts/with_server.py \
|
|
12
|
+
--server "python server.py" --port 3000 --cwd backend \
|
|
13
|
+
--server "npm run dev" --port 5173 --cwd frontend \
|
|
14
|
+
-- python test.py
|
|
15
|
+
|
|
16
|
+
Security Note:
|
|
17
|
+
This script uses shell=False to prevent command injection attacks (CWE-78).
|
|
18
|
+
Use --cwd to specify working directories instead of shell operators like 'cd'.
|
|
19
|
+
"""
|
|
20
|
+
|
|
21
|
+
import argparse
|
|
22
|
+
import shlex
|
|
23
|
+
import socket
|
|
24
|
+
import subprocess
|
|
25
|
+
import sys
|
|
26
|
+
import time
|
|
27
|
+
from pathlib import Path
|
|
28
|
+
|
|
29
|
+
|
|
30
|
+
def is_server_ready(port, timeout=30):
|
|
31
|
+
"""Wait for server to be ready by polling the port."""
|
|
32
|
+
start_time = time.time()
|
|
33
|
+
while time.time() - start_time < timeout:
|
|
34
|
+
try:
|
|
35
|
+
with socket.create_connection(("localhost", port), timeout=1):
|
|
36
|
+
return True
|
|
37
|
+
except (socket.error, ConnectionRefusedError):
|
|
38
|
+
time.sleep(0.5)
|
|
39
|
+
return False
|
|
40
|
+
|
|
41
|
+
|
|
42
|
+
def parse_command_safely(cmd_string):
|
|
43
|
+
"""
|
|
44
|
+
Parse a command string into a list for subprocess execution.
|
|
45
|
+
|
|
46
|
+
Uses shlex.split() for safe command parsing to prevent shell injection.
|
|
47
|
+
This handles quoted arguments properly but does NOT support shell operators
|
|
48
|
+
like &&, ||, |, ;, or redirections.
|
|
49
|
+
|
|
50
|
+
Args:
|
|
51
|
+
cmd_string: Command string to parse
|
|
52
|
+
|
|
53
|
+
Returns:
|
|
54
|
+
List of command arguments suitable for subprocess with shell=False
|
|
55
|
+
|
|
56
|
+
Raises:
|
|
57
|
+
ValueError: If command contains unsupported shell operators
|
|
58
|
+
"""
|
|
59
|
+
# Check for shell operators that are not supported
|
|
60
|
+
shell_operators = ["&&", "||", "|", ";", ">", "<", ">>", "<<"]
|
|
61
|
+
for op in shell_operators:
|
|
62
|
+
if op in cmd_string:
|
|
63
|
+
raise ValueError(
|
|
64
|
+
f"Shell operator '{op}' is not supported for security reasons. "
|
|
65
|
+
f"Use --cwd to change working directory instead of 'cd &&'."
|
|
66
|
+
)
|
|
67
|
+
|
|
68
|
+
try:
|
|
69
|
+
return shlex.split(cmd_string)
|
|
70
|
+
except ValueError as e:
|
|
71
|
+
raise ValueError(f"Failed to parse command '{cmd_string}': {e}") from e
|
|
72
|
+
|
|
73
|
+
|
|
74
|
+
def main():
|
|
75
|
+
parser = argparse.ArgumentParser(
|
|
76
|
+
description="Run command with one or more servers",
|
|
77
|
+
formatter_class=argparse.RawDescriptionHelpFormatter,
|
|
78
|
+
epilog="""
|
|
79
|
+
Security:
|
|
80
|
+
This script uses shell=False to prevent command injection attacks (CWE-78).
|
|
81
|
+
Shell operators (&&, ||, |, ;) are not supported for security reasons.
|
|
82
|
+
Use --cwd to specify working directories instead of 'cd &&' patterns.
|
|
83
|
+
|
|
84
|
+
Examples:
|
|
85
|
+
# Single server
|
|
86
|
+
python with_server.py --server "npm run dev" --port 3000 -- pytest
|
|
87
|
+
|
|
88
|
+
# Multiple servers with different working directories
|
|
89
|
+
python with_server.py \\
|
|
90
|
+
--server "python server.py" --port 3000 --cwd backend \\
|
|
91
|
+
--server "npm run dev" --port 5173 --cwd frontend \\
|
|
92
|
+
-- pytest tests/
|
|
93
|
+
""",
|
|
94
|
+
)
|
|
95
|
+
parser.add_argument(
|
|
96
|
+
"--server",
|
|
97
|
+
action="append",
|
|
98
|
+
dest="servers",
|
|
99
|
+
required=True,
|
|
100
|
+
help="Server command (can be repeated)",
|
|
101
|
+
)
|
|
102
|
+
parser.add_argument(
|
|
103
|
+
"--port",
|
|
104
|
+
action="append",
|
|
105
|
+
dest="ports",
|
|
106
|
+
type=int,
|
|
107
|
+
required=True,
|
|
108
|
+
help="Port for each server (must match --server count)",
|
|
109
|
+
)
|
|
110
|
+
parser.add_argument(
|
|
111
|
+
"--cwd",
|
|
112
|
+
action="append",
|
|
113
|
+
dest="cwds",
|
|
114
|
+
default=None,
|
|
115
|
+
help="Working directory for each server (optional, defaults to current directory)",
|
|
116
|
+
)
|
|
117
|
+
parser.add_argument(
|
|
118
|
+
"--timeout",
|
|
119
|
+
type=int,
|
|
120
|
+
default=30,
|
|
121
|
+
help="Timeout in seconds per server (default: 30)",
|
|
122
|
+
)
|
|
123
|
+
parser.add_argument("command", nargs=argparse.REMAINDER, help="Command to run after server(s) ready")
|
|
124
|
+
|
|
125
|
+
args = parser.parse_args()
|
|
126
|
+
|
|
127
|
+
# Remove the '--' separator if present
|
|
128
|
+
if args.command and args.command[0] == "--":
|
|
129
|
+
args.command = args.command[1:]
|
|
130
|
+
|
|
131
|
+
if not args.command:
|
|
132
|
+
print("Error: No command specified to run")
|
|
133
|
+
sys.exit(1)
|
|
134
|
+
|
|
135
|
+
# Parse server configurations
|
|
136
|
+
if len(args.servers) != len(args.ports):
|
|
137
|
+
print("Error: Number of --server and --port arguments must match")
|
|
138
|
+
sys.exit(1)
|
|
139
|
+
|
|
140
|
+
# Handle working directories - default to None (current dir) for each server
|
|
141
|
+
cwds = args.cwds or []
|
|
142
|
+
while len(cwds) < len(args.servers):
|
|
143
|
+
cwds.append(None)
|
|
144
|
+
|
|
145
|
+
if len(cwds) > len(args.servers):
|
|
146
|
+
print("Error: Too many --cwd arguments (must not exceed number of --server arguments)")
|
|
147
|
+
sys.exit(1)
|
|
148
|
+
|
|
149
|
+
servers = []
|
|
150
|
+
for cmd, port, cwd in zip(args.servers, args.ports, cwds):
|
|
151
|
+
# Validate and resolve working directory
|
|
152
|
+
resolved_cwd = None
|
|
153
|
+
if cwd:
|
|
154
|
+
cwd_path = Path(cwd)
|
|
155
|
+
if not cwd_path.exists():
|
|
156
|
+
print(f"Error: Working directory '{cwd}' does not exist")
|
|
157
|
+
sys.exit(1)
|
|
158
|
+
if not cwd_path.is_dir():
|
|
159
|
+
print(f"Error: '{cwd}' is not a directory")
|
|
160
|
+
sys.exit(1)
|
|
161
|
+
resolved_cwd = str(cwd_path.resolve())
|
|
162
|
+
|
|
163
|
+
# Parse command safely
|
|
164
|
+
try:
|
|
165
|
+
cmd_list = parse_command_safely(cmd)
|
|
166
|
+
except ValueError as e:
|
|
167
|
+
print(f"Error: {e}")
|
|
168
|
+
sys.exit(1)
|
|
169
|
+
|
|
170
|
+
servers.append({"cmd": cmd, "cmd_list": cmd_list, "port": port, "cwd": resolved_cwd})
|
|
171
|
+
|
|
172
|
+
server_processes = []
|
|
173
|
+
|
|
174
|
+
try:
|
|
175
|
+
# Start all servers
|
|
176
|
+
for i, server in enumerate(servers):
|
|
177
|
+
cwd_info = f" (cwd: {server['cwd']})" if server["cwd"] else ""
|
|
178
|
+
print(f"Starting server {i + 1}/{len(servers)}: {server['cmd']}{cwd_info}")
|
|
179
|
+
|
|
180
|
+
# Use shell=False with parsed command list to prevent command injection (CWE-78)
|
|
181
|
+
process = subprocess.Popen(
|
|
182
|
+
server["cmd_list"],
|
|
183
|
+
stdout=subprocess.PIPE,
|
|
184
|
+
stderr=subprocess.PIPE,
|
|
185
|
+
cwd=server["cwd"],
|
|
186
|
+
)
|
|
187
|
+
server_processes.append(process)
|
|
188
|
+
|
|
189
|
+
# Wait for this server to be ready
|
|
190
|
+
print(f"Waiting for server on port {server['port']}...")
|
|
191
|
+
if not is_server_ready(server["port"], timeout=args.timeout):
|
|
192
|
+
raise RuntimeError(f"Server failed to start on port {server['port']} within {args.timeout}s")
|
|
193
|
+
|
|
194
|
+
print(f"Server ready on port {server['port']}")
|
|
195
|
+
|
|
196
|
+
print(f"\nAll {len(servers)} server(s) ready")
|
|
197
|
+
|
|
198
|
+
# Run the command
|
|
199
|
+
print(f"Running: {' '.join(args.command)}\n")
|
|
200
|
+
result = subprocess.run(args.command)
|
|
201
|
+
sys.exit(result.returncode)
|
|
202
|
+
|
|
203
|
+
finally:
|
|
204
|
+
# Clean up all servers
|
|
205
|
+
print(f"\nStopping {len(server_processes)} server(s)...")
|
|
206
|
+
for i, process in enumerate(server_processes):
|
|
207
|
+
try:
|
|
208
|
+
process.terminate()
|
|
209
|
+
process.wait(timeout=5)
|
|
210
|
+
except subprocess.TimeoutExpired:
|
|
211
|
+
process.kill()
|
|
212
|
+
process.wait()
|
|
213
|
+
print(f"Server {i + 1} stopped")
|
|
214
|
+
print("All servers stopped")
|
|
215
|
+
|
|
216
|
+
|
|
217
|
+
if __name__ == "__main__":
|
|
218
|
+
main()
|
|
@@ -0,0 +1,376 @@
|
|
|
1
|
+
# Alfred Agent Integration Template
|
|
2
|
+
|
|
3
|
+
## 4-Step Workflow Integration
|
|
4
|
+
|
|
5
|
+
### Step 1: Intent Understanding (User Requirement Analysis)
|
|
6
|
+
```python
|
|
7
|
+
# Pattern for Alfred agent to analyze user requests
|
|
8
|
+
def analyze_user_intent(request: str) -> TestIntent:
|
|
9
|
+
"""
|
|
10
|
+
Analyze user's test request to establish AI test strategy
|
|
11
|
+
|
|
12
|
+
Parameters:
|
|
13
|
+
- request: User request ("Test this web app", "Cross-browser testing needed")
|
|
14
|
+
|
|
15
|
+
Returns:
|
|
16
|
+
- TestIntent: Analyzed test intent and strategy
|
|
17
|
+
"""
|
|
18
|
+
|
|
19
|
+
intent_patterns = {
|
|
20
|
+
'comprehensive_testing': [' ', ' ', ' '],
|
|
21
|
+
'regression_testing': [' ', ' ', ' '],
|
|
22
|
+
'cross_browser': [' ', ' ', ''],
|
|
23
|
+
'performance_testing': [' ', ' ', ''],
|
|
24
|
+
'visual_regression': ['UI ', ' ', ' ']
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
# AI
|
|
28
|
+
analyzed_intent = ai_intent_analyzer.analyze(request, intent_patterns)
|
|
29
|
+
|
|
30
|
+
return TestIntent(
|
|
31
|
+
primary_goal=analyzed_intent['goal'],
|
|
32
|
+
test_types=analyzed_intent['types'],
|
|
33
|
+
priority=analyzed_intent['priority'],
|
|
34
|
+
context=analyzed_intent['context']
|
|
35
|
+
)
|
|
36
|
+
```
|
|
37
|
+
|
|
38
|
+
### Step 2: Plan Creation (AI )
|
|
39
|
+
```python
|
|
40
|
+
# Context7 MCP AI
|
|
41
|
+
async def create_ai_test_plan(intent: TestIntent) -> TestPlan:
|
|
42
|
+
"""
|
|
43
|
+
Context7 MCP AI
|
|
44
|
+
|
|
45
|
+
:
|
|
46
|
+
- Playwright
|
|
47
|
+
- AI
|
|
48
|
+
-
|
|
49
|
+
"""
|
|
50
|
+
|
|
51
|
+
# Context7 Playwright
|
|
52
|
+
latest_patterns = await context7_client.get_library_docs(
|
|
53
|
+
context7_library_id="/microsoft/playwright",
|
|
54
|
+
topic="enterprise testing automation patterns 2025",
|
|
55
|
+
tokens=5000
|
|
56
|
+
)
|
|
57
|
+
|
|
58
|
+
# AI
|
|
59
|
+
ai_strategy = ai_test_generator.create_strategy(
|
|
60
|
+
intent=intent,
|
|
61
|
+
context7_patterns=latest_patterns,
|
|
62
|
+
best_practices=enterprise_patterns
|
|
63
|
+
)
|
|
64
|
+
|
|
65
|
+
return TestPlan(
|
|
66
|
+
strategy=ai_strategy,
|
|
67
|
+
context7_integration=True,
|
|
68
|
+
ai_enhancements=True,
|
|
69
|
+
enterprise_ready=True
|
|
70
|
+
)
|
|
71
|
+
```
|
|
72
|
+
|
|
73
|
+
### Step 3: Task Execution (AI )
|
|
74
|
+
```python
|
|
75
|
+
# AI
|
|
76
|
+
class AITestExecutor:
|
|
77
|
+
"""AI """
|
|
78
|
+
|
|
79
|
+
def __init__(self):
|
|
80
|
+
self.context7_client = Context7Client()
|
|
81
|
+
self.ai_orchestrator = AITestOrchestrator()
|
|
82
|
+
|
|
83
|
+
async def execute_comprehensive_testing(self, test_plan: TestPlan) -> TestResults:
|
|
84
|
+
"""
|
|
85
|
+
Context7 MCP AI
|
|
86
|
+
|
|
87
|
+
:
|
|
88
|
+
1. AI
|
|
89
|
+
2. Context7
|
|
90
|
+
3.
|
|
91
|
+
4. AI
|
|
92
|
+
5.
|
|
93
|
+
"""
|
|
94
|
+
|
|
95
|
+
# Step 1: AI-powered test generation
|
|
96
|
+
smart_tests = await self.ai_orchestrator.generate_smart_tests(test_plan)
|
|
97
|
+
|
|
98
|
+
# Step 2: Context7 pattern application
|
|
99
|
+
enhanced_tests = self.apply_context7_patterns(smart_tests)
|
|
100
|
+
|
|
101
|
+
# Step 3: Execute across browsers
|
|
102
|
+
cross_browser_results = await self.execute_cross_browser(enhanced_tests)
|
|
103
|
+
|
|
104
|
+
# Step 4: Visual regression with AI
|
|
105
|
+
visual_results = await self.ai_visual_regression_test(cross_browser_results)
|
|
106
|
+
|
|
107
|
+
# Step 5: Performance analysis
|
|
108
|
+
performance_results = await self.ai_performance_analysis(visual_results)
|
|
109
|
+
|
|
110
|
+
return TestResults(
|
|
111
|
+
functional=cross_browser_results,
|
|
112
|
+
visual=visual_results,
|
|
113
|
+
performance=performance_results,
|
|
114
|
+
ai_insights=self.generate_ai_insights(performance_results)
|
|
115
|
+
)
|
|
116
|
+
```
|
|
117
|
+
|
|
118
|
+
### Step 4: Report & Analysis (AI )
|
|
119
|
+
```python
|
|
120
|
+
# AI
|
|
121
|
+
async def generate_ai_test_report(results: TestResults) -> AIReport:
|
|
122
|
+
"""
|
|
123
|
+
AI Context7
|
|
124
|
+
|
|
125
|
+
:
|
|
126
|
+
- AI
|
|
127
|
+
- Context7
|
|
128
|
+
-
|
|
129
|
+
-
|
|
130
|
+
"""
|
|
131
|
+
|
|
132
|
+
# AI
|
|
133
|
+
ai_analysis = await ai_analyzer.analyze_test_results(results)
|
|
134
|
+
|
|
135
|
+
# Context7
|
|
136
|
+
context7_validation = await validate_context7_application(results)
|
|
137
|
+
|
|
138
|
+
#
|
|
139
|
+
recommendations = await ai_recommender.generate_recommendations(
|
|
140
|
+
test_results=results,
|
|
141
|
+
ai_analysis=ai_analysis,
|
|
142
|
+
context7_validation=context7_validation
|
|
143
|
+
)
|
|
144
|
+
|
|
145
|
+
return AIReport(
|
|
146
|
+
summary=create_executive_summary(results),
|
|
147
|
+
detailed_analysis=ai_analysis,
|
|
148
|
+
context7_insights=context7_validation,
|
|
149
|
+
action_items=recommendations,
|
|
150
|
+
next_steps=generate_next_steps(recommendations)
|
|
151
|
+
)
|
|
152
|
+
```
|
|
153
|
+
|
|
154
|
+
## Alfred Multi-Agent Coordination
|
|
155
|
+
|
|
156
|
+
###
|
|
157
|
+
```python
|
|
158
|
+
# Alfred
|
|
159
|
+
class AlfredAgentCoordinator:
|
|
160
|
+
"""Alfred """
|
|
161
|
+
|
|
162
|
+
def __init__(self):
|
|
163
|
+
self.debug_agent = "moai-essentials-debug"
|
|
164
|
+
self.perf_agent = "moai-essentials-perf"
|
|
165
|
+
self.review_agent = "moai-essentials-review"
|
|
166
|
+
self.trust_agent = "moai-foundation-trust"
|
|
167
|
+
|
|
168
|
+
async def coordinate_with_debug_agent(self, test_failures: List[TestFailure]) -> DebugAnalysis:
|
|
169
|
+
"""
|
|
170
|
+
|
|
171
|
+
|
|
172
|
+
:
|
|
173
|
+
- AI
|
|
174
|
+
- Context7
|
|
175
|
+
-
|
|
176
|
+
"""
|
|
177
|
+
|
|
178
|
+
debug_request = {
|
|
179
|
+
'failures': test_failures,
|
|
180
|
+
'context': 'webapp_testing',
|
|
181
|
+
'ai_enhanced': True,
|
|
182
|
+
'context7_patterns': True
|
|
183
|
+
}
|
|
184
|
+
|
|
185
|
+
#
|
|
186
|
+
debug_result = await call_agent(self.debug_agent, debug_request)
|
|
187
|
+
|
|
188
|
+
return DebugAnalysis(
|
|
189
|
+
root_causes=debug_result['root_causes'],
|
|
190
|
+
suggested_fixes=debug_result['fixes'],
|
|
191
|
+
confidence_score=debug_result['confidence']
|
|
192
|
+
)
|
|
193
|
+
|
|
194
|
+
async def coordinate_with_performance_agent(self, performance_data: Dict) -> PerformanceOptimization:
|
|
195
|
+
"""
|
|
196
|
+
|
|
197
|
+
|
|
198
|
+
:
|
|
199
|
+
-
|
|
200
|
+
-
|
|
201
|
+
-
|
|
202
|
+
"""
|
|
203
|
+
|
|
204
|
+
perf_request = {
|
|
205
|
+
'performance_data': performance_data,
|
|
206
|
+
'optimization_goals': ['speed', 'efficiency', 'ux'],
|
|
207
|
+
'context7_best_practices': True
|
|
208
|
+
}
|
|
209
|
+
|
|
210
|
+
optimization_result = await call_agent(self.perf_agent, perf_request)
|
|
211
|
+
|
|
212
|
+
return PerformanceOptimization(
|
|
213
|
+
identified_bottlenecks=optimization_result['bottlenecks'],
|
|
214
|
+
optimization_strategies=optimization_result['strategies'],
|
|
215
|
+
expected_improvements=optimization_result['improvements']
|
|
216
|
+
)
|
|
217
|
+
```
|
|
218
|
+
|
|
219
|
+
## Perfect Gentleman
|
|
220
|
+
|
|
221
|
+
### UX
|
|
222
|
+
```python
|
|
223
|
+
class KoreanUXOptimizer:
|
|
224
|
+
"""Perfect Gentleman UX """
|
|
225
|
+
|
|
226
|
+
def __init__(self, conversation_language="ko"):
|
|
227
|
+
self.conversation_language = conversation_language
|
|
228
|
+
self.style_templates = self.load_style_templates()
|
|
229
|
+
|
|
230
|
+
def generate_korean_response(self, test_results: TestResults) -> KoreanResponse:
|
|
231
|
+
"""
|
|
232
|
+
|
|
233
|
+
|
|
234
|
+
:
|
|
235
|
+
-
|
|
236
|
+
-
|
|
237
|
+
-
|
|
238
|
+
"""
|
|
239
|
+
|
|
240
|
+
if self.conversation_language == "ko":
|
|
241
|
+
response_template = self.style_templates['korean_formal']
|
|
242
|
+
|
|
243
|
+
return KoreanResponse(
|
|
244
|
+
greeting=response_template['greeting'],
|
|
245
|
+
summary=self.create_korean_summary(test_results),
|
|
246
|
+
detailed_findings=self.create_korean_findings(test_results),
|
|
247
|
+
recommendations=self.create_korean_recommendations(test_results),
|
|
248
|
+
closing=response_template['closing']
|
|
249
|
+
)
|
|
250
|
+
else:
|
|
251
|
+
return self.generate_english_response(test_results)
|
|
252
|
+
|
|
253
|
+
def create_korean_summary(self, results: TestResults) -> str:
|
|
254
|
+
""" """
|
|
255
|
+
|
|
256
|
+
pass_rate = results.calculate_pass_rate()
|
|
257
|
+
status = "" if pass_rate >= 90 else " " if pass_rate >= 70 else ""
|
|
258
|
+
|
|
259
|
+
summary = f"""
|
|
260
|
+
|
|
261
|
+
|
|
262
|
+
: {pass_rate:.1f}%
|
|
263
|
+
: {status}
|
|
264
|
+
|
|
265
|
+
:
|
|
266
|
+
• {len(results.tests)}
|
|
267
|
+
• : {len(results.passed_tests)}
|
|
268
|
+
• : {len(results.failed_tests)}
|
|
269
|
+
• : {len(results.performance_issues)}
|
|
270
|
+
|
|
271
|
+
AI : {self.get_ai_status_description(results.ai_insights)}
|
|
272
|
+
"""
|
|
273
|
+
|
|
274
|
+
return summary.strip()
|
|
275
|
+
```
|
|
276
|
+
|
|
277
|
+
## TRUST 5
|
|
278
|
+
|
|
279
|
+
###
|
|
280
|
+
```python
|
|
281
|
+
class TRUST5QualityAssurance:
|
|
282
|
+
"""TRUST 5 """
|
|
283
|
+
|
|
284
|
+
async def validate_test_quality(self, test_results: TestResults) -> QualityReport:
|
|
285
|
+
"""
|
|
286
|
+
TRUST 5
|
|
287
|
+
|
|
288
|
+
TRUST 5:
|
|
289
|
+
- Test First:
|
|
290
|
+
- Readable:
|
|
291
|
+
- Unified:
|
|
292
|
+
- Secured:
|
|
293
|
+
- Trackable:
|
|
294
|
+
"""
|
|
295
|
+
|
|
296
|
+
quality_scores = {
|
|
297
|
+
'test_first': self.validate_test_first_principle(test_results),
|
|
298
|
+
'readable': self.validate_test_readability(test_results),
|
|
299
|
+
'unified': self.validate_test_unification(test_results),
|
|
300
|
+
'secured': self.validate_test_security(test_results),
|
|
301
|
+
'trackable': self.validate_test_traceability(test_results)
|
|
302
|
+
}
|
|
303
|
+
|
|
304
|
+
overall_score = sum(quality_scores.values()) / len(quality_scores)
|
|
305
|
+
|
|
306
|
+
return QualityReport(
|
|
307
|
+
individual_scores=quality_scores,
|
|
308
|
+
overall_score=overall_score,
|
|
309
|
+
compliance_level=self.determine_compliance_level(overall_score),
|
|
310
|
+
improvement_recommendations=self.generate_improvement_recommendations(quality_scores)
|
|
311
|
+
)
|
|
312
|
+
```
|
|
313
|
+
|
|
314
|
+
## : Alfred
|
|
315
|
+
|
|
316
|
+
```python
|
|
317
|
+
# Alfred
|
|
318
|
+
async def alfred_complete_testing_workflow(user_request: str):
|
|
319
|
+
"""
|
|
320
|
+
Alfred 4-step AI
|
|
321
|
+
|
|
322
|
+
|
|
323
|
+
"""
|
|
324
|
+
|
|
325
|
+
# Step 1: Intent Understanding
|
|
326
|
+
intent = analyze_user_intent(user_request)
|
|
327
|
+
|
|
328
|
+
# Step 2: Plan Creation (with Context7 + AI)
|
|
329
|
+
test_plan = await create_ai_test_plan(intent)
|
|
330
|
+
|
|
331
|
+
# Step 3: Task Execution (AI-orchestrated)
|
|
332
|
+
test_executor = AITestExecutor()
|
|
333
|
+
results = await test_executor.execute_comprehensive_testing(test_plan)
|
|
334
|
+
|
|
335
|
+
# Step 4: Report & Analysis
|
|
336
|
+
report = await generate_ai_test_report(results)
|
|
337
|
+
|
|
338
|
+
# Multi-agent coordination
|
|
339
|
+
coordinator = AlfredAgentCoordinator()
|
|
340
|
+
|
|
341
|
+
if results.has_failures():
|
|
342
|
+
debug_analysis = await coordinator.coordinate_with_debug_agent(results.failures)
|
|
343
|
+
report.debug_insights = debug_analysis
|
|
344
|
+
|
|
345
|
+
if results.has_performance_issues():
|
|
346
|
+
perf_optimization = await coordinator.coordinate_with_performance_agent(results.performance_data)
|
|
347
|
+
report.performance_optimization = perf_optimization
|
|
348
|
+
|
|
349
|
+
# Quality assurance
|
|
350
|
+
qa_validator = TRUST5QualityAssurance()
|
|
351
|
+
quality_report = await qa_validator.validate_test_quality(results)
|
|
352
|
+
report.quality_assurance = quality_report
|
|
353
|
+
|
|
354
|
+
# Korean UX optimization
|
|
355
|
+
ux_optimizer = KoreanUXOptimizer()
|
|
356
|
+
korean_report = ux_optimizer.generate_korean_response(results)
|
|
357
|
+
|
|
358
|
+
return {
|
|
359
|
+
'technical_report': report,
|
|
360
|
+
'user_friendly_report': korean_report,
|
|
361
|
+
'next_actions': generate_next_actions(report),
|
|
362
|
+
'alfred_workflow_completed': True
|
|
363
|
+
}
|
|
364
|
+
|
|
365
|
+
#
|
|
366
|
+
if __name__ == "__main__":
|
|
367
|
+
#
|
|
368
|
+
user_input = " "
|
|
369
|
+
|
|
370
|
+
# Alfred
|
|
371
|
+
result = await alfred_complete_testing_workflow(user_input)
|
|
372
|
+
|
|
373
|
+
#
|
|
374
|
+
print(" Alfred AI ")
|
|
375
|
+
print(result['user_friendly_report'].summary)
|
|
376
|
+
```
|