@polymorphism-tech/morph-spec 4.3.7 → 4.6.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 (394) hide show
  1. package/.morph/.morphversion +3 -3
  2. package/.morph/analytics/threads-log.jsonl +6 -9
  3. package/.morph/config/config.json +2 -3
  4. package/.morph/framework/standards/STANDARDS.json +812 -0
  5. package/.morph/{standards → framework/standards}/ai-agents/team-orchestration.md +3 -3
  6. package/.morph/{standards → framework/standards}/frontend/nextjs/nextjs-patterns.md +17 -0
  7. package/.morph/framework/standards/integration/mcp/mcp-tools.md +384 -0
  8. package/.morph/{templates → framework/templates}/README.md +17 -17
  9. package/.morph/{templates → framework/templates}/REGISTRY.json +48 -233
  10. package/.morph/framework/templates/code/dotnet/contracts/contracts.cs.hbs +172 -0
  11. package/.morph/{templates → framework/templates}/context/CONTEXT-FEATURE.md +1 -1
  12. package/.morph/{templates → framework/templates}/context/CONTEXT.md +3 -3
  13. package/.morph/framework/templates/docs/clarifications.md +253 -0
  14. package/.morph/framework/templates/docs/onboarding.md +123 -0
  15. package/.morph/framework/templates/docs/schema-analysis.md +119 -0
  16. package/.morph/{templates → framework/templates}/docs/spec.md +149 -149
  17. package/.morph/framework/templates/docs/ui-components.md +124 -0
  18. package/.morph/framework/templates/docs/ui-design-system.md +76 -0
  19. package/.morph/framework/templates/docs/ui-flows.md +167 -0
  20. package/.morph/framework/templates/docs/ui-mockups.md +98 -0
  21. package/.morph/framework/templates/docs/user-stories.md +34 -0
  22. package/.morph/{templates → framework/templates}/examples/spec-examples.md +1 -1
  23. package/.morph/{templates → framework/templates}/infrastructure/github/README.md +11 -11
  24. package/.morph/{templates → framework/templates}/infrastructure/github/workflows/deploy-azure-app-service.yml.hbs +2 -2
  25. package/.morph/{templates → framework/templates}/meta-prompts/parallel-workers/parallel-worker.md +2 -2
  26. package/.morph/{templates → framework/templates}/meta-prompts/validators/pre-commit-validator.md +1 -1
  27. package/.morph/logs/tool-failures.log +7 -0
  28. package/.morph/memory/pre-compact-2026-02-23T15-43-03-521Z.json +16 -0
  29. package/.morph/state.json +1 -1
  30. package/CLAUDE.md +77 -155
  31. package/README.md +20 -18
  32. package/bin/detect-agents.js +1 -1
  33. package/bin/morph-spec.js +116 -266
  34. package/bin/task-manager.cjs +2 -2
  35. package/bin/validate.js +1 -1
  36. package/claude-plugin.json +14 -0
  37. package/docs/claude-alignment-report.md +137 -0
  38. package/docs/plans/2026-02-22-claude-docs-morph-alignment-analysis.md +512 -0
  39. package/docs/plans/2026-02-22-claude-settings.md +515 -0
  40. package/docs/plans/2026-02-22-morph-cc-alignment-impl.md +728 -0
  41. package/docs/plans/2026-02-22-morph-spec-next.md +478 -0
  42. package/docs/plans/2026-02-22-native-alignment-design.md +199 -0
  43. package/docs/plans/2026-02-22-native-alignment-impl.md +925 -0
  44. package/docs/plans/2026-02-22-native-enrichment-design.md +244 -0
  45. package/docs/plans/2026-02-22-native-enrichment.md +735 -0
  46. package/framework/CLAUDE.md +77 -0
  47. package/framework/{skills/level-2-domains → agents}/ai-agents/ai-system-architect.md +7 -3
  48. package/framework/{skills/level-2-domains → agents}/architecture/po-pm-advisor.md +7 -1
  49. package/framework/{skills/level-2-domains → agents}/architecture/prompt-engineer.md +7 -1
  50. package/framework/{skills/level-2-domains → agents}/architecture/seo-growth-hacker.md +7 -1
  51. package/framework/{skills/level-2-domains → agents}/architecture/standards-architect.md +10 -6
  52. package/framework/agents/backend/api-designer.md +103 -0
  53. package/framework/{skills/level-2-domains → agents}/backend/dotnet-senior.md +7 -1
  54. package/framework/agents/backend/ef-modeler.md +119 -0
  55. package/framework/{skills/level-2-domains → agents}/backend/hangfire-orchestrator.md +8 -4
  56. package/framework/{skills/level-2-domains → agents}/backend/ms-agent-expert.md +7 -3
  57. package/framework/{skills/level-2-domains → agents}/frontend/blazor-builder.md +7 -3
  58. package/framework/{skills/level-2-domains → agents}/frontend/nextjs-expert.md +7 -3
  59. package/framework/{skills/level-2-domains → agents}/frontend/ui-ux-designer.md +8 -2
  60. package/framework/{skills/level-2-domains → agents}/infrastructure/azure-architect.md +7 -1
  61. package/framework/{skills/level-2-domains → agents}/infrastructure/azure-deploy-specialist.md +7 -1
  62. package/framework/{skills/level-2-domains → agents}/infrastructure/bicep-architect.md +7 -3
  63. package/framework/{skills/level-2-domains → agents}/infrastructure/container-specialist.md +7 -3
  64. package/framework/{skills/level-2-domains → agents}/infrastructure/devops-engineer.md +7 -3
  65. package/framework/{skills/level-2-domains → agents}/integrations/asaas-financial.md +7 -3
  66. package/framework/{skills/level-2-domains → agents}/integrations/azure-identity.md +7 -3
  67. package/framework/{skills/level-2-domains → agents}/integrations/clerk-auth.md +7 -3
  68. package/framework/{skills/level-2-domains/integrations/hangfire-orchestrator.md → agents/integrations/hangfire-integration.md} +7 -1
  69. package/framework/{skills/level-2-domains → agents}/integrations/resend-email.md +7 -3
  70. package/framework/{skills/level-2-domains → agents}/quality/code-analyzer.md +9 -5
  71. package/framework/{skills/level-2-domains → agents}/quality/testing-specialist.md +7 -3
  72. package/framework/commands/morph-apply.md +9 -9
  73. package/framework/commands/morph-archive.md +8 -8
  74. package/framework/commands/morph-infra.md +1 -1
  75. package/framework/commands/morph-proposal.md +9 -9
  76. package/framework/commands/morph-status.md +3 -3
  77. package/framework/commands/morph-troubleshoot.md +1 -1
  78. package/framework/hooks/README.md +201 -282
  79. package/framework/hooks/claude-code/notification/approval-reminder.js +52 -0
  80. package/framework/hooks/claude-code/post-tool-use/dispatch.js +83 -0
  81. package/framework/hooks/claude-code/post-tool-use/handle-tool-failure.js +42 -0
  82. package/framework/hooks/claude-code/pre-compact/save-morph-context.js +61 -0
  83. package/framework/hooks/claude-code/pre-tool-use/enforce-phase-writes.js +71 -0
  84. package/framework/hooks/claude-code/pre-tool-use/protect-readonly-files.js +58 -0
  85. package/framework/hooks/claude-code/pre-tool-use/protect-spec-files.js +64 -0
  86. package/framework/hooks/claude-code/session-start/inject-morph-context.js +94 -0
  87. package/framework/hooks/claude-code/statusline.py +538 -0
  88. package/framework/hooks/claude-code/statusline.sh +7 -0
  89. package/framework/hooks/claude-code/stop/validate-completion.js +88 -0
  90. package/framework/hooks/claude-code/user-prompt/enrich-prompt.js +91 -0
  91. package/framework/hooks/shared/hook-response.js +45 -0
  92. package/framework/hooks/shared/phase-utils.js +129 -0
  93. package/framework/hooks/shared/state-reader.js +138 -0
  94. package/framework/hooks/shared/stdin-reader.js +26 -0
  95. package/framework/phases.json +145 -0
  96. package/framework/rules/csharp-standards.md +10 -0
  97. package/framework/rules/frontend-standards.md +14 -0
  98. package/framework/rules/infrastructure-standards.md +13 -0
  99. package/framework/rules/morph-workflow.md +86 -0
  100. package/framework/rules/testing-standards.md +11 -0
  101. package/framework/skills/README.md +66 -0
  102. package/framework/skills/level-0-meta/brainstorming/SKILL.md +135 -0
  103. package/framework/skills/level-0-meta/brainstorming/references/proposal-example.md +138 -0
  104. package/framework/skills/level-0-meta/{code-review.md → code-review/SKILL.md} +13 -4
  105. package/framework/skills/level-0-meta/code-review/references/review-example.md +164 -0
  106. package/framework/skills/level-0-meta/code-review/scripts/scan-csharp.mjs +121 -0
  107. package/framework/skills/level-0-meta/mcp-registry.json +207 -0
  108. package/framework/skills/level-0-meta/{morph-checklist.md → morph-checklist/SKILL.md} +8 -3
  109. package/framework/skills/{level-1-workflows/morph-replicate.md → level-0-meta/morph-replicate/SKILL.md} +13 -6
  110. package/framework/skills/level-0-meta/{simulation-checklist.md → simulation-checklist/SKILL.md} +9 -4
  111. package/framework/skills/level-0-meta/tool-usage-guide/SKILL.md +334 -0
  112. package/framework/skills/level-0-meta/verification-before-completion/SKILL.md +147 -0
  113. package/framework/skills/level-0-meta/verification-before-completion/scripts/check-phase-outputs.mjs +110 -0
  114. package/framework/skills/level-1-workflows/{phase-clarify.md → phase-clarify/SKILL.md} +65 -4
  115. package/framework/skills/level-1-workflows/phase-clarify/references/clarifications-example.md +117 -0
  116. package/framework/skills/level-1-workflows/phase-codebase-analysis/SKILL.md +181 -0
  117. package/framework/skills/level-1-workflows/phase-design/SKILL.md +303 -0
  118. package/framework/skills/level-1-workflows/phase-design/references/spec-example.md +253 -0
  119. package/framework/skills/level-1-workflows/phase-implement/SKILL.md +254 -0
  120. package/framework/skills/level-1-workflows/phase-implement/references/recap-example.md +132 -0
  121. package/framework/skills/level-1-workflows/phase-setup/SKILL.md +171 -0
  122. package/framework/skills/level-1-workflows/{phase-tasks.md → phase-tasks/SKILL.md} +89 -7
  123. package/framework/skills/level-1-workflows/phase-tasks/references/tasks-example.md +231 -0
  124. package/framework/skills/level-1-workflows/phase-tasks/scripts/validate-tasks.mjs +112 -0
  125. package/framework/skills/level-1-workflows/phase-uiux/SKILL.md +246 -0
  126. package/framework/standards/STANDARDS.json +812 -0
  127. package/framework/standards/ai-agents/team-orchestration.md +3 -3
  128. package/framework/standards/frontend/nextjs/nextjs-patterns.md +17 -0
  129. package/framework/standards/integration/mcp/mcp-tools.md +384 -0
  130. package/framework/templates/README.md +17 -17
  131. package/framework/templates/REGISTRY.json +48 -233
  132. package/framework/templates/code/dotnet/contracts/contracts.cs.hbs +172 -0
  133. package/framework/templates/context/CONTEXT-FEATURE.md +1 -1
  134. package/framework/templates/context/CONTEXT.md +3 -3
  135. package/framework/templates/docs/clarifications.md +253 -0
  136. package/framework/templates/docs/onboarding.md +123 -0
  137. package/framework/templates/docs/schema-analysis.md +119 -0
  138. package/framework/templates/docs/spec.md +149 -149
  139. package/framework/templates/docs/ui-components.md +124 -0
  140. package/framework/templates/docs/ui-design-system.md +76 -0
  141. package/framework/templates/docs/ui-flows.md +167 -0
  142. package/framework/templates/docs/ui-mockups.md +98 -0
  143. package/framework/templates/docs/user-stories.md +34 -0
  144. package/framework/templates/examples/spec-examples.md +1 -1
  145. package/framework/templates/infrastructure/github/README.md +11 -11
  146. package/framework/templates/infrastructure/github/workflows/deploy-azure-app-service.yml.hbs +2 -2
  147. package/framework/templates/meta-prompts/parallel-workers/parallel-worker.md +2 -2
  148. package/framework/templates/meta-prompts/validators/pre-commit-validator.md +1 -1
  149. package/framework/workflows/configs/express.json +45 -0
  150. package/framework/workflows/configs/spec-only.json +43 -0
  151. package/framework/workflows/docs/enforcement-pipeline.md +8 -8
  152. package/framework/workflows/docs/full-morph.md +3 -3
  153. package/package.json +3 -1
  154. package/scripts/generate-refs.js +336 -0
  155. package/scripts/generate-standards-registry.js +44 -0
  156. package/scripts/validate-real.mjs +255 -0
  157. package/src/commands/feature/create-story.js +362 -361
  158. package/src/commands/feature/shard-spec.js +225 -224
  159. package/src/commands/feature/sprint-status.js +1 -1
  160. package/src/commands/generation/generate-onboarding.js +169 -0
  161. package/src/commands/generation/generate.js +2 -2
  162. package/src/commands/mcp/mcp-setup.js +315 -0
  163. package/src/commands/project/changes.js +66 -0
  164. package/src/commands/project/checkpoint.js +209 -0
  165. package/src/commands/project/cost.js +179 -0
  166. package/src/commands/project/diff.js +278 -0
  167. package/src/commands/project/doctor.js +55 -7
  168. package/src/commands/project/init.js +318 -136
  169. package/src/commands/project/revert.js +173 -0
  170. package/src/commands/project/standards.js +80 -0
  171. package/src/commands/project/status.js +376 -0
  172. package/src/commands/project/update-agents.js +23 -0
  173. package/src/commands/project/update.js +60 -88
  174. package/src/commands/state/advance-phase.js +4 -3
  175. package/src/commands/state/state.js +10 -3
  176. package/src/commands/state/validate-phase.js +19 -2
  177. package/src/commands/templates/template-customize.js +4 -4
  178. package/src/commands/templates/template-render.js +1 -1
  179. package/src/commands/templates/template-show.js +1 -1
  180. package/src/commands/validation/validate-feature.js +359 -0
  181. package/src/core/orchestrator.js +3 -38
  182. package/src/core/paths/output-schema.js +135 -0
  183. package/src/core/state/state-manager.js +831 -592
  184. package/src/core/templates/template-registry.js +2 -2
  185. package/src/core/workflows/workflow-detector.js +17 -1
  186. package/src/lib/agents/micro-agent-factory.js +1 -1
  187. package/src/lib/context/context-bundler.js +2 -1
  188. package/src/lib/detectors/claude-config-detector.js +390 -0
  189. package/src/lib/detectors/conversation-analyzer.js +4 -4
  190. package/src/lib/detectors/design-system-detector.js +6 -5
  191. package/src/lib/detectors/standards-generator.js +2 -2
  192. package/src/lib/generators/context-generator.js +539 -538
  193. package/src/lib/generators/recap-generator.js +1 -1
  194. package/src/lib/generators/settings-generator.js +210 -0
  195. package/src/lib/hooks/hook-executor.js +1 -1
  196. package/src/lib/installers/mcp-installer.js +299 -0
  197. package/src/lib/learning/learning-system.js +3 -3
  198. package/src/lib/orchestration/team-orchestrator.js +1 -1
  199. package/src/lib/standards/standards-context-injector.js +7 -7
  200. package/src/lib/threads/thread-coordinator.js +1 -1
  201. package/src/lib/troubleshooting/troubleshoot-grep.js +1 -1
  202. package/src/lib/validators/contracts/contract-compliance-validator.js +274 -273
  203. package/src/lib/validators/design-system/design-system-validator.js +1 -1
  204. package/src/lib/validators/spec-validator.js +258 -258
  205. package/src/lib/validators/validation-runner.js +270 -269
  206. package/src/utils/agents-installer.js +206 -0
  207. package/src/utils/claude-settings-manager.js +258 -0
  208. package/src/utils/file-copier.js +1 -1
  209. package/src/utils/hooks-installer.js +354 -28
  210. package/src/utils/skills-installer.js +118 -0
  211. package/.morph/project/context/README.md +0 -17
  212. package/.morph/project/context/detection-log.md +0 -16
  213. package/.morph/project/standards/inferred.md +0 -59
  214. package/framework/hooks/agent-stop/validate-and-continue.js +0 -96
  215. package/framework/hooks/agent-stop/validate-checkpoints.js +0 -101
  216. package/framework/hooks/agent-stop/validate-tests.js +0 -109
  217. package/framework/hooks/agent-teams/dispatch.js +0 -67
  218. package/framework/hooks/agent-teams/phase-advanced.js +0 -80
  219. package/framework/hooks/agent-teams/task-completed.js +0 -76
  220. package/framework/hooks/agent-teams/teammate-idle.js +0 -70
  221. package/framework/skills/level-1-workflows/phase-design.md +0 -213
  222. package/framework/skills/level-1-workflows/phase-setup.md +0 -106
  223. package/framework/skills/level-1-workflows/phase-uiux.md +0 -169
  224. package/framework/skills/level-2-domains/backend/api-designer.md +0 -59
  225. package/framework/skills/level-2-domains/backend/ef-modeler.md +0 -58
  226. package/framework/skills/level-3-technologies/README.md +0 -7
  227. package/framework/skills/level-4-patterns/README.md +0 -7
  228. package/src/commands/agents/agents-fuse.js +0 -97
  229. package/src/commands/agents/micro-agent.js +0 -112
  230. package/src/commands/agents/spawn-team.js +0 -237
  231. package/src/commands/agents/squad-template.js +0 -146
  232. package/src/commands/analytics/analytics.js +0 -176
  233. package/src/commands/context/context-prime.js +0 -63
  234. package/src/commands/context/core-four.js +0 -54
  235. package/src/commands/generation/generate-context.js +0 -40
  236. package/src/commands/project/detect-agents.js +0 -207
  237. package/src/commands/project/detect-workflow.js +0 -174
  238. package/src/commands/threads/thread-template.js +0 -103
  239. package/src/commands/threads/threads.js +0 -261
  240. package/src/commands/utils/session-summary.js +0 -291
  241. package/src/llm/analyzer.js +0 -215
  242. package/src/llm/few-shot-examples.js +0 -216
  243. package/src/llm/project-config-schema.json +0 -188
  244. package/src/llm/prompt-builder.js +0 -96
  245. /package/.morph/{config → framework}/agents.json +0 -0
  246. /package/.morph/{standards → framework/standards}/ai-agents/blazor-ui.md +0 -0
  247. /package/.morph/{standards → framework/standards}/ai-agents/production.md +0 -0
  248. /package/.morph/{standards → framework/standards}/ai-agents/setup.md +0 -0
  249. /package/.morph/{standards → framework/standards}/ai-agents/workflows.md +0 -0
  250. /package/.morph/{standards → framework/standards}/architecture/ddd/aggregates.md +0 -0
  251. /package/.morph/{standards → framework/standards}/architecture/ddd/entities.md +0 -0
  252. /package/.morph/{standards → framework/standards}/architecture/ddd/value-objects.md +0 -0
  253. /package/.morph/{standards → framework/standards}/backend/api/minimal-api.md +0 -0
  254. /package/.morph/{standards → framework/standards}/backend/api/rest.md +0 -0
  255. /package/.morph/{standards → framework/standards}/backend/api/validation.md +0 -0
  256. /package/.morph/{standards → framework/standards}/backend/authentication/passkeys.md +0 -0
  257. /package/.morph/{standards → framework/standards}/backend/database/ef-core.md +0 -0
  258. /package/.morph/{standards → framework/standards}/backend/database/migrations.md +0 -0
  259. /package/.morph/{standards → framework/standards}/backend/database/postgresql/database.md +0 -0
  260. /package/.morph/{standards → framework/standards}/backend/database/repository-patterns.md +0 -0
  261. /package/.morph/{standards → framework/standards}/backend/database/vector-search-rag.md +0 -0
  262. /package/.morph/{standards → framework/standards}/backend/dotnet/async.md +0 -0
  263. /package/.morph/{standards → framework/standards}/backend/dotnet/core.md +0 -0
  264. /package/.morph/{standards → framework/standards}/backend/dotnet/di.md +0 -0
  265. /package/.morph/{standards → framework/standards}/backend/dotnet/program-cs-checklist.md +0 -0
  266. /package/.morph/{standards → framework/standards}/backend/integrations/asaas/asaas-api.md +0 -0
  267. /package/.morph/{standards → framework/standards}/backend/integrations/clerk/clerk-auth.md +0 -0
  268. /package/.morph/{standards → framework/standards}/backend/integrations/hangfire/hangfire-jobs.md +0 -0
  269. /package/.morph/{standards → framework/standards}/backend/integrations/resend/resend-email.md +0 -0
  270. /package/.morph/{standards → framework/standards}/context/analytics.md +0 -0
  271. /package/.morph/{standards → framework/standards}/context/bundles.md +0 -0
  272. /package/.morph/{standards → framework/standards}/context/priming.md +0 -0
  273. /package/.morph/{standards → framework/standards}/core/architecture.md +0 -0
  274. /package/.morph/{standards → framework/standards}/core/coding.md +0 -0
  275. /package/.morph/{standards → framework/standards}/core/git-branching-strategy.md +0 -0
  276. /package/.morph/{standards → framework/standards}/core/git.md +0 -0
  277. /package/.morph/{standards → framework/standards}/core/testing.md +0 -0
  278. /package/.morph/{standards → framework/standards}/data/nosql/blob-storage.md +0 -0
  279. /package/.morph/{standards → framework/standards}/data/nosql/cache/redis.md +0 -0
  280. /package/.morph/{standards → framework/standards}/data/nosql/cosmos-db.md +0 -0
  281. /package/.morph/{standards → framework/standards}/data/vector-search/azure-ai-search.md +0 -0
  282. /package/.morph/{standards → framework/standards}/data/vector-search/rag-chunking.md +0 -0
  283. /package/.morph/{standards → framework/standards}/frontend/blazor/design-checklist.md +0 -0
  284. /package/.morph/{standards → framework/standards}/frontend/blazor/fluent-ui-setup.md +0 -0
  285. /package/.morph/{standards → framework/standards}/frontend/blazor/fluent-ui.md +0 -0
  286. /package/.morph/{standards → framework/standards}/frontend/blazor/html-conversion.md +0 -0
  287. /package/.morph/{standards → framework/standards}/frontend/blazor/lifecycle.md +0 -0
  288. /package/.morph/{standards → framework/standards}/frontend/blazor/pitfalls.md +0 -0
  289. /package/.morph/{standards → framework/standards}/frontend/blazor/state.md +0 -0
  290. /package/.morph/{standards → framework/standards}/frontend/design-system/animations.md +0 -0
  291. /package/.morph/{standards → framework/standards}/frontend/design-system/naming.md +0 -0
  292. /package/.morph/{standards → framework/standards}/infrastructure/azure/azure.md +0 -0
  293. /package/.morph/{standards → framework/standards}/infrastructure/azure/bicep/bicep-patterns.md +0 -0
  294. /package/.morph/{standards → framework/standards}/infrastructure/azure/devops/azure-devops-setup.md +0 -0
  295. /package/.morph/{standards → framework/standards}/infrastructure/azure/devops/local-development.md +0 -0
  296. /package/.morph/{standards → framework/standards}/infrastructure/azure/services/functions.md +0 -0
  297. /package/.morph/{standards → framework/standards}/infrastructure/azure/services/service-bus.md +0 -0
  298. /package/.morph/{standards → framework/standards}/infrastructure/azure/services/storage.md +0 -0
  299. /package/.morph/{standards → framework/standards}/infrastructure/docker/easypanel-deploy.md +0 -0
  300. /package/.morph/{standards → framework/standards}/infrastructure/supabase/mcp-setup.md +0 -0
  301. /package/.morph/{standards → framework/standards}/infrastructure/supabase/supabase-auth.md +0 -0
  302. /package/.morph/{standards → framework/standards}/infrastructure/supabase/supabase-pgvector.md +0 -0
  303. /package/.morph/{standards → framework/standards}/infrastructure/supabase/supabase-rls.md +0 -0
  304. /package/.morph/{standards → framework/standards}/infrastructure/supabase/supabase-storage.md +0 -0
  305. /package/.morph/{standards → framework/standards}/integration/api/graphql.md +0 -0
  306. /package/.morph/{standards → framework/standards}/integration/api/grpc.md +0 -0
  307. /package/.morph/{standards → framework/standards}/integration/api/rest-design.md +0 -0
  308. /package/.morph/{standards → framework/standards}/integration/event-driven/cqrs.md +0 -0
  309. /package/.morph/{standards → framework/standards}/integration/event-driven/event-sourcing.md +0 -0
  310. /package/.morph/{standards → framework/standards}/integration/event-driven/service-bus.md +0 -0
  311. /package/.morph/{standards → framework/standards}/observability/logging.md +0 -0
  312. /package/.morph/{standards → framework/standards}/observability/metrics.md +0 -0
  313. /package/.morph/{standards → framework/standards}/observability/monitoring.md +0 -0
  314. /package/.morph/{standards → framework/standards}/observability/tracing.md +0 -0
  315. /package/.morph/{standards → framework/standards}/workflows/parallel-execution.md +0 -0
  316. /package/.morph/{standards → framework/standards}/workflows/thread-management.md +0 -0
  317. /package/.morph/{templates → framework/templates}/.idea/morph-templates.xml +0 -0
  318. /package/.morph/{templates → framework/templates}/.vscode/morph-templates.code-snippets +0 -0
  319. /package/.morph/{templates → framework/templates}/IDE-SNIPPETS.md +0 -0
  320. /package/.morph/{templates → framework/templates}/code/dotnet/backend/repository.cs +0 -0
  321. /package/.morph/{templates → framework/templates}/code/dotnet/backend/service.cs +0 -0
  322. /package/.morph/{templates → framework/templates}/code/dotnet/contracts/Commands.cs +0 -0
  323. /package/.morph/{templates → framework/templates}/code/dotnet/contracts/Entities.cs +0 -0
  324. /package/.morph/{templates → framework/templates}/code/dotnet/contracts/Queries.cs +0 -0
  325. /package/.morph/{templates → framework/templates}/code/dotnet/contracts/README.md +0 -0
  326. /package/.morph/{templates → framework/templates}/code/dotnet/contracts/api-contracts.cs +0 -0
  327. /package/.morph/{templates → framework/templates}/code/dotnet/contracts/contracts.cs +0 -0
  328. /package/.morph/{templates → framework/templates}/code/dotnet/database/migration.cs +0 -0
  329. /package/.morph/{templates → framework/templates}/code/dotnet/frontend/component.razor +0 -0
  330. /package/.morph/{templates → framework/templates}/code/dotnet/jobs/agent.cs +0 -0
  331. /package/.morph/{templates → framework/templates}/code/dotnet/jobs/job.cs +0 -0
  332. /package/.morph/{templates → framework/templates}/code/dotnet/test.cs +0 -0
  333. /package/.morph/{templates → framework/templates}/code/sql/rls-policy.sql +0 -0
  334. /package/.morph/{templates → framework/templates}/code/sql/supabase-migration.sql +0 -0
  335. /package/.morph/{templates → framework/templates}/code/sql/supabase-migration.template.sql +0 -0
  336. /package/.morph/{templates → framework/templates}/code/typescript/contracts.ts +0 -0
  337. /package/.morph/{templates → framework/templates}/docs/proposal.md +0 -0
  338. /package/.morph/{templates → framework/templates}/examples/design-system-examples.md +0 -0
  339. /package/.morph/{templates → framework/templates}/feature/decisions.md +0 -0
  340. /package/.morph/{templates → framework/templates}/feature/recap.md +0 -0
  341. /package/.morph/{templates → framework/templates}/feature/tasks.md +0 -0
  342. /package/.morph/{templates → framework/templates}/infrastructure/azure/Dockerfile.example +0 -0
  343. /package/.morph/{templates → framework/templates}/infrastructure/azure/README.md +0 -0
  344. /package/.morph/{templates → framework/templates}/infrastructure/azure/app-insights.bicep +0 -0
  345. /package/.morph/{templates → framework/templates}/infrastructure/azure/app-service.bicep +0 -0
  346. /package/.morph/{templates → framework/templates}/infrastructure/azure/container-app-env.bicep +0 -0
  347. /package/.morph/{templates → framework/templates}/infrastructure/azure/container-app.bicep +0 -0
  348. /package/.morph/{templates → framework/templates}/infrastructure/azure/deploy-checklist.md +0 -0
  349. /package/.morph/{templates → framework/templates}/infrastructure/azure/deploy.ps1 +0 -0
  350. /package/.morph/{templates → framework/templates}/infrastructure/azure/deploy.sh +0 -0
  351. /package/.morph/{templates → framework/templates}/infrastructure/azure/key-vault.bicep +0 -0
  352. /package/.morph/{templates → framework/templates}/infrastructure/azure/main.bicep +0 -0
  353. /package/.morph/{templates → framework/templates}/infrastructure/azure/parameters.dev.json +0 -0
  354. /package/.morph/{templates → framework/templates}/infrastructure/azure/parameters.prod.json +0 -0
  355. /package/.morph/{templates → framework/templates}/infrastructure/azure/parameters.staging.json +0 -0
  356. /package/.morph/{templates → framework/templates}/infrastructure/azure/sql-database.bicep +0 -0
  357. /package/.morph/{templates → framework/templates}/infrastructure/azure/storage.bicep +0 -0
  358. /package/.morph/{templates → framework/templates}/infrastructure/docker/Dockerfile.template +0 -0
  359. /package/.morph/{templates → framework/templates}/infrastructure/docker/docker-compose.template.yml +0 -0
  360. /package/.morph/{templates → framework/templates}/infrastructure/docker/dockerfile-api.dockerfile +0 -0
  361. /package/.morph/{templates → framework/templates}/infrastructure/docker/dockerfile-web.dockerfile +0 -0
  362. /package/.morph/{templates → framework/templates}/infrastructure/docker/easypanel.template.json +0 -0
  363. /package/.morph/{templates → framework/templates}/infrastructure/github/actions/azure-auth/action.yml.hbs +0 -0
  364. /package/.morph/{templates → framework/templates}/infrastructure/github/actions/docker-build-push/action.yml.hbs +0 -0
  365. /package/.morph/{templates → framework/templates}/infrastructure/github/actions/health-check/action.yml.hbs +0 -0
  366. /package/.morph/{templates → framework/templates}/infrastructure/github/workflows/deploy-easypanel.yml.hbs +0 -0
  367. /package/.morph/{templates → framework/templates}/infrastructure/github/workflows/docker-build-push.yml.hbs +0 -0
  368. /package/.morph/{templates → framework/templates}/infrastructure/github/workflows/dotnet-build.yml.hbs +0 -0
  369. /package/.morph/{templates → framework/templates}/integrations/asaas-client.cs +0 -0
  370. /package/.morph/{templates → framework/templates}/integrations/asaas-webhook.cs +0 -0
  371. /package/.morph/{templates → framework/templates}/integrations/azure-identity-config.cs +0 -0
  372. /package/.morph/{templates → framework/templates}/integrations/clerk-config.cs +0 -0
  373. /package/.morph/{templates → framework/templates}/meta-prompts/fusion/fusion-agent.md +0 -0
  374. /package/.morph/{templates → framework/templates}/meta-prompts/fusion/fusion-aggregator.md +0 -0
  375. /package/.morph/{templates → framework/templates}/meta-prompts/hops/hop-retry.md +0 -0
  376. /package/.morph/{templates → framework/templates}/meta-prompts/hops/hop-validation.md +0 -0
  377. /package/.morph/{templates → framework/templates}/meta-prompts/hops/hop-wrapper.md +0 -0
  378. /package/.morph/{templates → framework/templates}/meta-prompts/parallel-workers/parallel-coordinator.md +0 -0
  379. /package/.morph/{templates → framework/templates}/meta-prompts/squad-leaders/backend-squad.md +0 -0
  380. /package/.morph/{templates → framework/templates}/meta-prompts/squad-leaders/frontend-squad.md +0 -0
  381. /package/.morph/{templates → framework/templates}/meta-prompts/squad-leaders/squad-leader.md +0 -0
  382. /package/.morph/{templates → framework/templates}/meta-prompts/validators/checkpoint-validator.md +0 -0
  383. /package/.morph/{templates → framework/templates}/saas/subscription.cs +0 -0
  384. /package/.morph/{templates → framework/templates}/saas/tenant.cs +0 -0
  385. /package/.morph/{templates → framework/templates}/state.template.json +0 -0
  386. /package/.morph/{templates → framework/templates}/ui/FluentDesignTheme.cs +0 -0
  387. /package/.morph/{templates → framework/templates}/ui/MudTheme.cs +0 -0
  388. /package/.morph/{templates → framework/templates}/ui/design-system.css +0 -0
  389. /package/framework/{skills/level-2-domains → agents}/README.md +0 -0
  390. /package/framework/hooks/{commit-msg → git/commit-msg}/conventional-commits.sh +0 -0
  391. /package/framework/hooks/{pre-commit → git/pre-commit}/agents.sh +0 -0
  392. /package/framework/hooks/{pre-commit → git/pre-commit}/orchestrator.sh +0 -0
  393. /package/framework/hooks/{pre-commit → git/pre-commit}/specs.sh +0 -0
  394. /package/framework/hooks/{pre-push → git/pre-push}/run-tests.sh +0 -0
