@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
@@ -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,390 @@
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
+ continue;
149
+ }
150
+ skills.push({
151
+ name,
152
+ path: file,
153
+ source: 'project'
154
+ });
155
+ }
156
+ }
157
+
158
+ return skills;
159
+ }
160
+
161
+ /**
162
+ * Detect custom commands from .claude/commands/ directories
163
+ */
164
+ function detectCustomCommands(globalClaudeDir, projectClaudeDir) {
165
+ const commands = [];
166
+
167
+ // Global commands
168
+ const globalCommands = join(globalClaudeDir, 'commands');
169
+ if (existsSync(globalCommands)) {
170
+ for (const file of walkMdFiles(globalCommands)) {
171
+ commands.push({
172
+ name: extractCommandName(file),
173
+ path: file,
174
+ source: 'global'
175
+ });
176
+ }
177
+ }
178
+
179
+ // Project commands (excluding morph-spec managed commands)
180
+ const projectCommands = join(projectClaudeDir, 'commands');
181
+ if (existsSync(projectCommands)) {
182
+ for (const file of walkMdFiles(projectCommands)) {
183
+ const name = extractCommandName(file);
184
+ // Skip morph-spec commands
185
+ if (name.startsWith('morph-')) continue;
186
+ commands.push({
187
+ name,
188
+ path: file,
189
+ source: 'project'
190
+ });
191
+ }
192
+ }
193
+
194
+ return commands;
195
+ }
196
+
197
+ /**
198
+ * Detect hooks from settings files
199
+ */
200
+ function detectHooks(globalClaudeDir, projectClaudeDir) {
201
+ const hooks = [];
202
+
203
+ // Global hooks
204
+ const globalSettings = readJsonSafe(join(globalClaudeDir, 'settings.json'));
205
+ if (globalSettings?.hooks) {
206
+ for (const [trigger, entries] of Object.entries(globalSettings.hooks)) {
207
+ hooks.push({ trigger, source: 'global', entries });
208
+ }
209
+ }
210
+
211
+ // Project hooks
212
+ const projectSettings = readJsonSafe(join(projectClaudeDir, 'settings.local.json'));
213
+ if (projectSettings?.hooks) {
214
+ for (const [trigger, entries] of Object.entries(projectSettings.hooks)) {
215
+ hooks.push({ trigger, source: 'project', entries });
216
+ }
217
+ }
218
+
219
+ return hooks;
220
+ }
221
+
222
+ /**
223
+ * Detect superpowers plugin installation
224
+ */
225
+ function detectSuperpowers(plugins, customSkills) {
226
+ const result = { installed: false, version: null, skills: [] };
227
+
228
+ // Check if superpowers is in enabled plugins
229
+ const superPlugin = plugins.find(p =>
230
+ p.name === 'superpowers' || p.id?.includes('superpowers')
231
+ );
232
+
233
+ if (superPlugin) {
234
+ result.installed = true;
235
+ result.version = superPlugin.version;
236
+ }
237
+
238
+ // Collect superpowers skills from detected skills
239
+ const superpowerSkills = customSkills.filter(s =>
240
+ s.path?.includes('superpowers') || s.name?.startsWith('superpowers:')
241
+ );
242
+
243
+ if (superpowerSkills.length > 0) {
244
+ result.installed = true;
245
+ result.skills = superpowerSkills.map(s => s.name);
246
+ }
247
+
248
+ return result;
249
+ }
250
+
251
+ // ============================================================================
252
+ // MCP Phase Mapping
253
+ // ============================================================================
254
+
255
+ /**
256
+ * Map detected MCPs to morph-spec phases where they're useful
257
+ * @param {Array} mcpServers - Detected MCP servers
258
+ * @returns {Object} Map of phase → relevant MCPs
259
+ */
260
+ export function mapMcpsToPhases(mcpServers) {
261
+ const phaseMap = {
262
+ proposal: [],
263
+ setup: [],
264
+ uiux: [],
265
+ design: [],
266
+ clarify: [],
267
+ tasks: [],
268
+ implement: []
269
+ };
270
+
271
+ const mcpPhaseConfig = {
272
+ context7: ['proposal', 'design', 'tasks', 'implement'],
273
+ supabase: ['design', 'implement'],
274
+ playwright: ['uiux', 'implement'],
275
+ github: ['setup', 'tasks', 'implement'],
276
+ figma: ['uiux'],
277
+ docker: ['implement'],
278
+ azure: ['implement']
279
+ };
280
+
281
+ for (const server of mcpServers) {
282
+ const name = server.name.toLowerCase();
283
+ for (const [mcpKey, phases] of Object.entries(mcpPhaseConfig)) {
284
+ if (name.includes(mcpKey)) {
285
+ for (const phase of phases) {
286
+ phaseMap[phase].push({
287
+ name: server.name,
288
+ source: server.source
289
+ });
290
+ }
291
+ }
292
+ }
293
+ }
294
+
295
+ return phaseMap;
296
+ }
297
+
298
+ /**
299
+ * Format detected config as a summary table string
300
+ * @param {Object} config - Detected Claude config
301
+ * @returns {string} Formatted summary
302
+ */
303
+ export function formatConfigSummary(config) {
304
+ const lines = [];
305
+
306
+ if (config.plugins.length > 0) {
307
+ lines.push('Plugins:');
308
+ for (const p of config.plugins) {
309
+ const ver = p.version ? ` v${p.version}` : '';
310
+ lines.push(` - ${p.name}${ver}`);
311
+ }
312
+ }
313
+
314
+ if (config.mcpServers.length > 0) {
315
+ lines.push('MCP Servers:');
316
+ for (const s of config.mcpServers) {
317
+ lines.push(` - ${s.name} (${s.source})`);
318
+ }
319
+ }
320
+
321
+ if (config.superpowers.installed) {
322
+ lines.push(`Superpowers: installed (${config.superpowers.skills.length} skills)`);
323
+ }
324
+
325
+ if (config.customSkills.length > 0) {
326
+ lines.push(`Custom Skills: ${config.customSkills.length}`);
327
+ }
328
+
329
+ if (config.customCommands.length > 0) {
330
+ lines.push(`Custom Commands: ${config.customCommands.length}`);
331
+ }
332
+
333
+ return lines.join('\n');
334
+ }
335
+
336
+ // ============================================================================
337
+ // Helpers
338
+ // ============================================================================
339
+
340
+ function readJsonSafe(filePath) {
341
+ try {
342
+ if (!existsSync(filePath)) return null;
343
+ return JSON.parse(readFileSync(filePath, 'utf-8'));
344
+ } catch {
345
+ return null;
346
+ }
347
+ }
348
+
349
+ function extractPluginName(pluginId) {
350
+ // Plugin IDs can be URLs or package names
351
+ // e.g., "https://github.com/user/superpowers" → "superpowers"
352
+ // e.g., "@user/superpowers" → "superpowers"
353
+ const parts = pluginId.split('/');
354
+ return parts[parts.length - 1].replace(/\.git$/, '');
355
+ }
356
+
357
+ function extractSkillName(filePath) {
358
+ // Extract skill name from file path
359
+ // e.g., ".claude/skills/superpowers/brainstorming.md" → "superpowers:brainstorming"
360
+ const parts = filePath.replace(/\\/g, '/').split('/');
361
+ const mdFile = parts[parts.length - 1].replace('.md', '');
362
+ const parentDir = parts.length >= 2 ? parts[parts.length - 2] : null;
363
+
364
+ if (parentDir && parentDir !== 'skills') {
365
+ return `${parentDir}:${mdFile}`;
366
+ }
367
+ return mdFile;
368
+ }
369
+
370
+ function extractCommandName(filePath) {
371
+ return filePath.replace(/\\/g, '/').split('/').pop().replace('.md', '');
372
+ }
373
+
374
+ function walkMdFiles(dir) {
375
+ const results = [];
376
+ try {
377
+ const entries = readdirSync(dir, { withFileTypes: true });
378
+ for (const entry of entries) {
379
+ const fullPath = join(dir, entry.name);
380
+ if (entry.isDirectory()) {
381
+ results.push(...walkMdFiles(fullPath));
382
+ } else if (entry.isFile() && entry.name.endsWith('.md')) {
383
+ results.push(fullPath);
384
+ }
385
+ }
386
+ } catch {
387
+ // Permission errors or broken symlinks
388
+ }
389
+ return results;
390
+ }
@@ -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