@polymorphism-tech/morph-spec 4.7.2 → 4.8.4
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/LICENSE +1 -2
- package/README.md +379 -414
- package/bin/morph-spec.js +57 -394
- package/bin/validate.js +2 -26
- package/claude-plugin.json +2 -2
- package/docs/CHEATSHEET.md +203 -221
- package/docs/QUICKSTART.md +2 -8
- package/framework/CLAUDE.md +1 -1
- package/framework/commands/morph-proposal.md +3 -3
- package/framework/hooks/README.md +2 -5
- package/framework/hooks/claude-code/pre-tool-use/protect-readonly-files.js +4 -55
- package/framework/hooks/claude-code/session-start/inject-morph-context.js +20 -5
- package/framework/hooks/claude-code/statusline.py +6 -1
- package/framework/hooks/dev/check-sync-health.js +117 -0
- package/framework/hooks/dev/guard-version-numbers.js +57 -0
- package/framework/hooks/dev/sync-standards-registry.js +60 -0
- package/framework/hooks/dev/sync-template-registry.js +60 -0
- package/framework/hooks/dev/validate-skill-format.js +70 -0
- package/framework/hooks/dev/validate-standard-format.js +73 -0
- package/framework/hooks/shared/payload-utils.js +39 -0
- package/framework/hooks/shared/state-reader.js +25 -1
- package/framework/rules/morph-workflow.md +1 -1
- package/framework/skills/level-0-meta/morph-init/SKILL.md +216 -0
- package/framework/skills/level-0-meta/morph-replicate/SKILL.md +4 -4
- package/framework/skills/level-0-meta/tool-usage-guide/SKILL.md +4 -4
- package/framework/skills/level-0-meta/verification-before-completion/SKILL.md +1 -1
- package/framework/skills/level-1-workflows/phase-clarify/SKILL.md +192 -191
- package/framework/skills/level-1-workflows/phase-codebase-analysis/SKILL.md +181 -180
- package/framework/skills/level-1-workflows/phase-design/SKILL.md +339 -338
- package/framework/skills/level-1-workflows/phase-implement/SKILL.md +254 -253
- package/framework/skills/level-1-workflows/phase-setup/SKILL.md +168 -170
- package/framework/skills/level-1-workflows/phase-tasks/SKILL.md +284 -283
- package/framework/skills/level-1-workflows/phase-uiux/SKILL.md +246 -245
- package/framework/templates/examples/design-system-examples.md +1 -1
- package/framework/templates/ui/FluentDesignTheme.cs +1 -1
- package/framework/templates/ui/MudTheme.cs +1 -1
- package/framework/templates/ui/design-system.css +1 -1
- package/package.json +7 -5
- package/src/commands/agents/index.js +1 -2
- package/src/commands/index.js +13 -16
- package/src/commands/project/doctor.js +100 -14
- package/src/commands/project/index.js +7 -10
- package/src/commands/project/init.js +398 -528
- package/src/commands/project/install-plugin-cmd.js +28 -0
- package/src/commands/project/setup-infra-cmd.js +12 -0
- package/src/commands/project/tutorial.js +115 -0
- package/src/commands/state/approve.js +213 -221
- package/src/commands/state/index.js +0 -1
- package/src/commands/state/state.js +337 -365
- package/src/commands/templates/index.js +0 -4
- package/src/commands/trust/trust.js +1 -93
- package/src/commands/utils/index.js +1 -5
- package/src/commands/validation/index.js +1 -5
- package/src/core/registry/command-registry.js +11 -285
- package/src/core/state/state-manager.js +5 -2
- package/src/lib/detectors/index.js +81 -87
- package/src/lib/detectors/structure-detector.js +275 -273
- package/src/lib/generators/recap-generator.js +232 -225
- package/src/scripts/global-install.js +34 -0
- package/src/scripts/install-plugin.js +126 -0
- package/src/scripts/setup-infra.js +203 -0
- package/src/utils/agents-installer.js +10 -1
- package/src/utils/hooks-installer.js +66 -3
- package/.morph/.morphversion +0 -5
- package/.morph/analytics/threads-log.jsonl +0 -5
- package/.morph/config/config.json +0 -8
- package/.morph/framework/agents.json +0 -1815
- package/.morph/framework/hooks/README.md +0 -205
- package/.morph/framework/hooks/claude-code/notification/approval-reminder.js +0 -54
- package/.morph/framework/hooks/claude-code/post-tool-use/dispatch.js +0 -83
- package/.morph/framework/hooks/claude-code/post-tool-use/handle-tool-failure.js +0 -42
- package/.morph/framework/hooks/claude-code/pre-compact/save-morph-context.js +0 -61
- package/.morph/framework/hooks/claude-code/pre-tool-use/enforce-phase-writes.js +0 -71
- package/.morph/framework/hooks/claude-code/pre-tool-use/protect-readonly-files.js +0 -58
- package/.morph/framework/hooks/claude-code/pre-tool-use/protect-spec-files.js +0 -64
- package/.morph/framework/hooks/claude-code/session-start/inject-morph-context.js +0 -94
- package/.morph/framework/hooks/claude-code/statusline.py +0 -538
- package/.morph/framework/hooks/claude-code/statusline.sh +0 -7
- package/.morph/framework/hooks/claude-code/stop/validate-completion.js +0 -88
- package/.morph/framework/hooks/claude-code/user-prompt/enrich-prompt.js +0 -91
- package/.morph/framework/hooks/git/commit-msg/conventional-commits.sh +0 -33
- package/.morph/framework/hooks/git/pre-commit/agents.sh +0 -25
- package/.morph/framework/hooks/git/pre-commit/orchestrator.sh +0 -64
- package/.morph/framework/hooks/git/pre-commit/specs.sh +0 -50
- package/.morph/framework/hooks/git/pre-push/run-tests.sh +0 -44
- package/.morph/framework/hooks/shared/hook-response.js +0 -45
- package/.morph/framework/hooks/shared/phase-utils.js +0 -129
- package/.morph/framework/hooks/shared/state-reader.js +0 -138
- package/.morph/framework/hooks/shared/stdin-reader.js +0 -26
- package/.morph/framework/standards/STANDARDS.json +0 -933
- package/.morph/framework/standards/ai-agents/blazor-ui.md +0 -364
- package/.morph/framework/standards/ai-agents/production.md +0 -415
- package/.morph/framework/standards/ai-agents/setup.md +0 -418
- package/.morph/framework/standards/ai-agents/team-orchestration.md +0 -479
- package/.morph/framework/standards/ai-agents/workflows.md +0 -354
- package/.morph/framework/standards/architecture/ddd/aggregates.md +0 -120
- package/.morph/framework/standards/architecture/ddd/bounded-contexts.md +0 -105
- package/.morph/framework/standards/architecture/ddd/complexity-levels.md +0 -108
- package/.morph/framework/standards/architecture/ddd/entities.md +0 -99
- package/.morph/framework/standards/architecture/ddd/ubiquitous-language.md +0 -58
- package/.morph/framework/standards/architecture/ddd/value-objects.md +0 -124
- package/.morph/framework/standards/backend/api/minimal-api.md +0 -494
- package/.morph/framework/standards/backend/api/rest.md +0 -492
- package/.morph/framework/standards/backend/api/validation.md +0 -88
- package/.morph/framework/standards/backend/authentication/passkeys.md +0 -428
- package/.morph/framework/standards/backend/database/ef-core.md +0 -199
- package/.morph/framework/standards/backend/database/migrations.md +0 -393
- package/.morph/framework/standards/backend/database/postgresql/database.md +0 -352
- package/.morph/framework/standards/backend/database/repository-patterns.md +0 -528
- package/.morph/framework/standards/backend/database/vector-search-rag.md +0 -541
- package/.morph/framework/standards/backend/dotnet/async.md +0 -366
- package/.morph/framework/standards/backend/dotnet/core.md +0 -117
- package/.morph/framework/standards/backend/dotnet/di.md +0 -439
- package/.morph/framework/standards/backend/dotnet/program-cs-checklist.md +0 -92
- package/.morph/framework/standards/backend/integrations/asaas/asaas-api.md +0 -216
- package/.morph/framework/standards/backend/integrations/clerk/clerk-auth.md +0 -290
- package/.morph/framework/standards/backend/integrations/hangfire/hangfire-jobs.md +0 -350
- package/.morph/framework/standards/backend/integrations/resend/resend-email.md +0 -385
- package/.morph/framework/standards/context/analytics.md +0 -96
- package/.morph/framework/standards/context/bundles.md +0 -110
- package/.morph/framework/standards/context/priming.md +0 -78
- package/.morph/framework/standards/core/architecture.md +0 -185
- package/.morph/framework/standards/core/coding.md +0 -214
- package/.morph/framework/standards/core/git-branching-strategy.md +0 -403
- package/.morph/framework/standards/core/git.md +0 -185
- package/.morph/framework/standards/core/testing.md +0 -295
- package/.morph/framework/standards/data/nosql/blob-storage.md +0 -102
- package/.morph/framework/standards/data/nosql/cache/redis.md +0 -97
- package/.morph/framework/standards/data/nosql/cosmos-db.md +0 -118
- package/.morph/framework/standards/data/vector-search/azure-ai-search.md +0 -121
- package/.morph/framework/standards/data/vector-search/rag-chunking.md +0 -104
- package/.morph/framework/standards/frontend/blazor/design-checklist.md +0 -222
- package/.morph/framework/standards/frontend/blazor/fluent-ui-setup.md +0 -595
- package/.morph/framework/standards/frontend/blazor/fluent-ui.md +0 -137
- package/.morph/framework/standards/frontend/blazor/html-conversion.md +0 -184
- package/.morph/framework/standards/frontend/blazor/lifecycle.md +0 -195
- package/.morph/framework/standards/frontend/blazor/pitfalls.md +0 -198
- package/.morph/framework/standards/frontend/blazor/state.md +0 -191
- package/.morph/framework/standards/frontend/design-system/animations.md +0 -151
- package/.morph/framework/standards/frontend/design-system/naming.md +0 -64
- package/.morph/framework/standards/frontend/nextjs/app-router.md +0 -123
- package/.morph/framework/standards/frontend/nextjs/components.md +0 -132
- package/.morph/framework/standards/frontend/nextjs/data-fetching.md +0 -126
- package/.morph/framework/standards/frontend/nextjs/forms.md +0 -128
- package/.morph/framework/standards/frontend/nextjs/naming-conventions.md +0 -67
- package/.morph/framework/standards/frontend/nextjs/nextjs-patterns.md +0 -215
- package/.morph/framework/standards/frontend/nextjs/project-structure.md +0 -102
- package/.morph/framework/standards/frontend/nextjs/state-management.md +0 -72
- package/.morph/framework/standards/frontend/nextjs/testing.md +0 -111
- package/.morph/framework/standards/infrastructure/azure/azure.md +0 -624
- package/.morph/framework/standards/infrastructure/azure/bicep/bicep-patterns.md +0 -422
- package/.morph/framework/standards/infrastructure/azure/devops/azure-devops-setup.md +0 -516
- package/.morph/framework/standards/infrastructure/azure/devops/local-development.md +0 -520
- package/.morph/framework/standards/infrastructure/azure/services/functions.md +0 -486
- package/.morph/framework/standards/infrastructure/azure/services/service-bus.md +0 -459
- package/.morph/framework/standards/infrastructure/azure/services/storage.md +0 -407
- package/.morph/framework/standards/infrastructure/docker/easypanel-deploy.md +0 -196
- package/.morph/framework/standards/infrastructure/supabase/mcp-setup.md +0 -252
- package/.morph/framework/standards/infrastructure/supabase/supabase-auth.md +0 -176
- package/.morph/framework/standards/infrastructure/supabase/supabase-pgvector.md +0 -169
- package/.morph/framework/standards/infrastructure/supabase/supabase-rls.md +0 -184
- package/.morph/framework/standards/infrastructure/supabase/supabase-storage.md +0 -153
- package/.morph/framework/standards/integration/api/graphql.md +0 -91
- package/.morph/framework/standards/integration/api/grpc.md +0 -114
- package/.morph/framework/standards/integration/api/rest-design.md +0 -95
- package/.morph/framework/standards/integration/event-driven/cqrs.md +0 -101
- package/.morph/framework/standards/integration/event-driven/event-sourcing.md +0 -124
- package/.morph/framework/standards/integration/event-driven/service-bus.md +0 -95
- package/.morph/framework/standards/integration/mcp/mcp-tools.md +0 -384
- package/.morph/framework/standards/observability/logging.md +0 -131
- package/.morph/framework/standards/observability/metrics.md +0 -121
- package/.morph/framework/standards/observability/monitoring.md +0 -114
- package/.morph/framework/standards/observability/tracing.md +0 -132
- package/.morph/framework/standards/workflows/parallel-execution.md +0 -112
- package/.morph/framework/standards/workflows/thread-management.md +0 -113
- package/.morph/framework/templates/.idea/morph-templates.xml +0 -92
- package/.morph/framework/templates/.vscode/morph-templates.code-snippets +0 -186
- package/.morph/framework/templates/IDE-SNIPPETS.md +0 -266
- package/.morph/framework/templates/README.md +0 -814
- package/.morph/framework/templates/REGISTRY.json +0 -1888
- package/.morph/framework/templates/code/dotnet/backend/repository.cs +0 -141
- package/.morph/framework/templates/code/dotnet/backend/service.cs +0 -139
- package/.morph/framework/templates/code/dotnet/contracts/Commands.cs +0 -74
- package/.morph/framework/templates/code/dotnet/contracts/Entities.cs +0 -25
- package/.morph/framework/templates/code/dotnet/contracts/Queries.cs +0 -74
- package/.morph/framework/templates/code/dotnet/contracts/README.md +0 -74
- package/.morph/framework/templates/code/dotnet/contracts/api-contracts.cs +0 -173
- package/.morph/framework/templates/code/dotnet/contracts/contracts-level1.cs +0 -69
- package/.morph/framework/templates/code/dotnet/contracts/contracts-level2.cs +0 -86
- package/.morph/framework/templates/code/dotnet/contracts/contracts-level3.cs +0 -41
- package/.morph/framework/templates/code/dotnet/database/migration.cs +0 -83
- package/.morph/framework/templates/code/dotnet/frontend/component.razor +0 -239
- package/.morph/framework/templates/code/dotnet/jobs/agent.cs +0 -163
- package/.morph/framework/templates/code/dotnet/jobs/job.cs +0 -171
- package/.morph/framework/templates/code/dotnet/test.cs +0 -239
- package/.morph/framework/templates/code/sql/rls-policy.sql +0 -57
- package/.morph/framework/templates/code/sql/supabase-migration.sql +0 -100
- package/.morph/framework/templates/code/sql/supabase-migration.template.sql +0 -113
- package/.morph/framework/templates/code/typescript/contracts.ts +0 -168
- package/.morph/framework/templates/context/CONTEXT-FEATURE.md +0 -276
- package/.morph/framework/templates/context/CONTEXT.md +0 -181
- package/.morph/framework/templates/docs/clarifications.md +0 -253
- package/.morph/framework/templates/docs/onboarding.md +0 -123
- package/.morph/framework/templates/docs/proposal.md +0 -182
- package/.morph/framework/templates/docs/schema-analysis.md +0 -119
- package/.morph/framework/templates/docs/spec.md +0 -198
- package/.morph/framework/templates/docs/ui-components.md +0 -124
- package/.morph/framework/templates/docs/ui-design-system.md +0 -76
- package/.morph/framework/templates/docs/ui-flows.md +0 -167
- package/.morph/framework/templates/docs/ui-mockups.md +0 -98
- package/.morph/framework/templates/docs/user-stories.md +0 -34
- package/.morph/framework/templates/examples/design-system-examples.md +0 -357
- package/.morph/framework/templates/examples/spec-examples.md +0 -90
- package/.morph/framework/templates/feature/decisions.md +0 -187
- package/.morph/framework/templates/feature/recap.md +0 -146
- package/.morph/framework/templates/feature/tasks.md +0 -199
- package/.morph/framework/templates/frontend/nextjs/Dockerfile.nextjs.hbs +0 -43
- package/.morph/framework/templates/frontend/nextjs/client-component.tsx.hbs +0 -26
- package/.morph/framework/templates/frontend/nextjs/env.mjs.hbs +0 -32
- package/.morph/framework/templates/frontend/nextjs/feature-form.tsx.hbs +0 -56
- package/.morph/framework/templates/frontend/nextjs/page.tsx.hbs +0 -22
- package/.morph/framework/templates/frontend/nextjs/tsconfig.json.hbs +0 -26
- package/.morph/framework/templates/frontend/nextjs/use-feature.ts.hbs +0 -54
- package/.morph/framework/templates/infrastructure/azure/Dockerfile.example +0 -82
- package/.morph/framework/templates/infrastructure/azure/README.md +0 -286
- package/.morph/framework/templates/infrastructure/azure/app-insights.bicep +0 -63
- package/.morph/framework/templates/infrastructure/azure/app-service.bicep +0 -164
- package/.morph/framework/templates/infrastructure/azure/container-app-env.bicep +0 -49
- package/.morph/framework/templates/infrastructure/azure/container-app.bicep +0 -156
- package/.morph/framework/templates/infrastructure/azure/deploy-checklist.md +0 -426
- package/.morph/framework/templates/infrastructure/azure/deploy.ps1 +0 -229
- package/.morph/framework/templates/infrastructure/azure/deploy.sh +0 -208
- package/.morph/framework/templates/infrastructure/azure/key-vault.bicep +0 -91
- package/.morph/framework/templates/infrastructure/azure/main.bicep +0 -189
- package/.morph/framework/templates/infrastructure/azure/parameters.dev.json +0 -29
- package/.morph/framework/templates/infrastructure/azure/parameters.prod.json +0 -29
- package/.morph/framework/templates/infrastructure/azure/parameters.staging.json +0 -29
- package/.morph/framework/templates/infrastructure/azure/sql-database.bicep +0 -103
- package/.morph/framework/templates/infrastructure/azure/storage.bicep +0 -106
- package/.morph/framework/templates/infrastructure/docker/Dockerfile.template +0 -58
- package/.morph/framework/templates/infrastructure/docker/docker-compose.template.yml +0 -67
- package/.morph/framework/templates/infrastructure/docker/dockerfile-api.dockerfile +0 -38
- package/.morph/framework/templates/infrastructure/docker/dockerfile-web.dockerfile +0 -48
- package/.morph/framework/templates/infrastructure/docker/easypanel.template.json +0 -54
- package/.morph/framework/templates/infrastructure/github/README.md +0 -593
- package/.morph/framework/templates/infrastructure/github/actions/azure-auth/action.yml.hbs +0 -22
- package/.morph/framework/templates/infrastructure/github/actions/docker-build-push/action.yml.hbs +0 -45
- package/.morph/framework/templates/infrastructure/github/actions/health-check/action.yml.hbs +0 -27
- package/.morph/framework/templates/infrastructure/github/workflows/deploy-azure-app-service.yml.hbs +0 -61
- package/.morph/framework/templates/infrastructure/github/workflows/deploy-easypanel.yml.hbs +0 -31
- package/.morph/framework/templates/infrastructure/github/workflows/docker-build-push.yml.hbs +0 -59
- package/.morph/framework/templates/infrastructure/github/workflows/dotnet-build.yml.hbs +0 -39
- package/.morph/framework/templates/integrations/asaas-client.cs +0 -387
- package/.morph/framework/templates/integrations/asaas-webhook.cs +0 -351
- package/.morph/framework/templates/integrations/azure-identity-config.cs +0 -288
- package/.morph/framework/templates/integrations/clerk-config.cs +0 -258
- package/.morph/framework/templates/meta-prompts/fusion/fusion-agent.md +0 -76
- package/.morph/framework/templates/meta-prompts/fusion/fusion-aggregator.md +0 -100
- package/.morph/framework/templates/meta-prompts/hops/hop-retry.md +0 -78
- package/.morph/framework/templates/meta-prompts/hops/hop-validation.md +0 -97
- package/.morph/framework/templates/meta-prompts/hops/hop-wrapper.md +0 -36
- package/.morph/framework/templates/meta-prompts/parallel-workers/parallel-coordinator.md +0 -113
- package/.morph/framework/templates/meta-prompts/parallel-workers/parallel-worker.md +0 -80
- package/.morph/framework/templates/meta-prompts/squad-leaders/backend-squad.md +0 -90
- package/.morph/framework/templates/meta-prompts/squad-leaders/frontend-squad.md +0 -126
- package/.morph/framework/templates/meta-prompts/squad-leaders/squad-leader.md +0 -43
- package/.morph/framework/templates/meta-prompts/validators/checkpoint-validator.md +0 -107
- package/.morph/framework/templates/meta-prompts/validators/pre-commit-validator.md +0 -95
- package/.morph/framework/templates/project-structure/dotnet-ddd.md +0 -70
- package/.morph/framework/templates/saas/subscription.cs +0 -347
- package/.morph/framework/templates/saas/tenant.cs +0 -338
- package/.morph/framework/templates/state.template.json +0 -17
- package/.morph/framework/templates/ui/FluentDesignTheme.cs +0 -149
- package/.morph/framework/templates/ui/MudTheme.cs +0 -281
- package/.morph/framework/templates/ui/design-system.css +0 -226
- package/.morph/logs/tool-failures.log +0 -17
- package/.morph/memory/pre-compact-2026-02-24T17-43-30-049Z.json +0 -16
- package/.morph/plans/eager-watching-bunny.md +0 -105
- package/.morph/plans/temporal-seeking-nebula.md +0 -45
- package/.morph/state.json +0 -48
- package/CLAUDE.md +0 -77
- package/docs/ARCHITECTURE.md +0 -331
- package/docs/COMMAND-FLOWS.md +0 -368
- package/docs/claude-alignment-report.md +0 -137
- package/docs/examples/order-management/contracts.cs +0 -84
- package/docs/examples/order-management/proposal.md +0 -24
- package/docs/examples/order-management/spec.md +0 -162
- package/docs/plans/2026-02-22-claude-docs-morph-alignment-analysis.md +0 -512
- package/docs/plans/2026-02-22-claude-settings.md +0 -515
- package/docs/plans/2026-02-22-morph-cc-alignment-impl.md +0 -728
- package/docs/plans/2026-02-22-morph-spec-next.md +0 -478
- package/docs/plans/2026-02-22-native-alignment-design.md +0 -199
- package/docs/plans/2026-02-22-native-alignment-impl.md +0 -925
- package/docs/plans/2026-02-22-native-enrichment-design.md +0 -244
- package/docs/plans/2026-02-22-native-enrichment.md +0 -735
- package/docs/plans/2026-02-23-ddd-architecture-refactor.md +0 -1153
- package/docs/plans/2026-02-23-ddd-nextsteps.md +0 -682
- package/docs/plans/2026-02-23-infra-architect-refactor.md +0 -437
- package/docs/plans/2026-02-23-nextjs-code-review-design.md +0 -156
- package/docs/plans/2026-02-23-nextjs-code-review-impl.md +0 -1254
- package/docs/plans/2026-02-23-nextjs-standards-design.md +0 -149
- package/docs/plans/2026-02-23-nextjs-standards-impl.md +0 -1846
- package/scripts/generate-refs.js +0 -336
- package/scripts/generate-standards-registry.js +0 -44
- package/scripts/scan-nextjs.mjs +0 -169
- package/scripts/validate-real.mjs +0 -255
- package/src/commands/feature/create-story.js +0 -362
- package/src/commands/feature/index.js +0 -6
- package/src/commands/feature/shard-spec.js +0 -225
- package/src/commands/feature/sprint-status.js +0 -250
- package/src/commands/generation/generate-onboarding.js +0 -169
- package/src/commands/generation/generate.js +0 -276
- package/src/commands/generation/index.js +0 -5
- package/src/commands/learning/capture-pattern.js +0 -121
- package/src/commands/learning/index.js +0 -5
- package/src/commands/learning/search-patterns.js +0 -126
- package/src/commands/mcp/mcp.js +0 -102
- package/src/commands/project/changes.js +0 -66
- package/src/commands/project/cost.js +0 -179
- package/src/commands/project/diff.js +0 -278
- package/src/commands/project/revert.js +0 -173
- package/src/commands/project/standards.js +0 -80
- package/src/commands/project/sync.js +0 -167
- package/src/commands/project/update-agents.js +0 -23
- package/src/commands/state/rollback-phase.js +0 -185
- package/src/commands/templates/template-customize.js +0 -87
- package/src/commands/templates/template-list.js +0 -114
- package/src/commands/templates/template-show.js +0 -129
- package/src/commands/templates/template-validate.js +0 -91
- package/src/commands/utils/troubleshoot.js +0 -222
- package/src/commands/validation/analyze-blazor-concurrency.js +0 -193
- package/src/commands/validation/lint-fluent.js +0 -352
- package/src/commands/validation/validate-blazor-state.js +0 -210
- package/src/commands/validation/validate-blazor.js +0 -156
- package/src/commands/validation/validate-css.js +0 -84
- package/src/lib/detectors/conversation-analyzer.js +0 -163
- package/src/lib/learning/index.js +0 -7
- package/src/lib/learning/learning-system.js +0 -520
- package/src/lib/troubleshooting/index.js +0 -8
- package/src/lib/troubleshooting/troubleshoot-grep.js +0 -198
- package/src/lib/troubleshooting/troubleshoot-index.js +0 -144
- package/src/llm/environment-detector.js +0 -43
package/bin/morph-spec.js
CHANGED
|
@@ -8,75 +8,36 @@ import { readFileSync } from 'fs';
|
|
|
8
8
|
|
|
9
9
|
// Project commands
|
|
10
10
|
import { initCommand } from '../src/commands/project/init.js';
|
|
11
|
+
import { setupInfraCommand } from '../src/commands/project/setup-infra-cmd.js';
|
|
12
|
+
import { installPluginCommand } from '../src/commands/project/install-plugin-cmd.js';
|
|
11
13
|
import { updateCommand } from '../src/commands/project/update.js';
|
|
12
|
-
import { updateAgentsCommand } from '../src/commands/project/update-agents.js';
|
|
13
14
|
import { doctorCommand } from '../src/commands/project/doctor.js';
|
|
15
|
+
import { tutorialCommand } from '../src/commands/project/tutorial.js';
|
|
14
16
|
|
|
15
|
-
import { syncCommand } from '../src/commands/project/sync.js';
|
|
16
17
|
import { statusCommand } from '../src/commands/project/status.js';
|
|
17
|
-
import { diffCommand, diffSaveCommand } from '../src/commands/project/diff.js';
|
|
18
|
-
import { costCommand } from '../src/commands/project/cost.js';
|
|
19
|
-
import { revertCommand } from '../src/commands/project/revert.js';
|
|
20
18
|
import { checkpointSaveCommand, checkpointRestoreCommand, checkpointListCommand } from '../src/commands/project/checkpoint.js';
|
|
21
19
|
|
|
22
|
-
import { changesCommand } from '../src/commands/project/changes.js';
|
|
23
|
-
|
|
24
|
-
// Feature commands
|
|
25
|
-
import { createStoryCommand } from '../src/commands/feature/create-story.js';
|
|
26
|
-
import { shardSpecCommand } from '../src/commands/feature/shard-spec.js';
|
|
27
|
-
import { sprintStatusCommand } from '../src/commands/feature/sprint-status.js';
|
|
28
|
-
|
|
29
20
|
// State commands
|
|
30
21
|
import { stateCommand } from '../src/commands/state/state.js';
|
|
31
22
|
import { validatePhaseCommand } from '../src/commands/state/validate-phase.js';
|
|
32
|
-
import { rollbackPhaseCommand } from '../src/commands/state/rollback-phase.js';
|
|
33
23
|
import { advancePhaseCommand } from '../src/commands/state/advance-phase.js';
|
|
34
|
-
import { approveCommand,
|
|
24
|
+
import { approveCommand, approvalStatusCommand, unapproveCommand } from '../src/commands/state/approve.js';
|
|
35
25
|
|
|
36
26
|
// Task commands
|
|
37
27
|
import { taskDoneCommand, taskStartCommand, taskNextCommand } from '../src/commands/tasks/task.js';
|
|
38
28
|
|
|
39
|
-
// Generation commands
|
|
40
|
-
import { generateDesignSystemCommand, generateMetadataCommand } from '../src/commands/generation/generate.js';
|
|
41
|
-
import { generateOnboardingCommand } from '../src/commands/generation/generate-onboarding.js';
|
|
42
|
-
|
|
43
29
|
// Validation commands
|
|
44
30
|
import { validateCommand } from './validate.js';
|
|
45
|
-
import { validateBlazorCommand } from '../src/commands/validation/validate-blazor.js';
|
|
46
|
-
import { lintFluentCommand } from '../src/commands/validation/lint-fluent.js';
|
|
47
|
-
import { analyzeBlazorConcurrencyCommand } from '../src/commands/validation/analyze-blazor-concurrency.js';
|
|
48
|
-
import { validateBlazorStateCommand } from '../src/commands/validation/validate-blazor-state.js';
|
|
49
|
-
import { validateCssCommand } from '../src/commands/validation/validate-css.js';
|
|
50
31
|
import { validateFeatureCommand } from '../src/commands/validation/validate-feature.js';
|
|
51
32
|
|
|
52
33
|
// Template commands
|
|
53
|
-
import { templateListCommand } from '../src/commands/templates/template-list.js';
|
|
54
|
-
import { templateShowCommand } from '../src/commands/templates/template-show.js';
|
|
55
34
|
import { templateRenderCommand } from '../src/commands/templates/template-render.js';
|
|
56
|
-
import { templateCustomizeCommand } from '../src/commands/templates/template-customize.js';
|
|
57
|
-
import { templateValidateCommand } from '../src/commands/templates/template-validate.js';
|
|
58
|
-
|
|
59
|
-
// Agent commands
|
|
60
35
|
|
|
61
|
-
//
|
|
62
|
-
import capturePatternProgram from '../src/commands/learning/capture-pattern.js';
|
|
63
|
-
import searchPatternsProgram from '../src/commands/learning/search-patterns.js';
|
|
64
|
-
|
|
65
|
-
// Utility commands
|
|
66
|
-
import troubleshootCommand from '../src/commands/utils/troubleshoot.js';
|
|
67
|
-
|
|
68
|
-
// Context Optimization commands
|
|
69
|
-
import { mcpOptimizeCommand, mcpListCommand } from '../src/commands/mcp/mcp.js';
|
|
36
|
+
// MCP commands
|
|
70
37
|
import { mcpSetupCommand } from '../src/commands/mcp/mcp-setup.js';
|
|
71
38
|
|
|
72
39
|
// Trust commands
|
|
73
|
-
import {
|
|
74
|
-
trustStatusCommand, trustSetCommand, trustHistoryCommand,
|
|
75
|
-
trustAutoCalculateCommand, trustClearCommand
|
|
76
|
-
} from '../src/commands/trust/trust.js';
|
|
77
|
-
|
|
78
|
-
// Libraries
|
|
79
|
-
import { LearningSystem } from '../src/lib/learning/learning-system.js';
|
|
40
|
+
import { trustStatusCommand, trustSetCommand } from '../src/commands/trust/trust.js';
|
|
80
41
|
|
|
81
42
|
const __dirname = dirname(fileURLToPath(import.meta.url));
|
|
82
43
|
const pkg = JSON.parse(readFileSync(join(__dirname, '..', 'package.json'), 'utf8'));
|
|
@@ -107,6 +68,17 @@ program
|
|
|
107
68
|
.option('--skip-mcp', 'Skip MCP server auto-setup')
|
|
108
69
|
.action(initCommand);
|
|
109
70
|
|
|
71
|
+
program
|
|
72
|
+
.command('setup-infra')
|
|
73
|
+
.description('Install MORPH-SPEC infrastructure (headless, no prompts). Called by /morph-init skill.')
|
|
74
|
+
.option('-p, --path <path>', 'Target path (default: current directory)')
|
|
75
|
+
.action(setupInfraCommand);
|
|
76
|
+
|
|
77
|
+
program
|
|
78
|
+
.command('install-plugin <name>')
|
|
79
|
+
.description('Install a Claude Code plugin (superpowers, context7). Called by /morph-init skill.')
|
|
80
|
+
.action(installPluginCommand);
|
|
81
|
+
|
|
110
82
|
program
|
|
111
83
|
.command('update')
|
|
112
84
|
.description('Update MORPH templates and standards to latest version')
|
|
@@ -114,11 +86,6 @@ program
|
|
|
114
86
|
.option('--standards', 'Update only standards')
|
|
115
87
|
.action(updateCommand);
|
|
116
88
|
|
|
117
|
-
program
|
|
118
|
-
.command('update-agents')
|
|
119
|
-
.description('Refresh .claude/agents/ with latest morph orchestrator and domain agents')
|
|
120
|
-
.action(updateAgentsCommand);
|
|
121
|
-
|
|
122
89
|
program
|
|
123
90
|
.command('doctor')
|
|
124
91
|
.description('Check MORPH installation health')
|
|
@@ -127,11 +94,9 @@ program
|
|
|
127
94
|
.action(doctorCommand);
|
|
128
95
|
|
|
129
96
|
program
|
|
130
|
-
.command('
|
|
131
|
-
.description('
|
|
132
|
-
.
|
|
133
|
-
.option('--dry-run', 'Show what would be synced without updating files')
|
|
134
|
-
.action(syncCommand);
|
|
97
|
+
.command('tutorial')
|
|
98
|
+
.description('Learn the MORPH-SPEC workflow — phase pipeline and getting started')
|
|
99
|
+
.action(tutorialCommand);
|
|
135
100
|
|
|
136
101
|
program
|
|
137
102
|
.command('status <feature>')
|
|
@@ -140,43 +105,10 @@ program
|
|
|
140
105
|
.option('-v, --verbose', 'Show detailed output')
|
|
141
106
|
.action(statusCommand);
|
|
142
107
|
|
|
143
|
-
program
|
|
144
|
-
.command('changes <feature>')
|
|
145
|
-
.description('List files created/modified by a feature, grouped by phase')
|
|
146
|
-
.option('--json', 'Output as JSON')
|
|
147
|
-
.action((feature, options) => changesCommand(feature, options));
|
|
148
|
-
|
|
149
|
-
// Story-driven development commands
|
|
150
|
-
const storyCommand = program
|
|
151
|
-
.command('story')
|
|
152
|
-
.description('Story-driven development commands');
|
|
153
|
-
|
|
154
|
-
storyCommand
|
|
155
|
-
.command('create <feature> <story-id>')
|
|
156
|
-
.description('Create a new story with auto-injected Dev Notes')
|
|
157
|
-
.option('--title <title>', 'Story title')
|
|
158
|
-
.option('--epic <epic>', 'Epic name')
|
|
159
|
-
.option('--context <context>', 'Story context')
|
|
160
|
-
.option('--tasks <tasks>', 'Comma-separated tasks')
|
|
161
|
-
.option('--dry-run', 'Preview without writing file')
|
|
162
|
-
.action(createStoryCommand);
|
|
163
|
-
|
|
164
|
-
storyCommand
|
|
165
|
-
.command('shard <feature>')
|
|
166
|
-
.description('Shard spec.md into manageable chunks (90% token savings)')
|
|
167
|
-
.option('--dry-run', 'Preview shards without writing files')
|
|
168
|
-
.option('--verbose', 'Show detailed shard info')
|
|
169
|
-
.action(shardSpecCommand);
|
|
170
|
-
|
|
171
|
-
storyCommand
|
|
172
|
-
.command('status <feature> [action] [story-id]')
|
|
173
|
-
.description('Manage sprint status (show | start | qa | done | next)')
|
|
174
|
-
.action(sprintStatusCommand);
|
|
175
|
-
|
|
176
108
|
// State management commands
|
|
177
109
|
program
|
|
178
110
|
.command('state <action> [args...]')
|
|
179
|
-
.description('Manage state.json (init | get | set |
|
|
111
|
+
.description('Manage state.json (init | get | set | list | add-agent | remove-agent | mark-output)')
|
|
180
112
|
.option('--force', 'Force overwrite (init command)')
|
|
181
113
|
.option('--project <name>', 'Project name (init command)')
|
|
182
114
|
.option('--type <type>', 'Project type (init command)')
|
|
@@ -209,19 +141,6 @@ const generateCommand = program
|
|
|
209
141
|
.command('generate')
|
|
210
142
|
.description('Generate code from templates');
|
|
211
143
|
|
|
212
|
-
generateCommand
|
|
213
|
-
.command('design-system <ui-design-system-md>')
|
|
214
|
-
.description('Generate CSS + theme files from ui-design-system.md')
|
|
215
|
-
.option('--fluent', 'Generate only Fluent UI theme')
|
|
216
|
-
.option('--mud', 'Generate only MudBlazor theme')
|
|
217
|
-
.option('--both', 'Generate both themes (default)')
|
|
218
|
-
.option('--namespace <ns>', 'C# namespace (default: YourProject.Themes)')
|
|
219
|
-
.option('--css-output <path>', 'CSS output path (default: wwwroot/css/design-system.css)')
|
|
220
|
-
.option('--fluent-output <path>', 'Fluent theme output path (default: Themes/FluentDesignTheme.cs)')
|
|
221
|
-
.option('--mud-output <path>', 'MudBlazor theme output path (default: Themes/MudDesignTheme.cs)')
|
|
222
|
-
.option('--dry-run', 'Preview without writing files')
|
|
223
|
-
.action(generateDesignSystemCommand);
|
|
224
|
-
|
|
225
144
|
generateCommand
|
|
226
145
|
.command('recap <feature>')
|
|
227
146
|
.description('Auto-generate recap.md from project data (state, validation, contracts)')
|
|
@@ -231,18 +150,6 @@ generateCommand
|
|
|
231
150
|
await generateRecap('.', feature, options);
|
|
232
151
|
});
|
|
233
152
|
|
|
234
|
-
generateCommand
|
|
235
|
-
.command('metadata <feature>')
|
|
236
|
-
.description('Generate metadata.json summary from markdown outputs')
|
|
237
|
-
.option('--output <path>', 'Custom output path')
|
|
238
|
-
.option('--verbose', 'Show detailed extraction info')
|
|
239
|
-
.action((feature, options) => generateMetadataCommand(feature, options));
|
|
240
|
-
|
|
241
|
-
generateCommand
|
|
242
|
-
.command('onboarding')
|
|
243
|
-
.description('Generate onboarding.md guide with project context, MCPs, agents, and workflows')
|
|
244
|
-
.action(generateOnboardingCommand);
|
|
245
|
-
|
|
246
153
|
// Validation commands (Sprint 4: Continuous Validation)
|
|
247
154
|
program
|
|
248
155
|
.command('validate [validator]')
|
|
@@ -250,241 +157,16 @@ program
|
|
|
250
157
|
.option('-v, --verbose', 'Show detailed output')
|
|
251
158
|
.option('--auto-fix, --fix', 'Auto-fix issues where possible')
|
|
252
159
|
.option('--no-fail', 'Don\'t exit with error code')
|
|
253
|
-
.option('-i, --insights', 'Show learning insights')
|
|
254
160
|
.option('--wcag-aaa', 'Use WCAG AAA standard (stricter)')
|
|
255
161
|
.action((validator, options) => {
|
|
256
162
|
const args = validator ? [validator] : ['all'];
|
|
257
163
|
if (options.verbose) args.push('--verbose');
|
|
258
164
|
if (options.autoFix) args.push('--auto-fix');
|
|
259
165
|
if (options.noFail) args.push('--no-fail');
|
|
260
|
-
if (options.insights) args.push('--insights');
|
|
261
166
|
if (options.wcagAaa) args.push('--wcag-aaa');
|
|
262
167
|
validateCommand(args);
|
|
263
168
|
});
|
|
264
169
|
|
|
265
|
-
// Fluent UI Blazor validation commands
|
|
266
|
-
program
|
|
267
|
-
.command('validate-blazor [path]')
|
|
268
|
-
.description('Validate Fluent UI Blazor patterns and icons')
|
|
269
|
-
.option('-v, --verbose', 'Show detailed output')
|
|
270
|
-
.option('--fix', 'Auto-fix issues where possible')
|
|
271
|
-
.action(validateBlazorCommand);
|
|
272
|
-
|
|
273
|
-
program
|
|
274
|
-
.command('lint-fluent [path]')
|
|
275
|
-
.description('Lint Fluent UI patterns for common issues')
|
|
276
|
-
.option('-v, --verbose', 'Show detailed output')
|
|
277
|
-
.action(lintFluentCommand);
|
|
278
|
-
|
|
279
|
-
program
|
|
280
|
-
.command('analyze-blazor-concurrency [path]')
|
|
281
|
-
.description('Analyze Blazor Server code for DbContext concurrency issues')
|
|
282
|
-
.option('-v, --verbose', 'Show detailed output')
|
|
283
|
-
.action(analyzeBlazorConcurrencyCommand);
|
|
284
|
-
|
|
285
|
-
program
|
|
286
|
-
.command('validate-blazor-state [path]')
|
|
287
|
-
.description('Validate Blazor Server session state patterns')
|
|
288
|
-
.option('-v, --verbose', 'Show detailed output')
|
|
289
|
-
.action(validateBlazorStateCommand);
|
|
290
|
-
|
|
291
|
-
program
|
|
292
|
-
.command('validate-css [path]')
|
|
293
|
-
.description('Validate CSS classes used in Razor files exist in CSS files')
|
|
294
|
-
.option('-v, --verbose', 'Show detailed output')
|
|
295
|
-
.option('--generate-stub', 'Generate a CSS stub file with missing classes')
|
|
296
|
-
.option('--include-utilities', 'Include utility classes (Tailwind, Bootstrap) in validation')
|
|
297
|
-
.action(validateCssCommand);
|
|
298
|
-
|
|
299
|
-
// Learning commands (Sprint 4: Learning System)
|
|
300
|
-
const learnCommand = program
|
|
301
|
-
.command('learn')
|
|
302
|
-
.description('AI learning system commands');
|
|
303
|
-
|
|
304
|
-
learnCommand
|
|
305
|
-
.command('analyze')
|
|
306
|
-
.description('Learn from project history (decisions.md files)')
|
|
307
|
-
.option('-v, --verbose', 'Show detailed learning progress')
|
|
308
|
-
.action(async (options) => {
|
|
309
|
-
const learner = new LearningSystem('.');
|
|
310
|
-
await learner.learnFromProject();
|
|
311
|
-
|
|
312
|
-
if (options.verbose) {
|
|
313
|
-
learner.formatInsights();
|
|
314
|
-
}
|
|
315
|
-
});
|
|
316
|
-
|
|
317
|
-
learnCommand
|
|
318
|
-
.command('insights')
|
|
319
|
-
.description('Show AI insights and patterns')
|
|
320
|
-
.option('--json', 'Output as JSON')
|
|
321
|
-
.action((options) => {
|
|
322
|
-
const learner = new LearningSystem('.');
|
|
323
|
-
|
|
324
|
-
if (options.json) {
|
|
325
|
-
console.log(JSON.stringify(learner.getInsightsSummary(), null, 2));
|
|
326
|
-
} else {
|
|
327
|
-
learner.formatInsights();
|
|
328
|
-
}
|
|
329
|
-
});
|
|
330
|
-
|
|
331
|
-
learnCommand
|
|
332
|
-
.command('suggest [category]')
|
|
333
|
-
.description('Get AI suggestions for a category (uiLibrary | architecture | infrastructure | authentication | stateManagement | testing)')
|
|
334
|
-
.option('--json', 'Output as JSON')
|
|
335
|
-
.action((category, options) => {
|
|
336
|
-
const learner = new LearningSystem('.');
|
|
337
|
-
|
|
338
|
-
if (category) {
|
|
339
|
-
const suggestion = learner.getSuggestion(category);
|
|
340
|
-
if (options.json) {
|
|
341
|
-
console.log(JSON.stringify(suggestion, null, 2));
|
|
342
|
-
} else {
|
|
343
|
-
console.log(chalk.cyan(`\n💡 Suggestion for ${category}:\n`));
|
|
344
|
-
if (suggestion.confidence === 'none') {
|
|
345
|
-
console.log(chalk.yellow(` ${suggestion.reason}`));
|
|
346
|
-
} else {
|
|
347
|
-
console.log(chalk.white(` → ${suggestion.suggestion} (${suggestion.percentage}% confidence)`));
|
|
348
|
-
console.log(chalk.gray(` ${suggestion.reason}`));
|
|
349
|
-
}
|
|
350
|
-
console.log('');
|
|
351
|
-
}
|
|
352
|
-
} else {
|
|
353
|
-
const suggestions = learner.getAllSuggestions();
|
|
354
|
-
if (options.json) {
|
|
355
|
-
console.log(JSON.stringify(suggestions, null, 2));
|
|
356
|
-
} else {
|
|
357
|
-
learner.formatSuggestions(suggestions);
|
|
358
|
-
}
|
|
359
|
-
}
|
|
360
|
-
});
|
|
361
|
-
|
|
362
|
-
learnCommand
|
|
363
|
-
.command('reset')
|
|
364
|
-
.description('Reset knowledge base (clear all learned patterns)')
|
|
365
|
-
.option('--force', 'Skip confirmation')
|
|
366
|
-
.action((options) => {
|
|
367
|
-
if (!options.force) {
|
|
368
|
-
console.log(chalk.yellow('\n⚠️ This will delete all learned patterns and preferences.'));
|
|
369
|
-
console.log(chalk.gray(' Run with --force to confirm.\n'));
|
|
370
|
-
process.exit(1);
|
|
371
|
-
}
|
|
372
|
-
|
|
373
|
-
const learner = new LearningSystem('.');
|
|
374
|
-
learner.reset();
|
|
375
|
-
console.log(chalk.green('\n✅ Knowledge base reset\n'));
|
|
376
|
-
});
|
|
377
|
-
|
|
378
|
-
// Standards browsing command
|
|
379
|
-
program
|
|
380
|
-
.command('standards')
|
|
381
|
-
.description('Browse framework standards library')
|
|
382
|
-
.option('--list', 'List all standards')
|
|
383
|
-
.option('--search <query>', 'Search standards by keyword')
|
|
384
|
-
.option('--show <id>', 'Show full content of a standard')
|
|
385
|
-
.option('--category <cat>', 'Filter by category (core, backend, frontend, infrastructure, ...)')
|
|
386
|
-
.option('--json', 'Output as JSON')
|
|
387
|
-
.action(async (opts) => {
|
|
388
|
-
const { listStandards, searchStandards, showStandard } = await import('../src/commands/project/standards.js');
|
|
389
|
-
if (opts.search) {
|
|
390
|
-
await searchStandards(opts.search, opts);
|
|
391
|
-
} else if (opts.show) {
|
|
392
|
-
await showStandard(opts.show);
|
|
393
|
-
} else {
|
|
394
|
-
await listStandards(opts);
|
|
395
|
-
}
|
|
396
|
-
});
|
|
397
|
-
|
|
398
|
-
// Template management commands
|
|
399
|
-
const templateCommand = program
|
|
400
|
-
.command('template')
|
|
401
|
-
.description('Template management (list | show | render | customize | validate)');
|
|
402
|
-
|
|
403
|
-
templateCommand
|
|
404
|
-
.command('list')
|
|
405
|
-
.description('List all available templates')
|
|
406
|
-
.option('--category <category>', 'Filter by category (documentation, code, infrastructure, context, examples)')
|
|
407
|
-
.option('--phase <phase>', 'Filter by phase (proposal, design, implement, etc.)')
|
|
408
|
-
.option('--required', 'Show only required templates')
|
|
409
|
-
.action(templateListCommand);
|
|
410
|
-
|
|
411
|
-
templateCommand
|
|
412
|
-
.command('show <template-id>')
|
|
413
|
-
.description('Show detailed information about a template')
|
|
414
|
-
.option('--show-path', 'Show resolved template file path')
|
|
415
|
-
.option('--preview', 'Show first 20 lines of template content')
|
|
416
|
-
.option('--project-path <path>', 'Project path (default: current directory)')
|
|
417
|
-
.action(templateShowCommand);
|
|
418
|
-
|
|
419
|
-
templateCommand
|
|
420
|
-
.command('render <template-id> <output-path> <variables-json>')
|
|
421
|
-
.description('Render a template with variables')
|
|
422
|
-
.option('--dry-run', 'Preview without writing file')
|
|
423
|
-
.option('--project-path <path>', 'Project path (default: current directory)')
|
|
424
|
-
.option('-v, --verbose', 'Show detailed output')
|
|
425
|
-
.action(templateRenderCommand);
|
|
426
|
-
|
|
427
|
-
templateCommand
|
|
428
|
-
.command('customize <template-id>')
|
|
429
|
-
.description('Copy framework template to project for customization')
|
|
430
|
-
.option('--local', 'Copy to project .morph/templates/')
|
|
431
|
-
.option('--force', 'Overwrite existing customized template')
|
|
432
|
-
.option('--project-path <path>', 'Project path (default: current directory)')
|
|
433
|
-
.option('-v, --verbose', 'Show detailed output')
|
|
434
|
-
.action(templateCustomizeCommand);
|
|
435
|
-
|
|
436
|
-
templateCommand
|
|
437
|
-
.command('validate [template-id]')
|
|
438
|
-
.description('Validate template(s) for correct Handlebars syntax')
|
|
439
|
-
.option('--category <category>', 'Validate templates in specific category')
|
|
440
|
-
.option('--technology <technology>', 'Validate templates for specific technology')
|
|
441
|
-
.option('--include-deprecated', 'Include deprecated templates')
|
|
442
|
-
.option('--show-valid', 'Show valid templates in output')
|
|
443
|
-
.option('--strict', 'Exit with error on warnings')
|
|
444
|
-
.option('--project-path <path>', 'Project path (default: current directory)')
|
|
445
|
-
.option('-v, --verbose', 'Show detailed validation information')
|
|
446
|
-
.action(templateValidateCommand);
|
|
447
|
-
|
|
448
|
-
// Trust commands
|
|
449
|
-
const trustCommand = program
|
|
450
|
-
.command('trust')
|
|
451
|
-
.description('Trust level management for zero-touch execution');
|
|
452
|
-
|
|
453
|
-
trustCommand
|
|
454
|
-
.command('status [feature]')
|
|
455
|
-
.description('Show trust level and auto-approval status')
|
|
456
|
-
.action(trustStatusCommand);
|
|
457
|
-
|
|
458
|
-
trustCommand
|
|
459
|
-
.command('set <feature> <level> [reason]')
|
|
460
|
-
.description('Manually set trust level (low|medium|high|maximum)')
|
|
461
|
-
.action(trustSetCommand);
|
|
462
|
-
|
|
463
|
-
trustCommand
|
|
464
|
-
.command('history')
|
|
465
|
-
.description('Show trust history for all features')
|
|
466
|
-
.action(trustHistoryCommand);
|
|
467
|
-
|
|
468
|
-
trustCommand
|
|
469
|
-
.command('auto-calculate <feature>')
|
|
470
|
-
.description('Recalculate trust from checkpoint history')
|
|
471
|
-
.action(trustAutoCalculateCommand);
|
|
472
|
-
|
|
473
|
-
trustCommand
|
|
474
|
-
.command('clear <feature>')
|
|
475
|
-
.description('Clear manual trust override (revert to calculated)')
|
|
476
|
-
.action(trustClearCommand);
|
|
477
|
-
|
|
478
|
-
// Troubleshooting command
|
|
479
|
-
program
|
|
480
|
-
.command('troubleshoot <keywords...>')
|
|
481
|
-
.alias('ts')
|
|
482
|
-
.description('Search troubleshooting solutions for common errors')
|
|
483
|
-
.option('--category <cat>', 'Filter by category (blazor, efcore, azure, auth, deploy)')
|
|
484
|
-
.option('-v, --verbose', 'Show full solution content')
|
|
485
|
-
.option('--list-categories', 'List available categories')
|
|
486
|
-
.action(troubleshootCommand);
|
|
487
|
-
|
|
488
170
|
// Phase management commands
|
|
489
171
|
const phaseCommand = program
|
|
490
172
|
.command('phase')
|
|
@@ -513,33 +195,6 @@ program
|
|
|
513
195
|
.option('-v, --verbose', 'Show detailed output')
|
|
514
196
|
.action(validateFeatureCommand);
|
|
515
197
|
|
|
516
|
-
// Diff command
|
|
517
|
-
program
|
|
518
|
-
.command('diff <feature> [output-file]')
|
|
519
|
-
.description('Show changes to specifications since last snapshot')
|
|
520
|
-
.option('--json', 'Output as JSON')
|
|
521
|
-
.action(diffCommand);
|
|
522
|
-
|
|
523
|
-
program
|
|
524
|
-
.command('diff-save <feature>')
|
|
525
|
-
.description('Save current outputs as snapshot for future diffs')
|
|
526
|
-
.action(diffSaveCommand);
|
|
527
|
-
|
|
528
|
-
// Cost tracking command
|
|
529
|
-
program
|
|
530
|
-
.command('cost <feature>')
|
|
531
|
-
.description('Track token usage and cost estimates across phases')
|
|
532
|
-
.option('--json', 'Output as JSON')
|
|
533
|
-
.action(costCommand);
|
|
534
|
-
|
|
535
|
-
// Revert command
|
|
536
|
-
program
|
|
537
|
-
.command('revert <feature>')
|
|
538
|
-
.description('Revert feature to a previous phase')
|
|
539
|
-
.option('--to <phase>', 'Target phase to revert to')
|
|
540
|
-
.option('--delete-outputs', 'Delete output files (default: preserve files, reset state)')
|
|
541
|
-
.action(revertCommand);
|
|
542
|
-
|
|
543
198
|
// Checkpoint save/restore commands
|
|
544
199
|
program
|
|
545
200
|
.command('checkpoint-save <feature>')
|
|
@@ -558,14 +213,6 @@ program
|
|
|
558
213
|
.option('--json', 'Output as JSON')
|
|
559
214
|
.action(checkpointListCommand);
|
|
560
215
|
|
|
561
|
-
// Rollback phase command
|
|
562
|
-
program
|
|
563
|
-
.command('rollback <feature> <phase>')
|
|
564
|
-
.description('Rollback feature to a previous phase (marks outputs as draft)')
|
|
565
|
-
.option('--force', 'Skip confirmation')
|
|
566
|
-
.option('-v, --verbose', 'Show detailed output')
|
|
567
|
-
.action(rollbackPhaseCommand);
|
|
568
|
-
|
|
569
216
|
// Approval workflow commands
|
|
570
217
|
program
|
|
571
218
|
.command('approve <feature> <gate>')
|
|
@@ -574,37 +221,53 @@ program
|
|
|
574
221
|
.option('--notes <notes>', 'Approval notes')
|
|
575
222
|
.action((feature, gate, options) => approveCommand(feature, gate, options));
|
|
576
223
|
|
|
577
|
-
program
|
|
578
|
-
.command('reject <feature> <gate> [reason]')
|
|
579
|
-
.description('Reject a phase gate with optional reason')
|
|
580
|
-
.action((feature, gate, reason, options) => rejectCommand(feature, gate, reason, options));
|
|
581
|
-
|
|
582
224
|
program
|
|
583
225
|
.command('approval-status <feature>')
|
|
584
226
|
.description('Show approval status for all gates')
|
|
585
227
|
.option('--json', 'Output as JSON')
|
|
586
228
|
.action((feature, options) => approvalStatusCommand(feature, options));
|
|
587
229
|
|
|
588
|
-
|
|
589
|
-
|
|
590
|
-
|
|
230
|
+
program
|
|
231
|
+
.command('unapprove <feature> <gate>')
|
|
232
|
+
.description('Revoke a phase gate approval (proposal, design, tasks, uiux)')
|
|
233
|
+
.option('--revoker <name>', 'Name of person revoking (default: current user)')
|
|
234
|
+
.option('--reason <reason>', 'Reason for revocation')
|
|
235
|
+
.action((feature, gate, options) => unapproveCommand(feature, gate, options));
|
|
236
|
+
|
|
237
|
+
// Template management commands
|
|
238
|
+
const templateCommand = program
|
|
239
|
+
.command('template')
|
|
240
|
+
.description('Template management (render)');
|
|
241
|
+
|
|
242
|
+
templateCommand
|
|
243
|
+
.command('render <template-id> <output-path> <variables-json>')
|
|
244
|
+
.description('Render a template with variables')
|
|
245
|
+
.option('--dry-run', 'Preview without writing file')
|
|
246
|
+
.option('--project-path <path>', 'Project path (default: current directory)')
|
|
247
|
+
.option('-v, --verbose', 'Show detailed output')
|
|
248
|
+
.action(templateRenderCommand);
|
|
249
|
+
|
|
250
|
+
// Trust commands
|
|
251
|
+
const trustCommand = program
|
|
252
|
+
.command('trust')
|
|
253
|
+
.description('Trust level management for zero-touch execution');
|
|
254
|
+
|
|
255
|
+
trustCommand
|
|
256
|
+
.command('status [feature]')
|
|
257
|
+
.description('Show trust level and auto-approval status')
|
|
258
|
+
.action(trustStatusCommand);
|
|
259
|
+
|
|
260
|
+
trustCommand
|
|
261
|
+
.command('set <feature> <level> [reason]')
|
|
262
|
+
.description('Manually set trust level (low|medium|high|maximum)')
|
|
263
|
+
.action(trustSetCommand);
|
|
591
264
|
|
|
592
265
|
// ─────────────────────────────────────────────────────────────────────────────
|
|
593
|
-
// MCP
|
|
266
|
+
// MCP Setup
|
|
594
267
|
// ─────────────────────────────────────────────────────────────────────────────
|
|
595
268
|
const mcpCommand = program
|
|
596
269
|
.command('mcp')
|
|
597
|
-
.description('MCP server
|
|
598
|
-
|
|
599
|
-
mcpCommand
|
|
600
|
-
.command('optimize')
|
|
601
|
-
.description('Analyze MCP servers and suggest optimizations')
|
|
602
|
-
.action((options) => mcpOptimizeCommand(options));
|
|
603
|
-
|
|
604
|
-
mcpCommand
|
|
605
|
-
.command('list')
|
|
606
|
-
.description('List configured MCP servers with usage stats')
|
|
607
|
-
.action((options) => mcpListCommand(options));
|
|
270
|
+
.description('MCP server setup and configuration');
|
|
608
271
|
|
|
609
272
|
mcpCommand
|
|
610
273
|
.command('setup [name]')
|
package/bin/validate.js
CHANGED
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
* Validation CLI
|
|
5
5
|
*
|
|
6
6
|
* Runs all validators (package, architecture, contrast) on the project.
|
|
7
|
-
* Part of Sprint 4: Continuous Validation
|
|
7
|
+
* Part of Sprint 4: Continuous Validation
|
|
8
8
|
*
|
|
9
9
|
* Usage:
|
|
10
10
|
* morph-spec validate [options]
|
|
@@ -20,7 +20,6 @@ import chalk from 'chalk';
|
|
|
20
20
|
import { validatePackages } from '../src/lib/validators/packages/package-validator.js';
|
|
21
21
|
import { validateArchitecture } from '../src/lib/validators/architecture/architecture-validator.js';
|
|
22
22
|
import { validateContrast } from '../src/lib/validators/ui/ui-contrast-validator.js';
|
|
23
|
-
import { LearningSystem } from '../src/lib/learning/learning-system.js';
|
|
24
23
|
|
|
25
24
|
const VALIDATORS = {
|
|
26
25
|
packages: {
|
|
@@ -164,10 +163,6 @@ export async function validateCommand(args = []) {
|
|
|
164
163
|
process.exit(1);
|
|
165
164
|
}
|
|
166
165
|
|
|
167
|
-
// Show learning insights if --insights flag
|
|
168
|
-
if (options.insights) {
|
|
169
|
-
await showLearningInsights(options);
|
|
170
|
-
}
|
|
171
166
|
}
|
|
172
167
|
|
|
173
168
|
/**
|
|
@@ -266,21 +261,6 @@ async function runValidator(name, options) {
|
|
|
266
261
|
}
|
|
267
262
|
}
|
|
268
263
|
|
|
269
|
-
/**
|
|
270
|
-
* Show learning insights
|
|
271
|
-
*/
|
|
272
|
-
async function showLearningInsights(options) {
|
|
273
|
-
console.log(chalk.bold.cyan('\n━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n'));
|
|
274
|
-
|
|
275
|
-
const learner = new LearningSystem('.');
|
|
276
|
-
learner.formatInsights();
|
|
277
|
-
|
|
278
|
-
if (options.verbose) {
|
|
279
|
-
const suggestions = learner.getAllSuggestions();
|
|
280
|
-
learner.formatSuggestions(suggestions);
|
|
281
|
-
}
|
|
282
|
-
}
|
|
283
|
-
|
|
284
264
|
/**
|
|
285
265
|
* Parse command-line options
|
|
286
266
|
*/
|
|
@@ -289,7 +269,6 @@ function parseOptions(args) {
|
|
|
289
269
|
verbose: false,
|
|
290
270
|
autoFix: false,
|
|
291
271
|
noFail: false,
|
|
292
|
-
insights: false,
|
|
293
272
|
wcagLevel: 'AA'
|
|
294
273
|
};
|
|
295
274
|
|
|
@@ -300,8 +279,6 @@ function parseOptions(args) {
|
|
|
300
279
|
options.autoFix = true;
|
|
301
280
|
} else if (arg === '--no-fail') {
|
|
302
281
|
options.noFail = true;
|
|
303
|
-
} else if (arg === '--insights' || arg === '-i') {
|
|
304
|
-
options.insights = true;
|
|
305
282
|
} else if (arg === '--wcag-aaa') {
|
|
306
283
|
options.wcagLevel = 'AAA';
|
|
307
284
|
}
|
|
@@ -330,7 +307,6 @@ ${chalk.bold('OPTIONS')}
|
|
|
330
307
|
--verbose, -v Show detailed output
|
|
331
308
|
--auto-fix, --fix Auto-fix issues where possible
|
|
332
309
|
--no-fail Don't exit with error code
|
|
333
|
-
--insights, -i Show learning insights
|
|
334
310
|
--wcag-aaa Use WCAG AAA standard (stricter)
|
|
335
311
|
|
|
336
312
|
${chalk.bold('EXAMPLES')}
|
|
@@ -338,7 +314,7 @@ ${chalk.bold('EXAMPLES')}
|
|
|
338
314
|
morph-spec validate packages --fix # Validate packages and auto-fix
|
|
339
315
|
morph-spec validate architecture -v # Verbose architecture validation
|
|
340
316
|
morph-spec validate contrast --wcag-aaa # Stricter contrast validation
|
|
341
|
-
morph-spec validate all
|
|
317
|
+
morph-spec validate all # Run all validators
|
|
342
318
|
|
|
343
319
|
${chalk.bold('EXIT CODES')}
|
|
344
320
|
0 All validations passed
|
package/claude-plugin.json
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "morph-spec",
|
|
3
|
-
"version": "4.
|
|
3
|
+
"version": "4.8.4",
|
|
4
4
|
"displayName": "MORPH-SPEC Framework",
|
|
5
|
-
"description": "Spec-driven development with
|
|
5
|
+
"description": "Spec-driven development with 38 agents and 8-phase workflow for .NET/Blazor/Next.js/Azure",
|
|
6
6
|
"publisher": "polymorphism-tech",
|
|
7
7
|
"skills": {
|
|
8
8
|
"directory": "framework/skills",
|