@polymorphism-tech/morph-spec 4.5.0 → 4.7.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 (292) hide show
  1. package/CLAUDE.md +77 -56
  2. package/README.md +394 -700
  3. package/docs/ARCHITECTURE.md +331 -0
  4. package/docs/CHEATSHEET.md +221 -0
  5. package/docs/COMMAND-FLOWS.md +368 -0
  6. package/docs/QUICKSTART.md +212 -0
  7. package/docs/examples/order-management/contracts.cs +84 -0
  8. package/docs/examples/order-management/proposal.md +24 -0
  9. package/docs/examples/order-management/spec.md +162 -0
  10. package/docs/plans/2026-02-23-ddd-architecture-refactor.md +1153 -0
  11. package/docs/plans/2026-02-23-ddd-nextsteps.md +682 -0
  12. package/docs/plans/2026-02-23-infra-architect-refactor.md +437 -0
  13. package/docs/plans/2026-02-23-nextjs-code-review-design.md +156 -0
  14. package/docs/plans/2026-02-23-nextjs-code-review-impl.md +1254 -0
  15. package/docs/plans/2026-02-23-nextjs-standards-design.md +149 -0
  16. package/docs/plans/2026-02-23-nextjs-standards-impl.md +1846 -0
  17. package/framework/{skills/level-2-domains → agents}/README.md +14 -14
  18. package/framework/{skills/level-2-domains → agents}/ai-agents/ai-system-architect.md +1 -4
  19. package/framework/{skills/level-2-domains → agents}/architecture/po-pm-advisor.md +1 -2
  20. package/framework/{skills/level-2-domains → agents}/architecture/prompt-engineer.md +1 -2
  21. package/framework/{skills/level-2-domains → agents}/architecture/seo-growth-hacker.md +1 -2
  22. package/framework/{skills/level-2-domains → agents}/architecture/standards-architect.md +159 -162
  23. package/framework/agents/backend/api-designer.md +103 -0
  24. package/framework/{skills/level-2-domains → agents}/backend/dotnet-senior.md +1 -2
  25. package/framework/agents/backend/ef-modeler.md +119 -0
  26. package/framework/{skills/level-2-domains → agents}/backend/hangfire-orchestrator.md +1 -4
  27. package/framework/{skills/level-2-domains → agents}/backend/ms-agent-expert.md +1 -4
  28. package/framework/{skills/level-2-domains → agents}/frontend/blazor-builder.md +1 -4
  29. package/framework/agents/frontend/nextjs-expert.md +118 -0
  30. package/framework/{skills/level-2-domains → agents}/frontend/ui-ux-designer.md +1 -2
  31. package/framework/{skills/level-2-domains → agents}/infrastructure/azure-architect.md +147 -148
  32. package/framework/{skills/level-2-domains → agents}/infrastructure/azure-deploy-specialist.md +1 -2
  33. package/framework/{skills/level-2-domains → agents}/infrastructure/bicep-architect.md +1 -4
  34. package/framework/{skills/level-2-domains → agents}/infrastructure/container-specialist.md +1 -4
  35. package/framework/{skills/level-2-domains → agents}/infrastructure/devops-engineer.md +1 -4
  36. package/framework/agents/infrastructure/infra-architect.md +45 -0
  37. package/framework/{skills/level-2-domains → agents}/integrations/asaas-financial.md +1 -4
  38. package/framework/{skills/level-2-domains → agents}/integrations/azure-identity.md +1 -4
  39. package/framework/{skills/level-2-domains → agents}/integrations/clerk-auth.md +1 -4
  40. package/framework/{skills/level-2-domains → agents}/integrations/hangfire-integration.md +1 -2
  41. package/framework/{skills/level-2-domains → agents}/integrations/resend-email.md +1 -4
  42. package/framework/{skills/level-2-domains → agents}/quality/code-analyzer.md +1 -4
  43. package/framework/{skills/level-2-domains → agents}/quality/testing-specialist.md +1 -4
  44. package/framework/agents.json +1145 -278
  45. package/framework/hooks/claude-code/statusline.py +384 -85
  46. package/framework/hooks/shared/phase-utils.js +129 -129
  47. package/framework/rules/frontend-standards.md +0 -3
  48. package/framework/rules/nextjs-standards.md +17 -0
  49. package/framework/skills/README.md +66 -0
  50. package/framework/skills/level-0-meta/{brainstorming.md → brainstorming/SKILL.md} +3 -1
  51. package/framework/skills/level-0-meta/brainstorming/references/proposal-example.md +138 -0
  52. package/framework/skills/level-0-meta/{code-review.md → code-review/SKILL.md} +3 -2
  53. package/framework/skills/level-0-meta/code-review/references/review-example.md +164 -0
  54. package/framework/skills/level-0-meta/code-review/scripts/scan-csharp.mjs +121 -0
  55. package/framework/skills/level-0-meta/code-review-nextjs/SKILL.md +147 -0
  56. package/framework/skills/level-0-meta/code-review-nextjs/references/review-example-nextjs.md +254 -0
  57. package/framework/skills/level-0-meta/{morph-checklist.md → morph-checklist/SKILL.md} +2 -5
  58. package/framework/skills/{level-1-workflows/morph-replicate.md → level-0-meta/morph-replicate/SKILL.md} +6 -7
  59. package/framework/skills/level-0-meta/{simulation-checklist.md → simulation-checklist/SKILL.md} +3 -6
  60. package/framework/skills/level-0-meta/{tool-usage-guide.md → tool-usage-guide/SKILL.md} +4 -5
  61. package/framework/skills/level-0-meta/{verification-before-completion.md → verification-before-completion/SKILL.md} +3 -1
  62. package/framework/skills/level-0-meta/verification-before-completion/scripts/check-phase-outputs.mjs +110 -0
  63. package/framework/skills/level-1-workflows/{phase-clarify.md → phase-clarify/SKILL.md} +3 -3
  64. package/framework/skills/level-1-workflows/phase-clarify/references/clarifications-example.md +117 -0
  65. package/framework/skills/level-1-workflows/{phase-codebase-analysis.md → phase-codebase-analysis/SKILL.md} +2 -3
  66. package/framework/skills/level-1-workflows/{phase-design.md → phase-design/SKILL.md} +46 -182
  67. package/framework/skills/level-1-workflows/phase-design/references/spec-example.md +253 -0
  68. package/framework/skills/level-1-workflows/{phase-implement.md → phase-implement/SKILL.md} +3 -3
  69. package/framework/skills/level-1-workflows/phase-implement/references/recap-example.md +132 -0
  70. package/framework/skills/level-1-workflows/{phase-setup.md → phase-setup/SKILL.md} +2 -3
  71. package/framework/skills/level-1-workflows/{phase-tasks.md → phase-tasks/SKILL.md} +42 -3
  72. package/framework/skills/level-1-workflows/phase-tasks/references/tasks-example.md +231 -0
  73. package/framework/skills/level-1-workflows/phase-tasks/scripts/validate-tasks.mjs +112 -0
  74. package/framework/skills/level-1-workflows/{phase-uiux.md → phase-uiux/SKILL.md} +2 -3
  75. package/framework/standards/STANDARDS.json +121 -0
  76. package/framework/standards/architecture/ddd/bounded-contexts.md +105 -0
  77. package/framework/standards/architecture/ddd/complexity-levels.md +108 -0
  78. package/framework/standards/architecture/ddd/ubiquitous-language.md +58 -0
  79. package/framework/standards/frontend/nextjs/app-router.md +123 -0
  80. package/framework/standards/frontend/nextjs/components.md +132 -0
  81. package/framework/standards/frontend/nextjs/data-fetching.md +126 -0
  82. package/framework/standards/frontend/nextjs/forms.md +128 -0
  83. package/framework/standards/frontend/nextjs/naming-conventions.md +67 -0
  84. package/framework/standards/frontend/nextjs/project-structure.md +102 -0
  85. package/framework/standards/frontend/nextjs/state-management.md +72 -0
  86. package/framework/standards/frontend/nextjs/testing.md +111 -0
  87. package/framework/templates/REGISTRY.json +538 -142
  88. package/framework/templates/code/dotnet/contracts/contracts-level1.cs +69 -0
  89. package/framework/templates/code/dotnet/contracts/contracts-level2.cs +86 -0
  90. package/framework/templates/code/dotnet/contracts/contracts-level3.cs +41 -0
  91. package/framework/templates/docs/spec.md +49 -0
  92. package/framework/templates/frontend/nextjs/Dockerfile.nextjs.hbs +43 -0
  93. package/framework/templates/frontend/nextjs/client-component.tsx.hbs +26 -0
  94. package/framework/templates/frontend/nextjs/env.mjs.hbs +32 -0
  95. package/framework/templates/frontend/nextjs/feature-form.tsx.hbs +56 -0
  96. package/framework/templates/frontend/nextjs/page.tsx.hbs +22 -0
  97. package/framework/templates/frontend/nextjs/tsconfig.json.hbs +26 -0
  98. package/framework/templates/frontend/nextjs/use-feature.ts.hbs +54 -0
  99. package/framework/templates/project-structure/dotnet-ddd.md +70 -0
  100. package/framework/workflows/docs/enforcement-pipeline.md +2 -1
  101. package/package.json +1 -1
  102. package/scripts/scan-nextjs.mjs +169 -0
  103. package/src/commands/project/doctor.js +52 -1
  104. package/src/commands/project/init.js +19 -65
  105. package/src/commands/project/update.js +7 -63
  106. package/src/lib/detectors/claude-config-detector.js +1 -3
  107. package/src/lib/standards/standards-context-injector.js +5 -0
  108. package/src/lib/validators/nextjs/index.js +6 -0
  109. package/src/lib/validators/nextjs/next-component-validator.js +181 -0
  110. package/src/lib/validators/validation-runner.js +5 -0
  111. package/src/utils/agents-installer.js +16 -4
  112. package/src/utils/skills-installer.js +59 -15
  113. package/.morph/.morphversion +0 -5
  114. package/.morph/analytics/threads-log.jsonl +0 -44
  115. package/.morph/config/config.json +0 -8
  116. package/.morph/context/README.md +0 -17
  117. package/.morph/framework/agents.json +0 -948
  118. package/.morph/framework/standards/STANDARDS.json +0 -812
  119. package/.morph/framework/standards/ai-agents/blazor-ui.md +0 -364
  120. package/.morph/framework/standards/ai-agents/production.md +0 -415
  121. package/.morph/framework/standards/ai-agents/setup.md +0 -418
  122. package/.morph/framework/standards/ai-agents/team-orchestration.md +0 -479
  123. package/.morph/framework/standards/ai-agents/workflows.md +0 -354
  124. package/.morph/framework/standards/architecture/ddd/aggregates.md +0 -120
  125. package/.morph/framework/standards/architecture/ddd/entities.md +0 -99
  126. package/.morph/framework/standards/architecture/ddd/value-objects.md +0 -124
  127. package/.morph/framework/standards/backend/api/minimal-api.md +0 -494
  128. package/.morph/framework/standards/backend/api/rest.md +0 -492
  129. package/.morph/framework/standards/backend/api/validation.md +0 -88
  130. package/.morph/framework/standards/backend/authentication/passkeys.md +0 -428
  131. package/.morph/framework/standards/backend/database/ef-core.md +0 -199
  132. package/.morph/framework/standards/backend/database/migrations.md +0 -393
  133. package/.morph/framework/standards/backend/database/postgresql/database.md +0 -352
  134. package/.morph/framework/standards/backend/database/repository-patterns.md +0 -528
  135. package/.morph/framework/standards/backend/database/vector-search-rag.md +0 -541
  136. package/.morph/framework/standards/backend/dotnet/async.md +0 -366
  137. package/.morph/framework/standards/backend/dotnet/core.md +0 -117
  138. package/.morph/framework/standards/backend/dotnet/di.md +0 -439
  139. package/.morph/framework/standards/backend/dotnet/program-cs-checklist.md +0 -92
  140. package/.morph/framework/standards/backend/integrations/asaas/asaas-api.md +0 -216
  141. package/.morph/framework/standards/backend/integrations/clerk/clerk-auth.md +0 -290
  142. package/.morph/framework/standards/backend/integrations/hangfire/hangfire-jobs.md +0 -350
  143. package/.morph/framework/standards/backend/integrations/resend/resend-email.md +0 -385
  144. package/.morph/framework/standards/context/analytics.md +0 -96
  145. package/.morph/framework/standards/context/bundles.md +0 -110
  146. package/.morph/framework/standards/context/priming.md +0 -78
  147. package/.morph/framework/standards/core/architecture.md +0 -185
  148. package/.morph/framework/standards/core/coding.md +0 -214
  149. package/.morph/framework/standards/core/git-branching-strategy.md +0 -403
  150. package/.morph/framework/standards/core/git.md +0 -185
  151. package/.morph/framework/standards/core/testing.md +0 -295
  152. package/.morph/framework/standards/data/nosql/blob-storage.md +0 -102
  153. package/.morph/framework/standards/data/nosql/cache/redis.md +0 -97
  154. package/.morph/framework/standards/data/nosql/cosmos-db.md +0 -118
  155. package/.morph/framework/standards/data/vector-search/azure-ai-search.md +0 -121
  156. package/.morph/framework/standards/data/vector-search/rag-chunking.md +0 -104
  157. package/.morph/framework/standards/frontend/blazor/design-checklist.md +0 -222
  158. package/.morph/framework/standards/frontend/blazor/fluent-ui-setup.md +0 -595
  159. package/.morph/framework/standards/frontend/blazor/fluent-ui.md +0 -137
  160. package/.morph/framework/standards/frontend/blazor/html-conversion.md +0 -184
  161. package/.morph/framework/standards/frontend/blazor/lifecycle.md +0 -195
  162. package/.morph/framework/standards/frontend/blazor/pitfalls.md +0 -198
  163. package/.morph/framework/standards/frontend/blazor/state.md +0 -191
  164. package/.morph/framework/standards/frontend/design-system/animations.md +0 -151
  165. package/.morph/framework/standards/frontend/design-system/naming.md +0 -64
  166. package/.morph/framework/standards/frontend/nextjs/nextjs-patterns.md +0 -198
  167. package/.morph/framework/standards/infrastructure/azure/azure.md +0 -624
  168. package/.morph/framework/standards/infrastructure/azure/bicep/bicep-patterns.md +0 -422
  169. package/.morph/framework/standards/infrastructure/azure/devops/azure-devops-setup.md +0 -516
  170. package/.morph/framework/standards/infrastructure/azure/devops/local-development.md +0 -520
  171. package/.morph/framework/standards/infrastructure/azure/services/functions.md +0 -486
  172. package/.morph/framework/standards/infrastructure/azure/services/service-bus.md +0 -459
  173. package/.morph/framework/standards/infrastructure/azure/services/storage.md +0 -407
  174. package/.morph/framework/standards/infrastructure/docker/easypanel-deploy.md +0 -196
  175. package/.morph/framework/standards/infrastructure/supabase/mcp-setup.md +0 -252
  176. package/.morph/framework/standards/infrastructure/supabase/supabase-auth.md +0 -176
  177. package/.morph/framework/standards/infrastructure/supabase/supabase-pgvector.md +0 -169
  178. package/.morph/framework/standards/infrastructure/supabase/supabase-rls.md +0 -184
  179. package/.morph/framework/standards/infrastructure/supabase/supabase-storage.md +0 -153
  180. package/.morph/framework/standards/integration/api/graphql.md +0 -91
  181. package/.morph/framework/standards/integration/api/grpc.md +0 -114
  182. package/.morph/framework/standards/integration/api/rest-design.md +0 -95
  183. package/.morph/framework/standards/integration/event-driven/cqrs.md +0 -101
  184. package/.morph/framework/standards/integration/event-driven/event-sourcing.md +0 -124
  185. package/.morph/framework/standards/integration/event-driven/service-bus.md +0 -95
  186. package/.morph/framework/standards/integration/mcp/mcp-tools.md +0 -384
  187. package/.morph/framework/standards/observability/logging.md +0 -131
  188. package/.morph/framework/standards/observability/metrics.md +0 -121
  189. package/.morph/framework/standards/observability/monitoring.md +0 -114
  190. package/.morph/framework/standards/observability/tracing.md +0 -132
  191. package/.morph/framework/standards/workflows/parallel-execution.md +0 -112
  192. package/.morph/framework/standards/workflows/thread-management.md +0 -113
  193. package/.morph/framework/templates/.idea/morph-templates.xml +0 -92
  194. package/.morph/framework/templates/.vscode/morph-templates.code-snippets +0 -186
  195. package/.morph/framework/templates/IDE-SNIPPETS.md +0 -266
  196. package/.morph/framework/templates/README.md +0 -814
  197. package/.morph/framework/templates/REGISTRY.json +0 -1492
  198. package/.morph/framework/templates/code/dotnet/backend/repository.cs +0 -141
  199. package/.morph/framework/templates/code/dotnet/backend/service.cs +0 -139
  200. package/.morph/framework/templates/code/dotnet/contracts/Commands.cs +0 -74
  201. package/.morph/framework/templates/code/dotnet/contracts/Entities.cs +0 -25
  202. package/.morph/framework/templates/code/dotnet/contracts/Queries.cs +0 -74
  203. package/.morph/framework/templates/code/dotnet/contracts/README.md +0 -74
  204. package/.morph/framework/templates/code/dotnet/contracts/api-contracts.cs +0 -173
  205. package/.morph/framework/templates/code/dotnet/contracts/contracts.cs +0 -217
  206. package/.morph/framework/templates/code/dotnet/contracts/contracts.cs.hbs +0 -172
  207. package/.morph/framework/templates/code/dotnet/database/migration.cs +0 -83
  208. package/.morph/framework/templates/code/dotnet/frontend/component.razor +0 -239
  209. package/.morph/framework/templates/code/dotnet/jobs/agent.cs +0 -163
  210. package/.morph/framework/templates/code/dotnet/jobs/job.cs +0 -171
  211. package/.morph/framework/templates/code/dotnet/test.cs +0 -239
  212. package/.morph/framework/templates/code/sql/rls-policy.sql +0 -57
  213. package/.morph/framework/templates/code/sql/supabase-migration.sql +0 -100
  214. package/.morph/framework/templates/code/sql/supabase-migration.template.sql +0 -113
  215. package/.morph/framework/templates/code/typescript/contracts.ts +0 -168
  216. package/.morph/framework/templates/context/CONTEXT-FEATURE.md +0 -276
  217. package/.morph/framework/templates/context/CONTEXT.md +0 -181
  218. package/.morph/framework/templates/docs/clarifications.md +0 -253
  219. package/.morph/framework/templates/docs/onboarding.md +0 -123
  220. package/.morph/framework/templates/docs/proposal.md +0 -182
  221. package/.morph/framework/templates/docs/schema-analysis.md +0 -119
  222. package/.morph/framework/templates/docs/spec.md +0 -149
  223. package/.morph/framework/templates/docs/ui-components.md +0 -124
  224. package/.morph/framework/templates/docs/ui-design-system.md +0 -76
  225. package/.morph/framework/templates/docs/ui-flows.md +0 -167
  226. package/.morph/framework/templates/docs/ui-mockups.md +0 -98
  227. package/.morph/framework/templates/examples/design-system-examples.md +0 -357
  228. package/.morph/framework/templates/examples/spec-examples.md +0 -90
  229. package/.morph/framework/templates/feature/decisions.md +0 -187
  230. package/.morph/framework/templates/feature/recap.md +0 -146
  231. package/.morph/framework/templates/feature/tasks.md +0 -199
  232. package/.morph/framework/templates/infrastructure/azure/Dockerfile.example +0 -82
  233. package/.morph/framework/templates/infrastructure/azure/README.md +0 -286
  234. package/.morph/framework/templates/infrastructure/azure/app-insights.bicep +0 -63
  235. package/.morph/framework/templates/infrastructure/azure/app-service.bicep +0 -164
  236. package/.morph/framework/templates/infrastructure/azure/container-app-env.bicep +0 -49
  237. package/.morph/framework/templates/infrastructure/azure/container-app.bicep +0 -156
  238. package/.morph/framework/templates/infrastructure/azure/deploy-checklist.md +0 -426
  239. package/.morph/framework/templates/infrastructure/azure/deploy.ps1 +0 -229
  240. package/.morph/framework/templates/infrastructure/azure/deploy.sh +0 -208
  241. package/.morph/framework/templates/infrastructure/azure/key-vault.bicep +0 -91
  242. package/.morph/framework/templates/infrastructure/azure/main.bicep +0 -189
  243. package/.morph/framework/templates/infrastructure/azure/parameters.dev.json +0 -29
  244. package/.morph/framework/templates/infrastructure/azure/parameters.prod.json +0 -29
  245. package/.morph/framework/templates/infrastructure/azure/parameters.staging.json +0 -29
  246. package/.morph/framework/templates/infrastructure/azure/sql-database.bicep +0 -103
  247. package/.morph/framework/templates/infrastructure/azure/storage.bicep +0 -106
  248. package/.morph/framework/templates/infrastructure/docker/Dockerfile.template +0 -58
  249. package/.morph/framework/templates/infrastructure/docker/docker-compose.template.yml +0 -67
  250. package/.morph/framework/templates/infrastructure/docker/dockerfile-api.dockerfile +0 -38
  251. package/.morph/framework/templates/infrastructure/docker/dockerfile-web.dockerfile +0 -48
  252. package/.morph/framework/templates/infrastructure/docker/easypanel.template.json +0 -54
  253. package/.morph/framework/templates/infrastructure/github/README.md +0 -593
  254. package/.morph/framework/templates/infrastructure/github/actions/azure-auth/action.yml.hbs +0 -22
  255. package/.morph/framework/templates/infrastructure/github/actions/docker-build-push/action.yml.hbs +0 -45
  256. package/.morph/framework/templates/infrastructure/github/actions/health-check/action.yml.hbs +0 -27
  257. package/.morph/framework/templates/infrastructure/github/workflows/deploy-azure-app-service.yml.hbs +0 -61
  258. package/.morph/framework/templates/infrastructure/github/workflows/deploy-easypanel.yml.hbs +0 -31
  259. package/.morph/framework/templates/infrastructure/github/workflows/docker-build-push.yml.hbs +0 -59
  260. package/.morph/framework/templates/infrastructure/github/workflows/dotnet-build.yml.hbs +0 -39
  261. package/.morph/framework/templates/integrations/asaas-client.cs +0 -387
  262. package/.morph/framework/templates/integrations/asaas-webhook.cs +0 -351
  263. package/.morph/framework/templates/integrations/azure-identity-config.cs +0 -288
  264. package/.morph/framework/templates/integrations/clerk-config.cs +0 -258
  265. package/.morph/framework/templates/meta-prompts/fusion/fusion-agent.md +0 -76
  266. package/.morph/framework/templates/meta-prompts/fusion/fusion-aggregator.md +0 -100
  267. package/.morph/framework/templates/meta-prompts/hops/hop-retry.md +0 -78
  268. package/.morph/framework/templates/meta-prompts/hops/hop-validation.md +0 -97
  269. package/.morph/framework/templates/meta-prompts/hops/hop-wrapper.md +0 -36
  270. package/.morph/framework/templates/meta-prompts/parallel-workers/parallel-coordinator.md +0 -113
  271. package/.morph/framework/templates/meta-prompts/parallel-workers/parallel-worker.md +0 -80
  272. package/.morph/framework/templates/meta-prompts/squad-leaders/backend-squad.md +0 -90
  273. package/.morph/framework/templates/meta-prompts/squad-leaders/frontend-squad.md +0 -126
  274. package/.morph/framework/templates/meta-prompts/squad-leaders/squad-leader.md +0 -43
  275. package/.morph/framework/templates/meta-prompts/validators/checkpoint-validator.md +0 -107
  276. package/.morph/framework/templates/meta-prompts/validators/pre-commit-validator.md +0 -95
  277. package/.morph/framework/templates/saas/subscription.cs +0 -347
  278. package/.morph/framework/templates/saas/tenant.cs +0 -338
  279. package/.morph/framework/templates/state.template.json +0 -17
  280. package/.morph/framework/templates/ui/FluentDesignTheme.cs +0 -149
  281. package/.morph/framework/templates/ui/MudTheme.cs +0 -281
  282. package/.morph/framework/templates/ui/design-system.css +0 -226
  283. package/.morph/logs/tool-failures.log +0 -51
  284. package/.morph/memory/pre-compact-2026-02-22T17-01-01-658Z.json +0 -16
  285. package/.morph/state.json +0 -48
  286. package/framework/skills/level-2-domains/backend/api-designer.md +0 -66
  287. package/framework/skills/level-2-domains/backend/ef-modeler.md +0 -65
  288. package/framework/skills/level-2-domains/frontend/nextjs-expert.md +0 -161
  289. package/framework/skills/level-3-technologies/README.md +0 -7
  290. package/framework/skills/level-4-patterns/README.md +0 -7
  291. package/framework/templates/code/dotnet/contracts/contracts.cs +0 -217
  292. package/framework/templates/code/dotnet/contracts/contracts.cs.hbs +0 -172
