@polymorphism-tech/morph-spec 4.3.6 → 4.5.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 (375) hide show
  1. package/.morph/.morphversion +3 -3
  2. package/.morph/analytics/threads-log.jsonl +44 -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/framework/standards/integration/mcp/mcp-tools.md +384 -0
  7. package/.morph/{templates → framework/templates}/README.md +17 -17
  8. package/.morph/{templates → framework/templates}/REGISTRY.json +48 -233
  9. package/.morph/framework/templates/code/dotnet/contracts/contracts.cs.hbs +172 -0
  10. package/.morph/{templates → framework/templates}/context/CONTEXT-FEATURE.md +1 -1
  11. package/.morph/{templates → framework/templates}/context/CONTEXT.md +3 -3
  12. package/.morph/framework/templates/docs/clarifications.md +253 -0
  13. package/.morph/framework/templates/docs/onboarding.md +123 -0
  14. package/.morph/framework/templates/docs/schema-analysis.md +119 -0
  15. package/.morph/{templates → framework/templates}/docs/spec.md +149 -149
  16. package/.morph/framework/templates/docs/ui-components.md +124 -0
  17. package/.morph/framework/templates/docs/ui-design-system.md +76 -0
  18. package/.morph/framework/templates/docs/ui-flows.md +167 -0
  19. package/.morph/framework/templates/docs/ui-mockups.md +98 -0
  20. package/.morph/{templates → framework/templates}/examples/spec-examples.md +1 -1
  21. package/.morph/{templates → framework/templates}/infrastructure/github/README.md +11 -11
  22. package/.morph/{templates → framework/templates}/infrastructure/github/workflows/deploy-azure-app-service.yml.hbs +2 -2
  23. package/.morph/{templates → framework/templates}/meta-prompts/parallel-workers/parallel-worker.md +2 -2
  24. package/.morph/{templates → framework/templates}/meta-prompts/validators/pre-commit-validator.md +1 -1
  25. package/.morph/logs/tool-failures.log +51 -0
  26. package/.morph/memory/pre-compact-2026-02-22T17-01-01-658Z.json +16 -0
  27. package/.morph/state.json +1 -1
  28. package/CLAUDE.md +20 -119
  29. package/README.md +20 -18
  30. package/bin/detect-agents.js +1 -1
  31. package/bin/morph-spec.js +116 -266
  32. package/bin/task-manager.cjs +2 -2
  33. package/bin/validate.js +1 -1
  34. package/claude-plugin.json +14 -0
  35. package/docs/claude-alignment-report.md +137 -0
  36. package/docs/plans/2026-02-22-claude-docs-morph-alignment-analysis.md +512 -0
  37. package/docs/plans/2026-02-22-claude-settings.md +515 -0
  38. package/docs/plans/2026-02-22-morph-cc-alignment-impl.md +728 -0
  39. package/docs/plans/2026-02-22-morph-spec-next.md +478 -0
  40. package/docs/plans/2026-02-22-native-alignment-design.md +199 -0
  41. package/docs/plans/2026-02-22-native-alignment-impl.md +925 -0
  42. package/docs/plans/2026-02-22-native-enrichment-design.md +244 -0
  43. package/docs/plans/2026-02-22-native-enrichment.md +735 -0
  44. package/framework/CLAUDE.md +77 -0
  45. package/framework/commands/morph-apply.md +9 -9
  46. package/framework/commands/morph-archive.md +8 -8
  47. package/framework/commands/morph-infra.md +1 -1
  48. package/framework/commands/morph-proposal.md +9 -9
  49. package/framework/commands/morph-status.md +3 -3
  50. package/framework/commands/morph-troubleshoot.md +1 -1
  51. package/framework/hooks/README.md +201 -282
  52. package/framework/hooks/claude-code/notification/approval-reminder.js +52 -0
  53. package/framework/hooks/claude-code/post-tool-use/dispatch.js +83 -0
  54. package/framework/hooks/claude-code/post-tool-use/handle-tool-failure.js +42 -0
  55. package/framework/hooks/claude-code/pre-compact/save-morph-context.js +61 -0
  56. package/framework/hooks/claude-code/pre-tool-use/enforce-phase-writes.js +71 -0
  57. package/framework/hooks/claude-code/pre-tool-use/protect-readonly-files.js +58 -0
  58. package/framework/hooks/claude-code/pre-tool-use/protect-spec-files.js +64 -0
  59. package/framework/hooks/claude-code/session-start/inject-morph-context.js +94 -0
  60. package/framework/hooks/claude-code/statusline.py +239 -0
  61. package/framework/hooks/claude-code/statusline.sh +7 -0
  62. package/framework/hooks/claude-code/stop/validate-completion.js +88 -0
  63. package/framework/hooks/claude-code/user-prompt/enrich-prompt.js +91 -0
  64. package/framework/hooks/shared/hook-response.js +45 -0
  65. package/framework/hooks/shared/phase-utils.js +129 -0
  66. package/framework/hooks/shared/state-reader.js +138 -0
  67. package/framework/hooks/shared/stdin-reader.js +26 -0
  68. package/framework/phases.json +145 -0
  69. package/framework/rules/csharp-standards.md +10 -0
  70. package/framework/rules/frontend-standards.md +14 -0
  71. package/framework/rules/infrastructure-standards.md +13 -0
  72. package/framework/rules/morph-workflow.md +86 -0
  73. package/framework/rules/testing-standards.md +11 -0
  74. package/framework/skills/level-0-meta/brainstorming.md +133 -0
  75. package/framework/skills/level-0-meta/code-review.md +12 -4
  76. package/framework/skills/level-0-meta/mcp-registry.json +207 -0
  77. package/framework/skills/level-0-meta/morph-checklist.md +9 -1
  78. package/framework/skills/level-0-meta/simulation-checklist.md +9 -1
  79. package/framework/skills/level-0-meta/tool-usage-guide.md +335 -0
  80. package/framework/skills/level-0-meta/verification-before-completion.md +145 -0
  81. package/framework/skills/level-1-workflows/morph-replicate.md +9 -1
  82. package/framework/skills/level-1-workflows/phase-clarify.md +65 -4
  83. package/framework/skills/level-1-workflows/phase-codebase-analysis.md +182 -0
  84. package/framework/skills/level-1-workflows/phase-design.md +342 -80
  85. package/framework/skills/level-1-workflows/phase-implement.md +254 -0
  86. package/framework/skills/level-1-workflows/phase-setup.md +76 -10
  87. package/framework/skills/level-1-workflows/phase-tasks.md +88 -7
  88. package/framework/skills/level-1-workflows/phase-uiux.md +95 -17
  89. package/framework/skills/level-2-domains/ai-agents/ai-system-architect.md +8 -1
  90. package/framework/skills/level-2-domains/architecture/po-pm-advisor.md +8 -1
  91. package/framework/skills/level-2-domains/architecture/prompt-engineer.md +8 -1
  92. package/framework/skills/level-2-domains/architecture/seo-growth-hacker.md +8 -1
  93. package/framework/skills/level-2-domains/architecture/standards-architect.md +11 -4
  94. package/framework/skills/level-2-domains/backend/api-designer.md +8 -1
  95. package/framework/skills/level-2-domains/backend/dotnet-senior.md +8 -1
  96. package/framework/skills/level-2-domains/backend/ef-modeler.md +8 -1
  97. package/framework/skills/level-2-domains/backend/hangfire-orchestrator.md +9 -2
  98. package/framework/skills/level-2-domains/backend/ms-agent-expert.md +8 -1
  99. package/framework/skills/level-2-domains/frontend/blazor-builder.md +8 -1
  100. package/framework/skills/level-2-domains/frontend/nextjs-expert.md +8 -1
  101. package/framework/skills/level-2-domains/frontend/ui-ux-designer.md +9 -2
  102. package/framework/skills/level-2-domains/infrastructure/azure-architect.md +8 -1
  103. package/framework/skills/level-2-domains/infrastructure/azure-deploy-specialist.md +8 -1
  104. package/framework/skills/level-2-domains/infrastructure/bicep-architect.md +8 -1
  105. package/framework/skills/level-2-domains/infrastructure/container-specialist.md +8 -1
  106. package/framework/skills/level-2-domains/infrastructure/devops-engineer.md +8 -1
  107. package/framework/skills/level-2-domains/integrations/asaas-financial.md +8 -1
  108. package/framework/skills/level-2-domains/integrations/azure-identity.md +8 -1
  109. package/framework/skills/level-2-domains/integrations/clerk-auth.md +8 -1
  110. package/framework/skills/level-2-domains/integrations/{hangfire-orchestrator.md → hangfire-integration.md} +8 -1
  111. package/framework/skills/level-2-domains/integrations/resend-email.md +8 -1
  112. package/framework/skills/level-2-domains/quality/code-analyzer.md +10 -3
  113. package/framework/skills/level-2-domains/quality/testing-specialist.md +8 -1
  114. package/framework/standards/STANDARDS.json +812 -0
  115. package/framework/standards/ai-agents/team-orchestration.md +3 -3
  116. package/framework/standards/frontend/nextjs/nextjs-patterns.md +17 -0
  117. package/framework/standards/integration/mcp/mcp-tools.md +384 -0
  118. package/framework/templates/README.md +17 -17
  119. package/framework/templates/REGISTRY.json +48 -233
  120. package/framework/templates/code/dotnet/contracts/contracts.cs.hbs +172 -0
  121. package/framework/templates/context/CONTEXT-FEATURE.md +1 -1
  122. package/framework/templates/context/CONTEXT.md +3 -3
  123. package/framework/templates/docs/clarifications.md +253 -0
  124. package/framework/templates/docs/onboarding.md +123 -0
  125. package/framework/templates/docs/schema-analysis.md +119 -0
  126. package/framework/templates/docs/spec.md +149 -149
  127. package/framework/templates/docs/ui-components.md +124 -0
  128. package/framework/templates/docs/ui-design-system.md +76 -0
  129. package/framework/templates/docs/ui-flows.md +167 -0
  130. package/framework/templates/docs/ui-mockups.md +98 -0
  131. package/framework/templates/docs/user-stories.md +34 -0
  132. package/framework/templates/examples/spec-examples.md +1 -1
  133. package/framework/templates/infrastructure/github/README.md +11 -11
  134. package/framework/templates/infrastructure/github/workflows/deploy-azure-app-service.yml.hbs +2 -2
  135. package/framework/templates/meta-prompts/parallel-workers/parallel-worker.md +2 -2
  136. package/framework/templates/meta-prompts/validators/pre-commit-validator.md +1 -1
  137. package/framework/workflows/configs/express.json +45 -0
  138. package/framework/workflows/configs/spec-only.json +43 -0
  139. package/framework/workflows/docs/enforcement-pipeline.md +8 -8
  140. package/framework/workflows/docs/full-morph.md +3 -3
  141. package/package.json +3 -2
  142. package/scripts/generate-refs.js +336 -0
  143. package/scripts/generate-standards-registry.js +44 -0
  144. package/scripts/validate-real.mjs +255 -0
  145. package/src/commands/feature/create-story.js +362 -361
  146. package/src/commands/feature/shard-spec.js +225 -224
  147. package/src/commands/feature/sprint-status.js +1 -1
  148. package/src/commands/generation/generate-onboarding.js +169 -0
  149. package/src/commands/generation/generate.js +2 -2
  150. package/src/commands/mcp/mcp-setup.js +315 -0
  151. package/src/commands/project/changes.js +66 -0
  152. package/src/commands/project/checkpoint.js +209 -0
  153. package/src/commands/project/cost.js +179 -0
  154. package/src/commands/project/diff.js +278 -0
  155. package/src/commands/project/doctor.js +55 -7
  156. package/src/commands/project/init.js +318 -76
  157. package/src/commands/project/revert.js +173 -0
  158. package/src/commands/project/standards.js +80 -0
  159. package/src/commands/project/status.js +376 -0
  160. package/src/commands/project/update-agents.js +23 -0
  161. package/src/commands/project/update.js +63 -30
  162. package/src/commands/state/advance-phase.js +4 -3
  163. package/src/commands/state/state.js +10 -3
  164. package/src/commands/state/validate-phase.js +19 -2
  165. package/src/commands/templates/template-customize.js +4 -4
  166. package/src/commands/templates/template-render.js +1 -1
  167. package/src/commands/templates/template-show.js +1 -1
  168. package/src/commands/validation/validate-feature.js +359 -0
  169. package/src/core/orchestrator.js +3 -38
  170. package/src/core/paths/output-schema.js +135 -0
  171. package/src/core/state/state-manager.js +831 -592
  172. package/src/core/templates/template-registry.js +2 -2
  173. package/src/core/workflows/workflow-detector.js +17 -1
  174. package/src/lib/agents/micro-agent-factory.js +1 -1
  175. package/src/lib/context/context-bundler.js +2 -1
  176. package/src/lib/detectors/claude-config-detector.js +392 -0
  177. package/src/lib/detectors/conversation-analyzer.js +4 -4
  178. package/src/lib/detectors/design-system-detector.js +6 -5
  179. package/src/lib/detectors/standards-generator.js +2 -2
  180. package/src/lib/generators/context-generator.js +539 -538
  181. package/src/lib/generators/recap-generator.js +1 -1
  182. package/src/lib/generators/settings-generator.js +210 -0
  183. package/src/lib/hooks/hook-executor.js +1 -1
  184. package/src/lib/installers/mcp-installer.js +299 -0
  185. package/src/lib/learning/learning-system.js +3 -3
  186. package/src/lib/orchestration/team-orchestrator.js +1 -1
  187. package/src/lib/standards/standards-context-injector.js +7 -7
  188. package/src/lib/threads/thread-coordinator.js +1 -1
  189. package/src/lib/troubleshooting/troubleshoot-grep.js +1 -1
  190. package/src/lib/validators/contracts/contract-compliance-validator.js +274 -273
  191. package/src/lib/validators/design-system/design-system-validator.js +1 -1
  192. package/src/lib/validators/spec-validator.js +258 -258
  193. package/src/lib/validators/validation-runner.js +270 -269
  194. package/src/utils/agents-installer.js +206 -0
  195. package/src/utils/claude-settings-manager.js +258 -0
  196. package/src/utils/file-copier.js +1 -1
  197. package/src/utils/hooks-installer.js +354 -28
  198. package/src/utils/skills-installer.js +74 -0
  199. package/.morph/project/context/detection-log.md +0 -16
  200. package/.morph/project/standards/inferred.md +0 -59
  201. package/framework/hooks/agent-stop/validate-and-continue.js +0 -96
  202. package/framework/hooks/agent-stop/validate-checkpoints.js +0 -101
  203. package/framework/hooks/agent-stop/validate-tests.js +0 -109
  204. package/framework/hooks/agent-teams/dispatch.js +0 -67
  205. package/framework/hooks/agent-teams/phase-advanced.js +0 -80
  206. package/framework/hooks/agent-teams/task-completed.js +0 -76
  207. package/framework/hooks/agent-teams/teammate-idle.js +0 -70
  208. package/src/commands/agents/agents-fuse.js +0 -97
  209. package/src/commands/agents/micro-agent.js +0 -112
  210. package/src/commands/agents/spawn-team.js +0 -237
  211. package/src/commands/agents/squad-template.js +0 -146
  212. package/src/commands/analytics/analytics.js +0 -176
  213. package/src/commands/context/context-prime.js +0 -63
  214. package/src/commands/context/core-four.js +0 -54
  215. package/src/commands/generation/generate-context.js +0 -40
  216. package/src/commands/project/detect-agents.js +0 -207
  217. package/src/commands/project/detect-workflow.js +0 -174
  218. package/src/commands/threads/thread-template.js +0 -103
  219. package/src/commands/threads/threads.js +0 -261
  220. package/src/commands/utils/session-summary.js +0 -291
  221. package/src/llm/analyzer.js +0 -215
  222. package/src/llm/few-shot-examples.js +0 -216
  223. package/src/llm/project-config-schema.json +0 -188
  224. package/src/llm/prompt-builder.js +0 -96
  225. /package/.morph/{project/context → context}/README.md +0 -0
  226. /package/.morph/{config → framework}/agents.json +0 -0
  227. /package/.morph/{standards → framework/standards}/ai-agents/blazor-ui.md +0 -0
  228. /package/.morph/{standards → framework/standards}/ai-agents/production.md +0 -0
  229. /package/.morph/{standards → framework/standards}/ai-agents/setup.md +0 -0
  230. /package/.morph/{standards → framework/standards}/ai-agents/workflows.md +0 -0
  231. /package/.morph/{standards → framework/standards}/architecture/ddd/aggregates.md +0 -0
  232. /package/.morph/{standards → framework/standards}/architecture/ddd/entities.md +0 -0
  233. /package/.morph/{standards → framework/standards}/architecture/ddd/value-objects.md +0 -0
  234. /package/.morph/{standards → framework/standards}/backend/api/minimal-api.md +0 -0
  235. /package/.morph/{standards → framework/standards}/backend/api/rest.md +0 -0
  236. /package/.morph/{standards → framework/standards}/backend/api/validation.md +0 -0
  237. /package/.morph/{standards → framework/standards}/backend/authentication/passkeys.md +0 -0
  238. /package/.morph/{standards → framework/standards}/backend/database/ef-core.md +0 -0
  239. /package/.morph/{standards → framework/standards}/backend/database/migrations.md +0 -0
  240. /package/.morph/{standards → framework/standards}/backend/database/postgresql/database.md +0 -0
  241. /package/.morph/{standards → framework/standards}/backend/database/repository-patterns.md +0 -0
  242. /package/.morph/{standards → framework/standards}/backend/database/vector-search-rag.md +0 -0
  243. /package/.morph/{standards → framework/standards}/backend/dotnet/async.md +0 -0
  244. /package/.morph/{standards → framework/standards}/backend/dotnet/core.md +0 -0
  245. /package/.morph/{standards → framework/standards}/backend/dotnet/di.md +0 -0
  246. /package/.morph/{standards → framework/standards}/backend/dotnet/program-cs-checklist.md +0 -0
  247. /package/.morph/{standards → framework/standards}/backend/integrations/asaas/asaas-api.md +0 -0
  248. /package/.morph/{standards → framework/standards}/backend/integrations/clerk/clerk-auth.md +0 -0
  249. /package/.morph/{standards → framework/standards}/backend/integrations/hangfire/hangfire-jobs.md +0 -0
  250. /package/.morph/{standards → framework/standards}/backend/integrations/resend/resend-email.md +0 -0
  251. /package/.morph/{standards → framework/standards}/context/analytics.md +0 -0
  252. /package/.morph/{standards → framework/standards}/context/bundles.md +0 -0
  253. /package/.morph/{standards → framework/standards}/context/priming.md +0 -0
  254. /package/.morph/{standards → framework/standards}/core/architecture.md +0 -0
  255. /package/.morph/{standards → framework/standards}/core/coding.md +0 -0
  256. /package/.morph/{standards → framework/standards}/core/git-branching-strategy.md +0 -0
  257. /package/.morph/{standards → framework/standards}/core/git.md +0 -0
  258. /package/.morph/{standards → framework/standards}/core/testing.md +0 -0
  259. /package/.morph/{standards → framework/standards}/data/nosql/blob-storage.md +0 -0
  260. /package/.morph/{standards → framework/standards}/data/nosql/cache/redis.md +0 -0
  261. /package/.morph/{standards → framework/standards}/data/nosql/cosmos-db.md +0 -0
  262. /package/.morph/{standards → framework/standards}/data/vector-search/azure-ai-search.md +0 -0
  263. /package/.morph/{standards → framework/standards}/data/vector-search/rag-chunking.md +0 -0
  264. /package/.morph/{standards → framework/standards}/frontend/blazor/design-checklist.md +0 -0
  265. /package/.morph/{standards → framework/standards}/frontend/blazor/fluent-ui-setup.md +0 -0
  266. /package/.morph/{standards → framework/standards}/frontend/blazor/fluent-ui.md +0 -0
  267. /package/.morph/{standards → framework/standards}/frontend/blazor/html-conversion.md +0 -0
  268. /package/.morph/{standards → framework/standards}/frontend/blazor/lifecycle.md +0 -0
  269. /package/.morph/{standards → framework/standards}/frontend/blazor/pitfalls.md +0 -0
  270. /package/.morph/{standards → framework/standards}/frontend/blazor/state.md +0 -0
  271. /package/.morph/{standards → framework/standards}/frontend/design-system/animations.md +0 -0
  272. /package/.morph/{standards → framework/standards}/frontend/design-system/naming.md +0 -0
  273. /package/.morph/{standards → framework/standards}/frontend/nextjs/nextjs-patterns.md +0 -0
  274. /package/.morph/{standards → framework/standards}/infrastructure/azure/azure.md +0 -0
  275. /package/.morph/{standards → framework/standards}/infrastructure/azure/bicep/bicep-patterns.md +0 -0
  276. /package/.morph/{standards → framework/standards}/infrastructure/azure/devops/azure-devops-setup.md +0 -0
  277. /package/.morph/{standards → framework/standards}/infrastructure/azure/devops/local-development.md +0 -0
  278. /package/.morph/{standards → framework/standards}/infrastructure/azure/services/functions.md +0 -0
  279. /package/.morph/{standards → framework/standards}/infrastructure/azure/services/service-bus.md +0 -0
  280. /package/.morph/{standards → framework/standards}/infrastructure/azure/services/storage.md +0 -0
  281. /package/.morph/{standards → framework/standards}/infrastructure/docker/easypanel-deploy.md +0 -0
  282. /package/.morph/{standards → framework/standards}/infrastructure/supabase/mcp-setup.md +0 -0
  283. /package/.morph/{standards → framework/standards}/infrastructure/supabase/supabase-auth.md +0 -0
  284. /package/.morph/{standards → framework/standards}/infrastructure/supabase/supabase-pgvector.md +0 -0
  285. /package/.morph/{standards → framework/standards}/infrastructure/supabase/supabase-rls.md +0 -0
  286. /package/.morph/{standards → framework/standards}/infrastructure/supabase/supabase-storage.md +0 -0
  287. /package/.morph/{standards → framework/standards}/integration/api/graphql.md +0 -0
  288. /package/.morph/{standards → framework/standards}/integration/api/grpc.md +0 -0
  289. /package/.morph/{standards → framework/standards}/integration/api/rest-design.md +0 -0
  290. /package/.morph/{standards → framework/standards}/integration/event-driven/cqrs.md +0 -0
  291. /package/.morph/{standards → framework/standards}/integration/event-driven/event-sourcing.md +0 -0
  292. /package/.morph/{standards → framework/standards}/integration/event-driven/service-bus.md +0 -0
  293. /package/.morph/{standards → framework/standards}/observability/logging.md +0 -0
  294. /package/.morph/{standards → framework/standards}/observability/metrics.md +0 -0
  295. /package/.morph/{standards → framework/standards}/observability/monitoring.md +0 -0
  296. /package/.morph/{standards → framework/standards}/observability/tracing.md +0 -0
  297. /package/.morph/{standards → framework/standards}/workflows/parallel-execution.md +0 -0
  298. /package/.morph/{standards → framework/standards}/workflows/thread-management.md +0 -0
  299. /package/.morph/{templates → framework/templates}/.idea/morph-templates.xml +0 -0
  300. /package/.morph/{templates → framework/templates}/.vscode/morph-templates.code-snippets +0 -0
  301. /package/.morph/{templates → framework/templates}/IDE-SNIPPETS.md +0 -0
  302. /package/.morph/{templates → framework/templates}/code/dotnet/backend/repository.cs +0 -0
  303. /package/.morph/{templates → framework/templates}/code/dotnet/backend/service.cs +0 -0
  304. /package/.morph/{templates → framework/templates}/code/dotnet/contracts/Commands.cs +0 -0
  305. /package/.morph/{templates → framework/templates}/code/dotnet/contracts/Entities.cs +0 -0
  306. /package/.morph/{templates → framework/templates}/code/dotnet/contracts/Queries.cs +0 -0
  307. /package/.morph/{templates → framework/templates}/code/dotnet/contracts/README.md +0 -0
  308. /package/.morph/{templates → framework/templates}/code/dotnet/contracts/api-contracts.cs +0 -0
  309. /package/.morph/{templates → framework/templates}/code/dotnet/contracts/contracts.cs +0 -0
  310. /package/.morph/{templates → framework/templates}/code/dotnet/database/migration.cs +0 -0
  311. /package/.morph/{templates → framework/templates}/code/dotnet/frontend/component.razor +0 -0
  312. /package/.morph/{templates → framework/templates}/code/dotnet/jobs/agent.cs +0 -0
  313. /package/.morph/{templates → framework/templates}/code/dotnet/jobs/job.cs +0 -0
  314. /package/.morph/{templates → framework/templates}/code/dotnet/test.cs +0 -0
  315. /package/.morph/{templates → framework/templates}/code/sql/rls-policy.sql +0 -0
  316. /package/.morph/{templates → framework/templates}/code/sql/supabase-migration.sql +0 -0
  317. /package/.morph/{templates → framework/templates}/code/sql/supabase-migration.template.sql +0 -0
  318. /package/.morph/{templates → framework/templates}/code/typescript/contracts.ts +0 -0
  319. /package/.morph/{templates → framework/templates}/docs/proposal.md +0 -0
  320. /package/.morph/{templates → framework/templates}/examples/design-system-examples.md +0 -0
  321. /package/.morph/{templates → framework/templates}/feature/decisions.md +0 -0
  322. /package/.morph/{templates → framework/templates}/feature/recap.md +0 -0
  323. /package/.morph/{templates → framework/templates}/feature/tasks.md +0 -0
  324. /package/.morph/{templates → framework/templates}/infrastructure/azure/Dockerfile.example +0 -0
  325. /package/.morph/{templates → framework/templates}/infrastructure/azure/README.md +0 -0
  326. /package/.morph/{templates → framework/templates}/infrastructure/azure/app-insights.bicep +0 -0
  327. /package/.morph/{templates → framework/templates}/infrastructure/azure/app-service.bicep +0 -0
  328. /package/.morph/{templates → framework/templates}/infrastructure/azure/container-app-env.bicep +0 -0
  329. /package/.morph/{templates → framework/templates}/infrastructure/azure/container-app.bicep +0 -0
  330. /package/.morph/{templates → framework/templates}/infrastructure/azure/deploy-checklist.md +0 -0
  331. /package/.morph/{templates → framework/templates}/infrastructure/azure/deploy.ps1 +0 -0
  332. /package/.morph/{templates → framework/templates}/infrastructure/azure/deploy.sh +0 -0
  333. /package/.morph/{templates → framework/templates}/infrastructure/azure/key-vault.bicep +0 -0
  334. /package/.morph/{templates → framework/templates}/infrastructure/azure/main.bicep +0 -0
  335. /package/.morph/{templates → framework/templates}/infrastructure/azure/parameters.dev.json +0 -0
  336. /package/.morph/{templates → framework/templates}/infrastructure/azure/parameters.prod.json +0 -0
  337. /package/.morph/{templates → framework/templates}/infrastructure/azure/parameters.staging.json +0 -0
  338. /package/.morph/{templates → framework/templates}/infrastructure/azure/sql-database.bicep +0 -0
  339. /package/.morph/{templates → framework/templates}/infrastructure/azure/storage.bicep +0 -0
  340. /package/.morph/{templates → framework/templates}/infrastructure/docker/Dockerfile.template +0 -0
  341. /package/.morph/{templates → framework/templates}/infrastructure/docker/docker-compose.template.yml +0 -0
  342. /package/.morph/{templates → framework/templates}/infrastructure/docker/dockerfile-api.dockerfile +0 -0
  343. /package/.morph/{templates → framework/templates}/infrastructure/docker/dockerfile-web.dockerfile +0 -0
  344. /package/.morph/{templates → framework/templates}/infrastructure/docker/easypanel.template.json +0 -0
  345. /package/.morph/{templates → framework/templates}/infrastructure/github/actions/azure-auth/action.yml.hbs +0 -0
  346. /package/.morph/{templates → framework/templates}/infrastructure/github/actions/docker-build-push/action.yml.hbs +0 -0
  347. /package/.morph/{templates → framework/templates}/infrastructure/github/actions/health-check/action.yml.hbs +0 -0
  348. /package/.morph/{templates → framework/templates}/infrastructure/github/workflows/deploy-easypanel.yml.hbs +0 -0
  349. /package/.morph/{templates → framework/templates}/infrastructure/github/workflows/docker-build-push.yml.hbs +0 -0
  350. /package/.morph/{templates → framework/templates}/infrastructure/github/workflows/dotnet-build.yml.hbs +0 -0
  351. /package/.morph/{templates → framework/templates}/integrations/asaas-client.cs +0 -0
  352. /package/.morph/{templates → framework/templates}/integrations/asaas-webhook.cs +0 -0
  353. /package/.morph/{templates → framework/templates}/integrations/azure-identity-config.cs +0 -0
  354. /package/.morph/{templates → framework/templates}/integrations/clerk-config.cs +0 -0
  355. /package/.morph/{templates → framework/templates}/meta-prompts/fusion/fusion-agent.md +0 -0
  356. /package/.morph/{templates → framework/templates}/meta-prompts/fusion/fusion-aggregator.md +0 -0
  357. /package/.morph/{templates → framework/templates}/meta-prompts/hops/hop-retry.md +0 -0
  358. /package/.morph/{templates → framework/templates}/meta-prompts/hops/hop-validation.md +0 -0
  359. /package/.morph/{templates → framework/templates}/meta-prompts/hops/hop-wrapper.md +0 -0
  360. /package/.morph/{templates → framework/templates}/meta-prompts/parallel-workers/parallel-coordinator.md +0 -0
  361. /package/.morph/{templates → framework/templates}/meta-prompts/squad-leaders/backend-squad.md +0 -0
  362. /package/.morph/{templates → framework/templates}/meta-prompts/squad-leaders/frontend-squad.md +0 -0
  363. /package/.morph/{templates → framework/templates}/meta-prompts/squad-leaders/squad-leader.md +0 -0
  364. /package/.morph/{templates → framework/templates}/meta-prompts/validators/checkpoint-validator.md +0 -0
  365. /package/.morph/{templates → framework/templates}/saas/subscription.cs +0 -0
  366. /package/.morph/{templates → framework/templates}/saas/tenant.cs +0 -0
  367. /package/.morph/{templates → framework/templates}/state.template.json +0 -0
  368. /package/.morph/{templates → framework/templates}/ui/FluentDesignTheme.cs +0 -0
  369. /package/.morph/{templates → framework/templates}/ui/MudTheme.cs +0 -0
  370. /package/.morph/{templates → framework/templates}/ui/design-system.css +0 -0
  371. /package/framework/hooks/{commit-msg → git/commit-msg}/conventional-commits.sh +0 -0
  372. /package/framework/hooks/{pre-commit → git/pre-commit}/agents.sh +0 -0
  373. /package/framework/hooks/{pre-commit → git/pre-commit}/orchestrator.sh +0 -0
  374. /package/framework/hooks/{pre-commit → git/pre-commit}/specs.sh +0 -0
  375. /package/framework/hooks/{pre-push → git/pre-push}/run-tests.sh +0 -0
