@polymorphism-tech/morph-spec 3.2.0 → 4.3.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.
Files changed (386) hide show
  1. package/README.md +1 -14
  2. package/bin/detect-agents.js +1 -1
  3. package/bin/morph-spec.js +403 -40
  4. package/bin/validate.js +5 -5
  5. package/docs/getting-started.md +0 -5
  6. package/docs/next-generation/AGENTS.md +521 -0
  7. package/docs/next-generation/ANALYSIS.md +555 -0
  8. package/docs/next-generation/ARCHITECTURE.md +436 -0
  9. package/docs/next-generation/CONTEXT-OPTIMIZATION.md +267 -0
  10. package/docs/next-generation/EXECUTION-FLOW.md +274 -0
  11. package/docs/next-generation/FEATURES.md +688 -0
  12. package/docs/next-generation/META-PROMPTS.md +235 -0
  13. package/docs/next-generation/MIGRATION-GUIDE.md +253 -0
  14. package/docs/next-generation/README.md +231 -0
  15. package/docs/next-generation/ROADMAP.md +801 -0
  16. package/docs/next-generation/THREAD-MANAGEMENT.md +240 -0
  17. package/docs/validation-checklist.md +0 -1
  18. package/package.json +5 -5
  19. package/src/commands/agents/agents-fuse.js +96 -0
  20. package/src/commands/agents/index.js +4 -0
  21. package/src/commands/agents/micro-agent.js +112 -0
  22. package/src/commands/{spawn-team.js → agents/spawn-team.js} +237 -172
  23. package/src/commands/agents/squad-template.js +146 -0
  24. package/src/commands/analytics/analytics.js +176 -0
  25. package/src/commands/context/context-prime.js +63 -0
  26. package/src/commands/context/core-four.js +54 -0
  27. package/src/commands/{create-story.js → feature/create-story.js} +357 -354
  28. package/src/commands/feature/index.js +6 -0
  29. package/src/commands/{shard-spec.js → feature/shard-spec.js} +2 -2
  30. package/src/commands/{sprint-status.js → feature/sprint-status.js} +1 -1
  31. package/src/commands/{generate-context.js → generation/generate-context.js} +40 -40
  32. package/src/commands/{generate.js → generation/generate.js} +4 -4
  33. package/src/commands/generation/index.js +5 -0
  34. package/src/commands/index.js +16 -0
  35. package/src/commands/{capture-pattern.js → learning/capture-pattern.js} +121 -121
  36. package/src/commands/learning/index.js +5 -0
  37. package/src/commands/mcp/mcp.js +102 -0
  38. package/src/commands/{detect-agents.js → project/detect-agents.js} +178 -178
  39. package/src/commands/project/detect-workflow.js +174 -0
  40. package/src/commands/{detect.js → project/detect.js} +104 -104
  41. package/src/commands/{doctor.js → project/doctor.js} +221 -4
  42. package/src/commands/project/index.js +10 -0
  43. package/src/commands/{init.js → project/init.js} +305 -295
  44. package/src/commands/{sync.js → project/sync.js} +167 -167
  45. package/src/commands/{update.js → project/update.js} +240 -240
  46. package/src/commands/{advance-phase.js → state/advance-phase.js} +101 -25
  47. package/src/commands/{approve.js → state/approve.js} +221 -221
  48. package/src/commands/state/index.js +8 -0
  49. package/src/commands/{rollback-phase.js → state/rollback-phase.js} +185 -185
  50. package/src/commands/{state.js → state/state.js} +334 -334
  51. package/src/commands/{validate-phase.js → state/validate-phase.js} +221 -221
  52. package/src/commands/tasks/index.js +4 -0
  53. package/src/commands/{task.js → tasks/task.js} +78 -78
  54. package/src/commands/templates/index.js +8 -0
  55. package/src/commands/templates/template-customize.js +101 -0
  56. package/src/commands/templates/template-list.js +128 -0
  57. package/src/commands/templates/template-render.js +174 -0
  58. package/src/commands/templates/template-show.js +131 -0
  59. package/src/commands/templates/template-validate.js +91 -0
  60. package/src/commands/threads/thread-template.js +103 -0
  61. package/src/commands/threads/threads.js +261 -0
  62. package/src/commands/trust/trust.js +205 -0
  63. package/src/commands/utils/index.js +7 -0
  64. package/src/commands/{session-summary.js → utils/session-summary.js} +291 -291
  65. package/src/commands/{troubleshoot.js → utils/troubleshoot.js} +222 -222
  66. package/src/commands/{analyze-blazor-concurrency.js → validation/analyze-blazor-concurrency.js} +193 -193
  67. package/src/commands/validation/index.js +8 -0
  68. package/src/commands/{lint-fluent.js → validation/lint-fluent.js} +352 -352
  69. package/src/commands/{validate-blazor-state.js → validation/validate-blazor-state.js} +210 -210
  70. package/src/commands/{validate-blazor.js → validation/validate-blazor.js} +156 -156
  71. package/src/commands/{validate-css.js → validation/validate-css.js} +84 -84
  72. package/src/core/index.js +10 -0
  73. package/src/{orchestrator.js → core/orchestrator.js} +8 -8
  74. package/src/core/registry/command-registry.js +302 -0
  75. package/src/core/registry/index.js +8 -0
  76. package/src/core/registry/validator-registry.js +204 -0
  77. package/src/core/state/index.js +8 -0
  78. package/src/{lib → core/state}/phase-state-machine.js +214 -214
  79. package/src/{lib → core/state}/state-manager.js +588 -534
  80. package/src/core/templates/index.js +9 -0
  81. package/src/core/templates/template-registry.js +335 -0
  82. package/src/core/templates/template-renderer.js +477 -0
  83. package/src/core/templates/template-validator.js +296 -0
  84. package/src/core/workflows/index.js +7 -0
  85. package/src/core/workflows/workflow-detector.js +452 -0
  86. package/src/lib/agents/micro-agent-factory.js +161 -0
  87. package/src/lib/{complexity-analyzer.js → analysis/complexity-analyzer.js} +441 -441
  88. package/src/lib/analysis/index.js +7 -0
  89. package/src/lib/analytics/analytics-engine.js +345 -0
  90. package/src/lib/{checkpoint-hooks.js → checkpoints/checkpoint-hooks.js} +35 -0
  91. package/src/lib/checkpoints/index.js +7 -0
  92. package/src/lib/context/context-bundler.js +240 -0
  93. package/src/lib/context/context-optimizer.js +212 -0
  94. package/src/lib/context/context-tracker.js +273 -0
  95. package/src/lib/context/core-four-tracker.js +201 -0
  96. package/src/lib/context/mcp-optimizer.js +200 -0
  97. package/src/lib/detectors/config-detector.js +223 -223
  98. package/src/lib/detectors/conversation-analyzer.js +163 -163
  99. package/src/lib/{design-system-detector.js → detectors/design-system-detector.js} +187 -187
  100. package/src/lib/detectors/index.js +87 -84
  101. package/src/lib/detectors/standards-generator.js +275 -275
  102. package/src/lib/detectors/structure-detector.js +245 -245
  103. package/src/lib/execution/fusion-executor.js +304 -0
  104. package/src/lib/execution/parallel-executor.js +270 -0
  105. package/src/lib/{context-generator.js → generators/context-generator.js} +526 -516
  106. package/src/lib/generators/index.js +10 -0
  107. package/src/lib/{metadata-extractor.js → generators/metadata-extractor.js} +387 -380
  108. package/src/lib/{recap-generator.js → generators/recap-generator.js} +205 -205
  109. package/src/lib/hooks/hook-executor.js +169 -0
  110. package/src/lib/hooks/stop-hook-executor.js +286 -0
  111. package/src/lib/hops/hop-composer.js +221 -0
  112. package/src/lib/learning/index.js +7 -0
  113. package/src/lib/orchestration/index.js +7 -0
  114. package/src/lib/{team-orchestrator.js → orchestration/team-orchestrator.js} +323 -323
  115. package/src/lib/stacks/index.js +7 -0
  116. package/src/lib/{stack-resolver.js → stacks/stack-resolver.js} +180 -148
  117. package/src/lib/standards/index.js +7 -0
  118. package/src/lib/{standards-context-injector.js → standards/standards-context-injector.js} +298 -288
  119. package/src/lib/threads/thread-coordinator.js +238 -0
  120. package/src/lib/threads/thread-manager.js +317 -0
  121. package/src/lib/tracking/artifact-trail.js +202 -0
  122. package/src/lib/troubleshooting/index.js +8 -0
  123. package/src/lib/{troubleshoot-grep.js → troubleshooting/troubleshoot-grep.js} +204 -204
  124. package/src/lib/{troubleshoot-index.js → troubleshooting/troubleshoot-index.js} +144 -144
  125. package/src/lib/trust/trust-manager.js +269 -0
  126. package/src/lib/validators/{architecture-validator.js → architecture/architecture-validator.js} +8 -8
  127. package/src/lib/validators/architecture/index.js +7 -0
  128. package/src/lib/{blazor-concurrency-analyzer.js → validators/blazor/blazor-concurrency-analyzer.js} +277 -288
  129. package/src/lib/{blazor-state-validator.js → validators/blazor/blazor-state-validator.js} +279 -291
  130. package/src/lib/{blazor-validator.js → validators/blazor/blazor-validator.js} +369 -374
  131. package/src/lib/validators/blazor/index.js +9 -0
  132. package/src/lib/validators/{content-validator.js → content/content-validator.js} +351 -351
  133. package/src/lib/validators/content/index.js +7 -0
  134. package/src/lib/validators/{contract-compliance-validator.js → contracts/contract-compliance-validator.js} +273 -273
  135. package/src/lib/validators/contracts/index.js +7 -0
  136. package/src/lib/{css-validator.js → validators/css/css-validator.js} +352 -352
  137. package/src/lib/validators/css/index.js +7 -0
  138. package/src/lib/validators/{design-system-validator.js → design-system/design-system-validator.js} +231 -231
  139. package/src/lib/validators/design-system/index.js +7 -0
  140. package/src/lib/validators/packages/index.js +7 -0
  141. package/src/lib/validators/shared/index.js +12 -0
  142. package/src/lib/validators/shared/issue-counter.js +18 -0
  143. package/src/lib/validators/shared/result-formatter.js +124 -0
  144. package/src/lib/{spec-validator.js → validators/spec-validator.js} +258 -258
  145. package/src/lib/validators/ui/index.js +7 -0
  146. package/src/lib/{validation-runner.js → validators/validation-runner.js} +286 -284
  147. package/src/ui/wizard-questions.js +0 -2
  148. package/src/utils/color-utils.js +70 -0
  149. package/src/utils/file-copier.js +188 -189
  150. package/src/utils/process-handler.js +97 -0
  151. package/stacks/blazor-azure/.morph/config/agents.json +948 -764
  152. package/stacks/blazor-azure/.morph/hooks/{pre-commit-tests.sh → pre-commit/tests-csharp.sh} +3 -2
  153. package/stacks/blazor-azure/.morph/templates/infrastructure/github/workflows/cd-prod.yml.hbs +41 -0
  154. package/stacks/blazor-azure/.morph/templates/infrastructure/github/workflows/cd-staging.yml.hbs +24 -0
  155. package/stacks/blazor-azure/.morph/templates/infrastructure/github/workflows/ci-build.yml.hbs +23 -0
  156. package/stacks/nextjs-supabase/.morph/config/agents.json +345 -345
  157. package/stacks/nextjs-supabase/.morph/hooks/pre-commit/tests-typescript.sh +61 -0
  158. package/stacks/nextjs-supabase/.morph/templates/infrastructure/github/workflows/cd-prod.yml.hbs +22 -0
  159. package/stacks/nextjs-supabase/.morph/templates/infrastructure/github/workflows/cd-staging.yml.hbs +22 -0
  160. package/stacks/nextjs-supabase/.morph/templates/infrastructure/github/workflows/ci-build.yml.hbs +35 -0
  161. package/stacks/nextjs-supabase/README.md +6 -15
  162. package/CLAUDE.md +0 -648
  163. package/bin/render-template.js +0 -349
  164. package/bin/semantic-detect-agents.js +0 -247
  165. package/bin/validate-agents-skills.js +0 -257
  166. package/bin/validate-agents.js +0 -70
  167. package/bin/validate-phase.js +0 -263
  168. package/docs/examples.md +0 -328
  169. package/docs/llm-interaction-config.md +0 -735
  170. package/scripts/reorganize-skills.cjs +0 -175
  171. package/scripts/validate-agents-structure.cjs +0 -52
  172. package/scripts/validate-skills.cjs +0 -180
  173. package/src/commands/deploy.js +0 -780
  174. package/src/commands/migrate-state.js +0 -158
  175. package/src/commands/upgrade.js +0 -346
  176. package/src/lib/continuous-validator.js +0 -421
  177. package/src/lib/decision-constraint-loader.js +0 -109
  178. package/src/lib/design-system-scaffolder.js +0 -299
  179. package/src/lib/hook-executor.js +0 -257
  180. package/src/lib/mockup-generator.js +0 -366
  181. package/src/lib/ui-detector.js +0 -350
  182. package/src/llm/schema-validator.js +0 -121
  183. package/src/sanitizer/.gitkeep +0 -0
  184. package/src/scanner/.gitkeep +0 -0
  185. package/src/types/index.js +0 -477
  186. package/src/ui/.gitkeep +0 -0
  187. package/src/writer/.gitkeep +0 -0
  188. package/stacks/blazor-azure/.azure/README.md +0 -293
  189. package/stacks/blazor-azure/.azure/docs/azure-devops-setup.md +0 -454
  190. package/stacks/blazor-azure/.azure/docs/branch-strategy.md +0 -398
  191. package/stacks/blazor-azure/.azure/docs/local-development.md +0 -515
  192. package/stacks/blazor-azure/.azure/pipelines/pipeline-variables.yml +0 -34
  193. package/stacks/blazor-azure/.azure/pipelines/prod-pipeline.yml +0 -319
  194. package/stacks/blazor-azure/.azure/pipelines/staging-pipeline.yml +0 -234
  195. package/stacks/blazor-azure/.azure/pipelines/templates/build-dotnet.yml +0 -75
  196. package/stacks/blazor-azure/.azure/pipelines/templates/deploy-app-service.yml +0 -94
  197. package/stacks/blazor-azure/.azure/pipelines/templates/deploy-container-app.yml +0 -120
  198. package/stacks/blazor-azure/.azure/pipelines/templates/infra-deploy.yml +0 -90
  199. package/stacks/blazor-azure/.claude/commands/morph-apply.md +0 -221
  200. package/stacks/blazor-azure/.claude/commands/morph-archive.md +0 -79
  201. package/stacks/blazor-azure/.claude/commands/morph-deploy.md +0 -529
  202. package/stacks/blazor-azure/.claude/commands/morph-infra.md +0 -209
  203. package/stacks/blazor-azure/.claude/commands/morph-preflight.md +0 -227
  204. package/stacks/blazor-azure/.claude/commands/morph-proposal.md +0 -122
  205. package/stacks/blazor-azure/.claude/commands/morph-status.md +0 -86
  206. package/stacks/blazor-azure/.claude/commands/morph-troubleshoot.md +0 -122
  207. package/stacks/blazor-azure/.claude/settings.local.json +0 -15
  208. package/stacks/blazor-azure/.claude/skills/level-0-meta/README.md +0 -7
  209. package/stacks/blazor-azure/.claude/skills/level-0-meta/code-review.md +0 -226
  210. package/stacks/blazor-azure/.claude/skills/level-0-meta/morph-checklist.md +0 -117
  211. package/stacks/blazor-azure/.claude/skills/level-0-meta/simulation-checklist.md +0 -77
  212. package/stacks/blazor-azure/.claude/skills/level-1-workflows/README.md +0 -7
  213. package/stacks/blazor-azure/.claude/skills/level-1-workflows/morph-replicate.md +0 -213
  214. package/stacks/blazor-azure/.claude/skills/level-1-workflows/phase-clarify.md +0 -131
  215. package/stacks/blazor-azure/.claude/skills/level-1-workflows/phase-design.md +0 -213
  216. package/stacks/blazor-azure/.claude/skills/level-1-workflows/phase-setup.md +0 -106
  217. package/stacks/blazor-azure/.claude/skills/level-1-workflows/phase-tasks.md +0 -164
  218. package/stacks/blazor-azure/.claude/skills/level-1-workflows/phase-uiux.md +0 -169
  219. package/stacks/blazor-azure/.claude/skills/level-2-domains/README.md +0 -14
  220. package/stacks/blazor-azure/.claude/skills/level-2-domains/ai-agents/ai-system-architect.md +0 -192
  221. package/stacks/blazor-azure/.claude/skills/level-2-domains/architecture/po-pm-advisor.md +0 -197
  222. package/stacks/blazor-azure/.claude/skills/level-2-domains/architecture/prompt-engineer.md +0 -189
  223. package/stacks/blazor-azure/.claude/skills/level-2-domains/architecture/seo-growth-hacker.md +0 -320
  224. package/stacks/blazor-azure/.claude/skills/level-2-domains/architecture/standards-architect.md +0 -156
  225. package/stacks/blazor-azure/.claude/skills/level-2-domains/backend/dotnet-senior.md +0 -287
  226. package/stacks/blazor-azure/.claude/skills/level-2-domains/backend/ef-modeler.md +0 -113
  227. package/stacks/blazor-azure/.claude/skills/level-2-domains/backend/hangfire-orchestrator.md +0 -126
  228. package/stacks/blazor-azure/.claude/skills/level-2-domains/backend/ms-agent-expert.md +0 -109
  229. package/stacks/blazor-azure/.claude/skills/level-2-domains/frontend/blazor-builder.md +0 -210
  230. package/stacks/blazor-azure/.claude/skills/level-2-domains/frontend/nextjs-expert.md +0 -154
  231. package/stacks/blazor-azure/.claude/skills/level-2-domains/frontend/ui-ux-designer.md +0 -191
  232. package/stacks/blazor-azure/.claude/skills/level-2-domains/infrastructure/azure-architect.md +0 -142
  233. package/stacks/blazor-azure/.claude/skills/level-2-domains/infrastructure/azure-deploy-specialist.md +0 -699
  234. package/stacks/blazor-azure/.claude/skills/level-2-domains/infrastructure/bicep-architect.md +0 -126
  235. package/stacks/blazor-azure/.claude/skills/level-2-domains/infrastructure/container-specialist.md +0 -131
  236. package/stacks/blazor-azure/.claude/skills/level-2-domains/infrastructure/devops-engineer.md +0 -119
  237. package/stacks/blazor-azure/.claude/skills/level-2-domains/integrations/asaas-financial.md +0 -130
  238. package/stacks/blazor-azure/.claude/skills/level-2-domains/integrations/azure-identity.md +0 -142
  239. package/stacks/blazor-azure/.claude/skills/level-2-domains/integrations/clerk-auth.md +0 -108
  240. package/stacks/blazor-azure/.claude/skills/level-2-domains/integrations/resend-email.md +0 -119
  241. package/stacks/blazor-azure/.claude/skills/level-2-domains/quality/code-analyzer.md +0 -235
  242. package/stacks/blazor-azure/.claude/skills/level-2-domains/quality/testing-specialist.md +0 -126
  243. package/stacks/blazor-azure/.claude/skills/level-3-technologies/README.md +0 -7
  244. package/stacks/blazor-azure/.claude/skills/level-4-patterns/README.md +0 -7
  245. package/stacks/blazor-azure/.morph/archive/.gitkeep +0 -25
  246. package/stacks/blazor-azure/.morph/docs/STORY-DRIVEN-DEVELOPMENT.md +0 -392
  247. package/stacks/blazor-azure/.morph/docs/workflows/design-impl.md +0 -37
  248. package/stacks/blazor-azure/.morph/docs/workflows/enforcement-pipeline.md +0 -668
  249. package/stacks/blazor-azure/.morph/docs/workflows/fast-track.md +0 -29
  250. package/stacks/blazor-azure/.morph/docs/workflows/full-morph.md +0 -76
  251. package/stacks/blazor-azure/.morph/docs/workflows/standard.md +0 -44
  252. package/stacks/blazor-azure/.morph/docs/workflows/ui-refresh.md +0 -39
  253. package/stacks/blazor-azure/.morph/examples/api-nextjs/README.md +0 -241
  254. package/stacks/blazor-azure/.morph/examples/api-nextjs/contracts.ts +0 -307
  255. package/stacks/blazor-azure/.morph/examples/api-nextjs/spec.md +0 -399
  256. package/stacks/blazor-azure/.morph/examples/api-nextjs/tasks.md +0 -168
  257. package/stacks/blazor-azure/.morph/examples/micro-saas/README.md +0 -125
  258. package/stacks/blazor-azure/.morph/examples/micro-saas/contracts.cs +0 -358
  259. package/stacks/blazor-azure/.morph/examples/micro-saas/decisions.md +0 -246
  260. package/stacks/blazor-azure/.morph/examples/micro-saas/spec.md +0 -236
  261. package/stacks/blazor-azure/.morph/examples/micro-saas/tasks.md +0 -150
  262. package/stacks/blazor-azure/.morph/examples/multi-agent/README.md +0 -309
  263. package/stacks/blazor-azure/.morph/examples/multi-agent/contracts.cs +0 -433
  264. package/stacks/blazor-azure/.morph/examples/multi-agent/spec.md +0 -479
  265. package/stacks/blazor-azure/.morph/examples/multi-agent/tasks.md +0 -185
  266. package/stacks/blazor-azure/.morph/examples/scheduled-reports/decisions.md +0 -158
  267. package/stacks/blazor-azure/.morph/examples/scheduled-reports/proposal.md +0 -95
  268. package/stacks/blazor-azure/.morph/examples/scheduled-reports/spec.md +0 -267
  269. package/stacks/blazor-azure/.morph/examples/state-v3.json +0 -188
  270. package/stacks/blazor-azure/.morph/features/.gitkeep +0 -25
  271. package/stacks/blazor-azure/.morph/hooks/README.md +0 -348
  272. package/stacks/blazor-azure/.morph/hooks/pre-commit-agents.sh +0 -24
  273. package/stacks/blazor-azure/.morph/hooks/pre-commit-all.sh +0 -48
  274. package/stacks/blazor-azure/.morph/hooks/pre-commit-specs.sh +0 -49
  275. package/stacks/blazor-azure/.morph/hooks/task-completed.js +0 -73
  276. package/stacks/blazor-azure/.morph/hooks/teammate-idle.js +0 -68
  277. package/stacks/blazor-azure/.morph/schemas/agent.schema.json +0 -296
  278. package/stacks/blazor-azure/.morph/schemas/tasks.schema.json +0 -220
  279. package/stacks/blazor-azure/.morph/specs/.gitkeep +0 -20
  280. package/stacks/blazor-azure/.morph/standards/agent-framework-blazor-ui.md +0 -359
  281. package/stacks/blazor-azure/.morph/standards/agent-framework-production.md +0 -410
  282. package/stacks/blazor-azure/.morph/standards/agent-framework-setup.md +0 -413
  283. package/stacks/blazor-azure/.morph/standards/agent-framework-workflows.md +0 -349
  284. package/stacks/blazor-azure/.morph/standards/agent-teams-workflow.md +0 -474
  285. package/stacks/blazor-azure/.morph/standards/architecture.md +0 -325
  286. package/stacks/blazor-azure/.morph/standards/azure.md +0 -605
  287. package/stacks/blazor-azure/.morph/standards/coding.md +0 -377
  288. package/stacks/blazor-azure/.morph/standards/dotnet10-migration.md +0 -520
  289. package/stacks/blazor-azure/.morph/standards/fluent-ui-setup.md +0 -590
  290. package/stacks/blazor-azure/.morph/standards/migration-guide.md +0 -514
  291. package/stacks/blazor-azure/.morph/standards/passkeys-auth.md +0 -423
  292. package/stacks/blazor-azure/.morph/standards/vector-search-rag.md +0 -536
  293. package/stacks/blazor-azure/.morph/templates/CONTEXT-FEATURE.md +0 -276
  294. package/stacks/blazor-azure/.morph/templates/CONTEXT.md +0 -170
  295. package/stacks/blazor-azure/.morph/templates/FluentDesignTheme.cs +0 -149
  296. package/stacks/blazor-azure/.morph/templates/MudTheme.cs +0 -281
  297. package/stacks/blazor-azure/.morph/templates/agent.cs +0 -163
  298. package/stacks/blazor-azure/.morph/templates/clarify-questions.md +0 -159
  299. package/stacks/blazor-azure/.morph/templates/component.razor +0 -239
  300. package/stacks/blazor-azure/.morph/templates/contracts/Commands.cs +0 -74
  301. package/stacks/blazor-azure/.morph/templates/contracts/Entities.cs +0 -25
  302. package/stacks/blazor-azure/.morph/templates/contracts/Queries.cs +0 -74
  303. package/stacks/blazor-azure/.morph/templates/contracts/README.md +0 -74
  304. package/stacks/blazor-azure/.morph/templates/contracts.cs +0 -217
  305. package/stacks/blazor-azure/.morph/templates/decisions.md +0 -123
  306. package/stacks/blazor-azure/.morph/templates/design-system.css +0 -226
  307. package/stacks/blazor-azure/.morph/templates/infra/.dockerignore.example +0 -89
  308. package/stacks/blazor-azure/.morph/templates/infra/Dockerfile.example +0 -82
  309. package/stacks/blazor-azure/.morph/templates/infra/README.md +0 -286
  310. package/stacks/blazor-azure/.morph/templates/infra/app-insights.bicep +0 -63
  311. package/stacks/blazor-azure/.morph/templates/infra/app-service.bicep +0 -164
  312. package/stacks/blazor-azure/.morph/templates/infra/azure-pipelines-deploy.yml +0 -480
  313. package/stacks/blazor-azure/.morph/templates/infra/container-app-env.bicep +0 -49
  314. package/stacks/blazor-azure/.morph/templates/infra/container-app.bicep +0 -156
  315. package/stacks/blazor-azure/.morph/templates/infra/deploy-checklist.md +0 -426
  316. package/stacks/blazor-azure/.morph/templates/infra/deploy.ps1 +0 -229
  317. package/stacks/blazor-azure/.morph/templates/infra/deploy.sh +0 -208
  318. package/stacks/blazor-azure/.morph/templates/infra/key-vault.bicep +0 -91
  319. package/stacks/blazor-azure/.morph/templates/infra/main.bicep +0 -189
  320. package/stacks/blazor-azure/.morph/templates/infra/parameters.dev.json +0 -29
  321. package/stacks/blazor-azure/.morph/templates/infra/parameters.prod.json +0 -29
  322. package/stacks/blazor-azure/.morph/templates/infra/parameters.staging.json +0 -29
  323. package/stacks/blazor-azure/.morph/templates/infra/sql-database.bicep +0 -103
  324. package/stacks/blazor-azure/.morph/templates/infra/storage.bicep +0 -106
  325. package/stacks/blazor-azure/.morph/templates/integrations/asaas-client.cs +0 -387
  326. package/stacks/blazor-azure/.morph/templates/integrations/asaas-webhook.cs +0 -351
  327. package/stacks/blazor-azure/.morph/templates/integrations/azure-identity-config.cs +0 -288
  328. package/stacks/blazor-azure/.morph/templates/integrations/clerk-config.cs +0 -258
  329. package/stacks/blazor-azure/.morph/templates/job.cs +0 -171
  330. package/stacks/blazor-azure/.morph/templates/migration.cs +0 -83
  331. package/stacks/blazor-azure/.morph/templates/proposal.md +0 -141
  332. package/stacks/blazor-azure/.morph/templates/recap.md +0 -94
  333. package/stacks/blazor-azure/.morph/templates/repository.cs +0 -141
  334. package/stacks/blazor-azure/.morph/templates/saas/subscription.cs +0 -347
  335. package/stacks/blazor-azure/.morph/templates/saas/tenant.cs +0 -338
  336. package/stacks/blazor-azure/.morph/templates/service.cs +0 -139
  337. package/stacks/blazor-azure/.morph/templates/simulation.md +0 -353
  338. package/stacks/blazor-azure/.morph/templates/spec.md +0 -149
  339. package/stacks/blazor-azure/.morph/templates/sprint-status.yaml +0 -68
  340. package/stacks/blazor-azure/.morph/templates/state.template.json +0 -222
  341. package/stacks/blazor-azure/.morph/templates/story.md +0 -143
  342. package/stacks/blazor-azure/.morph/templates/tasks.md +0 -257
  343. package/stacks/blazor-azure/.morph/templates/test.cs +0 -239
  344. package/stacks/blazor-azure/.morph/templates/ui-components.md +0 -362
  345. package/stacks/blazor-azure/.morph/templates/ui-design-system.md +0 -286
  346. package/stacks/blazor-azure/.morph/templates/ui-flows.md +0 -336
  347. package/stacks/blazor-azure/.morph/templates/ui-mockups.md +0 -133
  348. package/stacks/blazor-azure/.morph/test-infra/example.bicep +0 -59
  349. package/stacks/nextjs-supabase/.claude/skills/level-2-domains/backend/dotnet-supabase.md +0 -244
  350. package/stacks/nextjs-supabase/.claude/skills/level-2-domains/frontend/nextjs-supabase.md +0 -335
  351. package/stacks/nextjs-supabase/.claude/skills/level-2-domains/infrastructure/easypanel-deployer.md +0 -189
  352. package/stacks/nextjs-supabase/.claude/skills/level-2-domains/integrations/supabase-expert.md +0 -170
  353. package/stacks/nextjs-supabase/.morph/docs/easypanel-setup.md +0 -169
  354. package/stacks/nextjs-supabase/.morph/docs/supabase-mcp-setup.md +0 -247
  355. package/stacks/nextjs-supabase/.morph/examples/crud-nextjs-supabase/README.md +0 -697
  356. package/stacks/nextjs-supabase/.morph/examples/crud-nextjs-supabase/spec.md +0 -85
  357. package/stacks/nextjs-supabase/.morph/examples/crud-nextjs-supabase/tasks.md +0 -86
  358. package/stacks/nextjs-supabase/.morph/examples/saas-nextjs-supabase/README.md +0 -498
  359. package/stacks/nextjs-supabase/.morph/examples/saas-nextjs-supabase/decisions.md +0 -121
  360. package/stacks/nextjs-supabase/.morph/examples/saas-nextjs-supabase/spec.md +0 -138
  361. package/stacks/nextjs-supabase/.morph/examples/saas-nextjs-supabase/tasks.md +0 -162
  362. package/stacks/nextjs-supabase/.morph/standards/easypanel-deploy.md +0 -191
  363. package/stacks/nextjs-supabase/.morph/standards/nextjs-patterns.md +0 -193
  364. package/stacks/nextjs-supabase/.morph/standards/supabase-auth.md +0 -171
  365. package/stacks/nextjs-supabase/.morph/standards/supabase-pgvector.md +0 -164
  366. package/stacks/nextjs-supabase/.morph/standards/supabase-rls.md +0 -179
  367. package/stacks/nextjs-supabase/.morph/standards/supabase-storage.md +0 -148
  368. package/stacks/nextjs-supabase/.morph/templates/contracts.cs +0 -173
  369. package/stacks/nextjs-supabase/.morph/templates/contracts.ts +0 -168
  370. package/stacks/nextjs-supabase/.morph/templates/decisions.md +0 -115
  371. package/stacks/nextjs-supabase/.morph/templates/dockerfile-api.dockerfile +0 -38
  372. package/stacks/nextjs-supabase/.morph/templates/dockerfile-web.dockerfile +0 -48
  373. package/stacks/nextjs-supabase/.morph/templates/proposal.md +0 -145
  374. package/stacks/nextjs-supabase/.morph/templates/recap.md +0 -134
  375. package/stacks/nextjs-supabase/.morph/templates/rls-policy.sql +0 -57
  376. package/stacks/nextjs-supabase/.morph/templates/spec.md +0 -231
  377. package/stacks/nextjs-supabase/.morph/templates/supabase-migration.sql +0 -100
  378. package/stacks/nextjs-supabase/.morph/templates/tasks.md +0 -257
  379. /package/src/commands/{search-patterns.js → learning/search-patterns.js} +0 -0
  380. /package/src/{lib → core/templates}/template-data-sources.js +0 -0
  381. /package/src/lib/{design-system-generator.js → generators/design-system-generator.js} +0 -0
  382. /package/src/lib/{learning-system.js → learning/learning-system.js} +0 -0
  383. /package/src/lib/validators/{package-validator.js → packages/package-validator.js} +0 -0
  384. /package/src/lib/validators/{ui-contrast-validator.js → ui/ui-contrast-validator.js} +0 -0
  385. /package/{src/generator → stacks/blazor-azure/.morph/templates}/.gitkeep +0 -0
  386. /package/{src/llm → stacks/nextjs-supabase/.morph/templates}/.gitkeep +0 -0
