@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
package/README.md
CHANGED
|
@@ -34,10 +34,78 @@
|
|
|
34
34
|
|
|
35
35
|
MORPH-SPEC é um framework de desenvolvimento orientado por especificações com **30 agentes AI especializados** organizados em 4 tiers hierárquicos. Cada agente tem expertise em tecnologias específicas e segue workflows estruturados para entregar código production-ready.
|
|
36
36
|
|
|
37
|
-
**Stacks suportadas:** .NET 10/Blazor, .NET 10/Next.js
|
|
38
|
-
**Infraestrutura:** Azure Bicep (IaC)
|
|
37
|
+
**Stacks suportadas:** .NET 10/Blazor, .NET 10/Next.js, Node.js, Monorepos
|
|
38
|
+
**Infraestrutura:** Azure Bicep (IaC) + Docker
|
|
39
39
|
**Ferramenta:** Claude Code
|
|
40
40
|
**Validação:** Pipeline automático de enforcement com gates por fase
|
|
41
|
+
**Auto-Detecção:** ✨ LLM-powered context detection (v3.1+)
|
|
42
|
+
|
|
43
|
+
---
|
|
44
|
+
|
|
45
|
+
## 🚀 Novidade v3.0: LLM Interaction Enhancements
|
|
46
|
+
|
|
47
|
+
MORPH-SPEC v3.0 torna o framework **explícito e orientado** para Claude Code com 8 melhorias fundamentais:
|
|
48
|
+
|
|
49
|
+
### 1. **Approval Gates** (Portões de Aprovação)
|
|
50
|
+
- ✅ Rastreamento explícito de aprovações em `state.json`
|
|
51
|
+
- 🚫 Bloqueio de transições de fase até aprovação explícita
|
|
52
|
+
- 📝 Comandos: `approve`, `reject`, `approval-status`
|
|
53
|
+
|
|
54
|
+
### 2. **Checkpoint Automation** (Validação Automática)
|
|
55
|
+
- 🔍 Auto-validação a cada 3 tasks (T003, T006, T009...)
|
|
56
|
+
- 🛡️ 4 validators: architecture, packages, security, design-system
|
|
57
|
+
- 🚧 Bloqueia progresso se falhas detectadas
|
|
58
|
+
|
|
59
|
+
### 3. **Stricter Phase Validation** (Validação Estrita)
|
|
60
|
+
- 🎯 State machine com transições válidas
|
|
61
|
+
- 📋 Validação de conteúdo (spec.md, tasks.json)
|
|
62
|
+
- 5️⃣ Sistema de 5 gates de validação
|
|
63
|
+
|
|
64
|
+
### 4. **Agent Team Spawning** (Spawning de Agentes)
|
|
65
|
+
- 🤖 Detecção automática quando spawnar (5+ agents, 15+ files, multi-domain)
|
|
66
|
+
- 🏗️ Comando `spawn-team` gera configs para Task tool
|
|
67
|
+
- 📄 Templates prontos para agent context
|
|
68
|
+
|
|
69
|
+
### 5. **Metadata Generation** (Geração de Metadados)
|
|
70
|
+
- 📊 Auto-gera `metadata.json` após cada task
|
|
71
|
+
- ⚡ Reduz uso de tokens em 60-80%
|
|
72
|
+
- 🔗 Links rápidos para spec, tasks, decisões
|
|
73
|
+
|
|
74
|
+
### 6. **Learning System** (Sistema de Aprendizado)
|
|
75
|
+
- 📚 11 patterns pré-configurados (389 linhas)
|
|
76
|
+
- 🔎 Busca: `search-patterns "{keyword}"`
|
|
77
|
+
- 📝 Captura: `capture-pattern {feature} success "Description"`
|
|
78
|
+
|
|
79
|
+
### 7. **MCP Template Enhancement** (Templates Dinâmicos)
|
|
80
|
+
- 🌐 17 placeholders com dados do projeto
|
|
81
|
+
- 📈 Injeta: files, coverage, compliance, commits
|
|
82
|
+
- 🎨 Templates: `proposal-with-mcp.md`, `spec-with-mcp.md`
|
|
83
|
+
|
|
84
|
+
### 8. **Interactive Decisions** (Decisões Estruturadas)
|
|
85
|
+
- 💬 Templates para AskUserQuestion
|
|
86
|
+
- 🎯 6 padrões documentados (scope, architecture, validation, etc.)
|
|
87
|
+
- 📖 Guia completo em `.morph/templates/decision-prompts.md`
|
|
88
|
+
|
|
89
|
+
**Configuração:** `.morph/config/llm-interaction.json` com 3 presets (strict, lightweight, no-guardrails)
|
|
90
|
+
|
|
91
|
+
**Documentação:** [docs/llm-interaction-config.md](docs/llm-interaction-config.md)
|
|
92
|
+
|
|
93
|
+
**Migration:** `npx morph-spec upgrade --preset strict`
|
|
94
|
+
|
|
95
|
+
---
|
|
96
|
+
|
|
97
|
+
## ✨ Novidade v3.1: Auto-Detecção Inteligente
|
|
98
|
+
|
|
99
|
+
MORPH-SPEC agora **detecta automaticamente** o contexto do seu projeto usando Claude Code:
|
|
100
|
+
|
|
101
|
+
- 🤖 **LLM Analysis**: Analisa package.json, .csproj, README, estrutura de pastas
|
|
102
|
+
- 🎯 **90%+ Accuracy**: Few-shot learning com exemplos reais (Next.js, Blazor, Monorepo)
|
|
103
|
+
- 🔒 **Privacy-First**: Processamento local, zero chamadas externas de API
|
|
104
|
+
- 🛡️ **Secret Sanitization**: Redação automática de API keys, passwords, tokens
|
|
105
|
+
- 🧙 **Wizard Fallback**: Wizard interativo de 7 perguntas se LLM falhar
|
|
106
|
+
- ⚡ **Zero Manual Work**: Gera `.morph/project.md` e `config.json` em segundos
|
|
107
|
+
|
|
108
|
+
**Saiba mais:** [docs/cli-auto-detection.md](docs/cli-auto-detection.md)
|
|
41
109
|
|
|
42
110
|
---
|
|
43
111
|
|
|
@@ -116,13 +184,19 @@ Veja também: [Troubleshooting](#troubleshooting)
|
|
|
116
184
|
|
|
117
185
|
| Comando | Descrição |
|
|
118
186
|
|---------|-----------|
|
|
119
|
-
| `morph-spec init` | Inicializa MORPH
|
|
187
|
+
| `morph-spec init` | Inicializa MORPH e **detecta automaticamente** o contexto do projeto ✨ |
|
|
188
|
+
| `morph-spec init --wizard` | Inicializa com wizard manual (sem auto-detecção LLM) |
|
|
189
|
+
| `morph-spec init --skip-detection` | Inicializa sem detectar contexto (configuração manual) |
|
|
120
190
|
| `morph-spec init --force` | Sobrescreve instalação existente |
|
|
121
|
-
| `morph-spec update` | Atualiza projeto
|
|
191
|
+
| `morph-spec update` | Atualiza projeto e **re-analisa contexto** automaticamente ✨ |
|
|
192
|
+
| `morph-spec update --wizard` | Atualiza com wizard manual |
|
|
193
|
+
| `morph-spec update --skip-detection` | Atualiza sem re-analisar contexto |
|
|
122
194
|
| `morph-spec update --templates` | Atualiza apenas templates |
|
|
123
195
|
| `morph-spec update --standards` | Atualiza apenas standards |
|
|
124
196
|
| `morph-spec doctor` | Verifica saúde e versões da instalação |
|
|
125
197
|
|
|
198
|
+
> ✨ **Novo em v3.1+:** Auto-detecção inteligente de stack, arquitetura e infraestrutura usando Claude Code!
|
|
199
|
+
|
|
126
200
|
### Verificar Instalação
|
|
127
201
|
|
|
128
202
|
```bash
|
|
@@ -414,18 +488,6 @@ MORPH-SPEC possui **30 agentes** organizados em 4 tiers hierárquicos com squads
|
|
|
414
488
|
|
|
415
489
|
---
|
|
416
490
|
|
|
417
|
-
## Exemplos
|
|
418
|
-
|
|
419
|
-
| Exemplo | Descrição |
|
|
420
|
-
|---------|-----------|
|
|
421
|
-
| [micro-saas](stacks/blazor-azure/.morph/examples/micro-saas/) | SaaS completo com Blazor + Asaas billing |
|
|
422
|
-
| [api-nextjs](stacks/blazor-azure/.morph/examples/api-nextjs/) | .NET API + Next.js frontend |
|
|
423
|
-
| [multi-agent](stacks/blazor-azure/.morph/examples/multi-agent/) | Sistema multi-agente com Microsoft Agent Framework |
|
|
424
|
-
|
|
425
|
-
Cada exemplo inclui: `README.md`, `spec.md`, `contracts.cs`, `tasks.md`, `decisions.md`
|
|
426
|
-
|
|
427
|
-
---
|
|
428
|
-
|
|
429
491
|
## Estrutura do Projeto
|
|
430
492
|
|
|
431
493
|
Após a instalação, seu projeto terá:
|
|
@@ -449,7 +511,6 @@ seu-projeto/
|
|
|
449
511
|
│ │ ├── infra/
|
|
450
512
|
│ │ ├── integrations/
|
|
451
513
|
│ │ └── saas/
|
|
452
|
-
│ ├── examples/ # Exemplos completos
|
|
453
514
|
│ ├── features/ # Features em desenvolvimento
|
|
454
515
|
│ └── archive/ # Features concluídas
|
|
455
516
|
└── .claude/
|
|
@@ -629,7 +690,7 @@ Todo código gerado usando MORPH-SPEC é **100% seu** para usar como quiser, inc
|
|
|
629
690
|
|
|
630
691
|
- [npm Package](https://www.npmjs.com/package/@polymorphism-tech/morph-spec)
|
|
631
692
|
- [Documentação](docs/)
|
|
632
|
-
- [
|
|
693
|
+
- [Wiki (Base de Conhecimento)](.wiki/) - 33 artigos sobre .NET, Azure, IA, SaaS e Claude Code
|
|
633
694
|
- [Polymorphism Tech](https://polymorphism.com.br)
|
|
634
695
|
|
|
635
696
|
---
|
package/bin/detect-agents.js
CHANGED
|
@@ -15,7 +15,7 @@
|
|
|
15
15
|
import { readFileSync } from 'fs';
|
|
16
16
|
import { join, dirname } from 'path';
|
|
17
17
|
import { fileURLToPath } from 'url';
|
|
18
|
-
import { resolveAgentsConfigPath } from '../src/lib/stack-resolver.js';
|
|
18
|
+
import { resolveAgentsConfigPath } from '../src/lib/stacks/stack-resolver.js';
|
|
19
19
|
|
|
20
20
|
const __dirname = dirname(fileURLToPath(import.meta.url));
|
|
21
21
|
const frameworkRoot = join(__dirname, '..');
|
package/bin/morph-spec.js
CHANGED
|
@@ -5,33 +5,66 @@ import chalk from 'chalk';
|
|
|
5
5
|
import { fileURLToPath } from 'url';
|
|
6
6
|
import { dirname, join } from 'path';
|
|
7
7
|
import { readFileSync } from 'fs';
|
|
8
|
-
import { setGlobalStack } from '../src/lib/stack-resolver.js';
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
import {
|
|
12
|
-
import {
|
|
13
|
-
import {
|
|
14
|
-
import {
|
|
15
|
-
import {
|
|
16
|
-
import {
|
|
17
|
-
import {
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
import {
|
|
21
|
-
import {
|
|
22
|
-
import {
|
|
8
|
+
import { setGlobalStack } from '../src/lib/stacks/stack-resolver.js';
|
|
9
|
+
|
|
10
|
+
// Project commands
|
|
11
|
+
import { initCommand } from '../src/commands/project/init.js';
|
|
12
|
+
import { updateCommand } from '../src/commands/project/update.js';
|
|
13
|
+
import { doctorCommand } from '../src/commands/project/doctor.js';
|
|
14
|
+
import { detectCommand } from '../src/commands/project/detect.js';
|
|
15
|
+
import { detectAgentsCommand } from '../src/commands/project/detect-agents.js';
|
|
16
|
+
import { detectWorkflowCommand } from '../src/commands/project/detect-workflow.js';
|
|
17
|
+
import { syncCommand } from '../src/commands/project/sync.js';
|
|
18
|
+
|
|
19
|
+
// Feature commands
|
|
20
|
+
import { createStoryCommand } from '../src/commands/feature/create-story.js';
|
|
21
|
+
import { shardSpecCommand } from '../src/commands/feature/shard-spec.js';
|
|
22
|
+
import { sprintStatusCommand } from '../src/commands/feature/sprint-status.js';
|
|
23
|
+
|
|
24
|
+
// State commands
|
|
25
|
+
import { stateCommand } from '../src/commands/state/state.js';
|
|
26
|
+
import { validatePhaseCommand } from '../src/commands/state/validate-phase.js';
|
|
27
|
+
import { rollbackPhaseCommand } from '../src/commands/state/rollback-phase.js';
|
|
28
|
+
import { advancePhaseCommand } from '../src/commands/state/advance-phase.js';
|
|
29
|
+
import { approveCommand, rejectCommand, approvalStatusCommand } from '../src/commands/state/approve.js';
|
|
30
|
+
|
|
31
|
+
// Task commands
|
|
32
|
+
import { taskDoneCommand, taskStartCommand, taskNextCommand } from '../src/commands/tasks/task.js';
|
|
33
|
+
|
|
34
|
+
// Generation commands
|
|
35
|
+
import { generateDesignSystemCommand, generateMetadataCommand } from '../src/commands/generation/generate.js';
|
|
36
|
+
import { generateContextCommand } from '../src/commands/generation/generate-context.js';
|
|
37
|
+
|
|
38
|
+
// Validation commands
|
|
23
39
|
import { validateCommand } from './validate.js';
|
|
24
|
-
import { validateBlazorCommand } from '../src/commands/validate-blazor.js';
|
|
25
|
-
import { lintFluentCommand } from '../src/commands/lint-fluent.js';
|
|
26
|
-
import { analyzeBlazorConcurrencyCommand } from '../src/commands/analyze-blazor-concurrency.js';
|
|
27
|
-
import { validateBlazorStateCommand } from '../src/commands/validate-blazor-state.js';
|
|
28
|
-
import { validateCssCommand } from '../src/commands/validate-css.js';
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
import {
|
|
32
|
-
import {
|
|
33
|
-
import {
|
|
34
|
-
import {
|
|
40
|
+
import { validateBlazorCommand } from '../src/commands/validation/validate-blazor.js';
|
|
41
|
+
import { lintFluentCommand } from '../src/commands/validation/lint-fluent.js';
|
|
42
|
+
import { analyzeBlazorConcurrencyCommand } from '../src/commands/validation/analyze-blazor-concurrency.js';
|
|
43
|
+
import { validateBlazorStateCommand } from '../src/commands/validation/validate-blazor-state.js';
|
|
44
|
+
import { validateCssCommand } from '../src/commands/validation/validate-css.js';
|
|
45
|
+
|
|
46
|
+
// Template commands
|
|
47
|
+
import { templateListCommand } from '../src/commands/templates/template-list.js';
|
|
48
|
+
import { templateShowCommand } from '../src/commands/templates/template-show.js';
|
|
49
|
+
import { templateRenderCommand } from '../src/commands/templates/template-render.js';
|
|
50
|
+
import { templateCustomizeCommand } from '../src/commands/templates/template-customize.js';
|
|
51
|
+
import { templateValidateCommand } from '../src/commands/templates/template-validate.js';
|
|
52
|
+
|
|
53
|
+
// Agent commands
|
|
54
|
+
import { spawnTeamCommand } from '../src/commands/agents/spawn-team.js';
|
|
55
|
+
|
|
56
|
+
// Learning commands
|
|
57
|
+
import capturePatternProgram from '../src/commands/learning/capture-pattern.js';
|
|
58
|
+
import searchPatternsProgram from '../src/commands/learning/search-patterns.js';
|
|
59
|
+
|
|
60
|
+
// Utility commands
|
|
61
|
+
import troubleshootCommand from '../src/commands/utils/troubleshoot.js';
|
|
62
|
+
import { sessionSummaryCommand } from '../src/commands/utils/session-summary.js';
|
|
63
|
+
import migrateStateProgram from '../src/commands/utils/migrate-state.js';
|
|
64
|
+
import upgradeProgram from '../src/commands/utils/upgrade.js';
|
|
65
|
+
|
|
66
|
+
// Libraries
|
|
67
|
+
import { LearningSystem } from '../src/lib/learning/learning-system.js';
|
|
35
68
|
|
|
36
69
|
const __dirname = dirname(fileURLToPath(import.meta.url));
|
|
37
70
|
const pkg = JSON.parse(readFileSync(join(__dirname, '..', 'package.json'), 'utf8'));
|
|
@@ -90,6 +123,14 @@ program
|
|
|
90
123
|
.option('-i, --ids-only', 'Output only agent IDs (one per line)')
|
|
91
124
|
.action(detectAgentsCommand);
|
|
92
125
|
|
|
126
|
+
program
|
|
127
|
+
.command('detect-workflow <input...>')
|
|
128
|
+
.description('Detect appropriate workflow for a feature request')
|
|
129
|
+
.option('-v, --verbose', 'Show detailed detection reasoning')
|
|
130
|
+
.option('-j, --json', 'Output as JSON')
|
|
131
|
+
.option('-p, --project-path <path>', 'Project path (default: current directory)')
|
|
132
|
+
.action(detectWorkflowCommand);
|
|
133
|
+
|
|
93
134
|
program
|
|
94
135
|
.command('sync')
|
|
95
136
|
.description('Sync standards from feature decisions')
|
|
@@ -189,6 +230,13 @@ generateCommand
|
|
|
189
230
|
await generateContextCommand('.', feature);
|
|
190
231
|
});
|
|
191
232
|
|
|
233
|
+
generateCommand
|
|
234
|
+
.command('metadata <feature>')
|
|
235
|
+
.description('Generate metadata.json summary from markdown outputs')
|
|
236
|
+
.option('--output <path>', 'Custom output path')
|
|
237
|
+
.option('--verbose', 'Show detailed extraction info')
|
|
238
|
+
.action((feature, options) => generateMetadataCommand(feature, options));
|
|
239
|
+
|
|
192
240
|
// Validation commands (Sprint 4: Continuous Validation)
|
|
193
241
|
program
|
|
194
242
|
.command('validate [validator]')
|
|
@@ -321,6 +369,60 @@ learnCommand
|
|
|
321
369
|
console.log(chalk.green('\n✅ Knowledge base reset\n'));
|
|
322
370
|
});
|
|
323
371
|
|
|
372
|
+
// Template management commands
|
|
373
|
+
const templateCommand = program
|
|
374
|
+
.command('template')
|
|
375
|
+
.description('Template management (list | show | render | customize | validate)');
|
|
376
|
+
|
|
377
|
+
templateCommand
|
|
378
|
+
.command('list')
|
|
379
|
+
.description('List all available templates')
|
|
380
|
+
.option('--category <category>', 'Filter by category (documentation, code, infrastructure, context, examples)')
|
|
381
|
+
.option('--phase <phase>', 'Filter by phase (proposal, design, implement, etc.)')
|
|
382
|
+
.option('--stack <stack>', 'Filter by stack (blazor-azure, nextjs-supabase)')
|
|
383
|
+
.option('--required', 'Show only required templates')
|
|
384
|
+
.action(templateListCommand);
|
|
385
|
+
|
|
386
|
+
templateCommand
|
|
387
|
+
.command('show <template-id>')
|
|
388
|
+
.description('Show detailed information about a template')
|
|
389
|
+
.option('--show-path', 'Show resolved template file path')
|
|
390
|
+
.option('--preview', 'Show first 20 lines of template content')
|
|
391
|
+
.option('--stack <stack>', 'Stack for path resolution (default: blazor-azure)')
|
|
392
|
+
.option('--project-path <path>', 'Project path (default: current directory)')
|
|
393
|
+
.action(templateShowCommand);
|
|
394
|
+
|
|
395
|
+
templateCommand
|
|
396
|
+
.command('render <template-id> <output-path> <variables-json>')
|
|
397
|
+
.description('Render a template with variables')
|
|
398
|
+
.option('--dry-run', 'Preview without writing file')
|
|
399
|
+
.option('--stack <stack>', 'Stack for template resolution (default: blazor-azure)')
|
|
400
|
+
.option('--project-path <path>', 'Project path (default: current directory)')
|
|
401
|
+
.option('-v, --verbose', 'Show detailed output')
|
|
402
|
+
.action(templateRenderCommand);
|
|
403
|
+
|
|
404
|
+
templateCommand
|
|
405
|
+
.command('customize <template-id>')
|
|
406
|
+
.description('Copy framework template to project for customization')
|
|
407
|
+
.option('--stack <stack>', 'Target stack (default: blazor-azure)')
|
|
408
|
+
.option('--local', 'Copy to project .morph/templates/ instead of stack')
|
|
409
|
+
.option('--force', 'Overwrite existing customized template')
|
|
410
|
+
.option('--project-path <path>', 'Project path (default: current directory)')
|
|
411
|
+
.option('-v, --verbose', 'Show detailed output')
|
|
412
|
+
.action(templateCustomizeCommand);
|
|
413
|
+
|
|
414
|
+
templateCommand
|
|
415
|
+
.command('validate [template-id]')
|
|
416
|
+
.description('Validate template(s) for correct Handlebars syntax')
|
|
417
|
+
.option('--category <category>', 'Validate templates in specific category')
|
|
418
|
+
.option('--technology <technology>', 'Validate templates for specific technology')
|
|
419
|
+
.option('--include-deprecated', 'Include deprecated templates')
|
|
420
|
+
.option('--show-valid', 'Show valid templates in output')
|
|
421
|
+
.option('--strict', 'Exit with error on warnings')
|
|
422
|
+
.option('--project-path <path>', 'Project path (default: current directory)')
|
|
423
|
+
.option('-v, --verbose', 'Show detailed validation information')
|
|
424
|
+
.action(templateValidateCommand);
|
|
425
|
+
|
|
324
426
|
// Troubleshooting command
|
|
325
427
|
program
|
|
326
428
|
.command('troubleshoot <keywords...>')
|
|
@@ -365,6 +467,41 @@ program
|
|
|
365
467
|
.option('-v, --verbose', 'Show detailed output')
|
|
366
468
|
.action(rollbackPhaseCommand);
|
|
367
469
|
|
|
470
|
+
// Approval workflow commands (MORPH-SPEC 3.0)
|
|
471
|
+
program
|
|
472
|
+
.command('approve <feature> <gate>')
|
|
473
|
+
.description('Approve a phase gate (design, tasks, uiux, proposal)')
|
|
474
|
+
.option('--approver <name>', 'Name of approver (default: current user)')
|
|
475
|
+
.option('--notes <notes>', 'Approval notes')
|
|
476
|
+
.action((feature, gate, options) => approveCommand(feature, gate, options));
|
|
477
|
+
|
|
478
|
+
program
|
|
479
|
+
.command('reject <feature> <gate> [reason]')
|
|
480
|
+
.description('Reject a phase gate with optional reason')
|
|
481
|
+
.action((feature, gate, reason, options) => rejectCommand(feature, gate, reason, options));
|
|
482
|
+
|
|
483
|
+
program
|
|
484
|
+
.command('approval-status <feature>')
|
|
485
|
+
.description('Show approval status for all gates')
|
|
486
|
+
.option('--json', 'Output as JSON')
|
|
487
|
+
.action((feature, options) => approvalStatusCommand(feature, options));
|
|
488
|
+
|
|
489
|
+
// Agent team spawning (MORPH-SPEC 3.0)
|
|
490
|
+
program
|
|
491
|
+
.command('spawn-team <feature>')
|
|
492
|
+
.description('Generate agent team configuration for Task tool')
|
|
493
|
+
.option('--json', 'Output as JSON')
|
|
494
|
+
.option('--verbose', 'Show detailed team configuration')
|
|
495
|
+
.action((feature, options) => spawnTeamCommand(feature, options));
|
|
496
|
+
|
|
497
|
+
// Pattern learning system (MORPH-SPEC 3.0) - Add as subcommands
|
|
498
|
+
program.addCommand(capturePatternProgram);
|
|
499
|
+
program.addCommand(searchPatternsProgram);
|
|
500
|
+
|
|
501
|
+
// Migration and upgrade commands (MORPH-SPEC 3.0) - Add as subcommands
|
|
502
|
+
program.addCommand(migrateStateProgram);
|
|
503
|
+
program.addCommand(upgradeProgram);
|
|
504
|
+
|
|
368
505
|
// Wire global --stack flag to stack-resolver before any command executes
|
|
369
506
|
program.hook('preAction', () => {
|
|
370
507
|
const opts = program.opts();
|
package/bin/task-manager.cjs
CHANGED
|
@@ -138,6 +138,9 @@ class TaskManager {
|
|
|
138
138
|
// Save state
|
|
139
139
|
await this.saveState(state);
|
|
140
140
|
|
|
141
|
+
// Auto-generate metadata.json (for quick LLM access)
|
|
142
|
+
await this.generateMetadata(featureName, feature);
|
|
143
|
+
|
|
141
144
|
// Display progress
|
|
142
145
|
this.displayProgress(feature);
|
|
143
146
|
|
|
@@ -230,10 +233,40 @@ class TaskManager {
|
|
|
230
233
|
* Auto-checkpoint every 3 tasks (includes validation summary)
|
|
231
234
|
*/
|
|
232
235
|
async autoCheckpoint(feature, tasks, featureName) {
|
|
236
|
+
const tasksCompleted = feature.tasks?.completed || tasks.length;
|
|
237
|
+
const checkpointNum = Math.floor(tasksCompleted / 3);
|
|
238
|
+
|
|
239
|
+
console.log(chalk.magenta(`\n🔍 CHECKPOINT ${checkpointNum} - Running automated validation...`));
|
|
240
|
+
|
|
241
|
+
let checkpointResult = null;
|
|
233
242
|
let validationNote = '';
|
|
234
243
|
|
|
235
|
-
// Run
|
|
236
|
-
|
|
244
|
+
// Run checkpoint hooks (new enhanced validation system)
|
|
245
|
+
try {
|
|
246
|
+
const { runCheckpointHooks, shouldRunCheckpoint } = await import('../src/lib/checkpoint-hooks.js');
|
|
247
|
+
|
|
248
|
+
if (shouldRunCheckpoint(tasksCompleted, 3)) {
|
|
249
|
+
checkpointResult = await runCheckpointHooks(featureName, checkpointNum);
|
|
250
|
+
|
|
251
|
+
if (checkpointResult.passed) {
|
|
252
|
+
validationNote = ' | ✓ All validations passed';
|
|
253
|
+
} else {
|
|
254
|
+
validationNote = ` | ✗ ${checkpointResult.summary.errors} errors, ${checkpointResult.summary.warnings} warnings`;
|
|
255
|
+
|
|
256
|
+
// Check if we should block progress
|
|
257
|
+
const config = await this.loadCheckpointConfig();
|
|
258
|
+
if (config.checkpoints?.onFailure?.blockProgress && checkpointResult.summary.errors > 0) {
|
|
259
|
+
console.log(chalk.red('\n❌ Checkpoint FAILED - Fix violations before proceeding'));
|
|
260
|
+
throw new Error('Checkpoint validation failed');
|
|
261
|
+
}
|
|
262
|
+
}
|
|
263
|
+
}
|
|
264
|
+
} catch (error) {
|
|
265
|
+
if (error.message === 'Checkpoint validation failed') {
|
|
266
|
+
throw error; // Re-throw to block task completion
|
|
267
|
+
}
|
|
268
|
+
// Fallback to old validation if checkpoint-hooks not available
|
|
269
|
+
console.log(chalk.yellow('⚠️ Checkpoint hooks not available, using legacy validation'));
|
|
237
270
|
try {
|
|
238
271
|
const { runValidation } = await import('../src/lib/validation-runner.js');
|
|
239
272
|
const result = await runValidation('.', featureName, { verbose: false });
|
|
@@ -241,23 +274,84 @@ class TaskManager {
|
|
|
241
274
|
? ' | Validation: PASSED'
|
|
242
275
|
: ` | Validation: ${result.errors.length} errors, ${result.warnings.length} warnings`;
|
|
243
276
|
} catch {
|
|
244
|
-
//
|
|
277
|
+
// No validation available
|
|
245
278
|
}
|
|
246
279
|
}
|
|
247
280
|
|
|
281
|
+
// Create checkpoint record
|
|
248
282
|
const checkpoint = {
|
|
249
283
|
id: `CHECKPOINT_AUTO_${Date.now()}`,
|
|
250
284
|
timestamp: new Date().toISOString(),
|
|
251
285
|
tasksCompleted: tasks.map(t => t.id),
|
|
252
|
-
note: `Auto-checkpoint: ${tasks.length} tasks completed${validationNote}
|
|
286
|
+
note: `Auto-checkpoint: ${tasks.length} tasks completed${validationNote}`,
|
|
287
|
+
validationResults: checkpointResult?.results || null
|
|
253
288
|
};
|
|
254
289
|
|
|
255
290
|
feature.checkpoints = feature.checkpoints || [];
|
|
256
291
|
feature.checkpoints.push(checkpoint);
|
|
257
292
|
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
293
|
+
if (checkpointResult?.passed) {
|
|
294
|
+
console.log(chalk.green(`\n✅ Checkpoint ${checkpointNum} PASSED`));
|
|
295
|
+
} else if (checkpointResult) {
|
|
296
|
+
console.log(chalk.yellow(`\n⚠️ Checkpoint ${checkpointNum} completed with warnings`));
|
|
297
|
+
} else {
|
|
298
|
+
console.log(chalk.magenta(`\n🎉 Auto-checkpoint ${checkpointNum} reached!`));
|
|
299
|
+
}
|
|
300
|
+
}
|
|
301
|
+
|
|
302
|
+
/**
|
|
303
|
+
* Load checkpoint configuration from llm-interaction.json
|
|
304
|
+
*/
|
|
305
|
+
async loadCheckpointConfig() {
|
|
306
|
+
try {
|
|
307
|
+
const configPath = path.join(process.cwd(), '.morph/config/llm-interaction.json');
|
|
308
|
+
const content = await fs.readFile(configPath, 'utf-8');
|
|
309
|
+
return JSON.parse(content);
|
|
310
|
+
} catch {
|
|
311
|
+
// Return defaults if config doesn't exist
|
|
312
|
+
return {
|
|
313
|
+
checkpoints: {
|
|
314
|
+
frequency: 3,
|
|
315
|
+
autoValidate: true,
|
|
316
|
+
onFailure: {
|
|
317
|
+
blockProgress: false
|
|
318
|
+
}
|
|
319
|
+
}
|
|
320
|
+
};
|
|
321
|
+
}
|
|
322
|
+
}
|
|
323
|
+
|
|
324
|
+
/**
|
|
325
|
+
* Auto-generate metadata.json after task completion
|
|
326
|
+
*/
|
|
327
|
+
async generateMetadata(featureName, feature) {
|
|
328
|
+
try {
|
|
329
|
+
const config = await this.loadCheckpointConfig();
|
|
330
|
+
|
|
331
|
+
// Check if auto-generation is enabled
|
|
332
|
+
if (!config.metadata?.autoGenerate) {
|
|
333
|
+
return;
|
|
334
|
+
}
|
|
335
|
+
|
|
336
|
+
const { extractFeatureMetadata } = await import('../src/lib/metadata-extractor.js');
|
|
337
|
+
const metadata = extractFeatureMetadata(feature);
|
|
338
|
+
|
|
339
|
+
const outputPath = path.join(
|
|
340
|
+
process.cwd(),
|
|
341
|
+
`.morph/project/outputs/${featureName}/metadata.json`
|
|
342
|
+
);
|
|
343
|
+
|
|
344
|
+
// Ensure directory exists
|
|
345
|
+
const outputDir = path.dirname(outputPath);
|
|
346
|
+
await fs.mkdir(outputDir, { recursive: true });
|
|
347
|
+
|
|
348
|
+
// Write metadata
|
|
349
|
+
await fs.writeFile(outputPath, JSON.stringify(metadata, null, 2), 'utf-8');
|
|
350
|
+
|
|
351
|
+
console.log(chalk.gray(` 📊 Metadata updated: ${path.relative(process.cwd(), outputPath)}`));
|
|
352
|
+
} catch (error) {
|
|
353
|
+
// Don't block task completion if metadata generation fails
|
|
354
|
+
console.log(chalk.yellow(` ⚠️ Metadata generation failed: ${error.message}`));
|
|
261
355
|
}
|
|
262
356
|
}
|
|
263
357
|
|
package/bin/validate.js
CHANGED
|
@@ -20,7 +20,7 @@ import chalk from 'chalk';
|
|
|
20
20
|
import { validatePackages } from '../src/lib/validators/package-validator.js';
|
|
21
21
|
import { validateArchitecture } from '../src/lib/validators/architecture-validator.js';
|
|
22
22
|
import { validateContrast } from '../src/lib/validators/ui-contrast-validator.js';
|
|
23
|
-
import { LearningSystem } from '../src/lib/learning-system.js';
|
|
23
|
+
import { LearningSystem } from '../src/lib/learning/learning-system.js';
|
|
24
24
|
|
|
25
25
|
const VALIDATORS = {
|
|
26
26
|
packages: {
|