@polymorphism-tech/morph-spec 4.3.7 → 4.6.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/.morph/.morphversion +3 -3
- package/.morph/analytics/threads-log.jsonl +6 -9
- package/.morph/config/config.json +2 -3
- package/.morph/framework/standards/STANDARDS.json +812 -0
- package/.morph/{standards → framework/standards}/ai-agents/team-orchestration.md +3 -3
- package/.morph/{standards → framework/standards}/frontend/nextjs/nextjs-patterns.md +17 -0
- package/.morph/framework/standards/integration/mcp/mcp-tools.md +384 -0
- package/.morph/{templates → framework/templates}/README.md +17 -17
- package/.morph/{templates → framework/templates}/REGISTRY.json +48 -233
- package/.morph/framework/templates/code/dotnet/contracts/contracts.cs.hbs +172 -0
- package/.morph/{templates → framework/templates}/context/CONTEXT-FEATURE.md +1 -1
- package/.morph/{templates → framework/templates}/context/CONTEXT.md +3 -3
- package/.morph/framework/templates/docs/clarifications.md +253 -0
- package/.morph/framework/templates/docs/onboarding.md +123 -0
- package/.morph/framework/templates/docs/schema-analysis.md +119 -0
- package/.morph/{templates → framework/templates}/docs/spec.md +149 -149
- package/.morph/framework/templates/docs/ui-components.md +124 -0
- package/.morph/framework/templates/docs/ui-design-system.md +76 -0
- package/.morph/framework/templates/docs/ui-flows.md +167 -0
- package/.morph/framework/templates/docs/ui-mockups.md +98 -0
- package/.morph/framework/templates/docs/user-stories.md +34 -0
- package/.morph/{templates → framework/templates}/examples/spec-examples.md +1 -1
- package/.morph/{templates → framework/templates}/infrastructure/github/README.md +11 -11
- package/.morph/{templates → framework/templates}/infrastructure/github/workflows/deploy-azure-app-service.yml.hbs +2 -2
- package/.morph/{templates → framework/templates}/meta-prompts/parallel-workers/parallel-worker.md +2 -2
- package/.morph/{templates → framework/templates}/meta-prompts/validators/pre-commit-validator.md +1 -1
- package/.morph/logs/tool-failures.log +7 -0
- package/.morph/memory/pre-compact-2026-02-23T15-43-03-521Z.json +16 -0
- package/.morph/state.json +1 -1
- package/CLAUDE.md +77 -155
- package/README.md +20 -18
- package/bin/detect-agents.js +1 -1
- package/bin/morph-spec.js +116 -266
- package/bin/task-manager.cjs +2 -2
- package/bin/validate.js +1 -1
- package/claude-plugin.json +14 -0
- package/docs/claude-alignment-report.md +137 -0
- package/docs/plans/2026-02-22-claude-docs-morph-alignment-analysis.md +512 -0
- package/docs/plans/2026-02-22-claude-settings.md +515 -0
- package/docs/plans/2026-02-22-morph-cc-alignment-impl.md +728 -0
- package/docs/plans/2026-02-22-morph-spec-next.md +478 -0
- package/docs/plans/2026-02-22-native-alignment-design.md +199 -0
- package/docs/plans/2026-02-22-native-alignment-impl.md +925 -0
- package/docs/plans/2026-02-22-native-enrichment-design.md +244 -0
- package/docs/plans/2026-02-22-native-enrichment.md +735 -0
- package/framework/CLAUDE.md +77 -0
- package/framework/{skills/level-2-domains → agents}/ai-agents/ai-system-architect.md +7 -3
- package/framework/{skills/level-2-domains → agents}/architecture/po-pm-advisor.md +7 -1
- package/framework/{skills/level-2-domains → agents}/architecture/prompt-engineer.md +7 -1
- package/framework/{skills/level-2-domains → agents}/architecture/seo-growth-hacker.md +7 -1
- package/framework/{skills/level-2-domains → agents}/architecture/standards-architect.md +10 -6
- package/framework/agents/backend/api-designer.md +103 -0
- package/framework/{skills/level-2-domains → agents}/backend/dotnet-senior.md +7 -1
- package/framework/agents/backend/ef-modeler.md +119 -0
- package/framework/{skills/level-2-domains → agents}/backend/hangfire-orchestrator.md +8 -4
- package/framework/{skills/level-2-domains → agents}/backend/ms-agent-expert.md +7 -3
- package/framework/{skills/level-2-domains → agents}/frontend/blazor-builder.md +7 -3
- package/framework/{skills/level-2-domains → agents}/frontend/nextjs-expert.md +7 -3
- package/framework/{skills/level-2-domains → agents}/frontend/ui-ux-designer.md +8 -2
- package/framework/{skills/level-2-domains → agents}/infrastructure/azure-architect.md +7 -1
- package/framework/{skills/level-2-domains → agents}/infrastructure/azure-deploy-specialist.md +7 -1
- package/framework/{skills/level-2-domains → agents}/infrastructure/bicep-architect.md +7 -3
- package/framework/{skills/level-2-domains → agents}/infrastructure/container-specialist.md +7 -3
- package/framework/{skills/level-2-domains → agents}/infrastructure/devops-engineer.md +7 -3
- package/framework/{skills/level-2-domains → agents}/integrations/asaas-financial.md +7 -3
- package/framework/{skills/level-2-domains → agents}/integrations/azure-identity.md +7 -3
- package/framework/{skills/level-2-domains → agents}/integrations/clerk-auth.md +7 -3
- package/framework/{skills/level-2-domains/integrations/hangfire-orchestrator.md → agents/integrations/hangfire-integration.md} +7 -1
- package/framework/{skills/level-2-domains → agents}/integrations/resend-email.md +7 -3
- package/framework/{skills/level-2-domains → agents}/quality/code-analyzer.md +9 -5
- package/framework/{skills/level-2-domains → agents}/quality/testing-specialist.md +7 -3
- package/framework/commands/morph-apply.md +9 -9
- package/framework/commands/morph-archive.md +8 -8
- package/framework/commands/morph-infra.md +1 -1
- package/framework/commands/morph-proposal.md +9 -9
- package/framework/commands/morph-status.md +3 -3
- package/framework/commands/morph-troubleshoot.md +1 -1
- package/framework/hooks/README.md +201 -282
- package/framework/hooks/claude-code/notification/approval-reminder.js +52 -0
- package/framework/hooks/claude-code/post-tool-use/dispatch.js +83 -0
- package/framework/hooks/claude-code/post-tool-use/handle-tool-failure.js +42 -0
- package/framework/hooks/claude-code/pre-compact/save-morph-context.js +61 -0
- package/framework/hooks/claude-code/pre-tool-use/enforce-phase-writes.js +71 -0
- package/framework/hooks/claude-code/pre-tool-use/protect-readonly-files.js +58 -0
- package/framework/hooks/claude-code/pre-tool-use/protect-spec-files.js +64 -0
- package/framework/hooks/claude-code/session-start/inject-morph-context.js +94 -0
- package/framework/hooks/claude-code/statusline.py +538 -0
- package/framework/hooks/claude-code/statusline.sh +7 -0
- package/framework/hooks/claude-code/stop/validate-completion.js +88 -0
- package/framework/hooks/claude-code/user-prompt/enrich-prompt.js +91 -0
- package/framework/hooks/shared/hook-response.js +45 -0
- package/framework/hooks/shared/phase-utils.js +129 -0
- package/framework/hooks/shared/state-reader.js +138 -0
- package/framework/hooks/shared/stdin-reader.js +26 -0
- package/framework/phases.json +145 -0
- package/framework/rules/csharp-standards.md +10 -0
- package/framework/rules/frontend-standards.md +14 -0
- package/framework/rules/infrastructure-standards.md +13 -0
- package/framework/rules/morph-workflow.md +86 -0
- package/framework/rules/testing-standards.md +11 -0
- package/framework/skills/README.md +66 -0
- package/framework/skills/level-0-meta/brainstorming/SKILL.md +135 -0
- package/framework/skills/level-0-meta/brainstorming/references/proposal-example.md +138 -0
- package/framework/skills/level-0-meta/{code-review.md → code-review/SKILL.md} +13 -4
- package/framework/skills/level-0-meta/code-review/references/review-example.md +164 -0
- package/framework/skills/level-0-meta/code-review/scripts/scan-csharp.mjs +121 -0
- package/framework/skills/level-0-meta/mcp-registry.json +207 -0
- package/framework/skills/level-0-meta/{morph-checklist.md → morph-checklist/SKILL.md} +8 -3
- package/framework/skills/{level-1-workflows/morph-replicate.md → level-0-meta/morph-replicate/SKILL.md} +13 -6
- package/framework/skills/level-0-meta/{simulation-checklist.md → simulation-checklist/SKILL.md} +9 -4
- package/framework/skills/level-0-meta/tool-usage-guide/SKILL.md +334 -0
- package/framework/skills/level-0-meta/verification-before-completion/SKILL.md +147 -0
- package/framework/skills/level-0-meta/verification-before-completion/scripts/check-phase-outputs.mjs +110 -0
- package/framework/skills/level-1-workflows/{phase-clarify.md → phase-clarify/SKILL.md} +65 -4
- package/framework/skills/level-1-workflows/phase-clarify/references/clarifications-example.md +117 -0
- package/framework/skills/level-1-workflows/phase-codebase-analysis/SKILL.md +181 -0
- package/framework/skills/level-1-workflows/phase-design/SKILL.md +303 -0
- package/framework/skills/level-1-workflows/phase-design/references/spec-example.md +253 -0
- package/framework/skills/level-1-workflows/phase-implement/SKILL.md +254 -0
- package/framework/skills/level-1-workflows/phase-implement/references/recap-example.md +132 -0
- package/framework/skills/level-1-workflows/phase-setup/SKILL.md +171 -0
- package/framework/skills/level-1-workflows/{phase-tasks.md → phase-tasks/SKILL.md} +89 -7
- package/framework/skills/level-1-workflows/phase-tasks/references/tasks-example.md +231 -0
- package/framework/skills/level-1-workflows/phase-tasks/scripts/validate-tasks.mjs +112 -0
- package/framework/skills/level-1-workflows/phase-uiux/SKILL.md +246 -0
- package/framework/standards/STANDARDS.json +812 -0
- package/framework/standards/ai-agents/team-orchestration.md +3 -3
- package/framework/standards/frontend/nextjs/nextjs-patterns.md +17 -0
- package/framework/standards/integration/mcp/mcp-tools.md +384 -0
- package/framework/templates/README.md +17 -17
- package/framework/templates/REGISTRY.json +48 -233
- package/framework/templates/code/dotnet/contracts/contracts.cs.hbs +172 -0
- package/framework/templates/context/CONTEXT-FEATURE.md +1 -1
- package/framework/templates/context/CONTEXT.md +3 -3
- package/framework/templates/docs/clarifications.md +253 -0
- package/framework/templates/docs/onboarding.md +123 -0
- package/framework/templates/docs/schema-analysis.md +119 -0
- package/framework/templates/docs/spec.md +149 -149
- package/framework/templates/docs/ui-components.md +124 -0
- package/framework/templates/docs/ui-design-system.md +76 -0
- package/framework/templates/docs/ui-flows.md +167 -0
- package/framework/templates/docs/ui-mockups.md +98 -0
- package/framework/templates/docs/user-stories.md +34 -0
- package/framework/templates/examples/spec-examples.md +1 -1
- package/framework/templates/infrastructure/github/README.md +11 -11
- package/framework/templates/infrastructure/github/workflows/deploy-azure-app-service.yml.hbs +2 -2
- package/framework/templates/meta-prompts/parallel-workers/parallel-worker.md +2 -2
- package/framework/templates/meta-prompts/validators/pre-commit-validator.md +1 -1
- package/framework/workflows/configs/express.json +45 -0
- package/framework/workflows/configs/spec-only.json +43 -0
- package/framework/workflows/docs/enforcement-pipeline.md +8 -8
- package/framework/workflows/docs/full-morph.md +3 -3
- package/package.json +3 -1
- package/scripts/generate-refs.js +336 -0
- package/scripts/generate-standards-registry.js +44 -0
- package/scripts/validate-real.mjs +255 -0
- package/src/commands/feature/create-story.js +362 -361
- package/src/commands/feature/shard-spec.js +225 -224
- package/src/commands/feature/sprint-status.js +1 -1
- package/src/commands/generation/generate-onboarding.js +169 -0
- package/src/commands/generation/generate.js +2 -2
- package/src/commands/mcp/mcp-setup.js +315 -0
- package/src/commands/project/changes.js +66 -0
- package/src/commands/project/checkpoint.js +209 -0
- package/src/commands/project/cost.js +179 -0
- package/src/commands/project/diff.js +278 -0
- package/src/commands/project/doctor.js +55 -7
- package/src/commands/project/init.js +318 -136
- package/src/commands/project/revert.js +173 -0
- package/src/commands/project/standards.js +80 -0
- package/src/commands/project/status.js +376 -0
- package/src/commands/project/update-agents.js +23 -0
- package/src/commands/project/update.js +60 -88
- package/src/commands/state/advance-phase.js +4 -3
- package/src/commands/state/state.js +10 -3
- package/src/commands/state/validate-phase.js +19 -2
- package/src/commands/templates/template-customize.js +4 -4
- package/src/commands/templates/template-render.js +1 -1
- package/src/commands/templates/template-show.js +1 -1
- package/src/commands/validation/validate-feature.js +359 -0
- package/src/core/orchestrator.js +3 -38
- package/src/core/paths/output-schema.js +135 -0
- package/src/core/state/state-manager.js +831 -592
- package/src/core/templates/template-registry.js +2 -2
- package/src/core/workflows/workflow-detector.js +17 -1
- package/src/lib/agents/micro-agent-factory.js +1 -1
- package/src/lib/context/context-bundler.js +2 -1
- package/src/lib/detectors/claude-config-detector.js +390 -0
- package/src/lib/detectors/conversation-analyzer.js +4 -4
- package/src/lib/detectors/design-system-detector.js +6 -5
- package/src/lib/detectors/standards-generator.js +2 -2
- package/src/lib/generators/context-generator.js +539 -538
- package/src/lib/generators/recap-generator.js +1 -1
- package/src/lib/generators/settings-generator.js +210 -0
- package/src/lib/hooks/hook-executor.js +1 -1
- package/src/lib/installers/mcp-installer.js +299 -0
- package/src/lib/learning/learning-system.js +3 -3
- package/src/lib/orchestration/team-orchestrator.js +1 -1
- package/src/lib/standards/standards-context-injector.js +7 -7
- package/src/lib/threads/thread-coordinator.js +1 -1
- package/src/lib/troubleshooting/troubleshoot-grep.js +1 -1
- package/src/lib/validators/contracts/contract-compliance-validator.js +274 -273
- package/src/lib/validators/design-system/design-system-validator.js +1 -1
- package/src/lib/validators/spec-validator.js +258 -258
- package/src/lib/validators/validation-runner.js +270 -269
- package/src/utils/agents-installer.js +206 -0
- package/src/utils/claude-settings-manager.js +258 -0
- package/src/utils/file-copier.js +1 -1
- package/src/utils/hooks-installer.js +354 -28
- package/src/utils/skills-installer.js +118 -0
- package/.morph/project/context/README.md +0 -17
- package/.morph/project/context/detection-log.md +0 -16
- package/.morph/project/standards/inferred.md +0 -59
- package/framework/hooks/agent-stop/validate-and-continue.js +0 -96
- package/framework/hooks/agent-stop/validate-checkpoints.js +0 -101
- package/framework/hooks/agent-stop/validate-tests.js +0 -109
- package/framework/hooks/agent-teams/dispatch.js +0 -67
- package/framework/hooks/agent-teams/phase-advanced.js +0 -80
- package/framework/hooks/agent-teams/task-completed.js +0 -76
- package/framework/hooks/agent-teams/teammate-idle.js +0 -70
- package/framework/skills/level-1-workflows/phase-design.md +0 -213
- package/framework/skills/level-1-workflows/phase-setup.md +0 -106
- package/framework/skills/level-1-workflows/phase-uiux.md +0 -169
- package/framework/skills/level-2-domains/backend/api-designer.md +0 -59
- package/framework/skills/level-2-domains/backend/ef-modeler.md +0 -58
- package/framework/skills/level-3-technologies/README.md +0 -7
- package/framework/skills/level-4-patterns/README.md +0 -7
- package/src/commands/agents/agents-fuse.js +0 -97
- package/src/commands/agents/micro-agent.js +0 -112
- package/src/commands/agents/spawn-team.js +0 -237
- package/src/commands/agents/squad-template.js +0 -146
- package/src/commands/analytics/analytics.js +0 -176
- package/src/commands/context/context-prime.js +0 -63
- package/src/commands/context/core-four.js +0 -54
- package/src/commands/generation/generate-context.js +0 -40
- package/src/commands/project/detect-agents.js +0 -207
- package/src/commands/project/detect-workflow.js +0 -174
- package/src/commands/threads/thread-template.js +0 -103
- package/src/commands/threads/threads.js +0 -261
- package/src/commands/utils/session-summary.js +0 -291
- package/src/llm/analyzer.js +0 -215
- package/src/llm/few-shot-examples.js +0 -216
- package/src/llm/project-config-schema.json +0 -188
- package/src/llm/prompt-builder.js +0 -96
- /package/.morph/{config → framework}/agents.json +0 -0
- /package/.morph/{standards → framework/standards}/ai-agents/blazor-ui.md +0 -0
- /package/.morph/{standards → framework/standards}/ai-agents/production.md +0 -0
- /package/.morph/{standards → framework/standards}/ai-agents/setup.md +0 -0
- /package/.morph/{standards → framework/standards}/ai-agents/workflows.md +0 -0
- /package/.morph/{standards → framework/standards}/architecture/ddd/aggregates.md +0 -0
- /package/.morph/{standards → framework/standards}/architecture/ddd/entities.md +0 -0
- /package/.morph/{standards → framework/standards}/architecture/ddd/value-objects.md +0 -0
- /package/.morph/{standards → framework/standards}/backend/api/minimal-api.md +0 -0
- /package/.morph/{standards → framework/standards}/backend/api/rest.md +0 -0
- /package/.morph/{standards → framework/standards}/backend/api/validation.md +0 -0
- /package/.morph/{standards → framework/standards}/backend/authentication/passkeys.md +0 -0
- /package/.morph/{standards → framework/standards}/backend/database/ef-core.md +0 -0
- /package/.morph/{standards → framework/standards}/backend/database/migrations.md +0 -0
- /package/.morph/{standards → framework/standards}/backend/database/postgresql/database.md +0 -0
- /package/.morph/{standards → framework/standards}/backend/database/repository-patterns.md +0 -0
- /package/.morph/{standards → framework/standards}/backend/database/vector-search-rag.md +0 -0
- /package/.morph/{standards → framework/standards}/backend/dotnet/async.md +0 -0
- /package/.morph/{standards → framework/standards}/backend/dotnet/core.md +0 -0
- /package/.morph/{standards → framework/standards}/backend/dotnet/di.md +0 -0
- /package/.morph/{standards → framework/standards}/backend/dotnet/program-cs-checklist.md +0 -0
- /package/.morph/{standards → framework/standards}/backend/integrations/asaas/asaas-api.md +0 -0
- /package/.morph/{standards → framework/standards}/backend/integrations/clerk/clerk-auth.md +0 -0
- /package/.morph/{standards → framework/standards}/backend/integrations/hangfire/hangfire-jobs.md +0 -0
- /package/.morph/{standards → framework/standards}/backend/integrations/resend/resend-email.md +0 -0
- /package/.morph/{standards → framework/standards}/context/analytics.md +0 -0
- /package/.morph/{standards → framework/standards}/context/bundles.md +0 -0
- /package/.morph/{standards → framework/standards}/context/priming.md +0 -0
- /package/.morph/{standards → framework/standards}/core/architecture.md +0 -0
- /package/.morph/{standards → framework/standards}/core/coding.md +0 -0
- /package/.morph/{standards → framework/standards}/core/git-branching-strategy.md +0 -0
- /package/.morph/{standards → framework/standards}/core/git.md +0 -0
- /package/.morph/{standards → framework/standards}/core/testing.md +0 -0
- /package/.morph/{standards → framework/standards}/data/nosql/blob-storage.md +0 -0
- /package/.morph/{standards → framework/standards}/data/nosql/cache/redis.md +0 -0
- /package/.morph/{standards → framework/standards}/data/nosql/cosmos-db.md +0 -0
- /package/.morph/{standards → framework/standards}/data/vector-search/azure-ai-search.md +0 -0
- /package/.morph/{standards → framework/standards}/data/vector-search/rag-chunking.md +0 -0
- /package/.morph/{standards → framework/standards}/frontend/blazor/design-checklist.md +0 -0
- /package/.morph/{standards → framework/standards}/frontend/blazor/fluent-ui-setup.md +0 -0
- /package/.morph/{standards → framework/standards}/frontend/blazor/fluent-ui.md +0 -0
- /package/.morph/{standards → framework/standards}/frontend/blazor/html-conversion.md +0 -0
- /package/.morph/{standards → framework/standards}/frontend/blazor/lifecycle.md +0 -0
- /package/.morph/{standards → framework/standards}/frontend/blazor/pitfalls.md +0 -0
- /package/.morph/{standards → framework/standards}/frontend/blazor/state.md +0 -0
- /package/.morph/{standards → framework/standards}/frontend/design-system/animations.md +0 -0
- /package/.morph/{standards → framework/standards}/frontend/design-system/naming.md +0 -0
- /package/.morph/{standards → framework/standards}/infrastructure/azure/azure.md +0 -0
- /package/.morph/{standards → framework/standards}/infrastructure/azure/bicep/bicep-patterns.md +0 -0
- /package/.morph/{standards → framework/standards}/infrastructure/azure/devops/azure-devops-setup.md +0 -0
- /package/.morph/{standards → framework/standards}/infrastructure/azure/devops/local-development.md +0 -0
- /package/.morph/{standards → framework/standards}/infrastructure/azure/services/functions.md +0 -0
- /package/.morph/{standards → framework/standards}/infrastructure/azure/services/service-bus.md +0 -0
- /package/.morph/{standards → framework/standards}/infrastructure/azure/services/storage.md +0 -0
- /package/.morph/{standards → framework/standards}/infrastructure/docker/easypanel-deploy.md +0 -0
- /package/.morph/{standards → framework/standards}/infrastructure/supabase/mcp-setup.md +0 -0
- /package/.morph/{standards → framework/standards}/infrastructure/supabase/supabase-auth.md +0 -0
- /package/.morph/{standards → framework/standards}/infrastructure/supabase/supabase-pgvector.md +0 -0
- /package/.morph/{standards → framework/standards}/infrastructure/supabase/supabase-rls.md +0 -0
- /package/.morph/{standards → framework/standards}/infrastructure/supabase/supabase-storage.md +0 -0
- /package/.morph/{standards → framework/standards}/integration/api/graphql.md +0 -0
- /package/.morph/{standards → framework/standards}/integration/api/grpc.md +0 -0
- /package/.morph/{standards → framework/standards}/integration/api/rest-design.md +0 -0
- /package/.morph/{standards → framework/standards}/integration/event-driven/cqrs.md +0 -0
- /package/.morph/{standards → framework/standards}/integration/event-driven/event-sourcing.md +0 -0
- /package/.morph/{standards → framework/standards}/integration/event-driven/service-bus.md +0 -0
- /package/.morph/{standards → framework/standards}/observability/logging.md +0 -0
- /package/.morph/{standards → framework/standards}/observability/metrics.md +0 -0
- /package/.morph/{standards → framework/standards}/observability/monitoring.md +0 -0
- /package/.morph/{standards → framework/standards}/observability/tracing.md +0 -0
- /package/.morph/{standards → framework/standards}/workflows/parallel-execution.md +0 -0
- /package/.morph/{standards → framework/standards}/workflows/thread-management.md +0 -0
- /package/.morph/{templates → framework/templates}/.idea/morph-templates.xml +0 -0
- /package/.morph/{templates → framework/templates}/.vscode/morph-templates.code-snippets +0 -0
- /package/.morph/{templates → framework/templates}/IDE-SNIPPETS.md +0 -0
- /package/.morph/{templates → framework/templates}/code/dotnet/backend/repository.cs +0 -0
- /package/.morph/{templates → framework/templates}/code/dotnet/backend/service.cs +0 -0
- /package/.morph/{templates → framework/templates}/code/dotnet/contracts/Commands.cs +0 -0
- /package/.morph/{templates → framework/templates}/code/dotnet/contracts/Entities.cs +0 -0
- /package/.morph/{templates → framework/templates}/code/dotnet/contracts/Queries.cs +0 -0
- /package/.morph/{templates → framework/templates}/code/dotnet/contracts/README.md +0 -0
- /package/.morph/{templates → framework/templates}/code/dotnet/contracts/api-contracts.cs +0 -0
- /package/.morph/{templates → framework/templates}/code/dotnet/contracts/contracts.cs +0 -0
- /package/.morph/{templates → framework/templates}/code/dotnet/database/migration.cs +0 -0
- /package/.morph/{templates → framework/templates}/code/dotnet/frontend/component.razor +0 -0
- /package/.morph/{templates → framework/templates}/code/dotnet/jobs/agent.cs +0 -0
- /package/.morph/{templates → framework/templates}/code/dotnet/jobs/job.cs +0 -0
- /package/.morph/{templates → framework/templates}/code/dotnet/test.cs +0 -0
- /package/.morph/{templates → framework/templates}/code/sql/rls-policy.sql +0 -0
- /package/.morph/{templates → framework/templates}/code/sql/supabase-migration.sql +0 -0
- /package/.morph/{templates → framework/templates}/code/sql/supabase-migration.template.sql +0 -0
- /package/.morph/{templates → framework/templates}/code/typescript/contracts.ts +0 -0
- /package/.morph/{templates → framework/templates}/docs/proposal.md +0 -0
- /package/.morph/{templates → framework/templates}/examples/design-system-examples.md +0 -0
- /package/.morph/{templates → framework/templates}/feature/decisions.md +0 -0
- /package/.morph/{templates → framework/templates}/feature/recap.md +0 -0
- /package/.morph/{templates → framework/templates}/feature/tasks.md +0 -0
- /package/.morph/{templates → framework/templates}/infrastructure/azure/Dockerfile.example +0 -0
- /package/.morph/{templates → framework/templates}/infrastructure/azure/README.md +0 -0
- /package/.morph/{templates → framework/templates}/infrastructure/azure/app-insights.bicep +0 -0
- /package/.morph/{templates → framework/templates}/infrastructure/azure/app-service.bicep +0 -0
- /package/.morph/{templates → framework/templates}/infrastructure/azure/container-app-env.bicep +0 -0
- /package/.morph/{templates → framework/templates}/infrastructure/azure/container-app.bicep +0 -0
- /package/.morph/{templates → framework/templates}/infrastructure/azure/deploy-checklist.md +0 -0
- /package/.morph/{templates → framework/templates}/infrastructure/azure/deploy.ps1 +0 -0
- /package/.morph/{templates → framework/templates}/infrastructure/azure/deploy.sh +0 -0
- /package/.morph/{templates → framework/templates}/infrastructure/azure/key-vault.bicep +0 -0
- /package/.morph/{templates → framework/templates}/infrastructure/azure/main.bicep +0 -0
- /package/.morph/{templates → framework/templates}/infrastructure/azure/parameters.dev.json +0 -0
- /package/.morph/{templates → framework/templates}/infrastructure/azure/parameters.prod.json +0 -0
- /package/.morph/{templates → framework/templates}/infrastructure/azure/parameters.staging.json +0 -0
- /package/.morph/{templates → framework/templates}/infrastructure/azure/sql-database.bicep +0 -0
- /package/.morph/{templates → framework/templates}/infrastructure/azure/storage.bicep +0 -0
- /package/.morph/{templates → framework/templates}/infrastructure/docker/Dockerfile.template +0 -0
- /package/.morph/{templates → framework/templates}/infrastructure/docker/docker-compose.template.yml +0 -0
- /package/.morph/{templates → framework/templates}/infrastructure/docker/dockerfile-api.dockerfile +0 -0
- /package/.morph/{templates → framework/templates}/infrastructure/docker/dockerfile-web.dockerfile +0 -0
- /package/.morph/{templates → framework/templates}/infrastructure/docker/easypanel.template.json +0 -0
- /package/.morph/{templates → framework/templates}/infrastructure/github/actions/azure-auth/action.yml.hbs +0 -0
- /package/.morph/{templates → framework/templates}/infrastructure/github/actions/docker-build-push/action.yml.hbs +0 -0
- /package/.morph/{templates → framework/templates}/infrastructure/github/actions/health-check/action.yml.hbs +0 -0
- /package/.morph/{templates → framework/templates}/infrastructure/github/workflows/deploy-easypanel.yml.hbs +0 -0
- /package/.morph/{templates → framework/templates}/infrastructure/github/workflows/docker-build-push.yml.hbs +0 -0
- /package/.morph/{templates → framework/templates}/infrastructure/github/workflows/dotnet-build.yml.hbs +0 -0
- /package/.morph/{templates → framework/templates}/integrations/asaas-client.cs +0 -0
- /package/.morph/{templates → framework/templates}/integrations/asaas-webhook.cs +0 -0
- /package/.morph/{templates → framework/templates}/integrations/azure-identity-config.cs +0 -0
- /package/.morph/{templates → framework/templates}/integrations/clerk-config.cs +0 -0
- /package/.morph/{templates → framework/templates}/meta-prompts/fusion/fusion-agent.md +0 -0
- /package/.morph/{templates → framework/templates}/meta-prompts/fusion/fusion-aggregator.md +0 -0
- /package/.morph/{templates → framework/templates}/meta-prompts/hops/hop-retry.md +0 -0
- /package/.morph/{templates → framework/templates}/meta-prompts/hops/hop-validation.md +0 -0
- /package/.morph/{templates → framework/templates}/meta-prompts/hops/hop-wrapper.md +0 -0
- /package/.morph/{templates → framework/templates}/meta-prompts/parallel-workers/parallel-coordinator.md +0 -0
- /package/.morph/{templates → framework/templates}/meta-prompts/squad-leaders/backend-squad.md +0 -0
- /package/.morph/{templates → framework/templates}/meta-prompts/squad-leaders/frontend-squad.md +0 -0
- /package/.morph/{templates → framework/templates}/meta-prompts/squad-leaders/squad-leader.md +0 -0
- /package/.morph/{templates → framework/templates}/meta-prompts/validators/checkpoint-validator.md +0 -0
- /package/.morph/{templates → framework/templates}/saas/subscription.cs +0 -0
- /package/.morph/{templates → framework/templates}/saas/tenant.cs +0 -0
- /package/.morph/{templates → framework/templates}/state.template.json +0 -0
- /package/.morph/{templates → framework/templates}/ui/FluentDesignTheme.cs +0 -0
- /package/.morph/{templates → framework/templates}/ui/MudTheme.cs +0 -0
- /package/.morph/{templates → framework/templates}/ui/design-system.css +0 -0
- /package/framework/{skills/level-2-domains → agents}/README.md +0 -0
- /package/framework/hooks/{commit-msg → git/commit-msg}/conventional-commits.sh +0 -0
- /package/framework/hooks/{pre-commit → git/pre-commit}/agents.sh +0 -0
- /package/framework/hooks/{pre-commit → git/pre-commit}/orchestrator.sh +0 -0
- /package/framework/hooks/{pre-commit → git/pre-commit}/specs.sh +0 -0
- /package/framework/hooks/{pre-push → git/pre-push}/run-tests.sh +0 -0
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
import { join, dirname } from 'path';
|
|
2
2
|
import { fileURLToPath } from 'url';
|
|
3
|
+
import { spawnSync } from 'child_process';
|
|
4
|
+
import { existsSync } from 'fs';
|
|
3
5
|
|
|
4
6
|
const __dirname = dirname(fileURLToPath(import.meta.url));
|
|
5
7
|
import fs from 'fs-extra';
|
|
@@ -12,8 +14,6 @@ import {
|
|
|
12
14
|
copyFile,
|
|
13
15
|
pathExists,
|
|
14
16
|
ensureDir,
|
|
15
|
-
createDirectoryLink,
|
|
16
|
-
createSymlink,
|
|
17
17
|
readJson,
|
|
18
18
|
writeJson
|
|
19
19
|
} from '../../utils/file-copier.js';
|
|
@@ -24,7 +24,9 @@ import {
|
|
|
24
24
|
getUpdateInstructions,
|
|
25
25
|
detectInstallMethod
|
|
26
26
|
} from '../../utils/version-checker.js';
|
|
27
|
-
import { installClaudeHooks } from '../../utils/
|
|
27
|
+
import { installClaudeHooks } from '../../utils/claude-settings-manager.js';
|
|
28
|
+
import { installSkills } from '../../utils/skills-installer.js';
|
|
29
|
+
import { installAgents, installDomainAgents } from '../../utils/agents-installer.js';
|
|
28
30
|
import { AutoContextOrchestrator } from '../../core/orchestrator.js';
|
|
29
31
|
import { detectClaudeCode } from '../../llm/environment-detector.js';
|
|
30
32
|
|
|
@@ -53,8 +55,8 @@ async function backupUserConfig(morphPath) {
|
|
|
53
55
|
*/
|
|
54
56
|
async function cleanFrameworkDirs(morphPath, targetPath) {
|
|
55
57
|
const dirsToClean = [
|
|
56
|
-
join(morphPath, 'templates'),
|
|
57
|
-
join(morphPath, 'standards'),
|
|
58
|
+
join(morphPath, 'framework', 'templates'),
|
|
59
|
+
join(morphPath, 'framework', 'standards'),
|
|
58
60
|
join(morphPath, 'config'),
|
|
59
61
|
join(targetPath, '.claude')
|
|
60
62
|
];
|
|
@@ -115,9 +117,9 @@ export async function updateCommand(options) {
|
|
|
115
117
|
needsInitialization = true;
|
|
116
118
|
|
|
117
119
|
// Create basic .morph structure
|
|
118
|
-
await ensureDir(join(morphPath, '
|
|
119
|
-
await ensureDir(join(morphPath, '
|
|
120
|
-
await ensureDir(join(morphPath, '
|
|
120
|
+
await ensureDir(join(morphPath, 'context'));
|
|
121
|
+
await ensureDir(join(morphPath, 'features'));
|
|
122
|
+
await ensureDir(join(morphPath, 'framework'));
|
|
121
123
|
await ensureDir(join(morphPath, 'config'));
|
|
122
124
|
logger.dim(' ✓ Created .morph directory structure');
|
|
123
125
|
}
|
|
@@ -194,7 +196,7 @@ export async function updateCommand(options) {
|
|
|
194
196
|
if (updateTemplates) {
|
|
195
197
|
updateSpinner.text = 'Updating templates...';
|
|
196
198
|
const templatesSrc = join(contentDir, 'framework', 'templates');
|
|
197
|
-
const templatesDest = join(morphPath, 'templates');
|
|
199
|
+
const templatesDest = join(morphPath, 'framework', 'templates');
|
|
198
200
|
await copyDirectory(templatesSrc, templatesDest);
|
|
199
201
|
}
|
|
200
202
|
|
|
@@ -202,30 +204,31 @@ export async function updateCommand(options) {
|
|
|
202
204
|
if (updateStandards) {
|
|
203
205
|
updateSpinner.text = 'Updating standards...';
|
|
204
206
|
const standardsSrc = join(contentDir, 'framework', 'standards');
|
|
205
|
-
const standardsDest = join(morphPath, 'standards');
|
|
207
|
+
const standardsDest = join(morphPath, 'framework', 'standards');
|
|
206
208
|
await copyDirectory(standardsSrc, standardsDest);
|
|
207
209
|
}
|
|
208
210
|
|
|
209
211
|
// Update agents.json (sourced from framework/ — canonical single source of truth)
|
|
210
212
|
updateSpinner.text = 'Updating agents configuration...';
|
|
211
213
|
const agentsSrc = join(__dirname, '..', '..', '..', 'framework', 'agents.json');
|
|
212
|
-
const agentsDest = join(morphPath, '
|
|
214
|
+
const agentsDest = join(morphPath, 'framework', 'agents.json');
|
|
213
215
|
if (await pathExists(agentsSrc)) {
|
|
214
216
|
await copyFile(agentsSrc, agentsDest);
|
|
215
217
|
}
|
|
216
218
|
|
|
217
|
-
//
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
219
|
+
// Regenerate derived files (phase-utils.js, skill output tables) from output-schema.js
|
|
220
|
+
// Only runs when the generator script is present (framework dev installs via npm link)
|
|
221
|
+
updateSpinner.text = 'Syncing generated refs...';
|
|
222
|
+
try {
|
|
223
|
+
const generateScript = join(__dirname, '..', '..', '..', 'scripts', 'generate-refs.js');
|
|
224
|
+
if (existsSync(generateScript)) {
|
|
225
|
+
const result = spawnSync(process.execPath, [generateScript], { encoding: 'utf8' });
|
|
226
|
+
if (result.status === 0) {
|
|
227
|
+
logger.dim(' ✓ Generated refs synced (phase-utils.js, skill outputs)');
|
|
228
|
+
}
|
|
229
|
+
}
|
|
230
|
+
} catch {
|
|
231
|
+
// Non-fatal: generator unavailable or files already in sync
|
|
229
232
|
}
|
|
230
233
|
|
|
231
234
|
// Update .claude commands and skills
|
|
@@ -234,8 +237,6 @@ export async function updateCommand(options) {
|
|
|
234
237
|
const frameworkDir = join(__dirname, '..', '..', '..', 'framework');
|
|
235
238
|
const claudeDest = join(targetPath, '.claude');
|
|
236
239
|
|
|
237
|
-
let symlinkCount = 0;
|
|
238
|
-
let copyCount = 0;
|
|
239
240
|
let commandsCopied = false;
|
|
240
241
|
|
|
241
242
|
// Copy commands directory (slash commands): framework/commands/ → .claude/commands/
|
|
@@ -248,64 +249,40 @@ export async function updateCommand(options) {
|
|
|
248
249
|
logger.warn(' ⚠ framework/commands/ source missing — commands not updated');
|
|
249
250
|
}
|
|
250
251
|
|
|
251
|
-
//
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
for (const entry of entries) {
|
|
268
|
-
if (entry.isDirectory()) {
|
|
269
|
-
const categorySrc = join(skillsSrc, entry.name);
|
|
270
|
-
const categoryDest = join(skillsDest, entry.name);
|
|
271
|
-
|
|
272
|
-
// Count .md files for reporting
|
|
273
|
-
const categoryEntries = await fs.readdir(categorySrc, { withFileTypes: true });
|
|
274
|
-
const mdFiles = categoryEntries.filter(e => e.isFile() && e.name.endsWith('.md'));
|
|
275
|
-
totalSkillFiles += mdFiles.length;
|
|
276
|
-
|
|
277
|
-
const result = await createDirectoryLink(categorySrc, categoryDest);
|
|
278
|
-
if (result === 'copy') {
|
|
279
|
-
copiedCategories++;
|
|
280
|
-
} else {
|
|
281
|
-
linkedCategories++;
|
|
282
|
-
}
|
|
283
|
-
} else if (entry.isFile() && entry.name.endsWith('.md')) {
|
|
284
|
-
// Handle .md files in skills root
|
|
285
|
-
totalSkillFiles++;
|
|
286
|
-
const result = await createSymlink(join(skillsSrc, entry.name), join(skillsDest, entry.name), 'file');
|
|
287
|
-
if (result === 'symlink') {
|
|
288
|
-
linkedCategories++;
|
|
289
|
-
} else {
|
|
290
|
-
copiedCategories++;
|
|
291
|
-
}
|
|
292
|
-
}
|
|
293
|
-
}
|
|
252
|
+
// Sync morph skills to .claude/skills/ for native Claude Code discovery
|
|
253
|
+
updateSpinner.text = 'Syncing morph skills to .claude/skills/...';
|
|
254
|
+
await installSkills(targetPath);
|
|
255
|
+
|
|
256
|
+
// Sync native subagents to .claude/agents/
|
|
257
|
+
updateSpinner.text = 'Syncing agents to .claude/agents/...';
|
|
258
|
+
await installAgents(targetPath, frameworkDir);
|
|
259
|
+
await installDomainAgents(targetPath, frameworkDir);
|
|
260
|
+
|
|
261
|
+
// Sync path-scoped rules to .claude/rules/
|
|
262
|
+
updateSpinner.text = 'Syncing rules to .claude/rules/...';
|
|
263
|
+
const rulesSrc = join(frameworkDir, 'rules');
|
|
264
|
+
const rulesDest = join(claudeDest, 'rules');
|
|
265
|
+
if (await pathExists(rulesSrc)) {
|
|
266
|
+
await copyDirectory(rulesSrc, rulesDest);
|
|
267
|
+
}
|
|
294
268
|
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
269
|
+
// Sync runtime CLAUDE.md to .claude/CLAUDE.md
|
|
270
|
+
updateSpinner.text = 'Syncing .claude/CLAUDE.md...';
|
|
271
|
+
const runtimeSrc = join(frameworkDir, 'CLAUDE.md');
|
|
272
|
+
const runtimeDest = join(claudeDest, 'CLAUDE.md');
|
|
273
|
+
if (await pathExists(runtimeSrc)) {
|
|
274
|
+
await copyFile(runtimeSrc, runtimeDest);
|
|
298
275
|
}
|
|
299
276
|
|
|
300
|
-
// Update
|
|
277
|
+
// Update Claude Code hooks in .claude/settings.local.json
|
|
301
278
|
updateSpinner.text = 'Updating Claude Code hooks...';
|
|
302
|
-
await installClaudeHooks(targetPath);
|
|
279
|
+
const hooksResult = await installClaudeHooks(targetPath);
|
|
303
280
|
|
|
304
281
|
// Update CLAUDE.md
|
|
305
282
|
updateSpinner.text = 'Updating CLAUDE.md...';
|
|
306
|
-
const claudeMdSrc = join(
|
|
283
|
+
const claudeMdSrc = join(frameworkDir, 'CLAUDE.md');
|
|
307
284
|
const claudeMdDest = join(targetPath, 'CLAUDE.md');
|
|
308
|
-
await
|
|
285
|
+
await copyFile(claudeMdSrc, claudeMdDest);
|
|
309
286
|
|
|
310
287
|
// Restore user config after framework reinstallation
|
|
311
288
|
updateSpinner.text = 'Restoring user configuration...';
|
|
@@ -330,21 +307,16 @@ export async function updateCommand(options) {
|
|
|
330
307
|
|
|
331
308
|
logger.blank();
|
|
332
309
|
logger.info('Updated files:');
|
|
333
|
-
if (updateTemplates) logger.dim(' ✓ .morph/templates/');
|
|
334
|
-
if (updateStandards) logger.dim(' ✓ .morph/standards/');
|
|
335
|
-
logger.dim(' ✓ .morph/
|
|
336
|
-
logger.dim(' ✓ .morph/config/azure-pricing.json');
|
|
310
|
+
if (updateTemplates) logger.dim(' ✓ .morph/framework/templates/');
|
|
311
|
+
if (updateStandards) logger.dim(' ✓ .morph/framework/standards/');
|
|
312
|
+
logger.dim(' ✓ .morph/framework/agents.json');
|
|
337
313
|
if (commandsCopied) logger.dim(' ✓ .claude/commands/');
|
|
338
314
|
|
|
339
|
-
|
|
340
|
-
|
|
341
|
-
|
|
342
|
-
|
|
343
|
-
|
|
344
|
-
logger.warn(` ⚠ Directory links not supported (copied instead). Skills won't auto-update.`);
|
|
345
|
-
}
|
|
346
|
-
|
|
347
|
-
logger.dim(' ✓ .claude/settings.local.json (agent-teams hooks)');
|
|
315
|
+
logger.dim(` ✓ .claude/settings.local.json (${hooksResult.installed} hooks installed)`);
|
|
316
|
+
logger.dim(' ✓ .claude/skills/ (skills installed as directories)');
|
|
317
|
+
logger.dim(' ✓ .claude/agents/ (native subagents refreshed)');
|
|
318
|
+
logger.dim(' ✓ .claude/rules/ (path-scoped rules synced)');
|
|
319
|
+
logger.dim(' ✓ .claude/CLAUDE.md (runtime quick reference)');
|
|
348
320
|
logger.dim(' ✓ CLAUDE.md');
|
|
349
321
|
logger.blank();
|
|
350
322
|
logger.info('Your config.json was preserved.');
|
|
@@ -13,6 +13,7 @@ import chalk from 'chalk';
|
|
|
13
13
|
import { loadState, saveState, getFeature, getApprovalGate } from '../../core/state/state-manager.js';
|
|
14
14
|
import { PHASES, validatePhase } from './validate-phase.js';
|
|
15
15
|
import { detectDesignSystem, hasUIAgentsActive } from '../../lib/detectors/design-system-detector.js';
|
|
16
|
+
import { getOutputPath } from '../../core/paths/output-schema.js';
|
|
16
17
|
import { shouldAutoApprove, autoCalculateTrust } from '../../lib/trust/trust-manager.js';
|
|
17
18
|
import { validateSpec } from '../../lib/validators/spec-validator.js';
|
|
18
19
|
import { validateTransition, getPhaseDisplayName } from '../../core/state/phase-state-machine.js';
|
|
@@ -401,7 +402,7 @@ function getPhaseGuidance(phase, feature) {
|
|
|
401
402
|
],
|
|
402
403
|
'sync': [
|
|
403
404
|
'Review decisions.md for standards to promote',
|
|
404
|
-
`Sync: morph-spec sync --path
|
|
405
|
+
`Sync: morph-spec sync --path ${getOutputPath(feature, 'decisions')}`
|
|
405
406
|
]
|
|
406
407
|
};
|
|
407
408
|
|
|
@@ -437,8 +438,8 @@ function designSystemGate(feature, projectPath = '.') {
|
|
|
437
438
|
'Design system is required when UI agents (blazor-builder, ui-designer, css-specialist) are active',
|
|
438
439
|
'',
|
|
439
440
|
'Create a design system with one of these options:',
|
|
440
|
-
' 1. Project-level: .morph/
|
|
441
|
-
` 2. Feature-level:
|
|
441
|
+
' 1. Project-level: .morph/context/design-system.md (shared across features)',
|
|
442
|
+
` 2. Feature-level: ${getOutputPath(feature, 'uiDesignSystem')} (feature-specific)`,
|
|
442
443
|
' 3. Auto-generate: morph-spec generate design-system (scans existing CSS)',
|
|
443
444
|
'',
|
|
444
445
|
'Or remove UI agents if they are not needed:',
|
|
@@ -339,9 +339,16 @@ async function markOutputCommand(featureName, outputType, options) {
|
|
|
339
339
|
logger.error('Missing required arguments');
|
|
340
340
|
logger.dim(' Usage: morph-spec state mark-output <feature> <output-type>');
|
|
341
341
|
logger.blank();
|
|
342
|
-
logger.dim(' Valid types:
|
|
343
|
-
logger.dim('
|
|
344
|
-
logger.dim('
|
|
342
|
+
logger.dim(' Valid types:');
|
|
343
|
+
logger.dim(' Standard: proposal, spec, contracts, tasks, decisions, recap');
|
|
344
|
+
logger.dim(' UI/UX: uiDesignSystem, uiMockups, uiComponents, uiFlows');
|
|
345
|
+
logger.blank();
|
|
346
|
+
logger.dim(' Note: UI types also accept kebab-case (e.g., ui-design-system)');
|
|
347
|
+
logger.blank();
|
|
348
|
+
logger.dim(' Examples:');
|
|
349
|
+
logger.dim(' morph-spec state mark-output my-feature spec');
|
|
350
|
+
logger.dim(' morph-spec state mark-output my-feature uiDesignSystem');
|
|
351
|
+
logger.dim(' morph-spec state mark-output my-feature ui-design-system');
|
|
345
352
|
process.exit(1);
|
|
346
353
|
}
|
|
347
354
|
|
|
@@ -71,11 +71,28 @@ const PHASES = {
|
|
|
71
71
|
}
|
|
72
72
|
};
|
|
73
73
|
|
|
74
|
+
// Map output filenames to their phase subfolders
|
|
75
|
+
const OUTPUT_PHASE_MAP = {
|
|
76
|
+
'proposal.md': '0-proposal',
|
|
77
|
+
'schema-analysis.md': '1-design',
|
|
78
|
+
'spec.md': '1-design',
|
|
79
|
+
'clarifications.md': '1-design',
|
|
80
|
+
'contracts.cs': '1-design',
|
|
81
|
+
'decisions.md': '1-design',
|
|
82
|
+
'ui-design-system.md': '2-ui',
|
|
83
|
+
'ui-mockups.md': '2-ui',
|
|
84
|
+
'ui-components.md': '2-ui',
|
|
85
|
+
'ui-flows.md': '2-ui',
|
|
86
|
+
'tasks.md': '3-tasks',
|
|
87
|
+
'recap.md': '4-implement'
|
|
88
|
+
};
|
|
89
|
+
|
|
74
90
|
/**
|
|
75
91
|
* Check if output file exists
|
|
76
92
|
*/
|
|
77
93
|
function checkOutput(featurePath, outputFile) {
|
|
78
|
-
const
|
|
94
|
+
const phaseDir = OUTPUT_PHASE_MAP[outputFile] || '';
|
|
95
|
+
const filePath = path.join(featurePath, phaseDir, outputFile);
|
|
79
96
|
return fs.existsSync(filePath);
|
|
80
97
|
}
|
|
81
98
|
|
|
@@ -83,7 +100,7 @@ function checkOutput(featurePath, outputFile) {
|
|
|
83
100
|
* Validate phase requirements
|
|
84
101
|
*/
|
|
85
102
|
function validatePhase(featureName, targetPhase) {
|
|
86
|
-
const featurePath = path.join(process.cwd(), '.morph/
|
|
103
|
+
const featurePath = path.join(process.cwd(), '.morph/features', featureName);
|
|
87
104
|
|
|
88
105
|
// Check if feature directory exists
|
|
89
106
|
if (!fs.existsSync(featurePath)) {
|
|
@@ -9,7 +9,7 @@ import { logger } from '../../utils/logger.js';
|
|
|
9
9
|
import { getTemplateById, resolveTemplatePathById } from '../../core/templates/template-registry.js';
|
|
10
10
|
|
|
11
11
|
/**
|
|
12
|
-
* Customize template command - copies framework template to project .morph/templates/
|
|
12
|
+
* Customize template command - copies framework template to project .morph/framework/templates/
|
|
13
13
|
*/
|
|
14
14
|
export async function templateCustomizeCommand(templateId, options) {
|
|
15
15
|
logger.header(`Customizing Template: ${templateId}`);
|
|
@@ -34,9 +34,9 @@ export async function templateCustomizeCommand(templateId, options) {
|
|
|
34
34
|
process.exit(1);
|
|
35
35
|
}
|
|
36
36
|
|
|
37
|
-
// 4. Destination is always project-local .morph/templates/
|
|
38
|
-
const destDir = join(projectPath, '.morph/templates', dirname(template.path));
|
|
39
|
-
const destPath = join(projectPath, '.morph/templates', template.path);
|
|
37
|
+
// 4. Destination is always project-local .morph/framework/templates/
|
|
38
|
+
const destDir = join(projectPath, '.morph/framework/templates', dirname(template.path));
|
|
39
|
+
const destPath = join(projectPath, '.morph/framework/templates', template.path);
|
|
40
40
|
|
|
41
41
|
// 5. Check if already exists
|
|
42
42
|
if (existsSync(destPath) && !options.force) {
|
|
@@ -111,7 +111,7 @@ export async function templateRenderCommand(templateId, outputPath, variablesJso
|
|
|
111
111
|
|
|
112
112
|
if (!templatePath) {
|
|
113
113
|
logger.error(`Template file not found for ${templateId}`);
|
|
114
|
-
logger.dim(' Searched in: .morph/templates/ and framework/templates/');
|
|
114
|
+
logger.dim(' Searched in: .morph/framework/templates/ and framework/templates/');
|
|
115
115
|
process.exit(1);
|
|
116
116
|
}
|
|
117
117
|
|
|
@@ -83,7 +83,7 @@ export async function templateShowCommand(templateId, options) {
|
|
|
83
83
|
console.log(` ${chalk.green(resolvedPath)}`);
|
|
84
84
|
console.log(` ${chalk.dim(`(${existsSync(resolvedPath) ? 'exists' : 'not found'})`)}`);
|
|
85
85
|
} else {
|
|
86
|
-
console.log(` ${chalk.red('Not found in .morph/templates/ or framework/templates/')}`);
|
|
86
|
+
console.log(` ${chalk.red('Not found in .morph/framework/templates/ or framework/templates/')}`);
|
|
87
87
|
}
|
|
88
88
|
logger.blank();
|
|
89
89
|
}
|