@@ -1,287 +0,0 @@
1
- # .NET Senior Engineer
2
-
3
- > **Layer:** 1 | **Load:** always | **Scope:** All .NET projects (Core Agent)
4
-
5
- Senior .NET engineer specialist. Writes production-quality C# following all framework standards. Includes **Ultrathink Mode** for complex architectural decisions.
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.
10
-
11
- ---
12
-
13
- ## Two Modes
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.
24
-
25
- **Trigger keywords:** `ultrathink`, `deep-think`, `think deeply`, `analyze deeply`, `complex decision`
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
34
-
35
- ---
36
-
37
- ## Code Writing Rules
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)` |
51
-
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
- ```
95
-
96
- ### Mandatory Patterns
97
-
98
- | Pattern | Rule | Example |
99
- |---------|------|---------|
100
- | **CancellationToken** | Last parameter on ALL async methods | `CancellationToken ct = default` |
101
- | **Result pattern** | Business errors return Result, NOT exceptions | `Result.Failure<T>("message")` |
102
- | **Structured logging** | Entry + exit + error on every service method | `logger.LogInformation("...", correlationId)` |
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
- }
183
- ```
184
-
185
- ---
186
-
187
- ## Post-Implementation Pipeline
188
-
189
- After writing code, self-check before delivering:
190
-
191
- ```
192
- 1. NAMING CHECK → Does every identifier follow coding.md?
193
- 2. ARCHITECTURE → Are files in the correct layer? No forbidden references?
194
- 3. ASYNC → CancellationToken on all async? No .Result/.Wait()?
195
- 4. LOGGING → Entry/exit/error logging? Message templates (not $"")?
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).
202
-
203
- ---
204
-
205
- ## Ultrathink Decision Template
206
-
207
- When in Ultrathink Mode, produce structured analysis:
208
-
209
- ```markdown
210
- ## Decision: {Title}
211
-
212
- ### Context
213
- {Why this decision is needed now. What triggered it. Current state.}
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
- ```
250
-
251
- ---
252
-
253
- ## .NET 10 / C# 14 Quick Patterns
254
-
255
- | Pattern | When | Example |
256
- |---------|------|---------|
257
- | Primary constructors | DI injection | `class Service(IRepo repo)` |
258
- | Collection expressions | Initialize collections | `List<int> ids = [1, 2, 3]` |
259
- | File-scoped namespaces | Always | `namespace MyApp.Services;` |
260
- | Raw string literals | Multi-line strings, SQL | `"""SELECT * FROM ..."""` |
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;` |
267
-
268
- ---
269
-
270
- ## Anti-Patterns to NEVER Produce
271
-
272
- | Anti-Pattern | Why | Instead |
273
- |--------------|-----|---------|
274
- | `async void` | Exceptions lost, can't await | `async Task` (always) |
275
- | `.Result` / `.Wait()` | Deadlock in Blazor Server | `await` |
276
- | `new DbContext()` in service | Wrong lifetime, no DI | Constructor injection |
277
- | `catch (Exception) { }` | Swallowed exception | Log + rethrow or Result |
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 |
284
-
285
- ---
286
-
287
- *MORPH-SPEC by Polymorphism Tech*
@@ -1,113 +0,0 @@
1
- # EF Modeler
2
-
3
- > **Layer:** 2 | **Load:** on-keyword | **Keywords:** entity, database, migration, ef core, dbcontext, table, column, relationship, query
4
-
5
- Especialista em Entity Framework Core para modelagem de dados e banco de dados.
6
-
7
- ## .NET 10 Compatibility
8
- - EF Core: **>= 10.0.0** | New: Vector search, primitive collections
9
- - **Ref:** `framework/standards/dotnet10-compatibility.md`
10
-
11
- ---
12
-
13
- ## Entity Structure
14
-
15
- ```csharp
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; }
22
-
23
- // Navigation
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>();
27
-
28
- // Factory method
29
- public static Order Create(int customerId, IEnumerable<OrderItem> items) { ... }
30
- }
31
- ```
32
-
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
- ```
54
-
55
- ## Migrations
56
-
57
- ```powershell
58
- dotnet ef migrations add {Name} --project src/Infrastructure --startup-project src/Web
59
- dotnet ef migrations script --idempotent --output migration.sql
60
- dotnet ef database update
61
- ```
62
-
63
- **Naming:** `{YYYYMMDD}_{Number}_{Description}` (e.g., `20240301_001_CreateOrdersTable`)
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!
71
-
72
- // ✅ Include
73
- var orders = await _context.Orders.Include(o => o.Items).Include(o => o.Customer).ToListAsync();
74
-
75
- // ✅ Projection (best)
76
- var dtos = await _context.Orders.Select(o => new OrderDto {
77
- Id = o.Id, CustomerName = o.Customer.Name, ItemCount = o.Items.Count
78
- }).ToListAsync();
79
- ```
80
-
81
- ---
82
-
83
- ## Background Operations
84
-
85
- > **Ref:** `framework/standards/blazor-efcore.md` — Repository Factory pattern for background ops
86
-
87
- **Rule:** Separate thread = isolated DbContext via `IDbContextFactory`.
88
- Background tasks, `Task.Run`, SignalR, Hangfire jobs — all need `IDbContextFactory`.
89
-
90
- ---
91
-
92
- ## Troubleshooting
93
-
94
- | Error | Cause | Fix |
95
- |-------|-------|-----|
96
- | `Invalid object name 'Table'` | Migration not applied | Run `database update` |
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
110
-
111
- ---
112
-
113
- *MORPH-SPEC by Polymorphism Tech*
@@ -1,126 +0,0 @@
1
- # Hangfire Orchestrator
2
-
3
- > **Layer:** 2 | **Load:** on-keyword | **Keywords:** scheduled, job, background, cron, recurring, batch, queue, hangfire
4
-
5
- Especialista em background jobs, tarefas agendadas e processamento assíncrono com Hangfire.
6
-
7
- ## .NET 10 Compatibility
8
- - Hangfire.AspNetCore: **>= 1.8.22** (required for .NET 10)
9
-
10
- ## Why Hangfire (not Azure Functions)
11
-
12
- | Aspect | Hangfire | Azure Functions |
13
- |--------|----------|-----------------|
14
- | Cost | Free (in-process) | Pay per execution |
15
- | Dashboard | Built-in | App Insights separate |
16
- | Debugging | Local easy | Emulator needed |
17
- | Complexity | Low | Medium-High |
18
-
19
- ---
20
-
21
- ## Setup
22
-
23
- ```csharp
24
- // Program.cs
25
- builder.Services.AddHangfire(config => config
26
- .SetDataCompatibilityLevel(CompatibilityLevel.Version_180)
27
- .UseSimpleAssemblyNameTypeSerializer()
28
- .UseRecommendedSerializerSettings()
29
- .UseSqlServerStorage(connString, new SqlServerStorageOptions
30
- {
31
- CommandBatchMaxTimeout = TimeSpan.FromMinutes(5),
32
- QueuePollInterval = TimeSpan.Zero,
33
- UseRecommendedIsolationLevel = true,
34
- DisableGlobalLocks = true
35
- }));
36
-
37
- builder.Services.AddHangfireServer(options =>
38
- {
39
- options.WorkerCount = Environment.ProcessorCount * 2;
40
- options.Queues = new[] { "critical", "default", "low" };
41
- });
42
-
43
- app.UseHangfireDashboard("/hangfire", new DashboardOptions
44
- {
45
- Authorization = new[] { new HangfireAuthorizationFilter() }
46
- });
47
- ```
48
-
49
- ## Job Types
50
-
51
- | Type | API | Example |
52
- |------|-----|---------|
53
- | **Fire-and-Forget** | `BackgroundJob.Enqueue<T>(...)` | Send email |
54
- | **Delayed** | `BackgroundJob.Schedule<T>(..., TimeSpan)` | Abandoned cart check |
55
- | **Recurring** | `RecurringJob.AddOrUpdate<T>(..., cron)` | Daily report |
56
- | **Continuation** | `BackgroundJob.ContinueJobWith(id, ...)` | Post-import notify |
57
-
58
- ### Common Cron Expressions
59
- `"0 * * * *"` hourly | `"*/5 * * * *"` every 5m | `"0 8 * * 1-5"` 8am weekdays | `"0 0 1 * *"` monthly
60
-
61
- ---
62
-
63
- ## CRITICAL: Scoped Repository Pattern
64
-
65
- > **Ref:** `framework/standards/blazor-efcore.md` — Repository Factory pattern
66
-
67
- **Hangfire jobs run OUTSIDE the HTTP request.** The scoped DbContext does NOT exist.
68
-
69
- ```csharp
70
- // ✅ ALWAYS use Factory
71
- public class OrderProcessorJob(IOrderRepositoryFactory repoFactory, ILogger<OrderProcessorJob> logger)
72
- {
73
- [AutomaticRetry(Attempts = 3, DelaysInSeconds = new[] { 60, 300, 900 })]
74
- public async Task ProcessAsync(Guid orderId, CancellationToken ct)
75
- {
76
- await using var repo = repoFactory.CreateScoped(); // Isolated DbContext
77
- var order = await repo.GetByIdAsync(orderId, ct);
78
- if (order == null || order.Status >= OrderStatus.Completed) return; // Idempotent
79
- order.MarkAsProcessed();
80
- await repo.UpdateAsync(order, ct);
81
- }
82
- }
83
-
84
- // ❌ NEVER inject repository directly — DbContext will be disposed
85
- ```
86
-
87
- ## Retry & Error Handling
88
-
89
- ```csharp
90
- [AutomaticRetry(Attempts = 5, DelaysInSeconds = new[] { 60, 300, 900, 3600, 7200 })]
91
- [Queue("critical")]
92
- public async Task ProcessPaymentAsync(int orderId)
93
- {
94
- try { await _paymentService.ProcessAsync(orderId); }
95
- catch (PaymentGatewayException ex) { _logger.LogWarning(ex, "..."); throw; } // Rethrow for retry
96
- }
97
- ```
98
-
99
- ## Dashboard Authorization
100
-
101
- ```csharp
102
- public class HangfireAuthorizationFilter : IDashboardAuthorizationFilter
103
- {
104
- public bool Authorize(DashboardContext context)
105
- {
106
- var http = context.GetHttpContext();
107
- return http.User.Identity?.IsAuthenticated == true && http.User.IsInRole("Admin");
108
- }
109
- }
110
- ```
111
-
112
- ---
113
-
114
- ## Checklist
115
- - [ ] Uses `IRepositoryFactory` (NOT direct repository)
116
- - [ ] `await using` for dispose
117
- - [ ] Job is idempotent (safe to retry)
118
- - [ ] AutomaticRetry configured
119
- - [ ] Queue defined (critical/default/low)
120
- - [ ] CancellationToken propagated
121
- - [ ] Dashboard protected with auth
122
- - [ ] Timezone set for recurring jobs
123
-
124
- ---
125
-
126
- *MORPH-SPEC by Polymorphism Tech*
@@ -1,109 +0,0 @@
1
- # Agent Framework Expert
2
-
3
- > **Layer:** 2 | **Load:** on-keyword | **Keywords:** agent, ai, llm, openai, chat, prompt, tool, function calling, rag, embedding, workflow, orchestration, mcp, a2a, middleware
4
-
5
- Microsoft Agent Framework for .NET 10. **Replaces Semantic Kernel.** Packages: `Microsoft.Agents.AI`, `Microsoft.Agents.AI.OpenAI`, `Microsoft.Agents.AI.Hosting`.
6
-
7
- > **Ref:** `agent-framework-setup.md` — Full setup guide
8
- > **Ref:** `agent-framework-workflows.md` — Orchestration patterns
9
- > **Ref:** `agent-framework-production.md` — Middleware, A2A, MCP, caching
10
-
11
- ## Quick Start
12
-
13
- ```csharp
14
- AIAgent agent = new AzureOpenAIClient(
15
- new Uri(endpoint), new AzureCliCredential())
16
- .GetChatClient("gpt-4o-mini")
17
- .AsAIAgent(instructions: "You are a helpful assistant.");
18
-
19
- Console.WriteLine(await agent.RunAsync("Analyze this."));
20
- ```
21
-
22
- ## Agent with Tools
23
-
24
- ```csharp
25
- public class OrderFunctions
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
- ```
75
-
76
- ## Prompt Template
77
-
78
- ```
79
- # Identity: You are {AgentName}, expert in {Domain}.
80
- # Context: {ContextDescription}
81
- # Rules: {BulletList}
82
- # Response Format: {Format}
83
- # Examples: Input: {In} → Output: {Out}
84
- ```
85
-
86
- ## Model Selection
87
-
88
- | Use Case | Model | Cost |
89
- |----------|-------|------|
90
- | Simple tasks (default) | gpt-4o-mini | $0.15/1M input |
91
- | Complex analysis | gpt-4o | $2.50/1M input |
92
- | Embeddings | text-embedding-3-small | $0.02/1M |
93
-
94
- ## Checklist
95
-
96
- - [ ] `Microsoft.Agents.AI` + `Microsoft.Agents.AI.OpenAI` installed
97
- - [ ] `IChatClient` configured via DI (singleton)
98
- - [ ] Agents use `ChatClientAgent` or `.AsAIAgent()`
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`)
106
-
107
- ---
108
-
109
- *MORPH-SPEC by Polymorphism Tech*