moai-adk 0.35.1__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of moai-adk might be problematic. Click here for more details.
- moai_adk/__init__.py +10 -0
- moai_adk/__main__.py +199 -0
- moai_adk/cli/__init__.py +6 -0
- moai_adk/cli/commands/__init__.py +17 -0
- moai_adk/cli/commands/analyze.py +116 -0
- moai_adk/cli/commands/doctor.py +272 -0
- moai_adk/cli/commands/init.py +372 -0
- moai_adk/cli/commands/language.py +248 -0
- moai_adk/cli/commands/status.py +104 -0
- moai_adk/cli/commands/update.py +2686 -0
- moai_adk/cli/main.py +13 -0
- moai_adk/cli/prompts/__init__.py +5 -0
- moai_adk/cli/prompts/init_prompts.py +219 -0
- 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 +1 -0
- 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 +19 -0
- moai_adk/core/config/auto_spec_config.py +340 -0
- moai_adk/core/config/migration.py +244 -0
- moai_adk/core/config/unified.py +436 -0
- moai_adk/core/context_manager.py +273 -0
- moai_adk/core/diagnostics/__init__.py +19 -0
- moai_adk/core/diagnostics/slash_commands.py +159 -0
- 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 +31 -0
- moai_adk/core/git/branch.py +25 -0
- moai_adk/core/git/branch_manager.py +129 -0
- moai_adk/core/git/checkpoint.py +134 -0
- moai_adk/core/git/commit.py +67 -0
- moai_adk/core/git/conflict_detector.py +413 -0
- moai_adk/core/git/event_detector.py +79 -0
- moai_adk/core/git/manager.py +216 -0
- 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 +605 -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 +1 -0
- moai_adk/core/project/backup_utils.py +70 -0
- moai_adk/core/project/checker.py +300 -0
- moai_adk/core/project/detector.py +293 -0
- moai_adk/core/project/initializer.py +387 -0
- moai_adk/core/project/phase_executor.py +716 -0
- moai_adk/core/project/validator.py +139 -0
- moai_adk/core/quality/__init__.py +6 -0
- moai_adk/core/quality/trust_checker.py +377 -0
- moai_adk/core/quality/validators/__init__.py +6 -0
- moai_adk/core/quality/validators/base_validator.py +19 -0
- 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 +7 -0
- moai_adk/core/template/backup.py +174 -0
- moai_adk/core/template/config.py +191 -0
- moai_adk/core/template/languages.py +43 -0
- moai_adk/core/template/merger.py +233 -0
- moai_adk/core/template/processor.py +1200 -0
- 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 +714 -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-plugin.md +637 -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 +513 -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 +1060 -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 +1386 -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/moai/lib/checkpoint.py +244 -0
- moai_adk/templates/.claude/hooks/moai/lib/common.py +131 -0
- moai_adk/templates/.claude/hooks/moai/lib/config_manager.py +446 -0
- moai_adk/templates/.claude/hooks/moai/lib/config_validator.py +639 -0
- moai_adk/templates/.claude/hooks/moai/lib/example_config.json +104 -0
- moai_adk/templates/.claude/hooks/moai/lib/git_operations_manager.py +590 -0
- moai_adk/templates/.claude/hooks/moai/lib/language_validator.py +317 -0
- moai_adk/templates/.claude/hooks/moai/lib/models.py +102 -0
- moai_adk/templates/.claude/hooks/moai/lib/path_utils.py +28 -0
- moai_adk/templates/.claude/hooks/moai/lib/project.py +768 -0
- moai_adk/templates/.claude/hooks/moai/lib/test_hooks_improvements.py +443 -0
- moai_adk/templates/.claude/hooks/moai/lib/timeout.py +160 -0
- moai_adk/templates/.claude/hooks/moai/lib/unified_timeout_manager.py +530 -0
- moai_adk/templates/.claude/hooks/moai/session_end__auto_cleanup.py +862 -0
- moai_adk/templates/.claude/hooks/moai/session_start__show_project_info.py +1083 -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 +172 -0
- moai_adk/templates/.claude/skills/moai-ai-nano-banana/SKILL.md +307 -0
- moai_adk/templates/.claude/skills/moai-ai-nano-banana/examples.md +431 -0
- moai_adk/templates/.claude/skills/moai-ai-nano-banana/scripts/batch_generate.py +560 -0
- moai_adk/templates/.claude/skills/moai-ai-nano-banana/scripts/generate_image.py +362 -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 +320 -0
- moai_adk/templates/.claude/skills/moai-domain-backend/examples.md +718 -0
- moai_adk/templates/.claude/skills/moai-domain-backend/reference.md +464 -0
- moai_adk/templates/.claude/skills/moai-domain-database/SKILL.md +323 -0
- moai_adk/templates/.claude/skills/moai-domain-database/examples.md +830 -0
- moai_adk/templates/.claude/skills/moai-domain-database/modules/README.md +53 -0
- moai_adk/templates/.claude/skills/moai-domain-database/modules/mongodb.md +231 -0
- moai_adk/templates/.claude/skills/moai-domain-database/modules/postgresql.md +169 -0
- moai_adk/templates/.claude/skills/moai-domain-database/modules/redis.md +262 -0
- moai_adk/templates/.claude/skills/moai-domain-database/reference.md +545 -0
- moai_adk/templates/.claude/skills/moai-domain-frontend/SKILL.md +497 -0
- moai_adk/templates/.claude/skills/moai-domain-frontend/examples.md +968 -0
- moai_adk/templates/.claude/skills/moai-domain-frontend/reference.md +664 -0
- 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/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 +649 -0
- moai_adk/templates/.claude/skills/moai-lang-csharp/SKILL.md +478 -0
- 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 +376 -0
- moai_adk/templates/.claude/skills/moai-lang-go/examples.md +919 -0
- moai_adk/templates/.claude/skills/moai-lang-go/reference.md +737 -0
- moai_adk/templates/.claude/skills/moai-lang-java/SKILL.md +385 -0
- moai_adk/templates/.claude/skills/moai-lang-java/examples.md +864 -0
- moai_adk/templates/.claude/skills/moai-lang-java/reference.md +291 -0
- moai_adk/templates/.claude/skills/moai-lang-kotlin/SKILL.md +382 -0
- moai_adk/templates/.claude/skills/moai-lang-kotlin/examples.md +1006 -0
- moai_adk/templates/.claude/skills/moai-lang-kotlin/reference.md +562 -0
- moai_adk/templates/.claude/skills/moai-lang-php/SKILL.md +644 -0
- moai_adk/templates/.claude/skills/moai-lang-python/SKILL.md +481 -0
- moai_adk/templates/.claude/skills/moai-lang-python/examples.md +977 -0
- moai_adk/templates/.claude/skills/moai-lang-python/reference.md +804 -0
- moai_adk/templates/.claude/skills/moai-lang-r/SKILL.md +579 -0
- moai_adk/templates/.claude/skills/moai-lang-ruby/SKILL.md +687 -0
- moai_adk/templates/.claude/skills/moai-lang-rust/SKILL.md +372 -0
- moai_adk/templates/.claude/skills/moai-lang-rust/examples.md +659 -0
- moai_adk/templates/.claude/skills/moai-lang-rust/reference.md +504 -0
- moai_adk/templates/.claude/skills/moai-lang-scala/SKILL.md +497 -0
- moai_adk/templates/.claude/skills/moai-lang-scala/examples.md +633 -0
- moai_adk/templates/.claude/skills/moai-lang-scala/reference.md +423 -0
- moai_adk/templates/.claude/skills/moai-lang-swift/SKILL.md +497 -0
- moai_adk/templates/.claude/skills/moai-lang-swift/examples.md +918 -0
- moai_adk/templates/.claude/skills/moai-lang-swift/reference.md +672 -0
- moai_adk/templates/.claude/skills/moai-lang-typescript/SKILL.md +368 -0
- moai_adk/templates/.claude/skills/moai-lang-typescript/examples.md +1089 -0
- moai_adk/templates/.claude/skills/moai-lang-typescript/reference.md +731 -0
- 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 +291 -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-plugin-builder/SKILL.md +474 -0
- moai_adk/templates/.claude/skills/moai-plugin-builder/examples.md +621 -0
- moai_adk/templates/.claude/skills/moai-plugin-builder/migration.md +341 -0
- moai_adk/templates/.claude/skills/moai-plugin-builder/reference.md +463 -0
- moai_adk/templates/.claude/skills/moai-plugin-builder/validation.md +373 -0
- moai_adk/templates/.claude/skills/moai-security-auth0/SKILL.md +275 -0
- moai_adk/templates/.claude/skills/moai-security-auth0/modules/adaptive-mfa.md +233 -0
- moai_adk/templates/.claude/skills/moai-security-auth0/modules/akamai-integration.md +215 -0
- moai_adk/templates/.claude/skills/moai-security-auth0/modules/application-credentials.md +280 -0
- moai_adk/templates/.claude/skills/moai-security-auth0/modules/attack-protection-log-events.md +225 -0
- moai_adk/templates/.claude/skills/moai-security-auth0/modules/attack-protection-overview.md +140 -0
- moai_adk/templates/.claude/skills/moai-security-auth0/modules/bot-detection.md +144 -0
- moai_adk/templates/.claude/skills/moai-security-auth0/modules/breached-password-detection.md +187 -0
- moai_adk/templates/.claude/skills/moai-security-auth0/modules/brute-force-protection.md +189 -0
- moai_adk/templates/.claude/skills/moai-security-auth0/modules/certifications.md +282 -0
- moai_adk/templates/.claude/skills/moai-security-auth0/modules/compliance-overview.md +263 -0
- moai_adk/templates/.claude/skills/moai-security-auth0/modules/continuous-session-protection.md +307 -0
- moai_adk/templates/.claude/skills/moai-security-auth0/modules/customize-mfa.md +178 -0
- moai_adk/templates/.claude/skills/moai-security-auth0/modules/dpop-implementation.md +283 -0
- moai_adk/templates/.claude/skills/moai-security-auth0/modules/fapi-implementation.md +259 -0
- moai_adk/templates/.claude/skills/moai-security-auth0/modules/gdpr-compliance.md +313 -0
- moai_adk/templates/.claude/skills/moai-security-auth0/modules/guardian-configuration.md +269 -0
- moai_adk/templates/.claude/skills/moai-security-auth0/modules/highly-regulated-identity.md +272 -0
- moai_adk/templates/.claude/skills/moai-security-auth0/modules/jwt-fundamentals.md +248 -0
- moai_adk/templates/.claude/skills/moai-security-auth0/modules/mdl-verification.md +211 -0
- moai_adk/templates/.claude/skills/moai-security-auth0/modules/mfa-api-management.md +278 -0
- moai_adk/templates/.claude/skills/moai-security-auth0/modules/mfa-factors.md +226 -0
- moai_adk/templates/.claude/skills/moai-security-auth0/modules/mfa-overview.md +174 -0
- moai_adk/templates/.claude/skills/moai-security-auth0/modules/mtls-sender-constraining.md +316 -0
- moai_adk/templates/.claude/skills/moai-security-auth0/modules/ropg-flow-mfa.md +217 -0
- moai_adk/templates/.claude/skills/moai-security-auth0/modules/security-center.md +325 -0
- moai_adk/templates/.claude/skills/moai-security-auth0/modules/security-guidance.md +277 -0
- moai_adk/templates/.claude/skills/moai-security-auth0/modules/state-parameters.md +178 -0
- moai_adk/templates/.claude/skills/moai-security-auth0/modules/step-up-authentication.md +251 -0
- moai_adk/templates/.claude/skills/moai-security-auth0/modules/suspicious-ip-throttling.md +240 -0
- moai_adk/templates/.claude/skills/moai-security-auth0/modules/tenant-access-control.md +180 -0
- moai_adk/templates/.claude/skills/moai-security-auth0/modules/webauthn-fido.md +235 -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 +1434 -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 +337 -0
- moai_adk/templates/.gitignore +222 -0
- moai_adk/templates/.mcp.json +13 -0
- moai_adk/templates/.moai/config/config.yaml +58 -0
- moai_adk/templates/.moai/config/questions/_schema.yaml +174 -0
- moai_adk/templates/.moai/config/questions/tab0-init.yaml +251 -0
- moai_adk/templates/.moai/config/questions/tab1-user.yaml +107 -0
- moai_adk/templates/.moai/config/questions/tab2-project.yaml +79 -0
- moai_adk/templates/.moai/config/questions/tab3-git.yaml +632 -0
- moai_adk/templates/.moai/config/questions/tab4-quality.yaml +182 -0
- moai_adk/templates/.moai/config/questions/tab5-system.yaml +96 -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 +24 -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 +642 -0
- moai_adk/utils/__init__.py +30 -0
- moai_adk/utils/banner.py +38 -0
- moai_adk/utils/common.py +294 -0
- moai_adk/utils/link_validator.py +241 -0
- moai_adk/utils/logger.py +147 -0
- 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.35.1.dist-info/METADATA +3018 -0
- moai_adk-0.35.1.dist-info/RECORD +502 -0
- moai_adk-0.35.1.dist-info/WHEEL +4 -0
- moai_adk-0.35.1.dist-info/entry_points.txt +3 -0
- moai_adk-0.35.1.dist-info/licenses/LICENSE +21 -0
|
@@ -0,0 +1,478 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: moai-lang-csharp
|
|
3
|
+
description: C# 12 / .NET 8 development specialist covering ASP.NET Core, Entity Framework, Blazor, and modern C# patterns. Use when developing .NET APIs, web applications, or enterprise solutions.
|
|
4
|
+
version: 1.0.0
|
|
5
|
+
category: language
|
|
6
|
+
tags:
|
|
7
|
+
- csharp
|
|
8
|
+
- dotnet
|
|
9
|
+
- aspnetcore
|
|
10
|
+
- efcore
|
|
11
|
+
- blazor
|
|
12
|
+
updated: 2025-12-07
|
|
13
|
+
status: active
|
|
14
|
+
---
|
|
15
|
+
|
|
16
|
+
## Quick Reference (30 seconds)
|
|
17
|
+
|
|
18
|
+
C# 12 / .NET 8 Development Specialist - Modern C# with ASP.NET Core, Entity Framework Core, Blazor, and enterprise patterns.
|
|
19
|
+
|
|
20
|
+
Auto-Triggers: `.cs`, `.csproj`, `.sln` files, C# projects, .NET solutions, ASP.NET Core applications
|
|
21
|
+
|
|
22
|
+
Core Stack:
|
|
23
|
+
- C# 12: Primary constructors, collection expressions, alias any type, default lambda parameters
|
|
24
|
+
- .NET 8: Minimal APIs, Native AOT, improved performance, WebSockets
|
|
25
|
+
- ASP.NET Core 8: Controllers, Endpoints, Middleware, Authentication
|
|
26
|
+
- Entity Framework Core 8: DbContext, migrations, LINQ, query optimization
|
|
27
|
+
- Blazor: Server/WASM components, InteractiveServer, InteractiveWebAssembly
|
|
28
|
+
- Testing: xUnit, NUnit, FluentAssertions, Moq
|
|
29
|
+
|
|
30
|
+
Quick Commands:
|
|
31
|
+
```bash
|
|
32
|
+
# Create .NET 8 Web API project
|
|
33
|
+
dotnet new webapi -n MyApi --framework net8.0
|
|
34
|
+
|
|
35
|
+
# Create Blazor Web App
|
|
36
|
+
dotnet new blazor -n MyBlazor --interactivity Auto
|
|
37
|
+
|
|
38
|
+
# Add Entity Framework Core
|
|
39
|
+
dotnet add package Microsoft.EntityFrameworkCore.SqlServer
|
|
40
|
+
dotnet add package Microsoft.EntityFrameworkCore.Design
|
|
41
|
+
|
|
42
|
+
# Add FluentValidation and MediatR
|
|
43
|
+
dotnet add package FluentValidation.AspNetCore
|
|
44
|
+
dotnet add package MediatR
|
|
45
|
+
```
|
|
46
|
+
|
|
47
|
+
---
|
|
48
|
+
|
|
49
|
+
## Implementation Guide (5 minutes)
|
|
50
|
+
|
|
51
|
+
### C# 12 Key Features
|
|
52
|
+
|
|
53
|
+
Primary Constructors - Class-level constructor parameters:
|
|
54
|
+
```csharp
|
|
55
|
+
// Primary constructor with dependency injection
|
|
56
|
+
public class UserService(IUserRepository repository, ILogger<UserService> logger)
|
|
57
|
+
{
|
|
58
|
+
public async Task<User?> GetByIdAsync(Guid id)
|
|
59
|
+
{
|
|
60
|
+
logger.LogInformation("Fetching user {UserId}", id);
|
|
61
|
+
return await repository.FindByIdAsync(id);
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
// Record with primary constructor
|
|
66
|
+
public record CreateUserCommand(string Name, string Email);
|
|
67
|
+
```
|
|
68
|
+
|
|
69
|
+
Collection Expressions - Unified collection syntax:
|
|
70
|
+
```csharp
|
|
71
|
+
// Array, List, Span with unified syntax
|
|
72
|
+
int[] numbers = [1, 2, 3, 4, 5];
|
|
73
|
+
List<string> names = ["Alice", "Bob", "Charlie"];
|
|
74
|
+
Span<int> span = [10, 20, 30];
|
|
75
|
+
|
|
76
|
+
// Spread operator
|
|
77
|
+
int[] combined = [..numbers, 6, 7, 8];
|
|
78
|
+
List<string> allNames = [..names, "David", "Eve"];
|
|
79
|
+
```
|
|
80
|
+
|
|
81
|
+
Alias Any Type - Type aliases for complex types:
|
|
82
|
+
```csharp
|
|
83
|
+
// Alias for tuple
|
|
84
|
+
using Point = (int X, int Y);
|
|
85
|
+
|
|
86
|
+
// Alias for complex generic
|
|
87
|
+
using UserCache = System.Collections.Generic.Dictionary<Guid, User>;
|
|
88
|
+
|
|
89
|
+
public class LocationService
|
|
90
|
+
{
|
|
91
|
+
public Point GetLocation() => (10, 20);
|
|
92
|
+
private readonly UserCache _cache = [];
|
|
93
|
+
}
|
|
94
|
+
```
|
|
95
|
+
|
|
96
|
+
Default Lambda Parameters:
|
|
97
|
+
```csharp
|
|
98
|
+
// Lambda with default parameter
|
|
99
|
+
var greet = (string name, string greeting = "Hello") => $"{greeting}, {name}!";
|
|
100
|
+
|
|
101
|
+
Console.WriteLine(greet("Alice")); // "Hello, Alice!"
|
|
102
|
+
Console.WriteLine(greet("Bob", "Hi")); // "Hi, Bob!"
|
|
103
|
+
```
|
|
104
|
+
|
|
105
|
+
### ASP.NET Core 8 Patterns
|
|
106
|
+
|
|
107
|
+
Minimal API with Endpoints:
|
|
108
|
+
```csharp
|
|
109
|
+
var builder = WebApplication.CreateBuilder(args);
|
|
110
|
+
|
|
111
|
+
// Service registration
|
|
112
|
+
builder.Services.AddDbContext<AppDbContext>(options =>
|
|
113
|
+
options.UseSqlServer(builder.Configuration.GetConnectionString("Default")));
|
|
114
|
+
builder.Services.AddScoped<IUserService, UserService>();
|
|
115
|
+
|
|
116
|
+
var app = builder.Build();
|
|
117
|
+
|
|
118
|
+
// Endpoint routing with typed results
|
|
119
|
+
app.MapGet("/api/users/{id:guid}", async (Guid id, IUserService service) =>
|
|
120
|
+
{
|
|
121
|
+
var user = await service.GetByIdAsync(id);
|
|
122
|
+
return user is not null ? Results.Ok(user) : Results.NotFound();
|
|
123
|
+
})
|
|
124
|
+
.WithName("GetUser")
|
|
125
|
+
.WithOpenApi()
|
|
126
|
+
.Produces<User>(200)
|
|
127
|
+
.Produces(404);
|
|
128
|
+
|
|
129
|
+
app.MapPost("/api/users", async (CreateUserRequest request, IUserService service) =>
|
|
130
|
+
{
|
|
131
|
+
var user = await service.CreateAsync(request);
|
|
132
|
+
return Results.Created($"/api/users/{user.Id}", user);
|
|
133
|
+
})
|
|
134
|
+
.WithValidation<CreateUserRequest>();
|
|
135
|
+
|
|
136
|
+
app.Run();
|
|
137
|
+
```
|
|
138
|
+
|
|
139
|
+
Controller-Based API:
|
|
140
|
+
```csharp
|
|
141
|
+
[ApiController]
|
|
142
|
+
[Route("api/[controller]")]
|
|
143
|
+
public class UsersController(IUserService userService, ILogger<UsersController> logger)
|
|
144
|
+
: ControllerBase
|
|
145
|
+
{
|
|
146
|
+
[HttpGet("{id:guid}")]
|
|
147
|
+
[ProducesResponseType<User>(StatusCodes.Status200OK)]
|
|
148
|
+
[ProducesResponseType(StatusCodes.Status404NotFound)]
|
|
149
|
+
public async Task<ActionResult<User>> GetById(Guid id)
|
|
150
|
+
{
|
|
151
|
+
var user = await userService.GetByIdAsync(id);
|
|
152
|
+
if (user is null)
|
|
153
|
+
{
|
|
154
|
+
logger.LogWarning("User {UserId} not found", id);
|
|
155
|
+
return NotFound();
|
|
156
|
+
}
|
|
157
|
+
return user;
|
|
158
|
+
}
|
|
159
|
+
|
|
160
|
+
[HttpPost]
|
|
161
|
+
[ProducesResponseType<User>(StatusCodes.Status201Created)]
|
|
162
|
+
[ProducesResponseType<ValidationProblemDetails>(StatusCodes.Status400BadRequest)]
|
|
163
|
+
public async Task<ActionResult<User>> Create([FromBody] CreateUserRequest request)
|
|
164
|
+
{
|
|
165
|
+
var user = await userService.CreateAsync(request);
|
|
166
|
+
return CreatedAtAction(nameof(GetById), new { id = user.Id }, user);
|
|
167
|
+
}
|
|
168
|
+
}
|
|
169
|
+
```
|
|
170
|
+
|
|
171
|
+
### Entity Framework Core 8 Patterns
|
|
172
|
+
|
|
173
|
+
DbContext Configuration:
|
|
174
|
+
```csharp
|
|
175
|
+
public class AppDbContext(DbContextOptions<AppDbContext> options) : DbContext(options)
|
|
176
|
+
{
|
|
177
|
+
public DbSet<User> Users => Set<User>();
|
|
178
|
+
public DbSet<Post> Posts => Set<Post>();
|
|
179
|
+
public DbSet<Tag> Tags => Set<Tag>();
|
|
180
|
+
|
|
181
|
+
protected override void OnModelCreating(ModelBuilder modelBuilder)
|
|
182
|
+
{
|
|
183
|
+
modelBuilder.ApplyConfigurationsFromAssembly(typeof(AppDbContext).Assembly);
|
|
184
|
+
}
|
|
185
|
+
}
|
|
186
|
+
|
|
187
|
+
// Entity configuration
|
|
188
|
+
public class UserConfiguration : IEntityTypeConfiguration<User>
|
|
189
|
+
{
|
|
190
|
+
public void Configure(EntityTypeBuilder<User> builder)
|
|
191
|
+
{
|
|
192
|
+
builder.HasKey(u => u.Id);
|
|
193
|
+
builder.Property(u => u.Email).HasMaxLength(256).IsRequired();
|
|
194
|
+
builder.HasIndex(u => u.Email).IsUnique();
|
|
195
|
+
builder.HasMany(u => u.Posts).WithOne(p => p.Author).HasForeignKey(p => p.AuthorId);
|
|
196
|
+
}
|
|
197
|
+
}
|
|
198
|
+
```
|
|
199
|
+
|
|
200
|
+
Repository Pattern with Specification:
|
|
201
|
+
```csharp
|
|
202
|
+
public interface IRepository<T> where T : class
|
|
203
|
+
{
|
|
204
|
+
Task<T?> GetByIdAsync(Guid id, CancellationToken ct = default);
|
|
205
|
+
Task<IReadOnlyList<T>> ListAsync(CancellationToken ct = default);
|
|
206
|
+
Task<T> AddAsync(T entity, CancellationToken ct = default);
|
|
207
|
+
Task UpdateAsync(T entity, CancellationToken ct = default);
|
|
208
|
+
Task DeleteAsync(T entity, CancellationToken ct = default);
|
|
209
|
+
}
|
|
210
|
+
|
|
211
|
+
public class EfRepository<T>(AppDbContext context) : IRepository<T> where T : class
|
|
212
|
+
{
|
|
213
|
+
private readonly DbSet<T> _dbSet = context.Set<T>();
|
|
214
|
+
|
|
215
|
+
public async Task<T?> GetByIdAsync(Guid id, CancellationToken ct = default)
|
|
216
|
+
=> await _dbSet.FindAsync([id], ct);
|
|
217
|
+
|
|
218
|
+
public async Task<IReadOnlyList<T>> ListAsync(CancellationToken ct = default)
|
|
219
|
+
=> await _dbSet.ToListAsync(ct);
|
|
220
|
+
|
|
221
|
+
public async Task<T> AddAsync(T entity, CancellationToken ct = default)
|
|
222
|
+
{
|
|
223
|
+
await _dbSet.AddAsync(entity, ct);
|
|
224
|
+
await context.SaveChangesAsync(ct);
|
|
225
|
+
return entity;
|
|
226
|
+
}
|
|
227
|
+
|
|
228
|
+
public async Task UpdateAsync(T entity, CancellationToken ct = default)
|
|
229
|
+
{
|
|
230
|
+
_dbSet.Update(entity);
|
|
231
|
+
await context.SaveChangesAsync(ct);
|
|
232
|
+
}
|
|
233
|
+
|
|
234
|
+
public async Task DeleteAsync(T entity, CancellationToken ct = default)
|
|
235
|
+
{
|
|
236
|
+
_dbSet.Remove(entity);
|
|
237
|
+
await context.SaveChangesAsync(ct);
|
|
238
|
+
}
|
|
239
|
+
}
|
|
240
|
+
```
|
|
241
|
+
|
|
242
|
+
### FluentValidation Patterns
|
|
243
|
+
|
|
244
|
+
Request Validation:
|
|
245
|
+
```csharp
|
|
246
|
+
public record CreateUserRequest(string Name, string Email, string Password);
|
|
247
|
+
|
|
248
|
+
public class CreateUserRequestValidator : AbstractValidator<CreateUserRequest>
|
|
249
|
+
{
|
|
250
|
+
public CreateUserRequestValidator(IUserRepository userRepository)
|
|
251
|
+
{
|
|
252
|
+
RuleFor(x => x.Name)
|
|
253
|
+
.NotEmpty().WithMessage("Name is required")
|
|
254
|
+
.MaximumLength(100).WithMessage("Name cannot exceed 100 characters");
|
|
255
|
+
|
|
256
|
+
RuleFor(x => x.Email)
|
|
257
|
+
.NotEmpty().WithMessage("Email is required")
|
|
258
|
+
.EmailAddress().WithMessage("Invalid email format")
|
|
259
|
+
.MustAsync(async (email, ct) => !await userRepository.EmailExistsAsync(email, ct))
|
|
260
|
+
.WithMessage("Email already exists");
|
|
261
|
+
|
|
262
|
+
RuleFor(x => x.Password)
|
|
263
|
+
.NotEmpty().WithMessage("Password is required")
|
|
264
|
+
.MinimumLength(8).WithMessage("Password must be at least 8 characters")
|
|
265
|
+
.Matches(@"[A-Z]").WithMessage("Password must contain uppercase letter")
|
|
266
|
+
.Matches(@"[a-z]").WithMessage("Password must contain lowercase letter")
|
|
267
|
+
.Matches(@"[0-9]").WithMessage("Password must contain digit");
|
|
268
|
+
}
|
|
269
|
+
}
|
|
270
|
+
|
|
271
|
+
// Registration in Program.cs
|
|
272
|
+
builder.Services.AddValidatorsFromAssemblyContaining<CreateUserRequestValidator>();
|
|
273
|
+
```
|
|
274
|
+
|
|
275
|
+
### MediatR CQRS Pattern
|
|
276
|
+
|
|
277
|
+
Command and Query Separation:
|
|
278
|
+
```csharp
|
|
279
|
+
// Query
|
|
280
|
+
public record GetUserByIdQuery(Guid Id) : IRequest<User?>;
|
|
281
|
+
|
|
282
|
+
public class GetUserByIdQueryHandler(AppDbContext context)
|
|
283
|
+
: IRequestHandler<GetUserByIdQuery, User?>
|
|
284
|
+
{
|
|
285
|
+
public async Task<User?> Handle(GetUserByIdQuery request, CancellationToken ct)
|
|
286
|
+
=> await context.Users
|
|
287
|
+
.AsNoTracking()
|
|
288
|
+
.Include(u => u.Posts)
|
|
289
|
+
.FirstOrDefaultAsync(u => u.Id == request.Id, ct);
|
|
290
|
+
}
|
|
291
|
+
|
|
292
|
+
// Command
|
|
293
|
+
public record CreateUserCommand(string Name, string Email, string Password) : IRequest<User>;
|
|
294
|
+
|
|
295
|
+
public class CreateUserCommandHandler(
|
|
296
|
+
AppDbContext context,
|
|
297
|
+
IPasswordHasher passwordHasher,
|
|
298
|
+
IValidator<CreateUserCommand> validator)
|
|
299
|
+
: IRequestHandler<CreateUserCommand, User>
|
|
300
|
+
{
|
|
301
|
+
public async Task<User> Handle(CreateUserCommand request, CancellationToken ct)
|
|
302
|
+
{
|
|
303
|
+
await validator.ValidateAndThrowAsync(request, ct);
|
|
304
|
+
|
|
305
|
+
var user = new User
|
|
306
|
+
{
|
|
307
|
+
Id = Guid.NewGuid(),
|
|
308
|
+
Name = request.Name,
|
|
309
|
+
Email = request.Email,
|
|
310
|
+
PasswordHash = passwordHasher.Hash(request.Password),
|
|
311
|
+
CreatedAt = DateTime.UtcNow
|
|
312
|
+
};
|
|
313
|
+
|
|
314
|
+
context.Users.Add(user);
|
|
315
|
+
await context.SaveChangesAsync(ct);
|
|
316
|
+
return user;
|
|
317
|
+
}
|
|
318
|
+
}
|
|
319
|
+
|
|
320
|
+
// Usage in controller
|
|
321
|
+
[HttpPost]
|
|
322
|
+
public async Task<ActionResult<User>> Create(
|
|
323
|
+
[FromBody] CreateUserCommand command,
|
|
324
|
+
[FromServices] IMediator mediator)
|
|
325
|
+
{
|
|
326
|
+
var user = await mediator.Send(command);
|
|
327
|
+
return CreatedAtAction(nameof(GetById), new { id = user.Id }, user);
|
|
328
|
+
}
|
|
329
|
+
```
|
|
330
|
+
|
|
331
|
+
### Blazor Patterns
|
|
332
|
+
|
|
333
|
+
Interactive Server Component:
|
|
334
|
+
```csharp
|
|
335
|
+
@page "/users"
|
|
336
|
+
@rendermode InteractiveServer
|
|
337
|
+
@inject IUserService UserService
|
|
338
|
+
|
|
339
|
+
<h1>Users</h1>
|
|
340
|
+
|
|
341
|
+
@if (_loading)
|
|
342
|
+
{
|
|
343
|
+
<p>Loading...</p>
|
|
344
|
+
}
|
|
345
|
+
else if (_users is null)
|
|
346
|
+
{
|
|
347
|
+
<p>No users found.</p>
|
|
348
|
+
}
|
|
349
|
+
else
|
|
350
|
+
{
|
|
351
|
+
<table class="table">
|
|
352
|
+
<thead>
|
|
353
|
+
<tr><th>Name</th><th>Email</th><th>Actions</th></tr>
|
|
354
|
+
</thead>
|
|
355
|
+
<tbody>
|
|
356
|
+
@foreach (var user in _users)
|
|
357
|
+
{
|
|
358
|
+
<tr>
|
|
359
|
+
<td>@user.Name</td>
|
|
360
|
+
<td>@user.Email</td>
|
|
361
|
+
<td>
|
|
362
|
+
<button @onclick="() => DeleteUser(user.Id)" class="btn btn-danger btn-sm">
|
|
363
|
+
Delete
|
|
364
|
+
</button>
|
|
365
|
+
</td>
|
|
366
|
+
</tr>
|
|
367
|
+
}
|
|
368
|
+
</tbody>
|
|
369
|
+
</table>
|
|
370
|
+
}
|
|
371
|
+
|
|
372
|
+
@code {
|
|
373
|
+
private List<User>? _users;
|
|
374
|
+
private bool _loading = true;
|
|
375
|
+
|
|
376
|
+
protected override async Task OnInitializedAsync()
|
|
377
|
+
{
|
|
378
|
+
_users = await UserService.GetAllAsync();
|
|
379
|
+
_loading = false;
|
|
380
|
+
}
|
|
381
|
+
|
|
382
|
+
private async Task DeleteUser(Guid id)
|
|
383
|
+
{
|
|
384
|
+
await UserService.DeleteAsync(id);
|
|
385
|
+
_users = await UserService.GetAllAsync();
|
|
386
|
+
}
|
|
387
|
+
}
|
|
388
|
+
```
|
|
389
|
+
|
|
390
|
+
### Authentication and Authorization
|
|
391
|
+
|
|
392
|
+
JWT Authentication Setup:
|
|
393
|
+
```csharp
|
|
394
|
+
builder.Services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme)
|
|
395
|
+
.AddJwtBearer(options =>
|
|
396
|
+
{
|
|
397
|
+
options.TokenValidationParameters = new TokenValidationParameters
|
|
398
|
+
{
|
|
399
|
+
ValidateIssuer = true,
|
|
400
|
+
ValidateAudience = true,
|
|
401
|
+
ValidateLifetime = true,
|
|
402
|
+
ValidateIssuerSigningKey = true,
|
|
403
|
+
ValidIssuer = builder.Configuration["Jwt:Issuer"],
|
|
404
|
+
ValidAudience = builder.Configuration["Jwt:Audience"],
|
|
405
|
+
IssuerSigningKey = new SymmetricSecurityKey(
|
|
406
|
+
Encoding.UTF8.GetBytes(builder.Configuration["Jwt:Key"]!))
|
|
407
|
+
};
|
|
408
|
+
});
|
|
409
|
+
|
|
410
|
+
builder.Services.AddAuthorization(options =>
|
|
411
|
+
{
|
|
412
|
+
options.AddPolicy("Admin", policy => policy.RequireRole("Admin"));
|
|
413
|
+
options.AddPolicy("CanEdit", policy => policy.RequireClaim("permission", "edit"));
|
|
414
|
+
});
|
|
415
|
+
```
|
|
416
|
+
|
|
417
|
+
---
|
|
418
|
+
|
|
419
|
+
## Advanced Patterns
|
|
420
|
+
|
|
421
|
+
For comprehensive documentation including advanced patterns, performance optimization, testing strategies, and deployment configurations, see:
|
|
422
|
+
|
|
423
|
+
- [reference.md](reference.md) - Complete API reference, Context7 library mappings, advanced patterns
|
|
424
|
+
- [examples.md](examples.md) - Production-ready code examples, full-stack patterns, testing templates
|
|
425
|
+
|
|
426
|
+
### Context7 Integration
|
|
427
|
+
|
|
428
|
+
```csharp
|
|
429
|
+
// ASP.NET Core - mcp__context7__get_library_docs("/dotnet/aspnetcore", "minimal-apis middleware", 1)
|
|
430
|
+
// EF Core - mcp__context7__get_library_docs("/dotnet/efcore", "dbcontext migrations", 1)
|
|
431
|
+
// .NET Runtime - mcp__context7__get_library_docs("/dotnet/runtime", "collections threading", 1)
|
|
432
|
+
// Blazor - mcp__context7__get_library_docs("/dotnet/aspnetcore", "blazor components", 1)
|
|
433
|
+
```
|
|
434
|
+
|
|
435
|
+
---
|
|
436
|
+
|
|
437
|
+
## Works Well With
|
|
438
|
+
|
|
439
|
+
- `moai-domain-backend` - API design, database integration patterns
|
|
440
|
+
- `moai-platform-deploy` - Azure, Docker, Kubernetes deployment
|
|
441
|
+
- `moai-workflow-testing` - Testing strategies and patterns
|
|
442
|
+
- `moai-foundation-quality` - Code quality standards
|
|
443
|
+
- `moai-essentials-debug` - Debugging .NET applications
|
|
444
|
+
|
|
445
|
+
---
|
|
446
|
+
|
|
447
|
+
## Quick Troubleshooting
|
|
448
|
+
|
|
449
|
+
Build and Runtime:
|
|
450
|
+
```bash
|
|
451
|
+
dotnet build --verbosity detailed # Detailed build output
|
|
452
|
+
dotnet run --launch-profile https # Run with HTTPS profile
|
|
453
|
+
dotnet ef database update # Apply EF migrations
|
|
454
|
+
dotnet ef migrations add Initial # Create new migration
|
|
455
|
+
```
|
|
456
|
+
|
|
457
|
+
Common Issues:
|
|
458
|
+
```csharp
|
|
459
|
+
// Null reference handling
|
|
460
|
+
var user = await context.Users.FindAsync(id);
|
|
461
|
+
ArgumentNullException.ThrowIfNull(user, nameof(user));
|
|
462
|
+
|
|
463
|
+
// Async enumerable for streaming
|
|
464
|
+
public async IAsyncEnumerable<User> StreamUsersAsync(
|
|
465
|
+
[EnumeratorCancellation] CancellationToken ct = default)
|
|
466
|
+
{
|
|
467
|
+
await foreach (var user in context.Users.AsAsyncEnumerable().WithCancellation(ct))
|
|
468
|
+
{
|
|
469
|
+
yield return user;
|
|
470
|
+
}
|
|
471
|
+
}
|
|
472
|
+
```
|
|
473
|
+
|
|
474
|
+
---
|
|
475
|
+
|
|
476
|
+
Version: 1.0.0
|
|
477
|
+
Last Updated: 2025-12-07
|
|
478
|
+
Status: Production Ready
|