@polymorphism-tech/morph-spec 3.1.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.
Files changed (333) hide show
  1. package/CLAUDE.md +882 -3
  2. package/README.md +79 -18
  3. package/bin/detect-agents.js +1 -1
  4. package/bin/morph-spec.js +163 -26
  5. package/bin/task-manager.cjs +101 -7
  6. package/bin/validate.js +1 -1
  7. package/docs/cli-auto-detection.md +219 -0
  8. package/docs/getting-started.md +0 -5
  9. package/docs/llm-interaction-config.md +735 -0
  10. package/docs/troubleshooting.md +269 -0
  11. package/docs/v3.0/AGENTS.md +521 -0
  12. package/docs/v3.0/ANALYSIS.md +555 -0
  13. package/docs/v3.0/ARCHITECTURE.md +436 -0
  14. package/docs/v3.0/EXECUTION-FLOW.md +1304 -0
  15. package/docs/v3.0/FEATURES.md +688 -0
  16. package/docs/v3.0/README.md +231 -0
  17. package/docs/v3.0/ROADMAP.md +801 -0
  18. package/docs/validation-checklist.md +0 -1
  19. package/package.json +5 -1
  20. package/src/commands/agents/index.js +4 -0
  21. package/src/commands/agents/spawn-team.js +172 -0
  22. package/src/commands/{create-story.js → feature/create-story.js} +357 -354
  23. package/src/commands/feature/index.js +6 -0
  24. package/src/commands/{shard-spec.js → feature/shard-spec.js} +2 -2
  25. package/src/commands/{sprint-status.js → feature/sprint-status.js} +1 -1
  26. package/src/commands/{generate-context.js → generation/generate-context.js} +40 -40
  27. package/src/commands/{generate.js → generation/generate.js} +130 -3
  28. package/src/commands/generation/index.js +5 -0
  29. package/src/commands/index.js +16 -0
  30. package/src/commands/learning/capture-pattern.js +121 -0
  31. package/src/commands/learning/index.js +5 -0
  32. package/src/commands/learning/search-patterns.js +126 -0
  33. package/src/commands/{detect-agents.js → project/detect-agents.js} +178 -178
  34. package/src/commands/project/detect-workflow.js +174 -0
  35. package/src/commands/{detect.js → project/detect.js} +104 -104
  36. package/src/commands/{doctor.js → project/doctor.js} +356 -356
  37. package/src/commands/project/index.js +10 -0
  38. package/src/commands/{init.js → project/init.js} +305 -258
  39. package/src/commands/{sync.js → project/sync.js} +167 -167
  40. package/src/commands/{update.js → project/update.js} +240 -204
  41. package/src/commands/{advance-phase.js → state/advance-phase.js} +416 -266
  42. package/src/commands/state/approve.js +221 -0
  43. package/src/commands/state/index.js +8 -0
  44. package/src/commands/{rollback-phase.js → state/rollback-phase.js} +185 -185
  45. package/src/commands/{state.js → state/state.js} +334 -334
  46. package/src/commands/{validate-phase.js → state/validate-phase.js} +221 -221
  47. package/src/commands/tasks/index.js +4 -0
  48. package/src/commands/{task.js → tasks/task.js} +78 -78
  49. package/src/commands/templates/index.js +8 -0
  50. package/src/commands/templates/template-customize.js +101 -0
  51. package/src/commands/templates/template-list.js +128 -0
  52. package/src/commands/templates/template-render.js +95 -0
  53. package/src/commands/templates/template-show.js +131 -0
  54. package/src/commands/templates/template-validate.js +91 -0
  55. package/src/commands/utils/index.js +7 -0
  56. package/src/commands/utils/migrate-state.js +158 -0
  57. package/src/commands/{session-summary.js → utils/session-summary.js} +291 -291
  58. package/src/commands/{troubleshoot.js → utils/troubleshoot.js} +222 -222
  59. package/src/commands/utils/upgrade.js +346 -0
  60. package/src/commands/{analyze-blazor-concurrency.js → validation/analyze-blazor-concurrency.js} +193 -193
  61. package/src/commands/validation/index.js +8 -0
  62. package/src/commands/{lint-fluent.js → validation/lint-fluent.js} +352 -352
  63. package/src/commands/{validate-blazor-state.js → validation/validate-blazor-state.js} +210 -210
  64. package/src/commands/{validate-blazor.js → validation/validate-blazor.js} +156 -156
  65. package/src/commands/{validate-css.js → validation/validate-css.js} +84 -84
  66. package/src/core/index.js +10 -0
  67. package/src/core/registry/command-registry.js +302 -0
  68. package/src/core/registry/index.js +8 -0
  69. package/src/core/registry/validator-registry.js +204 -0
  70. package/src/core/state/index.js +8 -0
  71. package/src/core/state/phase-state-machine.js +214 -0
  72. package/src/{lib → core/state}/state-manager.js +572 -414
  73. package/src/core/templates/index.js +9 -0
  74. package/src/core/templates/template-data-sources.js +325 -0
  75. package/src/core/templates/template-registry.js +335 -0
  76. package/src/core/templates/template-renderer.js +477 -0
  77. package/src/core/templates/template-validator.js +296 -0
  78. package/src/core/workflows/index.js +7 -0
  79. package/src/core/workflows/workflow-detector.js +354 -0
  80. package/src/generator/config-generator.js +206 -0
  81. package/src/generator/templates/config.json.template +40 -0
  82. package/src/generator/templates/project.md.template +67 -0
  83. package/src/lib/{complexity-analyzer.js → analysis/complexity-analyzer.js} +441 -441
  84. package/src/lib/analysis/index.js +7 -0
  85. package/src/lib/checkpoints/checkpoint-hooks.js +258 -0
  86. package/src/lib/checkpoints/index.js +7 -0
  87. package/src/lib/detectors/config-detector.js +223 -223
  88. package/src/lib/detectors/conversation-analyzer.js +163 -163
  89. package/src/lib/{design-system-detector.js → detectors/design-system-detector.js} +187 -187
  90. package/src/lib/detectors/index.js +87 -84
  91. package/src/lib/detectors/standards-generator.js +275 -275
  92. package/src/lib/detectors/structure-detector.js +245 -245
  93. package/src/lib/{context-generator.js → generators/context-generator.js} +526 -516
  94. package/src/lib/generators/index.js +10 -0
  95. package/src/lib/generators/metadata-extractor.js +387 -0
  96. package/src/lib/{recap-generator.js → generators/recap-generator.js} +205 -205
  97. package/src/lib/learning/index.js +7 -0
  98. package/src/lib/orchestration/index.js +7 -0
  99. package/src/lib/{team-orchestrator.js → orchestration/team-orchestrator.js} +323 -323
  100. package/src/lib/stacks/index.js +7 -0
  101. package/src/lib/{stack-resolver.js → stacks/stack-resolver.js} +180 -148
  102. package/src/lib/standards/index.js +7 -0
  103. package/src/lib/{standards-context-injector.js → standards/standards-context-injector.js} +298 -288
  104. package/src/lib/troubleshooting/index.js +8 -0
  105. package/src/lib/{troubleshoot-grep.js → troubleshooting/troubleshoot-grep.js} +204 -204
  106. package/src/lib/{troubleshoot-index.js → troubleshooting/troubleshoot-index.js} +144 -144
  107. package/src/lib/validators/architecture/architecture-validator.js +387 -0
  108. package/src/lib/validators/architecture/index.js +7 -0
  109. package/src/lib/validators/architecture-validator.js +40 -367
  110. package/src/lib/{blazor-concurrency-analyzer.js → validators/blazor/blazor-concurrency-analyzer.js} +277 -288
  111. package/src/lib/{blazor-state-validator.js → validators/blazor/blazor-state-validator.js} +279 -291
  112. package/src/lib/{blazor-validator.js → validators/blazor/blazor-validator.js} +369 -374
  113. package/src/lib/validators/blazor/index.js +9 -0
  114. package/src/lib/validators/content/content-validator.js +351 -0
  115. package/src/lib/validators/content/index.js +7 -0
  116. package/src/lib/validators/content-validator.js +164 -0
  117. package/src/lib/validators/{contract-compliance-validator.js → contracts/contract-compliance-validator.js} +273 -273
  118. package/src/lib/validators/contracts/index.js +7 -0
  119. package/src/lib/{css-validator.js → validators/css/css-validator.js} +352 -352
  120. package/src/lib/validators/css/index.js +7 -0
  121. package/src/lib/validators/{design-system-validator.js → design-system/design-system-validator.js} +231 -231
  122. package/src/lib/validators/design-system/index.js +7 -0
  123. package/src/lib/validators/package-validator.js +41 -340
  124. package/src/lib/validators/packages/index.js +7 -0
  125. package/src/lib/validators/packages/package-validator.js +360 -0
  126. package/src/lib/validators/shared/index.js +12 -0
  127. package/src/lib/validators/shared/issue-counter.js +18 -0
  128. package/src/lib/validators/shared/result-formatter.js +124 -0
  129. package/src/lib/{spec-validator.js → validators/spec-validator.js} +258 -258
  130. package/src/lib/validators/ui/index.js +7 -0
  131. package/src/lib/validators/ui/ui-contrast-validator.js +422 -0
  132. package/src/lib/validators/ui-contrast-validator.js +31 -409
  133. package/src/lib/{validation-runner.js → validators/validation-runner.js} +286 -284
  134. package/src/llm/analyzer.js +215 -0
  135. package/src/llm/environment-detector.js +43 -0
  136. package/src/llm/few-shot-examples.js +216 -0
  137. package/src/llm/project-config-schema.json +188 -0
  138. package/src/llm/prompt-builder.js +96 -0
  139. package/src/orchestrator.js +206 -0
  140. package/src/sanitizer/context-sanitizer.js +221 -0
  141. package/src/sanitizer/patterns.js +163 -0
  142. package/src/scanner/project-scanner.js +242 -0
  143. package/src/ui/diff-display.js +91 -0
  144. package/src/ui/interactive-wizard.js +96 -0
  145. package/src/ui/user-review.js +211 -0
  146. package/src/ui/wizard-questions.js +188 -0
  147. package/src/utils/color-utils.js +70 -0
  148. package/src/utils/file-copier.js +188 -189
  149. package/src/utils/process-handler.js +97 -0
  150. package/src/writer/file-writer.js +86 -0
  151. package/stacks/blazor-azure/.claude/skills/level-2-domains/ai-agents/ai-system-architect.md +3 -3
  152. package/stacks/blazor-azure/.claude/skills/level-2-domains/backend/api-designer.md +59 -0
  153. package/stacks/blazor-azure/.claude/skills/level-2-domains/backend/dotnet-senior.md +45 -255
  154. package/stacks/blazor-azure/.claude/skills/level-2-domains/backend/ef-modeler.md +33 -88
  155. package/stacks/blazor-azure/.claude/skills/level-2-domains/backend/ms-agent-expert.md +25 -89
  156. package/stacks/blazor-azure/.claude/skills/level-2-domains/integrations/hangfire-orchestrator.md +64 -0
  157. package/stacks/blazor-azure/.morph/config/agents.json +879 -764
  158. package/stacks/blazor-azure/.morph/hooks/{pre-commit-tests.sh → pre-commit/tests-csharp.sh} +3 -2
  159. package/stacks/blazor-azure/.morph/templates/.gitkeep +0 -0
  160. package/stacks/blazor-azure/.morph/templates/infrastructure/github/workflows/cd-prod.yml.hbs +41 -0
  161. package/stacks/blazor-azure/.morph/templates/infrastructure/github/workflows/cd-staging.yml.hbs +24 -0
  162. package/stacks/blazor-azure/.morph/templates/infrastructure/github/workflows/ci-build.yml.hbs +23 -0
  163. package/stacks/nextjs-supabase/.claude/commands/morph-apply.md +221 -0
  164. package/stacks/nextjs-supabase/.claude/commands/morph-archive.md +79 -0
  165. package/stacks/nextjs-supabase/.claude/commands/morph-deploy.md +529 -0
  166. package/stacks/nextjs-supabase/.claude/commands/morph-infra.md +209 -0
  167. package/stacks/nextjs-supabase/.claude/commands/morph-preflight.md +227 -0
  168. package/stacks/nextjs-supabase/.claude/commands/morph-proposal.md +122 -0
  169. package/stacks/nextjs-supabase/.claude/commands/morph-status.md +86 -0
  170. package/stacks/nextjs-supabase/.claude/commands/morph-troubleshoot.md +122 -0
  171. package/stacks/nextjs-supabase/.claude/settings.local.json +6 -0
  172. package/stacks/nextjs-supabase/.claude/skills/level-2-domains/integrations/supabase-expert.md +30 -150
  173. package/stacks/nextjs-supabase/.morph/config/agents.json +345 -345
  174. package/stacks/nextjs-supabase/.morph/hooks/pre-commit/tests-typescript.sh +61 -0
  175. package/stacks/nextjs-supabase/.morph/templates/.gitkeep +0 -0
  176. package/stacks/nextjs-supabase/.morph/templates/infrastructure/github/workflows/cd-prod.yml.hbs +22 -0
  177. package/stacks/nextjs-supabase/.morph/templates/infrastructure/github/workflows/cd-staging.yml.hbs +22 -0
  178. package/stacks/nextjs-supabase/.morph/templates/infrastructure/github/workflows/ci-build.yml.hbs +35 -0
  179. package/stacks/nextjs-supabase/README.md +6 -15
  180. package/bin/render-template.js +0 -303
  181. package/bin/semantic-detect-agents.js +0 -247
  182. package/bin/validate-agents-skills.js +0 -257
  183. package/bin/validate-agents.js +0 -70
  184. package/bin/validate-phase.js +0 -263
  185. package/docs/examples.md +0 -328
  186. package/scripts/reorganize-skills.cjs +0 -175
  187. package/scripts/validate-agents-structure.cjs +0 -52
  188. package/scripts/validate-skills.cjs +0 -180
  189. package/src/commands/deploy.js +0 -780
  190. package/src/lib/continuous-validator.js +0 -421
  191. package/src/lib/decision-constraint-loader.js +0 -109
  192. package/src/lib/design-system-scaffolder.js +0 -299
  193. package/src/lib/hook-executor.js +0 -257
  194. package/src/lib/mockup-generator.js +0 -366
  195. package/src/lib/ui-detector.js +0 -350
  196. package/stacks/blazor-azure/.azure/README.md +0 -293
  197. package/stacks/blazor-azure/.azure/docs/azure-devops-setup.md +0 -454
  198. package/stacks/blazor-azure/.azure/docs/branch-strategy.md +0 -398
  199. package/stacks/blazor-azure/.azure/docs/local-development.md +0 -515
  200. package/stacks/blazor-azure/.azure/pipelines/pipeline-variables.yml +0 -34
  201. package/stacks/blazor-azure/.azure/pipelines/prod-pipeline.yml +0 -319
  202. package/stacks/blazor-azure/.azure/pipelines/staging-pipeline.yml +0 -234
  203. package/stacks/blazor-azure/.azure/pipelines/templates/build-dotnet.yml +0 -75
  204. package/stacks/blazor-azure/.azure/pipelines/templates/deploy-app-service.yml +0 -94
  205. package/stacks/blazor-azure/.azure/pipelines/templates/deploy-container-app.yml +0 -120
  206. package/stacks/blazor-azure/.azure/pipelines/templates/infra-deploy.yml +0 -90
  207. package/stacks/blazor-azure/.claude/settings.local.json +0 -15
  208. package/stacks/blazor-azure/.morph/docs/STORY-DRIVEN-DEVELOPMENT.md +0 -392
  209. package/stacks/blazor-azure/.morph/docs/workflows/design-impl.md +0 -37
  210. package/stacks/blazor-azure/.morph/docs/workflows/enforcement-pipeline.md +0 -668
  211. package/stacks/blazor-azure/.morph/docs/workflows/fast-track.md +0 -29
  212. package/stacks/blazor-azure/.morph/docs/workflows/full-morph.md +0 -76
  213. package/stacks/blazor-azure/.morph/docs/workflows/standard.md +0 -44
  214. package/stacks/blazor-azure/.morph/docs/workflows/ui-refresh.md +0 -39
  215. package/stacks/blazor-azure/.morph/examples/api-nextjs/README.md +0 -241
  216. package/stacks/blazor-azure/.morph/examples/api-nextjs/contracts.ts +0 -307
  217. package/stacks/blazor-azure/.morph/examples/api-nextjs/spec.md +0 -399
  218. package/stacks/blazor-azure/.morph/examples/api-nextjs/tasks.md +0 -168
  219. package/stacks/blazor-azure/.morph/examples/micro-saas/README.md +0 -125
  220. package/stacks/blazor-azure/.morph/examples/micro-saas/contracts.cs +0 -358
  221. package/stacks/blazor-azure/.morph/examples/micro-saas/decisions.md +0 -246
  222. package/stacks/blazor-azure/.morph/examples/micro-saas/spec.md +0 -236
  223. package/stacks/blazor-azure/.morph/examples/micro-saas/tasks.md +0 -150
  224. package/stacks/blazor-azure/.morph/examples/multi-agent/README.md +0 -309
  225. package/stacks/blazor-azure/.morph/examples/multi-agent/contracts.cs +0 -433
  226. package/stacks/blazor-azure/.morph/examples/multi-agent/spec.md +0 -479
  227. package/stacks/blazor-azure/.morph/examples/multi-agent/tasks.md +0 -185
  228. package/stacks/blazor-azure/.morph/examples/scheduled-reports/decisions.md +0 -158
  229. package/stacks/blazor-azure/.morph/examples/scheduled-reports/proposal.md +0 -95
  230. package/stacks/blazor-azure/.morph/examples/scheduled-reports/spec.md +0 -267
  231. package/stacks/blazor-azure/.morph/examples/state-v3.json +0 -188
  232. package/stacks/blazor-azure/.morph/hooks/README.md +0 -348
  233. package/stacks/blazor-azure/.morph/hooks/pre-commit-agents.sh +0 -24
  234. package/stacks/blazor-azure/.morph/hooks/pre-commit-all.sh +0 -48
  235. package/stacks/blazor-azure/.morph/hooks/pre-commit-specs.sh +0 -49
  236. package/stacks/blazor-azure/.morph/hooks/task-completed.js +0 -73
  237. package/stacks/blazor-azure/.morph/hooks/teammate-idle.js +0 -68
  238. package/stacks/blazor-azure/.morph/standards/agent-framework-blazor-ui.md +0 -359
  239. package/stacks/blazor-azure/.morph/standards/agent-framework-production.md +0 -410
  240. package/stacks/blazor-azure/.morph/standards/agent-framework-setup.md +0 -413
  241. package/stacks/blazor-azure/.morph/standards/agent-framework-workflows.md +0 -349
  242. package/stacks/blazor-azure/.morph/standards/agent-teams-workflow.md +0 -474
  243. package/stacks/blazor-azure/.morph/standards/architecture.md +0 -325
  244. package/stacks/blazor-azure/.morph/standards/azure.md +0 -605
  245. package/stacks/blazor-azure/.morph/standards/coding.md +0 -377
  246. package/stacks/blazor-azure/.morph/standards/dotnet10-migration.md +0 -520
  247. package/stacks/blazor-azure/.morph/standards/fluent-ui-setup.md +0 -590
  248. package/stacks/blazor-azure/.morph/standards/migration-guide.md +0 -514
  249. package/stacks/blazor-azure/.morph/standards/passkeys-auth.md +0 -423
  250. package/stacks/blazor-azure/.morph/standards/vector-search-rag.md +0 -536
  251. package/stacks/blazor-azure/.morph/templates/CONTEXT-FEATURE.md +0 -276
  252. package/stacks/blazor-azure/.morph/templates/CONTEXT.md +0 -170
  253. package/stacks/blazor-azure/.morph/templates/FluentDesignTheme.cs +0 -149
  254. package/stacks/blazor-azure/.morph/templates/MudTheme.cs +0 -281
  255. package/stacks/blazor-azure/.morph/templates/agent.cs +0 -163
  256. package/stacks/blazor-azure/.morph/templates/clarify-questions.md +0 -159
  257. package/stacks/blazor-azure/.morph/templates/component.razor +0 -239
  258. package/stacks/blazor-azure/.morph/templates/contracts/Commands.cs +0 -74
  259. package/stacks/blazor-azure/.morph/templates/contracts/Entities.cs +0 -25
  260. package/stacks/blazor-azure/.morph/templates/contracts/Queries.cs +0 -74
  261. package/stacks/blazor-azure/.morph/templates/contracts/README.md +0 -74
  262. package/stacks/blazor-azure/.morph/templates/contracts.cs +0 -217
  263. package/stacks/blazor-azure/.morph/templates/decisions.md +0 -123
  264. package/stacks/blazor-azure/.morph/templates/design-system.css +0 -226
  265. package/stacks/blazor-azure/.morph/templates/infra/.dockerignore.example +0 -89
  266. package/stacks/blazor-azure/.morph/templates/infra/Dockerfile.example +0 -82
  267. package/stacks/blazor-azure/.morph/templates/infra/README.md +0 -286
  268. package/stacks/blazor-azure/.morph/templates/infra/app-insights.bicep +0 -63
  269. package/stacks/blazor-azure/.morph/templates/infra/app-service.bicep +0 -164
  270. package/stacks/blazor-azure/.morph/templates/infra/azure-pipelines-deploy.yml +0 -480
  271. package/stacks/blazor-azure/.morph/templates/infra/container-app-env.bicep +0 -49
  272. package/stacks/blazor-azure/.morph/templates/infra/container-app.bicep +0 -156
  273. package/stacks/blazor-azure/.morph/templates/infra/deploy-checklist.md +0 -426
  274. package/stacks/blazor-azure/.morph/templates/infra/deploy.ps1 +0 -229
  275. package/stacks/blazor-azure/.morph/templates/infra/deploy.sh +0 -208
  276. package/stacks/blazor-azure/.morph/templates/infra/key-vault.bicep +0 -91
  277. package/stacks/blazor-azure/.morph/templates/infra/main.bicep +0 -189
  278. package/stacks/blazor-azure/.morph/templates/infra/parameters.dev.json +0 -29
  279. package/stacks/blazor-azure/.morph/templates/infra/parameters.prod.json +0 -29
  280. package/stacks/blazor-azure/.morph/templates/infra/parameters.staging.json +0 -29
  281. package/stacks/blazor-azure/.morph/templates/infra/sql-database.bicep +0 -103
  282. package/stacks/blazor-azure/.morph/templates/infra/storage.bicep +0 -106
  283. package/stacks/blazor-azure/.morph/templates/integrations/asaas-client.cs +0 -387
  284. package/stacks/blazor-azure/.morph/templates/integrations/asaas-webhook.cs +0 -351
  285. package/stacks/blazor-azure/.morph/templates/integrations/azure-identity-config.cs +0 -288
  286. package/stacks/blazor-azure/.morph/templates/integrations/clerk-config.cs +0 -258
  287. package/stacks/blazor-azure/.morph/templates/job.cs +0 -171
  288. package/stacks/blazor-azure/.morph/templates/migration.cs +0 -83
  289. package/stacks/blazor-azure/.morph/templates/proposal.md +0 -141
  290. package/stacks/blazor-azure/.morph/templates/recap.md +0 -94
  291. package/stacks/blazor-azure/.morph/templates/repository.cs +0 -141
  292. package/stacks/blazor-azure/.morph/templates/saas/subscription.cs +0 -347
  293. package/stacks/blazor-azure/.morph/templates/saas/tenant.cs +0 -338
  294. package/stacks/blazor-azure/.morph/templates/service.cs +0 -139
  295. package/stacks/blazor-azure/.morph/templates/simulation.md +0 -353
  296. package/stacks/blazor-azure/.morph/templates/spec.md +0 -149
  297. package/stacks/blazor-azure/.morph/templates/sprint-status.yaml +0 -68
  298. package/stacks/blazor-azure/.morph/templates/state.template.json +0 -222
  299. package/stacks/blazor-azure/.morph/templates/story.md +0 -143
  300. package/stacks/blazor-azure/.morph/templates/tasks.md +0 -257
  301. package/stacks/blazor-azure/.morph/templates/test.cs +0 -239
  302. package/stacks/blazor-azure/.morph/templates/ui-components.md +0 -362
  303. package/stacks/blazor-azure/.morph/templates/ui-design-system.md +0 -286
  304. package/stacks/blazor-azure/.morph/templates/ui-flows.md +0 -336
  305. package/stacks/blazor-azure/.morph/templates/ui-mockups.md +0 -133
  306. package/stacks/nextjs-supabase/.morph/docs/easypanel-setup.md +0 -169
  307. package/stacks/nextjs-supabase/.morph/docs/supabase-mcp-setup.md +0 -247
  308. package/stacks/nextjs-supabase/.morph/examples/crud-nextjs-supabase/README.md +0 -697
  309. package/stacks/nextjs-supabase/.morph/examples/crud-nextjs-supabase/spec.md +0 -85
  310. package/stacks/nextjs-supabase/.morph/examples/crud-nextjs-supabase/tasks.md +0 -86
  311. package/stacks/nextjs-supabase/.morph/examples/saas-nextjs-supabase/README.md +0 -498
  312. package/stacks/nextjs-supabase/.morph/examples/saas-nextjs-supabase/decisions.md +0 -121
  313. package/stacks/nextjs-supabase/.morph/examples/saas-nextjs-supabase/spec.md +0 -138
  314. package/stacks/nextjs-supabase/.morph/examples/saas-nextjs-supabase/tasks.md +0 -162
  315. package/stacks/nextjs-supabase/.morph/standards/easypanel-deploy.md +0 -191
  316. package/stacks/nextjs-supabase/.morph/standards/nextjs-patterns.md +0 -193
  317. package/stacks/nextjs-supabase/.morph/standards/supabase-auth.md +0 -171
  318. package/stacks/nextjs-supabase/.morph/standards/supabase-pgvector.md +0 -164
  319. package/stacks/nextjs-supabase/.morph/standards/supabase-rls.md +0 -179
  320. package/stacks/nextjs-supabase/.morph/standards/supabase-storage.md +0 -148
  321. package/stacks/nextjs-supabase/.morph/templates/contracts.cs +0 -173
  322. package/stacks/nextjs-supabase/.morph/templates/contracts.ts +0 -168
  323. package/stacks/nextjs-supabase/.morph/templates/decisions.md +0 -115
  324. package/stacks/nextjs-supabase/.morph/templates/dockerfile-api.dockerfile +0 -38
  325. package/stacks/nextjs-supabase/.morph/templates/dockerfile-web.dockerfile +0 -48
  326. package/stacks/nextjs-supabase/.morph/templates/proposal.md +0 -145
  327. package/stacks/nextjs-supabase/.morph/templates/recap.md +0 -134
  328. package/stacks/nextjs-supabase/.morph/templates/rls-policy.sql +0 -57
  329. package/stacks/nextjs-supabase/.morph/templates/spec.md +0 -231
  330. package/stacks/nextjs-supabase/.morph/templates/supabase-migration.sql +0 -100
  331. package/stacks/nextjs-supabase/.morph/templates/tasks.md +0 -257
  332. /package/src/lib/{design-system-generator.js → generators/design-system-generator.js} +0 -0
  333. /package/src/lib/{learning-system.js → learning/learning-system.js} +0 -0
