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,484 @@
|
|
|
1
|
+
"""
|
|
2
|
+
Programming Language Ecosystem Implementation (moai-foundation-langs).
|
|
3
|
+
|
|
4
|
+
Provides:
|
|
5
|
+
- LanguageVersionManager: Language version detection and validation
|
|
6
|
+
- FrameworkRecommender: Framework suggestions by language
|
|
7
|
+
- PatternAnalyzer: Code pattern recognition and analysis
|
|
8
|
+
- AntiPatternDetector: Anti-pattern detection
|
|
9
|
+
- EcosystemAnalyzer: Language ecosystem analysis
|
|
10
|
+
- PerformanceOptimizer: Performance optimization tips
|
|
11
|
+
|
|
12
|
+
Reference: moai-foundation-langs for modern language patterns and best practices
|
|
13
|
+
"""
|
|
14
|
+
|
|
15
|
+
import re
|
|
16
|
+
from dataclasses import dataclass, field
|
|
17
|
+
from typing import List, Optional
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
@dataclass
|
|
21
|
+
class LanguageInfo:
|
|
22
|
+
"""Language information and ecosystem details."""
|
|
23
|
+
|
|
24
|
+
name: str
|
|
25
|
+
version: str
|
|
26
|
+
is_supported: bool = True
|
|
27
|
+
tier: Optional[str] = None
|
|
28
|
+
frameworks: List[str] = field(default_factory=list)
|
|
29
|
+
features: List[str] = field(default_factory=list)
|
|
30
|
+
|
|
31
|
+
def __contains__(self, key: str) -> bool:
|
|
32
|
+
"""Support 'in' operator for feature checking."""
|
|
33
|
+
return key in self.features
|
|
34
|
+
|
|
35
|
+
|
|
36
|
+
@dataclass
|
|
37
|
+
class Pattern:
|
|
38
|
+
"""Code pattern with recommendations."""
|
|
39
|
+
|
|
40
|
+
pattern_type: str # "best_practice" or "anti_pattern"
|
|
41
|
+
language: str
|
|
42
|
+
description: str
|
|
43
|
+
example: str
|
|
44
|
+
severity: Optional[str] = None # "low", "medium", "high", "critical"
|
|
45
|
+
alternative: Optional[str] = None
|
|
46
|
+
priority: int = 5
|
|
47
|
+
|
|
48
|
+
|
|
49
|
+
@dataclass
|
|
50
|
+
class TestingStrategy:
|
|
51
|
+
"""Testing strategy recommendation."""
|
|
52
|
+
|
|
53
|
+
framework: str
|
|
54
|
+
features: str
|
|
55
|
+
language: str
|
|
56
|
+
examples: List[str] = field(default_factory=list)
|
|
57
|
+
|
|
58
|
+
|
|
59
|
+
class LanguageVersionManager:
|
|
60
|
+
"""Manages language versions and compatibility."""
|
|
61
|
+
|
|
62
|
+
SUPPORTED_LANGUAGES = {
|
|
63
|
+
"Python": {
|
|
64
|
+
"min_version": "3.10",
|
|
65
|
+
"current": "3.13",
|
|
66
|
+
"lts": "3.12",
|
|
67
|
+
"tier": "Tier 1",
|
|
68
|
+
"deprecated_versions": ["2.7", "3.9"],
|
|
69
|
+
},
|
|
70
|
+
"TypeScript": {
|
|
71
|
+
"min_version": "4.5",
|
|
72
|
+
"current": "5.9",
|
|
73
|
+
"tier": "Tier 1",
|
|
74
|
+
"deprecated_versions": [],
|
|
75
|
+
},
|
|
76
|
+
"Go": {
|
|
77
|
+
"min_version": "1.20",
|
|
78
|
+
"current": "1.23",
|
|
79
|
+
"tier": "Tier 1",
|
|
80
|
+
"deprecated_versions": ["1.19"],
|
|
81
|
+
},
|
|
82
|
+
"Rust": {
|
|
83
|
+
"min_version": "1.70",
|
|
84
|
+
"current": "1.77",
|
|
85
|
+
"tier": "Tier 1",
|
|
86
|
+
"deprecated_versions": [],
|
|
87
|
+
},
|
|
88
|
+
"Java": {
|
|
89
|
+
"min_version": "11",
|
|
90
|
+
"current": "23",
|
|
91
|
+
"lts": "21",
|
|
92
|
+
"tier": "Tier 2",
|
|
93
|
+
"deprecated_versions": ["8", "9", "10"],
|
|
94
|
+
},
|
|
95
|
+
"C#": {
|
|
96
|
+
"min_version": "11",
|
|
97
|
+
"current": "12",
|
|
98
|
+
"tier": "Tier 2",
|
|
99
|
+
"deprecated_versions": ["7", "8"],
|
|
100
|
+
},
|
|
101
|
+
"PHP": {
|
|
102
|
+
"min_version": "8.2",
|
|
103
|
+
"current": "8.4",
|
|
104
|
+
"tier": "Tier 2",
|
|
105
|
+
"deprecated_versions": ["5.6", "7.0", "7.1", "7.2"],
|
|
106
|
+
},
|
|
107
|
+
"JavaScript": {
|
|
108
|
+
"min_version": "ES2020",
|
|
109
|
+
"current": "ES2024",
|
|
110
|
+
"tier": "Tier 2",
|
|
111
|
+
"deprecated_versions": ["ES5"],
|
|
112
|
+
},
|
|
113
|
+
"R": {
|
|
114
|
+
"min_version": "4.2",
|
|
115
|
+
"current": "4.4",
|
|
116
|
+
"tier": "Tier 3",
|
|
117
|
+
"deprecated_versions": ["3.x"],
|
|
118
|
+
},
|
|
119
|
+
}
|
|
120
|
+
|
|
121
|
+
def detect(self, language_version_str: str) -> LanguageInfo:
|
|
122
|
+
"""Detect language and version from string."""
|
|
123
|
+
match = re.match(r"(\w+(?:\s+\w+)?)\s+([\d.]+|ES\d{4}|\w+\d+)", language_version_str)
|
|
124
|
+
if not match:
|
|
125
|
+
return LanguageInfo(name="Unknown", version="unknown", is_supported=False)
|
|
126
|
+
|
|
127
|
+
lang_name = match.group(1).strip()
|
|
128
|
+
version = match.group(2)
|
|
129
|
+
|
|
130
|
+
if lang_name not in self.SUPPORTED_LANGUAGES:
|
|
131
|
+
return LanguageInfo(name=lang_name, version=version, is_supported=False)
|
|
132
|
+
|
|
133
|
+
lang_info = self.SUPPORTED_LANGUAGES[lang_name]
|
|
134
|
+
is_supported = self._check_version_support(lang_name, version)
|
|
135
|
+
|
|
136
|
+
tier_value = lang_info.get("tier")
|
|
137
|
+
tier_str: Optional[str] = str(tier_value) if tier_value is not None else None
|
|
138
|
+
|
|
139
|
+
return LanguageInfo(
|
|
140
|
+
name=lang_name,
|
|
141
|
+
version=version,
|
|
142
|
+
is_supported=is_supported,
|
|
143
|
+
tier=tier_str,
|
|
144
|
+
frameworks=[],
|
|
145
|
+
features=[],
|
|
146
|
+
)
|
|
147
|
+
|
|
148
|
+
def _check_version_support(self, language: str, version: str) -> bool:
|
|
149
|
+
"""Check if version is supported."""
|
|
150
|
+
lang_info = self.SUPPORTED_LANGUAGES.get(language, {})
|
|
151
|
+
deprecated = lang_info.get("deprecated_versions", [])
|
|
152
|
+
|
|
153
|
+
# Check for deprecated versions
|
|
154
|
+
for dep_version in deprecated:
|
|
155
|
+
if version.startswith(dep_version):
|
|
156
|
+
return False
|
|
157
|
+
|
|
158
|
+
return True
|
|
159
|
+
|
|
160
|
+
def get_tier(self, language: str) -> Optional[str]:
|
|
161
|
+
"""Get language tier (1, 2, or 3)."""
|
|
162
|
+
tier_value = self.SUPPORTED_LANGUAGES.get(language, {}).get("tier")
|
|
163
|
+
return str(tier_value) if tier_value is not None else None
|
|
164
|
+
|
|
165
|
+
|
|
166
|
+
class FrameworkRecommender:
|
|
167
|
+
"""Recommends frameworks for each programming language."""
|
|
168
|
+
|
|
169
|
+
FRAMEWORKS = {
|
|
170
|
+
"Python": {
|
|
171
|
+
"apis": ["FastAPI", "Django REST Framework"],
|
|
172
|
+
"web": ["Django 5.0", "Starlette"],
|
|
173
|
+
"async": ["asyncio", "Trio"],
|
|
174
|
+
"data": ["Pydantic", "SQLAlchemy 2.0"],
|
|
175
|
+
"testing": ["pytest", "pytest-asyncio"],
|
|
176
|
+
},
|
|
177
|
+
"TypeScript": {
|
|
178
|
+
"frontend": ["Next.js 16", "React 19", "Vue 3.5"],
|
|
179
|
+
"backend": ["tRPC", "NestJS", "Fastify"],
|
|
180
|
+
"data": ["Zod", "Prisma", "TypeORM"],
|
|
181
|
+
"testing": ["Vitest", "Jest"],
|
|
182
|
+
},
|
|
183
|
+
"Go": {
|
|
184
|
+
"web": ["Fiber v3", "Echo", "Chi"],
|
|
185
|
+
"data": ["GORM", "sqlc", "ent"],
|
|
186
|
+
"async": ["goroutines", "channels"],
|
|
187
|
+
"testing": ["testify", "go-testify"],
|
|
188
|
+
},
|
|
189
|
+
"Rust": {
|
|
190
|
+
"web": ["Tokio", "Axum", "Actix-web"],
|
|
191
|
+
"data": ["Sqlx", "Diesel", "Sea-ORM"],
|
|
192
|
+
"testing": ["cargo test", "criterion"],
|
|
193
|
+
},
|
|
194
|
+
"Java": {
|
|
195
|
+
"web": ["Spring Boot 3", "Micronaut", "Quarkus"],
|
|
196
|
+
"testing": ["JUnit 5", "Mockito"],
|
|
197
|
+
},
|
|
198
|
+
}
|
|
199
|
+
|
|
200
|
+
def get_frameworks_for(self, language: str) -> List[str]:
|
|
201
|
+
"""Get framework recommendations for a language."""
|
|
202
|
+
lang_frameworks = self.FRAMEWORKS.get(language, {})
|
|
203
|
+
all_frameworks = []
|
|
204
|
+
for frameworks in lang_frameworks.values():
|
|
205
|
+
all_frameworks.extend(frameworks)
|
|
206
|
+
return all_frameworks
|
|
207
|
+
|
|
208
|
+
def get_frameworks_by_category(self, language: str, category: str) -> List[str]:
|
|
209
|
+
"""Get frameworks for specific category."""
|
|
210
|
+
return self.FRAMEWORKS.get(language, {}).get(category, [])
|
|
211
|
+
|
|
212
|
+
|
|
213
|
+
class PatternAnalyzer:
|
|
214
|
+
"""Analyzes code patterns and identifies best practices."""
|
|
215
|
+
|
|
216
|
+
BEST_PRACTICES = {
|
|
217
|
+
"async": {
|
|
218
|
+
"languages": ["Python", "JavaScript", "TypeScript", "C#"],
|
|
219
|
+
"description": "Async/await pattern for non-blocking I/O",
|
|
220
|
+
},
|
|
221
|
+
"type_hints": {
|
|
222
|
+
"languages": ["Python", "TypeScript", "Go", "Rust", "Java"],
|
|
223
|
+
"description": "Type hints for better code clarity and safety",
|
|
224
|
+
},
|
|
225
|
+
"error_handling": {
|
|
226
|
+
"languages": ["Go", "Rust", "Python"],
|
|
227
|
+
"description": "Proper error handling with Result/Option types",
|
|
228
|
+
},
|
|
229
|
+
"dependency_injection": {
|
|
230
|
+
"languages": ["Python", "Java", "C#"],
|
|
231
|
+
"description": "Dependency injection for loose coupling",
|
|
232
|
+
},
|
|
233
|
+
}
|
|
234
|
+
|
|
235
|
+
def identify_pattern(self, code: str, language: Optional[str] = None) -> Optional[Pattern]:
|
|
236
|
+
"""Identify pattern type and return Pattern object."""
|
|
237
|
+
code_lower = code.lower()
|
|
238
|
+
|
|
239
|
+
# Async/await pattern
|
|
240
|
+
if any(kw in code_lower for kw in ["async ", "await ", "async def", "async fn"]):
|
|
241
|
+
return Pattern(
|
|
242
|
+
pattern_type="best_practice",
|
|
243
|
+
language=language or "Multi-language",
|
|
244
|
+
description="Async/await pattern for non-blocking I/O",
|
|
245
|
+
example=code,
|
|
246
|
+
priority=9,
|
|
247
|
+
)
|
|
248
|
+
|
|
249
|
+
# Type hints (Python, TypeScript)
|
|
250
|
+
if (":" in code and "->" in code) or ("type " in code_lower) or ("interface " in code_lower):
|
|
251
|
+
return Pattern(
|
|
252
|
+
pattern_type="best_practice",
|
|
253
|
+
language=language or "Python/TypeScript",
|
|
254
|
+
description="Type hints/annotations for type safety",
|
|
255
|
+
example=code,
|
|
256
|
+
priority=8,
|
|
257
|
+
)
|
|
258
|
+
|
|
259
|
+
# Parameterized queries
|
|
260
|
+
if "?" in code or "param" in code_lower or "prepare" in code_lower:
|
|
261
|
+
return Pattern(
|
|
262
|
+
pattern_type="best_practice",
|
|
263
|
+
language=language or "Multi-language",
|
|
264
|
+
description="Parameterized queries for SQL safety",
|
|
265
|
+
example=code,
|
|
266
|
+
priority=10,
|
|
267
|
+
)
|
|
268
|
+
|
|
269
|
+
return None
|
|
270
|
+
|
|
271
|
+
|
|
272
|
+
class AntiPatternDetector:
|
|
273
|
+
"""Detects anti-patterns and code smells."""
|
|
274
|
+
|
|
275
|
+
ANTI_PATTERNS = {
|
|
276
|
+
"callback_hell": {
|
|
277
|
+
"keywords": ["callback", "=>"],
|
|
278
|
+
"language": "JavaScript",
|
|
279
|
+
"severity": "high",
|
|
280
|
+
"alternative": "Use async/await or Promises",
|
|
281
|
+
},
|
|
282
|
+
"global_state": {
|
|
283
|
+
"keywords": ["GLOBAL", "global "],
|
|
284
|
+
"language": "Python/Go",
|
|
285
|
+
"severity": "medium",
|
|
286
|
+
"alternative": "Use dependency injection or functional patterns",
|
|
287
|
+
},
|
|
288
|
+
"sql_injection": {
|
|
289
|
+
"keywords": ["f'", 'f"', "+ str(", "+ var"],
|
|
290
|
+
"language": "Python/JavaScript",
|
|
291
|
+
"severity": "critical",
|
|
292
|
+
"alternative": "Use parameterized queries or ORM",
|
|
293
|
+
},
|
|
294
|
+
"silent_failure": {
|
|
295
|
+
"keywords": ["pass", "except:", "try"],
|
|
296
|
+
"language": "Python",
|
|
297
|
+
"severity": "high",
|
|
298
|
+
"alternative": "Use proper error handling",
|
|
299
|
+
},
|
|
300
|
+
}
|
|
301
|
+
|
|
302
|
+
def detect_anti_pattern(self, code: str, language: Optional[str] = None) -> Optional[Pattern]:
|
|
303
|
+
"""Detect anti-pattern and return Pattern object."""
|
|
304
|
+
code_lower = code.lower()
|
|
305
|
+
|
|
306
|
+
# Callback hell detection
|
|
307
|
+
if "callback" in code_lower and ("=>" in code or "function" in code_lower):
|
|
308
|
+
return Pattern(
|
|
309
|
+
pattern_type="anti_pattern",
|
|
310
|
+
language=language or "JavaScript",
|
|
311
|
+
description="Callback hell - deeply nested callbacks",
|
|
312
|
+
example=code,
|
|
313
|
+
severity="high",
|
|
314
|
+
alternative="Use async/await or Promises",
|
|
315
|
+
priority=9,
|
|
316
|
+
)
|
|
317
|
+
|
|
318
|
+
# Global state detection
|
|
319
|
+
if "global_state" in code_lower or "global " in code_lower:
|
|
320
|
+
return Pattern(
|
|
321
|
+
pattern_type="anti_pattern",
|
|
322
|
+
language=language or "Python",
|
|
323
|
+
description="Mutable global state",
|
|
324
|
+
example=code,
|
|
325
|
+
severity="medium",
|
|
326
|
+
alternative="Use dependency injection or functional patterns",
|
|
327
|
+
priority=7,
|
|
328
|
+
)
|
|
329
|
+
|
|
330
|
+
# SQL injection detection
|
|
331
|
+
if ("f'" in code or 'f"' in code) and ("SELECT" in code.upper() or "FROM" in code.upper()):
|
|
332
|
+
return Pattern(
|
|
333
|
+
pattern_type="anti_pattern",
|
|
334
|
+
language=language or "Python",
|
|
335
|
+
description="SQL injection risk - using f-strings in SQL",
|
|
336
|
+
example=code,
|
|
337
|
+
severity="critical",
|
|
338
|
+
alternative="Use parameterized queries with ORM",
|
|
339
|
+
priority=10,
|
|
340
|
+
)
|
|
341
|
+
|
|
342
|
+
return None
|
|
343
|
+
|
|
344
|
+
|
|
345
|
+
class EcosystemAnalyzer:
|
|
346
|
+
"""Analyzes programming language ecosystems."""
|
|
347
|
+
|
|
348
|
+
def analyze(self, language: str) -> Optional[LanguageInfo]:
|
|
349
|
+
"""Analyze ecosystem for a language."""
|
|
350
|
+
ecosystems = {
|
|
351
|
+
"Python": LanguageInfo(
|
|
352
|
+
name="Python",
|
|
353
|
+
version="3.12+",
|
|
354
|
+
tier="Tier 1",
|
|
355
|
+
frameworks=["FastAPI", "Django"],
|
|
356
|
+
features=["async", "type hints", "dataclasses"],
|
|
357
|
+
),
|
|
358
|
+
"TypeScript": LanguageInfo(
|
|
359
|
+
name="TypeScript",
|
|
360
|
+
version="5.0+",
|
|
361
|
+
tier="Tier 1",
|
|
362
|
+
frameworks=["Next.js", "React"],
|
|
363
|
+
features=["strict typing", "type safety", "decorators"],
|
|
364
|
+
),
|
|
365
|
+
"Go": LanguageInfo(
|
|
366
|
+
name="Go",
|
|
367
|
+
version="1.20+",
|
|
368
|
+
tier="Tier 1",
|
|
369
|
+
frameworks=["Fiber", "GORM"],
|
|
370
|
+
features=["goroutines", "channels", "simplicity"],
|
|
371
|
+
),
|
|
372
|
+
}
|
|
373
|
+
return ecosystems.get(language)
|
|
374
|
+
|
|
375
|
+
def analyze_multiple(self, languages: List[str]) -> List[LanguageInfo]:
|
|
376
|
+
"""Analyze multiple languages."""
|
|
377
|
+
results = []
|
|
378
|
+
for lang in languages:
|
|
379
|
+
result = self.analyze(lang)
|
|
380
|
+
if result:
|
|
381
|
+
results.append(result)
|
|
382
|
+
return results
|
|
383
|
+
|
|
384
|
+
def check_compatibility(self, language: str, version: str, framework: str) -> bool:
|
|
385
|
+
"""Check if language version supports framework."""
|
|
386
|
+
if language == "Python" and version.startswith("2"):
|
|
387
|
+
return False
|
|
388
|
+
if language == "TypeScript" and version.startswith("3"):
|
|
389
|
+
return False
|
|
390
|
+
return True
|
|
391
|
+
|
|
392
|
+
|
|
393
|
+
class PerformanceOptimizer:
|
|
394
|
+
"""Provides performance optimization tips."""
|
|
395
|
+
|
|
396
|
+
PERFORMANCE_TIPS = {
|
|
397
|
+
"Python": [
|
|
398
|
+
"Use async/await for I/O operations",
|
|
399
|
+
"Leverage type hints for faster execution",
|
|
400
|
+
"Batch database operations",
|
|
401
|
+
"Use connection pooling (asyncpg, psycopg[c])",
|
|
402
|
+
"Profile code with cProfile or py-spy",
|
|
403
|
+
],
|
|
404
|
+
"TypeScript": [
|
|
405
|
+
"Enable strict mode for better optimization",
|
|
406
|
+
"Use const assertions for literals",
|
|
407
|
+
"Tree-shake unused code",
|
|
408
|
+
"Optimize bundle size with dynamic imports",
|
|
409
|
+
"Use native Node.js features instead of polyfills",
|
|
410
|
+
],
|
|
411
|
+
"Go": [
|
|
412
|
+
"Use goroutines for lightweight concurrency",
|
|
413
|
+
"Implement connection pooling for databases",
|
|
414
|
+
"Use buffered channels for performance",
|
|
415
|
+
"Profile with pprof",
|
|
416
|
+
"Compile with release optimizations",
|
|
417
|
+
],
|
|
418
|
+
"Rust": [
|
|
419
|
+
"Use zero-cost abstractions",
|
|
420
|
+
"Enable compile-time optimizations",
|
|
421
|
+
"Avoid unnecessary allocations",
|
|
422
|
+
"Use release builds for production",
|
|
423
|
+
"Profile with flamegraph",
|
|
424
|
+
],
|
|
425
|
+
}
|
|
426
|
+
|
|
427
|
+
def get_tips(self, language: str) -> List[str]:
|
|
428
|
+
"""Get performance tips for a language."""
|
|
429
|
+
return self.PERFORMANCE_TIPS.get(language, [])
|
|
430
|
+
|
|
431
|
+
def get_tip_count(self, language: str) -> int:
|
|
432
|
+
"""Get count of optimization tips."""
|
|
433
|
+
return len(self.get_tips(language))
|
|
434
|
+
|
|
435
|
+
|
|
436
|
+
class TestingStrategyAdvisor:
|
|
437
|
+
"""Provides testing strategy recommendations."""
|
|
438
|
+
|
|
439
|
+
STRATEGIES = {
|
|
440
|
+
"Python": TestingStrategy(
|
|
441
|
+
framework="pytest",
|
|
442
|
+
features="async support, fixtures, parametrization, pytest-asyncio",
|
|
443
|
+
language="Python",
|
|
444
|
+
),
|
|
445
|
+
"TypeScript": TestingStrategy(
|
|
446
|
+
framework="Vitest/Jest",
|
|
447
|
+
features="snapshot testing, coverage reporting, mocking",
|
|
448
|
+
language="TypeScript",
|
|
449
|
+
),
|
|
450
|
+
"Go": TestingStrategy(
|
|
451
|
+
framework="testing + testify",
|
|
452
|
+
features="assertions, mocking, test helpers, benchmarks",
|
|
453
|
+
language="Go",
|
|
454
|
+
),
|
|
455
|
+
"Rust": TestingStrategy(
|
|
456
|
+
framework="cargo test",
|
|
457
|
+
features="unit tests, integration tests, doc tests",
|
|
458
|
+
language="Rust",
|
|
459
|
+
),
|
|
460
|
+
}
|
|
461
|
+
|
|
462
|
+
def get_strategy(self, language: str) -> Optional[TestingStrategy]:
|
|
463
|
+
"""Get testing strategy for a language."""
|
|
464
|
+
return self.STRATEGIES.get(language)
|
|
465
|
+
|
|
466
|
+
def get_recommended_framework(self, language: str) -> Optional[str]:
|
|
467
|
+
"""Get recommended testing framework."""
|
|
468
|
+
strategy = self.get_strategy(language)
|
|
469
|
+
return strategy.framework if strategy else None
|
|
470
|
+
|
|
471
|
+
|
|
472
|
+
# Export public API
|
|
473
|
+
__all__ = [
|
|
474
|
+
"LanguageInfo",
|
|
475
|
+
"Pattern",
|
|
476
|
+
"TestingStrategy",
|
|
477
|
+
"LanguageVersionManager",
|
|
478
|
+
"FrameworkRecommender",
|
|
479
|
+
"PatternAnalyzer",
|
|
480
|
+
"AntiPatternDetector",
|
|
481
|
+
"EcosystemAnalyzer",
|
|
482
|
+
"PerformanceOptimizer",
|
|
483
|
+
"TestingStrategyAdvisor",
|
|
484
|
+
]
|