@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.
- package/CLAUDE.md +882 -3
- package/README.md +79 -18
- package/bin/detect-agents.js +1 -1
- package/bin/morph-spec.js +163 -26
- package/bin/task-manager.cjs +101 -7
- package/bin/validate.js +1 -1
- package/docs/cli-auto-detection.md +219 -0
- package/docs/getting-started.md +0 -5
- package/docs/llm-interaction-config.md +735 -0
- package/docs/troubleshooting.md +269 -0
- package/docs/v3.0/AGENTS.md +521 -0
- package/docs/v3.0/ANALYSIS.md +555 -0
- package/docs/v3.0/ARCHITECTURE.md +436 -0
- package/docs/v3.0/EXECUTION-FLOW.md +1304 -0
- package/docs/v3.0/FEATURES.md +688 -0
- package/docs/v3.0/README.md +231 -0
- package/docs/v3.0/ROADMAP.md +801 -0
- package/docs/validation-checklist.md +0 -1
- package/package.json +5 -1
- package/src/commands/agents/index.js +4 -0
- package/src/commands/agents/spawn-team.js +172 -0
- package/src/commands/{create-story.js → feature/create-story.js} +357 -354
- package/src/commands/feature/index.js +6 -0
- package/src/commands/{shard-spec.js → feature/shard-spec.js} +2 -2
- package/src/commands/{sprint-status.js → feature/sprint-status.js} +1 -1
- package/src/commands/{generate-context.js → generation/generate-context.js} +40 -40
- package/src/commands/{generate.js → generation/generate.js} +130 -3
- package/src/commands/generation/index.js +5 -0
- package/src/commands/index.js +16 -0
- package/src/commands/learning/capture-pattern.js +121 -0
- package/src/commands/learning/index.js +5 -0
- package/src/commands/learning/search-patterns.js +126 -0
- package/src/commands/{detect-agents.js → project/detect-agents.js} +178 -178
- package/src/commands/project/detect-workflow.js +174 -0
- package/src/commands/{detect.js → project/detect.js} +104 -104
- package/src/commands/{doctor.js → project/doctor.js} +356 -356
- package/src/commands/project/index.js +10 -0
- package/src/commands/{init.js → project/init.js} +305 -258
- package/src/commands/{sync.js → project/sync.js} +167 -167
- package/src/commands/{update.js → project/update.js} +240 -204
- package/src/commands/{advance-phase.js → state/advance-phase.js} +416 -266
- package/src/commands/state/approve.js +221 -0
- package/src/commands/state/index.js +8 -0
- package/src/commands/{rollback-phase.js → state/rollback-phase.js} +185 -185
- package/src/commands/{state.js → state/state.js} +334 -334
- package/src/commands/{validate-phase.js → state/validate-phase.js} +221 -221
- package/src/commands/tasks/index.js +4 -0
- package/src/commands/{task.js → tasks/task.js} +78 -78
- package/src/commands/templates/index.js +8 -0
- package/src/commands/templates/template-customize.js +101 -0
- package/src/commands/templates/template-list.js +128 -0
- package/src/commands/templates/template-render.js +95 -0
- package/src/commands/templates/template-show.js +131 -0
- package/src/commands/templates/template-validate.js +91 -0
- package/src/commands/utils/index.js +7 -0
- package/src/commands/utils/migrate-state.js +158 -0
- package/src/commands/{session-summary.js → utils/session-summary.js} +291 -291
- package/src/commands/{troubleshoot.js → utils/troubleshoot.js} +222 -222
- package/src/commands/utils/upgrade.js +346 -0
- package/src/commands/{analyze-blazor-concurrency.js → validation/analyze-blazor-concurrency.js} +193 -193
- package/src/commands/validation/index.js +8 -0
- package/src/commands/{lint-fluent.js → validation/lint-fluent.js} +352 -352
- package/src/commands/{validate-blazor-state.js → validation/validate-blazor-state.js} +210 -210
- package/src/commands/{validate-blazor.js → validation/validate-blazor.js} +156 -156
- package/src/commands/{validate-css.js → validation/validate-css.js} +84 -84
- package/src/core/index.js +10 -0
- package/src/core/registry/command-registry.js +302 -0
- package/src/core/registry/index.js +8 -0
- package/src/core/registry/validator-registry.js +204 -0
- package/src/core/state/index.js +8 -0
- package/src/core/state/phase-state-machine.js +214 -0
- package/src/{lib → core/state}/state-manager.js +572 -414
- package/src/core/templates/index.js +9 -0
- package/src/core/templates/template-data-sources.js +325 -0
- package/src/core/templates/template-registry.js +335 -0
- package/src/core/templates/template-renderer.js +477 -0
- package/src/core/templates/template-validator.js +296 -0
- package/src/core/workflows/index.js +7 -0
- package/src/core/workflows/workflow-detector.js +354 -0
- package/src/generator/config-generator.js +206 -0
- package/src/generator/templates/config.json.template +40 -0
- package/src/generator/templates/project.md.template +67 -0
- package/src/lib/{complexity-analyzer.js → analysis/complexity-analyzer.js} +441 -441
- package/src/lib/analysis/index.js +7 -0
- package/src/lib/checkpoints/checkpoint-hooks.js +258 -0
- package/src/lib/checkpoints/index.js +7 -0
- package/src/lib/detectors/config-detector.js +223 -223
- package/src/lib/detectors/conversation-analyzer.js +163 -163
- package/src/lib/{design-system-detector.js → detectors/design-system-detector.js} +187 -187
- package/src/lib/detectors/index.js +87 -84
- package/src/lib/detectors/standards-generator.js +275 -275
- package/src/lib/detectors/structure-detector.js +245 -245
- package/src/lib/{context-generator.js → generators/context-generator.js} +526 -516
- package/src/lib/generators/index.js +10 -0
- package/src/lib/generators/metadata-extractor.js +387 -0
- package/src/lib/{recap-generator.js → generators/recap-generator.js} +205 -205
- package/src/lib/learning/index.js +7 -0
- package/src/lib/orchestration/index.js +7 -0
- package/src/lib/{team-orchestrator.js → orchestration/team-orchestrator.js} +323 -323
- package/src/lib/stacks/index.js +7 -0
- package/src/lib/{stack-resolver.js → stacks/stack-resolver.js} +180 -148
- package/src/lib/standards/index.js +7 -0
- package/src/lib/{standards-context-injector.js → standards/standards-context-injector.js} +298 -288
- package/src/lib/troubleshooting/index.js +8 -0
- package/src/lib/{troubleshoot-grep.js → troubleshooting/troubleshoot-grep.js} +204 -204
- package/src/lib/{troubleshoot-index.js → troubleshooting/troubleshoot-index.js} +144 -144
- package/src/lib/validators/architecture/architecture-validator.js +387 -0
- package/src/lib/validators/architecture/index.js +7 -0
- package/src/lib/validators/architecture-validator.js +40 -367
- package/src/lib/{blazor-concurrency-analyzer.js → validators/blazor/blazor-concurrency-analyzer.js} +277 -288
- package/src/lib/{blazor-state-validator.js → validators/blazor/blazor-state-validator.js} +279 -291
- package/src/lib/{blazor-validator.js → validators/blazor/blazor-validator.js} +369 -374
- package/src/lib/validators/blazor/index.js +9 -0
- package/src/lib/validators/content/content-validator.js +351 -0
- package/src/lib/validators/content/index.js +7 -0
- package/src/lib/validators/content-validator.js +164 -0
- package/src/lib/validators/{contract-compliance-validator.js → contracts/contract-compliance-validator.js} +273 -273
- package/src/lib/validators/contracts/index.js +7 -0
- package/src/lib/{css-validator.js → validators/css/css-validator.js} +352 -352
- package/src/lib/validators/css/index.js +7 -0
- package/src/lib/validators/{design-system-validator.js → design-system/design-system-validator.js} +231 -231
- package/src/lib/validators/design-system/index.js +7 -0
- package/src/lib/validators/package-validator.js +41 -340
- package/src/lib/validators/packages/index.js +7 -0
- package/src/lib/validators/packages/package-validator.js +360 -0
- package/src/lib/validators/shared/index.js +12 -0
- package/src/lib/validators/shared/issue-counter.js +18 -0
- package/src/lib/validators/shared/result-formatter.js +124 -0
- package/src/lib/{spec-validator.js → validators/spec-validator.js} +258 -258
- package/src/lib/validators/ui/index.js +7 -0
- package/src/lib/validators/ui/ui-contrast-validator.js +422 -0
- package/src/lib/validators/ui-contrast-validator.js +31 -409
- package/src/lib/{validation-runner.js → validators/validation-runner.js} +286 -284
- package/src/llm/analyzer.js +215 -0
- package/src/llm/environment-detector.js +43 -0
- package/src/llm/few-shot-examples.js +216 -0
- package/src/llm/project-config-schema.json +188 -0
- package/src/llm/prompt-builder.js +96 -0
- package/src/orchestrator.js +206 -0
- package/src/sanitizer/context-sanitizer.js +221 -0
- package/src/sanitizer/patterns.js +163 -0
- package/src/scanner/project-scanner.js +242 -0
- package/src/ui/diff-display.js +91 -0
- package/src/ui/interactive-wizard.js +96 -0
- package/src/ui/user-review.js +211 -0
- package/src/ui/wizard-questions.js +188 -0
- package/src/utils/color-utils.js +70 -0
- package/src/utils/file-copier.js +188 -189
- package/src/utils/process-handler.js +97 -0
- package/src/writer/file-writer.js +86 -0
- package/stacks/blazor-azure/.claude/skills/level-2-domains/ai-agents/ai-system-architect.md +3 -3
- package/stacks/blazor-azure/.claude/skills/level-2-domains/backend/api-designer.md +59 -0
- package/stacks/blazor-azure/.claude/skills/level-2-domains/backend/dotnet-senior.md +45 -255
- package/stacks/blazor-azure/.claude/skills/level-2-domains/backend/ef-modeler.md +33 -88
- package/stacks/blazor-azure/.claude/skills/level-2-domains/backend/ms-agent-expert.md +25 -89
- package/stacks/blazor-azure/.claude/skills/level-2-domains/integrations/hangfire-orchestrator.md +64 -0
- package/stacks/blazor-azure/.morph/config/agents.json +879 -764
- package/stacks/blazor-azure/.morph/hooks/{pre-commit-tests.sh → pre-commit/tests-csharp.sh} +3 -2
- package/stacks/blazor-azure/.morph/templates/.gitkeep +0 -0
- package/stacks/blazor-azure/.morph/templates/infrastructure/github/workflows/cd-prod.yml.hbs +41 -0
- package/stacks/blazor-azure/.morph/templates/infrastructure/github/workflows/cd-staging.yml.hbs +24 -0
- package/stacks/blazor-azure/.morph/templates/infrastructure/github/workflows/ci-build.yml.hbs +23 -0
- package/stacks/nextjs-supabase/.claude/commands/morph-apply.md +221 -0
- package/stacks/nextjs-supabase/.claude/commands/morph-archive.md +79 -0
- package/stacks/nextjs-supabase/.claude/commands/morph-deploy.md +529 -0
- package/stacks/nextjs-supabase/.claude/commands/morph-infra.md +209 -0
- package/stacks/nextjs-supabase/.claude/commands/morph-preflight.md +227 -0
- package/stacks/nextjs-supabase/.claude/commands/morph-proposal.md +122 -0
- package/stacks/nextjs-supabase/.claude/commands/morph-status.md +86 -0
- package/stacks/nextjs-supabase/.claude/commands/morph-troubleshoot.md +122 -0
- package/stacks/nextjs-supabase/.claude/settings.local.json +6 -0
- package/stacks/nextjs-supabase/.claude/skills/level-2-domains/integrations/supabase-expert.md +30 -150
- package/stacks/nextjs-supabase/.morph/config/agents.json +345 -345
- package/stacks/nextjs-supabase/.morph/hooks/pre-commit/tests-typescript.sh +61 -0
- package/stacks/nextjs-supabase/.morph/templates/.gitkeep +0 -0
- package/stacks/nextjs-supabase/.morph/templates/infrastructure/github/workflows/cd-prod.yml.hbs +22 -0
- package/stacks/nextjs-supabase/.morph/templates/infrastructure/github/workflows/cd-staging.yml.hbs +22 -0
- package/stacks/nextjs-supabase/.morph/templates/infrastructure/github/workflows/ci-build.yml.hbs +35 -0
- package/stacks/nextjs-supabase/README.md +6 -15
- package/bin/render-template.js +0 -303
- package/bin/semantic-detect-agents.js +0 -247
- package/bin/validate-agents-skills.js +0 -257
- package/bin/validate-agents.js +0 -70
- package/bin/validate-phase.js +0 -263
- package/docs/examples.md +0 -328
- package/scripts/reorganize-skills.cjs +0 -175
- package/scripts/validate-agents-structure.cjs +0 -52
- package/scripts/validate-skills.cjs +0 -180
- package/src/commands/deploy.js +0 -780
- package/src/lib/continuous-validator.js +0 -421
- package/src/lib/decision-constraint-loader.js +0 -109
- package/src/lib/design-system-scaffolder.js +0 -299
- package/src/lib/hook-executor.js +0 -257
- package/src/lib/mockup-generator.js +0 -366
- package/src/lib/ui-detector.js +0 -350
- package/stacks/blazor-azure/.azure/README.md +0 -293
- package/stacks/blazor-azure/.azure/docs/azure-devops-setup.md +0 -454
- package/stacks/blazor-azure/.azure/docs/branch-strategy.md +0 -398
- package/stacks/blazor-azure/.azure/docs/local-development.md +0 -515
- package/stacks/blazor-azure/.azure/pipelines/pipeline-variables.yml +0 -34
- package/stacks/blazor-azure/.azure/pipelines/prod-pipeline.yml +0 -319
- package/stacks/blazor-azure/.azure/pipelines/staging-pipeline.yml +0 -234
- package/stacks/blazor-azure/.azure/pipelines/templates/build-dotnet.yml +0 -75
- package/stacks/blazor-azure/.azure/pipelines/templates/deploy-app-service.yml +0 -94
- package/stacks/blazor-azure/.azure/pipelines/templates/deploy-container-app.yml +0 -120
- package/stacks/blazor-azure/.azure/pipelines/templates/infra-deploy.yml +0 -90
- package/stacks/blazor-azure/.claude/settings.local.json +0 -15
- package/stacks/blazor-azure/.morph/docs/STORY-DRIVEN-DEVELOPMENT.md +0 -392
- package/stacks/blazor-azure/.morph/docs/workflows/design-impl.md +0 -37
- package/stacks/blazor-azure/.morph/docs/workflows/enforcement-pipeline.md +0 -668
- package/stacks/blazor-azure/.morph/docs/workflows/fast-track.md +0 -29
- package/stacks/blazor-azure/.morph/docs/workflows/full-morph.md +0 -76
- package/stacks/blazor-azure/.morph/docs/workflows/standard.md +0 -44
- package/stacks/blazor-azure/.morph/docs/workflows/ui-refresh.md +0 -39
- package/stacks/blazor-azure/.morph/examples/api-nextjs/README.md +0 -241
- package/stacks/blazor-azure/.morph/examples/api-nextjs/contracts.ts +0 -307
- package/stacks/blazor-azure/.morph/examples/api-nextjs/spec.md +0 -399
- package/stacks/blazor-azure/.morph/examples/api-nextjs/tasks.md +0 -168
- package/stacks/blazor-azure/.morph/examples/micro-saas/README.md +0 -125
- package/stacks/blazor-azure/.morph/examples/micro-saas/contracts.cs +0 -358
- package/stacks/blazor-azure/.morph/examples/micro-saas/decisions.md +0 -246
- package/stacks/blazor-azure/.morph/examples/micro-saas/spec.md +0 -236
- package/stacks/blazor-azure/.morph/examples/micro-saas/tasks.md +0 -150
- package/stacks/blazor-azure/.morph/examples/multi-agent/README.md +0 -309
- package/stacks/blazor-azure/.morph/examples/multi-agent/contracts.cs +0 -433
- package/stacks/blazor-azure/.morph/examples/multi-agent/spec.md +0 -479
- package/stacks/blazor-azure/.morph/examples/multi-agent/tasks.md +0 -185
- package/stacks/blazor-azure/.morph/examples/scheduled-reports/decisions.md +0 -158
- package/stacks/blazor-azure/.morph/examples/scheduled-reports/proposal.md +0 -95
- package/stacks/blazor-azure/.morph/examples/scheduled-reports/spec.md +0 -267
- package/stacks/blazor-azure/.morph/examples/state-v3.json +0 -188
- package/stacks/blazor-azure/.morph/hooks/README.md +0 -348
- package/stacks/blazor-azure/.morph/hooks/pre-commit-agents.sh +0 -24
- package/stacks/blazor-azure/.morph/hooks/pre-commit-all.sh +0 -48
- package/stacks/blazor-azure/.morph/hooks/pre-commit-specs.sh +0 -49
- package/stacks/blazor-azure/.morph/hooks/task-completed.js +0 -73
- package/stacks/blazor-azure/.morph/hooks/teammate-idle.js +0 -68
- package/stacks/blazor-azure/.morph/standards/agent-framework-blazor-ui.md +0 -359
- package/stacks/blazor-azure/.morph/standards/agent-framework-production.md +0 -410
- package/stacks/blazor-azure/.morph/standards/agent-framework-setup.md +0 -413
- package/stacks/blazor-azure/.morph/standards/agent-framework-workflows.md +0 -349
- package/stacks/blazor-azure/.morph/standards/agent-teams-workflow.md +0 -474
- package/stacks/blazor-azure/.morph/standards/architecture.md +0 -325
- package/stacks/blazor-azure/.morph/standards/azure.md +0 -605
- package/stacks/blazor-azure/.morph/standards/coding.md +0 -377
- package/stacks/blazor-azure/.morph/standards/dotnet10-migration.md +0 -520
- package/stacks/blazor-azure/.morph/standards/fluent-ui-setup.md +0 -590
- package/stacks/blazor-azure/.morph/standards/migration-guide.md +0 -514
- package/stacks/blazor-azure/.morph/standards/passkeys-auth.md +0 -423
- package/stacks/blazor-azure/.morph/standards/vector-search-rag.md +0 -536
- package/stacks/blazor-azure/.morph/templates/CONTEXT-FEATURE.md +0 -276
- package/stacks/blazor-azure/.morph/templates/CONTEXT.md +0 -170
- package/stacks/blazor-azure/.morph/templates/FluentDesignTheme.cs +0 -149
- package/stacks/blazor-azure/.morph/templates/MudTheme.cs +0 -281
- package/stacks/blazor-azure/.morph/templates/agent.cs +0 -163
- package/stacks/blazor-azure/.morph/templates/clarify-questions.md +0 -159
- package/stacks/blazor-azure/.morph/templates/component.razor +0 -239
- package/stacks/blazor-azure/.morph/templates/contracts/Commands.cs +0 -74
- package/stacks/blazor-azure/.morph/templates/contracts/Entities.cs +0 -25
- package/stacks/blazor-azure/.morph/templates/contracts/Queries.cs +0 -74
- package/stacks/blazor-azure/.morph/templates/contracts/README.md +0 -74
- package/stacks/blazor-azure/.morph/templates/contracts.cs +0 -217
- package/stacks/blazor-azure/.morph/templates/decisions.md +0 -123
- package/stacks/blazor-azure/.morph/templates/design-system.css +0 -226
- package/stacks/blazor-azure/.morph/templates/infra/.dockerignore.example +0 -89
- package/stacks/blazor-azure/.morph/templates/infra/Dockerfile.example +0 -82
- package/stacks/blazor-azure/.morph/templates/infra/README.md +0 -286
- package/stacks/blazor-azure/.morph/templates/infra/app-insights.bicep +0 -63
- package/stacks/blazor-azure/.morph/templates/infra/app-service.bicep +0 -164
- package/stacks/blazor-azure/.morph/templates/infra/azure-pipelines-deploy.yml +0 -480
- package/stacks/blazor-azure/.morph/templates/infra/container-app-env.bicep +0 -49
- package/stacks/blazor-azure/.morph/templates/infra/container-app.bicep +0 -156
- package/stacks/blazor-azure/.morph/templates/infra/deploy-checklist.md +0 -426
- package/stacks/blazor-azure/.morph/templates/infra/deploy.ps1 +0 -229
- package/stacks/blazor-azure/.morph/templates/infra/deploy.sh +0 -208
- package/stacks/blazor-azure/.morph/templates/infra/key-vault.bicep +0 -91
- package/stacks/blazor-azure/.morph/templates/infra/main.bicep +0 -189
- package/stacks/blazor-azure/.morph/templates/infra/parameters.dev.json +0 -29
- package/stacks/blazor-azure/.morph/templates/infra/parameters.prod.json +0 -29
- package/stacks/blazor-azure/.morph/templates/infra/parameters.staging.json +0 -29
- package/stacks/blazor-azure/.morph/templates/infra/sql-database.bicep +0 -103
- package/stacks/blazor-azure/.morph/templates/infra/storage.bicep +0 -106
- package/stacks/blazor-azure/.morph/templates/integrations/asaas-client.cs +0 -387
- package/stacks/blazor-azure/.morph/templates/integrations/asaas-webhook.cs +0 -351
- package/stacks/blazor-azure/.morph/templates/integrations/azure-identity-config.cs +0 -288
- package/stacks/blazor-azure/.morph/templates/integrations/clerk-config.cs +0 -258
- package/stacks/blazor-azure/.morph/templates/job.cs +0 -171
- package/stacks/blazor-azure/.morph/templates/migration.cs +0 -83
- package/stacks/blazor-azure/.morph/templates/proposal.md +0 -141
- package/stacks/blazor-azure/.morph/templates/recap.md +0 -94
- package/stacks/blazor-azure/.morph/templates/repository.cs +0 -141
- package/stacks/blazor-azure/.morph/templates/saas/subscription.cs +0 -347
- package/stacks/blazor-azure/.morph/templates/saas/tenant.cs +0 -338
- package/stacks/blazor-azure/.morph/templates/service.cs +0 -139
- package/stacks/blazor-azure/.morph/templates/simulation.md +0 -353
- package/stacks/blazor-azure/.morph/templates/spec.md +0 -149
- package/stacks/blazor-azure/.morph/templates/sprint-status.yaml +0 -68
- package/stacks/blazor-azure/.morph/templates/state.template.json +0 -222
- package/stacks/blazor-azure/.morph/templates/story.md +0 -143
- package/stacks/blazor-azure/.morph/templates/tasks.md +0 -257
- package/stacks/blazor-azure/.morph/templates/test.cs +0 -239
- package/stacks/blazor-azure/.morph/templates/ui-components.md +0 -362
- package/stacks/blazor-azure/.morph/templates/ui-design-system.md +0 -286
- package/stacks/blazor-azure/.morph/templates/ui-flows.md +0 -336
- package/stacks/blazor-azure/.morph/templates/ui-mockups.md +0 -133
- package/stacks/nextjs-supabase/.morph/docs/easypanel-setup.md +0 -169
- package/stacks/nextjs-supabase/.morph/docs/supabase-mcp-setup.md +0 -247
- package/stacks/nextjs-supabase/.morph/examples/crud-nextjs-supabase/README.md +0 -697
- package/stacks/nextjs-supabase/.morph/examples/crud-nextjs-supabase/spec.md +0 -85
- package/stacks/nextjs-supabase/.morph/examples/crud-nextjs-supabase/tasks.md +0 -86
- package/stacks/nextjs-supabase/.morph/examples/saas-nextjs-supabase/README.md +0 -498
- package/stacks/nextjs-supabase/.morph/examples/saas-nextjs-supabase/decisions.md +0 -121
- package/stacks/nextjs-supabase/.morph/examples/saas-nextjs-supabase/spec.md +0 -138
- package/stacks/nextjs-supabase/.morph/examples/saas-nextjs-supabase/tasks.md +0 -162
- package/stacks/nextjs-supabase/.morph/standards/easypanel-deploy.md +0 -191
- package/stacks/nextjs-supabase/.morph/standards/nextjs-patterns.md +0 -193
- package/stacks/nextjs-supabase/.morph/standards/supabase-auth.md +0 -171
- package/stacks/nextjs-supabase/.morph/standards/supabase-pgvector.md +0 -164
- package/stacks/nextjs-supabase/.morph/standards/supabase-rls.md +0 -179
- package/stacks/nextjs-supabase/.morph/standards/supabase-storage.md +0 -148
- package/stacks/nextjs-supabase/.morph/templates/contracts.cs +0 -173
- package/stacks/nextjs-supabase/.morph/templates/contracts.ts +0 -168
- package/stacks/nextjs-supabase/.morph/templates/decisions.md +0 -115
- package/stacks/nextjs-supabase/.morph/templates/dockerfile-api.dockerfile +0 -38
- package/stacks/nextjs-supabase/.morph/templates/dockerfile-web.dockerfile +0 -48
- package/stacks/nextjs-supabase/.morph/templates/proposal.md +0 -145
- package/stacks/nextjs-supabase/.morph/templates/recap.md +0 -134
- package/stacks/nextjs-supabase/.morph/templates/rls-policy.sql +0 -57
- package/stacks/nextjs-supabase/.morph/templates/spec.md +0 -231
- package/stacks/nextjs-supabase/.morph/templates/supabase-migration.sql +0 -100
- package/stacks/nextjs-supabase/.morph/templates/tasks.md +0 -257
- /package/src/lib/{design-system-generator.js → generators/design-system-generator.js} +0 -0
- /package/src/lib/{learning-system.js → learning/learning-system.js} +0 -0
|
@@ -1,148 +1,180 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Stack Resolver - Centralized stack path resolution for multi-stack support.
|
|
3
|
-
*
|
|
4
|
-
* Detects the active stack and resolves all stack-relative paths.
|
|
5
|
-
* Resolution order: explicit > config.json > state.json > auto-detect > fallback
|
|
6
|
-
*
|
|
7
|
-
* @module stack-resolver
|
|
8
|
-
*/
|
|
9
|
-
|
|
10
|
-
import { readFileSync, existsSync, readdirSync } from 'fs';
|
|
11
|
-
import { join } from 'path';
|
|
12
|
-
|
|
13
|
-
const STACK_TYPE_TO_DIR = {
|
|
14
|
-
'blazor-server': 'blazor-azure',
|
|
15
|
-
'blazor-azure': 'blazor-azure',
|
|
16
|
-
'nextjs-supabase': 'nextjs-supabase',
|
|
17
|
-
};
|
|
18
|
-
|
|
19
|
-
// Module-level override set by CLI --stack flag via setGlobalStack()
|
|
20
|
-
let _globalStackOverride = null;
|
|
21
|
-
|
|
22
|
-
/**
|
|
23
|
-
* Set a global stack override (called by CLI --stack flag).
|
|
24
|
-
* Once set, all resolveStackId() calls use this value unless
|
|
25
|
-
* an explicit parameter is provided.
|
|
26
|
-
* @param {string} stackId - Stack identifier
|
|
27
|
-
*/
|
|
28
|
-
export function setGlobalStack(stackId) {
|
|
29
|
-
_globalStackOverride = stackId;
|
|
30
|
-
}
|
|
31
|
-
|
|
32
|
-
/**
|
|
33
|
-
* Detect which stack directory to use.
|
|
34
|
-
*
|
|
35
|
-
* Resolution order:
|
|
36
|
-
* 1. explicitStack parameter (from CLI --stack flag)
|
|
37
|
-
* 2. .morph/config/config.json → project.type
|
|
38
|
-
* 3. .morph/state.json → project.type
|
|
39
|
-
* 4. Auto-detect: scan stacks/ for existing directories
|
|
40
|
-
* 5. Fallback: 'blazor-azure'
|
|
41
|
-
*
|
|
42
|
-
* @param {string} projectPath - Absolute path to project root
|
|
43
|
-
* @param {string} [explicitStack] - Override from CLI --stack flag
|
|
44
|
-
* @returns {string} Stack directory name (e.g., 'blazor-azure', 'nextjs-supabase')
|
|
45
|
-
*/
|
|
46
|
-
export function resolveStackId(projectPath, explicitStack) {
|
|
47
|
-
// 1. Explicit parameter override
|
|
48
|
-
if (explicitStack) {
|
|
49
|
-
return STACK_TYPE_TO_DIR[explicitStack] || explicitStack;
|
|
50
|
-
}
|
|
51
|
-
|
|
52
|
-
// 1b. Global CLI --stack override
|
|
53
|
-
if (_globalStackOverride) {
|
|
54
|
-
return STACK_TYPE_TO_DIR[_globalStackOverride] || _globalStackOverride;
|
|
55
|
-
}
|
|
56
|
-
|
|
57
|
-
// 2. config.json → project.type
|
|
58
|
-
try {
|
|
59
|
-
const configPath = join(projectPath, '.morph/config/config.json');
|
|
60
|
-
if (existsSync(configPath)) {
|
|
61
|
-
const config = JSON.parse(readFileSync(configPath, 'utf8'));
|
|
62
|
-
const projectType = config?.project?.type;
|
|
63
|
-
if (projectType && STACK_TYPE_TO_DIR[projectType]) {
|
|
64
|
-
return STACK_TYPE_TO_DIR[projectType];
|
|
65
|
-
}
|
|
66
|
-
}
|
|
67
|
-
} catch { /* continue to next source */ }
|
|
68
|
-
|
|
69
|
-
// 3. state.json → project.type
|
|
70
|
-
try {
|
|
71
|
-
const statePath = join(projectPath, '.morph/state.json');
|
|
72
|
-
if (existsSync(statePath)) {
|
|
73
|
-
const state = JSON.parse(readFileSync(statePath, 'utf8'));
|
|
74
|
-
const projectType = state?.project?.type;
|
|
75
|
-
if (projectType && STACK_TYPE_TO_DIR[projectType]) {
|
|
76
|
-
return STACK_TYPE_TO_DIR[projectType];
|
|
77
|
-
}
|
|
78
|
-
}
|
|
79
|
-
} catch { /* continue to next source */ }
|
|
80
|
-
|
|
81
|
-
// 4. Auto-detect: first directory in stacks/
|
|
82
|
-
try {
|
|
83
|
-
const stacksDir = join(projectPath, 'stacks');
|
|
84
|
-
if (existsSync(stacksDir)) {
|
|
85
|
-
const dirs = readdirSync(stacksDir, { withFileTypes: true })
|
|
86
|
-
.filter(d => d.isDirectory())
|
|
87
|
-
.map(d => d.name);
|
|
88
|
-
if (dirs.length === 1) {
|
|
89
|
-
return dirs[0];
|
|
90
|
-
}
|
|
91
|
-
}
|
|
92
|
-
} catch { /* continue to fallback */ }
|
|
93
|
-
|
|
94
|
-
// 5. Fallback
|
|
95
|
-
return 'blazor-azure';
|
|
96
|
-
}
|
|
97
|
-
|
|
98
|
-
/**
|
|
99
|
-
* Get absolute path to the active stack's root directory.
|
|
100
|
-
* @param {string} projectPath
|
|
101
|
-
* @param {string} [explicitStack]
|
|
102
|
-
* @returns {string}
|
|
103
|
-
*/
|
|
104
|
-
export function resolveStackPath(projectPath, explicitStack) {
|
|
105
|
-
return join(projectPath, 'stacks', resolveStackId(projectPath, explicitStack));
|
|
106
|
-
}
|
|
107
|
-
|
|
108
|
-
/**
|
|
109
|
-
* Get absolute path to the active stack's agents.json.
|
|
110
|
-
* @param {string} projectPath
|
|
111
|
-
* @param {string} [explicitStack]
|
|
112
|
-
* @returns {string}
|
|
113
|
-
*/
|
|
114
|
-
export function resolveAgentsConfigPath(projectPath, explicitStack) {
|
|
115
|
-
return join(resolveStackPath(projectPath, explicitStack), '.morph/config/agents.json');
|
|
116
|
-
}
|
|
117
|
-
|
|
118
|
-
/**
|
|
119
|
-
* Get absolute path to the active stack's standards directory.
|
|
120
|
-
* @param {string} projectPath
|
|
121
|
-
* @param {string} [explicitStack]
|
|
122
|
-
* @returns {string}
|
|
123
|
-
*/
|
|
124
|
-
export function resolveStandardsDir(projectPath, explicitStack) {
|
|
125
|
-
return join(resolveStackPath(projectPath, explicitStack), '.morph/standards');
|
|
126
|
-
}
|
|
127
|
-
|
|
128
|
-
/**
|
|
129
|
-
* Get absolute path to the active stack's templates directory.
|
|
130
|
-
* @param {string} projectPath
|
|
131
|
-
* @param {string} [explicitStack]
|
|
132
|
-
* @returns {string}
|
|
133
|
-
*/
|
|
134
|
-
export function resolveTemplatesDir(projectPath, explicitStack) {
|
|
135
|
-
return join(resolveStackPath(projectPath, explicitStack), '.morph/templates');
|
|
136
|
-
}
|
|
137
|
-
|
|
138
|
-
/**
|
|
139
|
-
*
|
|
140
|
-
*
|
|
141
|
-
*
|
|
142
|
-
*
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
}
|
|
147
|
-
|
|
148
|
-
|
|
1
|
+
/**
|
|
2
|
+
* Stack Resolver - Centralized stack path resolution for multi-stack support.
|
|
3
|
+
*
|
|
4
|
+
* Detects the active stack and resolves all stack-relative paths.
|
|
5
|
+
* Resolution order: explicit > config.json > state.json > auto-detect > fallback
|
|
6
|
+
*
|
|
7
|
+
* @module stack-resolver
|
|
8
|
+
*/
|
|
9
|
+
|
|
10
|
+
import { readFileSync, existsSync, readdirSync } from 'fs';
|
|
11
|
+
import { join } from 'path';
|
|
12
|
+
|
|
13
|
+
const STACK_TYPE_TO_DIR = {
|
|
14
|
+
'blazor-server': 'blazor-azure',
|
|
15
|
+
'blazor-azure': 'blazor-azure',
|
|
16
|
+
'nextjs-supabase': 'nextjs-supabase',
|
|
17
|
+
};
|
|
18
|
+
|
|
19
|
+
// Module-level override set by CLI --stack flag via setGlobalStack()
|
|
20
|
+
let _globalStackOverride = null;
|
|
21
|
+
|
|
22
|
+
/**
|
|
23
|
+
* Set a global stack override (called by CLI --stack flag).
|
|
24
|
+
* Once set, all resolveStackId() calls use this value unless
|
|
25
|
+
* an explicit parameter is provided.
|
|
26
|
+
* @param {string} stackId - Stack identifier
|
|
27
|
+
*/
|
|
28
|
+
export function setGlobalStack(stackId) {
|
|
29
|
+
_globalStackOverride = stackId;
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
/**
|
|
33
|
+
* Detect which stack directory to use.
|
|
34
|
+
*
|
|
35
|
+
* Resolution order:
|
|
36
|
+
* 1. explicitStack parameter (from CLI --stack flag)
|
|
37
|
+
* 2. .morph/config/config.json → project.type
|
|
38
|
+
* 3. .morph/state.json → project.type
|
|
39
|
+
* 4. Auto-detect: scan stacks/ for existing directories
|
|
40
|
+
* 5. Fallback: 'blazor-azure'
|
|
41
|
+
*
|
|
42
|
+
* @param {string} projectPath - Absolute path to project root
|
|
43
|
+
* @param {string} [explicitStack] - Override from CLI --stack flag
|
|
44
|
+
* @returns {string} Stack directory name (e.g., 'blazor-azure', 'nextjs-supabase')
|
|
45
|
+
*/
|
|
46
|
+
export function resolveStackId(projectPath, explicitStack) {
|
|
47
|
+
// 1. Explicit parameter override
|
|
48
|
+
if (explicitStack) {
|
|
49
|
+
return STACK_TYPE_TO_DIR[explicitStack] || explicitStack;
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
// 1b. Global CLI --stack override
|
|
53
|
+
if (_globalStackOverride) {
|
|
54
|
+
return STACK_TYPE_TO_DIR[_globalStackOverride] || _globalStackOverride;
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
// 2. config.json → project.type
|
|
58
|
+
try {
|
|
59
|
+
const configPath = join(projectPath, '.morph/config/config.json');
|
|
60
|
+
if (existsSync(configPath)) {
|
|
61
|
+
const config = JSON.parse(readFileSync(configPath, 'utf8'));
|
|
62
|
+
const projectType = config?.project?.type;
|
|
63
|
+
if (projectType && STACK_TYPE_TO_DIR[projectType]) {
|
|
64
|
+
return STACK_TYPE_TO_DIR[projectType];
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
} catch { /* continue to next source */ }
|
|
68
|
+
|
|
69
|
+
// 3. state.json → project.type
|
|
70
|
+
try {
|
|
71
|
+
const statePath = join(projectPath, '.morph/state.json');
|
|
72
|
+
if (existsSync(statePath)) {
|
|
73
|
+
const state = JSON.parse(readFileSync(statePath, 'utf8'));
|
|
74
|
+
const projectType = state?.project?.type;
|
|
75
|
+
if (projectType && STACK_TYPE_TO_DIR[projectType]) {
|
|
76
|
+
return STACK_TYPE_TO_DIR[projectType];
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
} catch { /* continue to next source */ }
|
|
80
|
+
|
|
81
|
+
// 4. Auto-detect: first directory in stacks/
|
|
82
|
+
try {
|
|
83
|
+
const stacksDir = join(projectPath, 'stacks');
|
|
84
|
+
if (existsSync(stacksDir)) {
|
|
85
|
+
const dirs = readdirSync(stacksDir, { withFileTypes: true })
|
|
86
|
+
.filter(d => d.isDirectory())
|
|
87
|
+
.map(d => d.name);
|
|
88
|
+
if (dirs.length === 1) {
|
|
89
|
+
return dirs[0];
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
} catch { /* continue to fallback */ }
|
|
93
|
+
|
|
94
|
+
// 5. Fallback
|
|
95
|
+
return 'blazor-azure';
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
/**
|
|
99
|
+
* Get absolute path to the active stack's root directory.
|
|
100
|
+
* @param {string} projectPath
|
|
101
|
+
* @param {string} [explicitStack]
|
|
102
|
+
* @returns {string}
|
|
103
|
+
*/
|
|
104
|
+
export function resolveStackPath(projectPath, explicitStack) {
|
|
105
|
+
return join(projectPath, 'stacks', resolveStackId(projectPath, explicitStack));
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
/**
|
|
109
|
+
* Get absolute path to the active stack's agents.json.
|
|
110
|
+
* @param {string} projectPath
|
|
111
|
+
* @param {string} [explicitStack]
|
|
112
|
+
* @returns {string}
|
|
113
|
+
*/
|
|
114
|
+
export function resolveAgentsConfigPath(projectPath, explicitStack) {
|
|
115
|
+
return join(resolveStackPath(projectPath, explicitStack), '.morph/config/agents.json');
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
/**
|
|
119
|
+
* Get absolute path to the active stack's standards directory.
|
|
120
|
+
* @param {string} projectPath
|
|
121
|
+
* @param {string} [explicitStack]
|
|
122
|
+
* @returns {string}
|
|
123
|
+
*/
|
|
124
|
+
export function resolveStandardsDir(projectPath, explicitStack) {
|
|
125
|
+
return join(resolveStackPath(projectPath, explicitStack), '.morph/standards');
|
|
126
|
+
}
|
|
127
|
+
|
|
128
|
+
/**
|
|
129
|
+
* Get absolute path to the active stack's templates directory.
|
|
130
|
+
* @param {string} projectPath
|
|
131
|
+
* @param {string} [explicitStack]
|
|
132
|
+
* @returns {string}
|
|
133
|
+
*/
|
|
134
|
+
export function resolveTemplatesDir(projectPath, explicitStack) {
|
|
135
|
+
return join(resolveStackPath(projectPath, explicitStack), '.morph/templates');
|
|
136
|
+
}
|
|
137
|
+
|
|
138
|
+
/**
|
|
139
|
+
* Resolve a template file path with fallback logic.
|
|
140
|
+
*
|
|
141
|
+
* Resolution order:
|
|
142
|
+
* 1. Stack-specific template in stacks/{stack}/.morph/templates/{templatePath}
|
|
143
|
+
* 2. Universal template in framework/templates/{templatePath}
|
|
144
|
+
*
|
|
145
|
+
* @param {string} projectPath - Absolute path to project root
|
|
146
|
+
* @param {string} templatePath - Relative template path (e.g., 'docs/proposal.md')
|
|
147
|
+
* @param {string} [explicitStack] - Override from CLI --stack flag
|
|
148
|
+
* @returns {string|null} Absolute path to template file, or null if not found
|
|
149
|
+
*/
|
|
150
|
+
export function resolveTemplatePath(projectPath, templatePath, explicitStack) {
|
|
151
|
+
// 1. Check stack-specific template first
|
|
152
|
+
const stackTemplatePath = join(
|
|
153
|
+
resolveTemplatesDir(projectPath, explicitStack),
|
|
154
|
+
templatePath
|
|
155
|
+
);
|
|
156
|
+
if (existsSync(stackTemplatePath)) {
|
|
157
|
+
return stackTemplatePath;
|
|
158
|
+
}
|
|
159
|
+
|
|
160
|
+
// 2. Fallback to universal template in framework/
|
|
161
|
+
const frameworkTemplatePath = join(projectPath, 'framework/templates', templatePath);
|
|
162
|
+
if (existsSync(frameworkTemplatePath)) {
|
|
163
|
+
return frameworkTemplatePath;
|
|
164
|
+
}
|
|
165
|
+
|
|
166
|
+
// 3. Not found in either location
|
|
167
|
+
return null;
|
|
168
|
+
}
|
|
169
|
+
|
|
170
|
+
/**
|
|
171
|
+
* Get absolute path to the active stack's config directory.
|
|
172
|
+
* @param {string} projectPath
|
|
173
|
+
* @param {string} [explicitStack]
|
|
174
|
+
* @returns {string}
|
|
175
|
+
*/
|
|
176
|
+
export function resolveConfigDir(projectPath, explicitStack) {
|
|
177
|
+
return join(resolveStackPath(projectPath, explicitStack), '.morph/config');
|
|
178
|
+
}
|
|
179
|
+
|
|
180
|
+
export { STACK_TYPE_TO_DIR };
|