moai-adk 0.34.0__py3-none-any.whl → 1.1.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/__main__.py +136 -5
- moai_adk/astgrep/__init__.py +37 -0
- moai_adk/astgrep/analyzer.py +522 -0
- moai_adk/astgrep/models.py +124 -0
- moai_adk/astgrep/rules.py +179 -0
- moai_adk/cli/commands/analyze.py +11 -2
- moai_adk/cli/commands/doctor.py +7 -1
- moai_adk/cli/commands/init.py +321 -11
- moai_adk/cli/commands/language.py +7 -1
- moai_adk/cli/commands/rank.py +449 -0
- moai_adk/cli/commands/status.py +7 -1
- moai_adk/cli/commands/switch.py +325 -0
- moai_adk/cli/commands/update.py +296 -23
- moai_adk/cli/prompts/init_prompts.py +362 -66
- moai_adk/cli/prompts/translations/__init__.py +573 -0
- moai_adk/cli/ui/prompts.py +61 -2
- moai_adk/cli/worktree/cli.py +106 -1
- moai_adk/cli/worktree/manager.py +155 -0
- moai_adk/core/config/unified.py +244 -63
- moai_adk/core/credentials.py +264 -0
- moai_adk/core/error_recovery_system.py +22 -4
- moai_adk/core/git/conflict_detector.py +10 -1
- moai_adk/core/git/event_detector.py +16 -5
- moai_adk/core/integration/engine.py +2 -2
- moai_adk/core/integration/integration_tester.py +5 -5
- moai_adk/core/language_config_resolver.py +9 -3
- moai_adk/core/merge/analyzer.py +509 -324
- moai_adk/core/migration/alfred_to_moai_migrator.py +7 -1
- moai_adk/core/migration/backup_manager.py +54 -4
- moai_adk/core/migration/file_migrator.py +174 -2
- moai_adk/core/migration/interactive_checkbox_ui.py +42 -31
- moai_adk/core/migration/version_detector.py +123 -19
- moai_adk/core/migration/version_migrator.py +44 -9
- moai_adk/core/model_allocator.py +241 -0
- moai_adk/core/project/backup_utils.py +12 -2
- moai_adk/core/project/initializer.py +44 -87
- moai_adk/core/project/phase_executor.py +95 -33
- moai_adk/core/project/validator.py +16 -1
- moai_adk/core/quality/trust_checker.py +30 -10
- moai_adk/core/rollback_manager.py +60 -25
- moai_adk/core/template/backup.py +88 -6
- moai_adk/core/template/config.py +33 -9
- moai_adk/core/template/merger.py +34 -8
- moai_adk/core/template/processor.py +334 -11
- moai_adk/core/template_engine.py +10 -1
- moai_adk/core/template_variable_synchronizer.py +16 -2
- moai_adk/core/version_sync.py +54 -6
- moai_adk/foundation/__init__.py +1 -20
- moai_adk/foundation/testing.py +1 -1
- moai_adk/loop/__init__.py +54 -0
- moai_adk/loop/controller.py +305 -0
- moai_adk/loop/feedback.py +230 -0
- moai_adk/loop/state.py +209 -0
- moai_adk/loop/storage.py +220 -0
- moai_adk/lsp/__init__.py +70 -0
- moai_adk/lsp/client.py +320 -0
- moai_adk/lsp/models.py +261 -0
- moai_adk/lsp/protocol.py +404 -0
- moai_adk/lsp/server_manager.py +248 -0
- moai_adk/project/configuration.py +8 -1
- moai_adk/py.typed +0 -0
- moai_adk/ralph/__init__.py +37 -0
- moai_adk/ralph/engine.py +307 -0
- moai_adk/rank/__init__.py +21 -0
- moai_adk/rank/auth.py +425 -0
- moai_adk/rank/client.py +557 -0
- moai_adk/rank/config.py +147 -0
- moai_adk/rank/hook.py +1503 -0
- moai_adk/rank/py.typed +0 -0
- moai_adk/statusline/__init__.py +3 -0
- moai_adk/statusline/enhanced_output_style_detector.py +5 -5
- moai_adk/statusline/main.py +20 -1
- moai_adk/statusline/memory_collector.py +268 -0
- moai_adk/statusline/renderer.py +54 -38
- moai_adk/tag_system/__init__.py +48 -0
- moai_adk/tag_system/atomic_ops.py +117 -0
- moai_adk/tag_system/linkage.py +335 -0
- moai_adk/tag_system/parser.py +176 -0
- moai_adk/tag_system/validator.py +200 -0
- moai_adk/templates/.claude/agents/moai/builder-agent.md +19 -3
- moai_adk/templates/.claude/agents/moai/builder-command.md +62 -16
- moai_adk/templates/.claude/agents/moai/builder-plugin.md +763 -0
- moai_adk/templates/.claude/agents/moai/builder-skill.md +21 -5
- moai_adk/templates/.claude/agents/moai/expert-backend.md +103 -39
- moai_adk/templates/.claude/agents/moai/expert-debug.md +9 -3
- moai_adk/templates/.claude/agents/moai/expert-devops.md +16 -14
- moai_adk/templates/.claude/agents/moai/expert-frontend.md +45 -31
- moai_adk/templates/.claude/agents/moai/expert-performance.md +13 -9
- moai_adk/templates/.claude/agents/moai/expert-refactoring.md +228 -0
- moai_adk/templates/.claude/agents/moai/expert-security.md +19 -3
- moai_adk/templates/.claude/agents/moai/expert-testing.md +13 -9
- moai_adk/templates/.claude/agents/moai/manager-claude-code.md +8 -2
- moai_adk/templates/.claude/agents/moai/manager-docs.md +10 -5
- moai_adk/templates/.claude/agents/moai/manager-git.md +99 -27
- moai_adk/templates/.claude/agents/moai/manager-project.md +87 -7
- moai_adk/templates/.claude/agents/moai/manager-quality.md +22 -5
- moai_adk/templates/.claude/agents/moai/manager-spec.md +8 -2
- moai_adk/templates/.claude/agents/moai/manager-strategy.md +45 -14
- moai_adk/templates/.claude/agents/moai/manager-tdd.md +16 -3
- moai_adk/templates/.claude/commands/moai/0-project.md +239 -1185
- moai_adk/templates/.claude/commands/moai/1-plan.md +383 -363
- moai_adk/templates/.claude/commands/moai/2-run.md +254 -347
- moai_adk/templates/.claude/commands/moai/3-sync.md +174 -100
- moai_adk/templates/.claude/commands/moai/9-feedback.md +49 -33
- moai_adk/templates/.claude/commands/moai/alfred.md +339 -0
- moai_adk/templates/.claude/commands/moai/cancel-loop.md +163 -0
- moai_adk/templates/.claude/commands/moai/fix.md +264 -0
- moai_adk/templates/.claude/commands/moai/loop.md +363 -0
- moai_adk/templates/.claude/hooks/moai/lib/README.md +143 -0
- moai_adk/templates/.claude/hooks/moai/lib/__init__.py +37 -81
- moai_adk/templates/.claude/hooks/moai/lib/alfred_detector.py +105 -0
- moai_adk/templates/.claude/hooks/moai/lib/atomic_write.py +122 -0
- moai_adk/templates/.claude/hooks/moai/lib/checkpoint.py +4 -1
- moai_adk/templates/.claude/hooks/moai/lib/common.py +35 -5
- moai_adk/templates/.claude/hooks/moai/lib/config.py +376 -0
- moai_adk/templates/.claude/hooks/moai/lib/config_manager.py +24 -28
- moai_adk/templates/.claude/hooks/moai/lib/config_validator.py +14 -14
- moai_adk/templates/.claude/hooks/moai/lib/enhanced_output_style_detector.py +372 -0
- moai_adk/templates/.claude/hooks/moai/lib/exceptions.py +171 -0
- moai_adk/templates/.claude/hooks/moai/lib/file_utils.py +95 -0
- moai_adk/templates/.claude/hooks/moai/lib/git_collector.py +190 -0
- moai_adk/templates/.claude/hooks/moai/lib/git_operations_manager.py +15 -13
- moai_adk/templates/.claude/hooks/moai/lib/language_detector.py +298 -0
- moai_adk/templates/.claude/hooks/moai/lib/language_validator.py +125 -25
- moai_adk/templates/.claude/hooks/moai/lib/main.py +341 -0
- moai_adk/templates/.claude/hooks/moai/lib/memory_collector.py +268 -0
- moai_adk/templates/.claude/hooks/moai/lib/metrics_tracker.py +78 -0
- moai_adk/templates/.claude/hooks/moai/lib/models.py +9 -7
- moai_adk/templates/.claude/hooks/moai/lib/path_utils.py +204 -13
- moai_adk/templates/.claude/hooks/moai/lib/project.py +23 -14
- moai_adk/templates/.claude/hooks/moai/lib/renderer.py +359 -0
- moai_adk/templates/.claude/hooks/moai/lib/tag_linkage.py +333 -0
- moai_adk/templates/.claude/hooks/moai/lib/tag_parser.py +176 -0
- moai_adk/templates/.claude/hooks/moai/lib/tag_validator.py +200 -0
- moai_adk/templates/.claude/hooks/moai/lib/timeout.py +5 -5
- moai_adk/templates/.claude/hooks/moai/lib/tool_registry.py +896 -0
- moai_adk/templates/.claude/hooks/moai/lib/unified_timeout_manager.py +30 -18
- moai_adk/templates/.claude/hooks/moai/lib/update_checker.py +129 -0
- moai_adk/templates/.claude/hooks/moai/lib/version_reader.py +741 -0
- moai_adk/templates/.claude/hooks/moai/post_tool__ast_grep_scan.py +276 -0
- moai_adk/templates/.claude/hooks/moai/post_tool__code_formatter.py +255 -0
- moai_adk/templates/.claude/hooks/moai/post_tool__coverage_guard.py +325 -0
- moai_adk/templates/.claude/hooks/moai/post_tool__linter.py +315 -0
- moai_adk/templates/.claude/hooks/moai/post_tool__lsp_diagnostic.py +508 -0
- moai_adk/templates/.claude/hooks/moai/pre_commit__tag_validator.py +287 -0
- moai_adk/templates/.claude/hooks/moai/pre_tool__security_guard.py +268 -0
- moai_adk/templates/.claude/hooks/moai/pre_tool__tdd_enforcer.py +208 -0
- moai_adk/templates/.claude/hooks/moai/session_end__auto_cleanup.py +93 -61
- moai_adk/templates/.claude/hooks/moai/session_end__rank_submit.py +69 -0
- moai_adk/templates/.claude/hooks/moai/session_start__show_project_info.py +165 -70
- moai_adk/templates/.claude/hooks/moai/shared/utils/announcement_translator.py +206 -0
- moai_adk/templates/.claude/hooks/moai/stop__loop_controller.py +621 -0
- moai_adk/templates/.claude/output-styles/moai/alfred.md +758 -0
- moai_adk/templates/.claude/output-styles/moai/r2d2.md +86 -3
- moai_adk/templates/.claude/output-styles/moai/yoda.md +2 -2
- moai_adk/templates/.claude/settings.json +154 -77
- moai_adk/templates/.claude/skills/moai-docs-generation/SKILL.md +252 -198
- moai_adk/templates/.claude/skills/moai-docs-generation/examples.md +169 -323
- moai_adk/templates/.claude/skills/moai-docs-generation/modules/README.md +39 -27
- moai_adk/templates/.claude/skills/moai-docs-generation/modules/api-documentation.md +115 -125
- moai_adk/templates/.claude/skills/moai-docs-generation/modules/code-documentation.md +150 -150
- moai_adk/templates/.claude/skills/moai-docs-generation/modules/multi-format-output.md +182 -175
- moai_adk/templates/.claude/skills/moai-docs-generation/modules/user-guides.md +198 -138
- moai_adk/templates/.claude/skills/moai-docs-generation/reference.md +226 -320
- moai_adk/templates/.claude/skills/moai-domain-backend/SKILL.md +43 -222
- moai_adk/templates/.claude/skills/moai-domain-database/SKILL.md +75 -219
- moai_adk/templates/.claude/skills/moai-domain-frontend/SKILL.md +103 -463
- moai_adk/templates/.claude/skills/moai-domain-frontend/modules/component-architecture.md +723 -0
- moai_adk/templates/.claude/skills/moai-domain-frontend/modules/nextjs16-patterns.md +713 -0
- moai_adk/templates/.claude/skills/moai-domain-frontend/modules/performance-optimization.md +694 -0
- moai_adk/templates/.claude/skills/moai-domain-frontend/modules/react19-patterns.md +591 -0
- moai_adk/templates/.claude/skills/moai-domain-frontend/modules/state-management.md +680 -0
- moai_adk/templates/.claude/skills/moai-domain-frontend/modules/vue35-patterns.md +802 -0
- moai_adk/templates/.claude/skills/moai-domain-uiux/SKILL.md +118 -339
- moai_adk/templates/.claude/skills/moai-formats-data/SKILL.md +74 -377
- moai_adk/templates/.claude/skills/moai-formats-data/modules/README.md +299 -70
- moai_adk/templates/.claude/skills/moai-foundation-claude/SKILL.md +205 -182
- moai_adk/templates/.claude/skills/moai-foundation-claude/reference/advanced-agent-patterns.md +370 -0
- moai_adk/templates/.claude/skills/moai-foundation-claude/reference/claude-code-cli-reference-official.md +420 -0
- moai_adk/templates/.claude/skills/moai-foundation-claude/reference/claude-code-custom-slash-commands-official.md +32 -22
- moai_adk/templates/.claude/skills/moai-foundation-claude/reference/claude-code-devcontainers-official.md +381 -0
- moai_adk/templates/.claude/skills/moai-foundation-claude/reference/claude-code-discover-plugins-official.md +379 -0
- moai_adk/templates/.claude/skills/moai-foundation-claude/reference/claude-code-headless-official.md +378 -0
- moai_adk/templates/.claude/skills/moai-foundation-claude/reference/claude-code-hooks-official.md +110 -0
- moai_adk/templates/.claude/skills/moai-foundation-claude/reference/claude-code-plugin-marketplaces-official.md +308 -0
- moai_adk/templates/.claude/skills/moai-foundation-claude/reference/claude-code-plugins-official.md +640 -0
- moai_adk/templates/.claude/skills/moai-foundation-claude/reference/claude-code-sandboxing-official.md +282 -0
- moai_adk/templates/.claude/skills/moai-foundation-claude/reference/claude-code-skills-official.md +425 -71
- moai_adk/templates/.claude/skills/moai-foundation-claude/reference/claude-code-statusline-official.md +293 -0
- moai_adk/templates/.claude/skills/moai-foundation-claude/reference/claude-code-sub-agents-official.md +325 -143
- moai_adk/templates/.claude/skills/moai-foundation-context/SKILL.md +96 -316
- moai_adk/templates/.claude/skills/moai-foundation-core/SKILL.md +116 -294
- moai_adk/templates/.claude/skills/moai-foundation-core/modules/delegation-advanced.md +279 -0
- moai_adk/templates/.claude/skills/moai-foundation-core/modules/delegation-implementation.md +267 -0
- moai_adk/templates/.claude/skills/moai-foundation-core/modules/delegation-patterns.md +121 -650
- moai_adk/templates/.claude/skills/moai-foundation-core/modules/patterns.md +22 -0
- moai_adk/templates/.claude/skills/moai-foundation-core/modules/spec-ears-format.md +200 -0
- moai_adk/templates/.claude/skills/moai-foundation-core/modules/spec-first-tdd.md +37 -730
- moai_adk/templates/.claude/skills/moai-foundation-core/modules/spec-tdd-implementation.md +275 -0
- moai_adk/templates/.claude/skills/moai-foundation-core/modules/trust-5-framework.md +77 -819
- moai_adk/templates/.claude/skills/moai-foundation-core/modules/trust-5-implementation.md +244 -0
- moai_adk/templates/.claude/skills/moai-foundation-core/modules/trust-5-validation.md +219 -0
- moai_adk/templates/.claude/skills/moai-foundation-philosopher/SKILL.md +14 -18
- moai_adk/templates/.claude/skills/moai-foundation-quality/SKILL.md +86 -270
- moai_adk/templates/.claude/skills/moai-framework-electron/SKILL.md +288 -0
- moai_adk/templates/.claude/skills/moai-framework-electron/examples.md +2082 -0
- moai_adk/templates/.claude/skills/moai-framework-electron/reference.md +1649 -0
- moai_adk/templates/.claude/skills/moai-lang-cpp/SKILL.md +76 -582
- moai_adk/templates/.claude/skills/moai-lang-cpp/examples.md +1239 -0
- moai_adk/templates/.claude/skills/moai-lang-cpp/modules/advanced-patterns.md +401 -0
- moai_adk/templates/.claude/skills/moai-lang-cpp/reference.md +1136 -0
- moai_adk/templates/.claude/skills/moai-lang-csharp/SKILL.md +82 -436
- moai_adk/templates/.claude/skills/moai-lang-csharp/examples.md +585 -0
- moai_adk/templates/.claude/skills/moai-lang-csharp/modules/aspnet-core.md +627 -0
- moai_adk/templates/.claude/skills/moai-lang-csharp/modules/blazor-components.md +767 -0
- moai_adk/templates/.claude/skills/moai-lang-csharp/modules/cqrs-validation.md +626 -0
- moai_adk/templates/.claude/skills/moai-lang-csharp/modules/csharp12-features.md +580 -0
- moai_adk/templates/.claude/skills/moai-lang-csharp/modules/efcore-patterns.md +622 -0
- moai_adk/templates/.claude/skills/moai-lang-csharp/reference.md +403 -0
- moai_adk/templates/.claude/skills/moai-lang-elixir/SKILL.md +65 -542
- moai_adk/templates/.claude/skills/moai-lang-elixir/examples.md +1171 -0
- moai_adk/templates/.claude/skills/moai-lang-elixir/modules/advanced-patterns.md +531 -0
- moai_adk/templates/.claude/skills/moai-lang-elixir/reference.md +889 -0
- moai_adk/templates/.claude/skills/moai-lang-flutter/SKILL.md +32 -405
- moai_adk/templates/.claude/skills/moai-lang-go/SKILL.md +114 -293
- moai_adk/templates/.claude/skills/moai-lang-java/SKILL.md +83 -307
- moai_adk/templates/.claude/skills/moai-lang-javascript/SKILL.md +179 -0
- moai_adk/templates/.claude/skills/moai-lang-javascript/examples.md +973 -0
- moai_adk/templates/.claude/skills/moai-lang-javascript/reference.md +1543 -0
- moai_adk/templates/.claude/skills/moai-lang-kotlin/SKILL.md +42 -279
- moai_adk/templates/.claude/skills/moai-lang-php/SKILL.md +94 -556
- moai_adk/templates/.claude/skills/moai-lang-php/examples.md +1608 -0
- moai_adk/templates/.claude/skills/moai-lang-php/modules/advanced-patterns.md +538 -0
- moai_adk/templates/.claude/skills/moai-lang-php/reference.md +1323 -0
- moai_adk/templates/.claude/skills/moai-lang-python/SKILL.md +108 -358
- moai_adk/templates/.claude/skills/moai-lang-r/SKILL.md +84 -482
- moai_adk/templates/.claude/skills/moai-lang-r/examples.md +1154 -0
- moai_adk/templates/.claude/skills/moai-lang-r/modules/advanced-patterns.md +489 -0
- moai_adk/templates/.claude/skills/moai-lang-r/reference.md +1087 -0
- moai_adk/templates/.claude/skills/moai-lang-ruby/SKILL.md +106 -610
- moai_adk/templates/.claude/skills/moai-lang-ruby/examples.md +1106 -0
- moai_adk/templates/.claude/skills/moai-lang-ruby/modules/advanced-patterns.md +309 -0
- moai_adk/templates/.claude/skills/moai-lang-ruby/modules/testing-patterns.md +306 -0
- moai_adk/templates/.claude/skills/moai-lang-ruby/reference.md +1024 -0
- moai_adk/templates/.claude/skills/moai-lang-rust/SKILL.md +51 -265
- moai_adk/templates/.claude/skills/moai-lang-scala/SKILL.md +106 -442
- moai_adk/templates/.claude/skills/moai-lang-scala/modules/akka-actors.md +479 -0
- moai_adk/templates/.claude/skills/moai-lang-scala/modules/cats-effect.md +489 -0
- moai_adk/templates/.claude/skills/moai-lang-scala/modules/functional-programming.md +460 -0
- moai_adk/templates/.claude/skills/moai-lang-scala/modules/spark-data.md +498 -0
- moai_adk/templates/.claude/skills/moai-lang-scala/modules/zio-patterns.md +541 -0
- moai_adk/templates/.claude/skills/moai-lang-swift/SKILL.md +88 -457
- moai_adk/templates/.claude/skills/moai-lang-swift/modules/combine-reactive.md +256 -0
- moai_adk/templates/.claude/skills/moai-lang-swift/modules/concurrency.md +270 -0
- moai_adk/templates/.claude/skills/moai-lang-swift/modules/swift6-features.md +265 -0
- moai_adk/templates/.claude/skills/moai-lang-swift/modules/swiftui-patterns.md +314 -0
- moai_adk/templates/.claude/skills/moai-lang-typescript/SKILL.md +75 -283
- moai_adk/templates/.claude/skills/moai-library-mermaid/SKILL.md +97 -252
- moai_adk/templates/.claude/skills/moai-library-nextra/SKILL.md +64 -240
- moai_adk/templates/.claude/skills/moai-library-nextra/modules/advanced-patterns.md +331 -12
- moai_adk/templates/.claude/skills/moai-library-nextra/modules/configuration.md +330 -37
- moai_adk/templates/.claude/skills/moai-library-shadcn/SKILL.md +90 -287
- moai_adk/templates/.claude/skills/moai-platform-auth0/SKILL.md +200 -206
- moai_adk/templates/.claude/skills/moai-platform-auth0/examples.md +2446 -0
- moai_adk/templates/.claude/skills/moai-platform-auth0/modules/adaptive-mfa.md +233 -0
- moai_adk/templates/.claude/skills/moai-platform-auth0/modules/akamai-integration.md +214 -0
- moai_adk/templates/.claude/skills/moai-platform-auth0/modules/application-credentials.md +280 -0
- moai_adk/templates/.claude/skills/moai-platform-auth0/modules/attack-protection-log-events.md +224 -0
- moai_adk/templates/.claude/skills/moai-platform-auth0/modules/attack-protection-overview.md +140 -0
- moai_adk/templates/.claude/skills/moai-platform-auth0/modules/bot-detection.md +144 -0
- moai_adk/templates/.claude/skills/moai-platform-auth0/modules/breached-password-detection.md +187 -0
- moai_adk/templates/.claude/skills/moai-platform-auth0/modules/brute-force-protection.md +189 -0
- moai_adk/templates/.claude/skills/moai-platform-auth0/modules/certifications.md +282 -0
- moai_adk/templates/.claude/skills/moai-platform-auth0/modules/compliance-overview.md +263 -0
- moai_adk/templates/.claude/skills/moai-platform-auth0/modules/continuous-session-protection.md +307 -0
- moai_adk/templates/.claude/skills/moai-platform-auth0/modules/customize-mfa.md +177 -0
- moai_adk/templates/.claude/skills/moai-platform-auth0/modules/dpop-implementation.md +283 -0
- moai_adk/templates/.claude/skills/moai-platform-auth0/modules/fapi-implementation.md +259 -0
- moai_adk/templates/.claude/skills/moai-platform-auth0/modules/gdpr-compliance.md +313 -0
- moai_adk/templates/.claude/skills/moai-platform-auth0/modules/guardian-configuration.md +269 -0
- moai_adk/templates/.claude/skills/moai-platform-auth0/modules/highly-regulated-identity.md +272 -0
- moai_adk/templates/.claude/skills/moai-platform-auth0/modules/jwt-fundamentals.md +248 -0
- moai_adk/templates/.claude/skills/moai-platform-auth0/modules/mdl-verification.md +210 -0
- moai_adk/templates/.claude/skills/moai-platform-auth0/modules/mfa-api-management.md +278 -0
- moai_adk/templates/.claude/skills/moai-platform-auth0/modules/mfa-factors.md +226 -0
- moai_adk/templates/.claude/skills/moai-platform-auth0/modules/mfa-overview.md +174 -0
- moai_adk/templates/.claude/skills/moai-platform-auth0/modules/mtls-sender-constraining.md +316 -0
- moai_adk/templates/.claude/skills/moai-platform-auth0/modules/ropg-flow-mfa.md +216 -0
- moai_adk/templates/.claude/skills/moai-platform-auth0/modules/security-center.md +325 -0
- moai_adk/templates/.claude/skills/moai-platform-auth0/modules/security-guidance.md +277 -0
- moai_adk/templates/.claude/skills/moai-platform-auth0/modules/state-parameters.md +177 -0
- moai_adk/templates/.claude/skills/moai-platform-auth0/modules/step-up-authentication.md +251 -0
- moai_adk/templates/.claude/skills/moai-platform-auth0/modules/suspicious-ip-throttling.md +240 -0
- moai_adk/templates/.claude/skills/moai-platform-auth0/modules/tenant-access-control.md +179 -0
- moai_adk/templates/.claude/skills/moai-platform-auth0/modules/webauthn-fido.md +235 -0
- moai_adk/templates/.claude/skills/moai-platform-auth0/reference.md +224 -0
- moai_adk/templates/.claude/skills/moai-platform-clerk/SKILL.md +75 -330
- moai_adk/templates/.claude/skills/moai-platform-clerk/examples.md +1426 -0
- moai_adk/templates/.claude/skills/moai-platform-clerk/modules/advanced-patterns.md +417 -0
- moai_adk/templates/.claude/skills/moai-platform-clerk/reference.md +273 -0
- moai_adk/templates/.claude/skills/moai-platform-convex/SKILL.md +100 -340
- moai_adk/templates/.claude/skills/moai-platform-convex/examples.md +506 -0
- moai_adk/templates/.claude/skills/moai-platform-convex/modules/auth-integration.md +421 -0
- moai_adk/templates/.claude/skills/moai-platform-convex/modules/file-storage.md +474 -0
- moai_adk/templates/.claude/skills/moai-platform-convex/modules/reactive-queries.md +302 -0
- moai_adk/templates/.claude/skills/moai-platform-convex/modules/server-functions.md +452 -0
- moai_adk/templates/.claude/skills/moai-platform-convex/reference.md +385 -0
- moai_adk/templates/.claude/skills/moai-platform-firebase-auth/SKILL.md +113 -326
- moai_adk/templates/.claude/skills/moai-platform-firebase-auth/examples.md +514 -0
- moai_adk/templates/.claude/skills/moai-platform-firebase-auth/modules/custom-claims.md +374 -0
- moai_adk/templates/.claude/skills/moai-platform-firebase-auth/modules/phone-auth.md +372 -0
- moai_adk/templates/.claude/skills/moai-platform-firebase-auth/modules/social-auth.md +339 -0
- moai_adk/templates/.claude/skills/moai-platform-firebase-auth/reference.md +382 -0
- moai_adk/templates/.claude/skills/moai-platform-firestore/SKILL.md +71 -302
- moai_adk/templates/.claude/skills/moai-platform-firestore/examples.md +445 -0
- moai_adk/templates/.claude/skills/moai-platform-firestore/modules/offline-cache.md +392 -0
- moai_adk/templates/.claude/skills/moai-platform-firestore/modules/realtime-listeners.md +441 -0
- moai_adk/templates/.claude/skills/moai-platform-firestore/modules/security-rules.md +352 -0
- moai_adk/templates/.claude/skills/moai-platform-firestore/modules/transactions.md +452 -0
- moai_adk/templates/.claude/skills/moai-platform-firestore/reference.md +322 -0
- moai_adk/templates/.claude/skills/moai-platform-neon/SKILL.md +101 -412
- moai_adk/templates/.claude/skills/moai-platform-neon/examples.md +470 -0
- moai_adk/templates/.claude/skills/moai-platform-neon/modules/auto-scaling.md +349 -0
- moai_adk/templates/.claude/skills/moai-platform-neon/modules/branching-workflows.md +354 -0
- moai_adk/templates/.claude/skills/moai-platform-neon/modules/connection-pooling.md +412 -0
- moai_adk/templates/.claude/skills/moai-platform-neon/modules/pitr-backups.md +458 -0
- moai_adk/templates/.claude/skills/moai-platform-neon/reference.md +272 -0
- moai_adk/templates/.claude/skills/moai-platform-railway/SKILL.md +96 -327
- moai_adk/templates/.claude/skills/moai-platform-railway/examples.md +539 -0
- moai_adk/templates/.claude/skills/moai-platform-railway/modules/docker-deployment.md +261 -0
- moai_adk/templates/.claude/skills/moai-platform-railway/modules/multi-service.md +291 -0
- moai_adk/templates/.claude/skills/moai-platform-railway/modules/networking-domains.md +338 -0
- moai_adk/templates/.claude/skills/moai-platform-railway/modules/volumes-storage.md +353 -0
- moai_adk/templates/.claude/skills/moai-platform-railway/reference.md +374 -0
- moai_adk/templates/.claude/skills/moai-platform-supabase/SKILL.md +103 -428
- moai_adk/templates/.claude/skills/moai-platform-supabase/examples.md +502 -0
- moai_adk/templates/.claude/skills/moai-platform-supabase/modules/auth-integration.md +384 -0
- moai_adk/templates/.claude/skills/moai-platform-supabase/modules/edge-functions.md +371 -0
- moai_adk/templates/.claude/skills/moai-platform-supabase/modules/postgresql-pgvector.md +231 -0
- moai_adk/templates/.claude/skills/moai-platform-supabase/modules/realtime-presence.md +354 -0
- moai_adk/templates/.claude/skills/moai-platform-supabase/modules/row-level-security.md +286 -0
- moai_adk/templates/.claude/skills/moai-platform-supabase/modules/storage-cdn.md +319 -0
- moai_adk/templates/.claude/skills/moai-platform-supabase/modules/typescript-patterns.md +453 -0
- moai_adk/templates/.claude/skills/moai-platform-supabase/reference.md +284 -0
- moai_adk/templates/.claude/skills/moai-platform-vercel/SKILL.md +96 -446
- moai_adk/templates/.claude/skills/moai-platform-vercel/examples.md +502 -0
- moai_adk/templates/.claude/skills/moai-platform-vercel/modules/analytics-speed.md +348 -0
- moai_adk/templates/.claude/skills/moai-platform-vercel/modules/deployment-config.md +344 -0
- moai_adk/templates/.claude/skills/moai-platform-vercel/modules/edge-functions.md +222 -0
- moai_adk/templates/.claude/skills/moai-platform-vercel/modules/isr-caching.md +306 -0
- moai_adk/templates/.claude/skills/moai-platform-vercel/modules/kv-storage.md +399 -0
- moai_adk/templates/.claude/skills/moai-platform-vercel/reference.md +360 -0
- moai_adk/templates/.claude/skills/moai-tool-ast-grep/SKILL.md +193 -0
- moai_adk/templates/.claude/skills/moai-tool-ast-grep/examples.md +1099 -0
- moai_adk/templates/.claude/skills/moai-tool-ast-grep/modules/language-specific.md +307 -0
- moai_adk/templates/.claude/skills/moai-tool-ast-grep/modules/pattern-syntax.md +237 -0
- moai_adk/templates/.claude/skills/moai-tool-ast-grep/modules/refactoring-patterns.md +260 -0
- moai_adk/templates/.claude/skills/moai-tool-ast-grep/modules/security-rules.md +239 -0
- moai_adk/templates/.claude/skills/moai-tool-ast-grep/reference.md +288 -0
- moai_adk/templates/.claude/skills/moai-tool-ast-grep/rules/languages/go.yml +90 -0
- moai_adk/templates/.claude/skills/moai-tool-ast-grep/rules/languages/python.yml +101 -0
- moai_adk/templates/.claude/skills/moai-tool-ast-grep/rules/languages/typescript.yml +83 -0
- moai_adk/templates/.claude/skills/moai-tool-ast-grep/rules/quality/complexity-check.yml +94 -0
- moai_adk/templates/.claude/skills/moai-tool-ast-grep/rules/quality/deprecated-apis.yml +84 -0
- moai_adk/templates/.claude/skills/moai-tool-ast-grep/rules/security/secrets-detection.yml +89 -0
- moai_adk/templates/.claude/skills/moai-tool-ast-grep/rules/security/sql-injection.yml +45 -0
- moai_adk/templates/.claude/skills/moai-tool-ast-grep/rules/security/xss-prevention.yml +50 -0
- moai_adk/templates/.claude/skills/moai-tool-ast-grep/rules/sgconfig.yml +54 -0
- moai_adk/templates/.claude/skills/moai-workflow-jit-docs/SKILL.md +225 -423
- moai_adk/templates/.claude/skills/moai-workflow-loop/SKILL.md +197 -0
- moai_adk/templates/.claude/skills/moai-workflow-loop/examples.md +1063 -0
- moai_adk/templates/.claude/skills/moai-workflow-loop/reference.md +1414 -0
- moai_adk/templates/.claude/skills/moai-workflow-project/SKILL.md +211 -314
- moai_adk/templates/.claude/skills/moai-workflow-project/schemas/tab_schema.json +15 -43
- moai_adk/templates/.claude/skills/moai-workflow-spec/SKILL.md +119 -316
- moai_adk/templates/.claude/skills/moai-workflow-spec/modules/advanced-patterns.md +237 -0
- moai_adk/templates/.claude/skills/moai-workflow-templates/SKILL.md +96 -203
- moai_adk/templates/.claude/skills/moai-workflow-testing/SKILL.md +201 -388
- moai_adk/templates/.claude/skills/moai-workflow-testing/modules/README.md +52 -3
- moai_adk/templates/.claude/skills/moai-workflow-testing/modules/ai-debugging.md +263 -806
- moai_adk/templates/.claude/skills/moai-workflow-testing/modules/automated-code-review/context7-integration.md +286 -0
- moai_adk/templates/.claude/skills/moai-workflow-testing/modules/automated-code-review/review-workflows.md +500 -0
- moai_adk/templates/.claude/skills/moai-workflow-testing/modules/automated-code-review/trust5-framework/relevance-analysis.md +154 -0
- moai_adk/templates/.claude/skills/moai-workflow-testing/modules/automated-code-review/trust5-framework/safety-analysis.md +148 -0
- moai_adk/templates/.claude/skills/moai-workflow-testing/modules/automated-code-review/trust5-framework/scoring-algorithms.md +196 -0
- moai_adk/templates/.claude/skills/moai-workflow-testing/modules/automated-code-review/trust5-framework/timeliness-analysis.md +168 -0
- moai_adk/templates/.claude/skills/moai-workflow-testing/modules/automated-code-review/trust5-framework/truthfulness-analysis.md +136 -0
- moai_adk/templates/.claude/skills/moai-workflow-testing/modules/automated-code-review/trust5-framework/usability-analysis.md +153 -0
- moai_adk/templates/.claude/skills/moai-workflow-testing/modules/automated-code-review/trust5-framework.md +257 -0
- moai_adk/templates/.claude/skills/moai-workflow-testing/modules/automated-code-review.md +191 -1344
- moai_adk/templates/.claude/skills/moai-workflow-testing/modules/code-review/analysis-patterns.md +340 -0
- moai_adk/templates/.claude/skills/moai-workflow-testing/modules/code-review/core-classes.md +299 -0
- moai_adk/templates/.claude/skills/moai-workflow-testing/modules/code-review/tool-integration.md +380 -0
- moai_adk/templates/.claude/skills/moai-workflow-testing/modules/debugging/debugging-workflows.md +451 -0
- moai_adk/templates/.claude/skills/moai-workflow-testing/modules/debugging/error-analysis.md +442 -0
- moai_adk/templates/.claude/skills/moai-workflow-testing/modules/performance/optimization-patterns.md +473 -0
- moai_adk/templates/.claude/skills/moai-workflow-testing/modules/performance/profiling-techniques.md +481 -0
- moai_adk/templates/.claude/skills/moai-workflow-testing/modules/performance-optimization/ai-optimization.md +241 -0
- moai_adk/templates/.claude/skills/moai-workflow-testing/modules/performance-optimization/bottleneck-detection.md +397 -0
- moai_adk/templates/.claude/skills/moai-workflow-testing/modules/performance-optimization/optimization-plan.md +315 -0
- moai_adk/templates/.claude/skills/moai-workflow-testing/modules/performance-optimization/profiler-core.md +277 -0
- moai_adk/templates/.claude/skills/moai-workflow-testing/modules/performance-optimization/real-time-monitoring.md +187 -0
- moai_adk/templates/.claude/skills/moai-workflow-testing/modules/performance-optimization.md +287 -1194
- moai_adk/templates/.claude/skills/moai-workflow-testing/modules/quality-metrics.md +415 -0
- moai_adk/templates/.claude/skills/moai-workflow-testing/modules/refactoring/ai-workflows.md +620 -0
- moai_adk/templates/.claude/skills/moai-workflow-testing/modules/refactoring/patterns.md +692 -0
- moai_adk/templates/.claude/skills/moai-workflow-testing/modules/security-analysis.md +429 -0
- moai_adk/templates/.claude/skills/moai-workflow-testing/modules/smart-refactoring.md +262 -1192
- moai_adk/templates/.claude/skills/moai-workflow-testing/modules/static-analysis.md +438 -0
- moai_adk/templates/.claude/skills/moai-workflow-testing/modules/tdd/core-classes.md +397 -0
- moai_adk/templates/.claude/skills/moai-workflow-testing/modules/tdd-context7/advanced-features.md +494 -0
- moai_adk/templates/.claude/skills/moai-workflow-testing/modules/tdd-context7/red-green-refactor.md +316 -0
- moai_adk/templates/.claude/skills/moai-workflow-testing/modules/tdd-context7/test-generation.md +471 -0
- moai_adk/templates/.claude/skills/moai-workflow-testing/modules/tdd-context7/test-patterns.md +371 -0
- moai_adk/templates/.claude/skills/moai-workflow-testing/modules/tdd-context7.md +227 -1222
- moai_adk/templates/.claude/skills/moai-workflow-testing/modules/trust5-validation.md +428 -0
- moai_adk/templates/.claude/skills/moai-workflow-worktree/SKILL.md +228 -0
- moai_adk/templates/.claude/skills/moai-workflow-worktree/modules/integration-patterns.md +149 -0
- moai_adk/templates/.claude/skills/moai-workflow-worktree/modules/moai-adk-integration.md +245 -0
- moai_adk/templates/.claude/skills/moai-workflow-worktree/modules/parallel-advanced.md +310 -0
- moai_adk/templates/.claude/skills/moai-workflow-worktree/modules/parallel-development.md +202 -0
- moai_adk/templates/.claude/skills/moai-workflow-worktree/modules/parallel-workflows.md +302 -0
- moai_adk/templates/.claude/skills/moai-workflow-worktree/modules/registry-architecture.md +271 -0
- moai_adk/templates/.claude/skills/moai-workflow-worktree/modules/resource-optimization.md +300 -0
- moai_adk/templates/.claude/skills/moai-workflow-worktree/modules/tools-integration.md +280 -0
- moai_adk/templates/.claude/skills/moai-workflow-worktree/modules/troubleshooting.md +397 -0
- moai_adk/templates/.claude/skills/moai-workflow-worktree/modules/worktree-commands.md +296 -0
- moai_adk/templates/.claude/skills/moai-workflow-worktree/modules/worktree-management.md +217 -0
- moai_adk/templates/.git-hooks/pre-push +162 -59
- moai_adk/templates/.github/workflows/ci-universal.yml +934 -133
- moai_adk/templates/.gitignore +65 -107
- moai_adk/templates/.lsp.json +152 -0
- moai_adk/templates/.mcp.json +2 -20
- moai_adk/templates/.moai/announcements/en.json +18 -0
- moai_adk/templates/.moai/announcements/ja.json +18 -0
- moai_adk/templates/.moai/announcements/ko.json +18 -0
- moai_adk/templates/.moai/announcements/zh.json +18 -0
- moai_adk/templates/.moai/config/config.yaml +8 -2
- moai_adk/templates/.moai/config/multilingual-triggers.yaml +213 -0
- moai_adk/templates/.moai/config/sections/language.yaml +2 -2
- moai_adk/templates/.moai/config/sections/llm.yaml +41 -0
- moai_adk/templates/.moai/config/sections/pricing.yaml +30 -0
- moai_adk/templates/.moai/config/sections/project.yaml +2 -2
- moai_adk/templates/.moai/config/sections/quality.yaml +43 -5
- moai_adk/templates/.moai/config/sections/ralph.yaml +55 -0
- moai_adk/templates/.moai/config/sections/system.yaml +46 -1
- moai_adk/templates/.moai/config/sections/user.yaml +1 -1
- moai_adk/templates/.moai/config/statusline-config.yaml +2 -2
- moai_adk/templates/.moai/llm-configs/glm.json +22 -0
- moai_adk/templates/CLAUDE.ja.md +343 -0
- moai_adk/templates/CLAUDE.ko.md +343 -0
- moai_adk/templates/CLAUDE.md +200 -499
- moai_adk/templates/CLAUDE.zh.md +343 -0
- moai_adk/utils/common.py +37 -0
- moai_adk/version.py +1 -1
- moai_adk-1.1.0.dist-info/METADATA +2443 -0
- moai_adk-1.1.0.dist-info/RECORD +701 -0
- {moai_adk-0.34.0.dist-info → moai_adk-1.1.0.dist-info}/entry_points.txt +2 -0
- moai_adk-1.1.0.dist-info/licenses/LICENSE +99 -0
- moai_adk/core/config/auto_spec_config.py +0 -340
- moai_adk/core/hooks/post_tool_auto_spec_completion.py +0 -901
- moai_adk/core/spec/confidence_scoring.py +0 -680
- moai_adk/core/spec/ears_template_engine.py +0 -1247
- moai_adk/core/spec/quality_validator.py +0 -687
- moai_adk/templates/.claude/agents/moai/ai-nano-banana.md +0 -670
- moai_adk/templates/.claude/agents/moai/expert-database.md +0 -777
- moai_adk/templates/.claude/agents/moai/expert-uiux.md +0 -1041
- moai_adk/templates/.claude/agents/moai/mcp-context7.md +0 -458
- moai_adk/templates/.claude/agents/moai/mcp-figma.md +0 -1607
- moai_adk/templates/.claude/agents/moai/mcp-notion.md +0 -789
- moai_adk/templates/.claude/agents/moai/mcp-playwright.md +0 -469
- moai_adk/templates/.claude/agents/moai/mcp-sequential-thinking.md +0 -1032
- moai_adk/templates/.claude/skills/moai-ai-nano-banana/SKILL.md +0 -438
- moai_adk/templates/.claude/skills/moai-ai-nano-banana/examples.md +0 -431
- moai_adk/templates/.claude/skills/moai-domain-uiux/modules/design-system-tokens.md +0 -405
- moai_adk/templates/.claude/skills/moai-library-nextra/advanced-patterns.md +0 -336
- moai_adk/templates/.claude/skills/moai-mcp-figma/SKILL.md +0 -402
- moai_adk/templates/.claude/skills/moai-mcp-figma/advanced-patterns.md +0 -607
- moai_adk/templates/.claude/skills/moai-mcp-notion/SKILL.md +0 -300
- moai_adk/templates/.claude/skills/moai-mcp-notion/advanced-patterns.md +0 -537
- moai_adk/templates/.claude/skills/moai-workflow-project/__init__.py +0 -520
- moai_adk/templates/.claude/skills/moai-workflow-project/complete_workflow_demo_fixed.py +0 -574
- moai_adk/templates/.claude/skills/moai-workflow-project/examples/complete_project_setup.py +0 -317
- moai_adk/templates/.claude/skills/moai-workflow-project/examples/complete_workflow_demo.py +0 -663
- moai_adk/templates/.claude/skills/moai-workflow-project/examples/config-migration-example.json +0 -190
- moai_adk/templates/.claude/skills/moai-workflow-project/examples/question-examples.json +0 -175
- moai_adk/templates/.claude/skills/moai-workflow-project/examples/quick_start.py +0 -196
- moai_adk/templates/.claude/skills/moai-workflow-project/modules/__init__.py +0 -17
- moai_adk/templates/.claude/skills/moai-workflow-project/modules/advanced-patterns.md +0 -158
- moai_adk/templates/.claude/skills/moai-workflow-project/modules/ask_user_integration.py +0 -340
- moai_adk/templates/.claude/skills/moai-workflow-project/modules/batch_questions.py +0 -713
- moai_adk/templates/.claude/skills/moai-workflow-project/modules/config_manager.py +0 -538
- moai_adk/templates/.claude/skills/moai-workflow-project/modules/documentation_manager.py +0 -1336
- moai_adk/templates/.claude/skills/moai-workflow-project/modules/language_initializer.py +0 -730
- moai_adk/templates/.claude/skills/moai-workflow-project/modules/migration_manager.py +0 -608
- moai_adk/templates/.claude/skills/moai-workflow-project/modules/template_optimizer.py +0 -1005
- moai_adk/templates/.claude/skills/moai-workflow-project/test_integration_simple.py +0 -436
- moai_adk/templates/.claude/skills/moai-worktree/SKILL.md +0 -411
- moai_adk/templates/.claude/skills/moai-worktree/modules/integration-patterns.md +0 -982
- moai_adk/templates/.claude/skills/moai-worktree/modules/parallel-development.md +0 -778
- moai_adk/templates/.claude/skills/moai-worktree/modules/worktree-commands.md +0 -646
- moai_adk/templates/.claude/skills/moai-worktree/modules/worktree-management.md +0 -782
- moai_adk/templates/.moai/config/questions/_schema.yaml +0 -151
- moai_adk/templates/.moai/config/questions/tab0-init.yaml +0 -251
- moai_adk/templates/.moai/config/questions/tab1-user.yaml +0 -108
- moai_adk/templates/.moai/config/questions/tab2-project.yaml +0 -81
- moai_adk/templates/.moai/config/questions/tab3-git.yaml +0 -634
- moai_adk/templates/.moai/config/questions/tab4-quality.yaml +0 -170
- moai_adk/templates/.moai/config/questions/tab5-system.yaml +0 -87
- moai_adk/templates/.moai/scripts/setup-glm.py +0 -136
- moai_adk-0.34.0.dist-info/METADATA +0 -2999
- moai_adk-0.34.0.dist-info/RECORD +0 -463
- moai_adk-0.34.0.dist-info/licenses/LICENSE +0 -21
- /moai_adk/foundation/{git.py → git/__init__.py} +0 -0
- /moai_adk/templates/.claude/skills/moai-library-mermaid/{advanced-patterns.md → modules/advanced-patterns.md} +0 -0
- /moai_adk/templates/.claude/skills/moai-library-mermaid/{optimization.md → modules/optimization.md} +0 -0
- /moai_adk/templates/.claude/skills/moai-library-nextra/{optimization.md → modules/optimization.md} +0 -0
- /moai_adk/templates/.claude/skills/moai-workflow-jit-docs/{advanced-patterns.md → modules/advanced-patterns.md} +0 -0
- /moai_adk/templates/.claude/skills/moai-workflow-jit-docs/{optimization.md → modules/optimization.md} +0 -0
- /moai_adk/templates/.claude/skills/moai-workflow-testing/{advanced-patterns.md → modules/advanced-patterns.md} +0 -0
- /moai_adk/templates/.claude/skills/moai-workflow-testing/{optimization.md → modules/optimization.md} +0 -0
- /moai_adk/templates/.claude/skills/{moai-worktree → moai-workflow-worktree}/examples.md +0 -0
- /moai_adk/templates/.claude/skills/{moai-worktree → moai-workflow-worktree}/reference.md +0 -0
- {moai_adk-0.34.0.dist-info → moai_adk-1.1.0.dist-info}/WHEEL +0 -0
|
@@ -1,25 +1,33 @@
|
|
|
1
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
|
|
5
|
-
category: language
|
|
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: 2.1.0
|
|
5
|
+
category: "language"
|
|
6
|
+
modularized: true
|
|
7
|
+
user-invocable: false
|
|
6
8
|
tags:
|
|
7
|
-
-
|
|
8
|
-
|
|
9
|
-
-
|
|
10
|
-
-
|
|
11
|
-
-
|
|
12
|
-
|
|
13
|
-
|
|
9
|
+
["language", "csharp", "dotnet", "aspnet-core", "entity-framework", "blazor"]
|
|
10
|
+
allowed-tools:
|
|
11
|
+
- Read
|
|
12
|
+
- Grep
|
|
13
|
+
- Glob
|
|
14
|
+
- mcp__context7__resolve-library-id
|
|
15
|
+
- mcp__context7__get-library-docs
|
|
16
|
+
context7-libraries: ["/dotnet/aspnetcore", "/dotnet/efcore", "/dotnet/runtime"]
|
|
17
|
+
updated: 2026-01-11
|
|
18
|
+
status: "active"
|
|
14
19
|
---
|
|
15
20
|
|
|
16
|
-
|
|
21
|
+
# C# 12 / .NET 8 Development Specialist
|
|
17
22
|
|
|
18
|
-
|
|
23
|
+
Modern C# development with ASP.NET Core, Entity Framework Core, Blazor, and enterprise patterns.
|
|
24
|
+
|
|
25
|
+
## Quick Reference
|
|
19
26
|
|
|
20
27
|
Auto-Triggers: `.cs`, `.csproj`, `.sln` files, C# projects, .NET solutions, ASP.NET Core applications
|
|
21
28
|
|
|
22
29
|
Core Stack:
|
|
30
|
+
|
|
23
31
|
- C# 12: Primary constructors, collection expressions, alias any type, default lambda parameters
|
|
24
32
|
- .NET 8: Minimal APIs, Native AOT, improved performance, WebSockets
|
|
25
33
|
- ASP.NET Core 8: Controllers, Endpoints, Middleware, Authentication
|
|
@@ -28,451 +36,89 @@ Core Stack:
|
|
|
28
36
|
- Testing: xUnit, NUnit, FluentAssertions, Moq
|
|
29
37
|
|
|
30
38
|
Quick Commands:
|
|
31
|
-
```bash
|
|
32
|
-
# Create .NET 8 Web API project
|
|
33
|
-
dotnet new webapi -n MyApi --framework net8.0
|
|
34
39
|
|
|
35
|
-
|
|
36
|
-
|
|
40
|
+
To create a new .NET 8 Web API project, run dotnet new webapi with -n flag for project name and --framework net8.0.
|
|
41
|
+
|
|
42
|
+
To create a Blazor Web App, run dotnet new blazor with -n flag for project name and --interactivity Auto.
|
|
37
43
|
|
|
38
|
-
|
|
39
|
-
dotnet add package Microsoft.EntityFrameworkCore.SqlServer
|
|
40
|
-
dotnet add package Microsoft.EntityFrameworkCore.Design
|
|
44
|
+
To add Entity Framework Core, run dotnet add package Microsoft.EntityFrameworkCore.SqlServer followed by Microsoft.EntityFrameworkCore.Design.
|
|
41
45
|
|
|
42
|
-
|
|
43
|
-
dotnet add package FluentValidation.AspNetCore
|
|
44
|
-
dotnet add package MediatR
|
|
45
|
-
```
|
|
46
|
+
To add FluentValidation and MediatR, run dotnet add package FluentValidation.AspNetCore and dotnet add package MediatR.
|
|
46
47
|
|
|
47
48
|
---
|
|
48
49
|
|
|
49
|
-
##
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
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
|
-
```
|
|
50
|
+
## Module Index
|
|
51
|
+
|
|
52
|
+
This skill uses progressive disclosure with specialized modules for deep coverage:
|
|
53
|
+
|
|
54
|
+
### Language Features
|
|
55
|
+
|
|
56
|
+
- [C# 12 Features](modules/csharp12-features.md) - Primary constructors, collection expressions, type aliases, default lambdas
|
|
57
|
+
|
|
58
|
+
### Web Development
|
|
59
|
+
|
|
60
|
+
- [ASP.NET Core 8](modules/aspnet-core.md) - Minimal API, Controllers, Middleware, Authentication
|
|
61
|
+
- [Blazor Components](modules/blazor-components.md) - Server, WASM, InteractiveServer, Components
|
|
62
|
+
|
|
63
|
+
### Data Access
|
|
64
|
+
|
|
65
|
+
- [Entity Framework Core 8](modules/efcore-patterns.md) - DbContext, Repository pattern, Migrations, Query optimization
|
|
66
|
+
|
|
67
|
+
### Architecture Patterns
|
|
68
|
+
|
|
69
|
+
- [CQRS and Validation](modules/cqrs-validation.md) - MediatR CQRS, FluentValidation, Handler patterns
|
|
70
|
+
|
|
71
|
+
### Reference Materials
|
|
72
|
+
|
|
73
|
+
- [API Reference](reference.md) - Complete API reference, Context7 library mappings
|
|
74
|
+
- [Code Examples](examples.md) - Production-ready examples, testing templates
|
|
416
75
|
|
|
417
76
|
---
|
|
418
77
|
|
|
419
|
-
##
|
|
78
|
+
## Implementation Quick Start
|
|
420
79
|
|
|
421
|
-
|
|
80
|
+
### Project Structure (Clean Architecture)
|
|
422
81
|
|
|
423
|
-
|
|
424
|
-
- [examples.md](examples.md) - Production-ready code examples, full-stack patterns, testing templates
|
|
82
|
+
Organize projects in a src folder with four main projects. MyApp.Api contains the ASP.NET Core Web API layer with Controllers folder for API Controllers, Endpoints folder for Minimal API endpoints, and Program.cs as the application entry point. MyApp.Application contains business logic including Commands folder for CQRS Commands, Queries folder for CQRS Queries, and Validators folder for FluentValidation. MyApp.Domain contains domain entities including Entities folder for domain models and Interfaces folder for repository interfaces. MyApp.Infrastructure contains data access including Data folder for DbContext and Repositories folder for repository implementations.
|
|
425
83
|
|
|
426
|
-
###
|
|
84
|
+
### Essential Patterns
|
|
427
85
|
|
|
428
|
-
|
|
429
|
-
|
|
430
|
-
|
|
431
|
-
|
|
432
|
-
|
|
433
|
-
```
|
|
86
|
+
Primary Constructor with DI: Define a public class UserService with constructor parameters for IUserRepository and ILogger of UserService. Create async methods like GetByIdAsync that take Guid id, log information using the logger with structured logging for UserId, and return the result from repository.FindByIdAsync.
|
|
87
|
+
|
|
88
|
+
Minimal API Endpoint: Use app.MapGet with route pattern like "/api/users/{id:guid}" and an async lambda taking Guid id and IUserService. Call the service method, check for null result, and return Results.Ok for found entities or Results.NotFound otherwise. Chain WithName for route naming and WithOpenApi for OpenAPI documentation.
|
|
89
|
+
|
|
90
|
+
Entity Configuration: Create a class implementing IEntityTypeConfiguration of your entity type. In the Configure method taking EntityTypeBuilder, call HasKey to set the primary key, use Property to configure fields with HasMaxLength and IsRequired, and use HasIndex with IsUnique for unique constraints.
|
|
434
91
|
|
|
435
92
|
---
|
|
436
93
|
|
|
437
|
-
##
|
|
94
|
+
## Context7 Integration
|
|
438
95
|
|
|
439
|
-
|
|
440
|
-
|
|
441
|
-
|
|
442
|
-
|
|
443
|
-
|
|
96
|
+
For latest documentation, use Context7 MCP tools.
|
|
97
|
+
|
|
98
|
+
For ASP.NET Core documentation, first resolve the library ID using mcp__context7__resolve-library-id with "aspnetcore", then fetch docs using mcp__context7__get-library-docs with the resolved library ID and topic like "minimal-apis middleware".
|
|
99
|
+
|
|
100
|
+
For Entity Framework Core documentation, resolve with "efcore" and fetch with topics like "dbcontext migrations".
|
|
101
|
+
|
|
102
|
+
For .NET Runtime documentation, resolve with "dotnet runtime" and fetch with topics like "collections threading".
|
|
444
103
|
|
|
445
104
|
---
|
|
446
105
|
|
|
447
106
|
## Quick Troubleshooting
|
|
448
107
|
|
|
449
|
-
Build and Runtime:
|
|
450
|
-
|
|
451
|
-
|
|
452
|
-
|
|
453
|
-
|
|
454
|
-
|
|
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
|
-
```
|
|
108
|
+
Build and Runtime: Run dotnet build with --verbosity detailed for detailed output. Run dotnet run with --launch-profile https for HTTPS profile. Run dotnet ef database update to apply EF migrations. Run dotnet ef migrations add with migration name to create new migrations.
|
|
109
|
+
|
|
110
|
+
Common Patterns:
|
|
111
|
+
|
|
112
|
+
For null reference handling, use ArgumentNullException.ThrowIfNull with the variable and nameof expression after fetching from context.
|
|
113
|
+
|
|
114
|
+
For async enumerable streaming, create async methods returning IAsyncEnumerable of your type. Add EnumeratorCancellation attribute to the CancellationToken parameter. Use await foreach with AsAsyncEnumerable and WithCancellation to iterate, yielding each item.
|
|
473
115
|
|
|
474
116
|
---
|
|
475
117
|
|
|
476
|
-
|
|
477
|
-
|
|
478
|
-
|
|
118
|
+
## Works Well With
|
|
119
|
+
|
|
120
|
+
- `moai-domain-backend` - API design, database integration patterns
|
|
121
|
+
- `moai-platform-deploy` - Azure, Docker, Kubernetes deployment
|
|
122
|
+
- `moai-workflow-testing` - Testing strategies and patterns
|
|
123
|
+
- `moai-foundation-quality` - Code quality standards
|
|
124
|
+
- `moai-essentials-debug` - Debugging .NET applications
|