@@ -1,590 +0,0 @@
1
- # Fluent UI Blazor - Setup e Padrões (.NET 10)
2
-
3
- > Biblioteca de UI recomendada para projetos **AI-first** e micro-SaaS no MORPH-SPEC.
4
-
5
- ---
6
-
7
- ## 🎯 Por Que Fluent UI Blazor?
8
-
9
- ### Para Projetos AI-First
10
-
11
- | Vantagem | Descrição |
12
- |----------|-----------|
13
- | **Componentes AI nativos** | Chat containers, streaming, typing indicators |
14
- | **Microsoft Stack** | Integração perfeita com Agent Framework, Aspire, .NET 10 |
15
- | **Design Copilot-like** | UX patterns da Microsoft para AI assistants |
16
- | **Futuro-proof** | Microsoft evolui junto com AI capabilities |
17
- | **Performance** | ~200KB gzipped (vs 500KB MudBlazor) |
18
- | **Aspire Dashboard** | Mesma lib - consistência visual |
19
-
20
- ### Para Micro-SaaS
21
-
22
- - **Design System moderno** - Microsoft 365 style
23
- - **Acessibilidade nativa** - WCAG compliant
24
- - **Dark mode** - Built-in
25
- - **Responsive** - Mobile-first
26
- - **Grátis** - MIT License, sem custos
27
-
28
- ---
29
-
30
- ## 📦 Setup
31
-
32
- ### 1. Instalar Package
33
-
34
- ```bash
35
- dotnet add package Microsoft.FluentUI.AspNetCore.Components --version 4.0.0
36
- ```
37
-
38
- ### 2. Configurar Program.cs
39
-
40
- ```csharp
41
- var builder = WebApplication.CreateBuilder(args);
42
-
43
- // Blazor
44
- builder.Services.AddRazorComponents()
45
- .AddInteractiveServerComponents();
46
-
47
- // Fluent UI
48
- builder.Services.AddFluentUIComponents();
49
-
50
- var app = builder.Build();
51
-
52
- // Pipeline
53
- app.UseStaticFiles();
54
- app.UseAntiforgery();
55
-
56
- app.MapRazorComponents<App>()
57
- .AddInteractiveServerRenderMode()
58
- .AddAdditionalAssemblies(typeof(Microsoft.FluentUI.AspNetCore.Components._Imports).Assembly);
59
-
60
- app.Run();
61
- ```
62
-
63
- ### 3. Configurar _Imports.razor
64
-
65
- ```razor
66
- @* Components/_Imports.razor *@
67
- @using Microsoft.AspNetCore.Components.Web
68
- @using Microsoft.FluentUI.AspNetCore.Components
69
- @using Microsoft.FluentUI.AspNetCore.Components.Icons
70
- ```
71
-
72
- ### 4. Adicionar CSS e JS
73
-
74
- ```html
75
- <!-- Components/App.razor -->
76
- <!DOCTYPE html>
77
- <html lang="pt-BR">
78
- <head>
79
- <meta charset="utf-8" />
80
- <meta name="viewport" content="width=device-width, initial-scale=1.0" />
81
- <base href="/" />
82
-
83
- <!-- Fluent UI CSS -->
84
- <link href="_content/Microsoft.FluentUI.AspNetCore.Components/css/reboot.css" rel="stylesheet" />
85
- <link href="_content/Microsoft.FluentUI.AspNetCore.Components/Microsoft.FluentUI.AspNetCore.Components.min.css" rel="stylesheet" />
86
-
87
- <HeadOutlet />
88
- </head>
89
- <body>
90
- <Routes />
91
-
92
- <!-- Fluent UI JS -->
93
- <script src="_content/Microsoft.FluentUI.AspNetCore.Components/Microsoft.FluentUI.AspNetCore.Components.lib.module.js" type="module"></script>
94
- </body>
95
- </html>
96
- ```
97
-
98
- ---
99
-
100
- ## 🎨 Layout SaaS Padrão
101
-
102
- ### Layout Principal
103
-
104
- ```razor
105
- @* Components/Layout/MainLayout.razor *@
106
- @inherits LayoutComponentBase
107
-
108
- <FluentLayout>
109
- <!-- Header -->
110
- <FluentHeader>
111
- <FluentStack Orientation="Orientation.Horizontal" HorizontalAlignment="HorizontalAlignment.SpaceBetween">
112
- <FluentStack Orientation="Orientation.Horizontal">
113
- <FluentIcon Value="@(new Icons.Regular.Size24.AppGeneric())" Color="Color.Accent" />
114
- <FluentLabel Typo="Typography.H5">Meu SaaS</FluentLabel>
115
- </FluentStack>
116
-
117
- <FluentStack Orientation="Orientation.Horizontal">
118
- <FluentButton Appearance="Appearance.Stealth" IconStart="@(new Icons.Regular.Size20.DarkTheme())">
119
- Dark Mode
120
- </FluentButton>
121
- <FluentPersona Name="@_userName" Image="@_userAvatar" />
122
- </FluentStack>
123
- </FluentStack>
124
- </FluentHeader>
125
-
126
- <!-- Sidebar -->
127
- <FluentNavMenu Width="250">
128
- <FluentNavLink Icon="@(new Icons.Regular.Size20.Home())" Href="/" Match="NavLinkMatch.All">
129
- Dashboard
130
- </FluentNavLink>
131
- <FluentNavLink Icon="@(new Icons.Regular.Size20.People())" Href="/customers">
132
- Clientes
133
- </FluentNavLink>
134
- <FluentNavLink Icon="@(new Icons.Regular.Size20.Cart())" Href="/orders">
135
- Pedidos
136
- </FluentNavLink>
137
- <FluentNavLink Icon="@(new Icons.Regular.Size20.Chat())" Href="/ai-assistant">
138
- AI Assistant
139
- </FluentNavLink>
140
-
141
- <FluentDivider />
142
-
143
- <FluentNavLink Icon="@(new Icons.Regular.Size20.Settings())" Href="/settings">
144
- Configurações
145
- </FluentNavLink>
146
- </FluentNavMenu>
147
-
148
- <!-- Main Content -->
149
- <FluentMain>
150
- <FluentBodyContent>
151
- @Body
152
- </FluentBodyContent>
153
- </FluentMain>
154
- </FluentLayout>
155
-
156
- @code {
157
- private string _userName = "Usuário";
158
- private string _userAvatar = "";
159
- }
160
- ```
161
-
162
- ---
163
-
164
- ## 📋 Componentes Essenciais
165
-
166
- ### Data Grid
167
-
168
- ```razor
169
- @page "/customers"
170
-
171
- <FluentStack Orientation="Orientation.Vertical">
172
- <FluentStack Orientation="Orientation.Horizontal" HorizontalAlignment="HorizontalAlignment.SpaceBetween">
173
- <FluentLabel Typo="Typography.H4">Clientes</FluentLabel>
174
- <FluentButton Appearance="Appearance.Accent" IconStart="@(new Icons.Regular.Size20.Add())">
175
- Novo Cliente
176
- </FluentButton>
177
- </FluentStack>
178
-
179
- <FluentDataGrid Items="@_customers" GridTemplateColumns="1fr 2fr 2fr 1fr">
180
- <PropertyColumn Property="@(c => c.Id)" />
181
- <PropertyColumn Property="@(c => c.Name)" Title="Nome" />
182
- <PropertyColumn Property="@(c => c.Email)" />
183
- <TemplateColumn Title="Ações">
184
- <FluentButton Appearance="Appearance.Stealth" IconStart="@(new Icons.Regular.Size16.Edit())">
185
- Editar
186
- </FluentButton>
187
- </TemplateColumn>
188
- </FluentDataGrid>
189
- </FluentStack>
190
-
191
- @code {
192
- private IQueryable<Customer> _customers = new List<Customer>
193
- {
194
- new() { Id = 1, Name = "João Silva", Email = "joao@example.com" },
195
- new() { Id = 2, Name = "Maria Santos", Email = "maria@example.com" }
196
- }.AsQueryable();
197
- }
198
- ```
199
-
200
- ### Formulários
201
-
202
- ```razor
203
- @page "/customers/new"
204
-
205
- <EditForm Model="@_model" OnValidSubmit="HandleSubmit">
206
- <DataAnnotationsValidator />
207
-
208
- <FluentStack Orientation="Orientation.Vertical">
209
- <FluentLabel Typo="Typography.H4">Novo Cliente</FluentLabel>
210
-
211
- <FluentTextField @bind-Value="_model.Name" Label="Nome" Required />
212
- <FluentValidationMessage For="@(() => _model.Name)" />
213
-
214
- <FluentTextField @bind-Value="_model.Email" Label="Email" TextFieldType="TextFieldType.Email" Required />
215
- <FluentValidationMessage For="@(() => _model.Email)" />
216
-
217
- <FluentTextField @bind-Value="_model.Phone" Label="Telefone" />
218
-
219
- <FluentStack Orientation="Orientation.Horizontal">
220
- <FluentButton Type="ButtonType.Submit" Appearance="Appearance.Accent">
221
- Salvar
222
- </FluentButton>
223
- <FluentButton Appearance="Appearance.Neutral" OnClick="Cancel">
224
- Cancelar
225
- </FluentButton>
226
- </FluentStack>
227
- </FluentStack>
228
- </EditForm>
229
-
230
- @code {
231
- private CustomerFormModel _model = new();
232
-
233
- private async Task HandleSubmit()
234
- {
235
- // Salvar cliente
236
- }
237
-
238
- private void Cancel() => NavigationManager.NavigateTo("/customers");
239
- }
240
- ```
241
-
242
- ### Dialogs e Mensagens
243
-
244
- ```razor
245
- @inject IDialogService DialogService
246
- @inject IMessageService MessageService
247
-
248
- <FluentButton OnClick="ShowDialog">Abrir Dialog</FluentButton>
249
- <FluentButton OnClick="ShowMessage">Mostrar Mensagem</FluentButton>
250
-
251
- @code {
252
- private async Task ShowDialog()
253
- {
254
- var dialog = await DialogService.ShowDialogAsync<ConfirmDialog>(new DialogParameters
255
- {
256
- Title = "Confirmar ação",
257
- PrimaryAction = "Confirmar",
258
- SecondaryAction = "Cancelar"
259
- });
260
-
261
- var result = await dialog.Result;
262
- if (!result.Cancelled)
263
- {
264
- // Ação confirmada
265
- }
266
- }
267
-
268
- private void ShowMessage()
269
- {
270
- MessageService.ShowMessageBar(options =>
271
- {
272
- options.Intent = MessageIntent.Success;
273
- options.Title = "Sucesso!";
274
- options.Body = "Operação realizada com sucesso.";
275
- });
276
- }
277
- }
278
- ```
279
-
280
- ---
281
-
282
- ## 🤖 Componentes AI-Specific
283
-
284
- ### Chat Container
285
-
286
- ```razor
287
- @page "/ai-assistant"
288
- @inject IDocumentAssistantAgent Assistant
289
-
290
- <FluentStack Orientation="Orientation.Vertical" Style="height: 100vh;">
291
- <FluentLabel Typo="Typography.H4">AI Assistant</FluentLabel>
292
-
293
- <!-- Messages Area -->
294
- <FluentScrollArea Style="flex: 1; overflow-y: auto;">
295
- <FluentStack Orientation="Orientation.Vertical">
296
- @foreach (var message in _messages)
297
- {
298
- <FluentMessageBar Intent="@(message.IsUser ? MessageIntent.Info : MessageIntent.Success)">
299
- <FluentLabel Weight="FontWeight.Bold">
300
- @(message.IsUser ? "Você" : "AI Assistant")
301
- </FluentLabel>
302
- <FluentLabel>@message.Content</FluentLabel>
303
- </FluentMessageBar>
304
- }
305
-
306
- @if (_isTyping)
307
- {
308
- <FluentProgress />
309
- <FluentLabel Typo="Typography.Caption">AI está digitando...</FluentLabel>
310
- }
311
- </FluentStack>
312
- </FluentScrollArea>
313
-
314
- <!-- Input Area -->
315
- <FluentStack Orientation="Orientation.Horizontal">
316
- <FluentTextField @bind-Value="_userInput"
317
- Placeholder="Digite sua pergunta..."
318
- Style="flex: 1;"
319
- @onkeypress="HandleKeyPress" />
320
- <FluentButton Appearance="Appearance.Accent"
321
- IconStart="@(new Icons.Regular.Size20.Send())"
322
- OnClick="SendMessage"
323
- Disabled="@_isTyping">
324
- Enviar
325
- </FluentButton>
326
- </FluentStack>
327
- </FluentStack>
328
-
329
- @code {
330
- private List<ChatMessage> _messages = new();
331
- private string _userInput = "";
332
- private bool _isTyping;
333
-
334
- private async Task SendMessage()
335
- {
336
- if (string.IsNullOrWhiteSpace(_userInput)) return;
337
-
338
- // Adicionar mensagem do usuário
339
- _messages.Add(new ChatMessage { Content = _userInput, IsUser = true });
340
- var question = _userInput;
341
- _userInput = "";
342
- _isTyping = true;
343
-
344
- // Obter resposta do AI
345
- var response = await Assistant.AskQuestionAsync(question);
346
- _messages.Add(new ChatMessage { Content = response, IsUser = false });
347
-
348
- _isTyping = false;
349
- }
350
-
351
- private async Task HandleKeyPress(KeyboardEventArgs e)
352
- {
353
- if (e.Key == "Enter" && !e.ShiftKey)
354
- {
355
- await SendMessage();
356
- }
357
- }
358
-
359
- public class ChatMessage
360
- {
361
- public string Content { get; set; } = "";
362
- public bool IsUser { get; set; }
363
- }
364
- }
365
- ```
366
-
367
- ### Streaming Response
368
-
369
- ```razor
370
- @page "/ai-stream"
371
-
372
- <FluentStack Orientation="Orientation.Vertical">
373
- <FluentTextField @bind-Value="_prompt" Label="Prompt" />
374
- <FluentButton OnClick="GenerateStream">Gerar (Streaming)</FluentButton>
375
-
376
- <FluentCard>
377
- <FluentLabel>@_streamedContent</FluentLabel>
378
- @if (_isStreaming)
379
- {
380
- <FluentProgressRing />
381
- }
382
- </FluentCard>
383
- </FluentStack>
384
-
385
- @code {
386
- private string _prompt = "";
387
- private string _streamedContent = "";
388
- private bool _isStreaming;
389
-
390
- private async Task GenerateStream()
391
- {
392
- _streamedContent = "";
393
- _isStreaming = true;
394
-
395
- // Simular streaming (substituir com Agent Framework real)
396
- var words = "Esta é uma resposta simulada do AI assistant em streaming.".Split(' ');
397
- foreach (var word in words)
398
- {
399
- _streamedContent += word + " ";
400
- StateHasChanged();
401
- await Task.Delay(200);
402
- }
403
-
404
- _isStreaming = false;
405
- }
406
- }
407
- ```
408
-
409
- ---
410
-
411
- ## 🎨 Temas e Dark Mode
412
-
413
- ### Configurar Theme Provider
414
-
415
- ```razor
416
- <!-- App.razor -->
417
- <FluentDesignTheme @bind-Mode="@_theme"
418
- StorageName="theme-preference"
419
- OfficeColor="OfficeColor.Default" />
420
-
421
- <FluentLayout>
422
- <!-- Conteúdo -->
423
- </FluentLayout>
424
-
425
- @code {
426
- private DesignThemeModes _theme = DesignThemeModes.System;
427
- }
428
- ```
429
-
430
- ### Toggle Dark Mode
431
-
432
- ```razor
433
- <FluentSwitch @bind-Value="_isDarkMode"
434
- @bind-Value:after="ToggleTheme"
435
- Label="@(_isDarkMode ? "Dark Mode" : "Light Mode")" />
436
-
437
- @code {
438
- private bool _isDarkMode;
439
-
440
- private void ToggleTheme()
441
- {
442
- _theme = _isDarkMode ? DesignThemeModes.Dark : DesignThemeModes.Light;
443
- }
444
- }
445
- ```
446
-
447
- ---
448
-
449
- ## 🔄 Abordagem Híbrida (Fluent UI + MudBlazor)
450
-
451
- ### Quando Adicionar MudBlazor
452
-
453
- Use MudBlazor para:
454
- - **DataGrid complexo** - filtros avançados, agrupamento, export
455
- - **Charts** - MudChart para dashboards analytics
456
- - **Calendar/Scheduler** - se precisar de componentes avançados
457
-
458
- ### Setup Híbrido
459
-
460
- ```bash
461
- dotnet add package Microsoft.FluentUI.AspNetCore.Components
462
- dotnet add package MudBlazor
463
- ```
464
-
465
- ```csharp
466
- // Program.cs
467
- builder.Services.AddFluentUIComponents();
468
- builder.Services.AddMudServices();
469
- ```
470
-
471
- ```html
472
- <!-- App.razor -->
473
- <!-- Fluent UI CSS -->
474
- <link href="_content/Microsoft.FluentUI.AspNetCore.Components/Microsoft.FluentUI.AspNetCore.Components.min.css" rel="stylesheet" />
475
-
476
- <!-- MudBlazor CSS -->
477
- <link href="_content/MudBlazor/MudBlazor.min.css" rel="stylesheet" />
478
- ```
479
-
480
- ### Exemplo de Uso Combinado
481
-
482
- ```razor
483
- @* Layout com Fluent UI *@
484
- <FluentLayout>
485
- <FluentHeader>...</FluentHeader>
486
-
487
- <FluentMain>
488
- @* Grid complexo com MudBlazor *@
489
- <MudDataGrid T="Order"
490
- Items="@_orders"
491
- Filterable="true"
492
- Groupable="true"
493
- Dense="true">
494
- <Columns>
495
- <PropertyColumn Property="x => x.OrderNumber" Title="Número" />
496
- <PropertyColumn Property="x => x.Total" Title="Total" Format="C2" />
497
- </Columns>
498
- </MudDataGrid>
499
-
500
- @* Chat com Fluent UI *@
501
- <FluentMessageBar Intent="MessageIntent.Success">
502
- Pedido criado com sucesso!
503
- </FluentMessageBar>
504
- </FluentMain>
505
- </FluentLayout>
506
- ```
507
-
508
- ---
509
-
510
- ## 📊 Performance Tips
511
-
512
- ### Bundle Size
513
-
514
- ```xml
515
- <!-- .csproj -->
516
- <PropertyGroup>
517
- <!-- Trimming para reduzir bundle -->
518
- <PublishTrimmed>true</PublishTrimmed>
519
- <TrimMode>link</TrimMode>
520
- </PropertyGroup>
521
- ```
522
-
523
- ### Lazy Loading de Componentes
524
-
525
- ```razor
526
- @* Carregar MudBlazor só quando necessário *@
527
- @if (_showComplexGrid)
528
- {
529
- <MudDataGrid ... />
530
- }
531
- else
532
- {
533
- <FluentDataGrid ... />
534
- }
535
- ```
536
-
537
- ---
538
-
539
- ## ✅ Checklist de Implementação
540
-
541
- - [ ] Package `Microsoft.FluentUI.AspNetCore.Components` instalado
542
- - [ ] `AddFluentUIComponents()` no Program.cs
543
- - [ ] CSS e JS referenciados no App.razor
544
- - [ ] _Imports.razor atualizado
545
- - [ ] Layout principal criado com FluentLayout
546
- - [ ] Navegação configurada com FluentNavMenu
547
- - [ ] Theme provider configurado
548
- - [ ] Dark mode funcional
549
- - [ ] Componentes AI (chat) implementados se aplicável
550
- - [ ] (Opcional) MudBlazor adicionado para grids/charts complexos
551
-
552
- ---
553
-
554
- ## 🚫 O Que NÃO Fazer
555
-
556
- ❌ Misturar estilos - use Fluent UI OU MudBlazor consistentemente
557
- ❌ Importar todas as libs sem necessidade (bundle size)
558
- ❌ Ignorar acessibilidade (Fluent UI tem nativa)
559
- ❌ Criar componentes customizados sem checar se já existem
560
- ❌ Usar JavaScript customizado (Fluent UI tem tudo em C#)
561
-
562
- ---
563
-
564
- ## 📚 Recursos
565
-
566
- | Recurso | URL |
567
- |---------|-----|
568
- | Documentação Oficial | [fluentui-blazor.net](https://www.fluentui-blazor.net/) |
569
- | GitHub | [github.com/microsoft/fluentui-blazor](https://github.com/microsoft/fluentui-blazor) |
570
- | Exemplos | [fluentui-blazor.net/examples](https://www.fluentui-blazor.net/examples) |
571
- | Icons Explorer | [fluentui-blazor.net/icon-explorer](https://www.fluentui-blazor.net/icon-explorer) |
572
- | MudBlazor (complemento) | [mudblazor.com](https://mudblazor.com/) |
573
-
574
- ---
575
-
576
- ## 🎓 Comparativo Rápido
577
-
578
- | Feature | Fluent UI | MudBlazor | Recomendação |
579
- |---------|-----------|-----------|--------------|
580
- | AI Components | ✅ Nativo | ❌ Não | **Fluent UI** |
581
- | DataGrid | ⚠️ Básico | ✅ Avançado | **MudBlazor** |
582
- | Charts | ❌ Não | ✅ Sim | **MudBlazor** |
583
- | Performance | ✅ Leve | ⚠️ Pesado | **Fluent UI** |
584
- | Microsoft Integration | ✅ Nativo | ❌ Não | **Fluent UI** |
585
- | Templates Prontos | ⚠️ Poucos | ✅ Muitos | **MudBlazor** |
586
- | Futuro AI | ✅ Garantido | ❓ Incerto | **Fluent UI** |
587
-
588
- ---
589
-
590
- *MORPH-SPEC by Polymorphism Tech*