@polymorphism-tech/morph-spec 3.2.0 → 4.2.0
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.
- package/CLAUDE.md +352 -7
- package/README.md +1 -14
- package/bin/detect-agents.js +1 -1
- package/bin/morph-spec.js +122 -34
- package/bin/validate.js +1 -1
- package/docs/getting-started.md +0 -5
- package/docs/v3.0/AGENTS.md +521 -0
- package/docs/v3.0/ANALYSIS.md +555 -0
- package/docs/v3.0/ARCHITECTURE.md +436 -0
- package/docs/v3.0/EXECUTION-FLOW.md +1304 -0
- package/docs/v3.0/FEATURES.md +688 -0
- package/docs/v3.0/README.md +231 -0
- package/docs/v3.0/ROADMAP.md +801 -0
- package/docs/validation-checklist.md +0 -1
- package/package.json +1 -1
- package/src/commands/agents/index.js +4 -0
- package/src/commands/{spawn-team.js → agents/spawn-team.js} +172 -172
- package/src/commands/{create-story.js → feature/create-story.js} +357 -354
- package/src/commands/feature/index.js +6 -0
- package/src/commands/{shard-spec.js → feature/shard-spec.js} +2 -2
- package/src/commands/{sprint-status.js → feature/sprint-status.js} +1 -1
- package/src/commands/{generate-context.js → generation/generate-context.js} +40 -40
- package/src/commands/{generate.js → generation/generate.js} +4 -4
- package/src/commands/generation/index.js +5 -0
- package/src/commands/index.js +16 -0
- package/src/commands/{capture-pattern.js → learning/capture-pattern.js} +121 -121
- package/src/commands/learning/index.js +5 -0
- package/src/commands/{detect-agents.js → project/detect-agents.js} +178 -178
- package/src/commands/project/detect-workflow.js +174 -0
- package/src/commands/{detect.js → project/detect.js} +104 -104
- package/src/commands/{doctor.js → project/doctor.js} +356 -356
- package/src/commands/project/index.js +10 -0
- package/src/commands/{init.js → project/init.js} +305 -295
- package/src/commands/{sync.js → project/sync.js} +167 -167
- package/src/commands/{update.js → project/update.js} +240 -240
- package/src/commands/{advance-phase.js → state/advance-phase.js} +416 -357
- package/src/commands/{approve.js → state/approve.js} +221 -221
- package/src/commands/state/index.js +8 -0
- package/src/commands/{rollback-phase.js → state/rollback-phase.js} +185 -185
- package/src/commands/{state.js → state/state.js} +334 -334
- package/src/commands/{validate-phase.js → state/validate-phase.js} +221 -221
- package/src/commands/tasks/index.js +4 -0
- package/src/commands/{task.js → tasks/task.js} +78 -78
- package/src/commands/templates/index.js +8 -0
- package/src/commands/templates/template-customize.js +101 -0
- package/src/commands/templates/template-list.js +128 -0
- package/src/commands/templates/template-render.js +95 -0
- package/src/commands/templates/template-show.js +131 -0
- package/src/commands/templates/template-validate.js +91 -0
- package/src/commands/utils/index.js +7 -0
- package/src/commands/{session-summary.js → utils/session-summary.js} +291 -291
- package/src/commands/{troubleshoot.js → utils/troubleshoot.js} +222 -222
- package/src/commands/{analyze-blazor-concurrency.js → validation/analyze-blazor-concurrency.js} +193 -193
- package/src/commands/validation/index.js +8 -0
- package/src/commands/{lint-fluent.js → validation/lint-fluent.js} +352 -352
- package/src/commands/{validate-blazor-state.js → validation/validate-blazor-state.js} +210 -210
- package/src/commands/{validate-blazor.js → validation/validate-blazor.js} +156 -156
- package/src/commands/{validate-css.js → validation/validate-css.js} +84 -84
- package/src/core/index.js +10 -0
- package/src/core/registry/command-registry.js +302 -0
- package/src/core/registry/index.js +8 -0
- package/src/core/registry/validator-registry.js +204 -0
- package/src/core/state/index.js +8 -0
- package/src/{lib → core/state}/phase-state-machine.js +214 -214
- package/src/{lib → core/state}/state-manager.js +572 -534
- package/src/core/templates/index.js +9 -0
- package/src/core/templates/template-registry.js +335 -0
- package/src/core/templates/template-renderer.js +477 -0
- package/src/core/templates/template-validator.js +296 -0
- package/src/core/workflows/index.js +7 -0
- package/src/core/workflows/workflow-detector.js +354 -0
- package/src/lib/{complexity-analyzer.js → analysis/complexity-analyzer.js} +441 -441
- package/src/lib/analysis/index.js +7 -0
- package/src/lib/{checkpoint-hooks.js → checkpoints/checkpoint-hooks.js} +258 -258
- package/src/lib/checkpoints/index.js +7 -0
- package/src/lib/detectors/config-detector.js +223 -223
- package/src/lib/detectors/conversation-analyzer.js +163 -163
- package/src/lib/{design-system-detector.js → detectors/design-system-detector.js} +187 -187
- package/src/lib/detectors/index.js +87 -84
- package/src/lib/detectors/standards-generator.js +275 -275
- package/src/lib/detectors/structure-detector.js +245 -245
- package/src/lib/{context-generator.js → generators/context-generator.js} +526 -516
- package/src/lib/generators/index.js +10 -0
- package/src/lib/{metadata-extractor.js → generators/metadata-extractor.js} +387 -380
- package/src/lib/{recap-generator.js → generators/recap-generator.js} +205 -205
- package/src/lib/learning/index.js +7 -0
- package/src/lib/orchestration/index.js +7 -0
- package/src/lib/{team-orchestrator.js → orchestration/team-orchestrator.js} +323 -323
- package/src/lib/stacks/index.js +7 -0
- package/src/lib/{stack-resolver.js → stacks/stack-resolver.js} +180 -148
- package/src/lib/standards/index.js +7 -0
- package/src/lib/{standards-context-injector.js → standards/standards-context-injector.js} +298 -288
- package/src/lib/troubleshooting/index.js +8 -0
- package/src/lib/{troubleshoot-grep.js → troubleshooting/troubleshoot-grep.js} +204 -204
- package/src/lib/{troubleshoot-index.js → troubleshooting/troubleshoot-index.js} +144 -144
- package/src/lib/validators/architecture/architecture-validator.js +387 -0
- package/src/lib/validators/architecture/index.js +7 -0
- package/src/lib/validators/architecture-validator.js +40 -367
- package/src/lib/{blazor-concurrency-analyzer.js → validators/blazor/blazor-concurrency-analyzer.js} +277 -288
- package/src/lib/{blazor-state-validator.js → validators/blazor/blazor-state-validator.js} +279 -291
- package/src/lib/{blazor-validator.js → validators/blazor/blazor-validator.js} +369 -374
- package/src/lib/validators/blazor/index.js +9 -0
- package/src/lib/validators/content/content-validator.js +351 -0
- package/src/lib/validators/content/index.js +7 -0
- package/src/lib/validators/content-validator.js +164 -351
- package/src/lib/validators/{contract-compliance-validator.js → contracts/contract-compliance-validator.js} +273 -273
- package/src/lib/validators/contracts/index.js +7 -0
- package/src/lib/{css-validator.js → validators/css/css-validator.js} +352 -352
- package/src/lib/validators/css/index.js +7 -0
- package/src/lib/validators/{design-system-validator.js → design-system/design-system-validator.js} +231 -231
- package/src/lib/validators/design-system/index.js +7 -0
- package/src/lib/validators/package-validator.js +41 -340
- package/src/lib/validators/packages/index.js +7 -0
- package/src/lib/validators/packages/package-validator.js +360 -0
- package/src/lib/validators/shared/index.js +12 -0
- package/src/lib/validators/shared/issue-counter.js +18 -0
- package/src/lib/validators/shared/result-formatter.js +124 -0
- package/src/lib/{spec-validator.js → validators/spec-validator.js} +258 -258
- package/src/lib/validators/ui/index.js +7 -0
- package/src/lib/validators/ui/ui-contrast-validator.js +422 -0
- package/src/lib/validators/ui-contrast-validator.js +31 -409
- package/src/lib/{validation-runner.js → validators/validation-runner.js} +286 -284
- package/src/ui/wizard-questions.js +0 -2
- package/src/utils/color-utils.js +70 -0
- package/src/utils/file-copier.js +188 -189
- package/src/utils/process-handler.js +97 -0
- package/stacks/blazor-azure/.claude/skills/level-2-domains/ai-agents/ai-system-architect.md +3 -3
- package/stacks/blazor-azure/.claude/skills/level-2-domains/backend/api-designer.md +59 -0
- package/stacks/blazor-azure/.claude/skills/level-2-domains/backend/dotnet-senior.md +45 -255
- package/stacks/blazor-azure/.claude/skills/level-2-domains/backend/ef-modeler.md +33 -88
- package/stacks/blazor-azure/.claude/skills/level-2-domains/backend/ms-agent-expert.md +25 -89
- package/stacks/blazor-azure/.claude/skills/level-2-domains/integrations/hangfire-orchestrator.md +64 -0
- package/stacks/blazor-azure/.morph/config/agents.json +879 -764
- package/stacks/blazor-azure/.morph/hooks/{pre-commit-tests.sh → pre-commit/tests-csharp.sh} +3 -2
- package/stacks/blazor-azure/.morph/templates/infrastructure/github/workflows/cd-prod.yml.hbs +41 -0
- package/stacks/blazor-azure/.morph/templates/infrastructure/github/workflows/cd-staging.yml.hbs +24 -0
- package/stacks/blazor-azure/.morph/templates/infrastructure/github/workflows/ci-build.yml.hbs +23 -0
- package/stacks/nextjs-supabase/.claude/commands/morph-apply.md +221 -0
- package/stacks/nextjs-supabase/.claude/commands/morph-archive.md +79 -0
- package/stacks/nextjs-supabase/.claude/commands/morph-deploy.md +529 -0
- package/stacks/nextjs-supabase/.claude/commands/morph-infra.md +209 -0
- package/stacks/nextjs-supabase/.claude/commands/morph-preflight.md +227 -0
- package/stacks/nextjs-supabase/.claude/commands/morph-proposal.md +122 -0
- package/stacks/nextjs-supabase/.claude/commands/morph-status.md +86 -0
- package/stacks/nextjs-supabase/.claude/commands/morph-troubleshoot.md +122 -0
- package/stacks/nextjs-supabase/.claude/settings.local.json +6 -0
- package/stacks/nextjs-supabase/.claude/skills/level-2-domains/integrations/supabase-expert.md +30 -150
- package/stacks/nextjs-supabase/.morph/config/agents.json +345 -345
- package/stacks/nextjs-supabase/.morph/hooks/pre-commit/tests-typescript.sh +61 -0
- package/stacks/nextjs-supabase/.morph/templates/infrastructure/github/workflows/cd-prod.yml.hbs +22 -0
- package/stacks/nextjs-supabase/.morph/templates/infrastructure/github/workflows/cd-staging.yml.hbs +22 -0
- package/stacks/nextjs-supabase/.morph/templates/infrastructure/github/workflows/ci-build.yml.hbs +35 -0
- package/stacks/nextjs-supabase/README.md +6 -15
- package/bin/render-template.js +0 -349
- package/bin/semantic-detect-agents.js +0 -247
- package/bin/validate-agents-skills.js +0 -257
- package/bin/validate-agents.js +0 -70
- package/bin/validate-phase.js +0 -263
- package/docs/examples.md +0 -328
- package/scripts/reorganize-skills.cjs +0 -175
- package/scripts/validate-agents-structure.cjs +0 -52
- package/scripts/validate-skills.cjs +0 -180
- package/src/commands/deploy.js +0 -780
- package/src/lib/continuous-validator.js +0 -421
- package/src/lib/decision-constraint-loader.js +0 -109
- package/src/lib/design-system-scaffolder.js +0 -299
- package/src/lib/hook-executor.js +0 -257
- package/src/lib/mockup-generator.js +0 -366
- package/src/lib/ui-detector.js +0 -350
- package/src/llm/schema-validator.js +0 -121
- package/src/sanitizer/.gitkeep +0 -0
- package/src/scanner/.gitkeep +0 -0
- package/src/types/index.js +0 -477
- package/src/ui/.gitkeep +0 -0
- package/src/writer/.gitkeep +0 -0
- package/stacks/blazor-azure/.azure/README.md +0 -293
- package/stacks/blazor-azure/.azure/docs/azure-devops-setup.md +0 -454
- package/stacks/blazor-azure/.azure/docs/branch-strategy.md +0 -398
- package/stacks/blazor-azure/.azure/docs/local-development.md +0 -515
- package/stacks/blazor-azure/.azure/pipelines/pipeline-variables.yml +0 -34
- package/stacks/blazor-azure/.azure/pipelines/prod-pipeline.yml +0 -319
- package/stacks/blazor-azure/.azure/pipelines/staging-pipeline.yml +0 -234
- package/stacks/blazor-azure/.azure/pipelines/templates/build-dotnet.yml +0 -75
- package/stacks/blazor-azure/.azure/pipelines/templates/deploy-app-service.yml +0 -94
- package/stacks/blazor-azure/.azure/pipelines/templates/deploy-container-app.yml +0 -120
- package/stacks/blazor-azure/.azure/pipelines/templates/infra-deploy.yml +0 -90
- package/stacks/blazor-azure/.claude/settings.local.json +0 -15
- package/stacks/blazor-azure/.morph/docs/STORY-DRIVEN-DEVELOPMENT.md +0 -392
- package/stacks/blazor-azure/.morph/docs/workflows/design-impl.md +0 -37
- package/stacks/blazor-azure/.morph/docs/workflows/enforcement-pipeline.md +0 -668
- package/stacks/blazor-azure/.morph/docs/workflows/fast-track.md +0 -29
- package/stacks/blazor-azure/.morph/docs/workflows/full-morph.md +0 -76
- package/stacks/blazor-azure/.morph/docs/workflows/standard.md +0 -44
- package/stacks/blazor-azure/.morph/docs/workflows/ui-refresh.md +0 -39
- package/stacks/blazor-azure/.morph/examples/api-nextjs/README.md +0 -241
- package/stacks/blazor-azure/.morph/examples/api-nextjs/contracts.ts +0 -307
- package/stacks/blazor-azure/.morph/examples/api-nextjs/spec.md +0 -399
- package/stacks/blazor-azure/.morph/examples/api-nextjs/tasks.md +0 -168
- package/stacks/blazor-azure/.morph/examples/micro-saas/README.md +0 -125
- package/stacks/blazor-azure/.morph/examples/micro-saas/contracts.cs +0 -358
- package/stacks/blazor-azure/.morph/examples/micro-saas/decisions.md +0 -246
- package/stacks/blazor-azure/.morph/examples/micro-saas/spec.md +0 -236
- package/stacks/blazor-azure/.morph/examples/micro-saas/tasks.md +0 -150
- package/stacks/blazor-azure/.morph/examples/multi-agent/README.md +0 -309
- package/stacks/blazor-azure/.morph/examples/multi-agent/contracts.cs +0 -433
- package/stacks/blazor-azure/.morph/examples/multi-agent/spec.md +0 -479
- package/stacks/blazor-azure/.morph/examples/multi-agent/tasks.md +0 -185
- package/stacks/blazor-azure/.morph/examples/scheduled-reports/decisions.md +0 -158
- package/stacks/blazor-azure/.morph/examples/scheduled-reports/proposal.md +0 -95
- package/stacks/blazor-azure/.morph/examples/scheduled-reports/spec.md +0 -267
- package/stacks/blazor-azure/.morph/examples/state-v3.json +0 -188
- package/stacks/blazor-azure/.morph/hooks/README.md +0 -348
- package/stacks/blazor-azure/.morph/hooks/pre-commit-agents.sh +0 -24
- package/stacks/blazor-azure/.morph/hooks/pre-commit-all.sh +0 -48
- package/stacks/blazor-azure/.morph/hooks/pre-commit-specs.sh +0 -49
- package/stacks/blazor-azure/.morph/hooks/task-completed.js +0 -73
- package/stacks/blazor-azure/.morph/hooks/teammate-idle.js +0 -68
- package/stacks/blazor-azure/.morph/standards/agent-framework-blazor-ui.md +0 -359
- package/stacks/blazor-azure/.morph/standards/agent-framework-production.md +0 -410
- package/stacks/blazor-azure/.morph/standards/agent-framework-setup.md +0 -413
- package/stacks/blazor-azure/.morph/standards/agent-framework-workflows.md +0 -349
- package/stacks/blazor-azure/.morph/standards/agent-teams-workflow.md +0 -474
- package/stacks/blazor-azure/.morph/standards/architecture.md +0 -325
- package/stacks/blazor-azure/.morph/standards/azure.md +0 -605
- package/stacks/blazor-azure/.morph/standards/coding.md +0 -377
- package/stacks/blazor-azure/.morph/standards/dotnet10-migration.md +0 -520
- package/stacks/blazor-azure/.morph/standards/fluent-ui-setup.md +0 -590
- package/stacks/blazor-azure/.morph/standards/migration-guide.md +0 -514
- package/stacks/blazor-azure/.morph/standards/passkeys-auth.md +0 -423
- package/stacks/blazor-azure/.morph/standards/vector-search-rag.md +0 -536
- package/stacks/blazor-azure/.morph/templates/CONTEXT-FEATURE.md +0 -276
- package/stacks/blazor-azure/.morph/templates/CONTEXT.md +0 -170
- package/stacks/blazor-azure/.morph/templates/FluentDesignTheme.cs +0 -149
- package/stacks/blazor-azure/.morph/templates/MudTheme.cs +0 -281
- package/stacks/blazor-azure/.morph/templates/agent.cs +0 -163
- package/stacks/blazor-azure/.morph/templates/clarify-questions.md +0 -159
- package/stacks/blazor-azure/.morph/templates/component.razor +0 -239
- package/stacks/blazor-azure/.morph/templates/contracts/Commands.cs +0 -74
- package/stacks/blazor-azure/.morph/templates/contracts/Entities.cs +0 -25
- package/stacks/blazor-azure/.morph/templates/contracts/Queries.cs +0 -74
- package/stacks/blazor-azure/.morph/templates/contracts/README.md +0 -74
- package/stacks/blazor-azure/.morph/templates/contracts.cs +0 -217
- package/stacks/blazor-azure/.morph/templates/decisions.md +0 -123
- package/stacks/blazor-azure/.morph/templates/design-system.css +0 -226
- package/stacks/blazor-azure/.morph/templates/infra/.dockerignore.example +0 -89
- package/stacks/blazor-azure/.morph/templates/infra/Dockerfile.example +0 -82
- package/stacks/blazor-azure/.morph/templates/infra/README.md +0 -286
- package/stacks/blazor-azure/.morph/templates/infra/app-insights.bicep +0 -63
- package/stacks/blazor-azure/.morph/templates/infra/app-service.bicep +0 -164
- package/stacks/blazor-azure/.morph/templates/infra/azure-pipelines-deploy.yml +0 -480
- package/stacks/blazor-azure/.morph/templates/infra/container-app-env.bicep +0 -49
- package/stacks/blazor-azure/.morph/templates/infra/container-app.bicep +0 -156
- package/stacks/blazor-azure/.morph/templates/infra/deploy-checklist.md +0 -426
- package/stacks/blazor-azure/.morph/templates/infra/deploy.ps1 +0 -229
- package/stacks/blazor-azure/.morph/templates/infra/deploy.sh +0 -208
- package/stacks/blazor-azure/.morph/templates/infra/key-vault.bicep +0 -91
- package/stacks/blazor-azure/.morph/templates/infra/main.bicep +0 -189
- package/stacks/blazor-azure/.morph/templates/infra/parameters.dev.json +0 -29
- package/stacks/blazor-azure/.morph/templates/infra/parameters.prod.json +0 -29
- package/stacks/blazor-azure/.morph/templates/infra/parameters.staging.json +0 -29
- package/stacks/blazor-azure/.morph/templates/infra/sql-database.bicep +0 -103
- package/stacks/blazor-azure/.morph/templates/infra/storage.bicep +0 -106
- package/stacks/blazor-azure/.morph/templates/integrations/asaas-client.cs +0 -387
- package/stacks/blazor-azure/.morph/templates/integrations/asaas-webhook.cs +0 -351
- package/stacks/blazor-azure/.morph/templates/integrations/azure-identity-config.cs +0 -288
- package/stacks/blazor-azure/.morph/templates/integrations/clerk-config.cs +0 -258
- package/stacks/blazor-azure/.morph/templates/job.cs +0 -171
- package/stacks/blazor-azure/.morph/templates/migration.cs +0 -83
- package/stacks/blazor-azure/.morph/templates/proposal.md +0 -141
- package/stacks/blazor-azure/.morph/templates/recap.md +0 -94
- package/stacks/blazor-azure/.morph/templates/repository.cs +0 -141
- package/stacks/blazor-azure/.morph/templates/saas/subscription.cs +0 -347
- package/stacks/blazor-azure/.morph/templates/saas/tenant.cs +0 -338
- package/stacks/blazor-azure/.morph/templates/service.cs +0 -139
- package/stacks/blazor-azure/.morph/templates/simulation.md +0 -353
- package/stacks/blazor-azure/.morph/templates/spec.md +0 -149
- package/stacks/blazor-azure/.morph/templates/sprint-status.yaml +0 -68
- package/stacks/blazor-azure/.morph/templates/state.template.json +0 -222
- package/stacks/blazor-azure/.morph/templates/story.md +0 -143
- package/stacks/blazor-azure/.morph/templates/tasks.md +0 -257
- package/stacks/blazor-azure/.morph/templates/test.cs +0 -239
- package/stacks/blazor-azure/.morph/templates/ui-components.md +0 -362
- package/stacks/blazor-azure/.morph/templates/ui-design-system.md +0 -286
- package/stacks/blazor-azure/.morph/templates/ui-flows.md +0 -336
- package/stacks/blazor-azure/.morph/templates/ui-mockups.md +0 -133
- package/stacks/nextjs-supabase/.morph/docs/easypanel-setup.md +0 -169
- package/stacks/nextjs-supabase/.morph/docs/supabase-mcp-setup.md +0 -247
- package/stacks/nextjs-supabase/.morph/examples/crud-nextjs-supabase/README.md +0 -697
- package/stacks/nextjs-supabase/.morph/examples/crud-nextjs-supabase/spec.md +0 -85
- package/stacks/nextjs-supabase/.morph/examples/crud-nextjs-supabase/tasks.md +0 -86
- package/stacks/nextjs-supabase/.morph/examples/saas-nextjs-supabase/README.md +0 -498
- package/stacks/nextjs-supabase/.morph/examples/saas-nextjs-supabase/decisions.md +0 -121
- package/stacks/nextjs-supabase/.morph/examples/saas-nextjs-supabase/spec.md +0 -138
- package/stacks/nextjs-supabase/.morph/examples/saas-nextjs-supabase/tasks.md +0 -162
- package/stacks/nextjs-supabase/.morph/standards/easypanel-deploy.md +0 -191
- package/stacks/nextjs-supabase/.morph/standards/nextjs-patterns.md +0 -193
- package/stacks/nextjs-supabase/.morph/standards/supabase-auth.md +0 -171
- package/stacks/nextjs-supabase/.morph/standards/supabase-pgvector.md +0 -164
- package/stacks/nextjs-supabase/.morph/standards/supabase-rls.md +0 -179
- package/stacks/nextjs-supabase/.morph/standards/supabase-storage.md +0 -148
- package/stacks/nextjs-supabase/.morph/templates/contracts.cs +0 -173
- package/stacks/nextjs-supabase/.morph/templates/contracts.ts +0 -168
- package/stacks/nextjs-supabase/.morph/templates/decisions.md +0 -115
- package/stacks/nextjs-supabase/.morph/templates/dockerfile-api.dockerfile +0 -38
- package/stacks/nextjs-supabase/.morph/templates/dockerfile-web.dockerfile +0 -48
- package/stacks/nextjs-supabase/.morph/templates/proposal.md +0 -145
- package/stacks/nextjs-supabase/.morph/templates/recap.md +0 -134
- package/stacks/nextjs-supabase/.morph/templates/rls-policy.sql +0 -57
- package/stacks/nextjs-supabase/.morph/templates/spec.md +0 -231
- package/stacks/nextjs-supabase/.morph/templates/supabase-migration.sql +0 -100
- package/stacks/nextjs-supabase/.morph/templates/tasks.md +0 -257
- /package/src/commands/{search-patterns.js → learning/search-patterns.js} +0 -0
- /package/src/commands/{migrate-state.js → utils/migrate-state.js} +0 -0
- /package/src/commands/{upgrade.js → utils/upgrade.js} +0 -0
- /package/src/{lib → core/templates}/template-data-sources.js +0 -0
- /package/src/lib/{design-system-generator.js → generators/design-system-generator.js} +0 -0
- /package/src/lib/{learning-system.js → learning/learning-system.js} +0 -0
- /package/{src/generator → stacks/blazor-azure/.morph/templates}/.gitkeep +0 -0
- /package/{src/llm → stacks/nextjs-supabase/.morph/templates}/.gitkeep +0 -0
|
@@ -1,286 +1,76 @@
|
|
|
1
1
|
# .NET Senior Engineer
|
|
2
2
|
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
> **Ref:** `framework/standards/coding.md` — ALL code output MUST follow these conventions.
|
|
8
|
-
> **Ref:** `framework/standards/architecture.md` — ALL code MUST respect layer boundaries.
|
|
9
|
-
> **Ref:** `.claude/skills/checklists/code-review.md` — Self-check before delivering code.
|
|
3
|
+
**Tier:** 2 (Domain Leader)
|
|
4
|
+
**Always Active:** Yes
|
|
5
|
+
**Reports to:** standards-architect
|
|
6
|
+
**Coordinates:** ef-modeler, api-designer, event-architect, hangfire-orchestrator, ms-agent-expert, ddd-expert, nosql-cache-expert
|
|
10
7
|
|
|
11
8
|
---
|
|
12
9
|
|
|
13
|
-
##
|
|
14
|
-
|
|
15
|
-
### Standard Mode (default)
|
|
16
|
-
|
|
17
|
-
Active for all C# code writing. Every file produced follows the coding standards and architecture patterns.
|
|
18
|
-
|
|
19
|
-
**Trigger:** Any implementation task (always active as Core Agent).
|
|
20
|
-
|
|
21
|
-
### Ultrathink Mode
|
|
22
|
-
|
|
23
|
-
Extended deep-reasoning mode for complex decisions. Think step by step through trade-offs before recommending.
|
|
10
|
+
## Role
|
|
24
11
|
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
**Use for:**
|
|
28
|
-
- Technology/library selection (MudBlazor vs Fluent UI, Hangfire vs Azure Functions)
|
|
29
|
-
- Architecture pattern decisions (CQRS vs simple, Repository vs direct DbContext)
|
|
30
|
-
- Performance optimization strategy
|
|
31
|
-
- Migration planning (.NET version upgrades, library migrations)
|
|
32
|
-
- Multi-system integration design
|
|
33
|
-
- Database schema design for complex domains
|
|
12
|
+
Senior .NET engineer and Backend Squad Leader. Writes production-quality C# code and coordinates backend domain specialists for all .NET implementation tasks.
|
|
34
13
|
|
|
35
14
|
---
|
|
36
15
|
|
|
37
|
-
##
|
|
38
|
-
|
|
39
|
-
**MANDATORY for ALL C# code output.** No exceptions.
|
|
40
|
-
|
|
41
|
-
### Naming (ref: coding.md)
|
|
42
|
-
|
|
43
|
-
| Element | Convention | Example |
|
|
44
|
-
|---------|-----------|---------|
|
|
45
|
-
| Classes | PascalCase + `sealed` | `public sealed class OrderService` |
|
|
46
|
-
| Interfaces | `I` + PascalCase | `public interface IOrderService` |
|
|
47
|
-
| Methods | PascalCase + `Async` | `public async Task<Result<Order>> GetByIdAsync(...)` |
|
|
48
|
-
| Constants | PascalCase | `private const int MaxRetryCount = 3;` |
|
|
49
|
-
| Private fields | `_camelCase` | `private readonly ILogger<OrderService> _logger;` |
|
|
50
|
-
| Parameters | camelCase | `(int orderId, CancellationToken ct = default)` |
|
|
16
|
+
## Standards Applied
|
|
51
17
|
|
|
52
|
-
### Structure
|
|
53
|
-
|
|
54
|
-
```csharp
|
|
55
|
-
// 1. File-scoped namespace
|
|
56
|
-
namespace MyApp.Application.Services;
|
|
57
|
-
|
|
58
|
-
// 2. Primary constructor for DI (preferred) or traditional constructor
|
|
59
|
-
public sealed class OrderService(
|
|
60
|
-
IOrderRepository repository,
|
|
61
|
-
IPaymentGateway paymentGateway,
|
|
62
|
-
ILogger<OrderService> logger) : IOrderService
|
|
63
|
-
{
|
|
64
|
-
// 3. Constants first (PascalCase)
|
|
65
|
-
private const int MaxRetryCount = 3;
|
|
66
|
-
private const string DefaultCurrency = "BRL";
|
|
67
|
-
|
|
68
|
-
// 4. Public methods (business operations)
|
|
69
|
-
public async Task<Result<OrderResponse>> CreateAsync(
|
|
70
|
-
CreateOrderRequest request,
|
|
71
|
-
CancellationToken ct = default)
|
|
72
|
-
{
|
|
73
|
-
// 5. Entry logging with correlation
|
|
74
|
-
logger.LogInformation("Creating order for customer {CustomerId}", request.CustomerId);
|
|
75
|
-
|
|
76
|
-
// 6. Validation (early return with Result)
|
|
77
|
-
if (request.Items.Count == 0)
|
|
78
|
-
return Result.Failure<OrderResponse>("Order must have at least one item");
|
|
79
|
-
|
|
80
|
-
// 7. Domain logic
|
|
81
|
-
var order = Order.Create(request.CustomerId, request.Items);
|
|
82
|
-
|
|
83
|
-
// 8. Persistence
|
|
84
|
-
await repository.AddAsync(order, ct);
|
|
85
|
-
await repository.SaveChangesAsync(ct);
|
|
86
|
-
|
|
87
|
-
// 9. Exit logging
|
|
88
|
-
logger.LogInformation("Order {OrderId} created successfully", order.Id);
|
|
89
|
-
|
|
90
|
-
// 10. Return mapped response
|
|
91
|
-
return Result.Success(order.ToResponse());
|
|
92
|
-
}
|
|
93
|
-
}
|
|
94
18
|
```
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
| **sealed** | All classes sealed unless designed for inheritance | `public sealed class OrderService` |
|
|
104
|
-
| **Nullable types** | Always enabled, `?` only when truly optional | `string? middleName` (optional) vs `string name` (required) |
|
|
105
|
-
| **Primary constructors** | For DI injection (C# 12+) | `class OrderService(IRepo repo)` |
|
|
106
|
-
| **Expression body** | Single-line members | `public int Count => _items.Count;` |
|
|
107
|
-
| **Pattern matching** | `is null` / `is not null` | `if (order is null) return ...` |
|
|
108
|
-
| **Collection expressions** | Prefer `[..]` syntax | `List<int> ids = [1, 2, 3];` |
|
|
109
|
-
|
|
110
|
-
### Entity Pattern
|
|
111
|
-
|
|
112
|
-
```csharp
|
|
113
|
-
namespace MyApp.Domain.Entities;
|
|
114
|
-
|
|
115
|
-
public sealed class Order
|
|
116
|
-
{
|
|
117
|
-
// Private constructor — force factory method
|
|
118
|
-
private Order() { }
|
|
119
|
-
|
|
120
|
-
public Guid Id { get; private set; }
|
|
121
|
-
public int CustomerId { get; private set; }
|
|
122
|
-
public OrderStatus Status { get; private set; }
|
|
123
|
-
public decimal Total { get; private set; }
|
|
124
|
-
public DateTime CreatedAt { get; private set; }
|
|
125
|
-
|
|
126
|
-
// Factory method with validation
|
|
127
|
-
public static Order Create(int customerId, List<OrderItem> items)
|
|
128
|
-
{
|
|
129
|
-
if (items.Count == 0)
|
|
130
|
-
throw new DomainException("Order must have at least one item");
|
|
131
|
-
|
|
132
|
-
return new Order
|
|
133
|
-
{
|
|
134
|
-
Id = Guid.NewGuid(),
|
|
135
|
-
CustomerId = customerId,
|
|
136
|
-
Status = OrderStatus.Created,
|
|
137
|
-
Total = items.Sum(i => i.Price * i.Quantity),
|
|
138
|
-
CreatedAt = DateTime.UtcNow
|
|
139
|
-
};
|
|
140
|
-
}
|
|
141
|
-
|
|
142
|
-
// Behavior methods (not anemic)
|
|
143
|
-
public void MarkAsPaid()
|
|
144
|
-
{
|
|
145
|
-
if (Status >= OrderStatus.Completed || Status == OrderStatus.Failed)
|
|
146
|
-
throw new DomainException($"Cannot mark order {Id} as paid in status {Status}");
|
|
147
|
-
Status = OrderStatus.PendingPayment;
|
|
148
|
-
}
|
|
149
|
-
}
|
|
150
|
-
```
|
|
151
|
-
|
|
152
|
-
### DTO Pattern
|
|
153
|
-
|
|
154
|
-
```csharp
|
|
155
|
-
namespace MyApp.Application.DTOs;
|
|
156
|
-
|
|
157
|
-
// Request: record with required properties
|
|
158
|
-
public sealed record CreateOrderRequest(
|
|
159
|
-
int CustomerId,
|
|
160
|
-
List<OrderItemRequest> Items);
|
|
161
|
-
|
|
162
|
-
// Response: record with computed properties
|
|
163
|
-
public sealed record OrderResponse(
|
|
164
|
-
Guid Id,
|
|
165
|
-
int CustomerId,
|
|
166
|
-
string StatusDisplay,
|
|
167
|
-
decimal Total,
|
|
168
|
-
DateTime CreatedAt);
|
|
169
|
-
|
|
170
|
-
// Enum: PascalCase members, error states at 100+
|
|
171
|
-
public enum OrderStatus
|
|
172
|
-
{
|
|
173
|
-
Created = 0,
|
|
174
|
-
PendingPayment = 1,
|
|
175
|
-
Processing = 2,
|
|
176
|
-
Shipped = 3,
|
|
177
|
-
Completed = 4,
|
|
178
|
-
// Error states (high values for comparison operators)
|
|
179
|
-
Failed = 100,
|
|
180
|
-
Cancelled = 101,
|
|
181
|
-
Refunded = 102
|
|
182
|
-
}
|
|
19
|
+
framework/standards/core/coding.md
|
|
20
|
+
framework/standards/core/architecture.md
|
|
21
|
+
framework/standards/core/testing.md
|
|
22
|
+
framework/standards/backend/dotnet/core.md
|
|
23
|
+
framework/standards/backend/dotnet/async.md
|
|
24
|
+
framework/standards/backend/dotnet/di.md
|
|
25
|
+
framework/standards/backend/database/ef-core.md
|
|
26
|
+
framework/standards/backend/api/rest.md
|
|
183
27
|
```
|
|
184
28
|
|
|
185
29
|
---
|
|
186
30
|
|
|
187
|
-
##
|
|
31
|
+
## Responsibilities
|
|
188
32
|
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
5. ERROR HANDLING → Result pattern for business? No empty catch?
|
|
197
|
-
6. SEALED → All classes sealed?
|
|
198
|
-
7. NULLABLE → <Nullable>enable</Nullable>? ? only where optional?
|
|
199
|
-
```
|
|
200
|
-
|
|
201
|
-
Then trigger **Code Analyzer** for deeper review (automatic at checkpoints and FASE 5).
|
|
33
|
+
- Lead backend implementation (services, controllers, business logic)
|
|
34
|
+
- Coordinate backend squad (ef-modeler, api-designer, etc.)
|
|
35
|
+
- Ensure code follows all .NET standards
|
|
36
|
+
- Design service layer architecture
|
|
37
|
+
- Implement async patterns with CancellationToken
|
|
38
|
+
- Apply dependency injection correctly
|
|
39
|
+
- Write unit and integration tests
|
|
202
40
|
|
|
203
41
|
---
|
|
204
42
|
|
|
205
|
-
##
|
|
206
|
-
|
|
207
|
-
When in Ultrathink Mode, produce structured analysis:
|
|
43
|
+
## When to Use
|
|
208
44
|
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
### Constraints
|
|
216
|
-
- {Constraint 1: budget, timeline, team skill, existing tech}
|
|
217
|
-
- {Constraint 2}
|
|
218
|
-
|
|
219
|
-
### Options Analysis
|
|
220
|
-
|
|
221
|
-
| Criterion | Option A: {Name} | Option B: {Name} | Option C: {Name} |
|
|
222
|
-
|-----------|------------------|------------------|------------------|
|
|
223
|
-
| **Performance** | {assessment} | {assessment} | {assessment} |
|
|
224
|
-
| **Complexity** | {Low/Medium/High} | {Low/Medium/High} | {Low/Medium/High} |
|
|
225
|
-
| **Maintainability** | {assessment} | {assessment} | {assessment} |
|
|
226
|
-
| **Cost** | {assessment} | {assessment} | {assessment} |
|
|
227
|
-
| **Risk** | {assessment} | {assessment} | {assessment} |
|
|
228
|
-
| **Team familiarity** | {assessment} | {assessment} | {assessment} |
|
|
229
|
-
|
|
230
|
-
### Option A: {Name}
|
|
231
|
-
**Pros:** {list}
|
|
232
|
-
**Cons:** {list}
|
|
233
|
-
**Best when:** {scenario}
|
|
234
|
-
|
|
235
|
-
### Option B: {Name}
|
|
236
|
-
**Pros:** {list}
|
|
237
|
-
**Cons:** {list}
|
|
238
|
-
**Best when:** {scenario}
|
|
239
|
-
|
|
240
|
-
### Recommendation
|
|
241
|
-
**{Option X}** because {justification tied to constraints and criteria}.
|
|
242
|
-
|
|
243
|
-
### Implementation Impact
|
|
244
|
-
- **Files affected:** {count and key files}
|
|
245
|
-
- **Migrations:** {yes/no, what changes}
|
|
246
|
-
- **Breaking changes:** {yes/no, what breaks}
|
|
247
|
-
- **Estimated effort:** {T-shirt size with rationale}
|
|
248
|
-
- **Rollback plan:** {how to revert if needed}
|
|
249
|
-
```
|
|
45
|
+
- Any .NET/C# code implementation
|
|
46
|
+
- Backend service layer development
|
|
47
|
+
- API controller implementation
|
|
48
|
+
- Business logic implementation
|
|
49
|
+
- Complex architectural decisions (Ultrathink mode)
|
|
250
50
|
|
|
251
51
|
---
|
|
252
52
|
|
|
253
|
-
##
|
|
53
|
+
## Ultrathink Mode
|
|
54
|
+
|
|
55
|
+
**Trigger:** Keywords like "ultrathink", "deep-think", "analyze deeply", "complex decision"
|
|
254
56
|
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
| Records | Immutable DTOs | `record OrderResponse(Guid Id, ...)` |
|
|
262
|
-
| Pattern matching | Type checks, null checks | `if (x is Order { Status: > 0 } order)` |
|
|
263
|
-
| `required` modifier | Non-nullable init props | `public required string Name { get; init; }` |
|
|
264
|
-
| `sealed` classes | Default for all classes | `public sealed class OrderService` |
|
|
265
|
-
| Extension methods | Add behavior to existing types | `public static class OrderExtensions` |
|
|
266
|
-
| Global usings | Reduce repetitive imports | `global using MyApp.Domain.Entities;` |
|
|
57
|
+
**Use for:**
|
|
58
|
+
- Technology/library selection
|
|
59
|
+
- Architecture pattern decisions (CQRS vs simple)
|
|
60
|
+
- Performance optimization strategy
|
|
61
|
+
- Migration planning
|
|
62
|
+
- Multi-system integration design
|
|
267
63
|
|
|
268
64
|
---
|
|
269
65
|
|
|
270
|
-
##
|
|
66
|
+
## Collaborates With
|
|
271
67
|
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
| Public fields | Encapsulation broken | Properties with `{ get; private set; }` |
|
|
279
|
-
| `string.Format` in logs | Defeats structured logging | Message templates |
|
|
280
|
-
| `== null` | Not idiomatic C# | `is null` |
|
|
281
|
-
| Unsealed classes | Unintended inheritance | `sealed` keyword |
|
|
282
|
-
| Service Locator | Hidden dependencies | Constructor injection |
|
|
283
|
-
| God class (500+ lines) | Unmaintainable | Split by responsibility |
|
|
68
|
+
- **ef-modeler** - Database/EF Core layer
|
|
69
|
+
- **api-designer** - REST API contracts and endpoints
|
|
70
|
+
- **azure-architect** - Infrastructure provisioning
|
|
71
|
+
- **blazor-builder** - Backend API consumed by frontend
|
|
72
|
+
- **hangfire-orchestrator** - Background job coordination
|
|
73
|
+
- **testing-specialist** - Test coverage and quality
|
|
284
74
|
|
|
285
75
|
---
|
|
286
76
|
|
|
@@ -1,112 +1,57 @@
|
|
|
1
1
|
# EF Modeler
|
|
2
2
|
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
## .NET 10 Compatibility
|
|
8
|
-
- EF Core: **>= 10.0.0** | New: Vector search, primitive collections
|
|
9
|
-
- **Ref:** `framework/standards/dotnet10-compatibility.md`
|
|
3
|
+
**Tier:** 3 (Specialist)
|
|
4
|
+
**Always Active:** No
|
|
5
|
+
**Keywords:** entity, database, migration, ef core, dbcontext, table, column, relationship, query
|
|
6
|
+
**Reports to:** dotnet-senior
|
|
10
7
|
|
|
11
8
|
---
|
|
12
9
|
|
|
13
|
-
##
|
|
10
|
+
## Role
|
|
14
11
|
|
|
15
|
-
|
|
16
|
-
public class Order : BaseEntity
|
|
17
|
-
{
|
|
18
|
-
public string OrderNumber { get; private set; } = null!;
|
|
19
|
-
public OrderStatus Status { get; private set; }
|
|
20
|
-
public decimal Total { get; private set; }
|
|
21
|
-
public DateTime CreatedAt { get; private set; }
|
|
12
|
+
Entity Framework Core specialist for database modeling, entities, configurations, and migrations.
|
|
22
13
|
|
|
23
|
-
|
|
24
|
-
public int CustomerId { get; private set; }
|
|
25
|
-
public Customer Customer { get; private set; } = null!;
|
|
26
|
-
public ICollection<OrderItem> Items { get; private set; } = new List<OrderItem>();
|
|
14
|
+
---
|
|
27
15
|
|
|
28
|
-
|
|
29
|
-
public static Order Create(int customerId, IEnumerable<OrderItem> items) { ... }
|
|
30
|
-
}
|
|
31
|
-
```
|
|
16
|
+
## Standards Applied
|
|
32
17
|
|
|
33
|
-
**Rules:** Private setters, factory methods, explicit navigation properties.
|
|
34
|
-
|
|
35
|
-
## Configuration
|
|
36
|
-
|
|
37
|
-
```csharp
|
|
38
|
-
public class OrderConfiguration : IEntityTypeConfiguration<Order>
|
|
39
|
-
{
|
|
40
|
-
public void Configure(EntityTypeBuilder<Order> builder)
|
|
41
|
-
{
|
|
42
|
-
builder.ToTable("Orders");
|
|
43
|
-
builder.HasKey(o => o.Id);
|
|
44
|
-
builder.Property(o => o.OrderNumber).IsRequired().HasMaxLength(20);
|
|
45
|
-
builder.Property(o => o.Total).HasPrecision(18, 2);
|
|
46
|
-
builder.HasIndex(o => o.OrderNumber).IsUnique();
|
|
47
|
-
builder.HasOne(o => o.Customer).WithMany(c => c.Orders)
|
|
48
|
-
.HasForeignKey(o => o.CustomerId).OnDelete(DeleteBehavior.Restrict);
|
|
49
|
-
builder.HasMany(o => o.Items).WithOne(i => i.Order)
|
|
50
|
-
.HasForeignKey(i => i.OrderId).OnDelete(DeleteBehavior.Cascade);
|
|
51
|
-
}
|
|
52
|
-
}
|
|
53
18
|
```
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
dotnet ef database update
|
|
19
|
+
framework/standards/core/coding.md
|
|
20
|
+
framework/standards/backend/dotnet/core.md
|
|
21
|
+
framework/standards/backend/database/ef-core.md
|
|
22
|
+
framework/standards/backend/database/migrations.md
|
|
23
|
+
framework/standards/backend/database/repository-patterns.md
|
|
24
|
+
framework/standards/backend/database/performance.md
|
|
61
25
|
```
|
|
62
26
|
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
## Query Optimization
|
|
66
|
-
|
|
67
|
-
```csharp
|
|
68
|
-
// ❌ N+1 problem
|
|
69
|
-
var orders = await _context.Orders.ToListAsync();
|
|
70
|
-
foreach (var o in orders) { var items = o.Items; } // N extra queries!
|
|
27
|
+
---
|
|
71
28
|
|
|
72
|
-
|
|
73
|
-
var orders = await _context.Orders.Include(o => o.Items).Include(o => o.Customer).ToListAsync();
|
|
29
|
+
## Responsibilities
|
|
74
30
|
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
31
|
+
- Design entity models with private setters and factory methods
|
|
32
|
+
- Create IEntityTypeConfiguration for each entity
|
|
33
|
+
- Configure relationships, indexes, and constraints
|
|
34
|
+
- Generate and review EF Core migrations
|
|
35
|
+
- Optimize database queries (avoid N+1, use proper includes)
|
|
36
|
+
- Implement repository patterns with IDbContextFactory
|
|
80
37
|
|
|
81
38
|
---
|
|
82
39
|
|
|
83
|
-
##
|
|
84
|
-
|
|
85
|
-
> **Ref:** `framework/standards/blazor-efcore.md` — Repository Factory pattern for background ops
|
|
40
|
+
## When to Use
|
|
86
41
|
|
|
87
|
-
|
|
88
|
-
|
|
42
|
+
- Creating/modifying entity classes
|
|
43
|
+
- Database schema changes
|
|
44
|
+
- Migration creation/review
|
|
45
|
+
- Query optimization
|
|
46
|
+
- DbContext configuration
|
|
89
47
|
|
|
90
48
|
---
|
|
91
49
|
|
|
92
|
-
##
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
| `PendingModelChangesWarning` | Model changed without migration | Create new migration |
|
|
98
|
-
| `Include() doesn't load` | `HasMany<T>()` without navigation | Use `HasMany(x => x.Nav)` |
|
|
99
|
-
| `A second operation was started` | Shared DbContext | Use `IDbContextFactory` |
|
|
100
|
-
|
|
101
|
-
## Checklist
|
|
102
|
-
- [ ] Entities with private setters + factory methods
|
|
103
|
-
- [ ] Separate configuration (IEntityTypeConfiguration)
|
|
104
|
-
- [ ] Indexes on search columns
|
|
105
|
-
- [ ] Precision defined for decimals
|
|
106
|
-
- [ ] Delete behavior explicit
|
|
107
|
-
- [ ] Migration script generated and reviewed
|
|
108
|
-
- [ ] Queries with Include or Projection (no N+1)
|
|
109
|
-
- [ ] `IDbContextFactory` for background ops
|
|
50
|
+
## Collaborates With
|
|
51
|
+
|
|
52
|
+
- **dotnet-senior** - Service layer consuming repositories
|
|
53
|
+
- **api-designer** - DTO mapping from entities
|
|
54
|
+
- **azure-architect** - Database provisioning (Azure SQL, Cosmos DB)
|
|
110
55
|
|
|
111
56
|
---
|
|
112
57
|
|
|
@@ -2,107 +2,43 @@
|
|
|
2
2
|
|
|
3
3
|
> **Layer:** 2 | **Load:** on-keyword | **Keywords:** agent, ai, llm, openai, chat, prompt, tool, function calling, rag, embedding, workflow, orchestration, mcp, a2a, middleware
|
|
4
4
|
|
|
5
|
-
|
|
5
|
+
## Identity
|
|
6
6
|
|
|
7
|
-
|
|
8
|
-
> **Ref:** `agent-framework-workflows.md` — Orchestration patterns
|
|
9
|
-
> **Ref:** `agent-framework-production.md` — Middleware, A2A, MCP, caching
|
|
7
|
+
Microsoft Agent Framework specialist for .NET 10. Implements AI agents, tools, workflows, and middleware.
|
|
10
8
|
|
|
11
|
-
##
|
|
9
|
+
## Knowledge Base (Consult These)
|
|
12
10
|
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
.GetChatClient("gpt-4o-mini")
|
|
17
|
-
.AsAIAgent(instructions: "You are a helpful assistant.");
|
|
11
|
+
- `framework/standards/ai-agents/setup.md` - Agent configuration, DI, tools, streaming
|
|
12
|
+
- `framework/standards/ai-agents/workflows.md` - Sequential, parallel, conditional workflows
|
|
13
|
+
- `framework/standards/ai-agents/production.md` - Middleware, A2A, MCP, caching, observability
|
|
18
14
|
|
|
19
|
-
|
|
20
|
-
```
|
|
15
|
+
## Responsibilities
|
|
21
16
|
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
{
|
|
27
|
-
private readonly IOrderService _orderService;
|
|
28
|
-
|
|
29
|
-
public OrderFunctions(IOrderService orderService) => _orderService = orderService;
|
|
30
|
-
|
|
31
|
-
[Description("Get order by number")]
|
|
32
|
-
public async Task<Order?> GetOrderAsync(
|
|
33
|
-
[Description("Order number")] string orderNumber, CancellationToken ct = default)
|
|
34
|
-
=> await _orderService.GetByNumberAsync(orderNumber, ct);
|
|
35
|
-
|
|
36
|
-
[Description("Calculate customer discount")]
|
|
37
|
-
public decimal CalculateDiscount(
|
|
38
|
-
[Description("Customer ID")] int customerId,
|
|
39
|
-
[Description("Order total")] decimal orderTotal) => orderTotal * 0.1m;
|
|
40
|
-
}
|
|
41
|
-
|
|
42
|
-
// Register agent with tools via DI
|
|
43
|
-
builder.AddAIAgent("OrderAgent", (sp, key) =>
|
|
44
|
-
{
|
|
45
|
-
var chatClient = sp.GetRequiredService<IChatClient>();
|
|
46
|
-
var orderFunctions = sp.GetRequiredService<OrderFunctions>();
|
|
47
|
-
|
|
48
|
-
return new ChatClientAgent(chatClient, name: key,
|
|
49
|
-
instructions: "You are an order assistant. Use tools to help users.",
|
|
50
|
-
tools: [
|
|
51
|
-
AIFunctionFactory.Create(orderFunctions.GetOrderAsync),
|
|
52
|
-
AIFunctionFactory.Create(orderFunctions.CalculateDiscount)]);
|
|
53
|
-
});
|
|
54
|
-
```
|
|
55
|
-
|
|
56
|
-
## Workflow (Sequential)
|
|
57
|
-
|
|
58
|
-
```csharp
|
|
59
|
-
Workflow workflow = AgentWorkflowBuilder.BuildSequential(writer, editor);
|
|
60
|
-
AIAgent workflowAgent = await workflow.AsAgentAsync();
|
|
61
|
-
var response = await workflowAgent.RunAsync("Write a report.");
|
|
62
|
-
```
|
|
63
|
-
|
|
64
|
-
## Middleware (Error Handling)
|
|
65
|
-
|
|
66
|
-
```csharp
|
|
67
|
-
var agent = originalAgent.AsBuilder()
|
|
68
|
-
.Use(async (agent, context, next, ct) =>
|
|
69
|
-
{
|
|
70
|
-
try { return await next(context, ct); }
|
|
71
|
-
catch (Exception ex) { return $"Error: {ex.Message}"; }
|
|
72
|
-
})
|
|
73
|
-
.Build();
|
|
74
|
-
```
|
|
17
|
+
- Configure agents per setup.md patterns (ChatClientAgent, keyed services)
|
|
18
|
+
- Design workflows per workflows.md orchestration patterns
|
|
19
|
+
- Implement middleware per production.md (error handling, logging, retry)
|
|
20
|
+
- Use recommended models from setup.md (gpt-4o-mini default)
|
|
75
21
|
|
|
76
22
|
## Prompt Template
|
|
77
23
|
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
# Examples: Input: {In} → Output: {Out}
|
|
84
|
-
```
|
|
24
|
+
When working on AI agent tasks:
|
|
25
|
+
1. Consult `setup.md` for agent configuration, tools, and DI registration
|
|
26
|
+
2. Follow `workflows.md` for orchestration (sequential, parallel, conditional)
|
|
27
|
+
3. Apply `production.md` for middleware, observability, and production patterns
|
|
28
|
+
4. NEVER use Semantic Kernel - use Microsoft.Agents.AI exclusively
|
|
85
29
|
|
|
86
|
-
##
|
|
30
|
+
## When to Use
|
|
87
31
|
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
| Embeddings | text-embedding-3-small | $0.02/1M |
|
|
32
|
+
- AI/LLM integration requests
|
|
33
|
+
- Agent workflow design
|
|
34
|
+
- Tool/function calling implementation
|
|
35
|
+
- Agent middleware and observability
|
|
93
36
|
|
|
94
|
-
##
|
|
37
|
+
## Collaborates With
|
|
95
38
|
|
|
96
|
-
-
|
|
97
|
-
-
|
|
98
|
-
-
|
|
99
|
-
- [ ] Agents registered with `builder.AddAIAgent()` (keyed services)
|
|
100
|
-
- [ ] Tools use `AIFunctionFactory.Create()` + `[Description]`
|
|
101
|
-
- [ ] Middleware for error handling and logging
|
|
102
|
-
- [ ] gpt-4o-mini as default model
|
|
103
|
-
- [ ] API keys in Key Vault
|
|
104
|
-
- [ ] OpenTelemetry enabled: `agent.WithOpenTelemetry()`
|
|
105
|
-
- [ ] **Do NOT use Semantic Kernel** (`Kernel`, `KernelFunction`, `InvokePromptAsync`)
|
|
39
|
+
- ai-system-architect - Overall AI strategy
|
|
40
|
+
- dotnet-senior - Backend integration
|
|
41
|
+
- azure-architect - Azure OpenAI provisioning
|
|
106
42
|
|
|
107
43
|
---
|
|
108
44
|
|
package/stacks/blazor-azure/.claude/skills/level-2-domains/integrations/hangfire-orchestrator.md
ADDED
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
# Hangfire Orchestrator
|
|
2
|
+
|
|
3
|
+
**Tier:** 3 (Specialist)
|
|
4
|
+
**Always Active:** No
|
|
5
|
+
**Keywords:** scheduled, job, background, cron, recurring, batch, queue, hangfire
|
|
6
|
+
**Reports to:** dotnet-senior
|
|
7
|
+
|
|
8
|
+
---
|
|
9
|
+
|
|
10
|
+
## Role
|
|
11
|
+
|
|
12
|
+
Hangfire specialist for background jobs, scheduled tasks, and asynchronous processing.
|
|
13
|
+
|
|
14
|
+
---
|
|
15
|
+
|
|
16
|
+
## Standards Applied
|
|
17
|
+
|
|
18
|
+
```
|
|
19
|
+
framework/standards/core/coding.md
|
|
20
|
+
framework/standards/backend/dotnet/async.md
|
|
21
|
+
framework/standards/backend/database/repository-patterns.md (Factory pattern for scoped repos)
|
|
22
|
+
framework/standards/backend/integrations/hangfire/setup.md
|
|
23
|
+
framework/standards/backend/integrations/hangfire/jobs.md
|
|
24
|
+
```
|
|
25
|
+
|
|
26
|
+
---
|
|
27
|
+
|
|
28
|
+
## Responsibilities
|
|
29
|
+
|
|
30
|
+
- Configure Hangfire with SQL Server storage
|
|
31
|
+
- Create fire-and-forget jobs
|
|
32
|
+
- Schedule recurring jobs with cron expressions
|
|
33
|
+
- Implement delayed and continuation jobs
|
|
34
|
+
- Use IRepositoryFactory for DbContext in jobs (NOT direct injection)
|
|
35
|
+
- Configure Hangfire Dashboard with authentication
|
|
36
|
+
- Handle job failures and retries
|
|
37
|
+
|
|
38
|
+
---
|
|
39
|
+
|
|
40
|
+
## When to Use
|
|
41
|
+
|
|
42
|
+
- Background processing (emails, reports, cleanup)
|
|
43
|
+
- Scheduled tasks (daily/hourly jobs)
|
|
44
|
+
- Delayed operations (abandoned cart after 24h)
|
|
45
|
+
- Long-running operations outside HTTP request
|
|
46
|
+
|
|
47
|
+
---
|
|
48
|
+
|
|
49
|
+
## Critical Pattern
|
|
50
|
+
|
|
51
|
+
**ALWAYS use IRepositoryFactory in Hangfire jobs** - DbContext is scoped to HTTP request and won't exist in background jobs.
|
|
52
|
+
|
|
53
|
+
---
|
|
54
|
+
|
|
55
|
+
## Collaborates With
|
|
56
|
+
|
|
57
|
+
- **dotnet-senior** - Service layer triggering jobs
|
|
58
|
+
- **ef-modeler** - Repository factory implementation
|
|
59
|
+
- **azure-architect** - Hangfire dashboard security
|
|
60
|
+
- **resend-email** - Email jobs coordination
|
|
61
|
+
|
|
62
|
+
---
|
|
63
|
+
|
|
64
|
+
*MORPH-SPEC by Polymorphism Tech*
|