@polymorphism-tech/morph-spec 3.2.0 → 4.2.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 (319) hide show
  1. package/CLAUDE.md +352 -7
  2. package/README.md +1 -14
  3. package/bin/detect-agents.js +1 -1
  4. package/bin/morph-spec.js +122 -34
  5. package/bin/validate.js +1 -1
  6. package/docs/getting-started.md +0 -5
  7. package/docs/v3.0/AGENTS.md +521 -0
  8. package/docs/v3.0/ANALYSIS.md +555 -0
  9. package/docs/v3.0/ARCHITECTURE.md +436 -0
  10. package/docs/v3.0/EXECUTION-FLOW.md +1304 -0
  11. package/docs/v3.0/FEATURES.md +688 -0
  12. package/docs/v3.0/README.md +231 -0
  13. package/docs/v3.0/ROADMAP.md +801 -0
  14. package/docs/validation-checklist.md +0 -1
  15. package/package.json +1 -1
  16. package/src/commands/agents/index.js +4 -0
  17. package/src/commands/{spawn-team.js → agents/spawn-team.js} +172 -172
  18. package/src/commands/{create-story.js → feature/create-story.js} +357 -354
  19. package/src/commands/feature/index.js +6 -0
  20. package/src/commands/{shard-spec.js → feature/shard-spec.js} +2 -2
  21. package/src/commands/{sprint-status.js → feature/sprint-status.js} +1 -1
  22. package/src/commands/{generate-context.js → generation/generate-context.js} +40 -40
  23. package/src/commands/{generate.js → generation/generate.js} +4 -4
  24. package/src/commands/generation/index.js +5 -0
  25. package/src/commands/index.js +16 -0
  26. package/src/commands/{capture-pattern.js → learning/capture-pattern.js} +121 -121
  27. package/src/commands/learning/index.js +5 -0
  28. package/src/commands/{detect-agents.js → project/detect-agents.js} +178 -178
  29. package/src/commands/project/detect-workflow.js +174 -0
  30. package/src/commands/{detect.js → project/detect.js} +104 -104
  31. package/src/commands/{doctor.js → project/doctor.js} +356 -356
  32. package/src/commands/project/index.js +10 -0
  33. package/src/commands/{init.js → project/init.js} +305 -295
  34. package/src/commands/{sync.js → project/sync.js} +167 -167
  35. package/src/commands/{update.js → project/update.js} +240 -240
  36. package/src/commands/{advance-phase.js → state/advance-phase.js} +416 -357
  37. package/src/commands/{approve.js → state/approve.js} +221 -221
  38. package/src/commands/state/index.js +8 -0
  39. package/src/commands/{rollback-phase.js → state/rollback-phase.js} +185 -185
  40. package/src/commands/{state.js → state/state.js} +334 -334
  41. package/src/commands/{validate-phase.js → state/validate-phase.js} +221 -221
  42. package/src/commands/tasks/index.js +4 -0
  43. package/src/commands/{task.js → tasks/task.js} +78 -78
  44. package/src/commands/templates/index.js +8 -0
  45. package/src/commands/templates/template-customize.js +101 -0
  46. package/src/commands/templates/template-list.js +128 -0
  47. package/src/commands/templates/template-render.js +95 -0
  48. package/src/commands/templates/template-show.js +131 -0
  49. package/src/commands/templates/template-validate.js +91 -0
  50. package/src/commands/utils/index.js +7 -0
  51. package/src/commands/{session-summary.js → utils/session-summary.js} +291 -291
  52. package/src/commands/{troubleshoot.js → utils/troubleshoot.js} +222 -222
  53. package/src/commands/{analyze-blazor-concurrency.js → validation/analyze-blazor-concurrency.js} +193 -193
  54. package/src/commands/validation/index.js +8 -0
  55. package/src/commands/{lint-fluent.js → validation/lint-fluent.js} +352 -352
  56. package/src/commands/{validate-blazor-state.js → validation/validate-blazor-state.js} +210 -210
  57. package/src/commands/{validate-blazor.js → validation/validate-blazor.js} +156 -156
  58. package/src/commands/{validate-css.js → validation/validate-css.js} +84 -84
  59. package/src/core/index.js +10 -0
  60. package/src/core/registry/command-registry.js +302 -0
  61. package/src/core/registry/index.js +8 -0
  62. package/src/core/registry/validator-registry.js +204 -0
  63. package/src/core/state/index.js +8 -0
  64. package/src/{lib → core/state}/phase-state-machine.js +214 -214
  65. package/src/{lib → core/state}/state-manager.js +572 -534
  66. package/src/core/templates/index.js +9 -0
  67. package/src/core/templates/template-registry.js +335 -0
  68. package/src/core/templates/template-renderer.js +477 -0
  69. package/src/core/templates/template-validator.js +296 -0
  70. package/src/core/workflows/index.js +7 -0
  71. package/src/core/workflows/workflow-detector.js +354 -0
  72. package/src/lib/{complexity-analyzer.js → analysis/complexity-analyzer.js} +441 -441
  73. package/src/lib/analysis/index.js +7 -0
  74. package/src/lib/{checkpoint-hooks.js → checkpoints/checkpoint-hooks.js} +258 -258
  75. package/src/lib/checkpoints/index.js +7 -0
  76. package/src/lib/detectors/config-detector.js +223 -223
  77. package/src/lib/detectors/conversation-analyzer.js +163 -163
  78. package/src/lib/{design-system-detector.js → detectors/design-system-detector.js} +187 -187
  79. package/src/lib/detectors/index.js +87 -84
  80. package/src/lib/detectors/standards-generator.js +275 -275
  81. package/src/lib/detectors/structure-detector.js +245 -245
  82. package/src/lib/{context-generator.js → generators/context-generator.js} +526 -516
  83. package/src/lib/generators/index.js +10 -0
  84. package/src/lib/{metadata-extractor.js → generators/metadata-extractor.js} +387 -380
  85. package/src/lib/{recap-generator.js → generators/recap-generator.js} +205 -205
  86. package/src/lib/learning/index.js +7 -0
  87. package/src/lib/orchestration/index.js +7 -0
  88. package/src/lib/{team-orchestrator.js → orchestration/team-orchestrator.js} +323 -323
  89. package/src/lib/stacks/index.js +7 -0
  90. package/src/lib/{stack-resolver.js → stacks/stack-resolver.js} +180 -148
  91. package/src/lib/standards/index.js +7 -0
  92. package/src/lib/{standards-context-injector.js → standards/standards-context-injector.js} +298 -288
  93. package/src/lib/troubleshooting/index.js +8 -0
  94. package/src/lib/{troubleshoot-grep.js → troubleshooting/troubleshoot-grep.js} +204 -204
  95. package/src/lib/{troubleshoot-index.js → troubleshooting/troubleshoot-index.js} +144 -144
  96. package/src/lib/validators/architecture/architecture-validator.js +387 -0
  97. package/src/lib/validators/architecture/index.js +7 -0
  98. package/src/lib/validators/architecture-validator.js +40 -367
  99. package/src/lib/{blazor-concurrency-analyzer.js → validators/blazor/blazor-concurrency-analyzer.js} +277 -288
  100. package/src/lib/{blazor-state-validator.js → validators/blazor/blazor-state-validator.js} +279 -291
  101. package/src/lib/{blazor-validator.js → validators/blazor/blazor-validator.js} +369 -374
  102. package/src/lib/validators/blazor/index.js +9 -0
  103. package/src/lib/validators/content/content-validator.js +351 -0
  104. package/src/lib/validators/content/index.js +7 -0
  105. package/src/lib/validators/content-validator.js +164 -351
  106. package/src/lib/validators/{contract-compliance-validator.js → contracts/contract-compliance-validator.js} +273 -273
  107. package/src/lib/validators/contracts/index.js +7 -0
  108. package/src/lib/{css-validator.js → validators/css/css-validator.js} +352 -352
  109. package/src/lib/validators/css/index.js +7 -0
  110. package/src/lib/validators/{design-system-validator.js → design-system/design-system-validator.js} +231 -231
  111. package/src/lib/validators/design-system/index.js +7 -0
  112. package/src/lib/validators/package-validator.js +41 -340
  113. package/src/lib/validators/packages/index.js +7 -0
  114. package/src/lib/validators/packages/package-validator.js +360 -0
  115. package/src/lib/validators/shared/index.js +12 -0
  116. package/src/lib/validators/shared/issue-counter.js +18 -0
  117. package/src/lib/validators/shared/result-formatter.js +124 -0
  118. package/src/lib/{spec-validator.js → validators/spec-validator.js} +258 -258
  119. package/src/lib/validators/ui/index.js +7 -0
  120. package/src/lib/validators/ui/ui-contrast-validator.js +422 -0
  121. package/src/lib/validators/ui-contrast-validator.js +31 -409
  122. package/src/lib/{validation-runner.js → validators/validation-runner.js} +286 -284
  123. package/src/ui/wizard-questions.js +0 -2
  124. package/src/utils/color-utils.js +70 -0
  125. package/src/utils/file-copier.js +188 -189
  126. package/src/utils/process-handler.js +97 -0
  127. package/stacks/blazor-azure/.claude/skills/level-2-domains/ai-agents/ai-system-architect.md +3 -3
  128. package/stacks/blazor-azure/.claude/skills/level-2-domains/backend/api-designer.md +59 -0
  129. package/stacks/blazor-azure/.claude/skills/level-2-domains/backend/dotnet-senior.md +45 -255
  130. package/stacks/blazor-azure/.claude/skills/level-2-domains/backend/ef-modeler.md +33 -88
  131. package/stacks/blazor-azure/.claude/skills/level-2-domains/backend/ms-agent-expert.md +25 -89
  132. package/stacks/blazor-azure/.claude/skills/level-2-domains/integrations/hangfire-orchestrator.md +64 -0
  133. package/stacks/blazor-azure/.morph/config/agents.json +879 -764
  134. package/stacks/blazor-azure/.morph/hooks/{pre-commit-tests.sh → pre-commit/tests-csharp.sh} +3 -2
  135. package/stacks/blazor-azure/.morph/templates/infrastructure/github/workflows/cd-prod.yml.hbs +41 -0
  136. package/stacks/blazor-azure/.morph/templates/infrastructure/github/workflows/cd-staging.yml.hbs +24 -0
  137. package/stacks/blazor-azure/.morph/templates/infrastructure/github/workflows/ci-build.yml.hbs +23 -0
  138. package/stacks/nextjs-supabase/.claude/commands/morph-apply.md +221 -0
  139. package/stacks/nextjs-supabase/.claude/commands/morph-archive.md +79 -0
  140. package/stacks/nextjs-supabase/.claude/commands/morph-deploy.md +529 -0
  141. package/stacks/nextjs-supabase/.claude/commands/morph-infra.md +209 -0
  142. package/stacks/nextjs-supabase/.claude/commands/morph-preflight.md +227 -0
  143. package/stacks/nextjs-supabase/.claude/commands/morph-proposal.md +122 -0
  144. package/stacks/nextjs-supabase/.claude/commands/morph-status.md +86 -0
  145. package/stacks/nextjs-supabase/.claude/commands/morph-troubleshoot.md +122 -0
  146. package/stacks/nextjs-supabase/.claude/settings.local.json +6 -0
  147. package/stacks/nextjs-supabase/.claude/skills/level-2-domains/integrations/supabase-expert.md +30 -150
  148. package/stacks/nextjs-supabase/.morph/config/agents.json +345 -345
  149. package/stacks/nextjs-supabase/.morph/hooks/pre-commit/tests-typescript.sh +61 -0
  150. package/stacks/nextjs-supabase/.morph/templates/infrastructure/github/workflows/cd-prod.yml.hbs +22 -0
  151. package/stacks/nextjs-supabase/.morph/templates/infrastructure/github/workflows/cd-staging.yml.hbs +22 -0
  152. package/stacks/nextjs-supabase/.morph/templates/infrastructure/github/workflows/ci-build.yml.hbs +35 -0
  153. package/stacks/nextjs-supabase/README.md +6 -15
  154. package/bin/render-template.js +0 -349
  155. package/bin/semantic-detect-agents.js +0 -247
  156. package/bin/validate-agents-skills.js +0 -257
  157. package/bin/validate-agents.js +0 -70
  158. package/bin/validate-phase.js +0 -263
  159. package/docs/examples.md +0 -328
  160. package/scripts/reorganize-skills.cjs +0 -175
  161. package/scripts/validate-agents-structure.cjs +0 -52
  162. package/scripts/validate-skills.cjs +0 -180
  163. package/src/commands/deploy.js +0 -780
  164. package/src/lib/continuous-validator.js +0 -421
  165. package/src/lib/decision-constraint-loader.js +0 -109
  166. package/src/lib/design-system-scaffolder.js +0 -299
  167. package/src/lib/hook-executor.js +0 -257
  168. package/src/lib/mockup-generator.js +0 -366
  169. package/src/lib/ui-detector.js +0 -350
  170. package/src/llm/schema-validator.js +0 -121
  171. package/src/sanitizer/.gitkeep +0 -0
  172. package/src/scanner/.gitkeep +0 -0
  173. package/src/types/index.js +0 -477
  174. package/src/ui/.gitkeep +0 -0
  175. package/src/writer/.gitkeep +0 -0
  176. package/stacks/blazor-azure/.azure/README.md +0 -293
  177. package/stacks/blazor-azure/.azure/docs/azure-devops-setup.md +0 -454
  178. package/stacks/blazor-azure/.azure/docs/branch-strategy.md +0 -398
  179. package/stacks/blazor-azure/.azure/docs/local-development.md +0 -515
  180. package/stacks/blazor-azure/.azure/pipelines/pipeline-variables.yml +0 -34
  181. package/stacks/blazor-azure/.azure/pipelines/prod-pipeline.yml +0 -319
  182. package/stacks/blazor-azure/.azure/pipelines/staging-pipeline.yml +0 -234
  183. package/stacks/blazor-azure/.azure/pipelines/templates/build-dotnet.yml +0 -75
  184. package/stacks/blazor-azure/.azure/pipelines/templates/deploy-app-service.yml +0 -94
  185. package/stacks/blazor-azure/.azure/pipelines/templates/deploy-container-app.yml +0 -120
  186. package/stacks/blazor-azure/.azure/pipelines/templates/infra-deploy.yml +0 -90
  187. package/stacks/blazor-azure/.claude/settings.local.json +0 -15
  188. package/stacks/blazor-azure/.morph/docs/STORY-DRIVEN-DEVELOPMENT.md +0 -392
  189. package/stacks/blazor-azure/.morph/docs/workflows/design-impl.md +0 -37
  190. package/stacks/blazor-azure/.morph/docs/workflows/enforcement-pipeline.md +0 -668
  191. package/stacks/blazor-azure/.morph/docs/workflows/fast-track.md +0 -29
  192. package/stacks/blazor-azure/.morph/docs/workflows/full-morph.md +0 -76
  193. package/stacks/blazor-azure/.morph/docs/workflows/standard.md +0 -44
  194. package/stacks/blazor-azure/.morph/docs/workflows/ui-refresh.md +0 -39
  195. package/stacks/blazor-azure/.morph/examples/api-nextjs/README.md +0 -241
  196. package/stacks/blazor-azure/.morph/examples/api-nextjs/contracts.ts +0 -307
  197. package/stacks/blazor-azure/.morph/examples/api-nextjs/spec.md +0 -399
  198. package/stacks/blazor-azure/.morph/examples/api-nextjs/tasks.md +0 -168
  199. package/stacks/blazor-azure/.morph/examples/micro-saas/README.md +0 -125
  200. package/stacks/blazor-azure/.morph/examples/micro-saas/contracts.cs +0 -358
  201. package/stacks/blazor-azure/.morph/examples/micro-saas/decisions.md +0 -246
  202. package/stacks/blazor-azure/.morph/examples/micro-saas/spec.md +0 -236
  203. package/stacks/blazor-azure/.morph/examples/micro-saas/tasks.md +0 -150
  204. package/stacks/blazor-azure/.morph/examples/multi-agent/README.md +0 -309
  205. package/stacks/blazor-azure/.morph/examples/multi-agent/contracts.cs +0 -433
  206. package/stacks/blazor-azure/.morph/examples/multi-agent/spec.md +0 -479
  207. package/stacks/blazor-azure/.morph/examples/multi-agent/tasks.md +0 -185
  208. package/stacks/blazor-azure/.morph/examples/scheduled-reports/decisions.md +0 -158
  209. package/stacks/blazor-azure/.morph/examples/scheduled-reports/proposal.md +0 -95
  210. package/stacks/blazor-azure/.morph/examples/scheduled-reports/spec.md +0 -267
  211. package/stacks/blazor-azure/.morph/examples/state-v3.json +0 -188
  212. package/stacks/blazor-azure/.morph/hooks/README.md +0 -348
  213. package/stacks/blazor-azure/.morph/hooks/pre-commit-agents.sh +0 -24
  214. package/stacks/blazor-azure/.morph/hooks/pre-commit-all.sh +0 -48
  215. package/stacks/blazor-azure/.morph/hooks/pre-commit-specs.sh +0 -49
  216. package/stacks/blazor-azure/.morph/hooks/task-completed.js +0 -73
  217. package/stacks/blazor-azure/.morph/hooks/teammate-idle.js +0 -68
  218. package/stacks/blazor-azure/.morph/standards/agent-framework-blazor-ui.md +0 -359
  219. package/stacks/blazor-azure/.morph/standards/agent-framework-production.md +0 -410
  220. package/stacks/blazor-azure/.morph/standards/agent-framework-setup.md +0 -413
  221. package/stacks/blazor-azure/.morph/standards/agent-framework-workflows.md +0 -349
  222. package/stacks/blazor-azure/.morph/standards/agent-teams-workflow.md +0 -474
  223. package/stacks/blazor-azure/.morph/standards/architecture.md +0 -325
  224. package/stacks/blazor-azure/.morph/standards/azure.md +0 -605
  225. package/stacks/blazor-azure/.morph/standards/coding.md +0 -377
  226. package/stacks/blazor-azure/.morph/standards/dotnet10-migration.md +0 -520
  227. package/stacks/blazor-azure/.morph/standards/fluent-ui-setup.md +0 -590
  228. package/stacks/blazor-azure/.morph/standards/migration-guide.md +0 -514
  229. package/stacks/blazor-azure/.morph/standards/passkeys-auth.md +0 -423
  230. package/stacks/blazor-azure/.morph/standards/vector-search-rag.md +0 -536
  231. package/stacks/blazor-azure/.morph/templates/CONTEXT-FEATURE.md +0 -276
  232. package/stacks/blazor-azure/.morph/templates/CONTEXT.md +0 -170
  233. package/stacks/blazor-azure/.morph/templates/FluentDesignTheme.cs +0 -149
  234. package/stacks/blazor-azure/.morph/templates/MudTheme.cs +0 -281
  235. package/stacks/blazor-azure/.morph/templates/agent.cs +0 -163
  236. package/stacks/blazor-azure/.morph/templates/clarify-questions.md +0 -159
  237. package/stacks/blazor-azure/.morph/templates/component.razor +0 -239
  238. package/stacks/blazor-azure/.morph/templates/contracts/Commands.cs +0 -74
  239. package/stacks/blazor-azure/.morph/templates/contracts/Entities.cs +0 -25
  240. package/stacks/blazor-azure/.morph/templates/contracts/Queries.cs +0 -74
  241. package/stacks/blazor-azure/.morph/templates/contracts/README.md +0 -74
  242. package/stacks/blazor-azure/.morph/templates/contracts.cs +0 -217
  243. package/stacks/blazor-azure/.morph/templates/decisions.md +0 -123
  244. package/stacks/blazor-azure/.morph/templates/design-system.css +0 -226
  245. package/stacks/blazor-azure/.morph/templates/infra/.dockerignore.example +0 -89
  246. package/stacks/blazor-azure/.morph/templates/infra/Dockerfile.example +0 -82
  247. package/stacks/blazor-azure/.morph/templates/infra/README.md +0 -286
  248. package/stacks/blazor-azure/.morph/templates/infra/app-insights.bicep +0 -63
  249. package/stacks/blazor-azure/.morph/templates/infra/app-service.bicep +0 -164
  250. package/stacks/blazor-azure/.morph/templates/infra/azure-pipelines-deploy.yml +0 -480
  251. package/stacks/blazor-azure/.morph/templates/infra/container-app-env.bicep +0 -49
  252. package/stacks/blazor-azure/.morph/templates/infra/container-app.bicep +0 -156
  253. package/stacks/blazor-azure/.morph/templates/infra/deploy-checklist.md +0 -426
  254. package/stacks/blazor-azure/.morph/templates/infra/deploy.ps1 +0 -229
  255. package/stacks/blazor-azure/.morph/templates/infra/deploy.sh +0 -208
  256. package/stacks/blazor-azure/.morph/templates/infra/key-vault.bicep +0 -91
  257. package/stacks/blazor-azure/.morph/templates/infra/main.bicep +0 -189
  258. package/stacks/blazor-azure/.morph/templates/infra/parameters.dev.json +0 -29
  259. package/stacks/blazor-azure/.morph/templates/infra/parameters.prod.json +0 -29
  260. package/stacks/blazor-azure/.morph/templates/infra/parameters.staging.json +0 -29
  261. package/stacks/blazor-azure/.morph/templates/infra/sql-database.bicep +0 -103
  262. package/stacks/blazor-azure/.morph/templates/infra/storage.bicep +0 -106
  263. package/stacks/blazor-azure/.morph/templates/integrations/asaas-client.cs +0 -387
  264. package/stacks/blazor-azure/.morph/templates/integrations/asaas-webhook.cs +0 -351
  265. package/stacks/blazor-azure/.morph/templates/integrations/azure-identity-config.cs +0 -288
  266. package/stacks/blazor-azure/.morph/templates/integrations/clerk-config.cs +0 -258
  267. package/stacks/blazor-azure/.morph/templates/job.cs +0 -171
  268. package/stacks/blazor-azure/.morph/templates/migration.cs +0 -83
  269. package/stacks/blazor-azure/.morph/templates/proposal.md +0 -141
  270. package/stacks/blazor-azure/.morph/templates/recap.md +0 -94
  271. package/stacks/blazor-azure/.morph/templates/repository.cs +0 -141
  272. package/stacks/blazor-azure/.morph/templates/saas/subscription.cs +0 -347
  273. package/stacks/blazor-azure/.morph/templates/saas/tenant.cs +0 -338
  274. package/stacks/blazor-azure/.morph/templates/service.cs +0 -139
  275. package/stacks/blazor-azure/.morph/templates/simulation.md +0 -353
  276. package/stacks/blazor-azure/.morph/templates/spec.md +0 -149
  277. package/stacks/blazor-azure/.morph/templates/sprint-status.yaml +0 -68
  278. package/stacks/blazor-azure/.morph/templates/state.template.json +0 -222
  279. package/stacks/blazor-azure/.morph/templates/story.md +0 -143
  280. package/stacks/blazor-azure/.morph/templates/tasks.md +0 -257
  281. package/stacks/blazor-azure/.morph/templates/test.cs +0 -239
  282. package/stacks/blazor-azure/.morph/templates/ui-components.md +0 -362
  283. package/stacks/blazor-azure/.morph/templates/ui-design-system.md +0 -286
  284. package/stacks/blazor-azure/.morph/templates/ui-flows.md +0 -336
  285. package/stacks/blazor-azure/.morph/templates/ui-mockups.md +0 -133
  286. package/stacks/nextjs-supabase/.morph/docs/easypanel-setup.md +0 -169
  287. package/stacks/nextjs-supabase/.morph/docs/supabase-mcp-setup.md +0 -247
  288. package/stacks/nextjs-supabase/.morph/examples/crud-nextjs-supabase/README.md +0 -697
  289. package/stacks/nextjs-supabase/.morph/examples/crud-nextjs-supabase/spec.md +0 -85
  290. package/stacks/nextjs-supabase/.morph/examples/crud-nextjs-supabase/tasks.md +0 -86
  291. package/stacks/nextjs-supabase/.morph/examples/saas-nextjs-supabase/README.md +0 -498
  292. package/stacks/nextjs-supabase/.morph/examples/saas-nextjs-supabase/decisions.md +0 -121
  293. package/stacks/nextjs-supabase/.morph/examples/saas-nextjs-supabase/spec.md +0 -138
  294. package/stacks/nextjs-supabase/.morph/examples/saas-nextjs-supabase/tasks.md +0 -162
  295. package/stacks/nextjs-supabase/.morph/standards/easypanel-deploy.md +0 -191
  296. package/stacks/nextjs-supabase/.morph/standards/nextjs-patterns.md +0 -193
  297. package/stacks/nextjs-supabase/.morph/standards/supabase-auth.md +0 -171
  298. package/stacks/nextjs-supabase/.morph/standards/supabase-pgvector.md +0 -164
  299. package/stacks/nextjs-supabase/.morph/standards/supabase-rls.md +0 -179
  300. package/stacks/nextjs-supabase/.morph/standards/supabase-storage.md +0 -148
  301. package/stacks/nextjs-supabase/.morph/templates/contracts.cs +0 -173
  302. package/stacks/nextjs-supabase/.morph/templates/contracts.ts +0 -168
  303. package/stacks/nextjs-supabase/.morph/templates/decisions.md +0 -115
  304. package/stacks/nextjs-supabase/.morph/templates/dockerfile-api.dockerfile +0 -38
  305. package/stacks/nextjs-supabase/.morph/templates/dockerfile-web.dockerfile +0 -48
  306. package/stacks/nextjs-supabase/.morph/templates/proposal.md +0 -145
  307. package/stacks/nextjs-supabase/.morph/templates/recap.md +0 -134
  308. package/stacks/nextjs-supabase/.morph/templates/rls-policy.sql +0 -57
  309. package/stacks/nextjs-supabase/.morph/templates/spec.md +0 -231
  310. package/stacks/nextjs-supabase/.morph/templates/supabase-migration.sql +0 -100
  311. package/stacks/nextjs-supabase/.morph/templates/tasks.md +0 -257
  312. /package/src/commands/{search-patterns.js → learning/search-patterns.js} +0 -0
  313. /package/src/commands/{migrate-state.js → utils/migrate-state.js} +0 -0
  314. /package/src/commands/{upgrade.js → utils/upgrade.js} +0 -0
  315. /package/src/{lib → core/templates}/template-data-sources.js +0 -0
  316. /package/src/lib/{design-system-generator.js → generators/design-system-generator.js} +0 -0
  317. /package/src/lib/{learning-system.js → learning/learning-system.js} +0 -0
  318. /package/{src/generator → stacks/blazor-azure/.morph/templates}/.gitkeep +0 -0
  319. /package/{src/llm → stacks/nextjs-supabase/.morph/templates}/.gitkeep +0 -0