@@ -252,7 +252,7 @@ export function templateExists(templateId, projectPath = null) {
252
252
  * Get template absolute path with fallback logic.
253
253
  *
254
254
  * Resolution order:
255
- * 1. Project-local override (.morph/templates/{path})
255
+ * 1. Project-local override (.morph/framework/templates/{path})
256
256
  * 2. Framework universal template (framework/templates/{path})
257
257
  *
258
258
  * @param {string} templateId - Template identifier
@@ -266,7 +266,7 @@ export function resolveTemplatePathById(templateId, projectPath) {
266
266
  }
267
267
 
268
268
  // 1. Project-local override
269
- const projectLocalPath = join(projectPath, '.morph/templates', template.path);
269
+ const projectLocalPath = join(projectPath, '.morph/framework/templates', template.path);
270
270
  if (existsSync(projectLocalPath)) {
271
271
  return projectLocalPath;
272
272
  }
@@ -14,6 +14,22 @@ import { join, dirname } from 'path';
14
14
  import { fileURLToPath } from 'url';
15
15
  import { getPhaseSequence } from '../state/phase-state-machine.js';
16
16
 
17
+ /**
18
+ * Load the canonical phase id set from framework/phases.json.
19
+ * Falls back to getPhaseSequence() if the file is unavailable.
20
+ * @returns {Set<string>}
21
+ */
22
+ function getValidPhaseIds() {
23
+ try {
24
+ const phasesPath = join(__dirname, '..', '..', '..', 'framework', 'phases.json');
25
+ const { phases } = JSON.parse(readFileSync(phasesPath, 'utf8'));
26
+ return new Set(Object.keys(phases));
27
+ } catch {
28
+ // Graceful fallback to state machine list
29
+ return new Set(getPhaseSequence());
30
+ }
31
+ }
32
+
17
33
  const __dirname = dirname(fileURLToPath(import.meta.url));
18
34
 
19
35
  /**
@@ -340,7 +356,7 @@ export function getWorkflowConfig(workflowId, projectPath = '.') {
340
356
  const config = workflows.find(w => w.id === workflowId) || null;
341
357
 
342
358
  if (config) {
343
- const validPhases = new Set(getPhaseSequence());
359
+ const validPhases = getValidPhaseIds();
344
360
  const declaredPhases = config.phases?.run || [];
345
361
  for (const phase of declaredPhases) {
346
362
  if (!validPhases.has(phase)) {
@@ -13,7 +13,7 @@ import { readFileSync, writeFileSync, existsSync, mkdirSync, readdirSync } from
13
13
  import { join } from 'path';
14
14
 
15
15
  const MICRO_AGENTS_DIR = join(process.cwd(), '.morph/micro-agents');
16
- const AGENTS_CONFIG = join(process.cwd(), '.morph/config/agents.json');
16
+ const AGENTS_CONFIG = join(process.cwd(), '.morph/framework/agents.json');
17
17
 
18
18
  // ============================================================================
19
19
  // Agent Creation
@@ -13,6 +13,7 @@
13
13
 
14
14
  import { readFileSync, writeFileSync, existsSync, mkdirSync, readdirSync } from 'fs';
15
15
  import { join } from 'path';
16
+ import { getOutputPath } from '../../core/paths/output-schema.js';
16
17
  import { randomUUID } from 'crypto';
17
18
 
18
19
  const BUNDLES_DIR = join(process.cwd(), '.morph/bundles');
@@ -232,7 +233,7 @@ function buildResumeInstructions(feature, checkpointNum, decisions, nextSteps) {
232
233
  return `## Resume Instructions
233
234
 
234
235
  1. Load minimal standards: run \`morph-spec prime feature\`
235
- 2. Read spec: \`.morph/project/outputs/${feature}/spec.md\` (key sections only)
236
+ 2. Read spec: \`${getOutputPath(feature, 'spec')}\` (key sections only)
236
237
  3. Check tasks: \`morph-spec state get ${feature}\`
237
238
  4. Continue from: ${nextSteps[0] || `task after checkpoint ${checkpointNum}`}
238
239
 
@@ -0,0 +1,392 @@
1
+ /**
2
+ * Claude Config Detector
3
+ *
4
+ * Detects the user's Claude Code environment: plugins, MCP servers,
5
+ * custom skills, commands, hooks, and superpowers installation.
6
+ */
7
+
8
+ import { join } from 'path';
9
+ import { existsSync, readFileSync, readdirSync, statSync } from 'fs';
10
+ import { homedir } from 'os';
11
+
12
+ /**
13
+ * Detect full Claude Code configuration for a project
14
+ * @param {string} targetPath - Project root directory
15
+ * @param {Object} options - Options
16
+ * @param {string} options.globalDir - Override global .claude dir (for testing)
17
+ * @returns {Promise<Object>} Detected configuration
18
+ */
19
+ export async function detectClaudeConfig(targetPath, options = {}) {
20
+ const home = homedir();
21
+ const globalClaudeDir = options.globalDir || join(home, '.claude');
22
+ const projectClaudeDir = join(targetPath, '.claude');
23
+
24
+ const result = {
25
+ plugins: [],
26
+ mcpServers: [],
27
+ customSkills: [],
28
+ customCommands: [],
29
+ hooks: [],
30
+ superpowers: { installed: false, version: null, skills: [] }
31
+ };
32
+
33
+ // 1. Detect enabled plugins from global settings
34
+ result.plugins = detectPlugins(globalClaudeDir);
35
+
36
+ // 2. Detect MCP servers from global + project settings
37
+ result.mcpServers = detectMcpServers(globalClaudeDir, projectClaudeDir);
38
+
39
+ // 3. Detect custom skills
40
+ result.customSkills = detectCustomSkills(globalClaudeDir, projectClaudeDir);
41
+
42
+ // 4. Detect custom commands
43
+ result.customCommands = detectCustomCommands(globalClaudeDir, projectClaudeDir);
44
+
45
+ // 5. Detect hooks
46
+ result.hooks = detectHooks(globalClaudeDir, projectClaudeDir);
47
+
48
+ // 6. Detect superpowers plugin
49
+ result.superpowers = detectSuperpowers(result.plugins, result.customSkills);
50
+
51
+ return result;
52
+ }
53
+
54
+ /**
55
+ * Detect enabled plugins from settings.json
56
+ */
57
+ function detectPlugins(globalClaudeDir) {
58
+ const plugins = [];
59
+
60
+ // Read global settings for enabledPlugins
61
+ const settingsPath = join(globalClaudeDir, 'settings.json');
62
+ const settings = readJsonSafe(settingsPath);
63
+ const rawPlugins = settings?.enabledPlugins;
64
+ const enabledPlugins = Array.isArray(rawPlugins) ? rawPlugins : [];
65
+
66
+ // Read installed plugins for version info
67
+ const installedPath = join(globalClaudeDir, 'plugins', 'installed_plugins.json');
68
+ const installed = readJsonSafe(installedPath) || {};
69
+
70
+ for (const pluginId of enabledPlugins) {
71
+ const pluginInfo = installed[pluginId] || {};
72
+ plugins.push({
73
+ name: extractPluginName(pluginId),
74
+ id: pluginId,
75
+ version: pluginInfo.version || null,
76
+ enabled: true
77
+ });
78
+ }
79
+
80
+ return plugins;
81
+ }
82
+
83
+ /**
84
+ * Detect MCP servers from global and project settings
85
+ */
86
+ function detectMcpServers(globalClaudeDir, projectClaudeDir) {
87
+ const servers = [];
88
+
89
+ // Global MCP servers from settings.json
90
+ const globalSettings = readJsonSafe(join(globalClaudeDir, 'settings.json'));
91
+ if (globalSettings?.mcpServers) {
92
+ for (const [name, config] of Object.entries(globalSettings.mcpServers)) {
93
+ servers.push({ name, source: 'global', config });
94
+ }
95
+ }
96
+
97
+ // Global MCP servers from settings.local.json
98
+ const globalLocal = readJsonSafe(join(globalClaudeDir, 'settings.local.json'));
99
+ if (globalLocal?.mcpServers) {
100
+ for (const [name, config] of Object.entries(globalLocal.mcpServers)) {
101
+ if (!servers.find(s => s.name === name)) {
102
+ servers.push({ name, source: 'global', config });
103
+ }
104
+ }
105
+ }
106
+
107
+ // Project MCP servers from .claude/settings.local.json
108
+ const projectSettings = readJsonSafe(join(projectClaudeDir, 'settings.local.json'));
109
+ if (projectSettings?.mcpServers) {
110
+ for (const [name, config] of Object.entries(projectSettings.mcpServers)) {
111
+ const existing = servers.find(s => s.name === name);
112
+ if (existing) {
113
+ existing.source = 'project'; // project overrides global
114
+ } else {
115
+ servers.push({ name, source: 'project', config });
116
+ }
117
+ }
118
+ }
119
+
120
+ return servers;
121
+ }
122
+
123
+ /**
124
+ * Detect custom skills from .claude/skills/ directories
125
+ */
126
+ function detectCustomSkills(globalClaudeDir, projectClaudeDir) {
127
+ const skills = [];
128
+
129
+ // Global skills
130
+ const globalSkills = join(globalClaudeDir, 'skills');
131
+ if (existsSync(globalSkills)) {
132
+ for (const file of walkMdFiles(globalSkills)) {
133
+ skills.push({
134
+ name: extractSkillName(file),
135
+ path: file,
136
+ source: 'global'
137
+ });
138
+ }
139
+ }
140
+
141
+ // Project skills (may include morph-spec skills)
142
+ const projectSkills = join(projectClaudeDir, 'skills');
143
+ if (existsSync(projectSkills)) {
144
+ for (const file of walkMdFiles(projectSkills)) {
145
+ const name = extractSkillName(file);
146
+ // Skip morph-spec framework skills (they're managed by init)
147
+ if (file.includes('level-0-meta') || file.includes('level-1-workflows') ||
148
+ file.includes('level-2-domains') || file.includes('level-3-technologies') ||
149
+ file.includes('level-4-patterns')) {
150
+ continue;
151
+ }
152
+ skills.push({
153
+ name,
154
+ path: file,
155
+ source: 'project'
156
+ });
157
+ }
158
+ }
159
+
160
+ return skills;
161
+ }
162
+
163
+ /**
164
+ * Detect custom commands from .claude/commands/ directories
165
+ */
166
+ function detectCustomCommands(globalClaudeDir, projectClaudeDir) {
167
+ const commands = [];
168
+
169
+ // Global commands
170
+ const globalCommands = join(globalClaudeDir, 'commands');
171
+ if (existsSync(globalCommands)) {
172
+ for (const file of walkMdFiles(globalCommands)) {
173
+ commands.push({
174
+ name: extractCommandName(file),
175
+ path: file,
176
+ source: 'global'
177
+ });
178
+ }
179
+ }
180
+
181
+ // Project commands (excluding morph-spec managed commands)
182
+ const projectCommands = join(projectClaudeDir, 'commands');
183
+ if (existsSync(projectCommands)) {
184
+ for (const file of walkMdFiles(projectCommands)) {
185
+ const name = extractCommandName(file);
186
+ // Skip morph-spec commands
187
+ if (name.startsWith('morph-')) continue;
188
+ commands.push({
189
+ name,
190
+ path: file,
191
+ source: 'project'
192
+ });
193
+ }
194
+ }
195
+
196
+ return commands;
197
+ }
198
+
199
+ /**
200
+ * Detect hooks from settings files
201
+ */
202
+ function detectHooks(globalClaudeDir, projectClaudeDir) {
203
+ const hooks = [];
204
+
205
+ // Global hooks
206
+ const globalSettings = readJsonSafe(join(globalClaudeDir, 'settings.json'));
207
+ if (globalSettings?.hooks) {
208
+ for (const [trigger, entries] of Object.entries(globalSettings.hooks)) {
209
+ hooks.push({ trigger, source: 'global', entries });
210
+ }
211
+ }
212
+
213
+ // Project hooks
214
+ const projectSettings = readJsonSafe(join(projectClaudeDir, 'settings.local.json'));
215
+ if (projectSettings?.hooks) {
216
+ for (const [trigger, entries] of Object.entries(projectSettings.hooks)) {
217
+ hooks.push({ trigger, source: 'project', entries });
218
+ }
219
+ }
220
+
221
+ return hooks;
222
+ }
223
+
224
+ /**
225
+ * Detect superpowers plugin installation
226
+ */
227
+ function detectSuperpowers(plugins, customSkills) {
228
+ const result = { installed: false, version: null, skills: [] };
229
+
230
+ // Check if superpowers is in enabled plugins
231
+ const superPlugin = plugins.find(p =>
232
+ p.name === 'superpowers' || p.id?.includes('superpowers')
233
+ );
234
+
235
+ if (superPlugin) {
236
+ result.installed = true;
237
+ result.version = superPlugin.version;
238
+ }
239
+
240
+ // Collect superpowers skills from detected skills
241
+ const superpowerSkills = customSkills.filter(s =>
242
+ s.path?.includes('superpowers') || s.name?.startsWith('superpowers:')
243
+ );
244
+
245
+ if (superpowerSkills.length > 0) {
246
+ result.installed = true;
247
+ result.skills = superpowerSkills.map(s => s.name);
248
+ }
249
+
250
+ return result;
251
+ }
252
+
253
+ // ============================================================================
254
+ // MCP Phase Mapping
255
+ // ============================================================================
256
+
257
+ /**
258
+ * Map detected MCPs to morph-spec phases where they're useful
259
+ * @param {Array} mcpServers - Detected MCP servers
260
+ * @returns {Object} Map of phase → relevant MCPs
261
+ */
262
+ export function mapMcpsToPhases(mcpServers) {
263
+ const phaseMap = {
264
+ proposal: [],
265
+ setup: [],
266
+ uiux: [],
267
+ design: [],
268
+ clarify: [],
269
+ tasks: [],
270
+ implement: []
271
+ };
272
+
273
+ const mcpPhaseConfig = {
274
+ context7: ['proposal', 'design', 'tasks', 'implement'],
275
+ supabase: ['design', 'implement'],
276
+ playwright: ['uiux', 'implement'],
277
+ github: ['setup', 'tasks', 'implement'],
278
+ figma: ['uiux'],
279
+ docker: ['implement'],
280
+ azure: ['implement']
281
+ };
282
+
283
+ for (const server of mcpServers) {
284
+ const name = server.name.toLowerCase();
285
+ for (const [mcpKey, phases] of Object.entries(mcpPhaseConfig)) {
286
+ if (name.includes(mcpKey)) {
287
+ for (const phase of phases) {
288
+ phaseMap[phase].push({
289
+ name: server.name,
290
+ source: server.source
291
+ });
292
+ }
293
+ }
294
+ }
295
+ }
296
+
297
+ return phaseMap;
298
+ }
299
+
300
+ /**
301
+ * Format detected config as a summary table string
302
+ * @param {Object} config - Detected Claude config
303
+ * @returns {string} Formatted summary
304
+ */
305
+ export function formatConfigSummary(config) {
306
+ const lines = [];
307
+
308
+ if (config.plugins.length > 0) {
309
+ lines.push('Plugins:');
310
+ for (const p of config.plugins) {
311
+ const ver = p.version ? ` v${p.version}` : '';
312
+ lines.push(` - ${p.name}${ver}`);
313
+ }
314
+ }
315
+
316
+ if (config.mcpServers.length > 0) {
317
+ lines.push('MCP Servers:');
318
+ for (const s of config.mcpServers) {
319
+ lines.push(` - ${s.name} (${s.source})`);
320
+ }
321
+ }
322
+
323
+ if (config.superpowers.installed) {
324
+ lines.push(`Superpowers: installed (${config.superpowers.skills.length} skills)`);
325
+ }
326
+
327
+ if (config.customSkills.length > 0) {
328
+ lines.push(`Custom Skills: ${config.customSkills.length}`);
329
+ }
330
+
331
+ if (config.customCommands.length > 0) {
332
+ lines.push(`Custom Commands: ${config.customCommands.length}`);
333
+ }
334
+
335
+ return lines.join('\n');
336
+ }
337
+
338
+ // ============================================================================
339
+ // Helpers
340
+ // ============================================================================
341
+
342
+ function readJsonSafe(filePath) {
343
+ try {
344
+ if (!existsSync(filePath)) return null;
345
+ return JSON.parse(readFileSync(filePath, 'utf-8'));
346
+ } catch {
347
+ return null;
348
+ }
349
+ }
350
+
351
+ function extractPluginName(pluginId) {
352
+ // Plugin IDs can be URLs or package names
353
+ // e.g., "https://github.com/user/superpowers" → "superpowers"
354
+ // e.g., "@user/superpowers" → "superpowers"
355
+ const parts = pluginId.split('/');
356
+ return parts[parts.length - 1].replace(/\.git$/, '');
357
+ }
358
+
359
+ function extractSkillName(filePath) {
360
+ // Extract skill name from file path
361
+ // e.g., ".claude/skills/superpowers/brainstorming.md" → "superpowers:brainstorming"
362
+ const parts = filePath.replace(/\\/g, '/').split('/');
363
+ const mdFile = parts[parts.length - 1].replace('.md', '');
364
+ const parentDir = parts.length >= 2 ? parts[parts.length - 2] : null;
365
+
366
+ if (parentDir && parentDir !== 'skills') {
367
+ return `${parentDir}:${mdFile}`;
368
+ }
369
+ return mdFile;
370
+ }
371
+
372
+ function extractCommandName(filePath) {
373
+ return filePath.replace(/\\/g, '/').split('/').pop().replace('.md', '');
374
+ }
375
+
376
+ function walkMdFiles(dir) {
377
+ const results = [];
378
+ try {
379
+ const entries = readdirSync(dir, { withFileTypes: true });
380
+ for (const entry of entries) {
381
+ const fullPath = join(dir, entry.name);
382
+ if (entry.isDirectory()) {
383
+ results.push(...walkMdFiles(fullPath));
384
+ } else if (entry.isFile() && entry.name.endsWith('.md')) {
385
+ results.push(fullPath);
386
+ }
387
+ }
388
+ } catch {
389
+ // Permission errors or broken symlinks
390
+ }
391
+ return results;
392
+ }
@@ -21,8 +21,8 @@ export async function analyzeConversation(projectPath) {
21
21
  available: false
22
22
  };
23
23
 
24
- // Check if .morph/project/context exists (past decisions)
25
- const contextPath = join(projectPath, '.morph', 'project', 'context');
24
+ // Check if .morph/context exists (past decisions)
25
+ const contextPath = join(projectPath, '.morph', 'context');
26
26
  if (existsSync(contextPath)) {
27
27
  result.available = true;
28
28
 
@@ -34,8 +34,8 @@ export async function analyzeConversation(projectPath) {
34
34
  }
35
35
  }
36
36
 
37
- // Check .morph/project/outputs/*/decisions.md
38
- const outputsPath = join(projectPath, '.morph', 'project', 'outputs');
37
+ // Check .morph/features/*/decisions.md
38
+ const outputsPath = join(projectPath, '.morph', 'features');
39
39
  if (existsSync(outputsPath)) {
40
40
  const { readdirSync } = await import('fs');
41
41
  const features = readdirSync(outputsPath, { withFileTypes: true })
@@ -29,9 +29,10 @@ export function detectDesignSystem(projectPath, featureName = null) {
29
29
  if (featureName) {
30
30
  const featureDesignSystemPath = join(
31
31
  projectPath,
32
- '.morph/project/outputs',
32
+ '.morph/features',
33
33
  featureName,
34
- 'ui-design-system.md'
34
+ '2-ui',
35
+ 'design-system.md'
35
36
  );
36
37
 
37
38
  if (existsSync(featureDesignSystemPath)) {
@@ -46,7 +47,7 @@ export function detectDesignSystem(projectPath, featureName = null) {
46
47
  }
47
48
 
48
49
  // Priority 2: Project-level design system (markdown)
49
- const projectDesignSystemPath = join(projectPath, '.morph/project/design-system.md');
50
+ const projectDesignSystemPath = join(projectPath, '.morph/context/design-system.md');
50
51
  if (existsSync(projectDesignSystemPath)) {
51
52
  return {
52
53
  hasDesignSystem: true,
@@ -166,7 +167,7 @@ export function getRecommendedLocations(projectPath) {
166
167
 
167
168
  // Default locations (Blazor)
168
169
  const locations = {
169
- markdown: '.morph/project/design-system.md',
170
+ markdown: '.morph/context/design-system.md',
170
171
  css: 'wwwroot/css/design-system.css',
171
172
  description: 'Project-level design system (shared across features)'
172
173
  };
@@ -179,7 +180,7 @@ export function getRecommendedLocations(projectPath) {
179
180
  return locations;
180
181
  } catch {
181
182
  return {
182
- markdown: '.morph/project/design-system.md',
183
+ markdown: '.morph/context/design-system.md',
183
184
  css: 'wwwroot/css/design-system.css',
184
185
  description: 'Project-level design system (shared across features)'
185
186
  };
@@ -125,7 +125,7 @@ Based on detected patterns in your codebase:
125
125
  - **DI**: Constructor injection (${structure.patterns.includes('Dependency Injection') ? '✅ detected' : '⚠️ not detected'})
126
126
  - **Tests**: ${structure.patterns.includes('Unit Tests') ? '✅ Present' : '⚠️ Not detected'}
127
127
 
128
- **Recommendation**: Refer to \`.morph/standards/coding.md\` for complete .NET standards.`;
128
+ **Recommendation**: Refer to \`.morph/framework/standards/coding.md\` for complete .NET standards.`;
129
129
  }
130
130
 
131
131
  if (config?.language === 'javascript') {
@@ -233,7 +233,7 @@ function generateRecommendations(structure, config, conversation) {
233
233
  }
234
234
 
235
235
  if (!structure.patterns.includes('AI Agents') && config?.technologies?.includes('Microsoft Agent Framework')) {
236
- recommendations.push('Setup detected Agent Framework but no agents found - check .morph/standards/agent-framework-setup.md');
236
+ recommendations.push('Setup detected Agent Framework but no agents found - check .morph/framework/standards/agent-framework-setup.md');
237
237
  }
238
238
  }
239
239