@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
@@ -1,96 +0,0 @@
1
- #!/usr/bin/env node
2
- /**
3
- * Stop Hook: validate-and-continue
4
- *
5
- * Runs architecture and security validators.
6
- * Writes structured JSON to stdout for stop-hook-executor to parse.
7
- *
8
- * Output format:
9
- * {
10
- * "passed": boolean,
11
- * "issues": [{ "message": string, "severity": "error"|"warning" }],
12
- * "suggestions": [string],
13
- * "error": string | null
14
- * }
15
- */
16
-
17
- import { execSync } from 'child_process';
18
- import { existsSync } from 'fs';
19
- import { join } from 'path';
20
-
21
- const VALIDATORS = ['architecture', 'security'];
22
- const cwd = process.cwd();
23
-
24
- async function runValidators() {
25
- const issues = [];
26
- const suggestions = [];
27
- let allPassed = true;
28
-
29
- for (const validator of VALIDATORS) {
30
- try {
31
- const validateBin = join(cwd, 'bin/validate.js');
32
- if (!existsSync(validateBin)) {
33
- // Validator binary not found — skip gracefully
34
- suggestions.push(`Install morph-spec validator: bin/validate.js not found`);
35
- continue;
36
- }
37
-
38
- const result = execSync(
39
- `node "${validateBin}" ${validator} --json --quiet`,
40
- { encoding: 'utf8', stdio: 'pipe', cwd, timeout: 60000 }
41
- );
42
-
43
- const parsed = JSON.parse(result);
44
- if (parsed.errors > 0) {
45
- allPassed = false;
46
- (parsed.issues || []).forEach(issue => {
47
- if (issue.severity === 'error') {
48
- issues.push({ message: `[${validator}] ${issue.message}`, severity: 'error' });
49
- }
50
- });
51
- }
52
-
53
- if (parsed.warnings > 0) {
54
- (parsed.issues || []).forEach(issue => {
55
- if (issue.severity === 'warning') {
56
- issues.push({ message: `[${validator}] ${issue.message}`, severity: 'warning' });
57
- }
58
- });
59
- }
60
- } catch (err) {
61
- // If validator fails to run, report as warning but don't block
62
- issues.push({
63
- message: `[${validator}] Validator execution failed: ${err.message}`,
64
- severity: 'warning'
65
- });
66
- suggestions.push(`Run manually: node bin/validate.js ${validator}`);
67
- }
68
- }
69
-
70
- if (!allPassed && issues.some(i => i.severity === 'error')) {
71
- suggestions.push('Fix architecture and security violations before continuing');
72
- suggestions.push('See framework/standards/architecture.md for patterns');
73
- }
74
-
75
- const output = {
76
- passed: allPassed,
77
- validatorsRun: VALIDATORS,
78
- issues,
79
- suggestions,
80
- timestamp: new Date().toISOString(),
81
- error: null
82
- };
83
-
84
- process.stdout.write(JSON.stringify(output));
85
- process.exit(allPassed ? 0 : 1);
86
- }
87
-
88
- runValidators().catch(err => {
89
- process.stdout.write(JSON.stringify({
90
- passed: false,
91
- issues: [{ message: err.message, severity: 'error' }],
92
- suggestions: [],
93
- error: err.message
94
- }));
95
- process.exit(1);
96
- });
@@ -1,101 +0,0 @@
1
- #!/usr/bin/env node
2
- /**
3
- * Stop Hook: validate-checkpoints
4
- *
5
- * Checks that the last 3 tasks passed their checkpoints.
6
- * Reads from state.json checkpoint history.
7
- *
8
- * Output format: { passed, issues, suggestions, checkpointSummary, error }
9
- */
10
-
11
- import { readFileSync, existsSync } from 'fs';
12
- import { join } from 'path';
13
-
14
- const cwd = process.cwd();
15
- const REQUIRED_PASSING = 3;
16
-
17
- function validateCheckpoints() {
18
- const statePath = join(cwd, '.morph/state.json');
19
-
20
- if (!existsSync(statePath)) {
21
- process.stdout.write(JSON.stringify({
22
- passed: true,
23
- issues: [],
24
- suggestions: ['State file not found — checkpoint validation skipped'],
25
- checkpointSummary: null,
26
- error: null
27
- }));
28
- process.exit(0);
29
- }
30
-
31
- let state;
32
- try {
33
- state = JSON.parse(readFileSync(statePath, 'utf8'));
34
- } catch (err) {
35
- process.stdout.write(JSON.stringify({
36
- passed: false,
37
- issues: [{ message: `Failed to read state.json: ${err.message}`, severity: 'error' }],
38
- suggestions: [],
39
- error: err.message
40
- }));
41
- process.exit(1);
42
- }
43
-
44
- // Find all features with checkpoints
45
- const features = Object.entries(state.features || {});
46
- const issues = [];
47
- const suggestions = [];
48
- let allPassed = true;
49
-
50
- for (const [featureName, feature] of features) {
51
- if (feature.phase !== 'implement') continue;
52
-
53
- const checkpoints = feature.checkpoints || [];
54
- const recentCheckpoints = checkpoints.slice(-REQUIRED_PASSING);
55
-
56
- if (recentCheckpoints.length === 0) {
57
- // No checkpoints yet — pass
58
- continue;
59
- }
60
-
61
- const failedRecent = recentCheckpoints.filter(c => c.passed === false);
62
- if (failedRecent.length > 0) {
63
- allPassed = false;
64
- issues.push({
65
- message: `Feature ${featureName}: ${failedRecent.length} recent checkpoint(s) failed`,
66
- severity: 'error'
67
- });
68
- suggestions.push(`Review checkpoint failures in ${featureName} before continuing`);
69
- }
70
- }
71
-
72
- const checkpointSummary = features.map(([name, f]) => ({
73
- feature: name,
74
- totalCheckpoints: f.checkpoints?.length || 0,
75
- recentPassed: (f.checkpoints || []).slice(-3).filter(c => c.passed !== false).length
76
- }));
77
-
78
- const output = {
79
- passed: allPassed,
80
- issues,
81
- suggestions,
82
- checkpointSummary,
83
- timestamp: new Date().toISOString(),
84
- error: null
85
- };
86
-
87
- process.stdout.write(JSON.stringify(output));
88
- process.exit(allPassed ? 0 : 1);
89
- }
90
-
91
- try {
92
- validateCheckpoints();
93
- } catch (err) {
94
- process.stdout.write(JSON.stringify({
95
- passed: false,
96
- issues: [{ message: err.message, severity: 'error' }],
97
- suggestions: [],
98
- error: err.message
99
- }));
100
- process.exit(1);
101
- }
@@ -1,109 +0,0 @@
1
- #!/usr/bin/env node
2
- /**
3
- * Stop Hook: validate-tests
4
- *
5
- * Runs the project test suite (if available) and returns results.
6
- * Gracefully handles projects without tests.
7
- *
8
- * Output format: { passed, issues, suggestions, testResults, error }
9
- */
10
-
11
- import { execSync } from 'child_process';
12
- import { existsSync, readFileSync } from 'fs';
13
- import { join } from 'path';
14
-
15
- const cwd = process.cwd();
16
-
17
- function validateTests() {
18
- // Check if test runner is configured
19
- let pkgJson;
20
- try {
21
- pkgJson = JSON.parse(readFileSync(join(cwd, 'package.json'), 'utf8'));
22
- } catch {
23
- process.stdout.write(JSON.stringify({
24
- passed: true,
25
- issues: [],
26
- suggestions: ['No package.json found — test validation skipped'],
27
- testResults: null,
28
- error: null
29
- }));
30
- process.exit(0);
31
- }
32
-
33
- const hasTestScript = pkgJson.scripts?.test && !pkgJson.scripts.test.includes('no test specified');
34
- const hasVitest = pkgJson.dependencies?.vitest || pkgJson.devDependencies?.vitest;
35
- const hasJest = pkgJson.dependencies?.jest || pkgJson.devDependencies?.jest;
36
-
37
- if (!hasTestScript && !hasVitest && !hasJest) {
38
- process.stdout.write(JSON.stringify({
39
- passed: true,
40
- issues: [],
41
- suggestions: ['No test runner configured — consider adding vitest or jest'],
42
- testResults: { skipped: true, reason: 'No test runner found' },
43
- error: null
44
- }));
45
- process.exit(0);
46
- }
47
-
48
- try {
49
- const testCmd = hasVitest ? 'npx vitest run' : (hasJest ? 'npx jest' : 'npm test');
50
- const output = execSync(`${testCmd} --passWithNoTests`, {
51
- encoding: 'utf8',
52
- stdio: 'pipe',
53
- cwd,
54
- timeout: 300000 // 5 minutes for tests
55
- });
56
-
57
- // Parse test results from output
58
- const passedMatch = output.match(/(\d+)\s+passed/);
59
- const failedMatch = output.match(/(\d+)\s+failed/);
60
- const skippedMatch = output.match(/(\d+)\s+skipped/);
61
-
62
- const testResults = {
63
- passed: parseInt(passedMatch?.[1] || '0'),
64
- failed: parseInt(failedMatch?.[1] || '0'),
65
- skipped: parseInt(skippedMatch?.[1] || '0'),
66
- rawOutput: output.substring(0, 500) // First 500 chars
67
- };
68
-
69
- process.stdout.write(JSON.stringify({
70
- passed: testResults.failed === 0,
71
- issues: testResults.failed > 0
72
- ? [{ message: `${testResults.failed} test(s) failed`, severity: 'error' }]
73
- : [],
74
- suggestions: testResults.failed > 0
75
- ? ['Fix failing tests before continuing implementation']
76
- : [],
77
- testResults,
78
- timestamp: new Date().toISOString(),
79
- error: null
80
- }));
81
- process.exit(testResults.failed === 0 ? 0 : 1);
82
- } catch (err) {
83
- // Extract test failure count from error output
84
- const output = err.stdout || err.stderr || err.message;
85
- const failedMatch = output.match(/(\d+)\s+failed/);
86
- const failed = parseInt(failedMatch?.[1] || '1');
87
-
88
- process.stdout.write(JSON.stringify({
89
- passed: false,
90
- issues: [{ message: `Test suite failed with ${failed} failure(s)`, severity: 'error' }],
91
- suggestions: ['Review test output and fix failing tests', 'Run: npm test locally'],
92
- testResults: { failed, rawOutput: output.substring(0, 500) },
93
- error: null
94
- }));
95
- process.exit(1);
96
- }
97
- }
98
-
99
- try {
100
- validateTests();
101
- } catch (err) {
102
- process.stdout.write(JSON.stringify({
103
- passed: false,
104
- issues: [{ message: err.message, severity: 'error' }],
105
- suggestions: [],
106
- error: err.message
107
- }));
108
- process.exit(1);
109
- }
@@ -1,67 +0,0 @@
1
- #!/usr/bin/env node
2
-
3
- /**
4
- * Agent Teams Hook Dispatcher
5
- *
6
- * Reads Claude Code PostToolUse JSON from stdin and dispatches to the
7
- * appropriate agent-teams hook based on the Bash command content.
8
- *
9
- * Wired via .claude/settings.local.json:
10
- * "PostToolUse": [{ "matcher": "Bash", "hooks": [{ "type": "command", "command": "node framework/hooks/agent-teams/dispatch.js" }] }]
11
- *
12
- * Dispatches:
13
- * morph-spec task done <feature> <taskId> → task-completed.js <feature> <taskId>
14
- * morph-spec phase advance <feature> → phase-advanced.js <feature> <from> <to>
15
- */
16
-
17
- import { execSync } from 'child_process';
18
- import { readFileSync } from 'fs';
19
- import { join, dirname } from 'path';
20
- import { fileURLToPath } from 'url';
21
-
22
- const __dirname = dirname(fileURLToPath(import.meta.url));
23
-
24
- let input = '';
25
- process.stdin.setEncoding('utf-8');
26
- process.stdin.on('data', chunk => { input += chunk; });
27
- process.stdin.on('end', () => {
28
- try {
29
- const payload = JSON.parse(input || '{}');
30
- const command = payload?.tool_input?.command || '';
31
- dispatch(command);
32
- } catch {
33
- // Non-JSON or empty stdin — ignore silently
34
- process.exit(0);
35
- }
36
- });
37
-
38
- function dispatch(command) {
39
- // morph-spec task done <feature> <taskId> [--skip-validation]
40
- const taskDoneMatch = command.match(/morph-spec\s+task\s+done\s+(\S+)\s+(\S+)/);
41
- if (taskDoneMatch) {
42
- const [, feature, taskId] = taskDoneMatch;
43
- run(`node "${join(__dirname, 'task-completed.js')}" ${feature} ${taskId}`);
44
- return;
45
- }
46
-
47
- // morph-spec phase advance <feature>
48
- const phaseAdvanceMatch = command.match(/morph-spec\s+phase\s+advance\s+(\S+)/);
49
- if (phaseAdvanceMatch) {
50
- const [, feature] = phaseAdvanceMatch;
51
- // from/to phases not available at PostToolUse time — use placeholder
52
- run(`node "${join(__dirname, 'phase-advanced.js')}" ${feature} unknown advanced`);
53
- return;
54
- }
55
-
56
- // No match — exit cleanly
57
- process.exit(0);
58
- }
59
-
60
- function run(cmd) {
61
- try {
62
- execSync(cmd, { stdio: 'inherit', cwd: join(__dirname, '../../..') });
63
- } catch {
64
- // Hook failures are non-blocking for the dispatch layer
65
- }
66
- process.exit(0);
67
- }
@@ -1,80 +0,0 @@
1
- #!/usr/bin/env node
2
- // Scope: universal | Validates feature outputs when phase is advanced
3
- // MORPH-SPEC Agent Teams Hook: PhaseAdvanced Event
4
-
5
- import { executeHook, formatHookResults } from '../../../src/lib/hooks/hook-executor.js';
6
- import { join, dirname } from 'path';
7
- import { fileURLToPath } from 'url';
8
-
9
- const __filename = fileURLToPath(import.meta.url);
10
- const __dirname = dirname(__filename);
11
-
12
- // Parse arguments
13
- const args = process.argv.slice(2);
14
- const [featureName, fromPhase, toPhase] = args.filter(arg => !arg.startsWith('--'));
15
-
16
- if (!featureName || !fromPhase || !toPhase) {
17
- console.error('Usage: phase-advanced.js <feature> <from-phase> <to-phase> [--dry-run] [--verbose]');
18
- console.error('');
19
- console.error('Example:');
20
- console.error(' node phase-advanced.js user-auth design clarify');
21
- process.exit(2);
22
- }
23
-
24
- const dryRun = args.includes('--dry-run');
25
- const verbose = args.includes('--verbose');
26
-
27
- // Project path is 3 levels up from framework/hooks/agent-teams/
28
- const projectPath = join(__dirname, '../../..');
29
-
30
- async function main() {
31
- if (verbose) {
32
- console.log(`🔍 PhaseAdvanced Hook triggered:`);
33
- console.log(` Feature: ${featureName}`);
34
- console.log(` Transition: ${fromPhase} → ${toPhase}`);
35
- console.log(` Mode: ${dryRun ? 'DRY RUN' : 'LIVE'}`);
36
- console.log('');
37
- }
38
-
39
- try {
40
- const results = await executeHook(projectPath, featureName, 'PhaseAdvanced', {
41
- fromPhase,
42
- toPhase,
43
- dryRun,
44
- verbose
45
- });
46
-
47
- const output = formatHookResults(results, 'PhaseAdvanced');
48
- console.log(output);
49
-
50
- if (results.blocked) {
51
- console.error('');
52
- console.error('❌ Cannot advance phase - fix errors above');
53
- console.error('');
54
- console.error('To override (not recommended):');
55
- console.error(` npx morph-spec advance-phase ${featureName} ${toPhase} --skip-validation`);
56
- process.exit(1);
57
- }
58
-
59
- if (verbose) {
60
- console.log('');
61
- console.log('✅ Phase advancement validated successfully');
62
- }
63
-
64
- process.exit(0);
65
- } catch (error) {
66
- console.error('');
67
- console.error('❌ Hook execution failed:');
68
- console.error(` ${error.message}`);
69
-
70
- if (verbose && error.stack) {
71
- console.error('');
72
- console.error('Stack trace:');
73
- console.error(error.stack);
74
- }
75
-
76
- process.exit(1);
77
- }
78
- }
79
-
80
- main();
@@ -1,76 +0,0 @@
1
- #!/usr/bin/env node
2
-
3
- // Scope: universal | Task completion validation
4
-
5
- /**
6
- * TaskCompleted Hook - Claude Code Agent Teams
7
- *
8
- * Triggered when a task is marked as completed.
9
- * Validates the task deliverables before allowing the task to be marked done.
10
- *
11
- * Usage (from Claude Code hooks):
12
- * task-completed.js <feature-name> <task-id> [--dry-run] [--verbose]
13
- *
14
- * Exit codes:
15
- * 0 - All validators passed
16
- * 1 - Validation failed and blocked
17
- * 2 - Configuration error
18
- */
19
-
20
- import { executeHook, formatHookResults } from '../../../src/lib/hooks/hook-executor.js';
21
- import { fileURLToPath } from 'url';
22
- import { dirname, join } from 'path';
23
-
24
- const __filename = fileURLToPath(import.meta.url);
25
- const __dirname = dirname(__filename);
26
-
27
- // Get project root (3 levels up from framework/hooks/agent-teams/)
28
- const projectPath = join(__dirname, '../../..');
29
-
30
- async function main() {
31
- const args = process.argv.slice(2);
32
-
33
- if (args.length < 2) {
34
- console.error('Usage: task-completed.js <feature-name> <task-id> [--dry-run] [--verbose]');
35
- process.exit(2);
36
- }
37
-
38
- const featureName = args[0];
39
- const taskId = args[1];
40
- const dryRun = args.includes('--dry-run');
41
- const verbose = args.includes('--verbose');
42
-
43
- console.log('🔔 TaskCompleted Hook Triggered');
44
- console.log(` Feature: ${featureName}`);
45
- console.log(` Task: ${taskId}`);
46
- console.log(` Event: Task marked complete, validating deliverables...\n`);
47
-
48
- try {
49
- const results = await executeHook(projectPath, featureName, 'TaskCompleted', {
50
- dryRun,
51
- verbose,
52
- taskId
53
- });
54
-
55
- const output = formatHookResults(results, 'TaskCompleted');
56
- console.log(output);
57
-
58
- if (results.blocked) {
59
- console.log('\n💡 TIP: Fix the errors above before the task can be marked complete.');
60
- console.log(` Run: morph-spec task done ${featureName} ${taskId} --skip-validation`);
61
- console.log(' (Not recommended - only use if you know what you\'re doing)');
62
- process.exit(1);
63
- }
64
-
65
- console.log('\n✅ Task deliverables validated successfully.');
66
- process.exit(0);
67
- } catch (err) {
68
- console.error(`\n❌ Hook execution error: ${err.message}`);
69
- if (verbose) {
70
- console.error(err.stack);
71
- }
72
- process.exit(2);
73
- }
74
- }
75
-
76
- main();
@@ -1,70 +0,0 @@
1
- #!/usr/bin/env node
2
-
3
- // Scope: universal | Agent Teams idle event validation
4
-
5
- /**
6
- * TeammateIdle Hook - Claude Code Agent Teams
7
- *
8
- * Triggered when a teammate is idle and waiting for next instructions.
9
- * Validates the teammate's recent work before allowing them to proceed.
10
- *
11
- * Usage (from Claude Code hooks):
12
- * teammate-idle.js <feature-name> [--dry-run] [--verbose]
13
- *
14
- * Exit codes:
15
- * 0 - All validators passed
16
- * 1 - Validation failed and blocked
17
- * 2 - Configuration error
18
- */
19
-
20
- import { executeHook, formatHookResults } from '../../../src/lib/hooks/hook-executor.js';
21
- import { fileURLToPath } from 'url';
22
- import { dirname, join } from 'path';
23
-
24
- const __filename = fileURLToPath(import.meta.url);
25
- const __dirname = dirname(__filename);
26
-
27
- // Get project root (3 levels up from framework/hooks/agent-teams/)
28
- const projectPath = join(__dirname, '../../..');
29
-
30
- async function main() {
31
- const args = process.argv.slice(2);
32
-
33
- if (args.length === 0) {
34
- console.error('Usage: teammate-idle.js <feature-name> [--dry-run] [--verbose]');
35
- process.exit(2);
36
- }
37
-
38
- const featureName = args[0];
39
- const dryRun = args.includes('--dry-run');
40
- const verbose = args.includes('--verbose');
41
-
42
- console.log('🔔 TeammateIdle Hook Triggered');
43
- console.log(` Feature: ${featureName}`);
44
- console.log(` Event: Teammate is idle, validating recent work...\n`);
45
-
46
- try {
47
- const results = await executeHook(projectPath, featureName, 'TeammateIdle', {
48
- dryRun,
49
- verbose
50
- });
51
-
52
- const output = formatHookResults(results, 'TeammateIdle');
53
- console.log(output);
54
-
55
- if (results.blocked) {
56
- console.log('\n💡 TIP: Fix the errors above before the teammate can proceed.');
57
- process.exit(1);
58
- }
59
-
60
- process.exit(0);
61
- } catch (err) {
62
- console.error(`\n❌ Hook execution error: ${err.message}`);
63
- if (verbose) {
64
- console.error(err.stack);
65
- }
66
- process.exit(2);
67
- }
68
- }
69
-
70
- main();