@polymorphism-tech/morph-spec 3.0.1 → 3.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 (316) hide show
  1. package/CLAUDE.md +561 -63
  2. package/LICENSE +72 -72
  3. package/README.md +275 -79
  4. package/bin/detect-agents.js +3 -1
  5. package/bin/morph-spec.js +60 -1
  6. package/bin/render-template.js +61 -14
  7. package/bin/semantic-detect-agents.js +2 -1
  8. package/bin/{task-manager.js → task-manager.cjs} +113 -8
  9. package/bin/validate-agents-skills.js +10 -4
  10. package/bin/validate-agents.js +4 -3
  11. package/docs/api/fonts/Source-Sans-Pro/sourcesanspro-light-webfont.svg +977 -977
  12. package/docs/api/fonts/Source-Sans-Pro/sourcesanspro-regular-webfont.svg +1048 -1048
  13. package/docs/api/scripts/collapse.js +38 -38
  14. package/docs/api/scripts/commonNav.js +28 -28
  15. package/docs/api/scripts/linenumber.js +25 -25
  16. package/docs/api/scripts/nav.js +12 -12
  17. package/docs/api/scripts/polyfill.js +3 -3
  18. package/docs/api/scripts/prettify/Apache-License-2.0.txt +202 -202
  19. package/docs/api/scripts/prettify/lang-css.js +2 -2
  20. package/docs/api/scripts/prettify/prettify.js +28 -28
  21. package/docs/api/scripts/search.js +98 -98
  22. package/docs/api/styles/jsdoc.css +776 -776
  23. package/docs/api/styles/prettify.css +80 -80
  24. package/docs/cli-auto-detection.md +219 -0
  25. package/docs/examples.md +328 -328
  26. package/docs/getting-started.md +3 -3
  27. package/docs/llm-interaction-config.md +735 -0
  28. package/docs/templates.md +418 -418
  29. package/docs/troubleshooting.md +269 -0
  30. package/package.json +7 -3
  31. package/scripts/postinstall.js +132 -132
  32. package/scripts/reorganize-skills.cjs +1 -1
  33. package/scripts/validate-agents-structure.cjs +1 -1
  34. package/scripts/validate-skills.cjs +2 -2
  35. package/src/commands/advance-phase.js +93 -2
  36. package/src/commands/analyze-blazor-concurrency.js +193 -193
  37. package/src/commands/approve.js +221 -0
  38. package/src/commands/capture-pattern.js +121 -0
  39. package/src/commands/create-story.js +5 -2
  40. package/src/commands/deploy.js +780 -780
  41. package/src/commands/detect-agents.js +4 -2
  42. package/src/commands/generate.js +276 -149
  43. package/src/commands/init.js +37 -0
  44. package/src/commands/lint-fluent.js +352 -352
  45. package/src/commands/migrate-state.js +158 -0
  46. package/src/commands/rollback-phase.js +185 -185
  47. package/src/commands/search-patterns.js +126 -0
  48. package/src/commands/session-summary.js +291 -291
  49. package/src/commands/shard-spec.js +224 -224
  50. package/src/commands/spawn-team.js +172 -0
  51. package/src/commands/sprint-status.js +250 -250
  52. package/src/commands/task.js +3 -3
  53. package/src/commands/troubleshoot.js +222 -222
  54. package/src/commands/update.js +36 -0
  55. package/src/commands/upgrade.js +346 -0
  56. package/src/commands/validate-blazor-state.js +210 -210
  57. package/src/commands/validate-blazor.js +156 -156
  58. package/src/commands/validate-css.js +84 -84
  59. package/src/commands/validate-phase.js +221 -221
  60. package/src/generator/.gitkeep +0 -0
  61. package/src/generator/config-generator.js +206 -0
  62. package/src/generator/templates/config.json.template +40 -0
  63. package/src/generator/templates/project.md.template +67 -0
  64. package/src/lib/blazor-concurrency-analyzer.js +288 -288
  65. package/src/lib/blazor-state-validator.js +291 -291
  66. package/src/lib/blazor-validator.js +374 -374
  67. package/src/lib/checkpoint-hooks.js +258 -0
  68. package/src/lib/context-generator.js +7 -4
  69. package/src/lib/css-validator.js +352 -352
  70. package/src/lib/design-system-generator.js +298 -298
  71. package/src/lib/hook-executor.js +2 -1
  72. package/src/lib/learning-system.js +520 -520
  73. package/src/lib/metadata-extractor.js +380 -0
  74. package/src/lib/mockup-generator.js +366 -366
  75. package/src/lib/phase-state-machine.js +214 -0
  76. package/src/lib/stack-resolver.js +148 -0
  77. package/src/lib/standards-context-injector.js +4 -3
  78. package/src/lib/state-manager.js +120 -0
  79. package/src/lib/team-orchestrator.js +2 -1
  80. package/src/lib/template-data-sources.js +325 -0
  81. package/src/lib/troubleshoot-grep.js +204 -194
  82. package/src/lib/troubleshoot-index.js +144 -144
  83. package/src/lib/ui-detector.js +350 -350
  84. package/src/lib/validation-runner.js +2 -1
  85. package/src/lib/validators/architecture-validator.js +387 -387
  86. package/src/lib/validators/content-validator.js +351 -0
  87. package/src/lib/validators/package-validator.js +360 -360
  88. package/src/lib/validators/ui-contrast-validator.js +422 -422
  89. package/src/llm/.gitkeep +0 -0
  90. package/src/llm/analyzer.js +215 -0
  91. package/src/llm/environment-detector.js +43 -0
  92. package/src/llm/few-shot-examples.js +216 -0
  93. package/src/llm/project-config-schema.json +188 -0
  94. package/src/llm/prompt-builder.js +96 -0
  95. package/src/llm/schema-validator.js +121 -0
  96. package/src/orchestrator.js +206 -0
  97. package/src/sanitizer/.gitkeep +0 -0
  98. package/src/sanitizer/context-sanitizer.js +221 -0
  99. package/src/sanitizer/patterns.js +163 -0
  100. package/src/scanner/.gitkeep +0 -0
  101. package/src/scanner/project-scanner.js +242 -0
  102. package/src/types/index.js +477 -0
  103. package/src/ui/.gitkeep +0 -0
  104. package/src/ui/diff-display.js +91 -0
  105. package/src/ui/interactive-wizard.js +96 -0
  106. package/src/ui/user-review.js +211 -0
  107. package/src/ui/wizard-questions.js +190 -0
  108. package/src/utils/file-copier.js +3 -1
  109. package/src/utils/logger.js +32 -32
  110. package/src/utils/version-checker.js +175 -175
  111. package/src/writer/.gitkeep +0 -0
  112. package/src/writer/file-writer.js +86 -0
  113. package/{content → stacks/blazor-azure}/.azure/README.md +2 -2
  114. package/{content → stacks/blazor-azure}/.azure/pipelines/pipeline-variables.yml +1 -1
  115. package/{content → stacks/blazor-azure}/.azure/pipelines/prod-pipeline.yml +1 -1
  116. package/{content → stacks/blazor-azure}/.azure/pipelines/staging-pipeline.yml +1 -1
  117. package/{content → stacks/blazor-azure}/.claude/commands/morph-preflight.md +227 -227
  118. package/{content → stacks/blazor-azure}/.claude/commands/morph-troubleshoot.md +122 -122
  119. package/{content → stacks/blazor-azure}/.claude/skills/level-1-workflows/phase-setup.md +1 -1
  120. package/{content → stacks/blazor-azure}/.morph/docs/workflows/enforcement-pipeline.md +3 -3
  121. package/{content → stacks/blazor-azure}/.morph/hooks/README.md +12 -12
  122. package/{content → stacks/blazor-azure}/.morph/standards/agent-teams-workflow.md +2 -2
  123. package/{content → stacks/blazor-azure}/.morph/standards/migration-guide.md +2 -2
  124. package/{content → stacks/blazor-azure}/.morph/templates/infra/deploy-checklist.md +426 -426
  125. package/stacks/nextjs-supabase/.claude/skills/level-2-domains/backend/dotnet-supabase.md +244 -0
  126. package/stacks/nextjs-supabase/.claude/skills/level-2-domains/frontend/nextjs-supabase.md +335 -0
  127. package/stacks/nextjs-supabase/.claude/skills/level-2-domains/infrastructure/easypanel-deployer.md +189 -0
  128. package/stacks/nextjs-supabase/.claude/skills/level-2-domains/integrations/supabase-expert.md +170 -0
  129. package/stacks/nextjs-supabase/.morph/config/agents.json +345 -0
  130. package/stacks/nextjs-supabase/.morph/config/config.template.json +92 -0
  131. package/stacks/nextjs-supabase/.morph/docs/easypanel-setup.md +169 -0
  132. package/stacks/nextjs-supabase/.morph/docs/supabase-mcp-setup.md +247 -0
  133. package/stacks/nextjs-supabase/.morph/examples/crud-nextjs-supabase/README.md +697 -0
  134. package/stacks/nextjs-supabase/.morph/examples/crud-nextjs-supabase/spec.md +85 -0
  135. package/stacks/nextjs-supabase/.morph/examples/crud-nextjs-supabase/tasks.md +86 -0
  136. package/stacks/nextjs-supabase/.morph/examples/saas-nextjs-supabase/README.md +498 -0
  137. package/stacks/nextjs-supabase/.morph/examples/saas-nextjs-supabase/decisions.md +121 -0
  138. package/stacks/nextjs-supabase/.morph/examples/saas-nextjs-supabase/spec.md +138 -0
  139. package/stacks/nextjs-supabase/.morph/examples/saas-nextjs-supabase/tasks.md +162 -0
  140. package/stacks/nextjs-supabase/.morph/project.md +168 -0
  141. package/stacks/nextjs-supabase/.morph/standards/easypanel-deploy.md +191 -0
  142. package/stacks/nextjs-supabase/.morph/standards/nextjs-patterns.md +193 -0
  143. package/stacks/nextjs-supabase/.morph/standards/supabase-auth.md +171 -0
  144. package/stacks/nextjs-supabase/.morph/standards/supabase-pgvector.md +164 -0
  145. package/stacks/nextjs-supabase/.morph/standards/supabase-rls.md +179 -0
  146. package/stacks/nextjs-supabase/.morph/standards/supabase-storage.md +148 -0
  147. package/stacks/nextjs-supabase/.morph/templates/contracts.cs +173 -0
  148. package/stacks/nextjs-supabase/.morph/templates/contracts.ts +168 -0
  149. package/stacks/nextjs-supabase/.morph/templates/decisions.md +115 -0
  150. package/stacks/nextjs-supabase/.morph/templates/dockerfile-api.dockerfile +38 -0
  151. package/stacks/nextjs-supabase/.morph/templates/dockerfile-web.dockerfile +48 -0
  152. package/stacks/nextjs-supabase/.morph/templates/proposal.md +145 -0
  153. package/stacks/nextjs-supabase/.morph/templates/recap.md +134 -0
  154. package/stacks/nextjs-supabase/.morph/templates/rls-policy.sql +57 -0
  155. package/stacks/nextjs-supabase/.morph/templates/spec.md +231 -0
  156. package/stacks/nextjs-supabase/.morph/templates/supabase-migration.sql +100 -0
  157. package/stacks/nextjs-supabase/.morph/templates/tasks.md +257 -0
  158. package/stacks/nextjs-supabase/CLAUDE.md +149 -0
  159. package/stacks/nextjs-supabase/README.md +112 -0
  160. /package/{content → stacks/blazor-azure}/.azure/docs/azure-devops-setup.md +0 -0
  161. /package/{content → stacks/blazor-azure}/.azure/docs/branch-strategy.md +0 -0
  162. /package/{content → stacks/blazor-azure}/.azure/docs/local-development.md +0 -0
  163. /package/{content → stacks/blazor-azure}/.azure/pipelines/templates/build-dotnet.yml +0 -0
  164. /package/{content → stacks/blazor-azure}/.azure/pipelines/templates/deploy-app-service.yml +0 -0
  165. /package/{content → stacks/blazor-azure}/.azure/pipelines/templates/deploy-container-app.yml +0 -0
  166. /package/{content → stacks/blazor-azure}/.azure/pipelines/templates/infra-deploy.yml +0 -0
  167. /package/{content → stacks/blazor-azure}/.claude/commands/morph-apply.md +0 -0
  168. /package/{content → stacks/blazor-azure}/.claude/commands/morph-archive.md +0 -0
  169. /package/{content → stacks/blazor-azure}/.claude/commands/morph-deploy.md +0 -0
  170. /package/{content → stacks/blazor-azure}/.claude/commands/morph-infra.md +0 -0
  171. /package/{content → stacks/blazor-azure}/.claude/commands/morph-proposal.md +0 -0
  172. /package/{content → stacks/blazor-azure}/.claude/commands/morph-status.md +0 -0
  173. /package/{content → stacks/blazor-azure}/.claude/settings.local.json +0 -0
  174. /package/{content → stacks/blazor-azure}/.claude/skills/level-0-meta/README.md +0 -0
  175. /package/{content → stacks/blazor-azure}/.claude/skills/level-0-meta/code-review.md +0 -0
  176. /package/{content → stacks/blazor-azure}/.claude/skills/level-0-meta/morph-checklist.md +0 -0
  177. /package/{content → stacks/blazor-azure}/.claude/skills/level-0-meta/simulation-checklist.md +0 -0
  178. /package/{content → stacks/blazor-azure}/.claude/skills/level-1-workflows/README.md +0 -0
  179. /package/{content → stacks/blazor-azure}/.claude/skills/level-1-workflows/morph-replicate.md +0 -0
  180. /package/{content → stacks/blazor-azure}/.claude/skills/level-1-workflows/phase-clarify.md +0 -0
  181. /package/{content → stacks/blazor-azure}/.claude/skills/level-1-workflows/phase-design.md +0 -0
  182. /package/{content → stacks/blazor-azure}/.claude/skills/level-1-workflows/phase-tasks.md +0 -0
  183. /package/{content → stacks/blazor-azure}/.claude/skills/level-1-workflows/phase-uiux.md +0 -0
  184. /package/{content → stacks/blazor-azure}/.claude/skills/level-2-domains/README.md +0 -0
  185. /package/{content → stacks/blazor-azure}/.claude/skills/level-2-domains/ai-agents/ai-system-architect.md +0 -0
  186. /package/{content → stacks/blazor-azure}/.claude/skills/level-2-domains/architecture/po-pm-advisor.md +0 -0
  187. /package/{content → stacks/blazor-azure}/.claude/skills/level-2-domains/architecture/prompt-engineer.md +0 -0
  188. /package/{content → stacks/blazor-azure}/.claude/skills/level-2-domains/architecture/seo-growth-hacker.md +0 -0
  189. /package/{content → stacks/blazor-azure}/.claude/skills/level-2-domains/architecture/standards-architect.md +0 -0
  190. /package/{content → stacks/blazor-azure}/.claude/skills/level-2-domains/backend/dotnet-senior.md +0 -0
  191. /package/{content → stacks/blazor-azure}/.claude/skills/level-2-domains/backend/ef-modeler.md +0 -0
  192. /package/{content → stacks/blazor-azure}/.claude/skills/level-2-domains/backend/hangfire-orchestrator.md +0 -0
  193. /package/{content → stacks/blazor-azure}/.claude/skills/level-2-domains/backend/ms-agent-expert.md +0 -0
  194. /package/{content → stacks/blazor-azure}/.claude/skills/level-2-domains/frontend/blazor-builder.md +0 -0
  195. /package/{content → stacks/blazor-azure}/.claude/skills/level-2-domains/frontend/nextjs-expert.md +0 -0
  196. /package/{content → stacks/blazor-azure}/.claude/skills/level-2-domains/frontend/ui-ux-designer.md +0 -0
  197. /package/{content → stacks/blazor-azure}/.claude/skills/level-2-domains/infrastructure/azure-architect.md +0 -0
  198. /package/{content → stacks/blazor-azure}/.claude/skills/level-2-domains/infrastructure/azure-deploy-specialist.md +0 -0
  199. /package/{content → stacks/blazor-azure}/.claude/skills/level-2-domains/infrastructure/bicep-architect.md +0 -0
  200. /package/{content → stacks/blazor-azure}/.claude/skills/level-2-domains/infrastructure/container-specialist.md +0 -0
  201. /package/{content → stacks/blazor-azure}/.claude/skills/level-2-domains/infrastructure/devops-engineer.md +0 -0
  202. /package/{content → stacks/blazor-azure}/.claude/skills/level-2-domains/integrations/asaas-financial.md +0 -0
  203. /package/{content → stacks/blazor-azure}/.claude/skills/level-2-domains/integrations/azure-identity.md +0 -0
  204. /package/{content → stacks/blazor-azure}/.claude/skills/level-2-domains/integrations/clerk-auth.md +0 -0
  205. /package/{content → stacks/blazor-azure}/.claude/skills/level-2-domains/integrations/resend-email.md +0 -0
  206. /package/{content → stacks/blazor-azure}/.claude/skills/level-2-domains/quality/code-analyzer.md +0 -0
  207. /package/{content → stacks/blazor-azure}/.claude/skills/level-2-domains/quality/testing-specialist.md +0 -0
  208. /package/{content → stacks/blazor-azure}/.claude/skills/level-3-technologies/README.md +0 -0
  209. /package/{content → stacks/blazor-azure}/.claude/skills/level-4-patterns/README.md +0 -0
  210. /package/{content → stacks/blazor-azure}/.morph/.morphversion +0 -0
  211. /package/{content → stacks/blazor-azure}/.morph/archive/.gitkeep +0 -0
  212. /package/{content → stacks/blazor-azure}/.morph/config/agents.json +0 -0
  213. /package/{content → stacks/blazor-azure}/.morph/config/config.template.json +0 -0
  214. /package/{content → stacks/blazor-azure}/.morph/docs/STORY-DRIVEN-DEVELOPMENT.md +0 -0
  215. /package/{content → stacks/blazor-azure}/.morph/docs/workflows/design-impl.md +0 -0
  216. /package/{content → stacks/blazor-azure}/.morph/docs/workflows/fast-track.md +0 -0
  217. /package/{content → stacks/blazor-azure}/.morph/docs/workflows/full-morph.md +0 -0
  218. /package/{content → stacks/blazor-azure}/.morph/docs/workflows/standard.md +0 -0
  219. /package/{content → stacks/blazor-azure}/.morph/docs/workflows/ui-refresh.md +0 -0
  220. /package/{content → stacks/blazor-azure}/.morph/examples/api-nextjs/README.md +0 -0
  221. /package/{content → stacks/blazor-azure}/.morph/examples/api-nextjs/contracts.ts +0 -0
  222. /package/{content → stacks/blazor-azure}/.morph/examples/api-nextjs/spec.md +0 -0
  223. /package/{content → stacks/blazor-azure}/.morph/examples/api-nextjs/tasks.md +0 -0
  224. /package/{content → stacks/blazor-azure}/.morph/examples/micro-saas/README.md +0 -0
  225. /package/{content → stacks/blazor-azure}/.morph/examples/micro-saas/contracts.cs +0 -0
  226. /package/{content → stacks/blazor-azure}/.morph/examples/micro-saas/decisions.md +0 -0
  227. /package/{content → stacks/blazor-azure}/.morph/examples/micro-saas/spec.md +0 -0
  228. /package/{content → stacks/blazor-azure}/.morph/examples/micro-saas/tasks.md +0 -0
  229. /package/{content → stacks/blazor-azure}/.morph/examples/multi-agent/README.md +0 -0
  230. /package/{content → stacks/blazor-azure}/.morph/examples/multi-agent/contracts.cs +0 -0
  231. /package/{content → stacks/blazor-azure}/.morph/examples/multi-agent/spec.md +0 -0
  232. /package/{content → stacks/blazor-azure}/.morph/examples/multi-agent/tasks.md +0 -0
  233. /package/{content → stacks/blazor-azure}/.morph/examples/scheduled-reports/decisions.md +0 -0
  234. /package/{content → stacks/blazor-azure}/.morph/examples/scheduled-reports/proposal.md +0 -0
  235. /package/{content → stacks/blazor-azure}/.morph/examples/scheduled-reports/spec.md +0 -0
  236. /package/{content → stacks/blazor-azure}/.morph/examples/state-v3.json +0 -0
  237. /package/{content → stacks/blazor-azure}/.morph/features/.gitkeep +0 -0
  238. /package/{content → stacks/blazor-azure}/.morph/hooks/pre-commit-agents.sh +0 -0
  239. /package/{content → stacks/blazor-azure}/.morph/hooks/pre-commit-all.sh +0 -0
  240. /package/{content → stacks/blazor-azure}/.morph/hooks/pre-commit-specs.sh +0 -0
  241. /package/{content → stacks/blazor-azure}/.morph/hooks/pre-commit-tests.sh +0 -0
  242. /package/{content → stacks/blazor-azure}/.morph/hooks/task-completed.js +0 -0
  243. /package/{content → stacks/blazor-azure}/.morph/hooks/teammate-idle.js +0 -0
  244. /package/{content → stacks/blazor-azure}/.morph/project.md +0 -0
  245. /package/{content → stacks/blazor-azure}/.morph/schemas/agent.schema.json +0 -0
  246. /package/{content → stacks/blazor-azure}/.morph/schemas/tasks.schema.json +0 -0
  247. /package/{content → stacks/blazor-azure}/.morph/specs/.gitkeep +0 -0
  248. /package/{content → stacks/blazor-azure}/.morph/standards/agent-framework-blazor-ui.md +0 -0
  249. /package/{content → stacks/blazor-azure}/.morph/standards/agent-framework-production.md +0 -0
  250. /package/{content → stacks/blazor-azure}/.morph/standards/agent-framework-setup.md +0 -0
  251. /package/{content → stacks/blazor-azure}/.morph/standards/agent-framework-workflows.md +0 -0
  252. /package/{content → stacks/blazor-azure}/.morph/standards/architecture.md +0 -0
  253. /package/{content → stacks/blazor-azure}/.morph/standards/azure.md +0 -0
  254. /package/{content → stacks/blazor-azure}/.morph/standards/coding.md +0 -0
  255. /package/{content → stacks/blazor-azure}/.morph/standards/dotnet10-migration.md +0 -0
  256. /package/{content → stacks/blazor-azure}/.morph/standards/fluent-ui-setup.md +0 -0
  257. /package/{content → stacks/blazor-azure}/.morph/standards/passkeys-auth.md +0 -0
  258. /package/{content → stacks/blazor-azure}/.morph/standards/vector-search-rag.md +0 -0
  259. /package/{content → stacks/blazor-azure}/.morph/state.json +0 -0
  260. /package/{content → stacks/blazor-azure}/.morph/templates/CONTEXT-FEATURE.md +0 -0
  261. /package/{content → stacks/blazor-azure}/.morph/templates/CONTEXT.md +0 -0
  262. /package/{content → stacks/blazor-azure}/.morph/templates/FluentDesignTheme.cs +0 -0
  263. /package/{content → stacks/blazor-azure}/.morph/templates/MudTheme.cs +0 -0
  264. /package/{content → stacks/blazor-azure}/.morph/templates/agent.cs +0 -0
  265. /package/{content → stacks/blazor-azure}/.morph/templates/clarify-questions.md +0 -0
  266. /package/{content → stacks/blazor-azure}/.morph/templates/component.razor +0 -0
  267. /package/{content → stacks/blazor-azure}/.morph/templates/contracts/Commands.cs +0 -0
  268. /package/{content → stacks/blazor-azure}/.morph/templates/contracts/Entities.cs +0 -0
  269. /package/{content → stacks/blazor-azure}/.morph/templates/contracts/Queries.cs +0 -0
  270. /package/{content → stacks/blazor-azure}/.morph/templates/contracts/README.md +0 -0
  271. /package/{content → stacks/blazor-azure}/.morph/templates/contracts.cs +0 -0
  272. /package/{content → stacks/blazor-azure}/.morph/templates/decisions.md +0 -0
  273. /package/{content → stacks/blazor-azure}/.morph/templates/design-system.css +0 -0
  274. /package/{content → stacks/blazor-azure}/.morph/templates/infra/.dockerignore.example +0 -0
  275. /package/{content → stacks/blazor-azure}/.morph/templates/infra/Dockerfile.example +0 -0
  276. /package/{content → stacks/blazor-azure}/.morph/templates/infra/README.md +0 -0
  277. /package/{content → stacks/blazor-azure}/.morph/templates/infra/app-insights.bicep +0 -0
  278. /package/{content → stacks/blazor-azure}/.morph/templates/infra/app-service.bicep +0 -0
  279. /package/{content → stacks/blazor-azure}/.morph/templates/infra/azure-pipelines-deploy.yml +0 -0
  280. /package/{content → stacks/blazor-azure}/.morph/templates/infra/container-app-env.bicep +0 -0
  281. /package/{content → stacks/blazor-azure}/.morph/templates/infra/container-app.bicep +0 -0
  282. /package/{content → stacks/blazor-azure}/.morph/templates/infra/deploy.ps1 +0 -0
  283. /package/{content → stacks/blazor-azure}/.morph/templates/infra/deploy.sh +0 -0
  284. /package/{content → stacks/blazor-azure}/.morph/templates/infra/key-vault.bicep +0 -0
  285. /package/{content → stacks/blazor-azure}/.morph/templates/infra/main.bicep +0 -0
  286. /package/{content → stacks/blazor-azure}/.morph/templates/infra/parameters.dev.json +0 -0
  287. /package/{content → stacks/blazor-azure}/.morph/templates/infra/parameters.prod.json +0 -0
  288. /package/{content → stacks/blazor-azure}/.morph/templates/infra/parameters.staging.json +0 -0
  289. /package/{content → stacks/blazor-azure}/.morph/templates/infra/sql-database.bicep +0 -0
  290. /package/{content → stacks/blazor-azure}/.morph/templates/infra/storage.bicep +0 -0
  291. /package/{content → stacks/blazor-azure}/.morph/templates/integrations/asaas-client.cs +0 -0
  292. /package/{content → stacks/blazor-azure}/.morph/templates/integrations/asaas-webhook.cs +0 -0
  293. /package/{content → stacks/blazor-azure}/.morph/templates/integrations/azure-identity-config.cs +0 -0
  294. /package/{content → stacks/blazor-azure}/.morph/templates/integrations/clerk-config.cs +0 -0
  295. /package/{content → stacks/blazor-azure}/.morph/templates/job.cs +0 -0
  296. /package/{content → stacks/blazor-azure}/.morph/templates/migration.cs +0 -0
  297. /package/{content → stacks/blazor-azure}/.morph/templates/proposal.md +0 -0
  298. /package/{content → stacks/blazor-azure}/.morph/templates/recap.md +0 -0
  299. /package/{content → stacks/blazor-azure}/.morph/templates/repository.cs +0 -0
  300. /package/{content → stacks/blazor-azure}/.morph/templates/saas/subscription.cs +0 -0
  301. /package/{content → stacks/blazor-azure}/.morph/templates/saas/tenant.cs +0 -0
  302. /package/{content → stacks/blazor-azure}/.morph/templates/service.cs +0 -0
  303. /package/{content → stacks/blazor-azure}/.morph/templates/simulation.md +0 -0
  304. /package/{content → stacks/blazor-azure}/.morph/templates/spec.md +0 -0
  305. /package/{content → stacks/blazor-azure}/.morph/templates/sprint-status.yaml +0 -0
  306. /package/{content → stacks/blazor-azure}/.morph/templates/state.template.json +0 -0
  307. /package/{content → stacks/blazor-azure}/.morph/templates/story.md +0 -0
  308. /package/{content → stacks/blazor-azure}/.morph/templates/tasks.md +0 -0
  309. /package/{content → stacks/blazor-azure}/.morph/templates/test.cs +0 -0
  310. /package/{content → stacks/blazor-azure}/.morph/templates/ui-components.md +0 -0
  311. /package/{content → stacks/blazor-azure}/.morph/templates/ui-design-system.md +0 -0
  312. /package/{content → stacks/blazor-azure}/.morph/templates/ui-flows.md +0 -0
  313. /package/{content → stacks/blazor-azure}/.morph/templates/ui-mockups.md +0 -0
  314. /package/{content → stacks/blazor-azure}/.morph/test-infra/example.bicep +0 -0
  315. /package/{content → stacks/blazor-azure}/CLAUDE.md +0 -0
  316. /package/{content → stacks/blazor-azure}/README.md +0 -0
