@polymorphism-tech/morph-spec 2.3.0 → 3.0.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 +446 -1730
- package/README.md +515 -516
- package/bin/morph-spec.js +366 -294
- package/bin/task-manager.js +429 -368
- package/bin/validate.js +369 -268
- package/content/.claude/commands/morph-apply.md +221 -158
- package/content/.claude/commands/morph-deploy.md +529 -0
- package/content/.claude/commands/morph-preflight.md +227 -0
- package/content/.claude/commands/morph-proposal.md +122 -101
- package/content/.claude/commands/morph-status.md +86 -86
- package/content/.claude/commands/morph-troubleshoot.md +122 -0
- package/content/.claude/skills/infra/azure-deploy-specialist.md +699 -0
- package/content/.claude/skills/level-0-meta/README.md +7 -0
- package/content/.claude/skills/level-0-meta/code-review.md +226 -0
- package/content/.claude/skills/level-0-meta/morph-checklist.md +117 -0
- package/content/.claude/skills/level-0-meta/simulation-checklist.md +77 -0
- package/content/.claude/skills/level-1-workflows/README.md +7 -0
- package/content/.claude/skills/level-1-workflows/morph-replicate.md +213 -0
- package/content/.claude/{commands/morph-clarify.md → skills/level-1-workflows/phase-clarify.md} +131 -184
- package/content/.claude/{commands/morph-design.md → skills/level-1-workflows/phase-design.md} +213 -275
- package/content/.claude/skills/level-1-workflows/phase-setup.md +106 -0
- package/content/.claude/skills/level-1-workflows/phase-tasks.md +164 -0
- package/content/.claude/{commands/morph-uiux.md → skills/level-1-workflows/phase-uiux.md} +169 -211
- package/content/.claude/skills/level-2-domains/README.md +14 -0
- package/content/.claude/skills/level-2-domains/ai-agents/ai-system-architect.md +192 -0
- package/content/.claude/skills/{specialists → level-2-domains/architecture}/po-pm-advisor.md +197 -197
- package/content/.claude/skills/level-2-domains/architecture/standards-architect.md +156 -0
- package/content/.claude/skills/level-2-domains/backend/dotnet-senior.md +287 -0
- package/content/.claude/skills/level-2-domains/backend/ef-modeler.md +113 -0
- package/content/.claude/skills/level-2-domains/backend/hangfire-orchestrator.md +126 -0
- package/content/.claude/skills/level-2-domains/backend/ms-agent-expert.md +109 -0
- package/content/.claude/skills/level-2-domains/frontend/blazor-builder.md +210 -0
- package/content/.claude/skills/level-2-domains/frontend/nextjs-expert.md +154 -0
- package/content/.claude/skills/level-2-domains/frontend/ui-ux-designer.md +191 -0
- package/content/.claude/skills/{specialists → level-2-domains/infrastructure}/azure-architect.md +142 -142
- package/content/.claude/skills/level-2-domains/infrastructure/bicep-architect.md +126 -0
- package/content/.claude/skills/level-2-domains/infrastructure/container-specialist.md +131 -0
- package/content/.claude/skills/level-2-domains/infrastructure/devops-engineer.md +119 -0
- package/content/.claude/skills/level-2-domains/integrations/asaas-financial.md +130 -0
- package/content/.claude/skills/level-2-domains/integrations/azure-identity.md +142 -0
- package/content/.claude/skills/level-2-domains/integrations/clerk-auth.md +108 -0
- package/content/.claude/skills/level-2-domains/integrations/resend-email.md +119 -0
- package/content/.claude/skills/level-2-domains/quality/code-analyzer.md +235 -0
- package/content/.claude/skills/level-2-domains/quality/testing-specialist.md +126 -0
- package/content/.claude/skills/level-3-technologies/README.md +7 -0
- package/content/.claude/skills/level-4-patterns/README.md +7 -0
- package/content/.claude/skills/specialists/prompt-engineer.md +189 -0
- package/content/.claude/skills/specialists/seo-growth-hacker.md +320 -0
- package/content/.morph/config/agents.json +762 -242
- package/content/.morph/config/config.template.json +122 -108
- package/content/.morph/docs/workflows/design-impl.md +37 -0
- package/content/.morph/docs/workflows/enforcement-pipeline.md +668 -0
- package/content/.morph/docs/workflows/fast-track.md +29 -0
- package/content/.morph/docs/workflows/full-morph.md +76 -0
- package/content/.morph/docs/workflows/standard.md +44 -0
- package/content/.morph/docs/workflows/ui-refresh.md +39 -0
- package/content/.morph/examples/scheduled-reports/decisions.md +158 -0
- package/content/.morph/examples/scheduled-reports/proposal.md +95 -0
- package/content/.morph/examples/scheduled-reports/spec.md +267 -0
- package/content/.morph/hooks/README.md +348 -239
- package/content/.morph/hooks/pre-commit-agents.sh +24 -24
- package/content/.morph/hooks/task-completed.js +73 -0
- package/content/.morph/hooks/teammate-idle.js +68 -0
- package/content/.morph/schemas/tasks.schema.json +220 -0
- package/content/.morph/standards/agent-framework-blazor-ui.md +359 -0
- package/content/.morph/standards/agent-framework-production.md +410 -0
- package/content/.morph/standards/agent-framework-setup.md +413 -453
- package/content/.morph/standards/agent-framework-workflows.md +349 -0
- package/content/.morph/standards/agent-teams-workflow.md +474 -0
- package/content/.morph/standards/architecture.md +325 -325
- package/content/.morph/standards/azure.md +605 -379
- package/content/.morph/standards/dotnet10-migration.md +520 -494
- package/content/.morph/templates/CONTEXT-FEATURE.md +276 -0
- package/content/.morph/templates/CONTEXT.md +170 -0
- package/content/.morph/templates/agent.cs +163 -172
- package/content/.morph/templates/clarify-questions.md +159 -0
- package/content/.morph/templates/contracts/Commands.cs +74 -0
- package/content/.morph/templates/contracts/Entities.cs +25 -0
- package/content/.morph/templates/contracts/Queries.cs +74 -0
- package/content/.morph/templates/contracts/README.md +74 -0
- package/content/.morph/templates/decisions.md +123 -106
- package/content/.morph/templates/infra/azure-pipelines-deploy.yml +480 -0
- package/content/.morph/templates/infra/deploy-checklist.md +426 -0
- package/content/.morph/templates/proposal.md +141 -155
- package/content/.morph/templates/recap.md +94 -105
- package/content/.morph/templates/simulation.md +353 -0
- package/content/.morph/templates/spec.md +149 -148
- package/content/.morph/templates/state.template.json +222 -222
- package/content/.morph/templates/tasks.md +257 -235
- package/content/.morph/templates/ui-components.md +362 -276
- package/content/CLAUDE.md +150 -442
- package/detectors/structure-detector.js +245 -250
- package/docs/README.md +144 -149
- package/docs/getting-started.md +301 -302
- package/docs/installation.md +361 -361
- package/docs/validation-checklist.md +265 -266
- package/package.json +80 -80
- package/src/commands/advance-phase.js +266 -0
- package/src/commands/analyze-blazor-concurrency.js +193 -0
- package/src/commands/deploy.js +780 -0
- package/src/commands/detect-agents.js +167 -0
- package/src/commands/doctor.js +356 -280
- package/src/commands/generate-context.js +40 -0
- package/src/commands/init.js +258 -245
- package/src/commands/lint-fluent.js +352 -0
- package/src/commands/rollback-phase.js +185 -0
- package/src/commands/session-summary.js +291 -0
- package/src/commands/task.js +78 -75
- package/src/commands/troubleshoot.js +222 -0
- package/src/commands/update.js +192 -159
- package/src/commands/validate-blazor-state.js +210 -0
- package/src/commands/validate-blazor.js +156 -0
- package/src/commands/validate-css.js +84 -0
- package/src/commands/validate-phase.js +221 -0
- package/src/lib/blazor-concurrency-analyzer.js +288 -0
- package/src/lib/blazor-state-validator.js +291 -0
- package/src/lib/blazor-validator.js +374 -0
- package/src/lib/complexity-analyzer.js +441 -292
- package/src/lib/context-generator.js +513 -0
- package/src/lib/continuous-validator.js +421 -440
- package/src/lib/css-validator.js +352 -0
- package/src/lib/decision-constraint-loader.js +109 -0
- package/src/lib/design-system-detector.js +187 -0
- package/src/lib/design-system-scaffolder.js +299 -0
- package/src/lib/hook-executor.js +256 -0
- package/src/lib/recap-generator.js +205 -0
- package/src/lib/spec-validator.js +258 -0
- package/src/lib/standards-context-injector.js +287 -0
- package/src/lib/state-manager.js +397 -340
- package/src/lib/team-orchestrator.js +322 -0
- package/src/lib/troubleshoot-grep.js +194 -0
- package/src/lib/troubleshoot-index.js +144 -0
- package/src/lib/validation-runner.js +283 -0
- package/src/lib/validators/contract-compliance-validator.js +273 -0
- package/src/lib/validators/design-system-validator.js +231 -0
- package/src/utils/file-copier.js +187 -139
- package/content/.claude/commands/morph-costs.md +0 -206
- package/content/.claude/commands/morph-setup.md +0 -100
- package/content/.claude/commands/morph-tasks.md +0 -319
- package/content/.claude/skills/infra/bicep-architect.md +0 -419
- package/content/.claude/skills/infra/container-specialist.md +0 -437
- package/content/.claude/skills/infra/devops-engineer.md +0 -405
- package/content/.claude/skills/integrations/asaas-financial.md +0 -333
- package/content/.claude/skills/integrations/azure-identity.md +0 -309
- package/content/.claude/skills/integrations/clerk-auth.md +0 -290
- package/content/.claude/skills/specialists/ai-system-architect.md +0 -604
- package/content/.claude/skills/specialists/cost-guardian.md +0 -110
- package/content/.claude/skills/specialists/ef-modeler.md +0 -211
- package/content/.claude/skills/specialists/hangfire-orchestrator.md +0 -255
- package/content/.claude/skills/specialists/ms-agent-expert.md +0 -263
- package/content/.claude/skills/specialists/standards-architect.md +0 -78
- package/content/.claude/skills/specialists/ui-ux-designer.md +0 -1100
- package/content/.claude/skills/stacks/dotnet-blazor.md +0 -606
- package/content/.claude/skills/stacks/dotnet-nextjs.md +0 -402
- package/content/.claude/skills/stacks/shopify.md +0 -445
- package/content/.morph/config/azure-pricing.json +0 -70
- package/content/.morph/config/azure-pricing.schema.json +0 -50
- package/content/.morph/hooks/pre-commit-costs.sh +0 -91
- package/docs/api/cost-calculator.js.html +0 -513
- package/docs/api/design-system-generator.js.html +0 -382
- package/docs/api/global.html +0 -5263
- package/docs/api/index.html +0 -96
- package/docs/api/state-manager.js.html +0 -423
- package/src/commands/cost.js +0 -181
- package/src/commands/update-pricing.js +0 -206
- package/src/lib/cost-calculator.js +0 -429
|
@@ -1,263 +0,0 @@
|
|
|
1
|
-
# Agent Framework Expert
|
|
2
|
-
|
|
3
|
-
Especialista em Microsoft Agent Framework e integração de IA em aplicações .NET.
|
|
4
|
-
|
|
5
|
-
> **IMPORTANTE:** O MORPH-SPEC usa **exclusivamente** Microsoft Agent Framework.
|
|
6
|
-
> Semantic Kernel foi descontinuado.
|
|
7
|
-
|
|
8
|
-
## Responsabilidades
|
|
9
|
-
|
|
10
|
-
1. **Integrar Microsoft Agent Framework** em projetos .NET 10
|
|
11
|
-
2. **Criar agentes** com instruções e tools
|
|
12
|
-
3. **Otimizar prompts** e gerenciar tokens
|
|
13
|
-
4. **Implementar RAG** com vector search
|
|
14
|
-
|
|
15
|
-
## Triggers
|
|
16
|
-
|
|
17
|
-
Keywords: `agent`, `ai`, `llm`, `openai`, `chat`, `prompt`, `tool`, `function calling`, `rag`, `embedding`
|
|
18
|
-
|
|
19
|
-
## Microsoft Agent Framework (.NET 10)
|
|
20
|
-
|
|
21
|
-
> Framework oficial da Microsoft para criar agentes de IA.
|
|
22
|
-
> Substitui Semantic Kernel com foco exclusivo em agentes.
|
|
23
|
-
|
|
24
|
-
### Estrutura Básica
|
|
25
|
-
|
|
26
|
-
```csharp
|
|
27
|
-
// Agent com Microsoft Agent Framework
|
|
28
|
-
using Microsoft.Agents.AI;
|
|
29
|
-
using Microsoft.Extensions.AI;
|
|
30
|
-
|
|
31
|
-
public class OrderAnalysisAgent
|
|
32
|
-
{
|
|
33
|
-
private readonly IChatClient _chatClient;
|
|
34
|
-
private readonly ILogger<OrderAnalysisAgent> _logger;
|
|
35
|
-
|
|
36
|
-
public OrderAnalysisAgent(
|
|
37
|
-
IChatClient chatClient,
|
|
38
|
-
ILogger<OrderAnalysisAgent> logger)
|
|
39
|
-
{
|
|
40
|
-
_chatClient = chatClient;
|
|
41
|
-
_logger = logger;
|
|
42
|
-
}
|
|
43
|
-
|
|
44
|
-
public async Task<string> AnalyzeOrderAsync(Order order, CancellationToken ct = default)
|
|
45
|
-
{
|
|
46
|
-
var agent = _chatClient.CreateAgent(
|
|
47
|
-
instructions: """
|
|
48
|
-
Você é um especialista em análise de pedidos.
|
|
49
|
-
|
|
50
|
-
Analise o pedido fornecido e retorne:
|
|
51
|
-
1. Resumo do pedido
|
|
52
|
-
2. Sugestões de upsell baseadas nos itens
|
|
53
|
-
3. Risco de cancelamento (baixo/médio/alto) com justificativa
|
|
54
|
-
|
|
55
|
-
Seja conciso e objetivo.
|
|
56
|
-
""",
|
|
57
|
-
name: "OrderAnalyzer"
|
|
58
|
-
);
|
|
59
|
-
|
|
60
|
-
var prompt = $"""
|
|
61
|
-
Pedido: {order.OrderNumber}
|
|
62
|
-
Total: {order.Total:C}
|
|
63
|
-
Itens: {order.Items.Count}
|
|
64
|
-
Cliente: {order.Customer.Name}
|
|
65
|
-
Histórico: {order.Customer.TotalOrders} pedidos anteriores
|
|
66
|
-
|
|
67
|
-
Analise este pedido.
|
|
68
|
-
""";
|
|
69
|
-
|
|
70
|
-
_logger.LogInformation("Analisando pedido {OrderNumber}", order.OrderNumber);
|
|
71
|
-
|
|
72
|
-
var response = await agent.RunAsync(prompt, cancellationToken: ct);
|
|
73
|
-
return response.Content;
|
|
74
|
-
}
|
|
75
|
-
}
|
|
76
|
-
```
|
|
77
|
-
|
|
78
|
-
### Configuração do ChatClient
|
|
79
|
-
|
|
80
|
-
```csharp
|
|
81
|
-
// Program.cs
|
|
82
|
-
using Microsoft.Extensions.AI;
|
|
83
|
-
|
|
84
|
-
// Azure OpenAI
|
|
85
|
-
builder.Services.AddSingleton<IChatClient>(sp =>
|
|
86
|
-
{
|
|
87
|
-
var config = sp.GetRequiredService<IConfiguration>();
|
|
88
|
-
|
|
89
|
-
return new ChatClient(
|
|
90
|
-
model: "gpt-4o-mini",
|
|
91
|
-
credential: new ApiKeyCredential(config["AzureOpenAI:ApiKey"]!),
|
|
92
|
-
endpoint: new Uri(config["AzureOpenAI:Endpoint"]!)
|
|
93
|
-
);
|
|
94
|
-
});
|
|
95
|
-
|
|
96
|
-
// Registrar agent como service
|
|
97
|
-
builder.Services.AddScoped<IOrderAnalysisAgent, OrderAnalysisAgent>();
|
|
98
|
-
```
|
|
99
|
-
|
|
100
|
-
### Tools (Function Calling)
|
|
101
|
-
|
|
102
|
-
```csharp
|
|
103
|
-
using Microsoft.Agents.AI;
|
|
104
|
-
|
|
105
|
-
public class OrderAgent
|
|
106
|
-
{
|
|
107
|
-
private readonly IChatClient _chatClient;
|
|
108
|
-
private readonly IOrderService _orderService;
|
|
109
|
-
|
|
110
|
-
public OrderAgent(IChatClient chatClient, IOrderService orderService)
|
|
111
|
-
{
|
|
112
|
-
_chatClient = chatClient;
|
|
113
|
-
_orderService = orderService;
|
|
114
|
-
}
|
|
115
|
-
|
|
116
|
-
[AgentTool("get_order")]
|
|
117
|
-
[Description("Busca um pedido pelo número")]
|
|
118
|
-
public async Task<Order?> GetOrderAsync(
|
|
119
|
-
[Description("Número do pedido")] string orderNumber,
|
|
120
|
-
CancellationToken ct = default)
|
|
121
|
-
{
|
|
122
|
-
return await _orderService.GetByNumberAsync(orderNumber, ct);
|
|
123
|
-
}
|
|
124
|
-
|
|
125
|
-
[AgentTool("calculate_discount")]
|
|
126
|
-
[Description("Calcula desconto baseado no histórico do cliente")]
|
|
127
|
-
public decimal CalculateDiscount(
|
|
128
|
-
[Description("ID do cliente")] int customerId,
|
|
129
|
-
[Description("Valor do pedido")] decimal orderTotal)
|
|
130
|
-
{
|
|
131
|
-
// Lógica de desconto baseada em histórico
|
|
132
|
-
return orderTotal * 0.1m;
|
|
133
|
-
}
|
|
134
|
-
|
|
135
|
-
public async Task<string> ChatAsync(string userMessage, CancellationToken ct = default)
|
|
136
|
-
{
|
|
137
|
-
var agent = _chatClient.CreateAgent(
|
|
138
|
-
instructions: """
|
|
139
|
-
Você é um assistente de pedidos.
|
|
140
|
-
Use as tools disponíveis para ajudar os usuários.
|
|
141
|
-
Seja conciso e profissional.
|
|
142
|
-
""",
|
|
143
|
-
name: "OrderAssistant",
|
|
144
|
-
tools: new[]
|
|
145
|
-
{
|
|
146
|
-
AgentTool.FromMethod(nameof(GetOrderAsync), this),
|
|
147
|
-
AgentTool.FromMethod(nameof(CalculateDiscount), this)
|
|
148
|
-
}
|
|
149
|
-
);
|
|
150
|
-
|
|
151
|
-
var response = await agent.RunAsync(userMessage, cancellationToken: ct);
|
|
152
|
-
return response.Content;
|
|
153
|
-
}
|
|
154
|
-
}
|
|
155
|
-
```
|
|
156
|
-
|
|
157
|
-
### Threads (Conversação Persistente)
|
|
158
|
-
|
|
159
|
-
```csharp
|
|
160
|
-
public class ChatService
|
|
161
|
-
{
|
|
162
|
-
private readonly IChatClient _chatClient;
|
|
163
|
-
private readonly Dictionary<string, AgentThread> _threads = new();
|
|
164
|
-
|
|
165
|
-
public async Task<string> CreateConversationAsync(string userId)
|
|
166
|
-
{
|
|
167
|
-
var agent = _chatClient.CreateAgent(
|
|
168
|
-
instructions: "Você é um assistente útil e amigável.",
|
|
169
|
-
name: "ChatAssistant"
|
|
170
|
-
);
|
|
171
|
-
|
|
172
|
-
var thread = await agent.CreateThreadAsync();
|
|
173
|
-
_threads[userId] = thread;
|
|
174
|
-
|
|
175
|
-
return thread.Id;
|
|
176
|
-
}
|
|
177
|
-
|
|
178
|
-
public async Task<string> SendMessageAsync(
|
|
179
|
-
string userId,
|
|
180
|
-
string message,
|
|
181
|
-
CancellationToken ct = default)
|
|
182
|
-
{
|
|
183
|
-
if (!_threads.TryGetValue(userId, out var thread))
|
|
184
|
-
throw new InvalidOperationException("Thread não encontrada");
|
|
185
|
-
|
|
186
|
-
var agent = _chatClient.CreateAgent(
|
|
187
|
-
instructions: "Você é um assistente útil e amigável.",
|
|
188
|
-
name: "ChatAssistant"
|
|
189
|
-
);
|
|
190
|
-
|
|
191
|
-
await thread.AddMessageAsync(message, ct);
|
|
192
|
-
var response = await agent.RunAsync(thread, cancellationToken: ct);
|
|
193
|
-
|
|
194
|
-
return response.Content;
|
|
195
|
-
}
|
|
196
|
-
}
|
|
197
|
-
```
|
|
198
|
-
|
|
199
|
-
## Padrões de Prompt
|
|
200
|
-
|
|
201
|
-
### System Prompt Estruturado
|
|
202
|
-
|
|
203
|
-
```csharp
|
|
204
|
-
var systemPrompt = """
|
|
205
|
-
# Identidade
|
|
206
|
-
Você é {AgentName}, especialista em {Domain}.
|
|
207
|
-
|
|
208
|
-
# Contexto
|
|
209
|
-
{ContextDescription}
|
|
210
|
-
|
|
211
|
-
# Regras
|
|
212
|
-
- {Rule1}
|
|
213
|
-
- {Rule2}
|
|
214
|
-
|
|
215
|
-
# Formato de Resposta
|
|
216
|
-
{ResponseFormat}
|
|
217
|
-
|
|
218
|
-
# Exemplos
|
|
219
|
-
Input: {ExampleInput}
|
|
220
|
-
Output: {ExampleOutput}
|
|
221
|
-
""";
|
|
222
|
-
```
|
|
223
|
-
|
|
224
|
-
### Otimização de Tokens
|
|
225
|
-
|
|
226
|
-
1. **Use gpt-4o-mini** como padrão (mais barato)
|
|
227
|
-
2. **Limite contexto** a informações relevantes
|
|
228
|
-
3. **Cache prompts** fixos quando possível
|
|
229
|
-
4. **Meça tokens** com TikToken
|
|
230
|
-
|
|
231
|
-
## Modelo Padrão
|
|
232
|
-
|
|
233
|
-
| Uso | Modelo | Custo |
|
|
234
|
-
|-----|--------|-------|
|
|
235
|
-
| Tarefas simples | gpt-4o-mini | $0.15/1M input |
|
|
236
|
-
| Análise complexa | gpt-4o | $2.50/1M input |
|
|
237
|
-
| Embedding | text-embedding-3-small | $0.02/1M |
|
|
238
|
-
|
|
239
|
-
## Documentação de Referência
|
|
240
|
-
|
|
241
|
-
- [Microsoft Agent Framework](https://learn.microsoft.com/agent-framework/)
|
|
242
|
-
- [Agent Framework GitHub](https://github.com/microsoft/agent-framework)
|
|
243
|
-
- [Microsoft.Extensions.AI](https://learn.microsoft.com/dotnet/ai/ai-extensions)
|
|
244
|
-
- [Azure OpenAI Service](https://learn.microsoft.com/azure/ai-services/openai/)
|
|
245
|
-
- **[Guia Completo: Agent Framework Setup](../../.morph/standards/agent-framework-setup.md)**
|
|
246
|
-
|
|
247
|
-
## Checklist de Integração AI
|
|
248
|
-
|
|
249
|
-
- [ ] Package `Microsoft.Agents.AI` instalado
|
|
250
|
-
- [ ] `IChatClient` configurado com DI
|
|
251
|
-
- [ ] Modelo gpt-4o-mini como padrão
|
|
252
|
-
- [ ] API keys no Key Vault (não hardcoded)
|
|
253
|
-
- [ ] Agents registrados como services
|
|
254
|
-
- [ ] Tools registradas manualmente
|
|
255
|
-
- [ ] System prompt estruturado
|
|
256
|
-
- [ ] Error handling para rate limits
|
|
257
|
-
- [ ] Logging de prompts/responses (dev only)
|
|
258
|
-
- [ ] Custos estimados por operação
|
|
259
|
-
- [ ] **NÃO usar Semantic Kernel**
|
|
260
|
-
|
|
261
|
-
---
|
|
262
|
-
|
|
263
|
-
*MORPH-SPEC by Polymorphism Tech*
|
|
@@ -1,78 +0,0 @@
|
|
|
1
|
-
# Standards Architect
|
|
2
|
-
|
|
3
|
-
Especialista em padrões de código, arquitetura e boas práticas para projetos .NET.
|
|
4
|
-
|
|
5
|
-
## Responsabilidades
|
|
6
|
-
|
|
7
|
-
1. **Garantir aderência aos padrões** definidos em `.morph/standards/`
|
|
8
|
-
2. **Validar nomenclatura** de classes, métodos, variáveis
|
|
9
|
-
3. **Revisar código** antes de aprovar merges
|
|
10
|
-
4. **Definir convenções** de projeto
|
|
11
|
-
|
|
12
|
-
## Triggers
|
|
13
|
-
|
|
14
|
-
Ativado automaticamente em todo projeto MORPH-SPEC (Core Agent).
|
|
15
|
-
|
|
16
|
-
Keywords: `standards`, `naming`, `convention`, `pattern`, `review`, `quality`
|
|
17
|
-
|
|
18
|
-
## Padrões de Código (.NET)
|
|
19
|
-
|
|
20
|
-
### Nomenclatura
|
|
21
|
-
|
|
22
|
-
```csharp
|
|
23
|
-
// Classes: PascalCase
|
|
24
|
-
public class OrderService { }
|
|
25
|
-
|
|
26
|
-
// Interfaces: I + PascalCase
|
|
27
|
-
public interface IOrderService { }
|
|
28
|
-
|
|
29
|
-
// Métodos: PascalCase
|
|
30
|
-
public async Task<Order> GetOrderAsync(int id) { }
|
|
31
|
-
|
|
32
|
-
// Variáveis: camelCase
|
|
33
|
-
private readonly ILogger _logger;
|
|
34
|
-
|
|
35
|
-
// Constantes: UPPER_SNAKE_CASE
|
|
36
|
-
public const string DEFAULT_STATUS = "pending";
|
|
37
|
-
```
|
|
38
|
-
|
|
39
|
-
### Estrutura de Projeto
|
|
40
|
-
|
|
41
|
-
```
|
|
42
|
-
src/
|
|
43
|
-
├── {Project}.Domain/ # Entidades, Value Objects
|
|
44
|
-
├── {Project}.Application/ # Services, DTOs, Interfaces
|
|
45
|
-
├── {Project}.Infrastructure/ # EF, External Services
|
|
46
|
-
├── {Project}.Web/ # Blazor, API Controllers
|
|
47
|
-
└── {Project}.Tests/ # Unit, Integration tests
|
|
48
|
-
```
|
|
49
|
-
|
|
50
|
-
### Padrões Blazor
|
|
51
|
-
|
|
52
|
-
```razor
|
|
53
|
-
@* Componentes: PascalCase.razor *@
|
|
54
|
-
@* Parameters: [Parameter] obrigatório *@
|
|
55
|
-
@* EventCallbacks: On{Event}Async *@
|
|
56
|
-
|
|
57
|
-
<OrderList Orders="@_orders" OnSelectAsync="HandleSelectAsync" />
|
|
58
|
-
```
|
|
59
|
-
|
|
60
|
-
## Documentação de Referência
|
|
61
|
-
|
|
62
|
-
- [C# Coding Conventions](https://learn.microsoft.com/en-us/dotnet/csharp/fundamentals/coding-style/coding-conventions)
|
|
63
|
-
- [.NET Naming Guidelines](https://learn.microsoft.com/en-us/dotnet/standard/design-guidelines/naming-guidelines)
|
|
64
|
-
- [Blazor Best Practices](https://learn.microsoft.com/en-us/aspnet/core/blazor/performance)
|
|
65
|
-
|
|
66
|
-
## Checklist de Revisão
|
|
67
|
-
|
|
68
|
-
- [ ] Nomenclatura segue convenções
|
|
69
|
-
- [ ] Async/await usado corretamente
|
|
70
|
-
- [ ] Nullable reference types habilitado
|
|
71
|
-
- [ ] DI registrado corretamente
|
|
72
|
-
- [ ] Logs estruturados com ILogger
|
|
73
|
-
- [ ] Exceptions tratadas adequadamente
|
|
74
|
-
- [ ] Código sem warnings
|
|
75
|
-
|
|
76
|
-
---
|
|
77
|
-
|
|
78
|
-
*MORPH-SPEC by Polymorphism Tech*
|