@polymorphism-tech/morph-spec 3.1.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 (333) hide show
  1. package/CLAUDE.md +882 -3
  2. package/README.md +79 -18
  3. package/bin/detect-agents.js +1 -1
  4. package/bin/morph-spec.js +163 -26
  5. package/bin/task-manager.cjs +101 -7
  6. package/bin/validate.js +1 -1
  7. package/docs/cli-auto-detection.md +219 -0
  8. package/docs/getting-started.md +0 -5
  9. package/docs/llm-interaction-config.md +735 -0
  10. package/docs/troubleshooting.md +269 -0
  11. package/docs/v3.0/AGENTS.md +521 -0
  12. package/docs/v3.0/ANALYSIS.md +555 -0
  13. package/docs/v3.0/ARCHITECTURE.md +436 -0
  14. package/docs/v3.0/EXECUTION-FLOW.md +1304 -0
  15. package/docs/v3.0/FEATURES.md +688 -0
  16. package/docs/v3.0/README.md +231 -0
  17. package/docs/v3.0/ROADMAP.md +801 -0
  18. package/docs/validation-checklist.md +0 -1
  19. package/package.json +5 -1
  20. package/src/commands/agents/index.js +4 -0
  21. package/src/commands/agents/spawn-team.js +172 -0
  22. package/src/commands/{create-story.js → feature/create-story.js} +357 -354
  23. package/src/commands/feature/index.js +6 -0
  24. package/src/commands/{shard-spec.js → feature/shard-spec.js} +2 -2
  25. package/src/commands/{sprint-status.js → feature/sprint-status.js} +1 -1
  26. package/src/commands/{generate-context.js → generation/generate-context.js} +40 -40
  27. package/src/commands/{generate.js → generation/generate.js} +130 -3
  28. package/src/commands/generation/index.js +5 -0
  29. package/src/commands/index.js +16 -0
  30. package/src/commands/learning/capture-pattern.js +121 -0
  31. package/src/commands/learning/index.js +5 -0
  32. package/src/commands/learning/search-patterns.js +126 -0
  33. package/src/commands/{detect-agents.js → project/detect-agents.js} +178 -178
  34. package/src/commands/project/detect-workflow.js +174 -0
  35. package/src/commands/{detect.js → project/detect.js} +104 -104
  36. package/src/commands/{doctor.js → project/doctor.js} +356 -356
  37. package/src/commands/project/index.js +10 -0
  38. package/src/commands/{init.js → project/init.js} +305 -258
  39. package/src/commands/{sync.js → project/sync.js} +167 -167
  40. package/src/commands/{update.js → project/update.js} +240 -204
  41. package/src/commands/{advance-phase.js → state/advance-phase.js} +416 -266
  42. package/src/commands/state/approve.js +221 -0
  43. package/src/commands/state/index.js +8 -0
  44. package/src/commands/{rollback-phase.js → state/rollback-phase.js} +185 -185
  45. package/src/commands/{state.js → state/state.js} +334 -334
  46. package/src/commands/{validate-phase.js → state/validate-phase.js} +221 -221
  47. package/src/commands/tasks/index.js +4 -0
  48. package/src/commands/{task.js → tasks/task.js} +78 -78
  49. package/src/commands/templates/index.js +8 -0
  50. package/src/commands/templates/template-customize.js +101 -0
  51. package/src/commands/templates/template-list.js +128 -0
  52. package/src/commands/templates/template-render.js +95 -0
  53. package/src/commands/templates/template-show.js +131 -0
  54. package/src/commands/templates/template-validate.js +91 -0
  55. package/src/commands/utils/index.js +7 -0
  56. package/src/commands/utils/migrate-state.js +158 -0
  57. package/src/commands/{session-summary.js → utils/session-summary.js} +291 -291
  58. package/src/commands/{troubleshoot.js → utils/troubleshoot.js} +222 -222
  59. package/src/commands/utils/upgrade.js +346 -0
  60. package/src/commands/{analyze-blazor-concurrency.js → validation/analyze-blazor-concurrency.js} +193 -193
  61. package/src/commands/validation/index.js +8 -0
  62. package/src/commands/{lint-fluent.js → validation/lint-fluent.js} +352 -352
  63. package/src/commands/{validate-blazor-state.js → validation/validate-blazor-state.js} +210 -210
  64. package/src/commands/{validate-blazor.js → validation/validate-blazor.js} +156 -156
  65. package/src/commands/{validate-css.js → validation/validate-css.js} +84 -84
  66. package/src/core/index.js +10 -0
  67. package/src/core/registry/command-registry.js +302 -0
  68. package/src/core/registry/index.js +8 -0
  69. package/src/core/registry/validator-registry.js +204 -0
  70. package/src/core/state/index.js +8 -0
  71. package/src/core/state/phase-state-machine.js +214 -0
  72. package/src/{lib → core/state}/state-manager.js +572 -414
  73. package/src/core/templates/index.js +9 -0
  74. package/src/core/templates/template-data-sources.js +325 -0
  75. package/src/core/templates/template-registry.js +335 -0
  76. package/src/core/templates/template-renderer.js +477 -0
  77. package/src/core/templates/template-validator.js +296 -0
  78. package/src/core/workflows/index.js +7 -0
  79. package/src/core/workflows/workflow-detector.js +354 -0
  80. package/src/generator/config-generator.js +206 -0
  81. package/src/generator/templates/config.json.template +40 -0
  82. package/src/generator/templates/project.md.template +67 -0
  83. package/src/lib/{complexity-analyzer.js → analysis/complexity-analyzer.js} +441 -441
  84. package/src/lib/analysis/index.js +7 -0
  85. package/src/lib/checkpoints/checkpoint-hooks.js +258 -0
  86. package/src/lib/checkpoints/index.js +7 -0
  87. package/src/lib/detectors/config-detector.js +223 -223
  88. package/src/lib/detectors/conversation-analyzer.js +163 -163
  89. package/src/lib/{design-system-detector.js → detectors/design-system-detector.js} +187 -187
  90. package/src/lib/detectors/index.js +87 -84
  91. package/src/lib/detectors/standards-generator.js +275 -275
  92. package/src/lib/detectors/structure-detector.js +245 -245
  93. package/src/lib/{context-generator.js → generators/context-generator.js} +526 -516
  94. package/src/lib/generators/index.js +10 -0
  95. package/src/lib/generators/metadata-extractor.js +387 -0
  96. package/src/lib/{recap-generator.js → generators/recap-generator.js} +205 -205
  97. package/src/lib/learning/index.js +7 -0
  98. package/src/lib/orchestration/index.js +7 -0
  99. package/src/lib/{team-orchestrator.js → orchestration/team-orchestrator.js} +323 -323
  100. package/src/lib/stacks/index.js +7 -0
  101. package/src/lib/{stack-resolver.js → stacks/stack-resolver.js} +180 -148
  102. package/src/lib/standards/index.js +7 -0
  103. package/src/lib/{standards-context-injector.js → standards/standards-context-injector.js} +298 -288
  104. package/src/lib/troubleshooting/index.js +8 -0
  105. package/src/lib/{troubleshoot-grep.js → troubleshooting/troubleshoot-grep.js} +204 -204
  106. package/src/lib/{troubleshoot-index.js → troubleshooting/troubleshoot-index.js} +144 -144
  107. package/src/lib/validators/architecture/architecture-validator.js +387 -0
  108. package/src/lib/validators/architecture/index.js +7 -0
  109. package/src/lib/validators/architecture-validator.js +40 -367
  110. package/src/lib/{blazor-concurrency-analyzer.js → validators/blazor/blazor-concurrency-analyzer.js} +277 -288
  111. package/src/lib/{blazor-state-validator.js → validators/blazor/blazor-state-validator.js} +279 -291
  112. package/src/lib/{blazor-validator.js → validators/blazor/blazor-validator.js} +369 -374
  113. package/src/lib/validators/blazor/index.js +9 -0
  114. package/src/lib/validators/content/content-validator.js +351 -0
  115. package/src/lib/validators/content/index.js +7 -0
  116. package/src/lib/validators/content-validator.js +164 -0
  117. package/src/lib/validators/{contract-compliance-validator.js → contracts/contract-compliance-validator.js} +273 -273
  118. package/src/lib/validators/contracts/index.js +7 -0
  119. package/src/lib/{css-validator.js → validators/css/css-validator.js} +352 -352
  120. package/src/lib/validators/css/index.js +7 -0
  121. package/src/lib/validators/{design-system-validator.js → design-system/design-system-validator.js} +231 -231
  122. package/src/lib/validators/design-system/index.js +7 -0
  123. package/src/lib/validators/package-validator.js +41 -340
  124. package/src/lib/validators/packages/index.js +7 -0
  125. package/src/lib/validators/packages/package-validator.js +360 -0
  126. package/src/lib/validators/shared/index.js +12 -0
  127. package/src/lib/validators/shared/issue-counter.js +18 -0
  128. package/src/lib/validators/shared/result-formatter.js +124 -0
  129. package/src/lib/{spec-validator.js → validators/spec-validator.js} +258 -258
  130. package/src/lib/validators/ui/index.js +7 -0
  131. package/src/lib/validators/ui/ui-contrast-validator.js +422 -0
  132. package/src/lib/validators/ui-contrast-validator.js +31 -409
  133. package/src/lib/{validation-runner.js → validators/validation-runner.js} +286 -284
  134. package/src/llm/analyzer.js +215 -0
  135. package/src/llm/environment-detector.js +43 -0
  136. package/src/llm/few-shot-examples.js +216 -0
  137. package/src/llm/project-config-schema.json +188 -0
  138. package/src/llm/prompt-builder.js +96 -0
  139. package/src/orchestrator.js +206 -0
  140. package/src/sanitizer/context-sanitizer.js +221 -0
  141. package/src/sanitizer/patterns.js +163 -0
  142. package/src/scanner/project-scanner.js +242 -0
  143. package/src/ui/diff-display.js +91 -0
  144. package/src/ui/interactive-wizard.js +96 -0
  145. package/src/ui/user-review.js +211 -0
  146. package/src/ui/wizard-questions.js +188 -0
  147. package/src/utils/color-utils.js +70 -0
  148. package/src/utils/file-copier.js +188 -189
  149. package/src/utils/process-handler.js +97 -0
  150. package/src/writer/file-writer.js +86 -0
  151. package/stacks/blazor-azure/.claude/skills/level-2-domains/ai-agents/ai-system-architect.md +3 -3
  152. package/stacks/blazor-azure/.claude/skills/level-2-domains/backend/api-designer.md +59 -0
  153. package/stacks/blazor-azure/.claude/skills/level-2-domains/backend/dotnet-senior.md +45 -255
  154. package/stacks/blazor-azure/.claude/skills/level-2-domains/backend/ef-modeler.md +33 -88
  155. package/stacks/blazor-azure/.claude/skills/level-2-domains/backend/ms-agent-expert.md +25 -89
  156. package/stacks/blazor-azure/.claude/skills/level-2-domains/integrations/hangfire-orchestrator.md +64 -0
  157. package/stacks/blazor-azure/.morph/config/agents.json +879 -764
  158. package/stacks/blazor-azure/.morph/hooks/{pre-commit-tests.sh → pre-commit/tests-csharp.sh} +3 -2
  159. package/stacks/blazor-azure/.morph/templates/.gitkeep +0 -0
  160. package/stacks/blazor-azure/.morph/templates/infrastructure/github/workflows/cd-prod.yml.hbs +41 -0
  161. package/stacks/blazor-azure/.morph/templates/infrastructure/github/workflows/cd-staging.yml.hbs +24 -0
  162. package/stacks/blazor-azure/.morph/templates/infrastructure/github/workflows/ci-build.yml.hbs +23 -0
  163. package/stacks/nextjs-supabase/.claude/commands/morph-apply.md +221 -0
  164. package/stacks/nextjs-supabase/.claude/commands/morph-archive.md +79 -0
  165. package/stacks/nextjs-supabase/.claude/commands/morph-deploy.md +529 -0
  166. package/stacks/nextjs-supabase/.claude/commands/morph-infra.md +209 -0
  167. package/stacks/nextjs-supabase/.claude/commands/morph-preflight.md +227 -0
  168. package/stacks/nextjs-supabase/.claude/commands/morph-proposal.md +122 -0
  169. package/stacks/nextjs-supabase/.claude/commands/morph-status.md +86 -0
  170. package/stacks/nextjs-supabase/.claude/commands/morph-troubleshoot.md +122 -0
  171. package/stacks/nextjs-supabase/.claude/settings.local.json +6 -0
  172. package/stacks/nextjs-supabase/.claude/skills/level-2-domains/integrations/supabase-expert.md +30 -150
  173. package/stacks/nextjs-supabase/.morph/config/agents.json +345 -345
  174. package/stacks/nextjs-supabase/.morph/hooks/pre-commit/tests-typescript.sh +61 -0
  175. package/stacks/nextjs-supabase/.morph/templates/.gitkeep +0 -0
  176. package/stacks/nextjs-supabase/.morph/templates/infrastructure/github/workflows/cd-prod.yml.hbs +22 -0
  177. package/stacks/nextjs-supabase/.morph/templates/infrastructure/github/workflows/cd-staging.yml.hbs +22 -0
  178. package/stacks/nextjs-supabase/.morph/templates/infrastructure/github/workflows/ci-build.yml.hbs +35 -0
  179. package/stacks/nextjs-supabase/README.md +6 -15
  180. package/bin/render-template.js +0 -303
  181. package/bin/semantic-detect-agents.js +0 -247
  182. package/bin/validate-agents-skills.js +0 -257
  183. package/bin/validate-agents.js +0 -70
  184. package/bin/validate-phase.js +0 -263
  185. package/docs/examples.md +0 -328
  186. package/scripts/reorganize-skills.cjs +0 -175
  187. package/scripts/validate-agents-structure.cjs +0 -52
  188. package/scripts/validate-skills.cjs +0 -180
  189. package/src/commands/deploy.js +0 -780
  190. package/src/lib/continuous-validator.js +0 -421
  191. package/src/lib/decision-constraint-loader.js +0 -109
  192. package/src/lib/design-system-scaffolder.js +0 -299
  193. package/src/lib/hook-executor.js +0 -257
  194. package/src/lib/mockup-generator.js +0 -366
  195. package/src/lib/ui-detector.js +0 -350
  196. package/stacks/blazor-azure/.azure/README.md +0 -293
  197. package/stacks/blazor-azure/.azure/docs/azure-devops-setup.md +0 -454
  198. package/stacks/blazor-azure/.azure/docs/branch-strategy.md +0 -398
  199. package/stacks/blazor-azure/.azure/docs/local-development.md +0 -515
  200. package/stacks/blazor-azure/.azure/pipelines/pipeline-variables.yml +0 -34
  201. package/stacks/blazor-azure/.azure/pipelines/prod-pipeline.yml +0 -319
  202. package/stacks/blazor-azure/.azure/pipelines/staging-pipeline.yml +0 -234
  203. package/stacks/blazor-azure/.azure/pipelines/templates/build-dotnet.yml +0 -75
  204. package/stacks/blazor-azure/.azure/pipelines/templates/deploy-app-service.yml +0 -94
  205. package/stacks/blazor-azure/.azure/pipelines/templates/deploy-container-app.yml +0 -120
  206. package/stacks/blazor-azure/.azure/pipelines/templates/infra-deploy.yml +0 -90
  207. package/stacks/blazor-azure/.claude/settings.local.json +0 -15
  208. package/stacks/blazor-azure/.morph/docs/STORY-DRIVEN-DEVELOPMENT.md +0 -392
  209. package/stacks/blazor-azure/.morph/docs/workflows/design-impl.md +0 -37
  210. package/stacks/blazor-azure/.morph/docs/workflows/enforcement-pipeline.md +0 -668
  211. package/stacks/blazor-azure/.morph/docs/workflows/fast-track.md +0 -29
  212. package/stacks/blazor-azure/.morph/docs/workflows/full-morph.md +0 -76
  213. package/stacks/blazor-azure/.morph/docs/workflows/standard.md +0 -44
  214. package/stacks/blazor-azure/.morph/docs/workflows/ui-refresh.md +0 -39
  215. package/stacks/blazor-azure/.morph/examples/api-nextjs/README.md +0 -241
  216. package/stacks/blazor-azure/.morph/examples/api-nextjs/contracts.ts +0 -307
  217. package/stacks/blazor-azure/.morph/examples/api-nextjs/spec.md +0 -399
  218. package/stacks/blazor-azure/.morph/examples/api-nextjs/tasks.md +0 -168
  219. package/stacks/blazor-azure/.morph/examples/micro-saas/README.md +0 -125
  220. package/stacks/blazor-azure/.morph/examples/micro-saas/contracts.cs +0 -358
  221. package/stacks/blazor-azure/.morph/examples/micro-saas/decisions.md +0 -246
  222. package/stacks/blazor-azure/.morph/examples/micro-saas/spec.md +0 -236
  223. package/stacks/blazor-azure/.morph/examples/micro-saas/tasks.md +0 -150
  224. package/stacks/blazor-azure/.morph/examples/multi-agent/README.md +0 -309
  225. package/stacks/blazor-azure/.morph/examples/multi-agent/contracts.cs +0 -433
  226. package/stacks/blazor-azure/.morph/examples/multi-agent/spec.md +0 -479
  227. package/stacks/blazor-azure/.morph/examples/multi-agent/tasks.md +0 -185
  228. package/stacks/blazor-azure/.morph/examples/scheduled-reports/decisions.md +0 -158
  229. package/stacks/blazor-azure/.morph/examples/scheduled-reports/proposal.md +0 -95
  230. package/stacks/blazor-azure/.morph/examples/scheduled-reports/spec.md +0 -267
  231. package/stacks/blazor-azure/.morph/examples/state-v3.json +0 -188
  232. package/stacks/blazor-azure/.morph/hooks/README.md +0 -348
  233. package/stacks/blazor-azure/.morph/hooks/pre-commit-agents.sh +0 -24
  234. package/stacks/blazor-azure/.morph/hooks/pre-commit-all.sh +0 -48
  235. package/stacks/blazor-azure/.morph/hooks/pre-commit-specs.sh +0 -49
  236. package/stacks/blazor-azure/.morph/hooks/task-completed.js +0 -73
  237. package/stacks/blazor-azure/.morph/hooks/teammate-idle.js +0 -68
  238. package/stacks/blazor-azure/.morph/standards/agent-framework-blazor-ui.md +0 -359
  239. package/stacks/blazor-azure/.morph/standards/agent-framework-production.md +0 -410
  240. package/stacks/blazor-azure/.morph/standards/agent-framework-setup.md +0 -413
  241. package/stacks/blazor-azure/.morph/standards/agent-framework-workflows.md +0 -349
  242. package/stacks/blazor-azure/.morph/standards/agent-teams-workflow.md +0 -474
  243. package/stacks/blazor-azure/.morph/standards/architecture.md +0 -325
  244. package/stacks/blazor-azure/.morph/standards/azure.md +0 -605
  245. package/stacks/blazor-azure/.morph/standards/coding.md +0 -377
  246. package/stacks/blazor-azure/.morph/standards/dotnet10-migration.md +0 -520
  247. package/stacks/blazor-azure/.morph/standards/fluent-ui-setup.md +0 -590
  248. package/stacks/blazor-azure/.morph/standards/migration-guide.md +0 -514
  249. package/stacks/blazor-azure/.morph/standards/passkeys-auth.md +0 -423
  250. package/stacks/blazor-azure/.morph/standards/vector-search-rag.md +0 -536
  251. package/stacks/blazor-azure/.morph/templates/CONTEXT-FEATURE.md +0 -276
  252. package/stacks/blazor-azure/.morph/templates/CONTEXT.md +0 -170
  253. package/stacks/blazor-azure/.morph/templates/FluentDesignTheme.cs +0 -149
  254. package/stacks/blazor-azure/.morph/templates/MudTheme.cs +0 -281
  255. package/stacks/blazor-azure/.morph/templates/agent.cs +0 -163
  256. package/stacks/blazor-azure/.morph/templates/clarify-questions.md +0 -159
  257. package/stacks/blazor-azure/.morph/templates/component.razor +0 -239
  258. package/stacks/blazor-azure/.morph/templates/contracts/Commands.cs +0 -74
  259. package/stacks/blazor-azure/.morph/templates/contracts/Entities.cs +0 -25
  260. package/stacks/blazor-azure/.morph/templates/contracts/Queries.cs +0 -74
  261. package/stacks/blazor-azure/.morph/templates/contracts/README.md +0 -74
  262. package/stacks/blazor-azure/.morph/templates/contracts.cs +0 -217
  263. package/stacks/blazor-azure/.morph/templates/decisions.md +0 -123
  264. package/stacks/blazor-azure/.morph/templates/design-system.css +0 -226
  265. package/stacks/blazor-azure/.morph/templates/infra/.dockerignore.example +0 -89
  266. package/stacks/blazor-azure/.morph/templates/infra/Dockerfile.example +0 -82
  267. package/stacks/blazor-azure/.morph/templates/infra/README.md +0 -286
  268. package/stacks/blazor-azure/.morph/templates/infra/app-insights.bicep +0 -63
  269. package/stacks/blazor-azure/.morph/templates/infra/app-service.bicep +0 -164
  270. package/stacks/blazor-azure/.morph/templates/infra/azure-pipelines-deploy.yml +0 -480
  271. package/stacks/blazor-azure/.morph/templates/infra/container-app-env.bicep +0 -49
  272. package/stacks/blazor-azure/.morph/templates/infra/container-app.bicep +0 -156
  273. package/stacks/blazor-azure/.morph/templates/infra/deploy-checklist.md +0 -426
  274. package/stacks/blazor-azure/.morph/templates/infra/deploy.ps1 +0 -229
  275. package/stacks/blazor-azure/.morph/templates/infra/deploy.sh +0 -208
  276. package/stacks/blazor-azure/.morph/templates/infra/key-vault.bicep +0 -91
  277. package/stacks/blazor-azure/.morph/templates/infra/main.bicep +0 -189
  278. package/stacks/blazor-azure/.morph/templates/infra/parameters.dev.json +0 -29
  279. package/stacks/blazor-azure/.morph/templates/infra/parameters.prod.json +0 -29
  280. package/stacks/blazor-azure/.morph/templates/infra/parameters.staging.json +0 -29
  281. package/stacks/blazor-azure/.morph/templates/infra/sql-database.bicep +0 -103
  282. package/stacks/blazor-azure/.morph/templates/infra/storage.bicep +0 -106
  283. package/stacks/blazor-azure/.morph/templates/integrations/asaas-client.cs +0 -387
  284. package/stacks/blazor-azure/.morph/templates/integrations/asaas-webhook.cs +0 -351
  285. package/stacks/blazor-azure/.morph/templates/integrations/azure-identity-config.cs +0 -288
  286. package/stacks/blazor-azure/.morph/templates/integrations/clerk-config.cs +0 -258
  287. package/stacks/blazor-azure/.morph/templates/job.cs +0 -171
  288. package/stacks/blazor-azure/.morph/templates/migration.cs +0 -83
  289. package/stacks/blazor-azure/.morph/templates/proposal.md +0 -141
  290. package/stacks/blazor-azure/.morph/templates/recap.md +0 -94
  291. package/stacks/blazor-azure/.morph/templates/repository.cs +0 -141
  292. package/stacks/blazor-azure/.morph/templates/saas/subscription.cs +0 -347
  293. package/stacks/blazor-azure/.morph/templates/saas/tenant.cs +0 -338
  294. package/stacks/blazor-azure/.morph/templates/service.cs +0 -139
  295. package/stacks/blazor-azure/.morph/templates/simulation.md +0 -353
  296. package/stacks/blazor-azure/.morph/templates/spec.md +0 -149
  297. package/stacks/blazor-azure/.morph/templates/sprint-status.yaml +0 -68
  298. package/stacks/blazor-azure/.morph/templates/state.template.json +0 -222
  299. package/stacks/blazor-azure/.morph/templates/story.md +0 -143
  300. package/stacks/blazor-azure/.morph/templates/tasks.md +0 -257
  301. package/stacks/blazor-azure/.morph/templates/test.cs +0 -239
  302. package/stacks/blazor-azure/.morph/templates/ui-components.md +0 -362
  303. package/stacks/blazor-azure/.morph/templates/ui-design-system.md +0 -286
  304. package/stacks/blazor-azure/.morph/templates/ui-flows.md +0 -336
  305. package/stacks/blazor-azure/.morph/templates/ui-mockups.md +0 -133
  306. package/stacks/nextjs-supabase/.morph/docs/easypanel-setup.md +0 -169
  307. package/stacks/nextjs-supabase/.morph/docs/supabase-mcp-setup.md +0 -247
  308. package/stacks/nextjs-supabase/.morph/examples/crud-nextjs-supabase/README.md +0 -697
  309. package/stacks/nextjs-supabase/.morph/examples/crud-nextjs-supabase/spec.md +0 -85
  310. package/stacks/nextjs-supabase/.morph/examples/crud-nextjs-supabase/tasks.md +0 -86
  311. package/stacks/nextjs-supabase/.morph/examples/saas-nextjs-supabase/README.md +0 -498
  312. package/stacks/nextjs-supabase/.morph/examples/saas-nextjs-supabase/decisions.md +0 -121
  313. package/stacks/nextjs-supabase/.morph/examples/saas-nextjs-supabase/spec.md +0 -138
  314. package/stacks/nextjs-supabase/.morph/examples/saas-nextjs-supabase/tasks.md +0 -162
  315. package/stacks/nextjs-supabase/.morph/standards/easypanel-deploy.md +0 -191
  316. package/stacks/nextjs-supabase/.morph/standards/nextjs-patterns.md +0 -193
  317. package/stacks/nextjs-supabase/.morph/standards/supabase-auth.md +0 -171
  318. package/stacks/nextjs-supabase/.morph/standards/supabase-pgvector.md +0 -164
  319. package/stacks/nextjs-supabase/.morph/standards/supabase-rls.md +0 -179
  320. package/stacks/nextjs-supabase/.morph/standards/supabase-storage.md +0 -148
  321. package/stacks/nextjs-supabase/.morph/templates/contracts.cs +0 -173
  322. package/stacks/nextjs-supabase/.morph/templates/contracts.ts +0 -168
  323. package/stacks/nextjs-supabase/.morph/templates/decisions.md +0 -115
  324. package/stacks/nextjs-supabase/.morph/templates/dockerfile-api.dockerfile +0 -38
  325. package/stacks/nextjs-supabase/.morph/templates/dockerfile-web.dockerfile +0 -48
  326. package/stacks/nextjs-supabase/.morph/templates/proposal.md +0 -145
  327. package/stacks/nextjs-supabase/.morph/templates/recap.md +0 -134
  328. package/stacks/nextjs-supabase/.morph/templates/rls-policy.sql +0 -57
  329. package/stacks/nextjs-supabase/.morph/templates/spec.md +0 -231
  330. package/stacks/nextjs-supabase/.morph/templates/supabase-migration.sql +0 -100
  331. package/stacks/nextjs-supabase/.morph/templates/tasks.md +0 -257
  332. /package/src/lib/{design-system-generator.js → generators/design-system-generator.js} +0 -0
  333. /package/src/lib/{learning-system.js → learning/learning-system.js} +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();