moai-adk 0.8.0__py3-none-any.whl → 0.34.0__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.
- moai_adk/__init__.py +2 -6
- moai_adk/__main__.py +136 -21
- moai_adk/cli/__init__.py +6 -2
- moai_adk/cli/commands/__init__.py +1 -4
- moai_adk/cli/commands/analyze.py +116 -0
- moai_adk/cli/commands/doctor.py +17 -5
- moai_adk/cli/commands/init.py +118 -48
- moai_adk/cli/commands/language.py +248 -0
- moai_adk/cli/commands/status.py +8 -13
- moai_adk/cli/commands/update.py +1978 -149
- moai_adk/cli/main.py +3 -2
- moai_adk/cli/prompts/init_prompts.py +144 -91
- 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 +683 -0
- moai_adk/cli/worktree/exceptions.py +89 -0
- moai_adk/cli/worktree/manager.py +493 -0
- moai_adk/cli/worktree/models.py +65 -0
- moai_adk/cli/worktree/registry.py +422 -0
- moai_adk/core/PHASE2_OPTIMIZATIONS.md +467 -0
- moai_adk/core/__init__.py +0 -1
- moai_adk/core/analysis/__init__.py +9 -0
- moai_adk/core/analysis/session_analyzer.py +400 -0
- moai_adk/core/claude_integration.py +393 -0
- moai_adk/core/command_helpers.py +270 -0
- moai_adk/core/comprehensive_monitoring_system.py +1183 -0
- moai_adk/core/config/__init__.py +6 -0
- moai_adk/core/config/auto_spec_config.py +340 -0
- moai_adk/core/config/migration.py +148 -17
- moai_adk/core/config/unified.py +436 -0
- moai_adk/core/context_manager.py +273 -0
- moai_adk/core/diagnostics/slash_commands.py +0 -1
- moai_adk/core/enterprise_features.py +1404 -0
- moai_adk/core/error_recovery_system.py +1902 -0
- moai_adk/core/event_driven_hook_system.py +1371 -0
- moai_adk/core/git/__init__.py +8 -1
- moai_adk/core/git/branch.py +0 -1
- moai_adk/core/git/branch_manager.py +2 -10
- moai_adk/core/git/checkpoint.py +1 -7
- moai_adk/core/git/commit.py +0 -1
- moai_adk/core/git/conflict_detector.py +413 -0
- moai_adk/core/git/event_detector.py +3 -5
- moai_adk/core/git/manager.py +91 -2
- moai_adk/core/hooks/post_tool_auto_spec_completion.py +901 -0
- moai_adk/core/input_validation_middleware.py +1006 -0
- moai_adk/core/integration/__init__.py +22 -0
- moai_adk/core/integration/engine.py +157 -0
- moai_adk/core/integration/integration_tester.py +226 -0
- moai_adk/core/integration/models.py +88 -0
- moai_adk/core/integration/utils.py +211 -0
- moai_adk/core/issue_creator.py +305 -0
- moai_adk/core/jit_context_loader.py +956 -0
- moai_adk/core/jit_enhanced_hook_manager.py +1987 -0
- moai_adk/core/language_config.py +202 -0
- moai_adk/core/language_config_resolver.py +572 -0
- moai_adk/core/language_validator.py +543 -0
- moai_adk/core/mcp/setup.py +116 -0
- moai_adk/core/merge/__init__.py +9 -0
- moai_adk/core/merge/analyzer.py +481 -0
- moai_adk/core/migration/__init__.py +18 -0
- moai_adk/core/migration/alfred_to_moai_migrator.py +383 -0
- moai_adk/core/migration/backup_manager.py +277 -0
- moai_adk/core/migration/custom_element_scanner.py +358 -0
- moai_adk/core/migration/file_migrator.py +209 -0
- 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 +139 -0
- moai_adk/core/migration/version_migrator.py +228 -0
- moai_adk/core/performance/__init__.py +6 -0
- moai_adk/core/performance/cache_system.py +316 -0
- moai_adk/core/performance/parallel_processor.py +116 -0
- moai_adk/core/phase_optimized_hook_scheduler.py +879 -0
- moai_adk/core/project/__init__.py +0 -1
- moai_adk/core/project/backup_utils.py +2 -7
- moai_adk/core/project/checker.py +2 -4
- moai_adk/core/project/detector.py +189 -22
- moai_adk/core/project/initializer.py +218 -27
- moai_adk/core/project/phase_executor.py +416 -44
- moai_adk/core/project/validator.py +7 -32
- moai_adk/core/quality/__init__.py +1 -1
- moai_adk/core/quality/trust_checker.py +37 -101
- moai_adk/core/quality/validators/__init__.py +1 -1
- moai_adk/core/quality/validators/base_validator.py +1 -1
- moai_adk/core/realtime_monitoring_dashboard.py +1724 -0
- moai_adk/core/robust_json_parser.py +611 -0
- moai_adk/core/rollback_manager.py +918 -0
- moai_adk/core/session_manager.py +651 -0
- moai_adk/core/skill_loading_system.py +579 -0
- moai_adk/core/spec/confidence_scoring.py +680 -0
- moai_adk/core/spec/ears_template_engine.py +1247 -0
- moai_adk/core/spec/quality_validator.py +687 -0
- moai_adk/core/spec_status_manager.py +478 -0
- moai_adk/core/template/__init__.py +0 -1
- moai_adk/core/template/backup.py +82 -17
- moai_adk/core/template/config.py +112 -40
- moai_adk/core/template/languages.py +0 -1
- moai_adk/core/template/merger.py +75 -26
- moai_adk/core/template/processor.py +750 -72
- moai_adk/core/template_engine.py +310 -0
- 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 +557 -0
- 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 +676 -0
- moai_adk/foundation/trust/validation_checklist.py +1573 -0
- 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/__init__.py +38 -0
- moai_adk/statusline/alfred_detector.py +105 -0
- moai_adk/statusline/config.py +376 -0
- moai_adk/statusline/enhanced_output_style_detector.py +372 -0
- moai_adk/statusline/git_collector.py +190 -0
- moai_adk/statusline/main.py +322 -0
- moai_adk/statusline/metrics_tracker.py +78 -0
- moai_adk/statusline/renderer.py +343 -0
- moai_adk/statusline/update_checker.py +129 -0
- moai_adk/statusline/version_reader.py +741 -0
- moai_adk/templates/.claude/agents/moai/ai-nano-banana.md +670 -0
- moai_adk/templates/.claude/agents/moai/builder-agent.md +474 -0
- moai_adk/templates/.claude/agents/moai/builder-command.md +1172 -0
- moai_adk/templates/.claude/agents/moai/builder-skill.md +666 -0
- moai_adk/templates/.claude/agents/moai/expert-backend.md +899 -0
- moai_adk/templates/.claude/agents/moai/expert-database.md +777 -0
- moai_adk/templates/.claude/agents/moai/expert-debug.md +401 -0
- moai_adk/templates/.claude/agents/moai/expert-devops.md +720 -0
- moai_adk/templates/.claude/agents/moai/expert-frontend.md +734 -0
- moai_adk/templates/.claude/agents/moai/expert-performance.md +657 -0
- moai_adk/templates/.claude/agents/moai/expert-security.md +509 -0
- moai_adk/templates/.claude/agents/moai/expert-testing.md +733 -0
- moai_adk/templates/.claude/agents/moai/expert-uiux.md +1041 -0
- moai_adk/templates/.claude/agents/moai/manager-claude-code.md +432 -0
- moai_adk/templates/.claude/agents/moai/manager-docs.md +573 -0
- moai_adk/templates/.claude/agents/moai/manager-git.md +1020 -0
- moai_adk/templates/.claude/agents/moai/manager-project.md +891 -0
- moai_adk/templates/.claude/agents/moai/manager-quality.md +624 -0
- moai_adk/templates/.claude/agents/moai/manager-spec.md +809 -0
- moai_adk/templates/.claude/agents/moai/manager-strategy.md +780 -0
- moai_adk/templates/.claude/agents/moai/manager-tdd.md +784 -0
- moai_adk/templates/.claude/agents/moai/mcp-context7.md +458 -0
- moai_adk/templates/.claude/agents/moai/mcp-figma.md +1607 -0
- moai_adk/templates/.claude/agents/moai/mcp-notion.md +789 -0
- moai_adk/templates/.claude/agents/moai/mcp-playwright.md +469 -0
- moai_adk/templates/.claude/agents/moai/mcp-sequential-thinking.md +1032 -0
- moai_adk/templates/.claude/commands/moai/0-project.md +1384 -0
- moai_adk/templates/.claude/commands/moai/1-plan.md +1427 -0
- moai_adk/templates/.claude/commands/moai/2-run.md +943 -0
- moai_adk/templates/.claude/commands/moai/3-sync.md +1324 -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/{alfred/core → moai/lib}/checkpoint.py +10 -37
- 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 +1075 -0
- moai_adk/templates/.claude/output-styles/moai/r2d2.md +560 -0
- moai_adk/templates/.claude/output-styles/moai/yoda.md +359 -0
- moai_adk/templates/.claude/settings.json +78 -50
- moai_adk/templates/.claude/skills/moai-ai-nano-banana/SKILL.md +438 -0
- moai_adk/templates/.claude/skills/moai-ai-nano-banana/examples.md +431 -0
- moai_adk/templates/.claude/skills/moai-docs-generation/SKILL.md +249 -0
- moai_adk/templates/.claude/skills/moai-docs-generation/examples.md +406 -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-docs-generation/reference.md +328 -0
- moai_adk/templates/.claude/skills/moai-domain-backend/SKILL.md +313 -283
- moai_adk/templates/.claude/skills/moai-domain-backend/examples.md +610 -1525
- moai_adk/templates/.claude/skills/moai-domain-backend/reference.md +423 -619
- moai_adk/templates/.claude/skills/moai-domain-database/SKILL.md +295 -95
- moai_adk/templates/.claude/skills/moai-domain-database/examples.md +817 -16
- 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-database/reference.md +532 -17
- moai_adk/templates/.claude/skills/moai-domain-frontend/SKILL.md +470 -97
- moai_adk/templates/.claude/skills/moai-domain-frontend/examples.md +955 -16
- moai_adk/templates/.claude/skills/moai-domain-frontend/reference.md +651 -18
- moai_adk/templates/.claude/skills/moai-domain-uiux/SKILL.md +455 -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 +492 -0
- moai_adk/templates/.claude/skills/moai-formats-data/examples.md +804 -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-formats-data/reference.md +585 -0
- moai_adk/templates/.claude/skills/moai-foundation-claude/SKILL.md +202 -0
- moai_adk/templates/.claude/skills/moai-foundation-claude/examples.md +732 -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-claude/reference.md +209 -0
- moai_adk/templates/.claude/skills/moai-foundation-context/SKILL.md +441 -0
- moai_adk/templates/.claude/skills/moai-foundation-context/examples.md +1048 -0
- moai_adk/templates/.claude/skills/moai-foundation-context/reference.md +246 -0
- moai_adk/templates/.claude/skills/moai-foundation-core/SKILL.md +420 -0
- moai_adk/templates/.claude/skills/moai-foundation-core/examples.md +358 -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 +359 -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-core/reference.md +478 -0
- moai_adk/templates/.claude/skills/moai-foundation-philosopher/SKILL.md +315 -0
- moai_adk/templates/.claude/skills/moai-foundation-philosopher/examples.md +228 -0
- moai_adk/templates/.claude/skills/moai-foundation-philosopher/modules/assumption-matrix.md +80 -0
- moai_adk/templates/.claude/skills/moai-foundation-philosopher/modules/cognitive-bias.md +199 -0
- moai_adk/templates/.claude/skills/moai-foundation-philosopher/modules/first-principles.md +140 -0
- moai_adk/templates/.claude/skills/moai-foundation-philosopher/modules/trade-off-analysis.md +154 -0
- moai_adk/templates/.claude/skills/moai-foundation-philosopher/reference.md +157 -0
- moai_adk/templates/.claude/skills/moai-foundation-quality/SKILL.md +364 -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-lang-cpp/SKILL.md +618 -93
- moai_adk/templates/.claude/skills/moai-lang-csharp/SKILL.md +446 -91
- moai_adk/templates/.claude/skills/moai-lang-elixir/SKILL.md +612 -0
- moai_adk/templates/.claude/skills/moai-lang-flutter/SKILL.md +477 -0
- moai_adk/templates/.claude/skills/moai-lang-flutter/examples.md +1090 -0
- moai_adk/templates/.claude/skills/moai-lang-flutter/reference.md +686 -0
- moai_adk/templates/.claude/skills/moai-lang-go/SKILL.md +346 -94
- moai_adk/templates/.claude/skills/moai-lang-go/examples.md +906 -16
- moai_adk/templates/.claude/skills/moai-lang-go/reference.md +721 -15
- moai_adk/templates/.claude/skills/moai-lang-java/SKILL.md +352 -91
- moai_adk/templates/.claude/skills/moai-lang-java/examples.md +851 -16
- moai_adk/templates/.claude/skills/moai-lang-java/reference.md +278 -18
- moai_adk/templates/.claude/skills/moai-lang-kotlin/SKILL.md +344 -86
- moai_adk/templates/.claude/skills/moai-lang-kotlin/examples.md +993 -16
- moai_adk/templates/.claude/skills/moai-lang-kotlin/reference.md +549 -18
- moai_adk/templates/.claude/skills/moai-lang-php/SKILL.md +617 -96
- moai_adk/templates/.claude/skills/moai-lang-python/SKILL.md +364 -314
- moai_adk/templates/.claude/skills/moai-lang-python/examples.md +849 -496
- moai_adk/templates/.claude/skills/moai-lang-python/reference.md +731 -243
- moai_adk/templates/.claude/skills/moai-lang-r/SKILL.md +545 -89
- moai_adk/templates/.claude/skills/moai-lang-ruby/SKILL.md +650 -87
- moai_adk/templates/.claude/skills/moai-lang-rust/SKILL.md +341 -93
- moai_adk/templates/.claude/skills/moai-lang-rust/examples.md +646 -16
- moai_adk/templates/.claude/skills/moai-lang-rust/reference.md +491 -18
- moai_adk/templates/.claude/skills/moai-lang-scala/SKILL.md +463 -89
- moai_adk/templates/.claude/skills/moai-lang-scala/examples.md +620 -16
- moai_adk/templates/.claude/skills/moai-lang-scala/reference.md +410 -17
- moai_adk/templates/.claude/skills/moai-lang-swift/SKILL.md +486 -112
- moai_adk/templates/.claude/skills/moai-lang-swift/examples.md +905 -16
- moai_adk/templates/.claude/skills/moai-lang-swift/reference.md +659 -17
- moai_adk/templates/.claude/skills/moai-lang-typescript/SKILL.md +333 -92
- moai_adk/templates/.claude/skills/moai-lang-typescript/examples.md +1076 -16
- moai_adk/templates/.claude/skills/moai-lang-typescript/reference.md +718 -21
- moai_adk/templates/.claude/skills/moai-library-mermaid/SKILL.md +300 -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 +319 -0
- moai_adk/templates/.claude/skills/moai-library-nextra/advanced-patterns.md +336 -0
- moai_adk/templates/.claude/skills/moai-library-nextra/examples.md +592 -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-nextra/reference.md +379 -0
- moai_adk/templates/.claude/skills/moai-library-shadcn/SKILL.md +372 -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-mcp-figma/SKILL.md +402 -0
- moai_adk/templates/.claude/skills/moai-mcp-figma/advanced-patterns.md +607 -0
- moai_adk/templates/.claude/skills/moai-mcp-notion/SKILL.md +300 -0
- moai_adk/templates/.claude/skills/moai-mcp-notion/advanced-patterns.md +537 -0
- moai_adk/templates/.claude/skills/moai-platform-auth0/SKILL.md +290 -0
- moai_adk/templates/.claude/skills/moai-platform-clerk/SKILL.md +390 -0
- moai_adk/templates/.claude/skills/moai-platform-convex/SKILL.md +398 -0
- moai_adk/templates/.claude/skills/moai-platform-firebase-auth/SKILL.md +379 -0
- moai_adk/templates/.claude/skills/moai-platform-firestore/SKILL.md +358 -0
- moai_adk/templates/.claude/skills/moai-platform-neon/SKILL.md +467 -0
- moai_adk/templates/.claude/skills/moai-platform-railway/SKILL.md +377 -0
- moai_adk/templates/.claude/skills/moai-platform-supabase/SKILL.md +466 -0
- moai_adk/templates/.claude/skills/moai-platform-vercel/SKILL.md +482 -0
- moai_adk/templates/.claude/skills/moai-workflow-jit-docs/SKILL.md +449 -0
- moai_adk/templates/.claude/skills/moai-workflow-jit-docs/advanced-patterns.md +379 -0
- moai_adk/templates/.claude/skills/moai-workflow-jit-docs/examples.md +544 -0
- moai_adk/templates/.claude/skills/moai-workflow-jit-docs/optimization.md +286 -0
- moai_adk/templates/.claude/skills/moai-workflow-jit-docs/reference.md +307 -0
- moai_adk/templates/.claude/skills/moai-workflow-project/README.md +190 -0
- moai_adk/templates/.claude/skills/moai-workflow-project/SKILL.md +390 -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 +175 -0
- moai_adk/templates/.claude/skills/moai-workflow-project/examples/quick_start.py +196 -0
- moai_adk/templates/.claude/skills/moai-workflow-project/examples.md +547 -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/reference.md +275 -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 +1462 -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 +92 -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-spec/SKILL.md +534 -0
- moai_adk/templates/.claude/skills/moai-workflow-spec/examples.md +900 -0
- moai_adk/templates/.claude/skills/moai-workflow-spec/reference.md +704 -0
- moai_adk/templates/.claude/skills/moai-workflow-templates/SKILL.md +377 -0
- moai_adk/templates/.claude/skills/moai-workflow-templates/examples.md +552 -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-templates/reference.md +346 -0
- moai_adk/templates/.claude/skills/moai-workflow-testing/LICENSE.txt +202 -0
- moai_adk/templates/.claude/skills/moai-workflow-testing/SKILL.md +456 -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/examples.md +672 -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/reference.md +440 -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 +411 -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 +128 -0
- moai_adk/templates/.git-hooks/pre-push +365 -0
- moai_adk/templates/.github/workflows/ci-universal.yml +513 -0
- moai_adk/templates/.github/workflows/security-secrets-check.yml +179 -0
- moai_adk/templates/.github/workflows/spec-issue-sync.yml +206 -36
- moai_adk/templates/.gitignore +194 -13
- moai_adk/templates/.mcp.json +31 -0
- moai_adk/templates/.moai/config/config.yaml +58 -0
- moai_adk/templates/.moai/config/questions/_schema.yaml +151 -0
- moai_adk/templates/.moai/config/questions/tab0-init.yaml +251 -0
- moai_adk/templates/.moai/config/questions/tab1-user.yaml +108 -0
- moai_adk/templates/.moai/config/questions/tab2-project.yaml +81 -0
- moai_adk/templates/.moai/config/questions/tab3-git.yaml +634 -0
- moai_adk/templates/.moai/config/questions/tab4-quality.yaml +170 -0
- moai_adk/templates/.moai/config/questions/tab5-system.yaml +87 -0
- moai_adk/templates/.moai/config/sections/git-strategy.yaml +116 -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 +17 -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 +92 -0
- moai_adk/templates/.moai/scripts/setup-glm.py +136 -0
- moai_adk/templates/CLAUDE.md +571 -244
- moai_adk/utils/__init__.py +24 -2
- moai_adk/utils/banner.py +9 -13
- moai_adk/utils/common.py +294 -0
- moai_adk/utils/link_validator.py +241 -0
- moai_adk/utils/logger.py +4 -9
- moai_adk/utils/safe_file_reader.py +206 -0
- moai_adk/utils/timeout.py +160 -0
- moai_adk/utils/toon_utils.py +256 -0
- moai_adk/version.py +22 -0
- moai_adk-0.34.0.dist-info/METADATA +2999 -0
- moai_adk-0.34.0.dist-info/RECORD +463 -0
- {moai_adk-0.8.0.dist-info → moai_adk-0.34.0.dist-info}/WHEEL +1 -1
- {moai_adk-0.8.0.dist-info → moai_adk-0.34.0.dist-info}/entry_points.txt +1 -0
- moai_adk/cli/commands/backup.py +0 -80
- moai_adk/templates/.claude/agents/alfred/cc-manager.md +0 -293
- moai_adk/templates/.claude/agents/alfred/debug-helper.md +0 -196
- moai_adk/templates/.claude/agents/alfred/doc-syncer.md +0 -207
- moai_adk/templates/.claude/agents/alfred/git-manager.md +0 -375
- moai_adk/templates/.claude/agents/alfred/implementation-planner.md +0 -343
- moai_adk/templates/.claude/agents/alfred/project-manager.md +0 -246
- moai_adk/templates/.claude/agents/alfred/quality-gate.md +0 -320
- moai_adk/templates/.claude/agents/alfred/skill-factory.md +0 -837
- moai_adk/templates/.claude/agents/alfred/spec-builder.md +0 -272
- moai_adk/templates/.claude/agents/alfred/tag-agent.md +0 -265
- moai_adk/templates/.claude/agents/alfred/tdd-implementer.md +0 -311
- moai_adk/templates/.claude/agents/alfred/trust-checker.md +0 -352
- moai_adk/templates/.claude/commands/alfred/0-project.md +0 -1184
- moai_adk/templates/.claude/commands/alfred/1-plan.md +0 -665
- moai_adk/templates/.claude/commands/alfred/2-run.md +0 -488
- moai_adk/templates/.claude/commands/alfred/3-sync.md +0 -623
- moai_adk/templates/.claude/hooks/alfred/HOOK_SCHEMA_VALIDATION.md +0 -313
- moai_adk/templates/.claude/hooks/alfred/README.md +0 -230
- moai_adk/templates/.claude/hooks/alfred/alfred_hooks.py +0 -174
- moai_adk/templates/.claude/hooks/alfred/core/__init__.py +0 -170
- moai_adk/templates/.claude/hooks/alfred/core/context.py +0 -67
- moai_adk/templates/.claude/hooks/alfred/core/project.py +0 -416
- moai_adk/templates/.claude/hooks/alfred/core/tags.py +0 -198
- moai_adk/templates/.claude/hooks/alfred/handlers/__init__.py +0 -21
- moai_adk/templates/.claude/hooks/alfred/handlers/notification.py +0 -25
- moai_adk/templates/.claude/hooks/alfred/handlers/session.py +0 -161
- moai_adk/templates/.claude/hooks/alfred/handlers/tool.py +0 -90
- moai_adk/templates/.claude/hooks/alfred/handlers/user.py +0 -42
- moai_adk/templates/.claude/hooks/alfred/test_hook_output.py +0 -175
- moai_adk/templates/.claude/output-styles/alfred/agentic-coding.md +0 -640
- moai_adk/templates/.claude/output-styles/alfred/moai-adk-learning.md +0 -696
- moai_adk/templates/.claude/output-styles/alfred/study-with-alfred.md +0 -474
- moai_adk/templates/.claude/skills/moai-alfred-ears-authoring/SKILL.md +0 -113
- moai_adk/templates/.claude/skills/moai-alfred-ears-authoring/examples.md +0 -29
- moai_adk/templates/.claude/skills/moai-alfred-ears-authoring/reference.md +0 -28
- moai_adk/templates/.claude/skills/moai-alfred-git-workflow/SKILL.md +0 -122
- moai_adk/templates/.claude/skills/moai-alfred-git-workflow/examples.md +0 -29
- moai_adk/templates/.claude/skills/moai-alfred-git-workflow/reference.md +0 -29
- moai_adk/templates/.claude/skills/moai-alfred-interactive-questions/SKILL.md +0 -237
- moai_adk/templates/.claude/skills/moai-alfred-interactive-questions/examples.md +0 -615
- moai_adk/templates/.claude/skills/moai-alfred-interactive-questions/reference.md +0 -653
- moai_adk/templates/.claude/skills/moai-alfred-language-detection/SKILL.md +0 -113
- moai_adk/templates/.claude/skills/moai-alfred-language-detection/examples.md +0 -29
- moai_adk/templates/.claude/skills/moai-alfred-language-detection/reference.md +0 -28
- moai_adk/templates/.claude/skills/moai-alfred-spec-metadata-validation/SKILL.md +0 -113
- moai_adk/templates/.claude/skills/moai-alfred-spec-metadata-validation/examples.md +0 -29
- moai_adk/templates/.claude/skills/moai-alfred-spec-metadata-validation/reference.md +0 -28
- moai_adk/templates/.claude/skills/moai-alfred-tag-scanning/SKILL.md +0 -113
- moai_adk/templates/.claude/skills/moai-alfred-tag-scanning/examples.md +0 -29
- moai_adk/templates/.claude/skills/moai-alfred-tag-scanning/reference.md +0 -28
- moai_adk/templates/.claude/skills/moai-alfred-trust-validation/SKILL.md +0 -113
- moai_adk/templates/.claude/skills/moai-alfred-trust-validation/examples.md +0 -29
- moai_adk/templates/.claude/skills/moai-alfred-trust-validation/reference.md +0 -28
- moai_adk/templates/.claude/skills/moai-cc-agents/SKILL.md +0 -269
- moai_adk/templates/.claude/skills/moai-cc-agents/templates/agent-template.md +0 -32
- moai_adk/templates/.claude/skills/moai-cc-claude-md/SKILL.md +0 -298
- moai_adk/templates/.claude/skills/moai-cc-claude-md/templates/CLAUDE-template.md +0 -26
- moai_adk/templates/.claude/skills/moai-cc-commands/SKILL.md +0 -307
- moai_adk/templates/.claude/skills/moai-cc-commands/templates/command-template.md +0 -21
- moai_adk/templates/.claude/skills/moai-cc-hooks/SKILL.md +0 -252
- moai_adk/templates/.claude/skills/moai-cc-hooks/scripts/pre-bash-check.sh +0 -19
- moai_adk/templates/.claude/skills/moai-cc-hooks/scripts/preserve-permissions.sh +0 -19
- moai_adk/templates/.claude/skills/moai-cc-hooks/scripts/validate-bash-command.py +0 -24
- moai_adk/templates/.claude/skills/moai-cc-mcp-plugins/SKILL.md +0 -199
- moai_adk/templates/.claude/skills/moai-cc-mcp-plugins/templates/settings-mcp-template.json +0 -39
- moai_adk/templates/.claude/skills/moai-cc-memory/SKILL.md +0 -316
- moai_adk/templates/.claude/skills/moai-cc-memory/templates/session-summary-template.md +0 -18
- moai_adk/templates/.claude/skills/moai-cc-settings/SKILL.md +0 -263
- moai_adk/templates/.claude/skills/moai-cc-settings/templates/settings-complete-template.json +0 -30
- moai_adk/templates/.claude/skills/moai-cc-skills/SKILL.md +0 -291
- moai_adk/templates/.claude/skills/moai-cc-skills/templates/SKILL-template.md +0 -15
- moai_adk/templates/.claude/skills/moai-domain-cli-tool/SKILL.md +0 -123
- moai_adk/templates/.claude/skills/moai-domain-cli-tool/examples.md +0 -29
- moai_adk/templates/.claude/skills/moai-domain-cli-tool/reference.md +0 -30
- moai_adk/templates/.claude/skills/moai-domain-data-science/SKILL.md +0 -123
- moai_adk/templates/.claude/skills/moai-domain-data-science/examples.md +0 -29
- moai_adk/templates/.claude/skills/moai-domain-data-science/reference.md +0 -30
- moai_adk/templates/.claude/skills/moai-domain-devops/SKILL.md +0 -124
- moai_adk/templates/.claude/skills/moai-domain-devops/examples.md +0 -29
- moai_adk/templates/.claude/skills/moai-domain-devops/reference.md +0 -31
- moai_adk/templates/.claude/skills/moai-domain-ml/SKILL.md +0 -123
- moai_adk/templates/.claude/skills/moai-domain-ml/examples.md +0 -29
- moai_adk/templates/.claude/skills/moai-domain-ml/reference.md +0 -30
- moai_adk/templates/.claude/skills/moai-domain-mobile-app/SKILL.md +0 -123
- moai_adk/templates/.claude/skills/moai-domain-mobile-app/examples.md +0 -29
- moai_adk/templates/.claude/skills/moai-domain-mobile-app/reference.md +0 -30
- moai_adk/templates/.claude/skills/moai-domain-security/SKILL.md +0 -123
- moai_adk/templates/.claude/skills/moai-domain-security/examples.md +0 -29
- moai_adk/templates/.claude/skills/moai-domain-security/reference.md +0 -30
- moai_adk/templates/.claude/skills/moai-domain-web-api/SKILL.md +0 -123
- moai_adk/templates/.claude/skills/moai-domain-web-api/examples.md +0 -29
- moai_adk/templates/.claude/skills/moai-domain-web-api/reference.md +0 -30
- moai_adk/templates/.claude/skills/moai-essentials-debug/SKILL.md +0 -303
- moai_adk/templates/.claude/skills/moai-essentials-debug/examples.md +0 -1064
- moai_adk/templates/.claude/skills/moai-essentials-debug/reference.md +0 -1047
- moai_adk/templates/.claude/skills/moai-essentials-perf/SKILL.md +0 -113
- moai_adk/templates/.claude/skills/moai-essentials-perf/examples.md +0 -29
- moai_adk/templates/.claude/skills/moai-essentials-perf/reference.md +0 -28
- moai_adk/templates/.claude/skills/moai-essentials-refactor/SKILL.md +0 -113
- moai_adk/templates/.claude/skills/moai-essentials-refactor/examples.md +0 -29
- moai_adk/templates/.claude/skills/moai-essentials-refactor/reference.md +0 -28
- moai_adk/templates/.claude/skills/moai-essentials-review/SKILL.md +0 -113
- moai_adk/templates/.claude/skills/moai-essentials-review/examples.md +0 -29
- moai_adk/templates/.claude/skills/moai-essentials-review/reference.md +0 -28
- moai_adk/templates/.claude/skills/moai-foundation-ears/SKILL.md +0 -113
- moai_adk/templates/.claude/skills/moai-foundation-ears/examples.md +0 -29
- moai_adk/templates/.claude/skills/moai-foundation-ears/reference.md +0 -28
- moai_adk/templates/.claude/skills/moai-foundation-git/SKILL.md +0 -122
- moai_adk/templates/.claude/skills/moai-foundation-git/examples.md +0 -29
- moai_adk/templates/.claude/skills/moai-foundation-git/reference.md +0 -29
- moai_adk/templates/.claude/skills/moai-foundation-langs/SKILL.md +0 -113
- moai_adk/templates/.claude/skills/moai-foundation-langs/examples.md +0 -29
- moai_adk/templates/.claude/skills/moai-foundation-langs/reference.md +0 -28
- moai_adk/templates/.claude/skills/moai-foundation-specs/SKILL.md +0 -113
- moai_adk/templates/.claude/skills/moai-foundation-specs/examples.md +0 -29
- moai_adk/templates/.claude/skills/moai-foundation-specs/reference.md +0 -28
- moai_adk/templates/.claude/skills/moai-foundation-tags/SKILL.md +0 -113
- moai_adk/templates/.claude/skills/moai-foundation-tags/examples.md +0 -29
- moai_adk/templates/.claude/skills/moai-foundation-tags/reference.md +0 -28
- moai_adk/templates/.claude/skills/moai-foundation-trust/SKILL.md +0 -307
- moai_adk/templates/.claude/skills/moai-foundation-trust/examples.md +0 -0
- moai_adk/templates/.claude/skills/moai-foundation-trust/reference.md +0 -1099
- moai_adk/templates/.claude/skills/moai-lang-c/SKILL.md +0 -124
- moai_adk/templates/.claude/skills/moai-lang-c/examples.md +0 -29
- moai_adk/templates/.claude/skills/moai-lang-c/reference.md +0 -31
- moai_adk/templates/.claude/skills/moai-lang-cpp/examples.md +0 -29
- moai_adk/templates/.claude/skills/moai-lang-cpp/reference.md +0 -31
- moai_adk/templates/.claude/skills/moai-lang-csharp/examples.md +0 -29
- moai_adk/templates/.claude/skills/moai-lang-csharp/reference.md +0 -30
- moai_adk/templates/.claude/skills/moai-lang-dart/SKILL.md +0 -123
- moai_adk/templates/.claude/skills/moai-lang-dart/examples.md +0 -29
- moai_adk/templates/.claude/skills/moai-lang-dart/reference.md +0 -30
- moai_adk/templates/.claude/skills/moai-lang-javascript/SKILL.md +0 -125
- moai_adk/templates/.claude/skills/moai-lang-javascript/examples.md +0 -29
- moai_adk/templates/.claude/skills/moai-lang-javascript/reference.md +0 -32
- moai_adk/templates/.claude/skills/moai-lang-php/examples.md +0 -29
- moai_adk/templates/.claude/skills/moai-lang-php/reference.md +0 -30
- moai_adk/templates/.claude/skills/moai-lang-r/examples.md +0 -29
- moai_adk/templates/.claude/skills/moai-lang-r/reference.md +0 -30
- moai_adk/templates/.claude/skills/moai-lang-ruby/examples.md +0 -29
- moai_adk/templates/.claude/skills/moai-lang-ruby/reference.md +0 -31
- moai_adk/templates/.claude/skills/moai-lang-shell/SKILL.md +0 -123
- moai_adk/templates/.claude/skills/moai-lang-shell/examples.md +0 -29
- moai_adk/templates/.claude/skills/moai-lang-shell/reference.md +0 -30
- moai_adk/templates/.claude/skills/moai-lang-sql/SKILL.md +0 -124
- moai_adk/templates/.claude/skills/moai-lang-sql/examples.md +0 -29
- moai_adk/templates/.claude/skills/moai-lang-sql/reference.md +0 -31
- moai_adk/templates/.claude/skills/moai-skill-factory/CHECKLIST.md +0 -482
- moai_adk/templates/.claude/skills/moai-skill-factory/EXAMPLES.md +0 -278
- moai_adk/templates/.claude/skills/moai-skill-factory/INTERACTIVE-DISCOVERY.md +0 -524
- moai_adk/templates/.claude/skills/moai-skill-factory/METADATA.md +0 -477
- moai_adk/templates/.claude/skills/moai-skill-factory/PARALLEL-ANALYSIS-REPORT.md +0 -429
- moai_adk/templates/.claude/skills/moai-skill-factory/PYTHON-VERSION-MATRIX.md +0 -391
- moai_adk/templates/.claude/skills/moai-skill-factory/SKILL-FACTORY-WORKFLOW.md +0 -431
- moai_adk/templates/.claude/skills/moai-skill-factory/SKILL-UPDATE-ADVISOR.md +0 -577
- moai_adk/templates/.claude/skills/moai-skill-factory/SKILL.md +0 -271
- moai_adk/templates/.claude/skills/moai-skill-factory/STEP-BY-STEP-GUIDE.md +0 -466
- moai_adk/templates/.claude/skills/moai-skill-factory/STRUCTURE.md +0 -583
- moai_adk/templates/.claude/skills/moai-skill-factory/WEB-RESEARCH.md +0 -526
- moai_adk/templates/.claude/skills/moai-skill-factory/reference.md +0 -465
- moai_adk/templates/.claude/skills/moai-skill-factory/scripts/generate-structure.sh +0 -328
- moai_adk/templates/.claude/skills/moai-skill-factory/scripts/validate-skill.sh +0 -312
- moai_adk/templates/.claude/skills/moai-skill-factory/templates/SKILL_TEMPLATE.md +0 -245
- moai_adk/templates/.claude/skills/moai-skill-factory/templates/examples-template.md +0 -285
- moai_adk/templates/.claude/skills/moai-skill-factory/templates/reference-template.md +0 -278
- moai_adk/templates/.claude/skills/moai-skill-factory/templates/scripts-template.sh +0 -303
- moai_adk/templates/.claude/skills/moai-spec-authoring/README.md +0 -137
- moai_adk/templates/.claude/skills/moai-spec-authoring/SKILL.md +0 -218
- moai_adk/templates/.claude/skills/moai-spec-authoring/examples/validate-spec.sh +0 -161
- moai_adk/templates/.claude/skills/moai-spec-authoring/examples.md +0 -541
- moai_adk/templates/.claude/skills/moai-spec-authoring/reference.md +0 -622
- moai_adk/templates/.github/ISSUE_TEMPLATE/spec.yml +0 -176
- moai_adk/templates/.github/PULL_REQUEST_TEMPLATE.md +0 -69
- moai_adk/templates/.github/workflows/moai-gitflow.yml +0 -256
- moai_adk/templates/.moai/config.json +0 -96
- moai_adk/templates/.moai/memory/CLAUDE-AGENTS-GUIDE.md +0 -208
- moai_adk/templates/.moai/memory/CLAUDE-PRACTICES.md +0 -369
- moai_adk/templates/.moai/memory/CLAUDE-RULES.md +0 -539
- moai_adk/templates/.moai/memory/CONFIG-SCHEMA.md +0 -444
- moai_adk/templates/.moai/memory/DEVELOPMENT-GUIDE.md +0 -344
- moai_adk/templates/.moai/memory/GITFLOW-PROTECTION-POLICY.md +0 -220
- moai_adk/templates/.moai/memory/SKILLS-DESCRIPTION-POLICY.md +0 -218
- moai_adk/templates/.moai/memory/SPEC-METADATA.md +0 -356
- moai_adk/templates/.moai/memory/config-schema.md +0 -444
- moai_adk/templates/.moai/memory/gitflow-protection-policy.md +0 -220
- moai_adk/templates/.moai/memory/spec-metadata.md +0 -356
- moai_adk/templates/.moai/project/product.md +0 -161
- moai_adk/templates/.moai/project/structure.md +0 -156
- moai_adk/templates/.moai/project/tech.md +0 -227
- moai_adk/templates/__init__.py +0 -2
- moai_adk-0.8.0.dist-info/METADATA +0 -1722
- moai_adk-0.8.0.dist-info/RECORD +0 -282
- {moai_adk-0.8.0.dist-info → moai_adk-0.34.0.dist-info}/licenses/LICENSE +0 -0
|
@@ -1,431 +1,481 @@
|
|
|
1
1
|
---
|
|
2
|
-
|
|
3
2
|
name: moai-lang-python
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
updated: 2025-
|
|
3
|
+
description: Python 3.13+ development specialist covering FastAPI, Django, async patterns, data science, testing with pytest, and modern Python features. Use when developing Python APIs, web applications, data pipelines, or writing tests.
|
|
4
|
+
version: 1.0.0
|
|
5
|
+
updated: 2025-12-07
|
|
7
6
|
status: active
|
|
8
|
-
|
|
9
|
-
keywords: [python, testing, pytest, mypy, ruff, uv, async, fastapi, pydantic]
|
|
10
|
-
allowed-tools:
|
|
11
|
-
- Read
|
|
12
|
-
- Bash
|
|
7
|
+
allowed-tools: Read, Grep, Glob, Bash, mcp__context7__resolve-library-id, mcp__context7__get-library-docs
|
|
13
8
|
---
|
|
14
9
|
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
## Skill Metadata
|
|
10
|
+
## Quick Reference (30 seconds)
|
|
18
11
|
|
|
19
|
-
|
|
20
|
-
| ----- | ----- |
|
|
21
|
-
| **Skill Name** | moai-lang-python |
|
|
22
|
-
| **Version** | 2.0.0 (2025-10-22) |
|
|
23
|
-
| **Python Support** | 3.13.1 (latest), 3.12.7 (LTS), 3.11.10 (maintenance) |
|
|
24
|
-
| **Allowed tools** | Read (read_file), Bash (terminal) |
|
|
25
|
-
| **Auto-load** | On demand when language keywords detected |
|
|
26
|
-
| **Trigger cues** | `.py` files, Python frameworks, TDD discussions, async patterns |
|
|
27
|
-
| **Tier** | Language / 23 (comprehensive coverage) |
|
|
12
|
+
Python 3.13+ Development Specialist - FastAPI, Django, async patterns, pytest, and modern Python features.
|
|
28
13
|
|
|
29
|
-
|
|
14
|
+
Auto-Triggers: `.py` files, `pyproject.toml`, `requirements.txt`, `pytest.ini`, FastAPI/Django discussions
|
|
30
15
|
|
|
31
|
-
|
|
16
|
+
Core Capabilities:
|
|
17
|
+
- Python 3.13 Features: JIT compiler (PEP 744), GIL-free mode (PEP 703), pattern matching
|
|
18
|
+
- Web Frameworks: FastAPI 0.115+, Django 5.2 LTS
|
|
19
|
+
- Data Validation: Pydantic v2.9 with model_validate patterns
|
|
20
|
+
- ORM: SQLAlchemy 2.0 async patterns
|
|
21
|
+
- Testing: pytest with fixtures, async testing, parametrize
|
|
22
|
+
- Package Management: poetry, uv, pip with pyproject.toml
|
|
23
|
+
- Type Hints: Protocol, TypeVar, ParamSpec, modern typing patterns
|
|
24
|
+
- Async: asyncio, async generators, task groups
|
|
25
|
+
- Data Science: numpy, pandas, polars basics
|
|
32
26
|
|
|
33
|
-
|
|
27
|
+
### Quick Patterns
|
|
34
28
|
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
- ✅ **Python 3.13 Features**: PEP 695 (type params), PEP 701 (f-strings), PEP 698 (@override)
|
|
40
|
-
- ✅ **Async/Await**: asyncio.TaskGroup, context variables, concurrent patterns
|
|
41
|
-
- ✅ **Security**: Secrets module, secure hashing, SQLAlchemy 2.0.28
|
|
29
|
+
FastAPI Endpoint:
|
|
30
|
+
```python
|
|
31
|
+
from fastapi import FastAPI, Depends
|
|
32
|
+
from pydantic import BaseModel
|
|
42
33
|
|
|
43
|
-
|
|
34
|
+
app = FastAPI()
|
|
44
35
|
|
|
45
|
-
|
|
36
|
+
class UserCreate(BaseModel):
|
|
37
|
+
name: str
|
|
38
|
+
email: str
|
|
46
39
|
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
- Async pattern requests
|
|
40
|
+
@app.post("/users/")
|
|
41
|
+
async def create_user(user: UserCreate) -> User:
|
|
42
|
+
return await UserService.create(user)
|
|
43
|
+
```
|
|
52
44
|
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
- Upgrade from Python 3.12 to 3.13
|
|
57
|
-
- Refactor async code to use TaskGroup
|
|
45
|
+
Pydantic v2.9 Validation:
|
|
46
|
+
```python
|
|
47
|
+
from pydantic import BaseModel, ConfigDict
|
|
58
48
|
|
|
59
|
-
|
|
49
|
+
class User(BaseModel):
|
|
50
|
+
model_config = ConfigDict(from_attributes=True, str_strip_whitespace=True)
|
|
60
51
|
|
|
61
|
-
|
|
52
|
+
id: int
|
|
53
|
+
name: str
|
|
54
|
+
email: str
|
|
62
55
|
|
|
63
|
-
|
|
56
|
+
user = User.model_validate(orm_obj) # from ORM object
|
|
57
|
+
user = User.model_validate_json(json_data) # from JSON
|
|
58
|
+
```
|
|
64
59
|
|
|
60
|
+
pytest Async Test:
|
|
65
61
|
```python
|
|
66
|
-
# Test discovery & fixtures
|
|
67
62
|
import pytest
|
|
68
|
-
from src.calculator import add
|
|
69
|
-
|
|
70
|
-
def test_add_positive_numbers():
|
|
71
|
-
"""Verify addition of positive integers."""
|
|
72
|
-
assert add(2, 3) == 5
|
|
73
63
|
|
|
74
64
|
@pytest.mark.asyncio
|
|
75
|
-
async def
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
assert result is not None
|
|
65
|
+
async def test_create_user(async_client):
|
|
66
|
+
response = await async_client.post("/users/", json={"name": "Test"})
|
|
67
|
+
assert response.status_code == 201
|
|
79
68
|
```
|
|
80
69
|
|
|
81
|
-
|
|
82
|
-
- ✅ Use pytest 8.4.2+ (not unittest)
|
|
83
|
-
- ✅ One assertion per test (clarity)
|
|
84
|
-
- ✅ Fixtures for setup/teardown
|
|
85
|
-
- ✅ `pytest.mark.asyncio` for async tests
|
|
86
|
-
- ✅ `pytest-mock` for mocking (not mock.patch)
|
|
87
|
-
- ✅ Coverage ≥85% enforced by quality gate
|
|
70
|
+
---
|
|
88
71
|
|
|
89
|
-
|
|
90
|
-
```bash
|
|
91
|
-
pytest # Run all tests
|
|
92
|
-
pytest -v # Verbose output
|
|
93
|
-
pytest --cov=src --cov-report=term # Coverage report (≥85% required)
|
|
94
|
-
pytest -k "pattern" # Run matching tests
|
|
95
|
-
pytest -m asyncio # Run async tests only
|
|
96
|
-
```
|
|
72
|
+
## Implementation Guide (5 minutes)
|
|
97
73
|
|
|
98
|
-
###
|
|
74
|
+
### Python 3.13 New Features
|
|
99
75
|
|
|
100
|
-
|
|
76
|
+
JIT Compiler (PEP 744):
|
|
77
|
+
- Experimental feature, disabled by default
|
|
78
|
+
- Enable: `PYTHON_JIT=1` environment variable
|
|
79
|
+
- Build option: `--enable-experimental-jit`
|
|
80
|
+
- Provides performance improvements for CPU-bound code
|
|
81
|
+
- Copy-and-patch JIT that translates specialized bytecode to machine code
|
|
101
82
|
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
-
|
|
105
|
-
-
|
|
106
|
-
-
|
|
83
|
+
GIL-Free Mode (PEP 703):
|
|
84
|
+
- Experimental free-threaded build (python3.13t)
|
|
85
|
+
- Allows true parallel thread execution
|
|
86
|
+
- Available in official Windows/macOS installers
|
|
87
|
+
- Best for: CPU-intensive multi-threaded applications
|
|
88
|
+
- Not recommended for production yet
|
|
107
89
|
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
90
|
+
Pattern Matching (match/case):
|
|
91
|
+
```python
|
|
92
|
+
def process_response(response: dict) -> str:
|
|
93
|
+
match response:
|
|
94
|
+
case {"status": "ok", "data": data}:
|
|
95
|
+
return f"Success: {data}"
|
|
96
|
+
case {"status": "error", "message": msg}:
|
|
97
|
+
return f"Error: {msg}"
|
|
98
|
+
case {"status": status} if status in ("pending", "processing"):
|
|
99
|
+
return "In progress..."
|
|
100
|
+
case _:
|
|
101
|
+
return "Unknown response"
|
|
111
102
|
```
|
|
112
103
|
|
|
113
|
-
|
|
114
|
-
```toml
|
|
115
|
-
[tool.ruff]
|
|
116
|
-
line-length = 100
|
|
117
|
-
target-version = "py313"
|
|
104
|
+
### FastAPI 0.115+ Patterns
|
|
118
105
|
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
106
|
+
Async Dependency Injection:
|
|
107
|
+
```python
|
|
108
|
+
from fastapi import FastAPI, Depends
|
|
109
|
+
from sqlalchemy.ext.asyncio import AsyncSession
|
|
110
|
+
from contextlib import asynccontextmanager
|
|
111
|
+
|
|
112
|
+
@asynccontextmanager
|
|
113
|
+
async def lifespan(app: FastAPI):
|
|
114
|
+
# Startup
|
|
115
|
+
await init_db()
|
|
116
|
+
yield
|
|
117
|
+
# Shutdown
|
|
118
|
+
await cleanup()
|
|
119
|
+
|
|
120
|
+
app = FastAPI(lifespan=lifespan)
|
|
121
|
+
|
|
122
|
+
async def get_db() -> AsyncGenerator[AsyncSession, None]:
|
|
123
|
+
async with async_session() as session:
|
|
124
|
+
yield session
|
|
125
|
+
|
|
126
|
+
@app.get("/users/{user_id}")
|
|
127
|
+
async def get_user(
|
|
128
|
+
user_id: int,
|
|
129
|
+
db: AsyncSession = Depends(get_db)
|
|
130
|
+
) -> UserResponse:
|
|
131
|
+
user = await get_user_by_id(db, user_id)
|
|
132
|
+
return UserResponse.model_validate(user)
|
|
122
133
|
```
|
|
123
134
|
|
|
124
|
-
|
|
125
|
-
```
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
135
|
+
Class-Based Dependencies:
|
|
136
|
+
```python
|
|
137
|
+
from fastapi import Depends
|
|
138
|
+
|
|
139
|
+
class Paginator:
|
|
140
|
+
def __init__(self, page: int = 1, size: int = 20):
|
|
141
|
+
self.page = max(1, page)
|
|
142
|
+
self.size = min(100, max(1, size))
|
|
143
|
+
self.offset = (self.page - 1) * self.size
|
|
131
144
|
|
|
132
|
-
|
|
145
|
+
@app.get("/items/")
|
|
146
|
+
async def list_items(pagination: Paginator = Depends()) -> list[Item]:
|
|
147
|
+
return await Item.get_page(pagination.offset, pagination.size)
|
|
148
|
+
```
|
|
133
149
|
|
|
134
|
-
|
|
150
|
+
### Django 5.2 LTS Features
|
|
135
151
|
|
|
152
|
+
Composite Primary Keys:
|
|
136
153
|
```python
|
|
137
|
-
from
|
|
154
|
+
from django.db import models
|
|
138
155
|
|
|
139
|
-
class
|
|
140
|
-
|
|
156
|
+
class OrderItem(models.Model):
|
|
157
|
+
order = models.ForeignKey(Order, on_delete=models.CASCADE)
|
|
158
|
+
product = models.ForeignKey(Product, on_delete=models.CASCADE)
|
|
159
|
+
quantity = models.IntegerField()
|
|
141
160
|
|
|
142
|
-
class
|
|
143
|
-
|
|
144
|
-
def method(self, x: int) -> str:
|
|
145
|
-
return str(x)
|
|
161
|
+
class Meta:
|
|
162
|
+
pk = models.CompositePrimaryKey("order", "product")
|
|
146
163
|
```
|
|
147
164
|
|
|
148
|
-
|
|
149
|
-
|
|
165
|
+
URL Reverse with Query Parameters:
|
|
150
166
|
```python
|
|
151
|
-
from
|
|
167
|
+
from django.urls import reverse
|
|
152
168
|
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
name: str = Field(min_length=1)
|
|
156
|
-
email: str # Auto-validated as email
|
|
169
|
+
url = reverse("search", query={"q": "django", "page": 1}, fragment="results")
|
|
170
|
+
# /search/?q=django&page=1#results
|
|
157
171
|
```
|
|
158
172
|
|
|
159
|
-
|
|
173
|
+
Automatic Model Imports in Shell:
|
|
160
174
|
```bash
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
mypy --show-column-numbers . # Precise error locations
|
|
175
|
+
python manage.py shell
|
|
176
|
+
# Models from all installed apps are automatically imported
|
|
164
177
|
```
|
|
165
178
|
|
|
166
|
-
###
|
|
179
|
+
### Pydantic v2.9 Deep Patterns
|
|
167
180
|
|
|
168
|
-
|
|
181
|
+
Reusable Validators with Annotated:
|
|
182
|
+
```python
|
|
183
|
+
from typing import Annotated
|
|
184
|
+
from pydantic import AfterValidator, BaseModel
|
|
169
185
|
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
186
|
+
def validate_positive(v: int) -> int:
|
|
187
|
+
if v <= 0:
|
|
188
|
+
raise ValueError("Must be positive")
|
|
189
|
+
return v
|
|
174
190
|
|
|
175
|
-
|
|
176
|
-
uv add pytest ruff mypy # Add to pyproject.toml
|
|
177
|
-
uv add --dev pytest-asyncio # Add as dev dependency
|
|
178
|
-
uv sync # Install all (from lock file)
|
|
191
|
+
PositiveInt = Annotated[int, AfterValidator(validate_positive)]
|
|
179
192
|
|
|
180
|
-
|
|
181
|
-
|
|
193
|
+
class Product(BaseModel):
|
|
194
|
+
price: PositiveInt
|
|
195
|
+
quantity: PositiveInt
|
|
182
196
|
```
|
|
183
197
|
|
|
184
|
-
|
|
185
|
-
```
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
198
|
+
Model Validator for Cross-Field Validation:
|
|
199
|
+
```python
|
|
200
|
+
from pydantic import BaseModel, model_validator
|
|
201
|
+
from typing import Self
|
|
202
|
+
|
|
203
|
+
class DateRange(BaseModel):
|
|
204
|
+
start_date: date
|
|
205
|
+
end_date: date
|
|
206
|
+
|
|
207
|
+
@model_validator(mode="after")
|
|
208
|
+
def validate_dates(self) -> Self:
|
|
209
|
+
if self.end_date < self.start_date:
|
|
210
|
+
raise ValueError("end_date must be after start_date")
|
|
211
|
+
return self
|
|
197
212
|
```
|
|
198
213
|
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
**TaskGroup** (cleaner than `asyncio.gather`):
|
|
202
|
-
|
|
214
|
+
ConfigDict Best Practices:
|
|
203
215
|
```python
|
|
204
|
-
import
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
#
|
|
211
|
-
#
|
|
212
|
-
|
|
213
|
-
asyncio.run(main())
|
|
216
|
+
from pydantic import BaseModel, ConfigDict
|
|
217
|
+
|
|
218
|
+
class BaseSchema(BaseModel):
|
|
219
|
+
model_config = ConfigDict(
|
|
220
|
+
from_attributes=True, # ORM object support
|
|
221
|
+
populate_by_name=True, # Allow aliases
|
|
222
|
+
extra="forbid", # Fail on unknown fields
|
|
223
|
+
str_strip_whitespace=True, # Clean strings
|
|
224
|
+
)
|
|
214
225
|
```
|
|
215
226
|
|
|
216
|
-
|
|
227
|
+
### SQLAlchemy 2.0 Async Patterns
|
|
217
228
|
|
|
229
|
+
Engine and Session Setup:
|
|
218
230
|
```python
|
|
219
|
-
from
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
231
|
+
from sqlalchemy.ext.asyncio import (
|
|
232
|
+
create_async_engine,
|
|
233
|
+
async_sessionmaker,
|
|
234
|
+
AsyncSession,
|
|
235
|
+
)
|
|
236
|
+
|
|
237
|
+
engine = create_async_engine(
|
|
238
|
+
"postgresql+asyncpg://user:pass@localhost/db",
|
|
239
|
+
pool_pre_ping=True,
|
|
240
|
+
echo=True,
|
|
241
|
+
)
|
|
242
|
+
|
|
243
|
+
async_session = async_sessionmaker(
|
|
244
|
+
engine,
|
|
245
|
+
class_=AsyncSession,
|
|
246
|
+
expire_on_commit=False, # Prevent detached instance errors
|
|
247
|
+
)
|
|
227
248
|
```
|
|
228
249
|
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
**Secrets Module** (token generation):
|
|
250
|
+
Repository Pattern:
|
|
232
251
|
```python
|
|
233
|
-
import
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
252
|
+
from sqlalchemy import select
|
|
253
|
+
from sqlalchemy.ext.asyncio import AsyncSession
|
|
254
|
+
|
|
255
|
+
class UserRepository:
|
|
256
|
+
def __init__(self, session: AsyncSession):
|
|
257
|
+
self.session = session
|
|
258
|
+
|
|
259
|
+
async def get_by_id(self, user_id: int) -> User | None:
|
|
260
|
+
result = await self.session.execute(
|
|
261
|
+
select(User).where(User.id == user_id)
|
|
262
|
+
)
|
|
263
|
+
return result.scalar_one_or_none()
|
|
264
|
+
|
|
265
|
+
async def create(self, user: UserCreate) -> User:
|
|
266
|
+
db_user = User(**user.model_dump())
|
|
267
|
+
self.session.add(db_user)
|
|
268
|
+
await self.session.commit()
|
|
269
|
+
await self.session.refresh(db_user)
|
|
270
|
+
return db_user
|
|
237
271
|
```
|
|
238
272
|
|
|
239
|
-
|
|
273
|
+
Streaming Large Results:
|
|
240
274
|
```python
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
# ❌ INSECURE (removed in Python 3.13)
|
|
247
|
-
hash_obj = hashlib.md5(b"password") # ValueError!
|
|
275
|
+
async def stream_users(db: AsyncSession):
|
|
276
|
+
result = await db.stream(select(User))
|
|
277
|
+
async for user in result.scalars():
|
|
278
|
+
yield user
|
|
248
279
|
```
|
|
249
280
|
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
## Python 3.13 New Features
|
|
253
|
-
|
|
254
|
-
### PEP 695 — Type Parameter Syntax
|
|
281
|
+
### pytest Advanced Patterns
|
|
255
282
|
|
|
283
|
+
Async Fixtures with pytest-asyncio:
|
|
256
284
|
```python
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
285
|
+
import pytest
|
|
286
|
+
import pytest_asyncio
|
|
287
|
+
from httpx import AsyncClient
|
|
288
|
+
|
|
289
|
+
@pytest_asyncio.fixture
|
|
290
|
+
async def async_client(app) -> AsyncGenerator[AsyncClient, None]:
|
|
291
|
+
async with AsyncClient(app=app, base_url="http://test") as client:
|
|
292
|
+
yield client
|
|
293
|
+
|
|
294
|
+
@pytest_asyncio.fixture
|
|
295
|
+
async def db_session() -> AsyncGenerator[AsyncSession, None]:
|
|
296
|
+
async with async_session() as session:
|
|
297
|
+
async with session.begin():
|
|
298
|
+
yield session
|
|
299
|
+
await session.rollback()
|
|
266
300
|
```
|
|
267
301
|
|
|
268
|
-
|
|
269
|
-
|
|
302
|
+
Parametrized Tests:
|
|
270
303
|
```python
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
304
|
+
@pytest.mark.parametrize(
|
|
305
|
+
"input_data,expected_status",
|
|
306
|
+
[
|
|
307
|
+
({"name": "Valid"}, 201),
|
|
308
|
+
({"name": ""}, 422),
|
|
309
|
+
({}, 422),
|
|
310
|
+
],
|
|
311
|
+
ids=["valid", "empty_name", "missing_name"],
|
|
312
|
+
)
|
|
313
|
+
async def test_create_user(async_client, input_data, expected_status):
|
|
314
|
+
response = await async_client.post("/users/", json=input_data)
|
|
315
|
+
assert response.status_code == expected_status
|
|
278
316
|
```
|
|
279
317
|
|
|
280
|
-
|
|
281
|
-
|
|
318
|
+
Fixture Factories:
|
|
282
319
|
```python
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
320
|
+
@pytest.fixture
|
|
321
|
+
def user_factory():
|
|
322
|
+
async def _create_user(db: AsyncSession, **kwargs) -> User:
|
|
323
|
+
defaults = {"name": "Test User", "email": "test@example.com"}
|
|
324
|
+
user = User(**(defaults | kwargs))
|
|
325
|
+
db.add(user)
|
|
326
|
+
await db.commit()
|
|
327
|
+
return user
|
|
328
|
+
return _create_user
|
|
291
329
|
```
|
|
292
330
|
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
## Example Workflow
|
|
331
|
+
### Type Hints Modern Patterns
|
|
296
332
|
|
|
297
|
-
|
|
298
|
-
```
|
|
299
|
-
|
|
300
|
-
source .venv/bin/activate
|
|
301
|
-
uv add pytest ruff mypy fastapi pydantic
|
|
302
|
-
```
|
|
333
|
+
Protocol for Structural Typing:
|
|
334
|
+
```python
|
|
335
|
+
from typing import Protocol, runtime_checkable
|
|
303
336
|
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
ruff check --fix . # REFACTOR: Fix code quality
|
|
337
|
+
@runtime_checkable
|
|
338
|
+
class Repository(Protocol[T]):
|
|
339
|
+
async def get(self, id: int) -> T | None: ...
|
|
340
|
+
async def create(self, data: dict) -> T: ...
|
|
341
|
+
async def delete(self, id: int) -> bool: ...
|
|
310
342
|
```
|
|
311
343
|
|
|
312
|
-
|
|
313
|
-
```
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
|
|
344
|
+
ParamSpec for Decorators:
|
|
345
|
+
```python
|
|
346
|
+
from typing import ParamSpec, TypeVar, Callable
|
|
347
|
+
from functools import wraps
|
|
348
|
+
|
|
349
|
+
P = ParamSpec("P")
|
|
350
|
+
R = TypeVar("R")
|
|
351
|
+
|
|
352
|
+
def retry(times: int = 3) -> Callable[[Callable[P, R]], Callable[P, R]]:
|
|
353
|
+
def decorator(func: Callable[P, R]) -> Callable[P, R]:
|
|
354
|
+
@wraps(func)
|
|
355
|
+
async def wrapper(*args: P.args, **kwargs: P.kwargs) -> R:
|
|
356
|
+
for attempt in range(times):
|
|
357
|
+
try:
|
|
358
|
+
return await func(*args, **kwargs)
|
|
359
|
+
except Exception:
|
|
360
|
+
if attempt == times - 1:
|
|
361
|
+
raise
|
|
362
|
+
return wrapper
|
|
363
|
+
return decorator
|
|
317
364
|
```
|
|
318
365
|
|
|
319
|
-
|
|
366
|
+
### Package Management
|
|
320
367
|
|
|
321
|
-
|
|
368
|
+
pyproject.toml (Poetry):
|
|
369
|
+
```toml
|
|
370
|
+
[tool.poetry]
|
|
371
|
+
name = "my-project"
|
|
372
|
+
version = "1.0.0"
|
|
373
|
+
python = "^3.13"
|
|
322
374
|
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
|
|
326
|
-
|
|
327
|
-
| **ruff** | 0.13.1 | Lint/Format | ✅ New standard |
|
|
328
|
-
| **mypy** | 1.8.0 | Type checking | ✅ Current |
|
|
329
|
-
| **uv** | 0.9.3 | Package manager | ✅ Recommended |
|
|
330
|
-
| **FastAPI** | 0.115.0 | Web framework | ✅ Latest |
|
|
331
|
-
| **Pydantic** | 2.7.0 | Validation | ✅ Latest |
|
|
332
|
-
| **SQLAlchemy** | 2.0.28 | ORM | ✅ Latest |
|
|
375
|
+
[tool.poetry.dependencies]
|
|
376
|
+
fastapi = "^0.115.0"
|
|
377
|
+
pydantic = "^2.9.0"
|
|
378
|
+
sqlalchemy = {extras = ["asyncio"], version = "^2.0.0"}
|
|
333
379
|
|
|
334
|
-
|
|
380
|
+
[tool.poetry.group.dev.dependencies]
|
|
381
|
+
pytest = "^8.0"
|
|
382
|
+
pytest-asyncio = "^0.24"
|
|
383
|
+
ruff = "^0.8"
|
|
335
384
|
|
|
336
|
-
|
|
385
|
+
[tool.ruff]
|
|
386
|
+
line-length = 100
|
|
387
|
+
target-version = "py313"
|
|
337
388
|
|
|
338
|
-
|
|
339
|
-
|
|
340
|
-
|
|
341
|
-
- Existing CI/CD workflows
|
|
389
|
+
[tool.pytest.ini_options]
|
|
390
|
+
asyncio_mode = "auto"
|
|
391
|
+
```
|
|
342
392
|
|
|
343
|
-
|
|
393
|
+
uv (Fast Package Manager):
|
|
394
|
+
```bash
|
|
395
|
+
# Install uv
|
|
396
|
+
curl -LsSf https://astral.sh/uv/install.sh | sh
|
|
344
397
|
|
|
345
|
-
|
|
346
|
-
|
|
347
|
-
- Migration guide (3.12 → 3.13)
|
|
348
|
-
- Performance optimization recommendations
|
|
398
|
+
# Create virtual environment
|
|
399
|
+
uv venv
|
|
349
400
|
|
|
350
|
-
|
|
401
|
+
# Install dependencies
|
|
402
|
+
uv pip install -r requirements.txt
|
|
351
403
|
|
|
352
|
-
|
|
353
|
-
|
|
354
|
-
|
|
404
|
+
# Add dependency
|
|
405
|
+
uv add fastapi
|
|
406
|
+
```
|
|
355
407
|
|
|
356
408
|
---
|
|
357
409
|
|
|
358
|
-
##
|
|
359
|
-
|
|
360
|
-
- Language-specific source directories (e.g. `src/`, `app/`).
|
|
361
|
-
- Language-specific build/test configuration files (e.g. `pyproject.toml`).
|
|
362
|
-
- Relevant test suites and sample data.
|
|
363
|
-
|
|
364
|
-
## Outputs
|
|
410
|
+
## Advanced Implementation (10+ minutes)
|
|
365
411
|
|
|
366
|
-
|
|
367
|
-
-
|
|
368
|
-
-
|
|
412
|
+
For comprehensive coverage including:
|
|
413
|
+
- Production deployment patterns (Docker, Kubernetes)
|
|
414
|
+
- Advanced async patterns (task groups, semaphores)
|
|
415
|
+
- Data science integration (numpy, pandas, polars)
|
|
416
|
+
- Performance optimization techniques
|
|
417
|
+
- Security best practices (OWASP patterns)
|
|
418
|
+
- CI/CD integration patterns
|
|
369
419
|
|
|
370
|
-
|
|
420
|
+
See:
|
|
421
|
+
- [reference.md](reference.md) - Complete reference documentation
|
|
422
|
+
- [examples.md](examples.md) - Production-ready code examples
|
|
371
423
|
|
|
372
|
-
|
|
373
|
-
- When project dependencies are not in pyproject.toml.
|
|
374
|
-
- When test coverage falls below 85%.
|
|
424
|
+
---
|
|
375
425
|
|
|
376
|
-
##
|
|
426
|
+
## Context7 Library Mappings
|
|
377
427
|
|
|
378
|
-
|
|
379
|
-
-
|
|
380
|
-
|
|
428
|
+
```
|
|
429
|
+
/tiangolo/fastapi - FastAPI async web framework
|
|
430
|
+
/django/django - Django web framework
|
|
431
|
+
/pydantic/pydantic - Data validation with type annotations
|
|
432
|
+
/sqlalchemy/sqlalchemy - SQL toolkit and ORM
|
|
433
|
+
/pytest-dev/pytest - Testing framework
|
|
434
|
+
/numpy/numpy - Numerical computing
|
|
435
|
+
/pandas-dev/pandas - Data analysis library
|
|
436
|
+
/pola-rs/polars - Fast DataFrame library
|
|
437
|
+
```
|
|
381
438
|
|
|
382
439
|
---
|
|
383
440
|
|
|
384
|
-
##
|
|
441
|
+
## Works Well With
|
|
385
442
|
|
|
386
|
-
-
|
|
387
|
-
-
|
|
388
|
-
-
|
|
389
|
-
-
|
|
390
|
-
-
|
|
391
|
-
- **FastAPI 0.115.0**: https://fastapi.tiangolo.com/ (accessed 2025-10-22)
|
|
392
|
-
- **Pydantic 2.7.0**: https://docs.pydantic.dev/ (accessed 2025-10-22)
|
|
443
|
+
- `moai-domain-backend` - REST API and microservices architecture
|
|
444
|
+
- `moai-domain-database` - SQL patterns and ORM optimization
|
|
445
|
+
- `moai-quality-testing` - TDD and testing strategies
|
|
446
|
+
- `moai-essentials-debug` - AI-powered debugging
|
|
447
|
+
- `moai-foundation-trust` - TRUST 5 quality principles
|
|
393
448
|
|
|
394
449
|
---
|
|
395
450
|
|
|
396
|
-
##
|
|
451
|
+
## Troubleshooting
|
|
397
452
|
|
|
398
|
-
|
|
399
|
-
- **v1.0.0** (2025-03-29): Initial Skill with pytest, mypy, ruff, black, uv coverage
|
|
453
|
+
Common Issues:
|
|
400
454
|
|
|
401
|
-
|
|
455
|
+
Python Version Check:
|
|
456
|
+
```bash
|
|
457
|
+
python --version # Should be 3.13+
|
|
458
|
+
python -c "import sys; print(sys.version_info)"
|
|
459
|
+
```
|
|
402
460
|
|
|
403
|
-
|
|
461
|
+
Async Session Detached Error:
|
|
462
|
+
- Solution: Set `expire_on_commit=False` in session config
|
|
463
|
+
- Or: Use `await session.refresh(obj)` after commit
|
|
464
|
+
|
|
465
|
+
pytest asyncio Mode Warning:
|
|
466
|
+
```toml
|
|
467
|
+
# pyproject.toml
|
|
468
|
+
[tool.pytest.ini_options]
|
|
469
|
+
asyncio_mode = "auto"
|
|
470
|
+
asyncio_default_fixture_loop_scope = "function"
|
|
471
|
+
```
|
|
404
472
|
|
|
405
|
-
|
|
406
|
-
- `
|
|
407
|
-
- `
|
|
408
|
-
- `
|
|
409
|
-
- `moai-domain-backend` (FastAPI microservices)
|
|
473
|
+
Pydantic v2 Migration:
|
|
474
|
+
- `parse_obj()` is now `model_validate()`
|
|
475
|
+
- `parse_raw()` is now `model_validate_json()`
|
|
476
|
+
- `from_orm()` requires `from_attributes=True` in ConfigDict
|
|
410
477
|
|
|
411
478
|
---
|
|
412
479
|
|
|
413
|
-
|
|
414
|
-
|
|
415
|
-
✅ **DO**:
|
|
416
|
-
- Use ruff 0.13.1 as linter + formatter (not black + pylint)
|
|
417
|
-
- Specify exact Python version: `requires-python = "^3.13"`
|
|
418
|
-
- Use pytest 8.4.2 for all tests
|
|
419
|
-
- Enable type checking: mypy --strict
|
|
420
|
-
- Run quality gate before each commit
|
|
421
|
-
- Use uv for package management (10x faster)
|
|
422
|
-
- Add docstrings to public APIs
|
|
423
|
-
- Use f-strings (PEP 701 supports nested expressions)
|
|
424
|
-
|
|
425
|
-
❌ **DON'T**:
|
|
426
|
-
- Use black + pylint (deprecated, use ruff instead)
|
|
427
|
-
- Use md5 hashing (removed in Python 3.13)
|
|
428
|
-
- Mix pytest with unittest
|
|
429
|
-
- Ignore coverage requirements (<85% fails)
|
|
430
|
-
- Use old type hint syntax (use PEP 695 `class Foo[T]:`)
|
|
431
|
-
- Use `asyncio.gather` without error handling (use TaskGroup instead)
|
|
480
|
+
Last Updated: 2025-12-07
|
|
481
|
+
Status: Active (v1.0.0)
|