@@ -0,0 +1,91 @@
1
+ #!/usr/bin/env node
2
+
3
+ /**
4
+ * UserPromptSubmit Hook: Enrich User Prompts with Context
5
+ *
6
+ * Event: UserPromptSubmit
7
+ *
8
+ * Scans user prompt for morph-spec keywords and injects relevant context:
9
+ * - Feature name mentioned → inject its current status/phase
10
+ * - "implement"/"code" while not in implement phase → warn about wrong phase
11
+ * - "approve"/"looks good" → inject approval command syntax
12
+ * - "next task" → inject current task list
13
+ *
14
+ * Fail-open: exits 0 on any error.
15
+ */
16
+
17
+ import { readStdin } from '../../shared/stdin-reader.js';
18
+ import { stateExists, loadState, getActiveFeature, getFeature, getPendingGates } from '../../shared/state-reader.js';
19
+ import { injectContext, pass } from '../../shared/hook-response.js';
20
+
21
+ try {
22
+ if (!stateExists()) pass();
23
+
24
+ const payload = await readStdin();
25
+ if (!payload) pass();
26
+
27
+ const userPrompt = payload?.user_prompt || payload?.content || '';
28
+ if (!userPrompt || userPrompt.length < 3) pass();
29
+
30
+ const promptLower = userPrompt.toLowerCase();
31
+ const state = loadState();
32
+ if (!state?.features) pass();
33
+
34
+ const context = [];
35
+
36
+ // Check if a feature name is mentioned
37
+ for (const [featureName, feature] of Object.entries(state.features)) {
38
+ if (promptLower.includes(featureName.toLowerCase())) {
39
+ context.push(`[morph-spec] Feature '${featureName}': phase=${feature.phase}, status=${feature.status}`);
40
+ if (feature.tasks?.total > 0) {
41
+ context.push(` Tasks: ${feature.tasks.completed || 0}/${feature.tasks.total} completed`);
42
+ }
43
+ break; // Only inject for the first matched feature
44
+ }
45
+ }
46
+
47
+ // Check for implement/code intent while not in implement phase
48
+ const active = getActiveFeature();
49
+ if (active) {
50
+ const { name, feature } = active;
51
+
52
+ const codeKeywords = ['implement', 'code', 'start coding', 'write the code', 'build it', 'let\'s build'];
53
+ const wantsToCode = codeKeywords.some(kw => promptLower.includes(kw));
54
+
55
+ if (wantsToCode && feature.phase !== 'implement' && feature.phase !== 'sync') {
56
+ context.push(
57
+ `[morph-spec] WARNING: Feature '${name}' is in '${feature.phase}' phase, not 'implement'.` +
58
+ ` Complete the current phase first or advance: morph-spec phase advance ${name}`
59
+ );
60
+ }
61
+
62
+ // Check for approval intent
63
+ const approvalKeywords = ['approve', 'approved', 'looks good', 'lgtm', 'ship it'];
64
+ const wantsToApprove = approvalKeywords.some(kw => promptLower.includes(kw));
65
+
66
+ if (wantsToApprove) {
67
+ const pending = getPendingGates(name);
68
+ if (pending.length > 0) {
69
+ context.push(
70
+ `[morph-spec] To approve, use: morph-spec approve ${name} ${pending[0]}`
71
+ );
72
+ }
73
+ }
74
+
75
+ // Check for "next task" intent
76
+ if (promptLower.includes('next task') || promptLower.includes('what\'s next')) {
77
+ if (feature.phase === 'implement') {
78
+ context.push(
79
+ `[morph-spec] Use: morph-spec task next ${name}`
80
+ );
81
+ }
82
+ }
83
+ }
84
+
85
+ if (context.length === 0) pass();
86
+
87
+ injectContext(context.join('\n'));
88
+ } catch {
89
+ // Fail-open
90
+ process.exit(0);
91
+ }
@@ -0,0 +1,45 @@
1
+ /**
2
+ * Shared hook response builders for Claude Code hooks.
3
+ *
4
+ * Claude Code hooks communicate via JSON to stdout.
5
+ * - PreToolUse: { "decision": "block"|"approve", "reason": "..." }
6
+ * - SessionStart/Stop/etc: { "additionalContext": "..." }
7
+ */
8
+
9
+ /**
10
+ * Block a tool use with a reason.
11
+ * @param {string} reason - Human-readable reason for blocking
12
+ */
13
+ export function block(reason) {
14
+ console.log(JSON.stringify({ decision: 'block', reason }));
15
+ process.exit(0);
16
+ }
17
+
18
+ /**
19
+ * Approve a tool use, optionally injecting context.
20
+ * @param {string} [context] - Additional context to inject
21
+ */
22
+ export function approve(context) {
23
+ if (context) {
24
+ console.log(JSON.stringify({ decision: 'approve', additionalContext: context }));
25
+ }
26
+ // No output = implicit approve
27
+ process.exit(0);
28
+ }
29
+
30
+ /**
31
+ * Inject additional context (for SessionStart, Stop, UserPromptSubmit, etc.).
32
+ * @param {string} text - Context text to inject
33
+ * @param {Object} [extra] - Additional fields to include in response
34
+ */
35
+ export function injectContext(text, extra = {}) {
36
+ console.log(JSON.stringify({ additionalContext: text, ...extra }));
37
+ process.exit(0);
38
+ }
39
+
40
+ /**
41
+ * Silent exit — no output, no blocking.
42
+ */
43
+ export function pass() {
44
+ process.exit(0);
45
+ }
@@ -0,0 +1,129 @@
1
+ // GENERATED by scripts/generate-refs.js — DO NOT EDIT manually
2
+ // Source of truth: src/core/paths/output-schema.js
3
+ // Regenerate with: node scripts/generate-refs.js
4
+ /**
5
+ * Shared phase utilities for Claude Code hooks.
6
+ *
7
+ * Maps phases to directories and output types.
8
+ */
9
+
10
+ /** Phase order */
11
+ export const PHASE_ORDER = ["proposal","setup","uiux","design","clarify","tasks","implement","sync"];
12
+
13
+ /** Map phase → allowed output subdirectory */
14
+ export const PHASE_DIRS = {
15
+ proposal: '0-proposal',
16
+ setup: '0-proposal',
17
+ uiux: '2-ui',
18
+ design: '1-design',
19
+ clarify: '1-design',
20
+ tasks: '3-tasks',
21
+ implement: '4-implement',
22
+ sync: '4-implement',
23
+ };
24
+
25
+ /** Map output type (camelCase) → phase that produces it */
26
+ export const OUTPUT_PHASE_MAP = {
27
+ proposal: 'proposal',
28
+ schemaAnalysis: 'design',
29
+ spec: 'design',
30
+ clarifications: 'clarify',
31
+ contracts: 'design',
32
+ tasks: 'tasks',
33
+ uiDesignSystem: 'uiux',
34
+ uiMockups: 'uiux',
35
+ uiComponents: 'uiux',
36
+ uiFlows: 'uiux',
37
+ decisions: 'design',
38
+ recap: 'implement',
39
+ };
40
+
41
+ /** Map filename → output type (camelCase) */
42
+ export const FILENAME_TO_OUTPUT = {
43
+ 'proposal.md': 'proposal',
44
+ 'schema-analysis.md': 'schemaAnalysis',
45
+ 'spec.md': 'spec',
46
+ 'clarifications.md': 'clarifications',
47
+ 'contracts.cs': 'contracts',
48
+ 'tasks.md': 'tasks',
49
+ 'design-system.md': 'uiDesignSystem',
50
+ 'mockups.md': 'uiMockups',
51
+ 'components.md': 'uiComponents',
52
+ 'flows.md': 'uiFlows',
53
+ 'decisions.md': 'decisions',
54
+ 'recap.md': 'recap',
55
+ };
56
+
57
+ /** Protected spec files and the approval gate that locks them */
58
+ export const PROTECTED_SPEC_FILES = {
59
+ 'schema-analysis.md': 'design',
60
+ 'spec.md': 'design',
61
+ 'contracts.cs': 'design',
62
+ 'tasks.md': 'tasks',
63
+ 'design-system.md': 'uiux',
64
+ 'mockups.md': 'uiux',
65
+ 'components.md': 'uiux',
66
+ 'flows.md': 'uiux',
67
+ };
68
+
69
+ /**
70
+ * Extract feature name from a .morph/features/{feature}/... path
71
+ * @param {string} filePath - File path to analyze
72
+ * @returns {string|null} Feature name or null
73
+ */
74
+ export function extractFeatureName(filePath) {
75
+ const normalized = filePath.replace(/\\/g, '/');
76
+ const match = normalized.match(/\.morph\/features\/([^/]+)\//);
77
+ return match ? match[1] : null;
78
+ }
79
+
80
+ /**
81
+ * Extract phase subdirectory from a .morph/features/{feature}/{phaseDir}/... path
82
+ * @param {string} filePath - File path to analyze
83
+ * @returns {string|null} Phase directory (e.g., '0-proposal', '1-design') or null
84
+ */
85
+ export function extractPhaseDir(filePath) {
86
+ const normalized = filePath.replace(/\\/g, '/');
87
+ const match = normalized.match(/\.morph\/features\/[^/]+\/(\d+-[^/]+)\//);
88
+ return match ? match[1] : null;
89
+ }
90
+
91
+ /**
92
+ * Check if a file path is inside .morph/features/
93
+ * @param {string} filePath
94
+ * @returns {boolean}
95
+ */
96
+ export function isFeaturePath(filePath) {
97
+ const normalized = filePath.replace(/\\/g, '/');
98
+ return normalized.includes('.morph/features/');
99
+ }
100
+
101
+ /**
102
+ * Check if a file path is inside .morph/framework/ (readonly)
103
+ * @param {string} filePath
104
+ * @returns {boolean}
105
+ */
106
+ export function isFrameworkPath(filePath) {
107
+ const normalized = filePath.replace(/\\/g, '/');
108
+ return normalized.includes('.morph/framework/');
109
+ }
110
+
111
+ /**
112
+ * Check if a file path is state.json
113
+ * @param {string} filePath
114
+ * @returns {boolean}
115
+ */
116
+ export function isStatePath(filePath) {
117
+ const normalized = filePath.replace(/\\/g, '/');
118
+ return normalized.endsWith('.morph/state.json');
119
+ }
120
+
121
+ /**
122
+ * Get the basename of a file path
123
+ * @param {string} filePath
124
+ * @returns {string}
125
+ */
126
+ export function getBasename(filePath) {
127
+ const normalized = filePath.replace(/\\/g, '/');
128
+ return normalized.split('/').pop();
129
+ }
@@ -0,0 +1,138 @@
1
+ /**
2
+ * Shared read-only state accessor for Claude Code hooks.
3
+ *
4
+ * Wraps state.json reads with fail-open semantics:
5
+ * - Returns null instead of throwing on missing/corrupt state
6
+ * - Never writes to state.json (read-only)
7
+ * - Uses synchronous reads for <100ms performance
8
+ */
9
+
10
+ import { readFileSync, existsSync } from 'fs';
11
+ import { join } from 'path';
12
+
13
+ const STATE_FILE = '.morph/state.json';
14
+
15
+ /**
16
+ * Load state.json from the project root.
17
+ * Fail-open: returns null if file missing or corrupt.
18
+ * @param {string} [projectPath] - Project root (defaults to cwd)
19
+ * @returns {Object|null} State object or null
20
+ */
21
+ export function loadState(projectPath) {
22
+ try {
23
+ const statePath = join(projectPath || process.cwd(), STATE_FILE);
24
+ if (!existsSync(statePath)) return null;
25
+ return JSON.parse(readFileSync(statePath, 'utf-8'));
26
+ } catch {
27
+ return null;
28
+ }
29
+ }
30
+
31
+ /**
32
+ * Check if state.json exists.
33
+ * @param {string} [projectPath]
34
+ * @returns {boolean}
35
+ */
36
+ export function stateExists(projectPath) {
37
+ return existsSync(join(projectPath || process.cwd(), STATE_FILE));
38
+ }
39
+
40
+ /**
41
+ * Get the active feature (most recently updated in_progress feature).
42
+ * @param {string} [projectPath]
43
+ * @returns {{ name: string, feature: Object }|null}
44
+ */
45
+ export function getActiveFeature(projectPath) {
46
+ const state = loadState(projectPath);
47
+ if (!state?.features) return null;
48
+
49
+ let active = null;
50
+ let latestUpdate = '';
51
+
52
+ for (const [name, feature] of Object.entries(state.features)) {
53
+ if (feature.status === 'in_progress' || feature.status === 'draft') {
54
+ const updated = feature.updatedAt || feature.createdAt || '';
55
+ if (updated >= latestUpdate) {
56
+ latestUpdate = updated;
57
+ active = { name, feature };
58
+ }
59
+ }
60
+ }
61
+
62
+ return active;
63
+ }
64
+
65
+ /**
66
+ * Get a specific feature by name.
67
+ * @param {string} featureName
68
+ * @param {string} [projectPath]
69
+ * @returns {Object|null}
70
+ */
71
+ export function getFeature(featureName, projectPath) {
72
+ const state = loadState(projectPath);
73
+ return state?.features?.[featureName] || null;
74
+ }
75
+
76
+ /**
77
+ * Get the current phase of a feature.
78
+ * @param {string} featureName
79
+ * @param {string} [projectPath]
80
+ * @returns {string|null}
81
+ */
82
+ export function getFeaturePhase(featureName, projectPath) {
83
+ const feature = getFeature(featureName, projectPath);
84
+ return feature?.phase || null;
85
+ }
86
+
87
+ /**
88
+ * Get approval status for a gate.
89
+ * @param {string} featureName
90
+ * @param {string} gate - 'proposal'|'uiux'|'design'|'tasks'
91
+ * @param {string} [projectPath]
92
+ * @returns {boolean}
93
+ */
94
+ export function isGateApproved(featureName, gate, projectPath) {
95
+ const feature = getFeature(featureName, projectPath);
96
+ return feature?.approvalGates?.[gate]?.approved === true;
97
+ }
98
+
99
+ /**
100
+ * Get all pending approval gates for a feature.
101
+ * @param {string} featureName
102
+ * @param {string} [projectPath]
103
+ * @returns {string[]} List of gate names that are not yet approved
104
+ */
105
+ export function getPendingGates(featureName, projectPath) {
106
+ const feature = getFeature(featureName, projectPath);
107
+ if (!feature?.approvalGates) return [];
108
+
109
+ return Object.entries(feature.approvalGates)
110
+ .filter(([, gate]) => !gate.approved)
111
+ .map(([name]) => name);
112
+ }
113
+
114
+ /**
115
+ * Get feature outputs status.
116
+ * @param {string} featureName
117
+ * @param {string} [projectPath]
118
+ * @returns {Object|null} outputs map or null
119
+ */
120
+ export function getOutputs(featureName, projectPath) {
121
+ const feature = getFeature(featureName, projectPath);
122
+ return feature?.outputs || null;
123
+ }
124
+
125
+ /**
126
+ * Get uncompleted required outputs for current phase.
127
+ * @param {string} featureName
128
+ * @param {string} [projectPath]
129
+ * @returns {Array<{type: string, path: string}>}
130
+ */
131
+ export function getMissingOutputs(featureName, projectPath) {
132
+ const feature = getFeature(featureName, projectPath);
133
+ if (!feature?.outputs) return [];
134
+
135
+ return Object.entries(feature.outputs)
136
+ .filter(([, output]) => !output.created)
137
+ .map(([type, output]) => ({ type, path: output.path }));
138
+ }
@@ -0,0 +1,26 @@
1
+ /**
2
+ * Shared stdin reader for Claude Code hooks.
3
+ *
4
+ * Reads JSON payload from stdin (provided by Claude Code to hooks).
5
+ * Returns parsed object or null on failure.
6
+ */
7
+
8
+ /**
9
+ * Read and parse JSON from stdin
10
+ * @returns {Promise<Object|null>} Parsed JSON or null
11
+ */
12
+ export function readStdin() {
13
+ return new Promise((resolve) => {
14
+ let input = '';
15
+ process.stdin.setEncoding('utf-8');
16
+ process.stdin.on('data', (chunk) => { input += chunk; });
17
+ process.stdin.on('end', () => {
18
+ try {
19
+ resolve(JSON.parse(input || '{}'));
20
+ } catch {
21
+ resolve(null);
22
+ }
23
+ });
24
+ process.stdin.on('error', () => resolve(null));
25
+ });
26
+ }
@@ -0,0 +1,145 @@
1
+ {
2
+ "version": "1.0.0",
3
+ "phases": {
4
+ "proposal": {
5
+ "id": "proposal",
6
+ "index": 0,
7
+ "folder": "0-proposal",
8
+ "displayName": "Proposal",
9
+ "goals": [
10
+ "Understand the feature scope",
11
+ "Agree on high-level approach",
12
+ "Produce initial proposal document"
13
+ ],
14
+ "requiredOutputs": ["proposal"],
15
+ "optionalOutputs": [],
16
+ "recommendedMCPs": ["context7"],
17
+ "pausePoints": [
18
+ { "id": "proposal", "label": "Approve Proposal" }
19
+ ],
20
+ "agentTiers": [1]
21
+ },
22
+ "setup": {
23
+ "id": "setup",
24
+ "index": 1,
25
+ "folder": null,
26
+ "displayName": "Setup",
27
+ "goals": [
28
+ "Load project context from .morph/context/",
29
+ "Activate relevant agents by tier and keyword",
30
+ "Confirm workflow type (fast-track / standard / full-morph)"
31
+ ],
32
+ "requiredOutputs": [],
33
+ "optionalOutputs": [],
34
+ "recommendedMCPs": ["github"],
35
+ "pausePoints": [],
36
+ "agentTiers": [1, 2]
37
+ },
38
+ "uiux": {
39
+ "id": "uiux",
40
+ "index": 1.5,
41
+ "folder": "2-ui",
42
+ "displayName": "UI/UX Design",
43
+ "optional": true,
44
+ "goals": [
45
+ "Define visual design and design system",
46
+ "Create component inventory and style guide",
47
+ "Produce wireframes and user flows"
48
+ ],
49
+ "requiredOutputs": ["uiDesignSystem"],
50
+ "optionalOutputs": ["uiMockups", "uiComponents", "uiFlows"],
51
+ "recommendedMCPs": ["playwright", "context7"],
52
+ "pausePoints": [
53
+ { "id": "uiux", "label": "Approve UI/UX Design" }
54
+ ],
55
+ "agentTiers": [1, 2, 3]
56
+ },
57
+ "design": {
58
+ "id": "design",
59
+ "index": 2,
60
+ "folder": "1-design",
61
+ "displayName": "Technical Design",
62
+ "goals": [
63
+ "Write technical specification",
64
+ "Define C# contracts and interfaces",
65
+ "Analyse schema changes",
66
+ "Document architectural decisions"
67
+ ],
68
+ "requiredOutputs": ["spec", "contracts"],
69
+ "optionalOutputs": ["schemaAnalysis", "clarifications", "decisions"],
70
+ "recommendedMCPs": ["supabase", "context7", "github"],
71
+ "pausePoints": [
72
+ { "id": "design", "label": "Approve Design Spec" }
73
+ ],
74
+ "agentTiers": [1, 2, 3, 4]
75
+ },
76
+ "clarify": {
77
+ "id": "clarify",
78
+ "index": 3,
79
+ "folder": "1-design",
80
+ "displayName": "Clarification",
81
+ "goals": [
82
+ "Resolve open questions and ambiguities",
83
+ "Update spec with clarification decisions",
84
+ "Confirm edge cases are handled"
85
+ ],
86
+ "requiredOutputs": ["clarifications"],
87
+ "optionalOutputs": [],
88
+ "recommendedMCPs": ["context7", "github"],
89
+ "pausePoints": [],
90
+ "agentTiers": [1, 2]
91
+ },
92
+ "tasks": {
93
+ "id": "tasks",
94
+ "index": 4,
95
+ "folder": "3-tasks",
96
+ "displayName": "Task Breakdown",
97
+ "goals": [
98
+ "Break approved spec into numbered, atomic tasks",
99
+ "Order tasks by dependency",
100
+ "Assign tasks to agent tiers"
101
+ ],
102
+ "requiredOutputs": ["tasks"],
103
+ "optionalOutputs": [],
104
+ "recommendedMCPs": ["context7", "github"],
105
+ "pausePoints": [
106
+ { "id": "tasks", "label": "Approve Task List" }
107
+ ],
108
+ "agentTiers": [1, 2, 3]
109
+ },
110
+ "implement": {
111
+ "id": "implement",
112
+ "index": 5,
113
+ "folder": "4-implement",
114
+ "displayName": "Implementation",
115
+ "goals": [
116
+ "Execute approved tasks in order",
117
+ "Follow framework standards at each step",
118
+ "Checkpoint every 3 tasks",
119
+ "Write implementation recap"
120
+ ],
121
+ "requiredOutputs": ["recap"],
122
+ "optionalOutputs": [],
123
+ "recommendedMCPs": ["supabase", "context7", "playwright", "github", "docker", "azure"],
124
+ "pausePoints": [],
125
+ "agentTiers": [1, 2, 3, 4]
126
+ },
127
+ "sync": {
128
+ "id": "sync",
129
+ "index": 6,
130
+ "folder": null,
131
+ "displayName": "Sync Standards",
132
+ "optional": true,
133
+ "goals": [
134
+ "Update framework standards from feature learnings",
135
+ "Capture new patterns to learning library",
136
+ "Archive completed feature"
137
+ ],
138
+ "requiredOutputs": [],
139
+ "optionalOutputs": [],
140
+ "recommendedMCPs": [],
141
+ "pausePoints": [],
142
+ "agentTiers": [1]
143
+ }
144
+ }
145
+ }
@@ -0,0 +1,10 @@
1
+ ---
2
+ paths:
3
+ - "**/*.cs"
4
+ - "**/*.csproj"
5
+ ---
6
+
7
+ # C# and .NET Standards
8
+
9
+ @.morph/framework/standards/core/coding.md
10
+ @.morph/framework/standards/backend/dotnet/core.md
@@ -0,0 +1,14 @@
1
+ ---
2
+ paths:
3
+ - "**/*.razor"
4
+ - "**/*.tsx"
5
+ - "**/*.ts"
6
+ - "**/*.css"
7
+ - "**/*.scss"
8
+ ---
9
+
10
+ # Frontend Standards
11
+
12
+ @.morph/framework/standards/frontend/blazor/design-checklist.md
13
+ @.morph/framework/standards/frontend/nextjs/nextjs-patterns.md
14
+ @.morph/framework/standards/frontend/design-system/naming.md
@@ -0,0 +1,13 @@
1
+ ---
2
+ paths:
3
+ - "**/*.bicep"
4
+ - "**/Dockerfile"
5
+ - "**/docker-compose*.yml"
6
+ - "**/pipelines/**"
7
+ - "**/.github/workflows/**"
8
+ ---
9
+
10
+ # Infrastructure Standards
11
+
12
+ @.morph/framework/standards/infrastructure/azure/azure.md
13
+ @.morph/framework/standards/infrastructure/docker/easypanel-deploy.md