@@ -1,156 +1,156 @@
1
- /**
2
- * validate-blazor command
3
- *
4
- * Validates Fluent UI Blazor patterns and icons in Razor files.
5
- *
6
- * Usage:
7
- * morph-spec validate-blazor [path]
8
- * morph-spec validate-blazor src/Components --verbose
9
- */
10
-
11
- import { glob } from 'glob';
12
- import { readFileSync, existsSync, statSync } from 'fs';
13
- import { join, resolve } from 'path';
14
- import chalk from 'chalk';
15
- import ora from 'ora';
16
-
17
- import {
18
- validateBlazorFile,
19
- formatIssues,
20
- countIssues,
21
- } from '../lib/blazor-validator.js';
22
-
23
- /**
24
- * Main command handler for validate-blazor.
25
- *
26
- * @param {string} [targetPath] - Path to validate (file or directory)
27
- * @param {Object} options - Command options
28
- * @param {boolean} [options.verbose] - Show detailed output
29
- * @param {boolean} [options.fix] - Auto-fix issues where possible
30
- */
31
- export async function validateBlazorCommand(targetPath, options = {}) {
32
- const { verbose = false } = options;
33
-
34
- console.log('');
35
- console.log(
36
- chalk.cyan('\uD83D\uDD0D Validating Fluent UI Blazor patterns...')
37
- );
38
- console.log('');
39
-
40
- // Determine target path
41
- const basePath = targetPath ? resolve(targetPath) : process.cwd();
42
-
43
- if (!existsSync(basePath)) {
44
- console.log(chalk.red(`\u274C Path not found: ${basePath}`));
45
- process.exit(1);
46
- }
47
-
48
- const spinner = ora('Scanning for Razor files...').start();
49
-
50
- let files = [];
51
-
52
- try {
53
- const stats = statSync(basePath);
54
-
55
- if (stats.isFile()) {
56
- // Single file
57
- if (
58
- basePath.endsWith('.razor') ||
59
- basePath.endsWith('.razor.cs') ||
60
- basePath.endsWith('.cs')
61
- ) {
62
- files = [basePath];
63
- } else {
64
- spinner.fail('File must be .razor or .cs');
65
- process.exit(1);
66
- }
67
- } else {
68
- // Directory - find all Razor files
69
- const pattern = join(basePath, '**/*.{razor,razor.cs}');
70
- files = await glob(pattern, {
71
- ignore: ['**/node_modules/**', '**/bin/**', '**/obj/**'],
72
- windowsPathsNoEscape: true,
73
- });
74
- }
75
-
76
- spinner.succeed(`Found ${files.length} Razor file(s)`);
77
- } catch (error) {
78
- spinner.fail(`Error scanning files: ${error.message}`);
79
- process.exit(1);
80
- }
81
-
82
- if (files.length === 0) {
83
- console.log(chalk.yellow('\n\u26A0\uFE0F No Razor files found to validate'));
84
- return;
85
- }
86
-
87
- // Validate each file
88
- const allIssues = [];
89
- const fileResults = [];
90
-
91
- for (const file of files) {
92
- try {
93
- const content = readFileSync(file, 'utf-8');
94
- const issues = validateBlazorFile(content, file);
95
-
96
- if (issues.length > 0) {
97
- allIssues.push(...issues);
98
- fileResults.push({ file, issues });
99
- }
100
- } catch (error) {
101
- console.log(chalk.red(`\u274C Error reading ${file}: ${error.message}`));
102
- }
103
- }
104
-
105
- // Output results
106
- console.log('');
107
-
108
- if (allIssues.length === 0) {
109
- console.log(
110
- chalk.green('\u2705 No issues found! All patterns look correct.')
111
- );
112
- console.log('');
113
- return;
114
- }
115
-
116
- // Group and display issues
117
- if (verbose) {
118
- // Verbose: show all issues with details
119
- fileResults.forEach(({ file, issues }) => {
120
- console.log(chalk.white.bold(`\n${file}`));
121
- console.log(chalk.gray('-'.repeat(60)));
122
- console.log(formatIssues(issues));
123
- });
124
- } else {
125
- // Compact: just list issues
126
- allIssues.forEach((issue) => {
127
- const icon = issue.type === 'error' ? '\u274C' : '\u26A0\uFE0F';
128
- const location = issue.line ? `${issue.file}:${issue.line}` : issue.file;
129
-
130
- console.log(`${icon} ${issue.message}`);
131
- if (issue.suggestion) {
132
- console.log(chalk.gray(` \u2192 ${issue.suggestion}`));
133
- }
134
- console.log(chalk.dim(` ${location}`));
135
- console.log('');
136
- });
137
- }
138
-
139
- // Summary
140
- const { errors, warnings } = countIssues(allIssues);
141
- const summaryColor = errors > 0 ? chalk.red : chalk.yellow;
142
-
143
- console.log(chalk.gray('-'.repeat(60)));
144
- console.log(
145
- summaryColor(
146
- `\n${files.length} arquivo(s) validado(s) | ${errors} erro(s) | ${warnings} warning(s)\n`
147
- )
148
- );
149
-
150
- // Exit with error code if there are errors
151
- if (errors > 0) {
152
- process.exit(1);
153
- }
154
- }
155
-
156
- export default validateBlazorCommand;
1
+ /**
2
+ * validate-blazor command
3
+ *
4
+ * Validates Fluent UI Blazor patterns and icons in Razor files.
5
+ *
6
+ * Usage:
7
+ * morph-spec validate-blazor [path]
8
+ * morph-spec validate-blazor src/Components --verbose
9
+ */
10
+
11
+ import { glob } from 'glob';
12
+ import { readFileSync, existsSync, statSync } from 'fs';
13
+ import { join, resolve } from 'path';
14
+ import chalk from 'chalk';
15
+ import ora from 'ora';
16
+
17
+ import {
18
+ validateBlazorFile,
19
+ formatIssues,
20
+ countIssues,
21
+ } from '../lib/blazor-validator.js';
22
+
23
+ /**
24
+ * Main command handler for validate-blazor.
25
+ *
26
+ * @param {string} [targetPath] - Path to validate (file or directory)
27
+ * @param {Object} options - Command options
28
+ * @param {boolean} [options.verbose] - Show detailed output
29
+ * @param {boolean} [options.fix] - Auto-fix issues where possible
30
+ */
31
+ export async function validateBlazorCommand(targetPath, options = {}) {
32
+ const { verbose = false } = options;
33
+
34
+ console.log('');
35
+ console.log(
36
+ chalk.cyan('\uD83D\uDD0D Validating Fluent UI Blazor patterns...')
37
+ );
38
+ console.log('');
39
+
40
+ // Determine target path
41
+ const basePath = targetPath ? resolve(targetPath) : process.cwd();
42
+
43
+ if (!existsSync(basePath)) {
44
+ console.log(chalk.red(`\u274C Path not found: ${basePath}`));
45
+ process.exit(1);
46
+ }
47
+
48
+ const spinner = ora('Scanning for Razor files...').start();
49
+
50
+ let files = [];
51
+
52
+ try {
53
+ const stats = statSync(basePath);
54
+
55
+ if (stats.isFile()) {
56
+ // Single file
57
+ if (
58
+ basePath.endsWith('.razor') ||
59
+ basePath.endsWith('.razor.cs') ||
60
+ basePath.endsWith('.cs')
61
+ ) {
62
+ files = [basePath];
63
+ } else {
64
+ spinner.fail('File must be .razor or .cs');
65
+ process.exit(1);
66
+ }
67
+ } else {
68
+ // Directory - find all Razor files
69
+ const pattern = join(basePath, '**/*.{razor,razor.cs}');
70
+ files = await glob(pattern, {
71
+ ignore: ['**/node_modules/**', '**/bin/**', '**/obj/**'],
72
+ windowsPathsNoEscape: true,
73
+ });
74
+ }
75
+
76
+ spinner.succeed(`Found ${files.length} Razor file(s)`);
77
+ } catch (error) {
78
+ spinner.fail(`Error scanning files: ${error.message}`);
79
+ process.exit(1);
80
+ }
81
+
82
+ if (files.length === 0) {
83
+ console.log(chalk.yellow('\n\u26A0\uFE0F No Razor files found to validate'));
84
+ return;
85
+ }
86
+
87
+ // Validate each file
88
+ const allIssues = [];
89
+ const fileResults = [];
90
+
91
+ for (const file of files) {
92
+ try {
93
+ const content = readFileSync(file, 'utf-8');
94
+ const issues = validateBlazorFile(content, file);
95
+
96
+ if (issues.length > 0) {
97
+ allIssues.push(...issues);
98
+ fileResults.push({ file, issues });
99
+ }
100
+ } catch (error) {
101
+ console.log(chalk.red(`\u274C Error reading ${file}: ${error.message}`));
102
+ }
103
+ }
104
+
105
+ // Output results
106
+ console.log('');
107
+
108
+ if (allIssues.length === 0) {
109
+ console.log(
110
+ chalk.green('\u2705 No issues found! All patterns look correct.')
111
+ );
112
+ console.log('');
113
+ return;
114
+ }
115
+
116
+ // Group and display issues
117
+ if (verbose) {
118
+ // Verbose: show all issues with details
119
+ fileResults.forEach(({ file, issues }) => {
120
+ console.log(chalk.white.bold(`\n${file}`));
121
+ console.log(chalk.gray('-'.repeat(60)));
122
+ console.log(formatIssues(issues));
123
+ });
124
+ } else {
125
+ // Compact: just list issues
126
+ allIssues.forEach((issue) => {
127
+ const icon = issue.type === 'error' ? '\u274C' : '\u26A0\uFE0F';
128
+ const location = issue.line ? `${issue.file}:${issue.line}` : issue.file;
129
+
130
+ console.log(`${icon} ${issue.message}`);
131
+ if (issue.suggestion) {
132
+ console.log(chalk.gray(` \u2192 ${issue.suggestion}`));
133
+ }
134
+ console.log(chalk.dim(` ${location}`));
135
+ console.log('');
136
+ });
137
+ }
138
+
139
+ // Summary
140
+ const { errors, warnings } = countIssues(allIssues);
141
+ const summaryColor = errors > 0 ? chalk.red : chalk.yellow;
142
+
143
+ console.log(chalk.gray('-'.repeat(60)));
144
+ console.log(
145
+ summaryColor(
146
+ `\n${files.length} arquivo(s) validado(s) | ${errors} erro(s) | ${warnings} warning(s)\n`
147
+ )
148
+ );
149
+
150
+ // Exit with error code if there are errors
151
+ if (errors > 0) {
152
+ process.exit(1);
153
+ }
154
+ }
155
+
156
+ export default validateBlazorCommand;
@@ -1,84 +1,84 @@
1
- /**
2
- * MORPH-SPEC validate-css Command
3
- *
4
- * Validates that all CSS classes used in Razor files are defined in CSS files.
5
- * Helps catch missing CSS definitions before runtime.
6
- *
7
- * Usage:
8
- * morph-spec validate-css [path]
9
- * morph-spec validate-css src/MyApp.Web
10
- * morph-spec validate-css --verbose
11
- * morph-spec validate-css --generate-stub
12
- */
13
-
14
- import chalk from 'chalk';
15
- import { existsSync, writeFileSync } from 'fs';
16
- import { resolve, join } from 'path';
17
- import {
18
- validateCssClasses,
19
- formatValidationResults,
20
- generateCssStub
21
- } from '../lib/css-validator.js';
22
-
23
- /**
24
- * Execute the validate-css command
25
- * @param {string} path - Project path to validate
26
- * @param {Object} options - Command options
27
- */
28
- export async function validateCssCommand(path, options = {}) {
29
- const projectPath = resolve(path || '.');
30
- const { verbose, generateStub, includeUtilities } = options;
31
-
32
- // Validate path exists
33
- if (!existsSync(projectPath)) {
34
- console.error(chalk.red(`\n Error: Path does not exist: ${projectPath}\n`));
35
- process.exit(1);
36
- }
37
-
38
- console.log(chalk.cyan('\n Validating CSS classes...\n'));
39
- console.log(chalk.gray(` Path: ${projectPath}`));
40
- console.log('');
41
-
42
- try {
43
- // Run validation
44
- const results = await validateCssClasses(projectPath, {
45
- verbose,
46
- includeUtilities
47
- });
48
-
49
- // Output results
50
- const formatted = formatValidationResults(results, verbose);
51
- console.log(formatted);
52
-
53
- // Generate stub if requested
54
- if (generateStub && !results.valid) {
55
- const stubContent = generateCssStub(results);
56
- const stubPath = join(projectPath, 'missing-classes.css');
57
-
58
- writeFileSync(stubPath, stubContent, 'utf8');
59
- console.log(chalk.green(`\n Generated stub file: ${stubPath}\n`));
60
- }
61
-
62
- // Summary with colors
63
- if (results.valid) {
64
- console.log(chalk.green('\n All CSS classes are properly defined!\n'));
65
- process.exit(0);
66
- } else {
67
- console.log(chalk.yellow(`\n Found ${results.missingClasses.length} missing CSS class(es)\n`));
68
-
69
- // Suggestions
70
- console.log(chalk.cyan('Suggestions:'));
71
- console.log(chalk.gray(' 1. Add the missing classes to your design-system.css'));
72
- console.log(chalk.gray(' 2. Run with --generate-stub to create a template file'));
73
- console.log(chalk.gray(' 3. If using utility frameworks (Tailwind), add --include-utilities\n'));
74
-
75
- process.exit(1);
76
- }
77
- } catch (error) {
78
- console.error(chalk.red(`\n Error: ${error.message}\n`));
79
- if (verbose) {
80
- console.error(error.stack);
81
- }
82
- process.exit(1);
83
- }
84
- }
1
+ /**
2
+ * MORPH-SPEC validate-css Command
3
+ *
4
+ * Validates that all CSS classes used in Razor files are defined in CSS files.
5
+ * Helps catch missing CSS definitions before runtime.
6
+ *
7
+ * Usage:
8
+ * morph-spec validate-css [path]
9
+ * morph-spec validate-css src/MyApp.Web
10
+ * morph-spec validate-css --verbose
11
+ * morph-spec validate-css --generate-stub
12
+ */
13
+
14
+ import chalk from 'chalk';
15
+ import { existsSync, writeFileSync } from 'fs';
16
+ import { resolve, join } from 'path';
17
+ import {
18
+ validateCssClasses,
19
+ formatValidationResults,
20
+ generateCssStub
21
+ } from '../lib/css-validator.js';
22
+
23
+ /**
24
+ * Execute the validate-css command
25
+ * @param {string} path - Project path to validate
26
+ * @param {Object} options - Command options
27
+ */
28
+ export async function validateCssCommand(path, options = {}) {
29
+ const projectPath = resolve(path || '.');
30
+ const { verbose, generateStub, includeUtilities } = options;
31
+
32
+ // Validate path exists
33
+ if (!existsSync(projectPath)) {
34
+ console.error(chalk.red(`\n Error: Path does not exist: ${projectPath}\n`));
35
+ process.exit(1);
36
+ }
37
+
38
+ console.log(chalk.cyan('\n Validating CSS classes...\n'));
39
+ console.log(chalk.gray(` Path: ${projectPath}`));
40
+ console.log('');
41
+
42
+ try {
43
+ // Run validation
44
+ const results = await validateCssClasses(projectPath, {
45
+ verbose,
46
+ includeUtilities
47
+ });
48
+
49
+ // Output results
50
+ const formatted = formatValidationResults(results, verbose);
51
+ console.log(formatted);
52
+
53
+ // Generate stub if requested
54
+ if (generateStub && !results.valid) {
55
+ const stubContent = generateCssStub(results);
56
+ const stubPath = join(projectPath, 'missing-classes.css');
57
+
58
+ writeFileSync(stubPath, stubContent, 'utf8');
59
+ console.log(chalk.green(`\n Generated stub file: ${stubPath}\n`));
60
+ }
61
+
62
+ // Summary with colors
63
+ if (results.valid) {
64
+ console.log(chalk.green('\n All CSS classes are properly defined!\n'));
65
+ process.exit(0);
66
+ } else {
67
+ console.log(chalk.yellow(`\n Found ${results.missingClasses.length} missing CSS class(es)\n`));
68
+
69
+ // Suggestions
70
+ console.log(chalk.cyan('Suggestions:'));
71
+ console.log(chalk.gray(' 1. Add the missing classes to your design-system.css'));
72
+ console.log(chalk.gray(' 2. Run with --generate-stub to create a template file'));
73
+ console.log(chalk.gray(' 3. If using utility frameworks (Tailwind), add --include-utilities\n'));
74
+
75
+ process.exit(1);
76
+ }
77
+ } catch (error) {
78
+ console.error(chalk.red(`\n Error: ${error.message}\n`));
79
+ if (verbose) {
80
+ console.error(error.stack);
81
+ }
82
+ process.exit(1);
83
+ }
84
+ }