@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.
- package/CLAUDE.md +352 -7
- package/README.md +1 -14
- package/bin/detect-agents.js +1 -1
- package/bin/morph-spec.js +122 -34
- package/bin/validate.js +1 -1
- package/docs/getting-started.md +0 -5
- 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 +1 -1
- package/src/commands/agents/index.js +4 -0
- package/src/commands/{spawn-team.js → agents/spawn-team.js} +172 -172
- 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} +4 -4
- package/src/commands/generation/index.js +5 -0
- package/src/commands/index.js +16 -0
- package/src/commands/{capture-pattern.js → learning/capture-pattern.js} +121 -121
- package/src/commands/learning/index.js +5 -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 -295
- package/src/commands/{sync.js → project/sync.js} +167 -167
- package/src/commands/{update.js → project/update.js} +240 -240
- package/src/commands/{advance-phase.js → state/advance-phase.js} +416 -357
- package/src/commands/{approve.js → state/approve.js} +221 -221
- 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/{session-summary.js → utils/session-summary.js} +291 -291
- package/src/commands/{troubleshoot.js → utils/troubleshoot.js} +222 -222
- 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/{lib → core/state}/phase-state-machine.js +214 -214
- package/src/{lib → core/state}/state-manager.js +572 -534
- package/src/core/templates/index.js +9 -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/lib/{complexity-analyzer.js → analysis/complexity-analyzer.js} +441 -441
- package/src/lib/analysis/index.js +7 -0
- package/src/lib/{checkpoint-hooks.js → checkpoints/checkpoint-hooks.js} +258 -258
- 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/{metadata-extractor.js → generators/metadata-extractor.js} +387 -380
- 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 -351
- 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/ui/wizard-questions.js +0 -2
- 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/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/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/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 -349
- 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/src/llm/schema-validator.js +0 -121
- package/src/sanitizer/.gitkeep +0 -0
- package/src/scanner/.gitkeep +0 -0
- package/src/types/index.js +0 -477
- package/src/ui/.gitkeep +0 -0
- package/src/writer/.gitkeep +0 -0
- 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/commands/{search-patterns.js → learning/search-patterns.js} +0 -0
- /package/src/commands/{migrate-state.js → utils/migrate-state.js} +0 -0
- /package/src/commands/{upgrade.js → utils/upgrade.js} +0 -0
- /package/src/{lib → core/templates}/template-data-sources.js +0 -0
- /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
- /package/{src/generator → stacks/blazor-azure/.morph/templates}/.gitkeep +0 -0
- /package/{src/llm → stacks/nextjs-supabase/.morph/templates}/.gitkeep +0 -0
|
@@ -1,133 +0,0 @@
|
|
|
1
|
-
# UI Mockups - {{FEATURE_NAME_TITLE}}
|
|
2
|
-
|
|
3
|
-
> Wireframes ASCII e descrições de cada tela/componente da feature.
|
|
4
|
-
> Este arquivo documenta VISUALMENTE como o usuário interagirá com o sistema.
|
|
5
|
-
> Generated: {{DATE}}
|
|
6
|
-
|
|
7
|
-
---
|
|
8
|
-
|
|
9
|
-
## Tela 1: {Nome da Tela}
|
|
10
|
-
|
|
11
|
-
### Wireframe
|
|
12
|
-
|
|
13
|
-
```
|
|
14
|
-
┌─────────────────────────────────────────────────────────┐
|
|
15
|
-
│ [{≡}] {Título da Página} [🔔] [👤] [⚙] │
|
|
16
|
-
├─────────────────────────────────────────────────────────┤
|
|
17
|
-
│ │
|
|
18
|
-
│ {Desenhe o wireframe ASCII aqui} │
|
|
19
|
-
│ │
|
|
20
|
-
│ Dicas: │
|
|
21
|
-
│ - Use ┌─┐└┘├┤ para bordas │
|
|
22
|
-
│ - Use │ para separadores verticais │
|
|
23
|
-
│ - Use ─ para separadores horizontais │
|
|
24
|
-
│ - Use [...] para botões │
|
|
25
|
-
│ - Use [{x}] para checkboxes/toggles │
|
|
26
|
-
│ - Use emojis para ícones (🔍 📊 ⚙ 👤 etc) │
|
|
27
|
-
│ │
|
|
28
|
-
└─────────────────────────────────────────────────────────┘
|
|
29
|
-
```
|
|
30
|
-
|
|
31
|
-
### Descrição
|
|
32
|
-
|
|
33
|
-
- **Propósito**: {O que o usuário pode fazer nesta tela? Qual problema resolve?}
|
|
34
|
-
- **Componentes Principais**:
|
|
35
|
-
- {Componente 1}: {Descrição breve}
|
|
36
|
-
- {Componente 2}: {Descrição breve}
|
|
37
|
-
- {Componente 3}: {Descrição breve}
|
|
38
|
-
- **Interações**:
|
|
39
|
-
- **Click em {elemento}**: {O que acontece}
|
|
40
|
-
- **Hover em {elemento}**: {Feedback visual}
|
|
41
|
-
- **Submit form**: {Ação realizada}
|
|
42
|
-
- **Estados**:
|
|
43
|
-
- **Default**: {Aparência inicial}
|
|
44
|
-
- **Loading**: {Como mostra carregamento? Skeleton? Spinner?}
|
|
45
|
-
- **Error**: {Como mostra erros? Toast? Message bar?}
|
|
46
|
-
- **Empty**: {Mensagem quando não há dados? CTA para criar?}
|
|
47
|
-
- **Success**: {Feedback de sucesso?}
|
|
48
|
-
|
|
49
|
-
### Responsividade
|
|
50
|
-
|
|
51
|
-
- **Desktop (> 1024px)**: {Descrição do layout desktop}
|
|
52
|
-
- **Tablet (768px - 1024px)**: {Mudanças no layout}
|
|
53
|
-
- **Mobile (< 768px)**: {Layout mobile - stack vertical? Menu hamburger?}
|
|
54
|
-
|
|
55
|
-
### Navegação
|
|
56
|
-
|
|
57
|
-
- **De**: {Tela/componente anterior}
|
|
58
|
-
- **Para**: {Próximas telas possíveis}
|
|
59
|
-
- **Ações**:
|
|
60
|
-
- [{Botão}]: Navega para {tela}
|
|
61
|
-
- [{Link}]: Abre {modal/página}
|
|
62
|
-
|
|
63
|
-
### Acessibilidade
|
|
64
|
-
|
|
65
|
-
- **Foco inicial**: {Onde o cursor deve iniciar?}
|
|
66
|
-
- **Tab order**: {Ordem lógica de navegação}
|
|
67
|
-
- **Screen reader**: {Principais ARIA labels}
|
|
68
|
-
|
|
69
|
-
---
|
|
70
|
-
|
|
71
|
-
## Tela 2: {Nome da Próxima Tela}
|
|
72
|
-
|
|
73
|
-
{Repita a estrutura acima para cada tela}
|
|
74
|
-
|
|
75
|
-
---
|
|
76
|
-
|
|
77
|
-
## Componentes Reutilizáveis
|
|
78
|
-
|
|
79
|
-
### {Nome do Componente}
|
|
80
|
-
|
|
81
|
-
**Wireframe:**
|
|
82
|
-
```
|
|
83
|
-
{ASCII art do componente isolado}
|
|
84
|
-
```
|
|
85
|
-
|
|
86
|
-
**Uso:**
|
|
87
|
-
- Aparece em: {Lista de telas onde este componente aparece}
|
|
88
|
-
- Variantes: {Diferentes versões/estados do componente}
|
|
89
|
-
- Props: {Parâmetros que o componente recebe}
|
|
90
|
-
|
|
91
|
-
---
|
|
92
|
-
|
|
93
|
-
## Fluxo de Navegação (Overview)
|
|
94
|
-
|
|
95
|
-
```
|
|
96
|
-
[Tela Inicial]
|
|
97
|
-
│
|
|
98
|
-
├─[Ação 1]──▶ [Tela A]
|
|
99
|
-
│ │
|
|
100
|
-
│ └─[Voltar]──▶ [Tela Inicial]
|
|
101
|
-
│
|
|
102
|
-
├─[Ação 2]──▶ [Tela B]
|
|
103
|
-
│ │
|
|
104
|
-
│ ├─[Próximo]──▶ [Tela C]
|
|
105
|
-
│ │
|
|
106
|
-
│ └─[Cancelar]──▶ [Tela Inicial]
|
|
107
|
-
│
|
|
108
|
-
└─[Ação 3]──▶ [Tela D]
|
|
109
|
-
```
|
|
110
|
-
|
|
111
|
-
---
|
|
112
|
-
|
|
113
|
-
## Notas de Design
|
|
114
|
-
|
|
115
|
-
### Paleta de Cores
|
|
116
|
-
- **Primária**: {Cor principal da interface}
|
|
117
|
-
- **Secundária**: {Cor para ações secundárias}
|
|
118
|
-
- **Sucesso**: {Verde para feedback positivo}
|
|
119
|
-
- **Erro**: {Vermelho para erros}
|
|
120
|
-
- **Warning**: {Amarelo para alertas}
|
|
121
|
-
|
|
122
|
-
### Tipografia
|
|
123
|
-
- **Títulos**: {Font, tamanho}
|
|
124
|
-
- **Corpo**: {Font, tamanho}
|
|
125
|
-
- **Labels**: {Font, tamanho}
|
|
126
|
-
|
|
127
|
-
### Espaçamento
|
|
128
|
-
- **Padding padrão**: {16px, 24px, etc}
|
|
129
|
-
- **Gap entre elementos**: {8px, 12px, etc}
|
|
130
|
-
|
|
131
|
-
---
|
|
132
|
-
|
|
133
|
-
*Template MORPH-SPEC v2.1.0 by Polymorphism Tech*
|
|
@@ -1,169 +0,0 @@
|
|
|
1
|
-
# EasyPanel Setup Guide
|
|
2
|
-
|
|
3
|
-
> Deploy .NET API + Next.js to VPS via EasyPanel
|
|
4
|
-
|
|
5
|
-
## Prerequisites
|
|
6
|
-
|
|
7
|
-
- VPS with EasyPanel installed (Ubuntu 22.04+ recommended)
|
|
8
|
-
- GitHub repository with Dockerfiles
|
|
9
|
-
- Domain name (optional, EasyPanel provides subdomains)
|
|
10
|
-
|
|
11
|
-
## 1. GitHub Integration
|
|
12
|
-
|
|
13
|
-
### Create Personal Access Token (PAT)
|
|
14
|
-
|
|
15
|
-
1. GitHub > Settings > Developer Settings > Personal Access Tokens > Fine-grained
|
|
16
|
-
2. Repository access: select your repo
|
|
17
|
-
3. Permissions: Contents (read), Metadata (read)
|
|
18
|
-
4. Copy token for EasyPanel
|
|
19
|
-
|
|
20
|
-
### Connect in EasyPanel
|
|
21
|
-
|
|
22
|
-
1. EasyPanel Dashboard > Settings > Git
|
|
23
|
-
2. Add GitHub provider with PAT
|
|
24
|
-
3. Test connection
|
|
25
|
-
|
|
26
|
-
## 2. Create Project
|
|
27
|
-
|
|
28
|
-
```
|
|
29
|
-
EasyPanel Dashboard > Projects > Create Project
|
|
30
|
-
Name: my-saas-app
|
|
31
|
-
```
|
|
32
|
-
|
|
33
|
-
## 3. Configure Services
|
|
34
|
-
|
|
35
|
-
### API Service (.NET)
|
|
36
|
-
|
|
37
|
-
| Setting | Value |
|
|
38
|
-
|---------|-------|
|
|
39
|
-
| Type | App |
|
|
40
|
-
| Source | GitHub |
|
|
41
|
-
| Repository | your-org/your-repo |
|
|
42
|
-
| Branch | main |
|
|
43
|
-
| Build Path | . |
|
|
44
|
-
| Dockerfile | Dockerfile.api |
|
|
45
|
-
| Port | 8080 |
|
|
46
|
-
|
|
47
|
-
### Web Service (Next.js)
|
|
48
|
-
|
|
49
|
-
| Setting | Value |
|
|
50
|
-
|---------|-------|
|
|
51
|
-
| Type | App |
|
|
52
|
-
| Source | GitHub |
|
|
53
|
-
| Repository | your-org/your-repo |
|
|
54
|
-
| Branch | main |
|
|
55
|
-
| Build Path | . |
|
|
56
|
-
| Dockerfile | Dockerfile.web |
|
|
57
|
-
| Port | 3000 |
|
|
58
|
-
|
|
59
|
-
## 4. Environment Variables
|
|
60
|
-
|
|
61
|
-
### API (.NET)
|
|
62
|
-
|
|
63
|
-
```
|
|
64
|
-
ASPNETCORE_ENVIRONMENT=Production
|
|
65
|
-
SUPABASE_URL=https://xxx.supabase.co
|
|
66
|
-
SUPABASE_SERVICE_ROLE_KEY=eyJ...
|
|
67
|
-
SUPABASE_JWT_SECRET=your-jwt-secret
|
|
68
|
-
ASPNETCORE_URLS=http://+:8080
|
|
69
|
-
```
|
|
70
|
-
|
|
71
|
-
### Web (Next.js)
|
|
72
|
-
|
|
73
|
-
```
|
|
74
|
-
NODE_ENV=production
|
|
75
|
-
NEXT_PUBLIC_SUPABASE_URL=https://xxx.supabase.co
|
|
76
|
-
NEXT_PUBLIC_SUPABASE_ANON_KEY=eyJ...
|
|
77
|
-
NEXT_PUBLIC_API_URL=https://api.yourdomain.com
|
|
78
|
-
```
|
|
79
|
-
|
|
80
|
-
CRITICAL: Never commit secrets. Use EasyPanel env vars panel only.
|
|
81
|
-
|
|
82
|
-
## 5. Domain + SSL
|
|
83
|
-
|
|
84
|
-
### Custom Domain
|
|
85
|
-
|
|
86
|
-
1. Service > Domains > Add Domain
|
|
87
|
-
2. Enter: `api.yourdomain.com` (for API) or `app.yourdomain.com` (for web)
|
|
88
|
-
3. DNS: Add A record pointing to VPS IP
|
|
89
|
-
4. SSL: Enable "Let's Encrypt" (auto-renews)
|
|
90
|
-
|
|
91
|
-
### EasyPanel Subdomain (free)
|
|
92
|
-
|
|
93
|
-
Format: `service-project.server.easypanel.host`
|
|
94
|
-
SSL included automatically.
|
|
95
|
-
|
|
96
|
-
## 6. Auto-Deploy
|
|
97
|
-
|
|
98
|
-
### GitHub Webhook
|
|
99
|
-
|
|
100
|
-
1. Service > Settings > Enable "Auto Deploy"
|
|
101
|
-
2. EasyPanel generates webhook URL
|
|
102
|
-
3. GitHub repo > Settings > Webhooks > Add webhook
|
|
103
|
-
4. Payload URL: (from EasyPanel)
|
|
104
|
-
5. Content type: application/json
|
|
105
|
-
6. Events: Push events only
|
|
106
|
-
7. Branch filter: main
|
|
107
|
-
|
|
108
|
-
Pushes to `main` now trigger automatic builds.
|
|
109
|
-
|
|
110
|
-
## 7. Health Checks
|
|
111
|
-
|
|
112
|
-
### API Health Check
|
|
113
|
-
|
|
114
|
-
```
|
|
115
|
-
Path: /health
|
|
116
|
-
Port: 8080
|
|
117
|
-
Interval: 30s
|
|
118
|
-
Timeout: 5s
|
|
119
|
-
Retries: 3
|
|
120
|
-
```
|
|
121
|
-
|
|
122
|
-
.NET endpoint:
|
|
123
|
-
```csharp
|
|
124
|
-
app.MapGet("/health", () => Results.Ok(new { status = "healthy" }));
|
|
125
|
-
```
|
|
126
|
-
|
|
127
|
-
### Web Health Check
|
|
128
|
-
|
|
129
|
-
```
|
|
130
|
-
Path: /api/health
|
|
131
|
-
Port: 3000
|
|
132
|
-
Interval: 30s
|
|
133
|
-
```
|
|
134
|
-
|
|
135
|
-
Next.js route handler:
|
|
136
|
-
```typescript
|
|
137
|
-
// app/api/health/route.ts
|
|
138
|
-
export function GET() {
|
|
139
|
-
return Response.json({ status: 'healthy' });
|
|
140
|
-
}
|
|
141
|
-
```
|
|
142
|
-
|
|
143
|
-
## 8. Monitoring
|
|
144
|
-
|
|
145
|
-
### Logs
|
|
146
|
-
|
|
147
|
-
EasyPanel Dashboard > Service > Logs (real-time streaming)
|
|
148
|
-
|
|
149
|
-
### Resource Usage
|
|
150
|
-
|
|
151
|
-
EasyPanel Dashboard > Service > Metrics (CPU, Memory, Network)
|
|
152
|
-
|
|
153
|
-
### Recommended VPS Sizing
|
|
154
|
-
|
|
155
|
-
| Workload | RAM | CPU | Storage |
|
|
156
|
-
|----------|-----|-----|---------|
|
|
157
|
-
| Dev/MVP | 2GB | 1 vCPU | 40GB |
|
|
158
|
-
| Small prod | 4GB | 2 vCPU | 80GB |
|
|
159
|
-
| Medium prod | 8GB | 4 vCPU | 160GB |
|
|
160
|
-
|
|
161
|
-
## Troubleshooting
|
|
162
|
-
|
|
163
|
-
| Issue | Solution |
|
|
164
|
-
|-------|----------|
|
|
165
|
-
| Build fails | Check Dockerfile paths, ensure multi-stage layers correct |
|
|
166
|
-
| Port conflict | Verify service ports don't overlap |
|
|
167
|
-
| SSL not working | Wait 5 min for Let's Encrypt propagation, check DNS |
|
|
168
|
-
| Auto-deploy not triggering | Verify webhook URL and branch filter |
|
|
169
|
-
| Container OOM | Increase VPS RAM or optimize app memory usage |
|
|
@@ -1,247 +0,0 @@
|
|
|
1
|
-
# Supabase MCP Server Setup Guide
|
|
2
|
-
|
|
3
|
-
> Direct database management from Claude Code via Model Context Protocol
|
|
4
|
-
|
|
5
|
-
## What It Provides
|
|
6
|
-
|
|
7
|
-
The Supabase MCP Server lets Claude Code interact directly with your Supabase project's database. This enables:
|
|
8
|
-
|
|
9
|
-
- Running SQL queries and viewing results
|
|
10
|
-
- Creating and managing database migrations
|
|
11
|
-
- Inspecting table schemas, indexes, and RLS policies
|
|
12
|
-
- Managing Supabase Auth, Storage, and Edge Functions
|
|
13
|
-
- Schema diffing and migration generation
|
|
14
|
-
|
|
15
|
-
## CRITICAL WARNING
|
|
16
|
-
|
|
17
|
-
```
|
|
18
|
-
==========================================================
|
|
19
|
-
NEVER connect to a PRODUCTION Supabase project via MCP.
|
|
20
|
-
|
|
21
|
-
MCP provides direct database access. A single bad query
|
|
22
|
-
can DROP tables, DELETE data, or DISABLE RLS.
|
|
23
|
-
|
|
24
|
-
ONLY connect to:
|
|
25
|
-
- Local Supabase (supabase start)
|
|
26
|
-
- Development/staging projects
|
|
27
|
-
- Disposable test projects
|
|
28
|
-
==========================================================
|
|
29
|
-
```
|
|
30
|
-
|
|
31
|
-
## Setup
|
|
32
|
-
|
|
33
|
-
### 1. Get Your Supabase Connection Details
|
|
34
|
-
|
|
35
|
-
From your Supabase Dashboard > Project Settings > API:
|
|
36
|
-
- **Project URL**: `https://xxxxxxxxxxxx.supabase.co`
|
|
37
|
-
- **Service Role Key**: `eyJhbGc...` (Settings > API > service_role key)
|
|
38
|
-
|
|
39
|
-
For local Supabase (`supabase start`):
|
|
40
|
-
- **Project URL**: `http://127.0.0.1:54321`
|
|
41
|
-
- **Service Role Key**: Output from `supabase status`
|
|
42
|
-
|
|
43
|
-
### 2. Configure Claude Desktop / Claude Code
|
|
44
|
-
|
|
45
|
-
Add the Supabase MCP server to your configuration.
|
|
46
|
-
|
|
47
|
-
**Claude Desktop** (`claude_desktop_config.json`):
|
|
48
|
-
|
|
49
|
-
```json
|
|
50
|
-
{
|
|
51
|
-
"mcpServers": {
|
|
52
|
-
"supabase": {
|
|
53
|
-
"command": "npx",
|
|
54
|
-
"args": [
|
|
55
|
-
"-y",
|
|
56
|
-
"@supabase/mcp-server-supabase@latest",
|
|
57
|
-
"--supabase-url",
|
|
58
|
-
"https://xxxxxxxxxxxx.supabase.co",
|
|
59
|
-
"--supabase-service-role-key",
|
|
60
|
-
"eyJhbGc...",
|
|
61
|
-
"--read-only"
|
|
62
|
-
]
|
|
63
|
-
}
|
|
64
|
-
}
|
|
65
|
-
}
|
|
66
|
-
```
|
|
67
|
-
|
|
68
|
-
**Claude Code** (`.claude/settings.local.json`):
|
|
69
|
-
|
|
70
|
-
```json
|
|
71
|
-
{
|
|
72
|
-
"mcpServers": {
|
|
73
|
-
"supabase": {
|
|
74
|
-
"command": "npx",
|
|
75
|
-
"args": [
|
|
76
|
-
"-y",
|
|
77
|
-
"@supabase/mcp-server-supabase@latest",
|
|
78
|
-
"--supabase-url",
|
|
79
|
-
"https://xxxxxxxxxxxx.supabase.co",
|
|
80
|
-
"--supabase-service-role-key",
|
|
81
|
-
"eyJhbGc...",
|
|
82
|
-
"--read-only"
|
|
83
|
-
]
|
|
84
|
-
}
|
|
85
|
-
}
|
|
86
|
-
}
|
|
87
|
-
```
|
|
88
|
-
|
|
89
|
-
### 3. Default: Read-Only Mode
|
|
90
|
-
|
|
91
|
-
The `--read-only` flag is included by default. In this mode:
|
|
92
|
-
|
|
93
|
-
| Operation | Allowed |
|
|
94
|
-
|-----------|---------|
|
|
95
|
-
| SELECT queries | Yes |
|
|
96
|
-
| DESCRIBE / schema inspection | Yes |
|
|
97
|
-
| LIST tables, policies, indexes | Yes |
|
|
98
|
-
| INSERT / UPDATE / DELETE | No |
|
|
99
|
-
| CREATE / ALTER / DROP | No |
|
|
100
|
-
| Migration creation | No |
|
|
101
|
-
|
|
102
|
-
To enable write access (development only), remove `--read-only`:
|
|
103
|
-
|
|
104
|
-
```json
|
|
105
|
-
{
|
|
106
|
-
"mcpServers": {
|
|
107
|
-
"supabase": {
|
|
108
|
-
"command": "npx",
|
|
109
|
-
"args": [
|
|
110
|
-
"-y",
|
|
111
|
-
"@supabase/mcp-server-supabase@latest",
|
|
112
|
-
"--supabase-url",
|
|
113
|
-
"http://127.0.0.1:54321",
|
|
114
|
-
"--supabase-service-role-key",
|
|
115
|
-
"your-local-service-role-key"
|
|
116
|
-
]
|
|
117
|
-
}
|
|
118
|
-
}
|
|
119
|
-
}
|
|
120
|
-
```
|
|
121
|
-
|
|
122
|
-
Write mode should ONLY be used with local Supabase or disposable dev projects.
|
|
123
|
-
|
|
124
|
-
## Available Tool Groups
|
|
125
|
-
|
|
126
|
-
The Supabase MCP Server exposes these tool groups:
|
|
127
|
-
|
|
128
|
-
### Database Tools
|
|
129
|
-
|
|
130
|
-
| Tool | Description |
|
|
131
|
-
|------|-------------|
|
|
132
|
-
| `list_tables` | List all tables in the project |
|
|
133
|
-
| `list_extensions` | List installed PostgreSQL extensions |
|
|
134
|
-
| `list_migrations` | List applied migrations |
|
|
135
|
-
| `apply_migration` | Apply a new SQL migration |
|
|
136
|
-
| `execute_sql` | Run arbitrary SQL (read-only by default) |
|
|
137
|
-
| `get_migration_status` | Check pending vs applied migrations |
|
|
138
|
-
|
|
139
|
-
### Auth Tools
|
|
140
|
-
|
|
141
|
-
| Tool | Description |
|
|
142
|
-
|------|-------------|
|
|
143
|
-
| `get_auth_config` | View auth provider configuration |
|
|
144
|
-
| `list_auth_users` | List authenticated users |
|
|
145
|
-
|
|
146
|
-
### Storage Tools
|
|
147
|
-
|
|
148
|
-
| Tool | Description |
|
|
149
|
-
|------|-------------|
|
|
150
|
-
| `list_storage_buckets` | List storage buckets |
|
|
151
|
-
| `get_storage_config` | View storage configuration |
|
|
152
|
-
|
|
153
|
-
### Project Tools
|
|
154
|
-
|
|
155
|
-
| Tool | Description |
|
|
156
|
-
|------|-------------|
|
|
157
|
-
| `get_project_config` | View project settings |
|
|
158
|
-
| `get_project_api_keys` | View API keys |
|
|
159
|
-
|
|
160
|
-
## Usage for Migrations and Schema Management
|
|
161
|
-
|
|
162
|
-
### Inspecting Current Schema
|
|
163
|
-
|
|
164
|
-
Ask Claude Code to use the MCP tools:
|
|
165
|
-
|
|
166
|
-
```
|
|
167
|
-
"Show me all tables and their RLS policies"
|
|
168
|
-
"What indexes exist on the documents table?"
|
|
169
|
-
"List all migrations applied so far"
|
|
170
|
-
```
|
|
171
|
-
|
|
172
|
-
### Creating Migrations
|
|
173
|
-
|
|
174
|
-
With write mode enabled on a local/dev project:
|
|
175
|
-
|
|
176
|
-
```
|
|
177
|
-
"Create a migration to add a 'tags' column to the documents table"
|
|
178
|
-
"Add an RLS policy so only tenant admins can delete documents"
|
|
179
|
-
"Enable the pgvector extension and create the embedding column"
|
|
180
|
-
```
|
|
181
|
-
|
|
182
|
-
The MCP server will generate and apply SQL migrations through Supabase's migration system.
|
|
183
|
-
|
|
184
|
-
### Schema Diffing
|
|
185
|
-
|
|
186
|
-
```
|
|
187
|
-
"Compare the current schema against the migration files"
|
|
188
|
-
"Show me what would change if I apply the pending migration"
|
|
189
|
-
```
|
|
190
|
-
|
|
191
|
-
## Usage with MORPH-SPEC Workflow
|
|
192
|
-
|
|
193
|
-
During MORPH-SPEC phases, the MCP server is useful for:
|
|
194
|
-
|
|
195
|
-
| Phase | MCP Usage |
|
|
196
|
-
|-------|-----------|
|
|
197
|
-
| **Phase 2 (Design)** | Inspect existing schema to inform spec |
|
|
198
|
-
| **Phase 4 (Tasks)** | Verify migration dependencies |
|
|
199
|
-
| **Phase 5 (Implement)** | Apply migrations, verify RLS policies, test queries |
|
|
200
|
-
|
|
201
|
-
### Example Workflow
|
|
202
|
-
|
|
203
|
-
```
|
|
204
|
-
1. Design phase: "List current tables and extensions"
|
|
205
|
-
2. Write migration SQL in supabase/migrations/
|
|
206
|
-
3. Apply via MCP: "Apply migration 003_add_search_logs.sql"
|
|
207
|
-
4. Verify: "Show RLS policies on search_logs table"
|
|
208
|
-
5. Test: "Run SELECT * FROM search_logs LIMIT 5"
|
|
209
|
-
```
|
|
210
|
-
|
|
211
|
-
## Security Best Practices
|
|
212
|
-
|
|
213
|
-
1. **Always use `--read-only` unless actively running migrations**
|
|
214
|
-
2. **Never store service_role keys in version control** -- use environment variables or a secrets manager
|
|
215
|
-
3. **Use local Supabase for development** (`supabase start`) instead of cloud projects
|
|
216
|
-
4. **Rotate keys if accidentally exposed** -- Supabase Dashboard > Settings > API > Regenerate
|
|
217
|
-
5. **Restrict MCP to development machines only** -- never configure on CI/CD or shared servers
|
|
218
|
-
6. **Review SQL before applying** -- the MCP server executes SQL with service_role privileges, bypassing all RLS
|
|
219
|
-
|
|
220
|
-
### Environment Variable Alternative
|
|
221
|
-
|
|
222
|
-
Instead of hardcoding keys in the config file:
|
|
223
|
-
|
|
224
|
-
```json
|
|
225
|
-
{
|
|
226
|
-
"mcpServers": {
|
|
227
|
-
"supabase": {
|
|
228
|
-
"command": "npx",
|
|
229
|
-
"args": [
|
|
230
|
-
"-y",
|
|
231
|
-
"@supabase/mcp-server-supabase@latest",
|
|
232
|
-
"--read-only"
|
|
233
|
-
],
|
|
234
|
-
"env": {
|
|
235
|
-
"SUPABASE_URL": "${SUPABASE_URL}",
|
|
236
|
-
"SUPABASE_SERVICE_ROLE_KEY": "${SUPABASE_SERVICE_ROLE_KEY}"
|
|
237
|
-
}
|
|
238
|
-
}
|
|
239
|
-
}
|
|
240
|
-
}
|
|
241
|
-
```
|
|
242
|
-
|
|
243
|
-
Set the environment variables in your shell profile or `.env` file (never committed).
|
|
244
|
-
|
|
245
|
-
---
|
|
246
|
-
|
|
247
|
-
*MORPH-SPEC by Polymorphism Tech*
|