@polymorphism-tech/morph-spec 4.11.1 → 4.13.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/README.md +21 -29
- package/bin/morph-spec.js +41 -24
- package/bin/task-manager.js +962 -1341
- package/bin/validate.js +1 -1
- package/claude-plugin.json +1 -1
- package/docs/CHEATSHEET.md +10 -11
- package/docs/QUICKSTART.md +15 -15
- package/framework/CLAUDE.md +5 -2
- package/framework/agents/README.md +3 -4
- package/framework/agents/ai-agents/ai-system-architect.md +6 -10
- package/framework/agents/architecture/seo-growth-hacker.md +166 -326
- package/framework/agents/architecture/standards-architect.md +21 -31
- package/framework/agents/backend/dotnet-senior.md +160 -86
- package/framework/agents/backend/ef-modeler.md +2 -6
- package/framework/agents/backend/hangfire-orchestrator.md +8 -9
- package/framework/agents/backend/ms-agent-expert.md +1 -1
- package/framework/agents/frontend/nextjs-expert.md +198 -133
- package/framework/agents/frontend/ui-ux-designer.md +226 -267
- package/framework/agents/infrastructure/infra-architect.md +191 -27
- package/framework/agents/integrations/clerk-auth.md +19 -26
- package/framework/agents/integrations/hangfire-integration.md +1 -4
- package/framework/agents.json +226 -1454
- package/framework/commands/morph-apply.md +4 -4
- package/framework/commands/morph-preflight.md +4 -26
- package/framework/commands/morph-proposal.md +19 -19
- package/framework/commands/morph-status.md +2 -2
- package/framework/commands/morph-troubleshoot.md +6 -13
- package/framework/hooks/README.md +1 -6
- package/framework/hooks/claude-code/post-tool-use/agent-complete.js +122 -0
- package/framework/hooks/claude-code/post-tool-use/validator-feedback.js +4 -6
- package/framework/hooks/claude-code/pre-compact/save-morph-context.js +12 -7
- package/framework/hooks/claude-code/pre-tool-use/enforce-phase-writes.js +2 -2
- package/framework/hooks/claude-code/pre-tool-use/protect-spec-files.js +2 -2
- package/framework/hooks/claude-code/pre-tool-use/task-tracking-guard.js +5 -10
- package/framework/hooks/claude-code/session-start/inject-morph-context.js +63 -30
- package/framework/hooks/claude-code/session-start/resume-context.js +77 -0
- package/framework/hooks/claude-code/statusline.py +4 -5
- package/framework/hooks/claude-code/stop/validate-completion.js +4 -4
- package/framework/hooks/claude-code/user-prompt/enrich-prompt.js +8 -8
- package/framework/hooks/shared/compact-restore.js +28 -5
- package/framework/hooks/shared/dispatch-helpers.js +17 -0
- package/framework/hooks/shared/phase-utils.js +4 -8
- package/framework/hooks/shared/state-reader.js +34 -3
- package/framework/phases.json +7 -45
- package/framework/rules/ai-agents-standards.md +15 -0
- package/framework/rules/asaas-standards.md +13 -0
- package/framework/rules/clerk-standards.md +13 -0
- package/framework/rules/csharp-standards.md +8 -4
- package/framework/rules/data-standards.md +18 -0
- package/framework/rules/dotnet-templates.md +87 -0
- package/framework/rules/frontend-standards.md +13 -13
- package/framework/rules/hangfire-standards.md +13 -0
- package/framework/rules/infrastructure-standards.md +27 -16
- package/framework/rules/morph-workflow.md +73 -13
- package/framework/rules/nextjs-standards.md +1 -0
- package/framework/rules/nextjs-templates.md +40 -0
- package/framework/rules/resend-standards.md +12 -0
- package/framework/rules/supabase-standards.md +29 -0
- package/framework/skills/README.md +6 -8
- package/framework/skills/level-0-meta/mcp-registry.json +21 -99
- package/framework/{standards/ai-agents/team-orchestration.md → skills/level-0-meta/morph-agent-teams/SKILL.md} +472 -479
- package/framework/skills/level-0-meta/morph-brainstorming/SKILL.md +28 -1
- package/framework/skills/level-0-meta/morph-checklist/SKILL.md +2 -2
- package/framework/skills/level-0-meta/morph-code-review/SKILL.md +1 -5
- package/framework/skills/level-0-meta/morph-code-review/scripts/scan-csharp.mjs +1 -1
- package/framework/skills/level-0-meta/morph-frontend-review/SKILL.md +23 -41
- package/framework/skills/level-0-meta/morph-init/SKILL.md +18 -14
- package/framework/skills/level-0-meta/morph-parallel-dispatch/SKILL.md +225 -0
- package/framework/skills/level-0-meta/morph-post-implementation/SKILL.md +20 -0
- package/framework/skills/level-0-meta/morph-tool-usage-guide/SKILL.md +4 -8
- package/framework/skills/level-0-meta/morph-tool-usage-guide/references/tools-per-phase.md +15 -59
- package/framework/skills/level-0-meta/morph-verification-before-completion/SKILL.md +7 -19
- package/framework/skills/level-0-meta/morph-verification-before-completion/scripts/check-phase-outputs.mjs +8 -8
- package/framework/skills/level-1-workflows/README.md +1 -1
- package/framework/skills/level-1-workflows/morph-phase-codebase-analysis/SKILL.md +49 -50
- package/framework/skills/level-1-workflows/morph-phase-design/SKILL.md +58 -124
- package/framework/skills/level-1-workflows/morph-phase-design/references/architecture-analysis-guide.md +5 -50
- package/framework/skills/level-1-workflows/morph-phase-design/references/spec-example.md +1 -1
- package/framework/skills/level-1-workflows/morph-phase-implement/SKILL.md +127 -159
- package/framework/skills/level-1-workflows/morph-phase-implement/prompts/implementer-prompt.md +4 -3
- package/framework/skills/level-1-workflows/morph-phase-implement/prompts/spec-reviewer-prompt.md +2 -2
- package/framework/skills/level-1-workflows/morph-phase-implement/references/recap-example.md +1 -1
- package/framework/skills/level-1-workflows/morph-phase-plan/SKILL.md +17 -13
- package/framework/skills/level-1-workflows/morph-phase-tasks/SKILL.md +22 -40
- package/framework/skills/level-1-workflows/morph-phase-tasks/references/task-planning-patterns.md +0 -2
- package/framework/skills/level-1-workflows/morph-phase-tasks/references/tasks-example.md +5 -5
- package/framework/skills/level-1-workflows/morph-phase-uiux/SKILL.md +275 -61
- package/framework/skills/level-1-workflows/morph-scope-escalation/SKILL.md +1 -1
- package/framework/squad-templates/backend-only.json +6 -6
- package/framework/squad-templates/frontend-only.json +17 -8
- package/framework/squad-templates/full-stack.json +29 -24
- package/framework/standards/STANDARDS.json +1021 -2338
- package/framework/standards/backend/dotnet/fluent-validation-vsa.md +200 -0
- package/framework/standards/backend/dotnet/result-pattern.md +213 -0
- package/framework/standards/backend/dotnet/scalar-ui.md +172 -0
- package/framework/standards/backend/dotnet/scrutor.md +158 -0
- package/framework/standards/backend/dotnet/vsa-handler-patterns.md +274 -0
- package/framework/standards/frontend/nextjs/motion-patterns.md +1 -1
- package/framework/standards/infrastructure/supabase/mcp-setup.md +83 -193
- package/framework/standards/integration/mcp/mcp-tools.md +91 -77
- package/framework/templates/IDE-SNIPPETS.md +2 -6
- package/framework/templates/README.md +709 -814
- package/framework/templates/REGISTRY.json +223 -762
- package/framework/templates/code/dotnet/abstractions/api-endpoint.cs +7 -0
- package/framework/templates/code/dotnet/abstractions/error.cs +60 -0
- package/framework/templates/code/dotnet/abstractions/handler.cs +12 -0
- package/framework/templates/code/dotnet/abstractions/result.cs +74 -0
- package/framework/templates/code/dotnet/backend/repository.cs +148 -141
- package/framework/templates/code/dotnet/constants/api-tags.cs +6 -0
- package/framework/templates/code/dotnet/exceptions/exception-handler.cs +32 -0
- package/framework/templates/code/dotnet/extensions/database-extensions.cs +20 -0
- package/framework/templates/code/dotnet/extensions/handler-registration.cs +38 -0
- package/framework/templates/code/dotnet/extensions/health-checks.cs +24 -0
- package/framework/templates/code/dotnet/extensions/map-endpoints.cs +35 -0
- package/framework/templates/code/dotnet/extensions/result-extensions.cs +29 -0
- package/framework/templates/code/dotnet/feature/endpoint.cs.hbs +21 -0
- package/framework/templates/code/dotnet/feature/entity.cs.hbs +8 -0
- package/framework/templates/code/dotnet/feature/errors.cs.hbs +8 -0
- package/framework/templates/code/dotnet/feature/handler.cs.hbs +24 -0
- package/framework/templates/code/dotnet/feature/request.cs.hbs +4 -0
- package/framework/templates/code/dotnet/feature/response.cs.hbs +4 -0
- package/framework/templates/code/dotnet/feature/validator.cs.hbs +15 -0
- package/framework/templates/code/dotnet/jobs/job.cs +21 -17
- package/framework/templates/code/dotnet/pipelines/logging-decorator.cs +31 -0
- package/framework/templates/code/dotnet/pipelines/validation-decorator.cs +97 -0
- package/framework/templates/code/dotnet/test.cs +192 -106
- package/framework/templates/context/ARCHITECTURE.md +89 -0
- package/framework/templates/context/CONTEXT-FEATURE.md +2 -2
- package/framework/templates/context/CONTEXT.md +180 -181
- package/framework/templates/context/design-system.md +342 -211
- package/framework/templates/docs/onboarding.md +2 -3
- package/framework/templates/docs/proposal.md +171 -182
- package/framework/templates/docs/spec.md +1 -3
- package/framework/templates/docs/ui-components.md +0 -72
- package/framework/templates/examples/design-system-examples.md +4 -4
- package/framework/templates/feature/decisions.md +0 -66
- package/framework/templates/feature/recap.md +1 -2
- package/framework/templates/infrastructure/github/README.md +56 -593
- package/framework/templates/integrations/clerk-config.cs +0 -41
- package/framework/templates/meta-prompts/parallel-workers/parallel-worker.md +2 -2
- package/framework/templates/meta-prompts/squad-leaders/backend-squad.md +1 -2
- package/framework/templates/meta-prompts/squad-leaders/frontend-squad.md +83 -126
- package/framework/templates/meta-prompts/validators/pre-commit-validator.md +2 -2
- package/framework/templates/project/validate.js +2 -4
- package/framework/templates/ui/design-system.css +1 -1
- package/framework/workflows/README.md +8 -8
- package/framework/workflows/configs/fast-track.json +51 -0
- package/framework/workflows/configs/full.json +68 -0
- package/framework/workflows/configs/standard.json +7 -3
- package/framework/workflows/docs/STORY-DRIVEN-DEVELOPMENT.md +1 -1
- package/framework/workflows/docs/enforcement-pipeline.md +18 -19
- package/framework/workflows/docs/full-morph.md +69 -76
- package/framework/workflows/docs/standard.md +49 -44
- package/framework/workflows/docs/ui-refresh.md +1 -1
- package/package.json +3 -3
- package/src/commands/agents/dispatch-agents.js +55 -116
- package/src/commands/context/context-refresh.js +79 -0
- package/src/commands/mcp/mcp-setup.js +28 -6
- package/src/commands/phase/phase-reset.js +1 -1
- package/src/commands/project/doctor.js +10 -32
- package/src/commands/project/init.js +32 -1
- package/src/commands/project/status.js +6 -12
- package/src/commands/scaffold/scaffold.js +131 -0
- package/src/commands/scope/escalate.js +1 -1
- package/src/commands/state/advance-phase.js +15 -29
- package/src/commands/state/state.js +20 -5
- package/src/commands/tasks/task.js +0 -30
- package/src/commands/validation/validate-feature.js +3 -10
- package/src/core/paths/output-schema.js +12 -13
- package/src/core/state/phase-state-machine.js +211 -217
- package/src/core/state/state-manager.js +9 -9
- package/src/lib/agents/agents-manager.js +2 -2
- package/src/lib/agents/output-collector.js +1 -2
- package/src/lib/detectors/design-system-detector.js +4 -4
- package/src/lib/detectors/index.js +1 -11
- package/src/lib/generators/architecture-scanner.js +640 -0
- package/src/lib/generators/context-generator.js +3 -3
- package/src/lib/generators/design-system-generator.js +508 -298
- package/src/lib/generators/index.js +12 -10
- package/src/lib/generators/metadata-extractor.js +386 -387
- package/src/lib/generators/recap-generator.js +4 -4
- package/src/lib/generators/scaffold-generator.js +317 -0
- package/src/lib/generators/settings-generator.js +0 -1
- package/src/lib/phase-chain/phase-validator.js +64 -42
- package/src/lib/stack/stack-profile.js +2 -2
- package/src/lib/standards/digest-builder.js +72 -285
- package/src/lib/tasks/task-parser.js +11 -5
- package/src/lib/validators/architecture/architecture-validator.js +259 -387
- package/src/lib/validators/content/content-validator.js +287 -287
- package/src/lib/validators/css/css-validator.js +340 -352
- package/src/lib/validators/design-system/design-system-validator.js +11 -5
- package/src/lib/validators/packages/package-validator.js +347 -360
- package/src/lib/validators/shared/issue-counter.js +14 -18
- package/src/lib/validators/validation-runner.js +3 -19
- package/src/scripts/setup-infra.js +1 -1
- package/src/utils/agents-installer.js +24 -3
- package/src/utils/file-copier.js +1 -0
- package/src/utils/hooks-installer.js +21 -19
- package/src/utils/skills-installer.js +178 -178
- package/framework/agents/architecture/prompt-engineer.md +0 -195
- package/framework/agents/backend/api-designer.md +0 -106
- package/framework/agents/frontend/blazor-builder.md +0 -229
- package/framework/agents/frontend/nextjs-ui-specialist.md +0 -218
- package/framework/agents/infrastructure/azure-architect.md +0 -150
- package/framework/agents/infrastructure/azure-deploy-specialist.md +0 -707
- package/framework/agents/infrastructure/bicep-architect.md +0 -132
- package/framework/agents/infrastructure/container-specialist.md +0 -137
- package/framework/agents/infrastructure/devops-engineer.md +0 -126
- package/framework/agents/integrations/azure-identity.md +0 -148
- package/framework/agents/quality/code-analyzer.md +0 -239
- package/framework/agents/quality/testing-specialist.md +0 -130
- package/framework/hooks/claude-code/notification/approval-reminder.js +0 -57
- package/framework/hooks/claude-code/post-tool-use/context-refresh.js +0 -109
- package/framework/hooks/claude-code/post-tool-use/skill-reminder.js +0 -78
- package/framework/index/troubleshooting-index.json +0 -184
- package/framework/rules/testing-standards.md +0 -14
- package/framework/skills/level-0-meta/morph-replicate/SKILL.md +0 -230
- package/framework/skills/level-0-meta/morph-replicate/references/blazor-html-mapping.md +0 -70
- package/framework/skills/level-1-workflows/morph-phase-clarify/SKILL.md +0 -256
- package/framework/skills/level-1-workflows/morph-phase-clarify/references/clarifications-example.md +0 -117
- package/framework/skills/level-1-workflows/morph-phase-setup/SKILL.md +0 -269
- package/framework/standards/ai-agents/blazor-ui.md +0 -364
- package/framework/standards/architecture/ddd/aggregates.md +0 -120
- package/framework/standards/architecture/ddd/bounded-contexts.md +0 -105
- package/framework/standards/architecture/ddd/complexity-levels.md +0 -108
- package/framework/standards/architecture/ddd/entities.md +0 -99
- package/framework/standards/architecture/ddd/ubiquitous-language.md +0 -58
- package/framework/standards/architecture/ddd/value-objects.md +0 -124
- package/framework/standards/backend/api/minimal-api.md +0 -494
- package/framework/standards/backend/api/rest.md +0 -492
- package/framework/standards/backend/authentication/passkeys.md +0 -428
- package/framework/standards/backend/database/ef-core.md +0 -199
- package/framework/standards/backend/database/migrations.md +0 -393
- package/framework/standards/backend/database/repository-patterns.md +0 -528
- package/framework/standards/backend/dotnet/async.md +0 -366
- package/framework/standards/backend/dotnet/core.md +0 -117
- package/framework/standards/backend/dotnet/di.md +0 -439
- package/framework/standards/backend/dotnet/program-cs-checklist.md +0 -92
- package/framework/standards/context/analytics.md +0 -96
- package/framework/standards/context/bundles.md +0 -110
- package/framework/standards/context/priming.md +0 -78
- package/framework/standards/core/architecture.md +0 -185
- package/framework/standards/core/coding.md +0 -214
- package/framework/standards/core/git-branching-strategy.md +0 -403
- package/framework/standards/core/git.md +0 -185
- package/framework/standards/core/testing.md +0 -295
- package/framework/standards/data/nosql/blob-storage.md +0 -102
- package/framework/standards/data/vector-search/azure-ai-search.md +0 -121
- package/framework/standards/frontend/blazor/design-checklist.md +0 -222
- package/framework/standards/frontend/blazor/fluent-ui-setup.md +0 -595
- package/framework/standards/frontend/blazor/fluent-ui.md +0 -137
- package/framework/standards/frontend/blazor/html-conversion.md +0 -184
- package/framework/standards/frontend/blazor/lifecycle.md +0 -195
- package/framework/standards/frontend/blazor/pitfalls.md +0 -198
- package/framework/standards/frontend/blazor/state.md +0 -191
- package/framework/standards/frontend/design-system/aesthetic-direction.md +0 -213
- package/framework/standards/infrastructure/azure/azure.md +0 -624
- package/framework/standards/infrastructure/azure/bicep/bicep-patterns.md +0 -422
- package/framework/standards/infrastructure/azure/devops/azure-devops-setup.md +0 -516
- package/framework/standards/infrastructure/azure/devops/local-development.md +0 -520
- package/framework/standards/infrastructure/azure/services/functions.md +0 -486
- package/framework/standards/infrastructure/azure/services/service-bus.md +0 -459
- package/framework/standards/infrastructure/azure/services/storage.md +0 -407
- package/framework/standards/infrastructure/vercel/vercel-database.md +0 -106
- package/framework/standards/integration/api/graphql.md +0 -91
- package/framework/standards/integration/api/grpc.md +0 -114
- package/framework/standards/integration/api/rest-design.md +0 -95
- package/framework/standards/integration/event-driven/cqrs.md +0 -101
- package/framework/standards/integration/event-driven/event-sourcing.md +0 -124
- package/framework/standards/integration/event-driven/service-bus.md +0 -95
- package/framework/standards/observability/logging.md +0 -131
- package/framework/standards/observability/metrics.md +0 -121
- package/framework/standards/observability/monitoring.md +0 -114
- package/framework/standards/observability/tracing.md +0 -132
- package/framework/standards/workflows/parallel-execution.md +0 -112
- package/framework/standards/workflows/thread-management.md +0 -113
- package/framework/templates/code/dotnet/backend/service.cs +0 -139
- package/framework/templates/code/dotnet/contracts/Commands.cs +0 -74
- package/framework/templates/code/dotnet/contracts/Entities.cs +0 -25
- package/framework/templates/code/dotnet/contracts/Queries.cs +0 -74
- package/framework/templates/code/dotnet/contracts/api-contracts.cs +0 -173
- package/framework/templates/code/dotnet/contracts/contracts-level1.cs +0 -69
- package/framework/templates/code/dotnet/contracts/contracts-level2.cs +0 -86
- package/framework/templates/code/dotnet/contracts/contracts-level3.cs +0 -41
- package/framework/templates/code/dotnet/frontend/component.razor +0 -239
- package/framework/templates/infrastructure/azure/Dockerfile.example +0 -82
- package/framework/templates/infrastructure/azure/README.md +0 -286
- package/framework/templates/infrastructure/azure/app-insights.bicep +0 -63
- package/framework/templates/infrastructure/azure/app-service.bicep +0 -164
- package/framework/templates/infrastructure/azure/container-app-env.bicep +0 -49
- package/framework/templates/infrastructure/azure/container-app.bicep +0 -156
- package/framework/templates/infrastructure/azure/deploy-checklist.md +0 -426
- package/framework/templates/infrastructure/azure/deploy.ps1 +0 -229
- package/framework/templates/infrastructure/azure/deploy.sh +0 -208
- package/framework/templates/infrastructure/azure/key-vault.bicep +0 -91
- package/framework/templates/infrastructure/azure/main.bicep +0 -189
- package/framework/templates/infrastructure/azure/parameters.dev.json +0 -29
- package/framework/templates/infrastructure/azure/parameters.prod.json +0 -29
- package/framework/templates/infrastructure/azure/parameters.staging.json +0 -29
- package/framework/templates/infrastructure/azure/sql-database.bicep +0 -103
- package/framework/templates/infrastructure/azure/storage.bicep +0 -106
- package/framework/templates/infrastructure/github/actions/azure-auth/action.yml.hbs +0 -22
- package/framework/templates/infrastructure/github/workflows/deploy-azure-app-service.yml.hbs +0 -61
- package/framework/templates/integrations/azure-identity-config.cs +0 -288
- package/framework/templates/project-structure/dotnet-ddd.md +0 -70
- package/framework/templates/saas/subscription.cs +0 -347
- package/framework/templates/saas/tenant.cs +0 -338
- package/framework/templates/ui/FluentDesignTheme.cs +0 -149
- package/framework/templates/ui/MudTheme.cs +0 -281
- package/framework/workflows/configs/nodejs-cli.json +0 -40
- package/src/commands/standards/context-budget.js +0 -89
- package/src/lib/standards/index.js +0 -7
- package/src/lib/standards/standards-context-injector.js +0 -302
- package/src/lib/validators/blazor/blazor-concurrency-analyzer.js +0 -316
- package/src/lib/validators/blazor/blazor-state-validator.js +0 -279
- package/src/lib/validators/blazor/blazor-validator.js +0 -369
- package/src/lib/validators/blazor/index.js +0 -9
|
@@ -1,149 +0,0 @@
|
|
|
1
|
-
using Microsoft.FluentUI.AspNetCore.Components;
|
|
2
|
-
|
|
3
|
-
namespace {Namespace}.Themes;
|
|
4
|
-
|
|
5
|
-
/// <summary>
|
|
6
|
-
/// Fluent UI Design Theme customizado para {Project Name}.
|
|
7
|
-
/// Gerado automaticamente baseado em ui-design-system.md
|
|
8
|
-
/// </summary>
|
|
9
|
-
/// <remarks>
|
|
10
|
-
/// Template MORPH-SPEC by Polymorphism Tech
|
|
11
|
-
/// </remarks>
|
|
12
|
-
public static class FluentDesignTheme
|
|
13
|
-
{
|
|
14
|
-
/// <summary>
|
|
15
|
-
/// Paleta de cores do tema
|
|
16
|
-
/// </summary>
|
|
17
|
-
public static DesignThemePalette GetPalette() => new()
|
|
18
|
-
{
|
|
19
|
-
// Cores Principais
|
|
20
|
-
Primary = "#{hex da cor primária}", // Ex: #3b82f6
|
|
21
|
-
Secondary = "#{hex da cor secundária}", // Ex: #6b7280
|
|
22
|
-
|
|
23
|
-
// Cores de Estado
|
|
24
|
-
Success = "#{hex}", // Ex: #10b981
|
|
25
|
-
Error = "#{hex}", // Ex: #ef4444
|
|
26
|
-
Warning = "#{hex}", // Ex: #f59e0b
|
|
27
|
-
Info = "#{hex}", // Ex: #06b6d4
|
|
28
|
-
|
|
29
|
-
// Neutros
|
|
30
|
-
NeutralLight = "#{hex do gray-50}", // Ex: #f9fafb
|
|
31
|
-
NeutralLighter = "#{hex do gray-100}", // Ex: #f3f4f6
|
|
32
|
-
NeutralDark = "#{hex do gray-800}", // Ex: #1f2937
|
|
33
|
-
NeutralDarker = "#{hex do gray-900}", // Ex: #111827
|
|
34
|
-
|
|
35
|
-
// Background e Foreground
|
|
36
|
-
Background = "#ffffff",
|
|
37
|
-
Foreground = "#{hex do gray-900}", // Texto principal
|
|
38
|
-
|
|
39
|
-
// Accent (geralmente = Primary)
|
|
40
|
-
Accent = "#{hex da cor primária}",
|
|
41
|
-
};
|
|
42
|
-
|
|
43
|
-
/// <summary>
|
|
44
|
-
/// Configuração de tipografia
|
|
45
|
-
/// </summary>
|
|
46
|
-
public static DesignThemeTypography GetTypography() => new()
|
|
47
|
-
{
|
|
48
|
-
FontFamily = "'{Font Name}', -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif",
|
|
49
|
-
|
|
50
|
-
// Tamanhos
|
|
51
|
-
FontSizeBase = "1rem", // 16px
|
|
52
|
-
FontSizeSmall = "0.875rem", // 14px
|
|
53
|
-
FontSizeLarge = "1.125rem", // 18px
|
|
54
|
-
|
|
55
|
-
// Weights
|
|
56
|
-
FontWeightRegular = 400,
|
|
57
|
-
FontWeightSemibold = 600,
|
|
58
|
-
FontWeightBold = 700,
|
|
59
|
-
|
|
60
|
-
// Line Heights
|
|
61
|
-
LineHeightBase = 1.5,
|
|
62
|
-
};
|
|
63
|
-
|
|
64
|
-
/// <summary>
|
|
65
|
-
/// Configuração de espaçamento e layout
|
|
66
|
-
/// </summary>
|
|
67
|
-
public static DesignThemeLayout GetLayout() => new()
|
|
68
|
-
{
|
|
69
|
-
// Espaçamento (baseado em múltiplos de {base}px - ex: 4px)
|
|
70
|
-
SpacingBase = "0.25rem", // 4px
|
|
71
|
-
SpacingSmall = "0.5rem", // 8px
|
|
72
|
-
SpacingMedium = "1rem", // 16px
|
|
73
|
-
SpacingLarge = "1.5rem", // 24px
|
|
74
|
-
|
|
75
|
-
// Border Radius
|
|
76
|
-
BorderRadiusSmall = "0.125rem", // 2px
|
|
77
|
-
BorderRadiusMedium = "0.375rem", // 6px
|
|
78
|
-
BorderRadiusLarge = "0.5rem", // 8px
|
|
79
|
-
|
|
80
|
-
// Shadows (depende da biblioteca - ajustar conforme API)
|
|
81
|
-
Elevation1 = "0 1px 2px 0 rgba(0, 0, 0, 0.05)",
|
|
82
|
-
Elevation2 = "0 4px 6px -1px rgba(0, 0, 0, 0.1)",
|
|
83
|
-
Elevation3 = "0 10px 15px -3px rgba(0, 0, 0, 0.1)",
|
|
84
|
-
};
|
|
85
|
-
|
|
86
|
-
/// <summary>
|
|
87
|
-
/// Aplica o tema customizado ao FluentUI
|
|
88
|
-
/// </summary>
|
|
89
|
-
/// <param name="services">Service collection</param>
|
|
90
|
-
public static void AddFluentUIWithCustomTheme(this IServiceCollection services)
|
|
91
|
-
{
|
|
92
|
-
services.AddFluentUIComponents(options =>
|
|
93
|
-
{
|
|
94
|
-
// Aplicar paleta customizada
|
|
95
|
-
options.DesignThemePalette = GetPalette();
|
|
96
|
-
|
|
97
|
-
// Outras configurações do Fluent UI
|
|
98
|
-
// ...
|
|
99
|
-
});
|
|
100
|
-
}
|
|
101
|
-
}
|
|
102
|
-
|
|
103
|
-
/// <summary>
|
|
104
|
-
/// Classe de configuração de tipografia
|
|
105
|
-
/// (Ajustar conforme API do Fluent UI Blazor v4.x)
|
|
106
|
-
/// </summary>
|
|
107
|
-
public class DesignThemeTypography
|
|
108
|
-
{
|
|
109
|
-
public string FontFamily { get; set; } = string.Empty;
|
|
110
|
-
public string FontSizeBase { get; set; } = string.Empty;
|
|
111
|
-
public string FontSizeSmall { get; set; } = string.Empty;
|
|
112
|
-
public string FontSizeLarge { get; set; } = string.Empty;
|
|
113
|
-
public int FontWeightRegular { get; set; }
|
|
114
|
-
public int FontWeightSemibold { get; set; }
|
|
115
|
-
public int FontWeightBold { get; set; }
|
|
116
|
-
public double LineHeightBase { get; set; }
|
|
117
|
-
}
|
|
118
|
-
|
|
119
|
-
/// <summary>
|
|
120
|
-
/// Classe de configuração de layout
|
|
121
|
-
/// (Ajustar conforme API do Fluent UI Blazor v4.x)
|
|
122
|
-
/// </summary>
|
|
123
|
-
public class DesignThemeLayout
|
|
124
|
-
{
|
|
125
|
-
public string SpacingBase { get; set; } = string.Empty;
|
|
126
|
-
public string SpacingSmall { get; set; } = string.Empty;
|
|
127
|
-
public string SpacingMedium { get; set; } = string.Empty;
|
|
128
|
-
public string SpacingLarge { get; set; } = string.Empty;
|
|
129
|
-
|
|
130
|
-
public string BorderRadiusSmall { get; set; } = string.Empty;
|
|
131
|
-
public string BorderRadiusMedium { get; set; } = string.Empty;
|
|
132
|
-
public string BorderRadiusLarge { get; set; } = string.Empty;
|
|
133
|
-
|
|
134
|
-
public string Elevation1 { get; set; } = string.Empty;
|
|
135
|
-
public string Elevation2 { get; set; } = string.Empty;
|
|
136
|
-
public string Elevation3 { get; set; } = string.Empty;
|
|
137
|
-
}
|
|
138
|
-
|
|
139
|
-
/// <summary>
|
|
140
|
-
/// EXEMPLO DE USO:
|
|
141
|
-
///
|
|
142
|
-
/// // Program.cs
|
|
143
|
-
/// builder.Services.AddFluentUIWithCustomTheme();
|
|
144
|
-
///
|
|
145
|
-
/// // App.razor ou MainLayout.razor
|
|
146
|
-
/// <FluentDesignTheme Mode="DesignThemeMode.Light" />
|
|
147
|
-
///
|
|
148
|
-
/// // Componentes podem acessar cores via CSS variables ou propriedades do tema
|
|
149
|
-
/// </summary>
|
|
@@ -1,281 +0,0 @@
|
|
|
1
|
-
using MudBlazor;
|
|
2
|
-
|
|
3
|
-
namespace {Namespace}.Themes;
|
|
4
|
-
|
|
5
|
-
/// <summary>
|
|
6
|
-
/// MudBlazor Theme customizado para {Project Name}.
|
|
7
|
-
/// Gerado automaticamente baseado em ui-design-system.md
|
|
8
|
-
/// </summary>
|
|
9
|
-
/// <remarks>
|
|
10
|
-
/// Template MORPH-SPEC by Polymorphism Tech
|
|
11
|
-
/// </remarks>
|
|
12
|
-
public static class AppTheme
|
|
13
|
-
{
|
|
14
|
-
/// <summary>
|
|
15
|
-
/// Tema Light Mode
|
|
16
|
-
/// </summary>
|
|
17
|
-
public static MudTheme LightTheme => new()
|
|
18
|
-
{
|
|
19
|
-
Palette = new PaletteLight
|
|
20
|
-
{
|
|
21
|
-
// Cores Principais
|
|
22
|
-
Primary = "#{hex da cor primária}", // Ex: #3b82f6
|
|
23
|
-
Secondary = "#{hex da cor secundária}", // Ex: #6b7280
|
|
24
|
-
Tertiary = "#{hex da cor terciária}", // Opcional
|
|
25
|
-
|
|
26
|
-
// Cores de Estado
|
|
27
|
-
Success = "#{hex}", // Ex: #10b981
|
|
28
|
-
Error = "#{hex}", // Ex: #ef4444
|
|
29
|
-
Warning = "#{hex}", // Ex: #f59e0b
|
|
30
|
-
Info = "#{hex}", // Ex: #06b6d4
|
|
31
|
-
|
|
32
|
-
// Background e Superfícies
|
|
33
|
-
Background = "#ffffff",
|
|
34
|
-
BackgroundGrey = "#{hex do gray-50}", // Ex: #f9fafb
|
|
35
|
-
Surface = "#ffffff",
|
|
36
|
-
|
|
37
|
-
// Text Colors
|
|
38
|
-
TextPrimary = "#{hex do gray-900}", // Texto principal
|
|
39
|
-
TextSecondary = "#{hex do gray-600}", // Texto secundário
|
|
40
|
-
TextDisabled = "#{hex do gray-400}", // Texto desabilitado
|
|
41
|
-
|
|
42
|
-
// Borders
|
|
43
|
-
Divider = "#{hex do gray-200}", // Divisores
|
|
44
|
-
DividerLight = "#{hex do gray-100}", // Divisores mais claros
|
|
45
|
-
Lines = "#{hex do gray-300}", // Linhas de borda
|
|
46
|
-
|
|
47
|
-
// Action colors (usados em botões, links, etc)
|
|
48
|
-
ActionDefault = "#{hex do gray-500}",
|
|
49
|
-
ActionDisabled = "#{hex do gray-300}",
|
|
50
|
-
ActionDisabledBackground = "#{hex do gray-100}",
|
|
51
|
-
|
|
52
|
-
// Outros
|
|
53
|
-
Dark = "#{hex do gray-800}",
|
|
54
|
-
DarkLighten = "#{hex do gray-700}",
|
|
55
|
-
DarkDarken = "#{hex do gray-900}",
|
|
56
|
-
|
|
57
|
-
// Overlay (usado em modais, dropdowns)
|
|
58
|
-
OverlayLight = "rgba(255, 255, 255, 0.95)",
|
|
59
|
-
OverlayDark = "rgba(33, 33, 33, 0.95)",
|
|
60
|
-
|
|
61
|
-
// Hover effects
|
|
62
|
-
HoverOpacity = 0.06, // Opacidade do hover (6%)
|
|
63
|
-
},
|
|
64
|
-
|
|
65
|
-
Typography = new Typography
|
|
66
|
-
{
|
|
67
|
-
// Font Families
|
|
68
|
-
Default = new Default
|
|
69
|
-
{
|
|
70
|
-
FontFamily = new[] { "{Font Name}", "-apple-system", "BlinkMacSystemFont", "Segoe UI", "Roboto", "sans-serif" },
|
|
71
|
-
FontSize = "1rem", // 16px
|
|
72
|
-
FontWeight = 400, // Regular
|
|
73
|
-
LineHeight = 1.5,
|
|
74
|
-
LetterSpacing = "normal",
|
|
75
|
-
},
|
|
76
|
-
|
|
77
|
-
H1 = new H1
|
|
78
|
-
{
|
|
79
|
-
FontFamily = new[] { "{Font Name}", "sans-serif" },
|
|
80
|
-
FontSize = "2.25rem", // 36px
|
|
81
|
-
FontWeight = 700, // Bold
|
|
82
|
-
LineHeight = 1.2,
|
|
83
|
-
},
|
|
84
|
-
|
|
85
|
-
H2 = new H2
|
|
86
|
-
{
|
|
87
|
-
FontFamily = new[] { "{Font Name}", "sans-serif" },
|
|
88
|
-
FontSize = "1.875rem", // 30px
|
|
89
|
-
FontWeight = 700,
|
|
90
|
-
LineHeight = 1.3,
|
|
91
|
-
},
|
|
92
|
-
|
|
93
|
-
H3 = new H3
|
|
94
|
-
{
|
|
95
|
-
FontFamily = new[] { "{Font Name}", "sans-serif" },
|
|
96
|
-
FontSize = "1.5rem", // 24px
|
|
97
|
-
FontWeight = 600,
|
|
98
|
-
LineHeight = 1.4,
|
|
99
|
-
},
|
|
100
|
-
|
|
101
|
-
H4 = new H4
|
|
102
|
-
{
|
|
103
|
-
FontFamily = new[] { "{Font Name}", "sans-serif" },
|
|
104
|
-
FontSize = "1.25rem", // 20px
|
|
105
|
-
FontWeight = 600,
|
|
106
|
-
LineHeight = 1.4,
|
|
107
|
-
},
|
|
108
|
-
|
|
109
|
-
H5 = new H5
|
|
110
|
-
{
|
|
111
|
-
FontFamily = new[] { "{Font Name}", "sans-serif" },
|
|
112
|
-
FontSize = "1.125rem", // 18px
|
|
113
|
-
FontWeight = 600,
|
|
114
|
-
LineHeight = 1.5,
|
|
115
|
-
},
|
|
116
|
-
|
|
117
|
-
H6 = new H6
|
|
118
|
-
{
|
|
119
|
-
FontFamily = new[] { "{Font Name}", "sans-serif" },
|
|
120
|
-
FontSize = "1rem", // 16px
|
|
121
|
-
FontWeight = 600,
|
|
122
|
-
LineHeight = 1.5,
|
|
123
|
-
},
|
|
124
|
-
|
|
125
|
-
Body1 = new Body1
|
|
126
|
-
{
|
|
127
|
-
FontFamily = new[] { "{Font Name}", "sans-serif" },
|
|
128
|
-
FontSize = "1rem", // 16px
|
|
129
|
-
FontWeight = 400,
|
|
130
|
-
LineHeight = 1.5,
|
|
131
|
-
},
|
|
132
|
-
|
|
133
|
-
Body2 = new Body2
|
|
134
|
-
{
|
|
135
|
-
FontFamily = new[] { "{Font Name}", "sans-serif" },
|
|
136
|
-
FontSize = "0.875rem", // 14px
|
|
137
|
-
FontWeight = 400,
|
|
138
|
-
LineHeight = 1.43,
|
|
139
|
-
},
|
|
140
|
-
|
|
141
|
-
Button = new Button
|
|
142
|
-
{
|
|
143
|
-
FontFamily = new[] { "{Font Name}", "sans-serif" },
|
|
144
|
-
FontSize = "0.875rem", // 14px
|
|
145
|
-
FontWeight = 600, // Semibold
|
|
146
|
-
LineHeight = 1.75,
|
|
147
|
-
TextTransform = "none", // Ou "uppercase" se preferir
|
|
148
|
-
},
|
|
149
|
-
|
|
150
|
-
Caption = new Caption
|
|
151
|
-
{
|
|
152
|
-
FontFamily = new[] { "{Font Name}", "sans-serif" },
|
|
153
|
-
FontSize = "0.75rem", // 12px
|
|
154
|
-
FontWeight = 400,
|
|
155
|
-
LineHeight = 1.66,
|
|
156
|
-
},
|
|
157
|
-
|
|
158
|
-
Subtitle1 = new Subtitle1
|
|
159
|
-
{
|
|
160
|
-
FontFamily = new[] { "{Font Name}", "sans-serif" },
|
|
161
|
-
FontSize = "1rem",
|
|
162
|
-
FontWeight = 500, // Medium
|
|
163
|
-
LineHeight = 1.75,
|
|
164
|
-
},
|
|
165
|
-
|
|
166
|
-
Subtitle2 = new Subtitle2
|
|
167
|
-
{
|
|
168
|
-
FontFamily = new[] { "{Font Name}", "sans-serif" },
|
|
169
|
-
FontSize = "0.875rem",
|
|
170
|
-
FontWeight = 500,
|
|
171
|
-
LineHeight = 1.57,
|
|
172
|
-
},
|
|
173
|
-
|
|
174
|
-
Overline = new Overline
|
|
175
|
-
{
|
|
176
|
-
FontFamily = new[] { "{Font Name}", "sans-serif" },
|
|
177
|
-
FontSize = "0.75rem",
|
|
178
|
-
FontWeight = 600,
|
|
179
|
-
LineHeight = 2.66,
|
|
180
|
-
LetterSpacing = "0.08em",
|
|
181
|
-
},
|
|
182
|
-
},
|
|
183
|
-
|
|
184
|
-
Shadows = new Shadow
|
|
185
|
-
{
|
|
186
|
-
Elevation = new[]
|
|
187
|
-
{
|
|
188
|
-
"none", // 0
|
|
189
|
-
"0 1px 2px 0 rgba(0, 0, 0, 0.05)", // 1
|
|
190
|
-
"0 4px 6px -1px rgba(0, 0, 0, 0.1), 0 2px 4px -1px rgba(0, 0, 0, 0.06)", // 2
|
|
191
|
-
"0 10px 15px -3px rgba(0, 0, 0, 0.1), 0 4px 6px -2px rgba(0, 0, 0, 0.05)", // 3
|
|
192
|
-
"0 20px 25px -5px rgba(0, 0, 0, 0.1), 0 10px 10px -5px rgba(0, 0, 0, 0.04)", // 4
|
|
193
|
-
"0 25px 50px -12px rgba(0, 0, 0, 0.25)", // 5
|
|
194
|
-
// Adicione mais elevações conforme necessário
|
|
195
|
-
}
|
|
196
|
-
},
|
|
197
|
-
|
|
198
|
-
LayoutProperties = new LayoutProperties
|
|
199
|
-
{
|
|
200
|
-
// Border Radius
|
|
201
|
-
DefaultBorderRadius = "6px", // md
|
|
202
|
-
|
|
203
|
-
// Drawer
|
|
204
|
-
DrawerWidthLeft = "240px",
|
|
205
|
-
DrawerWidthRight = "240px",
|
|
206
|
-
|
|
207
|
-
// AppBar
|
|
208
|
-
AppbarHeight = "64px",
|
|
209
|
-
},
|
|
210
|
-
|
|
211
|
-
ZIndex = new ZIndex
|
|
212
|
-
{
|
|
213
|
-
Drawer = 1200,
|
|
214
|
-
AppBar = 1100,
|
|
215
|
-
Dialog = 1300,
|
|
216
|
-
Popover = 1400,
|
|
217
|
-
Snackbar = 1500,
|
|
218
|
-
Tooltip = 1600,
|
|
219
|
-
},
|
|
220
|
-
};
|
|
221
|
-
|
|
222
|
-
/// <summary>
|
|
223
|
-
/// Tema Dark Mode (opcional - ajustar cores)
|
|
224
|
-
/// </summary>
|
|
225
|
-
public static MudTheme DarkTheme => new()
|
|
226
|
-
{
|
|
227
|
-
Palette = new PaletteDark
|
|
228
|
-
{
|
|
229
|
-
// Cores Principais (ajustar para dark mode)
|
|
230
|
-
Primary = "#{hex}",
|
|
231
|
-
Secondary = "#{hex}",
|
|
232
|
-
|
|
233
|
-
// Cores de Estado
|
|
234
|
-
Success = "#{hex}",
|
|
235
|
-
Error = "#{hex}",
|
|
236
|
-
Warning = "#{hex}",
|
|
237
|
-
Info = "#{hex}",
|
|
238
|
-
|
|
239
|
-
// Background e Superfícies (tons escuros)
|
|
240
|
-
Background = "#{hex do gray-900}",
|
|
241
|
-
BackgroundGrey = "#{hex do gray-800}",
|
|
242
|
-
Surface = "#{hex do gray-800}",
|
|
243
|
-
|
|
244
|
-
// Text Colors (invertidos)
|
|
245
|
-
TextPrimary = "#{hex do gray-50}",
|
|
246
|
-
TextSecondary = "#{hex do gray-400}",
|
|
247
|
-
TextDisabled = "#{hex do gray-600}",
|
|
248
|
-
|
|
249
|
-
// Etc... (ajustar conforme design system dark mode)
|
|
250
|
-
},
|
|
251
|
-
|
|
252
|
-
// Compartilhar Typography e outras configurações do LightTheme
|
|
253
|
-
Typography = LightTheme.Typography,
|
|
254
|
-
Shadows = LightTheme.Shadows,
|
|
255
|
-
LayoutProperties = LightTheme.LayoutProperties,
|
|
256
|
-
ZIndex = LightTheme.ZIndex,
|
|
257
|
-
};
|
|
258
|
-
}
|
|
259
|
-
|
|
260
|
-
/// <summary>
|
|
261
|
-
/// EXEMPLO DE USO:
|
|
262
|
-
///
|
|
263
|
-
/// // Program.cs
|
|
264
|
-
/// builder.Services.AddMudServices(config =>
|
|
265
|
-
/// {
|
|
266
|
-
/// config.SnackbarConfiguration.PositionClass = Defaults.Classes.Position.BottomRight;
|
|
267
|
-
/// });
|
|
268
|
-
///
|
|
269
|
-
/// // App.razor ou MainLayout.razor
|
|
270
|
-
/// <MudThemeProvider Theme="@AppTheme.LightTheme" />
|
|
271
|
-
/// <MudDialogProvider />
|
|
272
|
-
/// <MudSnackbarProvider />
|
|
273
|
-
///
|
|
274
|
-
/// // Para suportar dark mode dinâmico:
|
|
275
|
-
/// <MudThemeProvider @bind-IsDarkMode="@_isDarkMode"
|
|
276
|
-
/// Theme="@(_isDarkMode ? AppTheme.DarkTheme : AppTheme.LightTheme)" />
|
|
277
|
-
///
|
|
278
|
-
/// @code {
|
|
279
|
-
/// private bool _isDarkMode;
|
|
280
|
-
/// }
|
|
281
|
-
/// </summary>
|
|
@@ -1,40 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"id": "nodejs-cli",
|
|
3
|
-
"name": "Node.js CLI Development",
|
|
4
|
-
"description": "Workflow otimizado para desenvolvimento de features em projetos CLI Node.js/ESM, como o morph-spec-framework.",
|
|
5
|
-
"criteria": {
|
|
6
|
-
"maxFiles": 15,
|
|
7
|
-
"maxLines": 400,
|
|
8
|
-
"maxComponents": 0,
|
|
9
|
-
"noInfrastructure": true,
|
|
10
|
-
"noArchitecturalDecisions": false
|
|
11
|
-
},
|
|
12
|
-
"keywords": [
|
|
13
|
-
"nodejs", "javascript", "esm", "cli", "commander", "command", "morph-spec",
|
|
14
|
-
"hook", "validator", "plugin", "script"
|
|
15
|
-
],
|
|
16
|
-
"phases": {
|
|
17
|
-
"run": ["proposal", "setup", "design", "tasks", "implement"],
|
|
18
|
-
"skip": ["uiux", "clarify", "sync"],
|
|
19
|
-
"combined": {}
|
|
20
|
-
},
|
|
21
|
-
"pausePoints": [
|
|
22
|
-
{
|
|
23
|
-
"phase": "design",
|
|
24
|
-
"question": "O design da feature está correto? Approve para gerar tasks."
|
|
25
|
-
},
|
|
26
|
-
{
|
|
27
|
-
"phase": "tasks",
|
|
28
|
-
"question": "As tasks estão bem definidas? Approve para iniciar implementação."
|
|
29
|
-
}
|
|
30
|
-
],
|
|
31
|
-
"outputs": {
|
|
32
|
-
"required": ["proposal", "spec", "tasks"],
|
|
33
|
-
"optional": ["contracts", "decisions", "recap"]
|
|
34
|
-
},
|
|
35
|
-
"agentPreferences": {
|
|
36
|
-
"specialists": ["morph-spec-architect", "nodejs-cli-expert"],
|
|
37
|
-
"validators": ["morph-spec-validator"]
|
|
38
|
-
},
|
|
39
|
-
"priority": 5
|
|
40
|
-
}
|
|
@@ -1,89 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* context-budget — Token budget tracking for standards context
|
|
3
|
-
*
|
|
4
|
-
* Shows estimated token usage for agent briefings built from STANDARDS.json digests.
|
|
5
|
-
*
|
|
6
|
-
* Usage:
|
|
7
|
-
* morph-spec context-budget [--phase <phase>] [--json]
|
|
8
|
-
*/
|
|
9
|
-
|
|
10
|
-
import { readFileSync, existsSync } from 'fs';
|
|
11
|
-
import { join, dirname } from 'path';
|
|
12
|
-
import { fileURLToPath } from 'url';
|
|
13
|
-
import { buildAgentBriefing, estimateTokens, clearCache } from '../../lib/standards/digest-builder.js';
|
|
14
|
-
import chalk from 'chalk';
|
|
15
|
-
|
|
16
|
-
const __dirname = dirname(fileURLToPath(import.meta.url));
|
|
17
|
-
const AGENTS_JSON_PATH = join(__dirname, '../../../framework/agents.json');
|
|
18
|
-
|
|
19
|
-
/**
|
|
20
|
-
* CLI command: morph-spec context-budget [--phase <phase>] [--json]
|
|
21
|
-
*/
|
|
22
|
-
export async function contextBudgetCommand(options = {}) {
|
|
23
|
-
const phase = options.phase || 'implement';
|
|
24
|
-
|
|
25
|
-
if (!existsSync(AGENTS_JSON_PATH)) {
|
|
26
|
-
console.error(chalk.red('framework/agents.json not found.'));
|
|
27
|
-
process.exit(1);
|
|
28
|
-
}
|
|
29
|
-
|
|
30
|
-
try {
|
|
31
|
-
clearCache();
|
|
32
|
-
const agentsData = JSON.parse(readFileSync(AGENTS_JSON_PATH, 'utf8'));
|
|
33
|
-
const allAgents = agentsData.agents || {};
|
|
34
|
-
|
|
35
|
-
const results = [];
|
|
36
|
-
|
|
37
|
-
for (const [agentId, agentData] of Object.entries(allAgents)) {
|
|
38
|
-
if (agentId.startsWith('_comment')) continue;
|
|
39
|
-
if (!agentData.standards || agentData.standards.length === 0) continue;
|
|
40
|
-
|
|
41
|
-
const briefing = buildAgentBriefing(agentId, phase);
|
|
42
|
-
if (!briefing) continue;
|
|
43
|
-
|
|
44
|
-
const tokens = estimateTokens(briefing);
|
|
45
|
-
results.push({
|
|
46
|
-
agentId,
|
|
47
|
-
tier: agentData.tier,
|
|
48
|
-
standardsCount: agentData.standards.length,
|
|
49
|
-
tokens,
|
|
50
|
-
overBudget: tokens > 8000,
|
|
51
|
-
});
|
|
52
|
-
}
|
|
53
|
-
|
|
54
|
-
// Sort by tokens descending
|
|
55
|
-
results.sort((a, b) => b.tokens - a.tokens);
|
|
56
|
-
|
|
57
|
-
const totalTokens = results.reduce((sum, r) => sum + r.tokens, 0);
|
|
58
|
-
const overBudget = results.filter(r => r.overBudget);
|
|
59
|
-
|
|
60
|
-
if (options.json) {
|
|
61
|
-
console.log(JSON.stringify({ phase, totalTokens, overBudgetCount: overBudget.length, agents: results }, null, 2));
|
|
62
|
-
return;
|
|
63
|
-
}
|
|
64
|
-
|
|
65
|
-
// Human-readable
|
|
66
|
-
console.log(chalk.bold(`\n Context Budget — phase: ${phase}`));
|
|
67
|
-
console.log(' ' + '─'.repeat(62));
|
|
68
|
-
console.log(` ${'Agent'.padEnd(32)} ${'Tier'.padEnd(6)} ${'Stds'.padEnd(6)} Tokens`);
|
|
69
|
-
console.log(' ' + '─'.repeat(62));
|
|
70
|
-
|
|
71
|
-
for (const r of results) {
|
|
72
|
-
const tokenStr = r.overBudget ? chalk.red(String(r.tokens)) : String(r.tokens);
|
|
73
|
-
const flag = r.overBudget ? ' ⚠' : '';
|
|
74
|
-
console.log(
|
|
75
|
-
` ${r.agentId.padEnd(32)} ${String(r.tier).padEnd(6)} ${String(r.standardsCount).padEnd(6)} ${tokenStr}${flag}`
|
|
76
|
-
);
|
|
77
|
-
}
|
|
78
|
-
|
|
79
|
-
console.log(' ' + '─'.repeat(62));
|
|
80
|
-
console.log(` Total: ${results.length} agents, ${totalTokens} tokens`);
|
|
81
|
-
if (overBudget.length > 0) {
|
|
82
|
-
console.log(chalk.yellow(` ⚠ ${overBudget.length} agent(s) exceed 8000 token threshold`));
|
|
83
|
-
}
|
|
84
|
-
console.log();
|
|
85
|
-
} catch (err) {
|
|
86
|
-
console.error(chalk.red(`Error: ${err.message}`));
|
|
87
|
-
process.exit(1);
|
|
88
|
-
}
|
|
89
|
-
}
|