@polymorphism-tech/morph-spec 1.0.4 → 2.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CLAUDE.md +1381 -0
- package/LICENSE +72 -0
- package/README.md +89 -6
- package/bin/detect-agents.js +225 -0
- package/bin/morph-spec.js +120 -0
- package/bin/render-template.js +302 -0
- package/bin/semantic-detect-agents.js +246 -0
- package/bin/validate-agents-skills.js +239 -0
- package/bin/validate-agents.js +69 -0
- package/bin/validate-phase.js +263 -0
- package/content/.azure/README.md +293 -0
- package/content/.azure/docs/azure-devops-setup.md +454 -0
- package/content/.azure/docs/branch-strategy.md +398 -0
- package/content/.azure/docs/local-development.md +515 -0
- package/content/.azure/pipelines/pipeline-variables.yml +34 -0
- package/content/.azure/pipelines/prod-pipeline.yml +319 -0
- package/content/.azure/pipelines/staging-pipeline.yml +234 -0
- package/content/.azure/pipelines/templates/build-dotnet.yml +75 -0
- package/content/.azure/pipelines/templates/deploy-app-service.yml +94 -0
- package/content/.azure/pipelines/templates/deploy-container-app.yml +120 -0
- package/content/.azure/pipelines/templates/infra-deploy.yml +90 -0
- package/content/.claude/commands/morph-apply.md +118 -26
- package/content/.claude/commands/morph-archive.md +9 -9
- package/content/.claude/commands/morph-clarify.md +184 -0
- package/content/.claude/commands/morph-design.md +275 -0
- package/content/.claude/commands/morph-proposal.md +56 -15
- package/content/.claude/commands/morph-setup.md +100 -0
- package/content/.claude/commands/morph-status.md +47 -32
- package/content/.claude/commands/morph-tasks.md +319 -0
- package/content/.claude/commands/morph-uiux.md +211 -0
- package/content/.claude/skills/specialists/ai-system-architect.md +604 -0
- package/content/.claude/skills/specialists/ms-agent-expert.md +143 -89
- package/content/.claude/skills/specialists/ui-ux-designer.md +744 -9
- package/content/.claude/skills/stacks/dotnet-blazor.md +244 -8
- package/content/.claude/skills/stacks/dotnet-nextjs.md +2 -2
- package/content/.morph/.morphversion +5 -0
- package/content/.morph/config/agents.json +101 -8
- package/content/.morph/config/azure-pricing.json +70 -0
- package/content/.morph/config/azure-pricing.schema.json +50 -0
- package/content/.morph/config/config.template.json +15 -3
- package/content/.morph/docs/STORY-DRIVEN-DEVELOPMENT.md +392 -0
- package/content/.morph/hooks/README.md +239 -0
- package/content/.morph/hooks/pre-commit-agents.sh +24 -0
- package/content/.morph/hooks/pre-commit-all.sh +48 -0
- package/content/.morph/hooks/pre-commit-costs.sh +91 -0
- package/content/.morph/hooks/pre-commit-specs.sh +49 -0
- package/content/.morph/hooks/pre-commit-tests.sh +60 -0
- package/content/.morph/project.md +5 -4
- package/content/.morph/schemas/agent.schema.json +296 -0
- package/content/.morph/standards/agent-framework-setup.md +453 -0
- package/content/.morph/standards/architecture.md +142 -7
- package/content/.morph/standards/azure.md +218 -23
- package/content/.morph/standards/coding.md +47 -12
- package/content/.morph/standards/dotnet10-migration.md +494 -0
- package/content/.morph/standards/fluent-ui-setup.md +590 -0
- package/content/.morph/standards/migration-guide.md +514 -0
- package/content/.morph/standards/passkeys-auth.md +423 -0
- package/content/.morph/standards/vector-search-rag.md +536 -0
- package/content/.morph/state.json +18 -0
- package/content/.morph/templates/FluentDesignTheme.cs +149 -0
- package/content/.morph/templates/MudTheme.cs +281 -0
- package/content/.morph/templates/contracts.cs +55 -55
- package/content/.morph/templates/decisions.md +4 -4
- package/content/.morph/templates/design-system.css +226 -0
- package/content/.morph/templates/infra/.dockerignore.example +89 -0
- package/content/.morph/templates/infra/Dockerfile.example +82 -0
- package/content/.morph/templates/infra/README.md +286 -0
- package/content/.morph/templates/infra/app-service.bicep +164 -0
- package/content/.morph/templates/infra/deploy.ps1 +229 -0
- package/content/.morph/templates/infra/deploy.sh +208 -0
- package/content/.morph/templates/infra/main.bicep +41 -7
- package/content/.morph/templates/infra/parameters.dev.json +6 -0
- package/content/.morph/templates/infra/parameters.prod.json +6 -0
- package/content/.morph/templates/infra/parameters.staging.json +29 -0
- package/content/.morph/templates/proposal.md +3 -3
- package/content/.morph/templates/recap.md +3 -3
- package/content/.morph/templates/spec.md +9 -8
- package/content/.morph/templates/sprint-status.yaml +68 -0
- package/content/.morph/templates/state.template.json +222 -0
- package/content/.morph/templates/story.md +143 -0
- package/content/.morph/templates/tasks.md +1 -1
- package/content/.morph/templates/ui-components.md +276 -0
- package/content/.morph/templates/ui-design-system.md +286 -0
- package/content/.morph/templates/ui-flows.md +336 -0
- package/content/.morph/templates/ui-mockups.md +133 -0
- package/content/.morph/test-infra/example.bicep +59 -0
- package/content/CLAUDE.md +124 -0
- package/content/README.md +79 -0
- package/detectors/config-detector.js +223 -0
- package/detectors/conversation-analyzer.js +163 -0
- package/detectors/index.js +84 -0
- package/detectors/standards-generator.js +275 -0
- package/detectors/structure-detector.js +221 -0
- package/docs/README.md +149 -0
- package/docs/api/cost-calculator.js.html +513 -0
- package/docs/api/design-system-generator.js.html +382 -0
- package/docs/api/fonts/Montserrat/Montserrat-Bold.eot +0 -0
- package/docs/api/fonts/Montserrat/Montserrat-Bold.ttf +0 -0
- package/docs/api/fonts/Montserrat/Montserrat-Bold.woff +0 -0
- package/docs/api/fonts/Montserrat/Montserrat-Bold.woff2 +0 -0
- package/docs/api/fonts/Montserrat/Montserrat-Regular.eot +0 -0
- package/docs/api/fonts/Montserrat/Montserrat-Regular.ttf +0 -0
- package/docs/api/fonts/Montserrat/Montserrat-Regular.woff +0 -0
- package/docs/api/fonts/Montserrat/Montserrat-Regular.woff2 +0 -0
- package/docs/api/fonts/Source-Sans-Pro/sourcesanspro-light-webfont.eot +0 -0
- package/docs/api/fonts/Source-Sans-Pro/sourcesanspro-light-webfont.svg +978 -0
- package/docs/api/fonts/Source-Sans-Pro/sourcesanspro-light-webfont.ttf +0 -0
- package/docs/api/fonts/Source-Sans-Pro/sourcesanspro-light-webfont.woff +0 -0
- package/docs/api/fonts/Source-Sans-Pro/sourcesanspro-light-webfont.woff2 +0 -0
- package/docs/api/fonts/Source-Sans-Pro/sourcesanspro-regular-webfont.eot +0 -0
- package/docs/api/fonts/Source-Sans-Pro/sourcesanspro-regular-webfont.svg +1049 -0
- package/docs/api/fonts/Source-Sans-Pro/sourcesanspro-regular-webfont.ttf +0 -0
- package/docs/api/fonts/Source-Sans-Pro/sourcesanspro-regular-webfont.woff +0 -0
- package/docs/api/fonts/Source-Sans-Pro/sourcesanspro-regular-webfont.woff2 +0 -0
- package/docs/api/global.html +5263 -0
- package/docs/api/index.html +96 -0
- package/docs/api/scripts/collapse.js +39 -0
- package/docs/api/scripts/commonNav.js +28 -0
- package/docs/api/scripts/linenumber.js +25 -0
- package/docs/api/scripts/nav.js +12 -0
- package/docs/api/scripts/polyfill.js +4 -0
- package/docs/api/scripts/prettify/Apache-License-2.0.txt +202 -0
- package/docs/api/scripts/prettify/lang-css.js +2 -0
- package/docs/api/scripts/prettify/prettify.js +28 -0
- package/docs/api/scripts/search.js +99 -0
- package/docs/api/state-manager.js.html +423 -0
- package/docs/api/styles/jsdoc.css +776 -0
- package/docs/api/styles/prettify.css +80 -0
- package/docs/examples.md +328 -0
- package/docs/getting-started.md +302 -0
- package/docs/installation.md +361 -0
- package/docs/templates.md +418 -0
- package/docs/validation-checklist.md +266 -0
- package/package.json +39 -12
- package/src/commands/cost.js +181 -0
- package/src/commands/create-story.js +283 -0
- package/src/commands/detect.js +104 -0
- package/src/commands/doctor.js +67 -0
- package/src/commands/generate.js +149 -0
- package/src/commands/init.js +69 -45
- package/src/commands/shard-spec.js +224 -0
- package/src/commands/sprint-status.js +250 -0
- package/src/commands/state.js +333 -0
- package/src/commands/sync.js +167 -0
- package/src/commands/update-pricing.js +206 -0
- package/src/commands/update.js +88 -13
- package/src/lib/complexity-analyzer.js +292 -0
- package/src/lib/cost-calculator.js +429 -0
- package/src/lib/design-system-generator.js +298 -0
- package/src/lib/state-manager.js +340 -0
- package/src/utils/file-copier.js +59 -0
- package/src/utils/version-checker.js +175 -0
|
@@ -6,12 +6,12 @@ Stack principal para desenvolvimento de aplicações web com .NET e Blazor Serve
|
|
|
6
6
|
|
|
7
7
|
| Aspecto | Tecnologia |
|
|
8
8
|
|---------|------------|
|
|
9
|
-
| **Backend** | .NET
|
|
9
|
+
| **Backend** | .NET 10 / C# 14 |
|
|
10
10
|
| **Frontend** | Blazor Server |
|
|
11
|
-
| **Database** | Entity Framework Core
|
|
11
|
+
| **Database** | Entity Framework Core 10 + Azure SQL |
|
|
12
12
|
| **Hosting** | Azure Container Apps |
|
|
13
13
|
| **Background** | Hangfire |
|
|
14
|
-
| **AI** | Microsoft Agent Framework |
|
|
14
|
+
| **AI** | Microsoft Agent Framework (exclusivo) |
|
|
15
15
|
|
|
16
16
|
## Triggers
|
|
17
17
|
|
|
@@ -63,7 +63,7 @@ src/
|
|
|
63
63
|
<!-- {App}.Web.csproj -->
|
|
64
64
|
<Project Sdk="Microsoft.NET.Sdk.Web">
|
|
65
65
|
<PropertyGroup>
|
|
66
|
-
<TargetFramework>
|
|
66
|
+
<TargetFramework>net10.0</TargetFramework>
|
|
67
67
|
<Nullable>enable</Nullable>
|
|
68
68
|
<ImplicitUsings>enable</ImplicitUsings>
|
|
69
69
|
</PropertyGroup>
|
|
@@ -329,12 +329,248 @@ public class OrderService : IOrderService
|
|
|
329
329
|
}
|
|
330
330
|
```
|
|
331
331
|
|
|
332
|
-
|
|
332
|
+
---
|
|
333
|
+
|
|
334
|
+
## 🎨 UI Component Libraries
|
|
335
|
+
|
|
336
|
+
### Recomendação para Projetos AI-First
|
|
337
|
+
|
|
338
|
+
| Biblioteca | Quando Usar | Vantagens | Desvantagens |
|
|
339
|
+
|------------|-------------|-----------|--------------|
|
|
340
|
+
| **Fluent UI** ⭐ | Projetos AI-first, Micro-SaaS | Componentes AI nativos, Microsoft integration, Performance (~200KB) | Menos componentes prontos |
|
|
341
|
+
| **MudBlazor** | SaaS tradicional, Analytics pesados | 140+ componentes, Charts nativos, Templates prontos | Mais pesado (~500KB), Sem componentes AI |
|
|
342
|
+
| **Híbrido** | SaaS complexo com AI | Melhor dos dois mundos | Maior bundle size (~350KB) |
|
|
343
|
+
|
|
344
|
+
### Fluent UI Blazor (Recomendado)
|
|
345
|
+
|
|
346
|
+
**Para:**
|
|
347
|
+
- Projetos com AI agents/chat
|
|
348
|
+
- Integração com Microsoft Agent Framework
|
|
349
|
+
- Produtos com UX Copilot-like
|
|
350
|
+
- Micro-SaaS que priorizam performance
|
|
351
|
+
|
|
352
|
+
**Setup rápido:**
|
|
353
|
+
```bash
|
|
354
|
+
dotnet add package Microsoft.FluentUI.AspNetCore.Components
|
|
355
|
+
```
|
|
356
|
+
|
|
357
|
+
```csharp
|
|
358
|
+
// Program.cs
|
|
359
|
+
builder.Services.AddFluentUIComponents();
|
|
360
|
+
```
|
|
361
|
+
|
|
362
|
+
**Exemplo de Chat AI:**
|
|
363
|
+
```razor
|
|
364
|
+
<FluentMessageBar Intent="MessageIntent.Success">
|
|
365
|
+
<FluentLabel Weight="FontWeight.Bold">AI Assistant</FluentLabel>
|
|
366
|
+
<FluentLabel>@_aiResponse</FluentLabel>
|
|
367
|
+
</FluentMessageBar>
|
|
368
|
+
```
|
|
369
|
+
|
|
370
|
+
**Guia completo:** [Fluent UI Setup](../../.morph/standards/fluent-ui-setup.md)
|
|
371
|
+
|
|
372
|
+
### MudBlazor (Complemento)
|
|
373
|
+
|
|
374
|
+
**Para:**
|
|
375
|
+
- Grids complexos com filtros avançados
|
|
376
|
+
- Charts e dashboards analytics
|
|
377
|
+
- Componentes que Fluent UI não tem
|
|
378
|
+
|
|
379
|
+
**Setup:**
|
|
380
|
+
```bash
|
|
381
|
+
dotnet add package MudBlazor
|
|
382
|
+
```
|
|
383
|
+
|
|
384
|
+
**Exemplo de Grid Avançado:**
|
|
385
|
+
```razor
|
|
386
|
+
<MudDataGrid T="Order" Items="@_orders"
|
|
387
|
+
Filterable="true"
|
|
388
|
+
Groupable="true"
|
|
389
|
+
Dense="true">
|
|
390
|
+
<Columns>
|
|
391
|
+
<PropertyColumn Property="x => x.OrderNumber" />
|
|
392
|
+
<PropertyColumn Property="x => x.Total" Format="C2" />
|
|
393
|
+
</Columns>
|
|
394
|
+
</MudDataGrid>
|
|
395
|
+
```
|
|
396
|
+
|
|
397
|
+
### Abordagem Híbrida
|
|
398
|
+
|
|
399
|
+
**Quando usar:**
|
|
400
|
+
- SaaS com AI + analytics complexos
|
|
401
|
+
- Dashboards com charts + chat AI
|
|
402
|
+
- Aplicações enterprise completas
|
|
403
|
+
|
|
404
|
+
**Pattern:**
|
|
405
|
+
- **Base:** Fluent UI (layout, navegação, AI)
|
|
406
|
+
- **Complemento:** MudBlazor (grids, charts)
|
|
407
|
+
|
|
408
|
+
```razor
|
|
409
|
+
<FluentLayout>
|
|
410
|
+
<FluentHeader>...</FluentHeader>
|
|
411
|
+
<FluentMain>
|
|
412
|
+
@* Grid complexo *@
|
|
413
|
+
<MudDataGrid ... />
|
|
414
|
+
|
|
415
|
+
@* Chat AI *@
|
|
416
|
+
<FluentMessageBar>AI response</FluentMessageBar>
|
|
417
|
+
</FluentMain>
|
|
418
|
+
</FluentLayout>
|
|
419
|
+
```
|
|
420
|
+
|
|
421
|
+
---
|
|
422
|
+
|
|
423
|
+
## 🎯 Novas Features .NET 10
|
|
424
|
+
|
|
425
|
+
### State Persistence
|
|
426
|
+
|
|
427
|
+
**Novo:** Propriedades com `[PersistentState]` são persist idas automaticamente.
|
|
428
|
+
|
|
429
|
+
```razor
|
|
430
|
+
@page "/counter"
|
|
431
|
+
|
|
432
|
+
<button @onclick="Increment">Count: @Count</button>
|
|
433
|
+
|
|
434
|
+
@code {
|
|
435
|
+
// Persiste automaticamente em pre-rendering e circuit disconnections
|
|
436
|
+
[PersistentState]
|
|
437
|
+
private int Count { get; set; } = 0;
|
|
438
|
+
|
|
439
|
+
private void Increment() => Count++;
|
|
440
|
+
}
|
|
441
|
+
```
|
|
442
|
+
|
|
443
|
+
**Quando usar:**
|
|
444
|
+
- Componentes com estado que precisam sobreviver a pre-rendering
|
|
445
|
+
- Aplicações com circuit disconnections frequentes
|
|
446
|
+
- Formulários multi-step
|
|
447
|
+
|
|
448
|
+
**Não usar para:**
|
|
449
|
+
- Dados sensíveis (passwords, tokens)
|
|
450
|
+
- Estado que deve ser recalculado (derived state)
|
|
451
|
+
|
|
452
|
+
### Circuit Pause/Resume
|
|
453
|
+
|
|
454
|
+
**Novo:** APIs JavaScript para pausar/resumir circuits.
|
|
455
|
+
|
|
456
|
+
```razor
|
|
457
|
+
@inject IJSRuntime JS
|
|
458
|
+
|
|
459
|
+
@code {
|
|
460
|
+
protected override async Task OnAfterRenderAsync(bool firstRender)
|
|
461
|
+
{
|
|
462
|
+
if (firstRender)
|
|
463
|
+
{
|
|
464
|
+
await JS.InvokeVoidAsync("setupCircuitManagement");
|
|
465
|
+
}
|
|
466
|
+
}
|
|
467
|
+
}
|
|
468
|
+
```
|
|
469
|
+
|
|
470
|
+
```javascript
|
|
471
|
+
// wwwroot/app.js
|
|
472
|
+
function setupCircuitManagement() {
|
|
473
|
+
// Pausar quando usuário minimiza/troca de aba
|
|
474
|
+
document.addEventListener('visibilitychange', () => {
|
|
475
|
+
if (document.hidden) {
|
|
476
|
+
Blazor.pauseCircuit(); // Libera recursos do servidor
|
|
477
|
+
} else {
|
|
478
|
+
Blazor.resumeCircuit(); // Restaura estado
|
|
479
|
+
}
|
|
480
|
+
});
|
|
481
|
+
}
|
|
482
|
+
```
|
|
483
|
+
|
|
484
|
+
**Benefícios:**
|
|
485
|
+
- Reduz uso de memória do servidor
|
|
486
|
+
- Melhora escalabilidade
|
|
487
|
+
- Estado mantido durante pausa
|
|
488
|
+
|
|
489
|
+
### Blazor Metrics & Observability
|
|
490
|
+
|
|
491
|
+
**Novo:** Métricas específicas de Blazor Server.
|
|
492
|
+
|
|
493
|
+
```csharp
|
|
494
|
+
// Program.cs
|
|
495
|
+
builder.Services.AddOpenTelemetry()
|
|
496
|
+
.WithTracing(tracing =>
|
|
497
|
+
{
|
|
498
|
+
tracing.AddSource("Microsoft.AspNetCore.Components.Server");
|
|
499
|
+
tracing.AddAspireTracing();
|
|
500
|
+
})
|
|
501
|
+
.WithMetrics(metrics =>
|
|
502
|
+
{
|
|
503
|
+
metrics.AddMeter("Microsoft.AspNetCore.Components.Server");
|
|
504
|
+
metrics.AddAspireMetrics();
|
|
505
|
+
});
|
|
506
|
+
```
|
|
507
|
+
|
|
508
|
+
**Métricas disponíveis:**
|
|
509
|
+
- Page navigations (por rota/componente)
|
|
510
|
+
- UI events (eventos e duração)
|
|
511
|
+
- Component lifecycle (render diff sizes)
|
|
512
|
+
- Active circuits (usuários simultâneos)
|
|
513
|
+
- Circuit state (connected/disconnected)
|
|
514
|
+
|
|
515
|
+
**Visualização:** Aspire Dashboard integrado.
|
|
516
|
+
|
|
517
|
+
### Hot Reload Aprimorado
|
|
518
|
+
|
|
519
|
+
**Automático:** 10x mais rápido no Visual Studio 2026.
|
|
520
|
+
|
|
521
|
+
**Nada a fazer:** Apenas use VS 2026 Preview ou `dotnet watch`.
|
|
522
|
+
|
|
523
|
+
### Formulários com Validação Aninhada
|
|
524
|
+
|
|
525
|
+
**Novo:** Validação automática de modelos aninhados.
|
|
526
|
+
|
|
527
|
+
```csharp
|
|
528
|
+
public class Order
|
|
529
|
+
{
|
|
530
|
+
[Required]
|
|
531
|
+
public string OrderNumber { get; set; } = null!;
|
|
532
|
+
|
|
533
|
+
// Modelo aninhado - validado automaticamente
|
|
534
|
+
public Customer Customer { get; set; } = new();
|
|
535
|
+
public List<OrderItem> Items { get; set; } = new();
|
|
536
|
+
}
|
|
537
|
+
|
|
538
|
+
public class Customer
|
|
539
|
+
{
|
|
540
|
+
[Required]
|
|
541
|
+
public string Name { get; set; } = null!;
|
|
542
|
+
|
|
543
|
+
[EmailAddress]
|
|
544
|
+
public string Email { get; set; } = null!;
|
|
545
|
+
|
|
546
|
+
// Aninhamento profundo - também validado
|
|
547
|
+
public Address ShippingAddress { get; set; } = new();
|
|
548
|
+
}
|
|
549
|
+
```
|
|
550
|
+
|
|
551
|
+
```razor
|
|
552
|
+
<EditForm Model="@_order" OnValidSubmit="HandleSubmit">
|
|
553
|
+
<DataAnnotationsValidator />
|
|
554
|
+
<ValidationSummary />
|
|
555
|
+
<!-- Campos... -->
|
|
556
|
+
</EditForm>
|
|
557
|
+
```
|
|
558
|
+
|
|
559
|
+
**Configuração (Program.cs):**
|
|
560
|
+
```csharp
|
|
561
|
+
builder.Services.AddValidation(); // Habilita validação aninhada
|
|
562
|
+
```
|
|
563
|
+
|
|
564
|
+
---
|
|
565
|
+
|
|
566
|
+
## 📚 Documentação de Referência
|
|
333
567
|
|
|
334
|
-
- [Blazor Documentation](https://learn.microsoft.com/
|
|
335
|
-
- [Entity Framework Core](https://learn.microsoft.com/
|
|
336
|
-
- [ASP.NET Core](https://learn.microsoft.com/
|
|
568
|
+
- [Blazor Documentation](https://learn.microsoft.com/aspnet/core/blazor/)
|
|
569
|
+
- [Entity Framework Core 10](https://learn.microsoft.com/ef/core/)
|
|
570
|
+
- [ASP.NET Core 10](https://learn.microsoft.com/aspnet/core/)
|
|
337
571
|
- [Hangfire](https://docs.hangfire.io/)
|
|
572
|
+
- **[Passkeys/WebAuthn](../../.morph/standards/passkeys-auth.md)**
|
|
573
|
+
- **[Agent Framework](../../.morph/standards/agent-framework-setup.md)**
|
|
338
574
|
|
|
339
575
|
## Checklist de Projeto
|
|
340
576
|
|
|
@@ -6,9 +6,9 @@ Stack full-stack com .NET Web API no backend e Next.js no frontend.
|
|
|
6
6
|
|
|
7
7
|
| Aspecto | Tecnologia |
|
|
8
8
|
|---------|------------|
|
|
9
|
-
| **Backend** | .NET
|
|
9
|
+
| **Backend** | .NET 10 Web API / C# 14 |
|
|
10
10
|
| **Frontend** | Next.js 15+ / React 19 |
|
|
11
|
-
| **Database** | Entity Framework Core + Azure SQL |
|
|
11
|
+
| **Database** | Entity Framework Core 10 + Azure SQL |
|
|
12
12
|
| **API** | REST + OpenAPI |
|
|
13
13
|
| **Hosting** | Azure Container Apps |
|
|
14
14
|
|
|
@@ -7,6 +7,7 @@
|
|
|
7
7
|
"name": "Standards Architect",
|
|
8
8
|
"emoji": "📐",
|
|
9
9
|
"type": "core",
|
|
10
|
+
"skillPath": ".claude/skills/specialists/standards-architect.md",
|
|
10
11
|
"description": "Guardião dos padrões de código e arquitetura",
|
|
11
12
|
"responsibilities": [
|
|
12
13
|
"Validar aderência aos padrões em .morph/standards/",
|
|
@@ -21,6 +22,7 @@
|
|
|
21
22
|
"name": "Azure Architect",
|
|
22
23
|
"emoji": "☁️",
|
|
23
24
|
"type": "core",
|
|
25
|
+
"skillPath": ".claude/skills/specialists/azure-architect.md",
|
|
24
26
|
"description": "Especialista em infraestrutura Azure",
|
|
25
27
|
"responsibilities": [
|
|
26
28
|
"Desenhar infraestrutura cost-effective",
|
|
@@ -35,6 +37,7 @@
|
|
|
35
37
|
"name": "Blazor Builder",
|
|
36
38
|
"emoji": "🔥",
|
|
37
39
|
"type": "core",
|
|
40
|
+
"skillPath": ".claude/skills/stacks/dotnet-blazor.md",
|
|
38
41
|
"description": "Especialista em componentes Blazor Server",
|
|
39
42
|
"responsibilities": [
|
|
40
43
|
"Criar componentes reutilizáveis",
|
|
@@ -49,6 +52,7 @@
|
|
|
49
52
|
"name": "EF Modeler",
|
|
50
53
|
"emoji": "🗄️",
|
|
51
54
|
"type": "core",
|
|
55
|
+
"skillPath": ".claude/skills/specialists/ef-modeler.md",
|
|
52
56
|
"description": "Especialista em Entity Framework e modelagem de dados",
|
|
53
57
|
"responsibilities": [
|
|
54
58
|
"Modelar entidades e relacionamentos",
|
|
@@ -63,6 +67,7 @@
|
|
|
63
67
|
"name": "Cost Guardian",
|
|
64
68
|
"emoji": "💰",
|
|
65
69
|
"type": "core",
|
|
70
|
+
"skillPath": ".claude/skills/specialists/cost-guardian.md",
|
|
66
71
|
"description": "Guardião dos custos e otimização financeira",
|
|
67
72
|
"responsibilities": [
|
|
68
73
|
"Validar custos de cada recurso proposto",
|
|
@@ -81,6 +86,7 @@
|
|
|
81
86
|
"name": "MS Agent Expert",
|
|
82
87
|
"emoji": "🤖",
|
|
83
88
|
"type": "core",
|
|
89
|
+
"skillPath": ".claude/skills/specialists/ms-agent-expert.md",
|
|
84
90
|
"description": "Especialista em Microsoft Agent Framework e AI",
|
|
85
91
|
"responsibilities": [
|
|
86
92
|
"Integrar Semantic Kernel",
|
|
@@ -98,6 +104,7 @@
|
|
|
98
104
|
"name": "Hangfire Orchestrator",
|
|
99
105
|
"emoji": "⏰",
|
|
100
106
|
"type": "specialist",
|
|
107
|
+
"skillPath": ".claude/skills/specialists/hangfire-orchestrator.md",
|
|
101
108
|
"description": "Especialista em background jobs",
|
|
102
109
|
"autoActivation": {
|
|
103
110
|
"keywords": ["scheduled", "job", "background", "recurring", "batch", "cron", "queue"]
|
|
@@ -115,26 +122,63 @@
|
|
|
115
122
|
"name": "UI/UX Designer",
|
|
116
123
|
"emoji": "🎨",
|
|
117
124
|
"type": "specialist",
|
|
118
|
-
"
|
|
125
|
+
"skillPath": ".claude/skills/specialists/ui-ux-designer.md",
|
|
126
|
+
"description": "Especialista em UI/UX, Fluent UI Blazor e MudBlazor. FASE 1.5 obrigatória para features com front-end.",
|
|
119
127
|
"autoActivation": {
|
|
120
|
-
"keywords": [
|
|
128
|
+
"keywords": [
|
|
129
|
+
"blazor", "component", "page", "razor", "ui", "ux", "design", "layout", "responsive",
|
|
130
|
+
"wizard", "dashboard", "form", "chart", "table", "dialog", "modal", "button",
|
|
131
|
+
"input", "select", "dropdown", "menu", "navigation", "sidebar", "header", "footer",
|
|
132
|
+
"tela", "telas", "interface", "formulario", "visualizacao", "exibicao",
|
|
133
|
+
"screen", "screens", "view", "views", "display",
|
|
134
|
+
"mostrar", "exibir", "apresentar", "renderizar", "show", "render", "present",
|
|
135
|
+
"card", "cards", "list", "lists", "grid", "panel", "panels", "stepper", "tabs", "tab",
|
|
136
|
+
"login", "signup", "cadastro", "report", "reports", "detail", "details", "edit", "create",
|
|
137
|
+
"frontend", "front-end", "web", "app", "application", "client-side", "clientside"
|
|
138
|
+
]
|
|
121
139
|
},
|
|
140
|
+
"validatesPhases": ["uiux-design"],
|
|
122
141
|
"responsibilities": [
|
|
123
|
-
"
|
|
124
|
-
"
|
|
125
|
-
"
|
|
126
|
-
"
|
|
142
|
+
"Coletar input do usuário sobre preferências de UI/UX",
|
|
143
|
+
"Analisar screenshots/mockups de referência",
|
|
144
|
+
"Gerar wireframes ASCII e mockups",
|
|
145
|
+
"Especificar componentes Fluent UI ou MudBlazor",
|
|
146
|
+
"Desenhar fluxos de usuário completos",
|
|
147
|
+
"Documentar edge cases e estados (loading, error, empty)",
|
|
148
|
+
"Garantir acessibilidade WCAG 2.1",
|
|
149
|
+
"Validar responsividade (desktop, tablet, mobile)"
|
|
127
150
|
],
|
|
128
|
-
"deliverables": [
|
|
151
|
+
"deliverables": [
|
|
152
|
+
"ui-design-system.md (cores, tipografia, spacing)",
|
|
153
|
+
"ui-mockups.md (wireframes ASCII + descrições)",
|
|
154
|
+
"ui-components.md (specs Fluent UI/MudBlazor)",
|
|
155
|
+
"ui-flows.md (fluxos + diagramas + edge cases)"
|
|
156
|
+
],
|
|
157
|
+
"expertise": [
|
|
158
|
+
"Fluent UI Blazor (AI-first components)",
|
|
159
|
+
"MudBlazor (complex components)",
|
|
160
|
+
"WCAG 2.1 Accessibility",
|
|
161
|
+
"Responsive Design",
|
|
162
|
+
"ASCII wireframing",
|
|
163
|
+
"User flow diagrams"
|
|
164
|
+
],
|
|
165
|
+
"workflow": [
|
|
166
|
+
"1. Perguntar ao usuário sobre preferências de layout/referências",
|
|
167
|
+
"2. Analisar imagens de exemplo (se fornecidas)",
|
|
168
|
+
"3. Decidir Fluent UI vs MudBlazor (justificar)",
|
|
169
|
+
"4. Gerar ui-mockups.md, ui-components.md, ui-flows.md",
|
|
170
|
+
"5. Pausar para aprovação do usuário"
|
|
171
|
+
]
|
|
129
172
|
},
|
|
130
173
|
{
|
|
131
174
|
"id": "popm-advisor",
|
|
132
175
|
"name": "PO/PM Advisor",
|
|
133
176
|
"emoji": "📋",
|
|
134
177
|
"type": "specialist",
|
|
178
|
+
"skillPath": ".claude/skills/specialists/po-pm-advisor.md",
|
|
135
179
|
"description": "Consultor de produto e requisitos",
|
|
136
180
|
"autoActivation": {
|
|
137
|
-
"keywords": ["unclear", "requirements", "priority", "
|
|
181
|
+
"keywords": ["unclear", "requirements", "priority", "roi", "business", "value", "scope"]
|
|
138
182
|
},
|
|
139
183
|
"responsibilities": [
|
|
140
184
|
"Clarificar requisitos vagos",
|
|
@@ -143,6 +187,55 @@
|
|
|
143
187
|
"Questionar valor de negócio"
|
|
144
188
|
],
|
|
145
189
|
"techniques": ["5 Whys", "MoSCoW", "User story mapping"]
|
|
190
|
+
},
|
|
191
|
+
{
|
|
192
|
+
"id": "ai-system-architect",
|
|
193
|
+
"name": "AI System Architect",
|
|
194
|
+
"emoji": "🏗️",
|
|
195
|
+
"type": "specialist",
|
|
196
|
+
"skillPath": ".claude/skills/specialists/ai-system-architect.md",
|
|
197
|
+
"description": "Especialista em arquitetura de sistemas agênticos e orquestração multi-agente",
|
|
198
|
+
"autoActivation": {
|
|
199
|
+
"keywords": [
|
|
200
|
+
"orchestration", "multi-agent", "workflow", "agent-to-agent", "a2a",
|
|
201
|
+
"system-design", "reflection", "planning", "memory", "rag",
|
|
202
|
+
"vector-search", "chunking", "embedding", "retrieval", "agentic",
|
|
203
|
+
"reasoning", "chain-of-thought", "tree-of-thought", "prompt-chaining",
|
|
204
|
+
"routing", "parallelization", "collaboration", "evaluation",
|
|
205
|
+
"guardrails", "prioritization", "exploration", "discovery"
|
|
206
|
+
]
|
|
207
|
+
},
|
|
208
|
+
"validatesPhases": ["design"],
|
|
209
|
+
"responsibilities": [
|
|
210
|
+
"Desenhar arquiteturas agênticas complexas e escaláveis",
|
|
211
|
+
"Definir padrões de orquestração (workflows, comunicação inter-agentes)",
|
|
212
|
+
"Implementar pipelines RAG (Retrieval-Augmented Generation)",
|
|
213
|
+
"Avaliar estratégias de chunking, embedding e retrieval",
|
|
214
|
+
"Selecionar padrões adequados dos 20 padrões de design agêntico",
|
|
215
|
+
"Definir estrutura de memória e estado de agentes",
|
|
216
|
+
"Implementar monitoramento e avaliação de sistemas agênticos"
|
|
217
|
+
],
|
|
218
|
+
"expertise": [
|
|
219
|
+
"20 Padrões de Design Agêntico",
|
|
220
|
+
"Framework TACO (Taskers, Automators, Collaborators, Orchestrators)",
|
|
221
|
+
"Microsoft Agent Framework Workflows",
|
|
222
|
+
"Azure AI Search + RAG Pipeline",
|
|
223
|
+
"Semantic Kernel Memory Connectors",
|
|
224
|
+
"A2A (Agent-to-Agent) Protocol",
|
|
225
|
+
"Reasoning Techniques (Chain of Thought, Tree of Thought)",
|
|
226
|
+
"Multi-Agent Collaboration Patterns"
|
|
227
|
+
],
|
|
228
|
+
"patterns": [
|
|
229
|
+
"Prompt Chaining",
|
|
230
|
+
"Routing",
|
|
231
|
+
"Parallelization",
|
|
232
|
+
"Reflection",
|
|
233
|
+
"Multi-Agent Collaboration",
|
|
234
|
+
"Memory Management",
|
|
235
|
+
"RAG Pipeline",
|
|
236
|
+
"Resource-Aware Optimization",
|
|
237
|
+
"Evaluation and Monitoring"
|
|
238
|
+
]
|
|
146
239
|
}
|
|
147
240
|
]
|
|
148
241
|
}
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "./azure-pricing.schema.json",
|
|
3
|
+
"version": "1.0.0",
|
|
4
|
+
"region": "eastus2",
|
|
5
|
+
"currency": "USD",
|
|
6
|
+
"lastUpdated": "2025-01-10T00:00:00Z",
|
|
7
|
+
"resources": {
|
|
8
|
+
"Microsoft.Sql/servers/databases": {
|
|
9
|
+
"Free": 0,
|
|
10
|
+
"Basic": 4.99,
|
|
11
|
+
"S0": 14.72,
|
|
12
|
+
"S1": 29.44,
|
|
13
|
+
"S2": 73.61,
|
|
14
|
+
"S3": 147.22,
|
|
15
|
+
"S4": 294.44,
|
|
16
|
+
"P1": 465.00,
|
|
17
|
+
"P2": 930.00,
|
|
18
|
+
"GP_Gen5_2": 328.00,
|
|
19
|
+
"GP_Gen5_4": 656.00,
|
|
20
|
+
"BC_Gen5_2": 1092.00
|
|
21
|
+
},
|
|
22
|
+
"Microsoft.App/containerApps": {
|
|
23
|
+
"Consumption": 0,
|
|
24
|
+
"Consumption_Active": 5.00,
|
|
25
|
+
"Dedicated_D2": 55.00,
|
|
26
|
+
"Dedicated_D4": 110.00
|
|
27
|
+
},
|
|
28
|
+
"Microsoft.Storage/storageAccounts": {
|
|
29
|
+
"Standard_LRS": 0.02,
|
|
30
|
+
"Standard_GRS": 0.05,
|
|
31
|
+
"Premium_LRS": 0.15
|
|
32
|
+
},
|
|
33
|
+
"Microsoft.Insights/components": {
|
|
34
|
+
"Free": 0,
|
|
35
|
+
"Basic": 2.30
|
|
36
|
+
},
|
|
37
|
+
"Microsoft.KeyVault/vaults": {
|
|
38
|
+
"Standard": 0.03,
|
|
39
|
+
"Premium": 1.00
|
|
40
|
+
},
|
|
41
|
+
"Microsoft.DocumentDB/databaseAccounts": {
|
|
42
|
+
"Serverless": 0,
|
|
43
|
+
"Provisioned_400RU": 23.36,
|
|
44
|
+
"Provisioned_1000RU": 58.40
|
|
45
|
+
},
|
|
46
|
+
"Microsoft.Web/serverfarms": {
|
|
47
|
+
"F1": 0,
|
|
48
|
+
"D1": 9.67,
|
|
49
|
+
"B1": 13.14,
|
|
50
|
+
"B2": 26.28,
|
|
51
|
+
"S1": 69.35,
|
|
52
|
+
"P1v2": 146.00
|
|
53
|
+
},
|
|
54
|
+
"Microsoft.ServiceBus/namespaces": {
|
|
55
|
+
"Basic": 0.05,
|
|
56
|
+
"Standard": 10.00,
|
|
57
|
+
"Premium": 677.00
|
|
58
|
+
},
|
|
59
|
+
"Microsoft.Cache/redis": {
|
|
60
|
+
"C0": 16.06,
|
|
61
|
+
"C1": 61.32,
|
|
62
|
+
"C2": 122.63,
|
|
63
|
+
"P1": 486.00
|
|
64
|
+
},
|
|
65
|
+
"Microsoft.Web/sites": {
|
|
66
|
+
"Consumption": 0,
|
|
67
|
+
"Premium_EP1": 146.00
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "http://json-schema.org/draft-07/schema#",
|
|
3
|
+
"$id": "https://polymorphism.com.br/schemas/azure-pricing.json",
|
|
4
|
+
"title": "Azure Pricing Table",
|
|
5
|
+
"description": "Monthly pricing for Azure resources by SKU (East US 2 / Brazil South)",
|
|
6
|
+
"type": "object",
|
|
7
|
+
"properties": {
|
|
8
|
+
"$schema": {
|
|
9
|
+
"type": "string",
|
|
10
|
+
"description": "JSON Schema reference"
|
|
11
|
+
},
|
|
12
|
+
"version": {
|
|
13
|
+
"type": "string",
|
|
14
|
+
"description": "Schema version",
|
|
15
|
+
"pattern": "^\\d+\\.\\d+\\.\\d+$"
|
|
16
|
+
},
|
|
17
|
+
"region": {
|
|
18
|
+
"type": "string",
|
|
19
|
+
"description": "Azure region for pricing",
|
|
20
|
+
"enum": ["eastus2", "brazilsouth", "westus2", "northeurope"]
|
|
21
|
+
},
|
|
22
|
+
"currency": {
|
|
23
|
+
"type": "string",
|
|
24
|
+
"description": "Currency code",
|
|
25
|
+
"enum": ["USD", "BRL", "EUR"]
|
|
26
|
+
},
|
|
27
|
+
"lastUpdated": {
|
|
28
|
+
"type": "string",
|
|
29
|
+
"format": "date-time",
|
|
30
|
+
"description": "Last time pricing was updated"
|
|
31
|
+
},
|
|
32
|
+
"resources": {
|
|
33
|
+
"type": "object",
|
|
34
|
+
"description": "Resource types and their SKU pricing",
|
|
35
|
+
"patternProperties": {
|
|
36
|
+
"^Microsoft\\.[A-Za-z]+/[A-Za-z]+$": {
|
|
37
|
+
"type": "object",
|
|
38
|
+
"description": "SKU pricing for a resource type",
|
|
39
|
+
"additionalProperties": {
|
|
40
|
+
"type": "number",
|
|
41
|
+
"minimum": 0,
|
|
42
|
+
"description": "Monthly cost in specified currency"
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
},
|
|
48
|
+
"required": ["version", "region", "currency", "lastUpdated", "resources"],
|
|
49
|
+
"additionalProperties": false
|
|
50
|
+
}
|
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
{
|
|
2
|
-
"version": "1.0.0",
|
|
3
2
|
"project": {
|
|
4
3
|
"name": "MyProject",
|
|
5
4
|
"description": "Descrição do projeto",
|
|
@@ -90,7 +89,20 @@
|
|
|
90
89
|
},
|
|
91
90
|
"costs": {
|
|
92
91
|
"monthlyBudget": 15,
|
|
93
|
-
"
|
|
94
|
-
"
|
|
92
|
+
"currency": "USD",
|
|
93
|
+
"limits": {
|
|
94
|
+
"freeTierOnly": 0,
|
|
95
|
+
"withApproval": 10,
|
|
96
|
+
"requiresADR": 10
|
|
97
|
+
},
|
|
98
|
+
"enforcement": {
|
|
99
|
+
"blockCommitsAboveLimit": true,
|
|
100
|
+
"requireADRInDecisionsMd": true,
|
|
101
|
+
"alertOnApproach": 0.8
|
|
102
|
+
},
|
|
103
|
+
"pricing": {
|
|
104
|
+
"region": "eastus2",
|
|
105
|
+
"lastUpdated": "2024-01-01"
|
|
106
|
+
}
|
|
95
107
|
}
|
|
96
108
|
}
|