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,316 +1,804 @@
|
|
|
1
|
-
# Python 3.13
|
|
1
|
+
# Python 3.13+ Complete Reference
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
## Language Features Reference
|
|
4
4
|
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
## Python Runtime Commands
|
|
5
|
+
### Python 3.13 Feature Matrix
|
|
8
6
|
|
|
9
|
-
|
|
|
10
|
-
|
|
11
|
-
|
|
|
12
|
-
|
|
|
13
|
-
|
|
|
14
|
-
|
|
|
15
|
-
|
|
|
16
|
-
| `python -m module` | Run module as script | `python -m pytest` |
|
|
17
|
-
| `python -i script.py` | Run script with interactive shell | `python -i script.py` |
|
|
18
|
-
| `python --help` | Show Python help | `python --help` |
|
|
7
|
+
| Feature | Status | PEP | Production Ready |
|
|
8
|
+
|---------|--------|-----|------------------|
|
|
9
|
+
| JIT Compiler | Experimental | PEP 744 | No |
|
|
10
|
+
| Free Threading (GIL-free) | Experimental | PEP 703 | No |
|
|
11
|
+
| Pattern Matching | Stable | PEP 634-636 | Yes |
|
|
12
|
+
| Type Parameter Syntax | Stable | PEP 695 | Yes |
|
|
13
|
+
| Exception Groups | Stable | PEP 654 | Yes |
|
|
19
14
|
|
|
20
|
-
|
|
15
|
+
### JIT Compiler Details (PEP 744)
|
|
21
16
|
|
|
22
|
-
|
|
17
|
+
Build Configuration:
|
|
18
|
+
```bash
|
|
19
|
+
# Build Python with JIT support
|
|
20
|
+
./configure --enable-experimental-jit
|
|
21
|
+
make
|
|
23
22
|
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
| `source .venv/bin/activate` | Activate (macOS/Linux) | `source .venv/bin/activate` |
|
|
29
|
-
| `.venv\Scripts\activate` | Activate (Windows) | `.venv\Scripts\activate` |
|
|
30
|
-
| `deactivate` | Deactivate virtual environment | `deactivate` |
|
|
31
|
-
| `which python` | Check active Python | `which python` → `.venv/bin/python` |
|
|
23
|
+
# Or with "disabled by default" mode
|
|
24
|
+
./configure --enable-experimental-jit=yes-off
|
|
25
|
+
make
|
|
26
|
+
```
|
|
32
27
|
|
|
33
|
-
|
|
28
|
+
Runtime Activation:
|
|
29
|
+
```bash
|
|
30
|
+
# Enable JIT at runtime
|
|
31
|
+
PYTHON_JIT=1 python my_script.py
|
|
34
32
|
|
|
35
|
-
|
|
33
|
+
# With debugging info
|
|
34
|
+
PYTHON_JIT=1 PYTHON_JIT_DEBUG=1 python my_script.py
|
|
35
|
+
```
|
|
36
36
|
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
| `uv sync` | Install from lock file | `uv sync` |
|
|
42
|
-
| `uv pip list` | List packages | `uv pip list` |
|
|
43
|
-
| `uv pip show package` | Show package details | `uv pip show pytest` |
|
|
44
|
-
| `uv remove package` | Remove package | `uv remove pytest` |
|
|
45
|
-
| `uv update` | Update all packages | `uv update` |
|
|
46
|
-
| `uv publish` | Publish to PyPI | `uv publish` |
|
|
47
|
-
| `uv build` | Build distribution | `uv build` |
|
|
37
|
+
Expected Benefits:
|
|
38
|
+
- 5-10% performance improvement for CPU-bound code
|
|
39
|
+
- Better optimization for hot loops
|
|
40
|
+
- Future foundation for more aggressive optimizations
|
|
48
41
|
|
|
49
|
-
|
|
42
|
+
### Free Threading (PEP 703)
|
|
50
43
|
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
| Command | Purpose | Example |
|
|
54
|
-
|---------|---------|---------|
|
|
55
|
-
| `pytest` | Run all tests | `pytest` |
|
|
56
|
-
| `pytest tests/` | Run tests in directory | `pytest tests/` |
|
|
57
|
-
| `pytest file.py` | Run tests in file | `pytest tests/test_calculator.py` |
|
|
58
|
-
| `pytest -v` | Verbose output | `pytest -v` |
|
|
59
|
-
| `pytest -vv` | Very verbose output | `pytest -vv` |
|
|
60
|
-
| `pytest -s` | Show print statements | `pytest -s` |
|
|
61
|
-
| `pytest -x` | Stop on first failure | `pytest -x` |
|
|
62
|
-
| `pytest -k "pattern"` | Run matching tests | `pytest -k "test_add"` |
|
|
63
|
-
| `pytest -m asyncio` | Run async tests only | `pytest -m asyncio` |
|
|
64
|
-
| `pytest --cov=src` | Coverage report | `pytest --cov=src --cov-report=term` |
|
|
65
|
-
| `pytest --cov-report=html` | HTML coverage report | `pytest --cov-report=html` |
|
|
66
|
-
| `pytest --tb=short` | Short traceback format | `pytest --tb=short` |
|
|
67
|
-
| `pytest --tb=long` | Long traceback format | `pytest --tb=long` |
|
|
68
|
-
| `pytest --lf` | Run last failed tests | `pytest --lf` |
|
|
69
|
-
| `pytest --ff` | Fail-first (last failures first) | `pytest --ff` |
|
|
70
|
-
| `pytest --maxfail=3` | Stop after 3 failures | `pytest --maxfail=3` |
|
|
71
|
-
| `pytest -n 4` | Run in parallel (4 workers) | `pytest -n 4` |
|
|
72
|
-
| `pytest --junitxml=report.xml` | JUnit XML report | `pytest --junitxml=report.xml` |
|
|
73
|
-
| `pytest --co` | Collect tests only (don't run) | `pytest --co` |
|
|
74
|
-
| `pytest --setup-show` | Show fixture setup/teardown | `pytest --setup-show` |
|
|
75
|
-
|
|
76
|
-
**Coverage Quality Gate**:
|
|
44
|
+
Installation:
|
|
77
45
|
```bash
|
|
78
|
-
#
|
|
79
|
-
|
|
46
|
+
# macOS/Windows: Use official installers with free-threaded option
|
|
47
|
+
# Linux: Build from source
|
|
48
|
+
./configure --disable-gil
|
|
49
|
+
make
|
|
50
|
+
|
|
51
|
+
# Verify installation
|
|
52
|
+
python3.13t -c "import sys; print(sys._is_gil_enabled())"
|
|
80
53
|
```
|
|
81
54
|
|
|
82
|
-
|
|
55
|
+
Thread-Safe Patterns:
|
|
56
|
+
```python
|
|
57
|
+
import threading
|
|
58
|
+
from queue import Queue
|
|
59
|
+
|
|
60
|
+
def parallel_processing(items: list[str], workers: int = 4) -> list[str]:
|
|
61
|
+
results = Queue()
|
|
62
|
+
threads = []
|
|
63
|
+
|
|
64
|
+
def worker(chunk: list[str]):
|
|
65
|
+
for item in chunk:
|
|
66
|
+
processed = heavy_computation(item)
|
|
67
|
+
results.put(processed)
|
|
68
|
+
|
|
69
|
+
chunk_size = len(items) // workers
|
|
70
|
+
for i in range(workers):
|
|
71
|
+
start = i * chunk_size
|
|
72
|
+
end = start + chunk_size if i < workers - 1 else len(items)
|
|
73
|
+
t = threading.Thread(target=worker, args=(items[start:end],))
|
|
74
|
+
threads.append(t)
|
|
75
|
+
t.start()
|
|
76
|
+
|
|
77
|
+
for t in threads:
|
|
78
|
+
t.join()
|
|
83
79
|
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
### Check Commands
|
|
87
|
-
|
|
88
|
-
| Command | Purpose | Example |
|
|
89
|
-
|---------|---------|---------|
|
|
90
|
-
| `ruff check .` | Check all files | `ruff check .` |
|
|
91
|
-
| `ruff check src/` | Check directory | `ruff check src/` |
|
|
92
|
-
| `ruff check file.py` | Check file | `ruff check src/calculator.py` |
|
|
93
|
-
| `ruff check . --fix` | Check and auto-fix | `ruff check . --fix` |
|
|
94
|
-
| `ruff check --show-fixes` | Show what would be fixed | `ruff check --show-fixes` |
|
|
95
|
-
| `ruff check --select E501` | Check specific rule | `ruff check --select E501` |
|
|
96
|
-
| `ruff check --ignore E501` | Ignore specific rule | `ruff check --ignore E501` |
|
|
97
|
-
| `ruff check --statistics` | Show violation statistics | `ruff check --statistics` |
|
|
98
|
-
|
|
99
|
-
### Format Commands
|
|
100
|
-
|
|
101
|
-
| Command | Purpose | Example |
|
|
102
|
-
|---------|---------|---------|
|
|
103
|
-
| `ruff format .` | Format all files | `ruff format .` |
|
|
104
|
-
| `ruff format src/` | Format directory | `ruff format src/` |
|
|
105
|
-
| `ruff format file.py` | Format file | `ruff format src/calculator.py` |
|
|
106
|
-
| `ruff format --check` | Check if formatting needed | `ruff format --check` |
|
|
107
|
-
|
|
108
|
-
### Rule Categories
|
|
109
|
-
|
|
110
|
-
| Category | Rules | Example |
|
|
111
|
-
|----------|-------|---------|
|
|
112
|
-
| **E** | Errors | `E501` (line too long) |
|
|
113
|
-
| **F** | PyFlakes (logic errors) | `F401` (unused import) |
|
|
114
|
-
| **W** | Warnings | `W291` (trailing whitespace) |
|
|
115
|
-
| **I** | Import sorting | `I001` (import sort order) |
|
|
116
|
-
| **C** | Complexity | `C901` (function too complex) |
|
|
117
|
-
|
|
118
|
-
**pyproject.toml Configuration**:
|
|
119
|
-
```toml
|
|
120
|
-
[tool.ruff]
|
|
121
|
-
line-length = 100
|
|
122
|
-
target-version = "py313"
|
|
123
|
-
|
|
124
|
-
[tool.ruff.lint]
|
|
125
|
-
select = ["E", "F", "W", "I", "C901"]
|
|
126
|
-
|
|
127
|
-
[tool.ruff.format]
|
|
128
|
-
indent-width = 4
|
|
80
|
+
return [results.get() for _ in range(results.qsize())]
|
|
129
81
|
```
|
|
130
82
|
|
|
131
|
-
|
|
83
|
+
### Pattern Matching Complete Guide
|
|
84
|
+
|
|
85
|
+
Literal Patterns:
|
|
86
|
+
```python
|
|
87
|
+
def http_status(status: int) -> str:
|
|
88
|
+
match status:
|
|
89
|
+
case 200:
|
|
90
|
+
return "OK"
|
|
91
|
+
case 201:
|
|
92
|
+
return "Created"
|
|
93
|
+
case 400:
|
|
94
|
+
return "Bad Request"
|
|
95
|
+
case 404:
|
|
96
|
+
return "Not Found"
|
|
97
|
+
case 500:
|
|
98
|
+
return "Internal Server Error"
|
|
99
|
+
case _:
|
|
100
|
+
return f"Unknown status: {status}"
|
|
101
|
+
```
|
|
102
|
+
|
|
103
|
+
Structural Patterns:
|
|
104
|
+
```python
|
|
105
|
+
def process_event(event: dict) -> None:
|
|
106
|
+
match event:
|
|
107
|
+
case {"type": "click", "x": x, "y": y}:
|
|
108
|
+
handle_click(x, y)
|
|
109
|
+
case {"type": "keypress", "key": key, "modifiers": [*mods]}:
|
|
110
|
+
handle_keypress(key, mods)
|
|
111
|
+
case {"type": "scroll", "delta": delta, **rest}:
|
|
112
|
+
handle_scroll(delta, rest)
|
|
113
|
+
```
|
|
132
114
|
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
115
|
+
Class Patterns:
|
|
116
|
+
```python
|
|
117
|
+
from dataclasses import dataclass
|
|
118
|
+
|
|
119
|
+
@dataclass
|
|
120
|
+
class Point:
|
|
121
|
+
x: float
|
|
122
|
+
y: float
|
|
123
|
+
|
|
124
|
+
@dataclass
|
|
125
|
+
class Circle:
|
|
126
|
+
center: Point
|
|
127
|
+
radius: float
|
|
128
|
+
|
|
129
|
+
@dataclass
|
|
130
|
+
class Rectangle:
|
|
131
|
+
top_left: Point
|
|
132
|
+
width: float
|
|
133
|
+
height: float
|
|
134
|
+
|
|
135
|
+
def area(shape) -> float:
|
|
136
|
+
match shape:
|
|
137
|
+
case Circle(center=_, radius=r):
|
|
138
|
+
return 3.14159 * r ** 2
|
|
139
|
+
case Rectangle(width=w, height=h):
|
|
140
|
+
return w * h
|
|
141
|
+
case Point():
|
|
142
|
+
return 0.0
|
|
143
|
+
```
|
|
144
|
+
|
|
145
|
+
Guard Clauses:
|
|
146
|
+
```python
|
|
147
|
+
def validate_user(user: dict) -> str:
|
|
148
|
+
match user:
|
|
149
|
+
case {"age": age} if age < 0:
|
|
150
|
+
return "Invalid age"
|
|
151
|
+
case {"age": age} if age < 18:
|
|
152
|
+
return "Minor"
|
|
153
|
+
case {"age": age, "verified": True} if age >= 18:
|
|
154
|
+
return "Verified adult"
|
|
155
|
+
case {"age": age} if age >= 18:
|
|
156
|
+
return "Unverified adult"
|
|
157
|
+
case _:
|
|
158
|
+
return "Invalid user data"
|
|
163
159
|
```
|
|
164
160
|
|
|
165
161
|
---
|
|
166
162
|
|
|
167
|
-
##
|
|
163
|
+
## Web Framework Reference
|
|
164
|
+
|
|
165
|
+
### FastAPI 0.115+ Complete Reference
|
|
166
|
+
|
|
167
|
+
Application Structure:
|
|
168
|
+
```
|
|
169
|
+
project/
|
|
170
|
+
├── app/
|
|
171
|
+
│ ├── __init__.py
|
|
172
|
+
│ ├── main.py # Application entry point
|
|
173
|
+
│ ├── config.py # Settings and configuration
|
|
174
|
+
│ ├── dependencies.py # Shared dependencies
|
|
175
|
+
│ ├── api/
|
|
176
|
+
│ │ ├── __init__.py
|
|
177
|
+
│ │ ├── v1/
|
|
178
|
+
│ │ │ ├── __init__.py
|
|
179
|
+
│ │ │ ├── router.py # API router
|
|
180
|
+
│ │ │ └── endpoints/
|
|
181
|
+
│ │ │ ├── users.py
|
|
182
|
+
│ │ │ └── items.py
|
|
183
|
+
│ ├── core/
|
|
184
|
+
│ │ ├── security.py # Auth and security
|
|
185
|
+
│ │ └── exceptions.py # Custom exceptions
|
|
186
|
+
│ ├── models/
|
|
187
|
+
│ │ ├── __init__.py
|
|
188
|
+
│ │ ├── user.py # SQLAlchemy models
|
|
189
|
+
│ │ └── item.py
|
|
190
|
+
│ ├── schemas/
|
|
191
|
+
│ │ ├── __init__.py
|
|
192
|
+
│ │ ├── user.py # Pydantic schemas
|
|
193
|
+
│ │ └── item.py
|
|
194
|
+
│ ├── services/
|
|
195
|
+
│ │ ├── __init__.py
|
|
196
|
+
│ │ └── user_service.py # Business logic
|
|
197
|
+
│ └── repositories/
|
|
198
|
+
│ ├── __init__.py
|
|
199
|
+
│ └── user_repo.py # Data access
|
|
200
|
+
├── tests/
|
|
201
|
+
├── pyproject.toml
|
|
202
|
+
└── Dockerfile
|
|
203
|
+
```
|
|
168
204
|
|
|
169
|
-
|
|
205
|
+
Configuration with Pydantic Settings:
|
|
206
|
+
```python
|
|
207
|
+
# app/config.py
|
|
208
|
+
from pydantic_settings import BaseSettings, SettingsConfigDict
|
|
209
|
+
from functools import lru_cache
|
|
210
|
+
|
|
211
|
+
class Settings(BaseSettings):
|
|
212
|
+
model_config = SettingsConfigDict(
|
|
213
|
+
env_file=".env",
|
|
214
|
+
env_file_encoding="utf-8",
|
|
215
|
+
case_sensitive=False,
|
|
216
|
+
)
|
|
217
|
+
|
|
218
|
+
# Application
|
|
219
|
+
app_name: str = "My API"
|
|
220
|
+
debug: bool = False
|
|
221
|
+
api_v1_prefix: str = "/api/v1"
|
|
222
|
+
|
|
223
|
+
# Database
|
|
224
|
+
database_url: str
|
|
225
|
+
db_pool_size: int = 5
|
|
226
|
+
db_max_overflow: int = 10
|
|
227
|
+
|
|
228
|
+
# Security
|
|
229
|
+
secret_key: str
|
|
230
|
+
access_token_expire_minutes: int = 30
|
|
231
|
+
algorithm: str = "HS256"
|
|
232
|
+
|
|
233
|
+
# External Services
|
|
234
|
+
redis_url: str | None = None
|
|
235
|
+
|
|
236
|
+
@lru_cache
|
|
237
|
+
def get_settings() -> Settings:
|
|
238
|
+
return Settings()
|
|
239
|
+
```
|
|
170
240
|
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
241
|
+
Advanced Dependency Injection:
|
|
242
|
+
```python
|
|
243
|
+
# app/dependencies.py
|
|
244
|
+
from fastapi import Depends, HTTPException, status
|
|
245
|
+
from fastapi.security import OAuth2PasswordBearer
|
|
246
|
+
from sqlalchemy.ext.asyncio import AsyncSession
|
|
247
|
+
from jose import jwt, JWTError
|
|
248
|
+
|
|
249
|
+
oauth2_scheme = OAuth2PasswordBearer(tokenUrl="auth/token")
|
|
250
|
+
|
|
251
|
+
async def get_db() -> AsyncGenerator[AsyncSession, None]:
|
|
252
|
+
async with async_session() as session:
|
|
253
|
+
try:
|
|
254
|
+
yield session
|
|
255
|
+
await session.commit()
|
|
256
|
+
except Exception:
|
|
257
|
+
await session.rollback()
|
|
258
|
+
raise
|
|
259
|
+
|
|
260
|
+
async def get_current_user(
|
|
261
|
+
token: str = Depends(oauth2_scheme),
|
|
262
|
+
db: AsyncSession = Depends(get_db),
|
|
263
|
+
) -> User:
|
|
264
|
+
credentials_exception = HTTPException(
|
|
265
|
+
status_code=status.HTTP_401_UNAUTHORIZED,
|
|
266
|
+
detail="Could not validate credentials",
|
|
267
|
+
headers={"WWW-Authenticate": "Bearer"},
|
|
268
|
+
)
|
|
269
|
+
try:
|
|
270
|
+
payload = jwt.decode(token, SECRET_KEY, algorithms=[ALGORITHM])
|
|
271
|
+
user_id: int = payload.get("sub")
|
|
272
|
+
if user_id is None:
|
|
273
|
+
raise credentials_exception
|
|
274
|
+
except JWTError:
|
|
275
|
+
raise credentials_exception
|
|
276
|
+
|
|
277
|
+
user = await UserRepository(db).get_by_id(user_id)
|
|
278
|
+
if user is None:
|
|
279
|
+
raise credentials_exception
|
|
280
|
+
return user
|
|
281
|
+
|
|
282
|
+
async def get_current_active_user(
|
|
283
|
+
current_user: User = Depends(get_current_user),
|
|
284
|
+
) -> User:
|
|
285
|
+
if not current_user.is_active:
|
|
286
|
+
raise HTTPException(status_code=400, detail="Inactive user")
|
|
287
|
+
return current_user
|
|
288
|
+
|
|
289
|
+
def require_role(required_role: str):
|
|
290
|
+
async def role_checker(
|
|
291
|
+
current_user: User = Depends(get_current_active_user),
|
|
292
|
+
) -> User:
|
|
293
|
+
if current_user.role != required_role:
|
|
294
|
+
raise HTTPException(
|
|
295
|
+
status_code=status.HTTP_403_FORBIDDEN,
|
|
296
|
+
detail="Insufficient permissions",
|
|
297
|
+
)
|
|
298
|
+
return current_user
|
|
299
|
+
return role_checker
|
|
300
|
+
```
|
|
177
301
|
|
|
178
|
-
|
|
302
|
+
Background Tasks:
|
|
303
|
+
```python
|
|
304
|
+
from fastapi import BackgroundTasks
|
|
305
|
+
|
|
306
|
+
async def send_notification(email: str, message: str):
|
|
307
|
+
# Simulate email sending
|
|
308
|
+
await asyncio.sleep(1)
|
|
309
|
+
print(f"Sent to {email}: {message}")
|
|
310
|
+
|
|
311
|
+
@app.post("/users/")
|
|
312
|
+
async def create_user(
|
|
313
|
+
user: UserCreate,
|
|
314
|
+
background_tasks: BackgroundTasks,
|
|
315
|
+
db: AsyncSession = Depends(get_db),
|
|
316
|
+
) -> User:
|
|
317
|
+
db_user = await UserRepository(db).create(user)
|
|
318
|
+
background_tasks.add_task(
|
|
319
|
+
send_notification,
|
|
320
|
+
db_user.email,
|
|
321
|
+
"Welcome to our platform!",
|
|
322
|
+
)
|
|
323
|
+
return db_user
|
|
324
|
+
```
|
|
179
325
|
|
|
180
|
-
|
|
181
|
-
|---------|---------|---------|
|
|
182
|
-
| `python -c "import sys; print(sys.version_info)"` | Check version info | `sys.version_info(major=3, minor=13, ...)` |
|
|
183
|
-
| `python -m inspect module` | Inspect module | `python -m inspect src.models` |
|
|
184
|
-
| `python -c "import typing; print(dir(typing))"` | List typing utilities | Shows all available type hints |
|
|
326
|
+
### Django 5.2 LTS Reference
|
|
185
327
|
|
|
186
|
-
|
|
328
|
+
Composite Primary Keys:
|
|
329
|
+
```python
|
|
330
|
+
# models.py
|
|
331
|
+
from django.db import models
|
|
187
332
|
|
|
188
|
-
|
|
333
|
+
class Enrollment(models.Model):
|
|
334
|
+
student = models.ForeignKey("Student", on_delete=models.CASCADE)
|
|
335
|
+
course = models.ForeignKey("Course", on_delete=models.CASCADE)
|
|
336
|
+
enrolled_at = models.DateTimeField(auto_now_add=True)
|
|
337
|
+
grade = models.CharField(max_length=2, blank=True)
|
|
189
338
|
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
339
|
+
class Meta:
|
|
340
|
+
pk = models.CompositePrimaryKey("student", "course")
|
|
341
|
+
verbose_name = "Enrollment"
|
|
342
|
+
verbose_name_plural = "Enrollments"
|
|
343
|
+
|
|
344
|
+
# Usage
|
|
345
|
+
enrollment = Enrollment.objects.get(pk=(student_id, course_id))
|
|
346
|
+
```
|
|
347
|
+
|
|
348
|
+
Async Views and ORM:
|
|
349
|
+
```python
|
|
350
|
+
# views.py
|
|
351
|
+
from django.http import JsonResponse
|
|
352
|
+
from asgiref.sync import sync_to_async
|
|
353
|
+
|
|
354
|
+
async def async_user_list(request):
|
|
355
|
+
users = await sync_to_async(list)(User.objects.all()[:100])
|
|
356
|
+
return JsonResponse({"users": [u.to_dict() for u in users]})
|
|
357
|
+
|
|
358
|
+
# With Django 5.2 async ORM support
|
|
359
|
+
async def async_user_detail(request, user_id):
|
|
360
|
+
user = await User.objects.aget(pk=user_id)
|
|
361
|
+
return JsonResponse(user.to_dict())
|
|
362
|
+
```
|
|
363
|
+
|
|
364
|
+
Custom Form Rendering:
|
|
365
|
+
```python
|
|
366
|
+
# forms.py
|
|
367
|
+
from django import forms
|
|
368
|
+
|
|
369
|
+
class CustomBoundField(forms.BoundField):
|
|
370
|
+
def label_tag(self, contents=None, attrs=None, label_suffix=None):
|
|
371
|
+
attrs = attrs or {}
|
|
372
|
+
attrs["class"] = attrs.get("class", "") + " custom-label"
|
|
373
|
+
return super().label_tag(contents, attrs, label_suffix)
|
|
374
|
+
|
|
375
|
+
class CustomFormMixin:
|
|
376
|
+
def get_bound_field(self, field, field_name):
|
|
377
|
+
return CustomBoundField(self, field, field_name)
|
|
378
|
+
|
|
379
|
+
class UserForm(CustomFormMixin, forms.ModelForm):
|
|
380
|
+
class Meta:
|
|
381
|
+
model = User
|
|
382
|
+
fields = ["name", "email"]
|
|
383
|
+
```
|
|
196
384
|
|
|
197
385
|
---
|
|
198
386
|
|
|
199
|
-
##
|
|
387
|
+
## Data Validation Reference
|
|
200
388
|
|
|
201
|
-
|
|
389
|
+
### Pydantic v2.9 Complete Patterns
|
|
202
390
|
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
391
|
+
Discriminated Unions:
|
|
392
|
+
```python
|
|
393
|
+
from typing import Literal, Union
|
|
394
|
+
from pydantic import BaseModel, Field
|
|
206
395
|
|
|
207
|
-
|
|
208
|
-
|
|
396
|
+
class EmailNotification(BaseModel):
|
|
397
|
+
type: Literal["email"] = "email"
|
|
398
|
+
recipient: str
|
|
399
|
+
subject: str
|
|
400
|
+
body: str
|
|
209
401
|
|
|
210
|
-
|
|
211
|
-
|
|
402
|
+
class SMSNotification(BaseModel):
|
|
403
|
+
type: Literal["sms"] = "sms"
|
|
404
|
+
phone_number: str
|
|
405
|
+
message: str
|
|
212
406
|
|
|
213
|
-
|
|
214
|
-
|
|
407
|
+
class PushNotification(BaseModel):
|
|
408
|
+
type: Literal["push"] = "push"
|
|
409
|
+
device_token: str
|
|
410
|
+
title: str
|
|
411
|
+
body: str
|
|
215
412
|
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
413
|
+
Notification = Union[EmailNotification, SMSNotification, PushNotification]
|
|
414
|
+
|
|
415
|
+
class NotificationRequest(BaseModel):
|
|
416
|
+
notification: Notification = Field(discriminator="type")
|
|
417
|
+
```
|
|
418
|
+
|
|
419
|
+
Computed Fields:
|
|
420
|
+
```python
|
|
421
|
+
from pydantic import BaseModel, computed_field
|
|
422
|
+
|
|
423
|
+
class Product(BaseModel):
|
|
424
|
+
name: str
|
|
425
|
+
price: float
|
|
426
|
+
quantity: int
|
|
427
|
+
tax_rate: float = 0.1
|
|
428
|
+
|
|
429
|
+
@computed_field
|
|
430
|
+
@property
|
|
431
|
+
def subtotal(self) -> float:
|
|
432
|
+
return self.price * self.quantity
|
|
433
|
+
|
|
434
|
+
@computed_field
|
|
435
|
+
@property
|
|
436
|
+
def tax(self) -> float:
|
|
437
|
+
return self.subtotal * self.tax_rate
|
|
438
|
+
|
|
439
|
+
@computed_field
|
|
440
|
+
@property
|
|
441
|
+
def total(self) -> float:
|
|
442
|
+
return self.subtotal + self.tax
|
|
443
|
+
```
|
|
444
|
+
|
|
445
|
+
Custom JSON Serialization:
|
|
446
|
+
```python
|
|
447
|
+
from pydantic import BaseModel, field_serializer
|
|
448
|
+
from datetime import datetime
|
|
449
|
+
from decimal import Decimal
|
|
450
|
+
|
|
451
|
+
class Transaction(BaseModel):
|
|
452
|
+
id: int
|
|
453
|
+
amount: Decimal
|
|
454
|
+
created_at: datetime
|
|
455
|
+
|
|
456
|
+
@field_serializer("amount")
|
|
457
|
+
def serialize_amount(self, amount: Decimal) -> str:
|
|
458
|
+
return f"${amount:.2f}"
|
|
459
|
+
|
|
460
|
+
@field_serializer("created_at")
|
|
461
|
+
def serialize_datetime(self, dt: datetime) -> str:
|
|
462
|
+
return dt.isoformat()
|
|
463
|
+
```
|
|
464
|
+
|
|
465
|
+
TypeAdapter for Dynamic Validation:
|
|
466
|
+
```python
|
|
467
|
+
from pydantic import TypeAdapter
|
|
468
|
+
from typing import Any
|
|
469
|
+
|
|
470
|
+
# Validate arbitrary data without a model
|
|
471
|
+
int_adapter = TypeAdapter(int)
|
|
472
|
+
validated_int = int_adapter.validate_python("42") # Returns 42
|
|
473
|
+
|
|
474
|
+
# Validate complex types
|
|
475
|
+
list_adapter = TypeAdapter(list[dict[str, int]])
|
|
476
|
+
validated_list = list_adapter.validate_json('[{"a": 1}, {"b": 2}]')
|
|
477
|
+
|
|
478
|
+
# Validate with custom types
|
|
479
|
+
UserListAdapter = TypeAdapter(list[User])
|
|
480
|
+
users = UserListAdapter.validate_python(raw_data)
|
|
220
481
|
```
|
|
221
482
|
|
|
222
483
|
---
|
|
223
484
|
|
|
224
|
-
##
|
|
485
|
+
## ORM Reference
|
|
225
486
|
|
|
226
|
-
|
|
487
|
+
### SQLAlchemy 2.0 Complete Patterns
|
|
227
488
|
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
489
|
+
Declarative Models with Type Hints:
|
|
490
|
+
```python
|
|
491
|
+
from sqlalchemy import String, ForeignKey
|
|
492
|
+
from sqlalchemy.orm import (
|
|
493
|
+
DeclarativeBase,
|
|
494
|
+
Mapped,
|
|
495
|
+
mapped_column,
|
|
496
|
+
relationship,
|
|
497
|
+
)
|
|
498
|
+
from datetime import datetime
|
|
499
|
+
|
|
500
|
+
class Base(DeclarativeBase):
|
|
501
|
+
pass
|
|
231
502
|
|
|
232
|
-
|
|
503
|
+
class User(Base):
|
|
504
|
+
__tablename__ = "users"
|
|
233
505
|
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
506
|
+
id: Mapped[int] = mapped_column(primary_key=True)
|
|
507
|
+
email: Mapped[str] = mapped_column(String(255), unique=True, index=True)
|
|
508
|
+
name: Mapped[str] = mapped_column(String(100))
|
|
509
|
+
created_at: Mapped[datetime] = mapped_column(default=datetime.utcnow)
|
|
237
510
|
|
|
238
|
-
#
|
|
239
|
-
|
|
240
|
-
uv add pytest ruff mypy fastapi uvicorn pydantic sqlalchemy alembic
|
|
511
|
+
# Relationships
|
|
512
|
+
posts: Mapped[list["Post"]] = relationship(back_populates="author")
|
|
241
513
|
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
uv add --dev pytest-asyncio pytest-cov pytest-mock coverage
|
|
514
|
+
class Post(Base):
|
|
515
|
+
__tablename__ = "posts"
|
|
245
516
|
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
ruff --version
|
|
251
|
-
mypy --version
|
|
517
|
+
id: Mapped[int] = mapped_column(primary_key=True)
|
|
518
|
+
title: Mapped[str] = mapped_column(String(200))
|
|
519
|
+
content: Mapped[str]
|
|
520
|
+
author_id: Mapped[int] = mapped_column(ForeignKey("users.id"))
|
|
252
521
|
|
|
253
|
-
|
|
522
|
+
author: Mapped["User"] = relationship(back_populates="posts")
|
|
254
523
|
```
|
|
255
524
|
|
|
256
|
-
|
|
257
|
-
```
|
|
258
|
-
|
|
259
|
-
|
|
525
|
+
Advanced Queries:
|
|
526
|
+
```python
|
|
527
|
+
from sqlalchemy import select, func, and_, or_
|
|
528
|
+
from sqlalchemy.orm import selectinload, joinedload
|
|
529
|
+
|
|
530
|
+
# Eager loading
|
|
531
|
+
async def get_user_with_posts(db: AsyncSession, user_id: int) -> User | None:
|
|
532
|
+
result = await db.execute(
|
|
533
|
+
select(User)
|
|
534
|
+
.options(selectinload(User.posts))
|
|
535
|
+
.where(User.id == user_id)
|
|
536
|
+
)
|
|
537
|
+
return result.scalar_one_or_none()
|
|
538
|
+
|
|
539
|
+
# Aggregations
|
|
540
|
+
async def get_post_counts_by_user(db: AsyncSession) -> list[tuple[str, int]]:
|
|
541
|
+
result = await db.execute(
|
|
542
|
+
select(User.name, func.count(Post.id).label("post_count"))
|
|
543
|
+
.join(Post, isouter=True)
|
|
544
|
+
.group_by(User.id)
|
|
545
|
+
.order_by(func.count(Post.id).desc())
|
|
546
|
+
)
|
|
547
|
+
return result.all()
|
|
548
|
+
|
|
549
|
+
# Complex filtering
|
|
550
|
+
async def search_posts(
|
|
551
|
+
db: AsyncSession,
|
|
552
|
+
search: str | None = None,
|
|
553
|
+
author_id: int | None = None,
|
|
554
|
+
limit: int = 20,
|
|
555
|
+
) -> list[Post]:
|
|
556
|
+
query = select(Post).options(joinedload(Post.author))
|
|
557
|
+
|
|
558
|
+
conditions = []
|
|
559
|
+
if search:
|
|
560
|
+
conditions.append(
|
|
561
|
+
or_(
|
|
562
|
+
Post.title.ilike(f"%{search}%"),
|
|
563
|
+
Post.content.ilike(f"%{search}%"),
|
|
564
|
+
)
|
|
565
|
+
)
|
|
566
|
+
if author_id:
|
|
567
|
+
conditions.append(Post.author_id == author_id)
|
|
568
|
+
|
|
569
|
+
if conditions:
|
|
570
|
+
query = query.where(and_(*conditions))
|
|
571
|
+
|
|
572
|
+
result = await db.execute(query.limit(limit))
|
|
573
|
+
return result.scalars().unique().all()
|
|
574
|
+
```
|
|
575
|
+
|
|
576
|
+
Upsert (Insert or Update):
|
|
577
|
+
```python
|
|
578
|
+
from sqlalchemy.dialects.postgresql import insert
|
|
579
|
+
|
|
580
|
+
async def upsert_user(db: AsyncSession, user_data: dict) -> User:
|
|
581
|
+
stmt = insert(User).values(**user_data)
|
|
582
|
+
stmt = stmt.on_conflict_do_update(
|
|
583
|
+
index_elements=[User.email],
|
|
584
|
+
set_={
|
|
585
|
+
"name": stmt.excluded.name,
|
|
586
|
+
"updated_at": datetime.utcnow(),
|
|
587
|
+
},
|
|
588
|
+
)
|
|
589
|
+
await db.execute(stmt)
|
|
590
|
+
await db.commit()
|
|
591
|
+
|
|
592
|
+
return await db.execute(
|
|
593
|
+
select(User).where(User.email == user_data["email"])
|
|
594
|
+
).scalar_one()
|
|
260
595
|
```
|
|
261
596
|
|
|
262
597
|
---
|
|
263
598
|
|
|
264
|
-
##
|
|
599
|
+
## Testing Reference
|
|
600
|
+
|
|
601
|
+
### pytest Complete Patterns
|
|
602
|
+
|
|
603
|
+
Conftest Configuration:
|
|
604
|
+
```python
|
|
605
|
+
# conftest.py
|
|
606
|
+
import pytest
|
|
607
|
+
import pytest_asyncio
|
|
608
|
+
from httpx import AsyncClient, ASGITransport
|
|
609
|
+
from sqlalchemy.ext.asyncio import create_async_engine, AsyncSession
|
|
610
|
+
from sqlalchemy.orm import sessionmaker
|
|
611
|
+
|
|
612
|
+
@pytest.fixture(scope="session")
|
|
613
|
+
def event_loop():
|
|
614
|
+
"""Create event loop for async tests."""
|
|
615
|
+
import asyncio
|
|
616
|
+
loop = asyncio.new_event_loop()
|
|
617
|
+
yield loop
|
|
618
|
+
loop.close()
|
|
619
|
+
|
|
620
|
+
@pytest_asyncio.fixture(scope="session")
|
|
621
|
+
async def engine():
|
|
622
|
+
"""Create test database engine."""
|
|
623
|
+
engine = create_async_engine(
|
|
624
|
+
"sqlite+aiosqlite:///:memory:",
|
|
625
|
+
echo=True,
|
|
626
|
+
)
|
|
627
|
+
async with engine.begin() as conn:
|
|
628
|
+
await conn.run_sync(Base.metadata.create_all)
|
|
629
|
+
yield engine
|
|
630
|
+
await engine.dispose()
|
|
631
|
+
|
|
632
|
+
@pytest_asyncio.fixture
|
|
633
|
+
async def db_session(engine) -> AsyncGenerator[AsyncSession, None]:
|
|
634
|
+
"""Create isolated database session for each test."""
|
|
635
|
+
async_session = sessionmaker(
|
|
636
|
+
engine, class_=AsyncSession, expire_on_commit=False
|
|
637
|
+
)
|
|
638
|
+
async with async_session() as session:
|
|
639
|
+
async with session.begin():
|
|
640
|
+
yield session
|
|
641
|
+
await session.rollback()
|
|
642
|
+
|
|
643
|
+
@pytest_asyncio.fixture
|
|
644
|
+
async def async_client(db_session) -> AsyncGenerator[AsyncClient, None]:
|
|
645
|
+
"""Create async HTTP client for API testing."""
|
|
646
|
+
def get_db_override():
|
|
647
|
+
return db_session
|
|
648
|
+
|
|
649
|
+
app.dependency_overrides[get_db] = get_db_override
|
|
650
|
+
|
|
651
|
+
async with AsyncClient(
|
|
652
|
+
transport=ASGITransport(app=app),
|
|
653
|
+
base_url="http://test",
|
|
654
|
+
) as client:
|
|
655
|
+
yield client
|
|
656
|
+
|
|
657
|
+
app.dependency_overrides.clear()
|
|
658
|
+
```
|
|
265
659
|
|
|
266
|
-
|
|
660
|
+
Advanced Fixtures:
|
|
661
|
+
```python
|
|
662
|
+
@pytest.fixture
|
|
663
|
+
def user_factory(db_session):
|
|
664
|
+
"""Factory for creating test users."""
|
|
665
|
+
created_users = []
|
|
666
|
+
|
|
667
|
+
async def _create(**kwargs) -> User:
|
|
668
|
+
defaults = {
|
|
669
|
+
"name": f"User {len(created_users)}",
|
|
670
|
+
"email": f"user{len(created_users)}@test.com",
|
|
671
|
+
}
|
|
672
|
+
user = User(**(defaults | kwargs))
|
|
673
|
+
db_session.add(user)
|
|
674
|
+
await db_session.flush()
|
|
675
|
+
created_users.append(user)
|
|
676
|
+
return user
|
|
677
|
+
|
|
678
|
+
return _create
|
|
679
|
+
|
|
680
|
+
@pytest.fixture
|
|
681
|
+
def mock_external_api(mocker):
|
|
682
|
+
"""Mock external API calls."""
|
|
683
|
+
return mocker.patch(
|
|
684
|
+
"app.services.external_api.fetch_data",
|
|
685
|
+
return_value={"status": "ok", "data": []},
|
|
686
|
+
)
|
|
687
|
+
```
|
|
688
|
+
|
|
689
|
+
Hypothesis Property-Based Testing:
|
|
690
|
+
```python
|
|
691
|
+
from hypothesis import given, strategies as st
|
|
692
|
+
from hypothesis.extra.pydantic import from_model
|
|
693
|
+
|
|
694
|
+
@given(from_model(UserCreate))
|
|
695
|
+
def test_user_create_validation(user_data: UserCreate):
|
|
696
|
+
"""Test that any valid UserCreate can be processed."""
|
|
697
|
+
assert user_data.name
|
|
698
|
+
assert "@" in user_data.email
|
|
699
|
+
|
|
700
|
+
@given(st.lists(st.integers(min_value=0, max_value=100), min_size=1))
|
|
701
|
+
def test_calculate_average(numbers: list[int]):
|
|
702
|
+
"""Property: average is always between min and max."""
|
|
703
|
+
avg = calculate_average(numbers)
|
|
704
|
+
assert min(numbers) <= avg <= max(numbers)
|
|
705
|
+
```
|
|
706
|
+
|
|
707
|
+
---
|
|
708
|
+
|
|
709
|
+
## Type Hints Reference
|
|
710
|
+
|
|
711
|
+
### Modern Type Patterns
|
|
712
|
+
|
|
713
|
+
Generic Classes:
|
|
714
|
+
```python
|
|
715
|
+
from typing import Generic, TypeVar
|
|
716
|
+
|
|
717
|
+
T = TypeVar("T")
|
|
718
|
+
K = TypeVar("K")
|
|
267
719
|
|
|
268
|
-
|
|
269
|
-
|
|
720
|
+
class Cache(Generic[K, T]):
|
|
721
|
+
def __init__(self, max_size: int = 100):
|
|
722
|
+
self._cache: dict[K, T] = {}
|
|
723
|
+
self._max_size = max_size
|
|
270
724
|
|
|
271
|
-
|
|
725
|
+
def get(self, key: K) -> T | None:
|
|
726
|
+
return self._cache.get(key)
|
|
272
727
|
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
python-version: [3.12, 3.13]
|
|
728
|
+
def set(self, key: K, value: T) -> None:
|
|
729
|
+
if len(self._cache) >= self._max_size:
|
|
730
|
+
oldest_key = next(iter(self._cache))
|
|
731
|
+
del self._cache[oldest_key]
|
|
732
|
+
self._cache[key] = value
|
|
279
733
|
|
|
280
|
-
|
|
281
|
-
|
|
734
|
+
# Usage
|
|
735
|
+
user_cache: Cache[int, User] = Cache(max_size=1000)
|
|
736
|
+
```
|
|
282
737
|
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
738
|
+
TypeVar with Bounds:
|
|
739
|
+
```python
|
|
740
|
+
from typing import TypeVar
|
|
741
|
+
from pydantic import BaseModel
|
|
287
742
|
|
|
288
|
-
|
|
289
|
-
run: pip install uv
|
|
743
|
+
ModelT = TypeVar("ModelT", bound=BaseModel)
|
|
290
744
|
|
|
291
|
-
|
|
292
|
-
|
|
745
|
+
def validate_and_create(model_class: type[ModelT], data: dict) -> ModelT:
|
|
746
|
+
return model_class.model_validate(data)
|
|
747
|
+
```
|
|
293
748
|
|
|
294
|
-
|
|
295
|
-
|
|
749
|
+
Self Type:
|
|
750
|
+
```python
|
|
751
|
+
from typing import Self
|
|
296
752
|
|
|
297
|
-
|
|
298
|
-
|
|
753
|
+
class Builder:
|
|
754
|
+
def __init__(self):
|
|
755
|
+
self._config: dict = {}
|
|
299
756
|
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
files: ./coverage.xml
|
|
757
|
+
def with_option(self, key: str, value: str) -> Self:
|
|
758
|
+
self._config[key] = value
|
|
759
|
+
return self
|
|
304
760
|
|
|
305
|
-
|
|
306
|
-
|
|
761
|
+
def build(self) -> dict:
|
|
762
|
+
return self._config.copy()
|
|
307
763
|
|
|
308
|
-
|
|
309
|
-
|
|
764
|
+
# Subclassing works correctly
|
|
765
|
+
class AdvancedBuilder(Builder):
|
|
766
|
+
def with_advanced_option(self, value: int) -> Self:
|
|
767
|
+
self._config["advanced"] = value
|
|
768
|
+
return self
|
|
310
769
|
```
|
|
311
770
|
|
|
312
771
|
---
|
|
313
772
|
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
|
|
773
|
+
## Context7 Integration
|
|
774
|
+
|
|
775
|
+
Library ID Resolution:
|
|
776
|
+
```python
|
|
777
|
+
# Step 1: Resolve library ID
|
|
778
|
+
library_id = await mcp__context7__resolve_library_id("fastapi")
|
|
779
|
+
# Returns: /tiangolo/fastapi
|
|
780
|
+
|
|
781
|
+
# Step 2: Get documentation
|
|
782
|
+
docs = await mcp__context7__get_library_docs(
|
|
783
|
+
context7CompatibleLibraryID="/tiangolo/fastapi",
|
|
784
|
+
topic="dependency injection async",
|
|
785
|
+
tokens=5000,
|
|
786
|
+
)
|
|
787
|
+
```
|
|
788
|
+
|
|
789
|
+
Available Libraries:
|
|
790
|
+
| Library | Context7 ID | Topics |
|
|
791
|
+
|---------|-------------|--------|
|
|
792
|
+
| FastAPI | /tiangolo/fastapi | async, dependencies, security, websockets |
|
|
793
|
+
| Django | /django/django | views, models, forms, admin |
|
|
794
|
+
| Pydantic | /pydantic/pydantic | validation, serialization, settings |
|
|
795
|
+
| SQLAlchemy | /sqlalchemy/sqlalchemy | orm, async, queries, migrations |
|
|
796
|
+
| pytest | /pytest-dev/pytest | fixtures, markers, plugins |
|
|
797
|
+
| numpy | /numpy/numpy | arrays, broadcasting, ufuncs |
|
|
798
|
+
| pandas | /pandas-dev/pandas | dataframe, series, io |
|
|
799
|
+
| polars | /pola-rs/polars | lazy, expressions, streaming |
|
|
800
|
+
|
|
801
|
+
---
|
|
802
|
+
|
|
803
|
+
Last Updated: 2025-12-07
|
|
804
|
+
Version: 1.0.0
|