@@ -216,6 +216,11 @@ async function runSingleValidator(validatorId, projectPath, featureName, options
216
216
  return await validateDesignSystem(projectPath, featureName, options);
217
217
  }
218
218
 
219
+ case 'nextjs-component': {
220
+ const { validateNextComponentFiles } = await import('./nextjs/next-component-validator.js');
221
+ return await validateNextComponentFiles(projectPath, options);
222
+ }
223
+
219
224
  default:
220
225
  if (options.verbose) {
221
226
  console.log(chalk.gray(` Unknown validator: ${validatorId}`));
@@ -17,8 +17,12 @@ import { join } from 'path';
17
17
  *
18
18
  * @param {string} projectDir - Target project directory
19
19
  * @param {string} frameworkDir - Path to morph-spec framework/ directory
20
+ * @param {object} options - Optional settings
21
+ * @param {string|null} options.projectStack - Detected project stack (e.g. 'nextjs', 'blazor')
20
22
  */
21
- export async function installAgents(projectDir, frameworkDir = 'framework') {
23
+ export async function installAgents(projectDir, frameworkDir = 'framework', options = {}) {
24
+ const { projectStack = null } = options;
25
+
22
26
  const agentsJsonPath = join(frameworkDir, 'agents.json');
23
27
  const agentsJson = JSON.parse(readFileSync(agentsJsonPath, 'utf-8'));
24
28
 
@@ -33,7 +37,15 @@ export async function installAgents(projectDir, frameworkDir = 'framework') {
33
37
  const targetDir = join(projectDir, '.claude', 'agents');
34
38
  mkdirSync(targetDir, { recursive: true });
35
39
 
36
- const eligible = agents.filter(a => a.tier === 1 || a.tier === 2);
40
+ const DOTNET_STACKS = ['dotnet', 'blazor', 'dotnet-api', 'fullstack'];
41
+ const eligible = agents.filter(a => {
42
+ if (a.tier !== 1 && a.tier !== 2) return false;
43
+ // Skip dotnet-senior for non-.NET projects
44
+ if (a.id === 'dotnet-senior' && projectStack && !DOTNET_STACKS.includes(projectStack)) {
45
+ return false;
46
+ }
47
+ return true;
48
+ });
37
49
 
38
50
  for (const agent of eligible) {
39
51
  const slug = agent.id ?? agent.name?.toLowerCase().replace(/\s+/g, '-');
@@ -171,14 +183,14 @@ export function collectSkillFiles(dir) {
171
183
  }
172
184
 
173
185
  /**
174
- * Installs level-2-domains skill files as native Claude Code subagents
186
+ * Installs domain agent files as native Claude Code subagents
175
187
  * in .claude/agents/ with memory:project, model:sonnet, maxTurns:20.
176
188
  *
177
189
  * @param {string} projectDir - Target project directory
178
190
  * @param {string} frameworkDir - Path to morph-spec framework/ directory
179
191
  */
180
192
  export async function installDomainAgents(projectDir, frameworkDir = 'framework') {
181
- const domainsDir = join(frameworkDir, 'skills', 'level-2-domains');
193
+ const domainsDir = join(frameworkDir, 'agents');
182
194
  if (!existsSync(domainsDir)) return;
183
195
 
184
196
  const targetDir = join(projectDir, '.claude', 'agents');
@@ -2,11 +2,18 @@
2
2
  * Skills Installer
3
3
  *
4
4
  * Copies framework skills to .claude/skills/ during morph-spec init.
5
- * Installs level-0-meta, level-1-workflows, and level-2-domains skills using
6
- * the native Claude Code subdirectory format: .claude/skills/{skill-name}/SKILL.md
7
- * so Claude Code can discover them via /<skill-name> syntax.
8
- * Level-3 and level-4 only contain README.md placeholder files and
9
- * are intentionally skipped.
5
+ * Installs level-0-meta and level-1-workflows skills using the native Claude Code
6
+ * subdirectory format: .claude/skills/{skill-name}/SKILL.md (plus optional
7
+ * scripts/, references/, and assets/ subdirectories).
8
+ * Level-2 domain specialists are installed as native subagents via installDomainAgents().
9
+ * Level-3 and level-4 only contain README.md placeholder files and are skipped.
10
+ *
11
+ * Source skills can be either:
12
+ * - Directory-based: framework/skills/{level}/{skill-name}/SKILL.md (preferred)
13
+ * - Flat file: framework/skills/{level}/{skill-name}.md (legacy, still supported)
14
+ *
15
+ * Directory-based skills have their entire directory copied (scripts/, references/,
16
+ * assets/) so Claude Code can execute scripts and load references on demand.
10
17
  */
11
18
 
12
19
  import { mkdirSync, copyFileSync, existsSync, readdirSync, statSync } from 'fs';
@@ -26,15 +33,42 @@ const FRAMEWORK_SKILLS_DIR = join(__dirname, '..', '..', 'framework', 'skills');
26
33
  const SKILL_LEVELS_TO_INSTALL = ['level-0-meta', 'level-1-workflows'];
27
34
 
28
35
  /**
29
- * Recursively walk srcDir and install each .md skill file (excluding README.md)
30
- * into destDir using the native Claude Code subdirectory format:
31
- * destDir/{skill-name}/SKILL.md
36
+ * Recursively copy a directory tree from src to dest.
37
+ * Creates dest if it doesn't exist. Skips README.md files.
38
+ *
39
+ * @param {string} src - Source directory path
40
+ * @param {string} dest - Destination directory path
41
+ */
42
+ function copyDirectory(src, dest) {
43
+ mkdirSync(dest, { recursive: true });
44
+ for (const entry of readdirSync(src)) {
45
+ if (entry === 'README.md') continue;
46
+ const srcPath = join(src, entry);
47
+ const destPath = join(dest, entry);
48
+ if (statSync(srcPath).isDirectory()) {
49
+ copyDirectory(srcPath, destPath);
50
+ } else {
51
+ copyFileSync(srcPath, destPath);
52
+ }
53
+ }
54
+ }
55
+
56
+ /**
57
+ * Walk srcDir and install skills into destDir.
58
+ *
59
+ * Handles two source formats:
60
+ * 1. Directory-based skill: srcDir/{skill-name}/SKILL.md
61
+ * → copies entire directory (SKILL.md + scripts/ + references/ + assets/)
62
+ * → destDir/{skill-name}/
63
+ *
64
+ * 2. Flat .md skill (legacy): srcDir/{skill-name}.md
65
+ * → destDir/{skill-name}/SKILL.md
32
66
  *
33
- * Each skill file must have a unique name across all subdirectories;
34
- * duplicate filenames would cause silent overwrites of the SKILL.md inside
35
- * the subdirectory.
67
+ * Level directories (level-0-meta, level-1-workflows, sub-categories) are
68
+ * traversed recursively. A directory is recognized as a skill directory when
69
+ * it contains a SKILL.md file.
36
70
  *
37
- * @param {string} srcDir - Source directory to walk recursively
71
+ * @param {string} srcDir - Source directory to walk
38
72
  * @param {string} destDir - Destination base directory (.claude/skills/)
39
73
  */
40
74
  function installSkillsFromDir(srcDir, destDir) {
@@ -44,9 +78,18 @@ function installSkillsFromDir(srcDir, destDir) {
44
78
  const stat = statSync(srcPath);
45
79
 
46
80
  if (stat.isDirectory()) {
47
- installSkillsFromDir(srcPath, destDir);
81
+ const skillMdPath = join(srcPath, 'SKILL.md');
82
+ if (existsSync(skillMdPath)) {
83
+ // Directory-based skill — copy entire directory including scripts/, references/, assets/
84
+ const skillDestDir = join(destDir, entry);
85
+ copyDirectory(srcPath, skillDestDir);
86
+ } else {
87
+ // Level/category directory — recurse
88
+ installSkillsFromDir(srcPath, destDir);
89
+ }
48
90
  } else if (entry.endsWith('.md') && entry !== 'README.md') {
49
- const skillName = entry.slice(0, -3); // strip .md
91
+ // Legacy flat .md skill wrap in subdirectory as SKILL.md
92
+ const skillName = entry.slice(0, -3);
50
93
  const skillDir = join(destDir, skillName);
51
94
  mkdirSync(skillDir, { recursive: true });
52
95
  copyFileSync(srcPath, join(skillDir, 'SKILL.md'));
@@ -58,7 +101,8 @@ function installSkillsFromDir(srcDir, destDir) {
58
101
  * Install morph framework skills to .claude/skills/ in the target project.
59
102
  * Skills are copied into subdirectories as SKILL.md files so Claude Code can
60
103
  * discover them natively via /<skill-name> syntax (e.g., /phase-design,
61
- * /blazor-builder).
104
+ * /blazor-builder). Directory-based skills also get their scripts/,
105
+ * references/, and assets/ subdirectories copied for on-demand loading.
62
106
  *
63
107
  * @param {string} projectDir - Target project root directory
64
108
  */
@@ -1,5 +0,0 @@
1
- {
2
- "morphVersion": "4.4.0",
3
- "installedAt": "2026-02-22T05:30:23.083Z",
4
- "cliVersion": "4.4.0"
5
- }
@@ -1,44 +0,0 @@
1
- {"type":"fusion_started","feature":"test-feature","data":{"count":3,"strategy":"best-of-n","agents":["fusion-agent-1","fusion-agent-2","fusion-agent-3"]},"timestamp":"2026-02-22T04:19:13.804Z"}
2
- {"type":"fusion_started","feature":"test-feature","data":{"count":3,"strategy":"best-of-n","agents":["fusion-agent-1","fusion-agent-2","fusion-agent-3"]},"timestamp":"2026-02-22T04:32:32.224Z"}
3
- {"type":"fusion_started","feature":"test-feature","data":{"count":3,"strategy":"best-of-n","agents":["fusion-agent-1","fusion-agent-2","fusion-agent-3"]},"timestamp":"2026-02-22T04:38:49.705Z"}
4
- {"type":"fusion_started","feature":"test-feature","data":{"count":3,"strategy":"best-of-n","agents":["fusion-agent-1","fusion-agent-2","fusion-agent-3"]},"timestamp":"2026-02-22T04:40:40.242Z"}
5
- {"type":"fusion_started","feature":"test-feature","data":{"count":3,"strategy":"best-of-n","agents":["fusion-agent-1","fusion-agent-2","fusion-agent-3"]},"timestamp":"2026-02-22T04:40:43.745Z"}
6
- {"type":"fusion_started","feature":"test-feature","data":{"count":3,"strategy":"best-of-n","agents":["fusion-agent-1","fusion-agent-2","fusion-agent-3"]},"timestamp":"2026-02-22T04:42:19.855Z"}
7
- {"type":"fusion_started","feature":"test-feature","data":{"count":3,"strategy":"best-of-n","agents":["fusion-agent-1","fusion-agent-2","fusion-agent-3"]},"timestamp":"2026-02-22T04:59:28.383Z"}
8
- {"type":"fusion_started","feature":"test-feature","data":{"count":3,"strategy":"best-of-n","agents":["fusion-agent-1","fusion-agent-2","fusion-agent-3"]},"timestamp":"2026-02-22T05:07:53.092Z"}
9
- {"type":"fusion_started","feature":"test-feature","data":{"count":3,"strategy":"best-of-n","agents":["fusion-agent-1","fusion-agent-2","fusion-agent-3"]},"timestamp":"2026-02-22T05:08:09.448Z"}
10
- {"type":"fusion_started","feature":"test-feature","data":{"count":3,"strategy":"best-of-n","agents":["fusion-agent-1","fusion-agent-2","fusion-agent-3"]},"timestamp":"2026-02-22T05:14:06.092Z"}
11
- {"type":"fusion_started","feature":"test-feature","data":{"count":3,"strategy":"best-of-n","agents":["fusion-agent-1","fusion-agent-2","fusion-agent-3"]},"timestamp":"2026-02-22T05:19:45.336Z"}
12
- {"type":"fusion_started","feature":"test-feature","data":{"count":3,"strategy":"best-of-n","agents":["fusion-agent-1","fusion-agent-2","fusion-agent-3"]},"timestamp":"2026-02-22T05:19:58.813Z"}
13
- {"type":"fusion_started","feature":"test-feature","data":{"count":3,"strategy":"best-of-n","agents":["fusion-agent-1","fusion-agent-2","fusion-agent-3"]},"timestamp":"2026-02-22T05:21:14.483Z"}
14
- {"type":"fusion_started","feature":"test-feature","data":{"count":3,"strategy":"best-of-n","agents":["fusion-agent-1","fusion-agent-2","fusion-agent-3"]},"timestamp":"2026-02-22T05:21:26.818Z"}
15
- {"type":"fusion_started","feature":"test-feature","data":{"count":3,"strategy":"best-of-n","agents":["fusion-agent-1","fusion-agent-2","fusion-agent-3"]},"timestamp":"2026-02-22T05:24:09.909Z"}
16
- {"type":"fusion_started","feature":"test-feature","data":{"count":3,"strategy":"best-of-n","agents":["fusion-agent-1","fusion-agent-2","fusion-agent-3"]},"timestamp":"2026-02-22T05:25:43.672Z"}
17
- {"type":"fusion_started","feature":"test-feature","data":{"count":3,"strategy":"best-of-n","agents":["fusion-agent-1","fusion-agent-2","fusion-agent-3"]},"timestamp":"2026-02-22T05:27:36.789Z"}
18
- {"type":"fusion_started","feature":"test-feature","data":{"count":3,"strategy":"best-of-n","agents":["fusion-agent-1","fusion-agent-2","fusion-agent-3"]},"timestamp":"2026-02-22T05:27:50.246Z"}
19
- {"type":"fusion_started","feature":"test-feature","data":{"count":3,"strategy":"best-of-n","agents":["fusion-agent-1","fusion-agent-2","fusion-agent-3"]},"timestamp":"2026-02-22T05:28:51.618Z"}
20
- {"type":"fusion_started","feature":"test-feature","data":{"count":3,"strategy":"best-of-n","agents":["fusion-agent-1","fusion-agent-2","fusion-agent-3"]},"timestamp":"2026-02-22T05:29:07.678Z"}
21
- {"type":"fusion_started","feature":"test-feature","data":{"count":3,"strategy":"best-of-n","agents":["fusion-agent-1","fusion-agent-2","fusion-agent-3"]},"timestamp":"2026-02-22T05:29:21.818Z"}
22
- {"type":"fusion_started","feature":"test-feature","data":{"count":3,"strategy":"best-of-n","agents":["fusion-agent-1","fusion-agent-2","fusion-agent-3"]},"timestamp":"2026-02-22T05:30:47.980Z"}
23
- {"type":"fusion_started","feature":"test-feature","data":{"count":3,"strategy":"best-of-n","agents":["fusion-agent-1","fusion-agent-2","fusion-agent-3"]},"timestamp":"2026-02-22T05:32:09.408Z"}
24
- {"type":"fusion_started","feature":"test-feature","data":{"count":3,"strategy":"best-of-n","agents":["fusion-agent-1","fusion-agent-2","fusion-agent-3"]},"timestamp":"2026-02-22T11:16:53.842Z"}
25
- {"type":"fusion_started","feature":"test-feature","data":{"count":3,"strategy":"best-of-n","agents":["fusion-agent-1","fusion-agent-2","fusion-agent-3"]},"timestamp":"2026-02-22T16:34:34.819Z"}
26
- {"type":"fusion_started","feature":"test-feature","data":{"count":3,"strategy":"best-of-n","agents":["fusion-agent-1","fusion-agent-2","fusion-agent-3"]},"timestamp":"2026-02-22T16:34:40.400Z"}
27
- {"type":"fusion_started","feature":"test-feature","data":{"count":3,"strategy":"best-of-n","agents":["fusion-agent-1","fusion-agent-2","fusion-agent-3"]},"timestamp":"2026-02-22T16:56:39.831Z"}
28
- {"type":"fusion_started","feature":"test-feature","data":{"count":3,"strategy":"best-of-n","agents":["fusion-agent-1","fusion-agent-2","fusion-agent-3"]},"timestamp":"2026-02-22T16:56:52.757Z"}
29
- {"type":"fusion_started","feature":"test-feature","data":{"count":3,"strategy":"best-of-n","agents":["fusion-agent-1","fusion-agent-2","fusion-agent-3"]},"timestamp":"2026-02-22T16:57:06.641Z"}
30
- {"type":"fusion_started","feature":"test-feature","data":{"count":3,"strategy":"best-of-n","agents":["fusion-agent-1","fusion-agent-2","fusion-agent-3"]},"timestamp":"2026-02-22T17:00:30.000Z"}
31
- {"type":"fusion_started","feature":"test-feature","data":{"count":3,"strategy":"best-of-n","agents":["fusion-agent-1","fusion-agent-2","fusion-agent-3"]},"timestamp":"2026-02-22T17:04:19.128Z"}
32
- {"type":"fusion_started","feature":"test-feature","data":{"count":3,"strategy":"best-of-n","agents":["fusion-agent-1","fusion-agent-2","fusion-agent-3"]},"timestamp":"2026-02-22T17:06:45.301Z"}
33
- {"type":"fusion_started","feature":"test-feature","data":{"count":3,"strategy":"best-of-n","agents":["fusion-agent-1","fusion-agent-2","fusion-agent-3"]},"timestamp":"2026-02-22T17:07:53.055Z"}
34
- {"type":"fusion_started","feature":"test-feature","data":{"count":3,"strategy":"best-of-n","agents":["fusion-agent-1","fusion-agent-2","fusion-agent-3"]},"timestamp":"2026-02-22T17:08:05.762Z"}
35
- {"type":"fusion_started","feature":"test-feature","data":{"count":3,"strategy":"best-of-n","agents":["fusion-agent-1","fusion-agent-2","fusion-agent-3"]},"timestamp":"2026-02-22T17:09:35.411Z"}
36
- {"type":"fusion_started","feature":"test-feature","data":{"count":3,"strategy":"best-of-n","agents":["fusion-agent-1","fusion-agent-2","fusion-agent-3"]},"timestamp":"2026-02-22T17:09:47.946Z"}
37
- {"type":"fusion_started","feature":"test-feature","data":{"count":3,"strategy":"best-of-n","agents":["fusion-agent-1","fusion-agent-2","fusion-agent-3"]},"timestamp":"2026-02-22T17:16:01.517Z"}
38
- {"type":"fusion_started","feature":"test-feature","data":{"count":3,"strategy":"best-of-n","agents":["fusion-agent-1","fusion-agent-2","fusion-agent-3"]},"timestamp":"2026-02-22T17:16:13.802Z"}
39
- {"type":"fusion_started","feature":"test-feature","data":{"count":3,"strategy":"best-of-n","agents":["fusion-agent-1","fusion-agent-2","fusion-agent-3"]},"timestamp":"2026-02-22T17:17:41.413Z"}
40
- {"type":"fusion_started","feature":"test-feature","data":{"count":3,"strategy":"best-of-n","agents":["fusion-agent-1","fusion-agent-2","fusion-agent-3"]},"timestamp":"2026-02-22T17:20:34.355Z"}
41
- {"type":"fusion_started","feature":"test-feature","data":{"count":3,"strategy":"best-of-n","agents":["fusion-agent-1","fusion-agent-2","fusion-agent-3"]},"timestamp":"2026-02-22T17:20:46.312Z"}
42
- {"type":"fusion_started","feature":"test-feature","data":{"count":3,"strategy":"best-of-n","agents":["fusion-agent-1","fusion-agent-2","fusion-agent-3"]},"timestamp":"2026-02-22T17:22:03.137Z"}
43
- {"type":"fusion_started","feature":"test-feature","data":{"count":3,"strategy":"best-of-n","agents":["fusion-agent-1","fusion-agent-2","fusion-agent-3"]},"timestamp":"2026-02-22T17:22:14.869Z"}
44
- {"type":"fusion_started","feature":"test-feature","data":{"count":3,"strategy":"best-of-n","agents":["fusion-agent-1","fusion-agent-2","fusion-agent-3"]},"timestamp":"2026-02-22T17:29:45.187Z"}
@@ -1,8 +0,0 @@
1
- {
2
- "framework": "global",
3
- "frameworkVersion": "4.4.0",
4
- "project": {
5
- "name": "morph-spec-framework",
6
- "architecture": "unknown"
7
- }
8
- }
@@ -1,17 +0,0 @@
1
- # morph-spec-framework - Project Context
2
-
3
- ## Overview
4
-
5
- This file will be auto-updated by MORPH-SPEC detection system.
6
-
7
- ## Stack
8
-
9
- Run `morph-spec detect` to analyze your project.
10
-
11
- ## Technologies
12
-
13
- (To be detected)
14
-
15
- ## Architecture
16
-
17
- (To be detected)