@@ -1,247 +0,0 @@
1
- #!/usr/bin/env node
2
-
3
- /**
4
- * MORPH-SPEC Semantic Agent Detection (LLM-based)
5
- *
6
- * Uses LLM analysis to detect which agents should be activated based on user request.
7
- * More accurate than keyword matching - understands context and implicit needs.
8
- *
9
- * Usage:
10
- * export ANTHROPIC_API_KEY=sk-...
11
- * node bin/semantic-detect-agents.js "user request here"
12
- *
13
- * Falls back to keyword-based detection if API key not available.
14
- */
15
-
16
- import fs from 'fs';
17
- import path from 'path';
18
- import { fileURLToPath } from 'url';
19
- import { execSync } from 'child_process';
20
- import { resolveAgentsConfigPath } from '../src/lib/stack-resolver.js';
21
-
22
- const __filename = fileURLToPath(import.meta.url);
23
- const __dirname = path.dirname(__filename);
24
-
25
- // ANSI colors
26
- const colors = {
27
- green: '\x1b[32m',
28
- red: '\x1b[31m',
29
- yellow: '\x1b[33m',
30
- cyan: '\x1b[36m',
31
- gray: '\x1b[90m',
32
- reset: '\x1b[0m'
33
- };
34
-
35
- /**
36
- * Call Anthropic Claude API for semantic analysis
37
- */
38
- async function callClaudeAPI(userRequest, agentDescriptions) {
39
- const apiKey = process.env.ANTHROPIC_API_KEY;
40
-
41
- if (!apiKey) {
42
- return null; // Will fall back to keyword detection
43
- }
44
-
45
- const prompt = `You are an expert at analyzing software development requests and determining which specialist agents are needed.
46
-
47
- Given this user request:
48
- "${userRequest}"
49
-
50
- And these available specialist agents:
51
- ${agentDescriptions}
52
-
53
- Analyze the request and determine which specialist agents should be activated. Consider:
54
- - Explicit mentions (e.g., "create a dashboard" → UI/UX Designer)
55
- - Implicit needs (e.g., "show data to users" → UI/UX Designer)
56
- - Technical requirements (e.g., "scheduled tasks" → Hangfire Orchestrator)
57
- - Architecture patterns (e.g., "RAG pipeline" → AI System Architect)
58
-
59
- Respond with ONLY a JSON array of agent IDs, like:
60
- ["uiux-designer", "hangfire-orchestrator"]
61
-
62
- If no specialists are needed, respond with: []
63
- Do not include core agents (they are always active).`;
64
-
65
- try {
66
- const response = await fetch('https://api.anthropic.com/v1/messages', {
67
- method: 'POST',
68
- headers: {
69
- 'Content-Type': 'application/json',
70
- 'x-api-key': apiKey,
71
- 'anthropic-version': '2023-06-01'
72
- },
73
- body: JSON.stringify({
74
- model: 'claude-3-haiku-20240307',
75
- max_tokens: 200,
76
- messages: [{
77
- role: 'user',
78
- content: prompt
79
- }]
80
- })
81
- });
82
-
83
- if (!response.ok) {
84
- const error = await response.text();
85
- console.error(`${colors.yellow}⚠ Claude API error: ${error}${colors.reset}`);
86
- return null;
87
- }
88
-
89
- const data = await response.json();
90
- const content = data.content[0].text.trim();
91
-
92
- // Parse JSON response
93
- const agentIds = JSON.parse(content);
94
- return agentIds;
95
- } catch (error) {
96
- console.error(`${colors.yellow}⚠ Claude API failed: ${error.message}${colors.reset}`);
97
- return null;
98
- }
99
- }
100
-
101
- /**
102
- * Fallback: keyword-based detection (existing behavior)
103
- */
104
- function keywordBasedDetection(userRequest) {
105
- console.log(`${colors.yellow}ℹ Using keyword-based detection (fallback)${colors.reset}`);
106
-
107
- try {
108
- const result = execSync(`node bin/detect-agents.js "${userRequest}" --json`, {
109
- encoding: 'utf-8',
110
- cwd: process.cwd()
111
- });
112
-
113
- const parsed = JSON.parse(result);
114
- return parsed.specialists || [];
115
- } catch (error) {
116
- console.error(`${colors.red}✗ Fallback detection failed: ${error.message}${colors.reset}`);
117
- return [];
118
- }
119
- }
120
-
121
- /**
122
- * Load agent descriptions for LLM context
123
- */
124
- function loadAgentDescriptions() {
125
- const agentsPath = resolveAgentsConfigPath(process.cwd());
126
-
127
- if (!fs.existsSync(agentsPath)) {
128
- throw new Error('agents.json not found');
129
- }
130
-
131
- const agents = JSON.parse(fs.readFileSync(agentsPath, 'utf-8'));
132
- const specialists = agents.agents.specialists || [];
133
-
134
- return specialists.map(agent =>
135
- `- ${agent.id}: ${agent.description}`
136
- ).join('\n');
137
- }
138
-
139
- /**
140
- * Print detection results
141
- */
142
- function printResults(agentIds, method, userRequest) {
143
- console.log(`\n${colors.cyan}╔════════════════════════════════════════════════╗${colors.reset}`);
144
- console.log(`${colors.cyan}║ MORPH-SPEC SEMANTIC AGENT DETECTION ║${colors.reset}`);
145
- console.log(`${colors.cyan}╚════════════════════════════════════════════════╝${colors.reset}\n`);
146
-
147
- console.log(`${colors.gray}Request:${colors.reset} "${userRequest}"`);
148
- console.log(`${colors.gray}Method:${colors.reset} ${method}`);
149
- console.log(`${colors.gray}Agents Detected:${colors.reset} ${agentIds.length}`);
150
-
151
- if (agentIds.length > 0) {
152
- console.log('');
153
- agentIds.forEach(id => {
154
- console.log(` ${colors.green}✓${colors.reset} ${id}`);
155
- });
156
- } else {
157
- console.log(`\n ${colors.gray}(No specialist agents needed)${colors.reset}`);
158
- }
159
-
160
- console.log('');
161
- }
162
-
163
- /**
164
- * Print help
165
- */
166
- function printHelp() {
167
- console.log(`
168
- ${colors.cyan}MORPH-SPEC Semantic Agent Detection${colors.reset}
169
-
170
- Uses LLM analysis to detect which agents should be activated.
171
- More accurate than keyword matching - understands context.
172
-
173
- ${colors.green}Setup:${colors.reset}
174
- export ANTHROPIC_API_KEY=sk-ant-...
175
-
176
- ${colors.green}Usage:${colors.reset}
177
- node bin/semantic-detect-agents.js "user request here"
178
-
179
- ${colors.green}Examples:${colors.reset}
180
- # Detects UI/UX Designer (implicit need)
181
- node bin/semantic-detect-agents.js "sistema que mostra dados ao usuário"
182
-
183
- # Detects Hangfire Orchestrator
184
- node bin/semantic-detect-agents.js "processar arquivos todo dia às 3h"
185
-
186
- # Detects AI System Architect
187
- node bin/semantic-detect-agents.js "pipeline de RAG com chunking"
188
-
189
- ${colors.green}Fallback:${colors.reset}
190
- If ANTHROPIC_API_KEY is not set, falls back to keyword-based detection.
191
-
192
- ${colors.green}Benefits:${colors.reset}
193
- ✓ Understands context ("show data to users" → UI)
194
- ✓ Works in any language (not just keywords)
195
- ✓ Eliminates false positives/negatives
196
- ✓ Detects implicit needs
197
-
198
- ${colors.green}Output:${colors.reset}
199
- Prints detected agent IDs, one per line, for use in scripts.
200
- `);
201
- }
202
-
203
- /**
204
- * Main function
205
- */
206
- async function main() {
207
- const args = process.argv.slice(2);
208
-
209
- if (args.includes('--help') || args.includes('-h') || args.length === 0) {
210
- printHelp();
211
- process.exit(args.length === 0 ? 1 : 0);
212
- }
213
-
214
- const userRequest = args.join(' ');
215
- const hasApiKey = !!process.env.ANTHROPIC_API_KEY;
216
-
217
- let agentIds;
218
- let method;
219
-
220
- if (hasApiKey) {
221
- method = `${colors.green}LLM-based (Claude Haiku)${colors.reset}`;
222
- const agentDescriptions = loadAgentDescriptions();
223
- agentIds = await callClaudeAPI(userRequest, agentDescriptions);
224
-
225
- if (!agentIds) {
226
- // API failed, fall back
227
- method = `${colors.yellow}Keyword-based (API fallback)${colors.reset}`;
228
- agentIds = keywordBasedDetection(userRequest);
229
- }
230
- } else {
231
- method = `${colors.yellow}Keyword-based (no API key)${colors.reset}`;
232
- agentIds = keywordBasedDetection(userRequest);
233
- }
234
-
235
- printResults(agentIds, method, userRequest);
236
-
237
- // Output for scripting (one ID per line)
238
- if (args.includes('--quiet') || args.includes('-q')) {
239
- console.clear();
240
- agentIds.forEach(id => console.log(id));
241
- }
242
- }
243
-
244
- main().catch(error => {
245
- console.error(`${colors.red}✗ Error: ${error.message}${colors.reset}`);
246
- process.exit(1);
247
- });
@@ -1,257 +0,0 @@
1
- #!/usr/bin/env node
2
-
3
- /**
4
- * MORPH-SPEC Agent-Skill Validator
5
- *
6
- * Valida a consistência entre agents.json e arquivos de skills.
7
- * Garante que não há agentes sem skills ou skills sem agentes (orphans).
8
- *
9
- * Uso:
10
- * node bin/validate-agents-skills.js
11
- * node bin/validate-agents-skills.js --verbose
12
- */
13
-
14
- import { readFileSync, existsSync, readdirSync, statSync } from 'fs';
15
- import { join, dirname } from 'path';
16
- import { fileURLToPath } from 'url';
17
- import { resolveAgentsConfigPath, resolveStackPath } from '../src/lib/stack-resolver.js';
18
-
19
- const __dirname = dirname(fileURLToPath(import.meta.url));
20
- const frameworkRoot = join(__dirname, '..');
21
- const AGENTS_CONFIG_PATH = resolveAgentsConfigPath(frameworkRoot);
22
- const SKILLS_BASE_PATH = join(resolveStackPath(frameworkRoot), '.claude/skills');
23
-
24
- // Cores para output
25
- const colors = {
26
- reset: '\x1b[0m',
27
- bright: '\x1b[1m',
28
- green: '\x1b[32m',
29
- yellow: '\x1b[33m',
30
- red: '\x1b[31m',
31
- cyan: '\x1b[36m',
32
- gray: '\x1b[90m'
33
- };
34
-
35
- function log(message, color = 'reset') {
36
- console.log(`${colors[color]}${message}${colors.reset}`);
37
- }
38
-
39
- /**
40
- * Carrega agents.json
41
- */
42
- function loadAgentsConfig() {
43
- try {
44
- const content = readFileSync(AGENTS_CONFIG_PATH, 'utf8');
45
- return JSON.parse(content);
46
- } catch (err) {
47
- log(`ERROR: Failed to load agents.json: ${err.message}`, 'red');
48
- process.exit(1);
49
- }
50
- }
51
-
52
- /**
53
- * Recursivamente lista todos os arquivos .md no diretório de skills
54
- */
55
- function getAllSkillFiles(dir, fileList = []) {
56
- const files = readdirSync(dir);
57
-
58
- files.forEach(file => {
59
- const filePath = join(dir, file);
60
- const stat = statSync(filePath);
61
-
62
- if (stat.isDirectory()) {
63
- getAllSkillFiles(filePath, fileList);
64
- } else if (file.endsWith('.md')) {
65
- // Converter para path relativo ao stacks/blazor-azure/
66
- const stackPath = resolveStackPath(frameworkRoot).replace(/\\/g, '/');
67
- const normalizedFile = filePath.replace(/\\/g, '/');
68
- const relativePath = normalizedFile.startsWith(stackPath)
69
- ? normalizedFile.slice(stackPath.length + 1)
70
- : normalizedFile;
71
- fileList.push(relativePath);
72
- }
73
- });
74
-
75
- return fileList;
76
- }
77
-
78
- /**
79
- * Valida agents vs skills
80
- */
81
- function validateAgentsSkills(config, verbose = false) {
82
- const errors = [];
83
- const warnings = [];
84
- const info = [];
85
-
86
- // 1. Coletar todos os agentes e seus skillPaths
87
- const allAgents = [...config.agents.core, ...config.agents.specialists];
88
- const agentSkillPaths = new Set();
89
-
90
- for (const agent of allAgents) {
91
- if (agent.skillPath) {
92
- agentSkillPaths.add(agent.skillPath);
93
-
94
- // Verificar se skill file existe
95
- const skillFilePath = join(__dirname, '../content', agent.skillPath);
96
- if (!existsSync(skillFilePath)) {
97
- errors.push({
98
- type: 'missing-skill',
99
- agent: agent.id,
100
- skillPath: agent.skillPath,
101
- message: `Agent '${agent.id}' references non-existent skill: ${agent.skillPath}`
102
- });
103
- } else if (verbose) {
104
- info.push({
105
- type: 'valid-mapping',
106
- agent: agent.id,
107
- skillPath: agent.skillPath,
108
- message: `✓ ${agent.id} → ${agent.skillPath}`
109
- });
110
- }
111
- } else if (verbose) {
112
- warnings.push({
113
- type: 'no-skill',
114
- agent: agent.id,
115
- message: `Agent '${agent.id}' has no skillPath defined (metadata-only agent)`
116
- });
117
- }
118
- }
119
-
120
- // 2. Verificar skills órfãs (sem agente correspondente)
121
- const allSkillFiles = getAllSkillFiles(SKILLS_BASE_PATH);
122
-
123
- for (const skillFile of allSkillFiles) {
124
- const skillPath = `.claude/skills/${skillFile.replace('.claude/skills/', '')}`;
125
-
126
- if (!agentSkillPaths.has(skillPath)) {
127
- // Orphan skills são OK - podem ser usados manualmente
128
- // Apenas reportar em verbose mode
129
- if (verbose) {
130
- info.push({
131
- type: 'manual-skill',
132
- skillPath: skillPath,
133
- message: `ℹ️ Manual skill: ${skillPath} (no auto-activation)`
134
- });
135
- }
136
- }
137
- }
138
-
139
- return { errors, warnings, info };
140
- }
141
-
142
- /**
143
- * Formata e exibe resultados
144
- */
145
- function displayResults(results, verbose) {
146
- const { errors, warnings, info } = results;
147
-
148
- log('\n╔════════════════════════════════════════════════════════════════╗', 'cyan');
149
- log('║ MORPH-SPEC AGENT-SKILL VALIDATION REPORT ║', 'cyan');
150
- log('╠════════════════════════════════════════════════════════════════╣', 'cyan');
151
-
152
- // Erros
153
- if (errors.length > 0) {
154
- log('║ ERRORS ║', 'red');
155
- log('╠════════════════════════════════════════════════════════════════╣', 'cyan');
156
-
157
- errors.forEach(err => {
158
- log(`║ ❌ ${err.message.substring(0, 61).padEnd(61)}║`, 'red');
159
- });
160
-
161
- log('╠════════════════════════════════════════════════════════════════╣', 'cyan');
162
- }
163
-
164
- // Warnings
165
- if (warnings.length > 0) {
166
- log('║ WARNINGS ║', 'yellow');
167
- log('╠════════════════════════════════════════════════════════════════╣', 'cyan');
168
-
169
- warnings.forEach(warn => {
170
- // Quebrar mensagens longas
171
- const lines = warn.message.match(/.{1,60}/g) || [warn.message];
172
- lines.forEach((line, idx) => {
173
- if (idx === 0) {
174
- log(`║ ⚠️ ${line.padEnd(61)}║`, 'yellow');
175
- } else {
176
- log(`║ ${line.padEnd(61)}║`, 'yellow');
177
- }
178
- });
179
- });
180
-
181
- log('╠════════════════════════════════════════════════════════════════╣', 'cyan');
182
- }
183
-
184
- // Info (verbose mode)
185
- if (verbose && info.length > 0) {
186
- log('║ VALID MAPPINGS ║', 'green');
187
- log('╠════════════════════════════════════════════════════════════════╣', 'cyan');
188
-
189
- info.forEach(item => {
190
- log(`║ ${item.message.substring(0, 62).padEnd(62)}║`, 'gray');
191
- });
192
-
193
- log('╠════════════════════════════════════════════════════════════════╣', 'cyan');
194
- }
195
-
196
- // Summary
197
- log('║ SUMMARY ║', 'cyan');
198
- log('╠════════════════════════════════════════════════════════════════╣', 'cyan');
199
- log(`║ Errors: ${errors.length.toString().padEnd(56)}║`, errors.length > 0 ? 'red' : 'green');
200
- log(`║ Warnings: ${warnings.length.toString().padEnd(54)}║`, warnings.length > 0 ? 'yellow' : 'green');
201
-
202
- if (errors.length === 0 && warnings.length === 0) {
203
- log('║ ║', 'cyan');
204
- log('║ ✅ All agents and skills are properly mapped! ║', 'green');
205
- }
206
-
207
- // Nota sobre manual skills
208
- const manualSkills = info.filter(i => i.type === 'manual-skill').length;
209
- if (manualSkills > 0 && verbose) {
210
- log('║ ║', 'cyan');
211
- log(`║ ℹ️ ${manualSkills} manual-only skills found (use --verbose to see) ║`, 'gray');
212
- log('║ These are extra skills without auto-activation. ║', 'gray');
213
- }
214
-
215
- log('╚════════════════════════════════════════════════════════════════╝\n', 'cyan');
216
- }
217
-
218
- // ============================================================================
219
- // MAIN
220
- // ============================================================================
221
-
222
- function main() {
223
- const args = process.argv.slice(2);
224
- const verbose = args.includes('--verbose') || args.includes('-v');
225
- const hasHelp = args.includes('--help') || args.includes('-h');
226
-
227
- if (hasHelp) {
228
- log('\nMORPH-SPEC Agent-Skill Validator', 'bright');
229
- log('\nUsage:', 'cyan');
230
- log(' node bin/validate-agents-skills.js [options]', 'gray');
231
- log('\nOptions:', 'cyan');
232
- log(' -v, --verbose Show all valid mappings', 'gray');
233
- log(' -h, --help Show this help', 'gray');
234
- log('\nDescription:', 'cyan');
235
- log(' Validates consistency between agents.json and skill files.', 'gray');
236
- log(' - Checks if all skillPaths exist', 'gray');
237
- log(' - Detects orphan skills (no corresponding agent)', 'gray');
238
- log(' - Exit code 0 if valid, 1 if errors found\n', 'gray');
239
- process.exit(0);
240
- }
241
-
242
- // Load config and validate
243
- const config = loadAgentsConfig();
244
- const results = validateAgentsSkills(config, verbose);
245
-
246
- // Display results
247
- displayResults(results, verbose);
248
-
249
- // Exit with appropriate code
250
- if (results.errors.length > 0) {
251
- process.exit(1);
252
- }
253
-
254
- process.exit(0);
255
- }
256
-
257
- main();
@@ -1,70 +0,0 @@
1
- #!/usr/bin/env node
2
- import fs from 'fs';
3
- import path from 'path';
4
- import { fileURLToPath } from 'url';
5
- import Ajv from 'ajv';
6
- import addFormats from 'ajv-formats';
7
- import { resolveAgentsConfigPath, resolveStackPath } from '../src/lib/stack-resolver.js';
8
-
9
- const __filename = fileURLToPath(import.meta.url);
10
- const __dirname = path.dirname(__filename);
11
-
12
- function main() {
13
- const args = process.argv.slice(2);
14
-
15
- if (args.includes('--help') || args.includes('-h')) {
16
- console.log('Usage: node bin/validate-agents.js [agents-file-path]');
17
- process.exit(0);
18
- }
19
-
20
- const defaultPath = resolveAgentsConfigPath(process.cwd());
21
- const agentsPath = args[0] || defaultPath;
22
- const schemaPath = path.join(resolveStackPath(path.join(__dirname, '..')), '.morph/schemas/agent.schema.json');
23
-
24
- if (!fs.existsSync(agentsPath)) {
25
- console.error('Error: agents.json not found at', agentsPath);
26
- process.exit(1);
27
- }
28
-
29
- if (!fs.existsSync(schemaPath)) {
30
- console.error('Error: Schema not found at', schemaPath);
31
- process.exit(1);
32
- }
33
-
34
- try {
35
- const schema = JSON.parse(fs.readFileSync(schemaPath, 'utf-8'));
36
- const agents = JSON.parse(fs.readFileSync(agentsPath, 'utf-8'));
37
-
38
- const ajv = new Ajv({ allErrors: true, verbose: true, strict: true });
39
- addFormats(ajv);
40
-
41
- const validate = ajv.compile(schema);
42
- const valid = validate(agents);
43
-
44
- console.log('\n=== MORPH-SPEC Agent Validator ===\n');
45
- console.log('Version:', agents.version || 'unknown');
46
- console.log('Core Agents:', agents.agents?.core?.length || 0);
47
- console.log('Specialist Agents:', agents.agents?.specialists?.length || 0);
48
-
49
- if (valid) {
50
- console.log('\n✓ Validation PASSED\n');
51
- process.exit(0);
52
- } else {
53
- console.log('\n✗ Validation FAILED\n');
54
- console.log('Errors:');
55
- validate.errors.forEach((err, i) => {
56
- console.log(`${i + 1}. ${err.instancePath || '/'}: ${err.message}`);
57
- if (err.params) {
58
- console.log(' Params:', JSON.stringify(err.params));
59
- }
60
- });
61
- console.log('');
62
- process.exit(1);
63
- }
64
- } catch (error) {
65
- console.error('Error:', error.message);
66
- process.exit(1);
67
- }
68
- }
69
-
70
- main();