@maestro-ai/mcp-server 5.4.5 → 5.5.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 +68 -83
- package/dist/content/rules/RULES.md +14 -0
- package/dist/core/metrics/MetricsCollector.d.ts +28 -12
- package/dist/core/metrics/MetricsCollector.d.ts.map +1 -1
- package/dist/core/metrics/MetricsCollector.js +151 -12
- package/dist/core/metrics/MetricsCollector.js.map +1 -1
- package/dist/core/validation/ValidationPipeline.d.ts +24 -2
- package/dist/core/validation/ValidationPipeline.d.ts.map +1 -1
- package/dist/core/validation/ValidationPipeline.js +46 -2
- package/dist/core/validation/ValidationPipeline.js.map +1 -1
- package/dist/core/validation/layers/DeliverableValidator.d.ts +13 -0
- package/dist/core/validation/layers/DeliverableValidator.d.ts.map +1 -0
- package/dist/core/validation/layers/DeliverableValidator.js +276 -0
- package/dist/core/validation/layers/DeliverableValidator.js.map +1 -0
- package/dist/gates/contextual-recommender.d.ts.map +1 -1
- package/dist/gates/contextual-recommender.js +260 -1
- package/dist/gates/contextual-recommender.js.map +1 -1
- package/dist/gates/validator.d.ts +5 -6
- package/dist/gates/validator.d.ts.map +1 -1
- package/dist/gates/validator.js +9 -6
- package/dist/gates/validator.js.map +1 -1
- package/dist/middleware/adr-generation.middleware.d.ts +5 -0
- package/dist/middleware/adr-generation.middleware.d.ts.map +1 -0
- package/dist/middleware/adr-generation.middleware.js +214 -0
- package/dist/middleware/adr-generation.middleware.js.map +1 -0
- package/dist/middleware/flow-engine.middleware.d.ts +5 -3
- package/dist/middleware/flow-engine.middleware.d.ts.map +1 -1
- package/dist/middleware/flow-engine.middleware.js +18 -10
- package/dist/middleware/flow-engine.middleware.js.map +1 -1
- package/dist/middleware/index.d.ts +18 -11
- package/dist/middleware/index.d.ts.map +1 -1
- package/dist/middleware/index.js +24 -11
- package/dist/middleware/index.js.map +1 -1
- package/dist/middleware/orchestration-pipeline.middleware.d.ts +42 -0
- package/dist/middleware/orchestration-pipeline.middleware.d.ts.map +1 -0
- package/dist/middleware/orchestration-pipeline.middleware.js +57 -0
- package/dist/middleware/orchestration-pipeline.middleware.js.map +1 -0
- package/dist/middleware/skill-injection.middleware.js +1 -1
- package/dist/middleware/skill-injection.middleware.js.map +1 -1
- package/dist/middleware/validation.middleware.d.ts +11 -0
- package/dist/middleware/validation.middleware.d.ts.map +1 -1
- package/dist/middleware/validation.middleware.js +54 -0
- package/dist/middleware/validation.middleware.js.map +1 -1
- package/dist/router.d.ts.map +1 -1
- package/dist/router.js +20 -14
- package/dist/router.js.map +1 -1
- package/dist/services/flow-engine.d.ts +1 -0
- package/dist/services/flow-engine.d.ts.map +1 -1
- package/dist/services/flow-engine.js +14 -2
- package/dist/services/flow-engine.js.map +1 -1
- package/dist/services/watcher.service.d.ts +45 -0
- package/dist/services/watcher.service.d.ts.map +1 -0
- package/dist/services/watcher.service.js +106 -0
- package/dist/services/watcher.service.js.map +1 -0
- package/dist/state/context.d.ts +15 -4
- package/dist/state/context.d.ts.map +1 -1
- package/dist/state/context.js +36 -9
- package/dist/state/context.js.map +1 -1
- package/dist/state/storage.d.ts.map +1 -1
- package/dist/state/storage.js +6 -0
- package/dist/state/storage.js.map +1 -1
- package/dist/tests/aprovar-gate.test.d.ts +2 -0
- package/dist/tests/aprovar-gate.test.d.ts.map +1 -0
- package/dist/tests/aprovar-gate.test.js +113 -0
- package/dist/tests/aprovar-gate.test.js.map +1 -0
- package/dist/tests/deliverable-validator.test.d.ts +12 -0
- package/dist/tests/deliverable-validator.test.d.ts.map +1 -0
- package/dist/tests/deliverable-validator.test.js +214 -0
- package/dist/tests/deliverable-validator.test.js.map +1 -0
- package/dist/tests/flow-engine.test.d.ts +2 -0
- package/dist/tests/flow-engine.test.d.ts.map +1 -0
- package/dist/tests/flow-engine.test.js +85 -0
- package/dist/tests/flow-engine.test.js.map +1 -0
- package/dist/tests/gate-orientation.test.d.ts +2 -0
- package/dist/tests/gate-orientation.test.d.ts.map +1 -0
- package/dist/tests/gate-orientation.test.js +59 -0
- package/dist/tests/gate-orientation.test.js.map +1 -0
- package/dist/tests/middleware.test.js +30 -4
- package/dist/tests/middleware.test.js.map +1 -1
- package/dist/tests/watcher.service.test.d.ts +2 -0
- package/dist/tests/watcher.service.test.d.ts.map +1 -0
- package/dist/tests/watcher.service.test.js +119 -0
- package/dist/tests/watcher.service.test.js.map +1 -0
- package/dist/tools/aprovar-gate.d.ts.map +1 -1
- package/dist/tools/aprovar-gate.js +4 -0
- package/dist/tools/aprovar-gate.js.map +1 -1
- package/dist/tools/contexto.d.ts.map +1 -1
- package/dist/tools/contexto.js +41 -0
- package/dist/tools/contexto.js.map +1 -1
- package/dist/tools/proximo.d.ts.map +1 -1
- package/dist/tools/proximo.js +224 -54
- package/dist/tools/proximo.js.map +1 -1
- package/dist/tools/status.d.ts.map +1 -1
- package/dist/tools/status.js +27 -0
- package/dist/tools/status.js.map +1 -1
- package/dist/tools/validar-gate.d.ts +8 -1
- package/dist/tools/validar-gate.d.ts.map +1 -1
- package/dist/tools/validar-gate.js +147 -99
- package/dist/tools/validar-gate.js.map +1 -1
- package/dist/types/config.d.ts +2 -0
- package/dist/types/config.d.ts.map +1 -1
- package/dist/types/config.js +2 -0
- package/dist/types/config.js.map +1 -1
- package/dist/types/index.d.ts +6 -0
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/index.js.map +1 -1
- package/dist/utils/gate-orientation.d.ts +11 -0
- package/dist/utils/gate-orientation.d.ts.map +1 -0
- package/dist/utils/gate-orientation.js +64 -0
- package/dist/utils/gate-orientation.js.map +1 -0
- package/dist/utils/ide-paths.d.ts +11 -0
- package/dist/utils/ide-paths.d.ts.map +1 -1
- package/dist/utils/ide-paths.js +27 -0
- package/dist/utils/ide-paths.js.map +1 -1
- package/dist/utils/instructions.d.ts +6 -1
- package/dist/utils/instructions.d.ts.map +1 -1
- package/dist/utils/instructions.js +32 -1
- package/dist/utils/instructions.js.map +1 -1
- package/package.json +2 -1
- package/dist/gates/compatibility-wrapper.d.ts +0 -139
- package/dist/gates/compatibility-wrapper.d.ts.map +0 -1
- package/dist/gates/compatibility-wrapper.js +0 -362
- package/dist/gates/compatibility-wrapper.js.map +0 -1
- package/dist/gates/unified-validator.d.ts +0 -67
- package/dist/gates/unified-validator.d.ts.map +0 -1
- package/dist/gates/unified-validator.js +0 -234
- package/dist/gates/unified-validator.js.map +0 -1
package/README.md
CHANGED
|
@@ -1,12 +1,12 @@
|
|
|
1
|
-
# MCP Maestro
|
|
1
|
+
# MCP Maestro v5.5.0
|
|
2
2
|
|
|
3
|
-
Servidor MCP (Model Context Protocol) para o Maestro -
|
|
3
|
+
Servidor MCP (Model Context Protocol) para o Maestro - Orquestração Autônoma Avançada e Zero-API.
|
|
4
4
|
|
|
5
|
-
**Pacote**: `@maestro-ai/mcp-server@
|
|
5
|
+
**Pacote**: `@maestro-ai/mcp-server@5.5.0`
|
|
6
6
|
|
|
7
7
|
## 🚀 Uso via npx (Recomendado)
|
|
8
8
|
|
|
9
|
-
O Maestro agora é distribuído como pacote npm e executado localmente via `npx`, garantindo acesso direto aos arquivos do seu projeto.
|
|
9
|
+
O Maestro agora é distribuído como pacote npm e executado localmente via `npx`, garantindo acesso direto aos arquivos do seu projeto e orquestração autônoma da IA da IDE.
|
|
10
10
|
|
|
11
11
|
### Instalação e Configuração
|
|
12
12
|
|
|
@@ -43,38 +43,28 @@ O Maestro agora é distribuído como pacote npm e executado localmente via `npx`
|
|
|
43
43
|
|
|
44
44
|
|
|
45
45
|
|
|
46
|
-
###
|
|
46
|
+
### Mecânica 5 Tools (V3+)
|
|
47
|
+
|
|
48
|
+
O Maestro consolidou suas dezenas de tools antigas em **5 Entry Points Inteligentes** que auto-gerenciam o estado do projeto.
|
|
47
49
|
|
|
48
50
|
```bash
|
|
49
|
-
# 1.
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
diretorio: "D:\\Projetos\\meu-app",
|
|
54
|
-
ide: "windsurf",
|
|
55
|
-
modo: "balanced" # economy | balanced | quality
|
|
56
|
-
)
|
|
51
|
+
# 1. Maestro (Entry Point)
|
|
52
|
+
maestro({ diretorio: "D:\\Projetos\\meu-app" }) # Autodetecta status atual
|
|
53
|
+
maestro({ acao: "criar_projeto", respostas: {...} }) # Cria novo projeto
|
|
54
|
+
maestro({ acao: "setup_inicial", respostas: { ide: "windsurf" } }) # Define ambiente
|
|
57
55
|
|
|
58
|
-
# 2.
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
diretorio: "D:\\Projetos\\meu-app",
|
|
62
|
-
tipo_artefato: "product",
|
|
63
|
-
nivel_complexidade: "medio",
|
|
64
|
-
ide: "windsurf",
|
|
65
|
-
modo: "balanced"
|
|
66
|
-
)
|
|
67
|
-
|
|
68
|
-
# 3. Coletar discovery (reduz prompts)
|
|
69
|
-
discovery(
|
|
70
|
-
estado_json: "<conteudo do estado.json>",
|
|
71
|
-
diretorio: "D:\\Projetos\\meu-app"
|
|
72
|
-
)
|
|
56
|
+
# 2. Executar (Ações Mutações)
|
|
57
|
+
executar({ acao: "avancar", entregavel: "..." }) # Avança fluxo com validação
|
|
58
|
+
executar({ acao: "salvar", conteudo: "...", tipo: "rascunho" }) # Gravação intermediária
|
|
73
59
|
|
|
74
|
-
#
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
60
|
+
# 3. Validar (Checagens)
|
|
61
|
+
validar({ diretorio: "D:\\Projetos\\meu-app" }) # Roda pipeline de validação da fase
|
|
62
|
+
|
|
63
|
+
# 4. Analisar (Insights e Refatoração)
|
|
64
|
+
analisar({ diretorio: "D:\\Projetos\\meu-app", tipo: "completo" }) # Relatório de Technical/AI Debt
|
|
65
|
+
|
|
66
|
+
# 5. Contextualizar
|
|
67
|
+
contexto({ diretorio: "D:\\Projetos\\meu-app" }) # Sumarização de estado e regras base
|
|
78
68
|
```
|
|
79
69
|
|
|
80
70
|
### Injeção Automática de Conteúdo
|
|
@@ -93,48 +83,42 @@ meu-app/
|
|
|
93
83
|
│ └── resumo.json # Memória do projeto
|
|
94
84
|
```
|
|
95
85
|
|
|
96
|
-
### Comandos Principais
|
|
86
|
+
### Comandos Principais e Fluxo Inteligente (Automação Zero-API)
|
|
97
87
|
|
|
98
|
-
|
|
88
|
+
Com a arquitetura Fat MCP v5.5, a IA agora conta com um **Pipeline de Validação Watcher** (`chokidar`) totalmente engrenado.
|
|
89
|
+
|
|
90
|
+
| Tool | Descrição |
|
|
99
91
|
|---------|-----------|
|
|
100
|
-
| `
|
|
101
|
-
| `
|
|
102
|
-
| `
|
|
103
|
-
| `
|
|
104
|
-
| `
|
|
105
|
-
| `discovery` | Coleta perguntas iniciais agrupadas e salva em `estado.discovery` |
|
|
106
|
-
| `injetar_conteudo` | Reinjeta conteúdo (use `force:true`) |
|
|
92
|
+
| `maestro` | Portal de engajamento do projeto. Auto-resolve entre inicializar e obter status. |
|
|
93
|
+
| `executar` | Comando central para mutações, lidar com TDD invertido, auto-correção forçada e transições lógicas. |
|
|
94
|
+
| `validar` | Disparo manual ou auto-acionado pelo Watcher ao salvar um MD (score baseado em regex e semântica). |
|
|
95
|
+
| `analisar` | Camada de verificação de Code Smells e Architectural Debt. |
|
|
96
|
+
| `contexto` | Permite à IA compreender regras atuais com segurança sem divagar. |
|
|
107
97
|
|
|
108
98
|
---
|
|
109
99
|
|
|
110
|
-
## Destaques do Changelog
|
|
111
|
-
-
|
|
112
|
-
-
|
|
113
|
-
- Multi-IDE
|
|
114
|
-
-
|
|
100
|
+
## Destaques do Changelog v5.5 (V6)
|
|
101
|
+
- **Watcher Progressivo (Sprint 5):** Qualquer save num entregável via IDE agora dispara a pontuação via background automaticamente sem queima de tokens.
|
|
102
|
+
- **TDD Invertido (Sprint 4):** A IA passa a ler um `.checklist-esperante.md` obrigatório ANTES de escrever o documento.
|
|
103
|
+
- **Hydration Multi-IDE (Sprint 3):** Prompt adaptável que manda links reais locais em favorísticos MCP (`@.cursor`, etc).
|
|
104
|
+
- **Zero Pause Points & Auto-Flow (Sprint 6):** Pipeline de transição avança automaticamente as etapas (derivação ou técnicas), parando unicamente em bloqueios (Score < 70) ou requerimentos explícitos humanos.
|
|
115
105
|
|
|
116
106
|
---
|
|
117
107
|
|
|
118
|
-
##
|
|
108
|
+
## Estrutura do Projeto Gerada
|
|
119
109
|
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
| `corrigir_bug` | Fluxo para correção de bugs |
|
|
133
|
-
| `refatorar` | Fluxo para refatoração de código |
|
|
134
|
-
| `classificar` | Classifica entregáveis |
|
|
135
|
-
| `avaliar_entregavel` | Avalia qualidade com score |
|
|
136
|
-
|
|
137
|
-
---
|
|
110
|
+
Quando instanciado, um esqueleto como este rege a progressão:
|
|
111
|
+
```
|
|
112
|
+
meu-app/
|
|
113
|
+
├── .maestro/
|
|
114
|
+
│ ├── validation/ # Reports das validações locais
|
|
115
|
+
│ ├── estado.json # Maquina de estados da IA e fluxo
|
|
116
|
+
│ └── resumo.json # Memoria Cache Limitada
|
|
117
|
+
├── .agent/
|
|
118
|
+
│ └── skills/ # Especialistas Injetados
|
|
119
|
+
├── docs/ # Entregáveis de cada sprint/fase
|
|
120
|
+
│ ├── fase-xx/ # Entregáveis iterativos
|
|
121
|
+
```
|
|
138
122
|
|
|
139
123
|
## 📚 Resources Disponíveis
|
|
140
124
|
|
|
@@ -213,31 +197,32 @@ npm publish --access public
|
|
|
213
197
|
## 📋 Exemplo de Fluxo Completo (Modo npx)
|
|
214
198
|
|
|
215
199
|
```bash
|
|
216
|
-
# 1. Iniciar projeto
|
|
217
|
-
|
|
218
|
-
nome: "meu-app",
|
|
219
|
-
descricao: "Sistema de gestão de tarefas",
|
|
200
|
+
# 1. Iniciar projeto (detectará que o estado não existe)
|
|
201
|
+
maestro({
|
|
220
202
|
diretorio: "D:\\Projetos\\meu-app"
|
|
221
|
-
)
|
|
203
|
+
})
|
|
222
204
|
|
|
223
|
-
# 2.
|
|
224
|
-
|
|
225
|
-
|
|
205
|
+
# 2. Configurar (injeta conteúdo e inicializa estrutura)
|
|
206
|
+
maestro({
|
|
207
|
+
acao: "setup_inicial",
|
|
226
208
|
diretorio: "D:\\Projetos\\meu-app",
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
209
|
+
respostas: {
|
|
210
|
+
ide: "windsurf",
|
|
211
|
+
modo: "balanced"
|
|
212
|
+
}
|
|
213
|
+
})
|
|
214
|
+
|
|
215
|
+
# 3. Validar estado do projeto a qualquer momento
|
|
216
|
+
contexto({
|
|
233
217
|
diretorio: "D:\\Projetos\\meu-app"
|
|
234
|
-
)
|
|
218
|
+
})
|
|
235
219
|
|
|
236
|
-
# 4. Avançar
|
|
237
|
-
|
|
220
|
+
# 4. Avançar iterações/fases do desenvolvimento
|
|
221
|
+
executar({
|
|
222
|
+
acao: "avancar",
|
|
238
223
|
entregavel: "# PRD - Produto\n\n## Problema\n...",
|
|
239
224
|
diretorio: "D:\\Projetos\\meu-app"
|
|
240
|
-
)
|
|
225
|
+
})
|
|
241
226
|
```
|
|
242
227
|
|
|
243
228
|
---
|
|
@@ -309,6 +309,20 @@ Disponíveis sob demanda, fora do fluxo de fases:
|
|
|
309
309
|
3. Que TEMPLATE usar?
|
|
310
310
|
4. Como isso DIFERE de output genérico?
|
|
311
311
|
|
|
312
|
+
### 🔄 Regra de Transição de Fase (Active Rules Auto-Hydration)
|
|
313
|
+
|
|
314
|
+
**Sempre que o servidor MCP confirmar avanço de fase:**
|
|
315
|
+
1. Leia **imediatamente** o arquivo SKILL.md do especialista indicado no retorno da tool
|
|
316
|
+
2. O path será fornecido no formato nativo da sua IDE:
|
|
317
|
+
- **Antigravity/Gemini:** `@[.agent/skills/{specialist}/SKILL.md]`
|
|
318
|
+
- **Cursor:** `@.cursor/skills/{specialist}/SKILL.md`
|
|
319
|
+
- **Windsurf:** `#.windsurf/skills/{specialist}/SKILL.md`
|
|
320
|
+
3. Assuma a persona descrita no SKILL.md **sem aguardar confirmação do usuário**
|
|
321
|
+
4. Confirme dizendo: "Sou [nome do especialista], meu foco é [entregável desta fase]."
|
|
322
|
+
|
|
323
|
+
> ❌ NUNCA aguarde o usuário pedir para carregar o especialista
|
|
324
|
+
> ✅ SEMPRE assuma a persona imediatamente ao receber a transição de fase
|
|
325
|
+
|
|
312
326
|
---
|
|
313
327
|
|
|
314
328
|
## 🏗️ FLUXO DO PROJETO
|
|
@@ -1,16 +1,17 @@
|
|
|
1
|
-
|
|
2
|
-
* Metrics Collector (Fase 2 - Melhoria #14)
|
|
3
|
-
* Coleta e analisa métricas de qualidade
|
|
4
|
-
*/
|
|
5
|
-
export declare class MetricsCollector {
|
|
6
|
-
collect(projectPath: string): Promise<QualityMetrics>;
|
|
7
|
-
getTrends(days?: number): Promise<MetricTrend[]>;
|
|
8
|
-
}
|
|
1
|
+
import type { EstadoProjeto } from '../../types/index.js';
|
|
9
2
|
export interface QualityMetrics {
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
3
|
+
entregaveisGerados: number;
|
|
4
|
+
totalFases: number;
|
|
5
|
+
progressoPercent: number;
|
|
6
|
+
docsEncontrados: number;
|
|
7
|
+
adrsEncontrados: number;
|
|
8
|
+
templatesUsados: number;
|
|
9
|
+
arquivosCodigo: number;
|
|
10
|
+
arquivosTeste: number;
|
|
11
|
+
ratioTestesCodigo: number;
|
|
12
|
+
scoreDocumentacao: number;
|
|
13
|
+
scoreEntregaveis: number;
|
|
14
|
+
scoreGeral: number;
|
|
14
15
|
timestamp: string;
|
|
15
16
|
}
|
|
16
17
|
export interface MetricTrend {
|
|
@@ -18,4 +19,19 @@ export interface MetricTrend {
|
|
|
18
19
|
metric: string;
|
|
19
20
|
value: number;
|
|
20
21
|
}
|
|
22
|
+
export declare class MetricsCollector {
|
|
23
|
+
/**
|
|
24
|
+
* v6.3 S4.2: Coleta métricas reais do projeto
|
|
25
|
+
*/
|
|
26
|
+
collect(projectPath: string, estado?: EstadoProjeto): Promise<QualityMetrics>;
|
|
27
|
+
/**
|
|
28
|
+
* Retorna tendência dos últimos N dias
|
|
29
|
+
*/
|
|
30
|
+
getTrends(projectPath: string, days?: number): Promise<MetricTrend[]>;
|
|
31
|
+
private analisarDocs;
|
|
32
|
+
private contarADRs;
|
|
33
|
+
private analisarCodigo;
|
|
34
|
+
private walkDir;
|
|
35
|
+
private persistir;
|
|
36
|
+
}
|
|
21
37
|
//# sourceMappingURL=MetricsCollector.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MetricsCollector.d.ts","sourceRoot":"","sources":["../../../src/core/metrics/MetricsCollector.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"MetricsCollector.d.ts","sourceRoot":"","sources":["../../../src/core/metrics/MetricsCollector.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAE1D,MAAM,WAAW,cAAc;IAE3B,kBAAkB,EAAE,MAAM,CAAC;IAC3B,UAAU,EAAE,MAAM,CAAC;IACnB,gBAAgB,EAAE,MAAM,CAAC;IAGzB,eAAe,EAAE,MAAM,CAAC;IACxB,eAAe,EAAE,MAAM,CAAC;IACxB,eAAe,EAAE,MAAM,CAAC;IAGxB,cAAc,EAAE,MAAM,CAAC;IACvB,aAAa,EAAE,MAAM,CAAC;IACtB,iBAAiB,EAAE,MAAM,CAAC;IAG1B,iBAAiB,EAAE,MAAM,CAAC;IAC1B,gBAAgB,EAAE,MAAM,CAAC;IACzB,UAAU,EAAE,MAAM,CAAC;IAEnB,SAAS,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,WAAW;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;CACjB;AAKD,qBAAa,gBAAgB;IAEzB;;OAEG;IACG,OAAO,CAAC,WAAW,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,aAAa,GAAG,OAAO,CAAC,cAAc,CAAC;IAiDnF;;OAEG;IACG,SAAS,CAAC,WAAW,EAAE,MAAM,EAAE,IAAI,GAAE,MAAW,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC;YAqBjE,YAAY;YAgBZ,UAAU;YAUV,cAAc;YA8Bd,OAAO;YAiBP,SAAS;CAc1B"}
|
|
@@ -1,20 +1,159 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Metrics Collector
|
|
3
|
-
* Coleta
|
|
2
|
+
* Metrics Collector — v6.3 S4.2
|
|
3
|
+
* Coleta métricas REAIS baseadas nos arquivos do projeto
|
|
4
4
|
*/
|
|
5
|
+
import { promises as fs } from 'fs';
|
|
6
|
+
import path from 'path';
|
|
7
|
+
const METRICS_FILE = '.maestro/metrics.json';
|
|
8
|
+
const IGNORED_DIRS = new Set(['node_modules', '.git', 'dist', 'build', '.maestro']);
|
|
5
9
|
export class MetricsCollector {
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
10
|
+
/**
|
|
11
|
+
* v6.3 S4.2: Coleta métricas reais do projeto
|
|
12
|
+
*/
|
|
13
|
+
async collect(projectPath, estado) {
|
|
14
|
+
const [docsInfo, codeInfo, adrsCount] = await Promise.all([
|
|
15
|
+
this.analisarDocs(projectPath),
|
|
16
|
+
this.analisarCodigo(projectPath),
|
|
17
|
+
this.contarADRs(projectPath),
|
|
18
|
+
]);
|
|
19
|
+
const entregaveisGerados = estado ? Object.keys(estado.entregaveis).length : 0;
|
|
20
|
+
const totalFases = estado?.total_fases ?? 1;
|
|
21
|
+
const progressoPercent = Math.round((entregaveisGerados / totalFases) * 100);
|
|
22
|
+
// Score de documentação: docs + ADRs
|
|
23
|
+
const scoreDocumentacao = Math.min(100, Math.round((docsInfo.count / Math.max(1, totalFases)) * 60 +
|
|
24
|
+
Math.min(40, adrsCount * 8)));
|
|
25
|
+
// Score de entregáveis: % de fases com entregável
|
|
26
|
+
const scoreEntregaveis = progressoPercent;
|
|
27
|
+
// Score geral: média ponderada
|
|
28
|
+
const scoreGeral = Math.round(scoreDocumentacao * 0.4 +
|
|
29
|
+
scoreEntregaveis * 0.4 +
|
|
30
|
+
Math.min(20, codeInfo.ratioTestesCodigo * 20) * 0.2);
|
|
31
|
+
const metrics = {
|
|
32
|
+
entregaveisGerados,
|
|
33
|
+
totalFases,
|
|
34
|
+
progressoPercent,
|
|
35
|
+
docsEncontrados: docsInfo.count,
|
|
36
|
+
adrsEncontrados: adrsCount,
|
|
37
|
+
templatesUsados: docsInfo.templates,
|
|
38
|
+
arquivosCodigo: codeInfo.codigo,
|
|
39
|
+
arquivosTeste: codeInfo.testes,
|
|
40
|
+
ratioTestesCodigo: codeInfo.ratioTestesCodigo,
|
|
41
|
+
scoreDocumentacao,
|
|
42
|
+
scoreEntregaveis,
|
|
43
|
+
scoreGeral,
|
|
44
|
+
timestamp: new Date().toISOString(),
|
|
14
45
|
};
|
|
46
|
+
// Persistir no histórico (best-effort)
|
|
47
|
+
await this.persistir(projectPath, metrics).catch(() => { });
|
|
48
|
+
return metrics;
|
|
15
49
|
}
|
|
16
|
-
|
|
17
|
-
|
|
50
|
+
/**
|
|
51
|
+
* Retorna tendência dos últimos N dias
|
|
52
|
+
*/
|
|
53
|
+
async getTrends(projectPath, days = 30) {
|
|
54
|
+
try {
|
|
55
|
+
const filePath = path.join(projectPath, METRICS_FILE);
|
|
56
|
+
const raw = await fs.readFile(filePath, 'utf-8');
|
|
57
|
+
const history = JSON.parse(raw);
|
|
58
|
+
const cutoff = Date.now() - days * 24 * 60 * 60 * 1000;
|
|
59
|
+
return history
|
|
60
|
+
.filter(m => new Date(m.timestamp).getTime() > cutoff)
|
|
61
|
+
.flatMap(m => [
|
|
62
|
+
{ date: m.timestamp, metric: 'scoreGeral', value: m.scoreGeral },
|
|
63
|
+
{ date: m.timestamp, metric: 'progressoPercent', value: m.progressoPercent },
|
|
64
|
+
{ date: m.timestamp, metric: 'scoreDocumentacao', value: m.scoreDocumentacao },
|
|
65
|
+
]);
|
|
66
|
+
}
|
|
67
|
+
catch {
|
|
68
|
+
return [];
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
// ─── Helpers privados ────────────────────────────────────────────────────
|
|
72
|
+
async analisarDocs(projectPath) {
|
|
73
|
+
const docsDir = path.join(projectPath, 'docs');
|
|
74
|
+
let count = 0;
|
|
75
|
+
let templates = 0;
|
|
76
|
+
try {
|
|
77
|
+
const entries = await fs.readdir(docsDir, { withFileTypes: true, recursive: true });
|
|
78
|
+
for (const e of entries) {
|
|
79
|
+
if (e.isFile?.() && (e.name.endsWith('.md') || e.name.endsWith('.mdx'))) {
|
|
80
|
+
count++;
|
|
81
|
+
if (e.name.toLowerCase().includes('template'))
|
|
82
|
+
templates++;
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
catch { /* docs/ pode não existir */ }
|
|
87
|
+
return { count, templates };
|
|
88
|
+
}
|
|
89
|
+
async contarADRs(projectPath) {
|
|
90
|
+
const adrsDir = path.join(projectPath, '.maestro', 'adrs');
|
|
91
|
+
try {
|
|
92
|
+
const files = await fs.readdir(adrsDir);
|
|
93
|
+
return files.filter(f => f.endsWith('.md') && f !== 'INDEX.md').length;
|
|
94
|
+
}
|
|
95
|
+
catch {
|
|
96
|
+
return 0;
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
async analisarCodigo(projectPath) {
|
|
100
|
+
let codigo = 0;
|
|
101
|
+
let testes = 0;
|
|
102
|
+
const CODE_EXTS = new Set(['.ts', '.tsx', '.js', '.jsx', '.py', '.go', '.java', '.cs']);
|
|
103
|
+
const TEST_PATTERNS = ['.test.', '.spec.', '_test.', '__tests__'];
|
|
104
|
+
try {
|
|
105
|
+
await this.walkDir(projectPath, (filePath) => {
|
|
106
|
+
const ext = path.extname(filePath);
|
|
107
|
+
if (!CODE_EXTS.has(ext))
|
|
108
|
+
return;
|
|
109
|
+
const name = path.basename(filePath);
|
|
110
|
+
const isTeste = TEST_PATTERNS.some(p => name.includes(p)) ||
|
|
111
|
+
filePath.includes(`${path.sep}test${path.sep}`) ||
|
|
112
|
+
filePath.includes(`${path.sep}tests${path.sep}`) ||
|
|
113
|
+
filePath.includes(`${path.sep}__tests__${path.sep}`);
|
|
114
|
+
if (isTeste)
|
|
115
|
+
testes++;
|
|
116
|
+
else
|
|
117
|
+
codigo++;
|
|
118
|
+
});
|
|
119
|
+
}
|
|
120
|
+
catch { /* best-effort */ }
|
|
121
|
+
const ratioTestesCodigo = codigo > 0 ? Math.min(1, testes / codigo) : 0;
|
|
122
|
+
return { codigo, testes, ratioTestesCodigo };
|
|
123
|
+
}
|
|
124
|
+
async walkDir(dir, callback) {
|
|
125
|
+
let entries;
|
|
126
|
+
try {
|
|
127
|
+
entries = await fs.readdir(dir, { withFileTypes: true });
|
|
128
|
+
}
|
|
129
|
+
catch {
|
|
130
|
+
return;
|
|
131
|
+
}
|
|
132
|
+
for (const entry of entries) {
|
|
133
|
+
if (IGNORED_DIRS.has(entry.name))
|
|
134
|
+
continue;
|
|
135
|
+
const full = path.join(dir, entry.name);
|
|
136
|
+
if (entry.isDirectory()) {
|
|
137
|
+
await this.walkDir(full, callback);
|
|
138
|
+
}
|
|
139
|
+
else if (entry.isFile()) {
|
|
140
|
+
callback(full);
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
async persistir(projectPath, metrics) {
|
|
145
|
+
const filePath = path.join(projectPath, METRICS_FILE);
|
|
146
|
+
let history = [];
|
|
147
|
+
try {
|
|
148
|
+
const raw = await fs.readFile(filePath, 'utf-8');
|
|
149
|
+
history = JSON.parse(raw);
|
|
150
|
+
}
|
|
151
|
+
catch { /* arquivo não existe ainda */ }
|
|
152
|
+
history.push(metrics);
|
|
153
|
+
// Manter apenas últimas 90 entradas (~3 meses se coletado diariamente)
|
|
154
|
+
if (history.length > 90)
|
|
155
|
+
history = history.slice(-90);
|
|
156
|
+
await fs.writeFile(filePath, JSON.stringify(history, null, 2), 'utf-8');
|
|
18
157
|
}
|
|
19
158
|
}
|
|
20
159
|
//# sourceMappingURL=MetricsCollector.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MetricsCollector.js","sourceRoot":"","sources":["../../../src/core/metrics/MetricsCollector.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,MAAM,OAAO,gBAAgB;
|
|
1
|
+
{"version":3,"file":"MetricsCollector.js","sourceRoot":"","sources":["../../../src/core/metrics/MetricsCollector.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,EAAE,QAAQ,IAAI,EAAE,EAAE,MAAM,IAAI,CAAC;AACpC,OAAO,IAAI,MAAM,MAAM,CAAC;AAiCxB,MAAM,YAAY,GAAG,uBAAuB,CAAC;AAC7C,MAAM,YAAY,GAAG,IAAI,GAAG,CAAC,CAAC,cAAc,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,UAAU,CAAC,CAAC,CAAC;AAEpF,MAAM,OAAO,gBAAgB;IAEzB;;OAEG;IACH,KAAK,CAAC,OAAO,CAAC,WAAmB,EAAE,MAAsB;QACrD,MAAM,CAAC,QAAQ,EAAE,QAAQ,EAAE,SAAS,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;YACtD,IAAI,CAAC,YAAY,CAAC,WAAW,CAAC;YAC9B,IAAI,CAAC,cAAc,CAAC,WAAW,CAAC;YAChC,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC;SAC/B,CAAC,CAAC;QAEH,MAAM,kBAAkB,GAAG,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;QAC/E,MAAM,UAAU,GAAG,MAAM,EAAE,WAAW,IAAI,CAAC,CAAC;QAC5C,MAAM,gBAAgB,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,kBAAkB,GAAG,UAAU,CAAC,GAAG,GAAG,CAAC,CAAC;QAE7E,qCAAqC;QACrC,MAAM,iBAAiB,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,KAAK,CAC9C,CAAC,QAAQ,CAAC,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC,GAAG,EAAE;YAC/C,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,SAAS,GAAG,CAAC,CAAC,CAC9B,CAAC,CAAC;QAEH,kDAAkD;QAClD,MAAM,gBAAgB,GAAG,gBAAgB,CAAC;QAE1C,+BAA+B;QAC/B,MAAM,UAAU,GAAG,IAAI,CAAC,KAAK,CACzB,iBAAiB,GAAG,GAAG;YACvB,gBAAgB,GAAG,GAAG;YACtB,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,QAAQ,CAAC,iBAAiB,GAAG,EAAE,CAAC,GAAG,GAAG,CACtD,CAAC;QAEF,MAAM,OAAO,GAAmB;YAC5B,kBAAkB;YAClB,UAAU;YACV,gBAAgB;YAChB,eAAe,EAAE,QAAQ,CAAC,KAAK;YAC/B,eAAe,EAAE,SAAS;YAC1B,eAAe,EAAE,QAAQ,CAAC,SAAS;YACnC,cAAc,EAAE,QAAQ,CAAC,MAAM;YAC/B,aAAa,EAAE,QAAQ,CAAC,MAAM;YAC9B,iBAAiB,EAAE,QAAQ,CAAC,iBAAiB;YAC7C,iBAAiB;YACjB,gBAAgB;YAChB,UAAU;YACV,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;SACtC,CAAC;QAEF,uCAAuC;QACvC,MAAM,IAAI,CAAC,SAAS,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;QAE3D,OAAO,OAAO,CAAC;IACnB,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,SAAS,CAAC,WAAmB,EAAE,OAAe,EAAE;QAClD,IAAI,CAAC;YACD,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,YAAY,CAAC,CAAC;YACtD,MAAM,GAAG,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;YACjD,MAAM,OAAO,GAAqB,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;YAElD,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC;YACvD,OAAO,OAAO;iBACT,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,OAAO,EAAE,GAAG,MAAM,CAAC;iBACrD,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC;gBACV,EAAE,IAAI,EAAE,CAAC,CAAC,SAAS,EAAE,MAAM,EAAE,YAAY,EAAE,KAAK,EAAE,CAAC,CAAC,UAAU,EAAE;gBAChE,EAAE,IAAI,EAAE,CAAC,CAAC,SAAS,EAAE,MAAM,EAAE,kBAAkB,EAAE,KAAK,EAAE,CAAC,CAAC,gBAAgB,EAAE;gBAC5E,EAAE,IAAI,EAAE,CAAC,CAAC,SAAS,EAAE,MAAM,EAAE,mBAAmB,EAAE,KAAK,EAAE,CAAC,CAAC,iBAAiB,EAAE;aACjF,CAAC,CAAC;QACX,CAAC;QAAC,MAAM,CAAC;YACL,OAAO,EAAE,CAAC;QACd,CAAC;IACL,CAAC;IAED,4EAA4E;IAEpE,KAAK,CAAC,YAAY,CAAC,WAAmB;QAC1C,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC;QAC/C,IAAI,KAAK,GAAG,CAAC,CAAC;QACd,IAAI,SAAS,GAAG,CAAC,CAAC;QAClB,IAAI,CAAC;YACD,MAAM,OAAO,GAAG,MAAM,EAAE,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAS,CAAC,CAAC;YAC3F,KAAK,MAAM,CAAC,IAAI,OAAgB,EAAE,CAAC;gBAC/B,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC;oBACtE,KAAK,EAAE,CAAC;oBACR,IAAI,CAAC,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,UAAU,CAAC;wBAAE,SAAS,EAAE,CAAC;gBAC/D,CAAC;YACL,CAAC;QACL,CAAC;QAAC,MAAM,CAAC,CAAC,4BAA4B,CAAC,CAAC;QACxC,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC;IAChC,CAAC;IAEO,KAAK,CAAC,UAAU,CAAC,WAAmB;QACxC,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,UAAU,EAAE,MAAM,CAAC,CAAC;QAC3D,IAAI,CAAC;YACD,MAAM,KAAK,GAAG,MAAM,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;YACxC,OAAO,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,UAAU,CAAC,CAAC,MAAM,CAAC;QAC3E,CAAC;QAAC,MAAM,CAAC;YACL,OAAO,CAAC,CAAC;QACb,CAAC;IACL,CAAC;IAEO,KAAK,CAAC,cAAc,CAAC,WAAmB;QAK5C,IAAI,MAAM,GAAG,CAAC,CAAC;QACf,IAAI,MAAM,GAAG,CAAC,CAAC;QAEf,MAAM,SAAS,GAAG,IAAI,GAAG,CAAC,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,CAAC,CAAC,CAAC;QACxF,MAAM,aAAa,GAAG,CAAC,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,WAAW,CAAC,CAAC;QAElE,IAAI,CAAC;YACD,MAAM,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC,QAAQ,EAAE,EAAE;gBACzC,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;gBACnC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,GAAG,CAAC;oBAAE,OAAO;gBAEhC,MAAM,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;gBACrC,MAAM,OAAO,GAAG,aAAa,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;oBACrD,QAAQ,CAAC,QAAQ,CAAC,GAAG,IAAI,CAAC,GAAG,OAAO,IAAI,CAAC,GAAG,EAAE,CAAC;oBAC/C,QAAQ,CAAC,QAAQ,CAAC,GAAG,IAAI,CAAC,GAAG,QAAQ,IAAI,CAAC,GAAG,EAAE,CAAC;oBAChD,QAAQ,CAAC,QAAQ,CAAC,GAAG,IAAI,CAAC,GAAG,YAAY,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC;gBACzD,IAAI,OAAO;oBAAE,MAAM,EAAE,CAAC;;oBACjB,MAAM,EAAE,CAAC;YAClB,CAAC,CAAC,CAAC;QACP,CAAC;QAAC,MAAM,CAAC,CAAC,iBAAiB,CAAC,CAAC;QAE7B,MAAM,iBAAiB,GAAG,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACxE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,iBAAiB,EAAE,CAAC;IACjD,CAAC;IAEO,KAAK,CAAC,OAAO,CAAC,GAAW,EAAE,QAAoC;QACnE,IAAI,OAAc,CAAC;QACnB,IAAI,CAAC;YACD,OAAO,GAAG,MAAM,EAAE,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC;QAC7D,CAAC;QAAC,MAAM,CAAC;YAAC,OAAO;QAAC,CAAC;QAEnB,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;YAC1B,IAAI,YAAY,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC;gBAAE,SAAS;YAC3C,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;YACxC,IAAI,KAAK,CAAC,WAAW,EAAE,EAAE,CAAC;gBACtB,MAAM,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;YACvC,CAAC;iBAAM,IAAI,KAAK,CAAC,MAAM,EAAE,EAAE,CAAC;gBACxB,QAAQ,CAAC,IAAI,CAAC,CAAC;YACnB,CAAC;QACL,CAAC;IACL,CAAC;IAEO,KAAK,CAAC,SAAS,CAAC,WAAmB,EAAE,OAAuB;QAChE,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,YAAY,CAAC,CAAC;QACtD,IAAI,OAAO,GAAqB,EAAE,CAAC;QACnC,IAAI,CAAC;YACD,MAAM,GAAG,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;YACjD,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QAC9B,CAAC;QAAC,MAAM,CAAC,CAAC,8BAA8B,CAAC,CAAC;QAE1C,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACtB,uEAAuE;QACvE,IAAI,OAAO,CAAC,MAAM,GAAG,EAAE;YAAE,OAAO,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC;QAEtD,MAAM,EAAE,CAAC,SAAS,CAAC,QAAQ,EAAE,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;IAC5E,CAAC;CACJ"}
|
|
@@ -2,18 +2,40 @@ import type { LayerValidationResult, PipelineResult, ValidationContext } from '.
|
|
|
2
2
|
/**
|
|
3
3
|
* Pipeline de Validação Multi-Camadas (Fase 2 - Melhoria #10)
|
|
4
4
|
*
|
|
5
|
-
*
|
|
5
|
+
* Dois modos de operação:
|
|
6
|
+
*
|
|
7
|
+
* Modo "code" (padrão): Valida código TypeScript em 5 camadas sequenciais:
|
|
6
8
|
* 1. Sintática (≥ 80%) - Compilação, sintaxe, imports
|
|
7
9
|
* 2. Semântica (≥ 70%) - Contexto, APIs, tipos
|
|
8
10
|
* 3. Qualidade (≥ 70%) - Padrões, code smells, testabilidade
|
|
9
11
|
* 4. Arquitetura (≥ 80%) - Camadas, dependências, fitness functions
|
|
10
12
|
* 5. Segurança (≥ 90%) - OWASP, vulnerabilidades
|
|
13
|
+
*
|
|
14
|
+
* Modo "deliverable" (v6.1): Valida documentos Markdown de fases do projeto:
|
|
15
|
+
* - Presença de seções obrigatórias por fase
|
|
16
|
+
* - Completude do gate_checklist
|
|
17
|
+
* - Tamanho mínimo de conteúdo
|
|
18
|
+
* - Qualidade semântica do Markdown
|
|
11
19
|
*/
|
|
12
20
|
export declare class ValidationPipeline {
|
|
13
21
|
private layers;
|
|
22
|
+
private deliverableValidator;
|
|
14
23
|
constructor();
|
|
15
24
|
/**
|
|
16
|
-
* Valida
|
|
25
|
+
* v6.1: Valida entregável de fase (documento Markdown)
|
|
26
|
+
*
|
|
27
|
+
* Use este método para fases do projeto (PRD, Requisitos, UX, Arquitetura, etc.).
|
|
28
|
+
* Ao contrário de validate(), não usa as camadas de código TypeScript.
|
|
29
|
+
*
|
|
30
|
+
* @param content - Conteúdo do entregável (Markdown)
|
|
31
|
+
* @param nomeFase - Nome da fase (ex: "Produto", "Requisitos")
|
|
32
|
+
* @param tier - Tier de rigor da validação
|
|
33
|
+
* @param gateChecklist - Itens do gate checklist da fase
|
|
34
|
+
*/
|
|
35
|
+
validateDeliverable(content: string, nomeFase: string, tier?: 'essencial' | 'base' | 'avancado', gateChecklist?: string[]): Promise<PipelineResult>;
|
|
36
|
+
/**
|
|
37
|
+
* Valida código TypeScript através do pipeline completo (5 camadas).
|
|
38
|
+
* Para entregáveis de fase (Markdown), use validateDeliverable() ao invés.
|
|
17
39
|
*/
|
|
18
40
|
validate(code: string, tier?: 'essencial' | 'base' | 'avancado', context?: ValidationContext): Promise<PipelineResult>;
|
|
19
41
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ValidationPipeline.d.ts","sourceRoot":"","sources":["../../../src/core/validation/ValidationPipeline.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAER,qBAAqB,EACrB,cAAc,EACd,iBAAiB,EAEpB,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"ValidationPipeline.d.ts","sourceRoot":"","sources":["../../../src/core/validation/ValidationPipeline.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAER,qBAAqB,EACrB,cAAc,EACd,iBAAiB,EAEpB,MAAM,YAAY,CAAC;AAUpB;;;;;;;;;;;;;;;;;GAiBG;AACH,qBAAa,kBAAkB;IAC3B,OAAO,CAAC,MAAM,CAAoB;IAClC,OAAO,CAAC,oBAAoB,CAAuB;;IA4CnD;;;;;;;;;;OAUG;IACG,mBAAmB,CACrB,OAAO,EAAE,MAAM,EACf,QAAQ,EAAE,MAAM,EAChB,IAAI,GAAE,WAAW,GAAG,MAAM,GAAG,UAAmB,EAChD,aAAa,GAAE,MAAM,EAAO,GAC7B,OAAO,CAAC,cAAc,CAAC;IA0B1B;;;OAGG;IACG,QAAQ,CACV,IAAI,EAAE,MAAM,EACZ,IAAI,GAAE,WAAW,GAAG,MAAM,GAAG,UAAmB,EAChD,OAAO,CAAC,EAAE,iBAAiB,GAC5B,OAAO,CAAC,cAAc,CAAC;IAiD1B;;OAEG;IACG,aAAa,CACf,IAAI,EAAE,MAAM,EACZ,SAAS,EAAE,MAAM,EACjB,OAAO,CAAC,EAAE,iBAAiB,GAC5B,OAAO,CAAC,qBAAqB,CAAC;IAUjC;;OAEG;IACH,OAAO,CAAC,cAAc;IAyBtB;;OAEG;IACH,OAAO,CAAC,eAAe;IAKvB;;OAEG;IACH,OAAO,CAAC,uBAAuB;IA8B/B;;OAEG;YACW,UAAU;IAexB;;OAEG;IACH,YAAY,CAAC,IAAI,EAAE,WAAW,GAAG,MAAM,GAAG,UAAU;;;;;;;;;;;;;;;;;;;CA2BvD"}
|
|
@@ -3,21 +3,32 @@ import { SemanticValidator } from './layers/SemanticValidator.js';
|
|
|
3
3
|
import { QualityValidator } from './layers/QualityValidator.js';
|
|
4
4
|
import { ArchitectureValidator } from './layers/ArchitectureValidator.js';
|
|
5
5
|
import { SecurityValidatorWrapper } from './layers/SecurityValidatorWrapper.js';
|
|
6
|
+
import { DeliverableValidator } from './layers/DeliverableValidator.js';
|
|
6
7
|
import * as fs from 'fs/promises';
|
|
7
8
|
import * as path from 'path';
|
|
8
9
|
/**
|
|
9
10
|
* Pipeline de Validação Multi-Camadas (Fase 2 - Melhoria #10)
|
|
10
11
|
*
|
|
11
|
-
*
|
|
12
|
+
* Dois modos de operação:
|
|
13
|
+
*
|
|
14
|
+
* Modo "code" (padrão): Valida código TypeScript em 5 camadas sequenciais:
|
|
12
15
|
* 1. Sintática (≥ 80%) - Compilação, sintaxe, imports
|
|
13
16
|
* 2. Semântica (≥ 70%) - Contexto, APIs, tipos
|
|
14
17
|
* 3. Qualidade (≥ 70%) - Padrões, code smells, testabilidade
|
|
15
18
|
* 4. Arquitetura (≥ 80%) - Camadas, dependências, fitness functions
|
|
16
19
|
* 5. Segurança (≥ 90%) - OWASP, vulnerabilidades
|
|
20
|
+
*
|
|
21
|
+
* Modo "deliverable" (v6.1): Valida documentos Markdown de fases do projeto:
|
|
22
|
+
* - Presença de seções obrigatórias por fase
|
|
23
|
+
* - Completude do gate_checklist
|
|
24
|
+
* - Tamanho mínimo de conteúdo
|
|
25
|
+
* - Qualidade semântica do Markdown
|
|
17
26
|
*/
|
|
18
27
|
export class ValidationPipeline {
|
|
19
28
|
layers;
|
|
29
|
+
deliverableValidator;
|
|
20
30
|
constructor() {
|
|
31
|
+
this.deliverableValidator = new DeliverableValidator();
|
|
21
32
|
this.layers = [
|
|
22
33
|
{
|
|
23
34
|
name: 'Sintática',
|
|
@@ -57,7 +68,40 @@ export class ValidationPipeline {
|
|
|
57
68
|
];
|
|
58
69
|
}
|
|
59
70
|
/**
|
|
60
|
-
* Valida
|
|
71
|
+
* v6.1: Valida entregável de fase (documento Markdown)
|
|
72
|
+
*
|
|
73
|
+
* Use este método para fases do projeto (PRD, Requisitos, UX, Arquitetura, etc.).
|
|
74
|
+
* Ao contrário de validate(), não usa as camadas de código TypeScript.
|
|
75
|
+
*
|
|
76
|
+
* @param content - Conteúdo do entregável (Markdown)
|
|
77
|
+
* @param nomeFase - Nome da fase (ex: "Produto", "Requisitos")
|
|
78
|
+
* @param tier - Tier de rigor da validação
|
|
79
|
+
* @param gateChecklist - Itens do gate checklist da fase
|
|
80
|
+
*/
|
|
81
|
+
async validateDeliverable(content, nomeFase, tier = 'base', gateChecklist = []) {
|
|
82
|
+
const startTime = new Date().toISOString();
|
|
83
|
+
console.log(`[ValidationPipeline] Validando entregável (fase: ${nomeFase}, tier: ${tier})`);
|
|
84
|
+
const deliverableContext = {
|
|
85
|
+
projectPath: '',
|
|
86
|
+
nomeFase,
|
|
87
|
+
gateChecklist,
|
|
88
|
+
tier
|
|
89
|
+
};
|
|
90
|
+
const result = await this.deliverableValidator.validate(content, deliverableContext);
|
|
91
|
+
const pipelineResult = {
|
|
92
|
+
overallScore: result.score,
|
|
93
|
+
passed: result.passed,
|
|
94
|
+
results: [result],
|
|
95
|
+
recommendations: result.suggestions,
|
|
96
|
+
tier,
|
|
97
|
+
timestamp: startTime
|
|
98
|
+
};
|
|
99
|
+
await this.saveReport(pipelineResult);
|
|
100
|
+
return pipelineResult;
|
|
101
|
+
}
|
|
102
|
+
/**
|
|
103
|
+
* Valida código TypeScript através do pipeline completo (5 camadas).
|
|
104
|
+
* Para entregáveis de fase (Markdown), use validateDeliverable() ao invés.
|
|
61
105
|
*/
|
|
62
106
|
async validate(code, tier = 'base', context) {
|
|
63
107
|
const results = [];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ValidationPipeline.js","sourceRoot":"","sources":["../../../src/core/validation/ValidationPipeline.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,kBAAkB,EAAE,MAAM,gCAAgC,CAAC;AACpE,OAAO,EAAE,iBAAiB,EAAE,MAAM,+BAA+B,CAAC;AAClE,OAAO,EAAE,gBAAgB,EAAE,MAAM,8BAA8B,CAAC;AAChE,OAAO,EAAE,qBAAqB,EAAE,MAAM,mCAAmC,CAAC;AAC1E,OAAO,EAAE,wBAAwB,EAAE,MAAM,sCAAsC,CAAC;AAChF,OAAO,KAAK,EAAE,MAAM,aAAa,CAAC;AAClC,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAE7B
|
|
1
|
+
{"version":3,"file":"ValidationPipeline.js","sourceRoot":"","sources":["../../../src/core/validation/ValidationPipeline.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import type { LayerValidationResult, ValidationContext } from '../types.js';
|
|
2
|
+
export interface DeliverableContext extends ValidationContext {
|
|
3
|
+
/** Nome da fase atual (ex: "Produto", "Requisitos") */
|
|
4
|
+
nomeFase: string;
|
|
5
|
+
/** Gate checklist da fase (itens que devem ser evidenciados) */
|
|
6
|
+
gateChecklist?: string[];
|
|
7
|
+
}
|
|
8
|
+
export declare class DeliverableValidator {
|
|
9
|
+
validate(content: string, context?: DeliverableContext): Promise<LayerValidationResult>;
|
|
10
|
+
private checkMarkdownQuality;
|
|
11
|
+
private calculateScore;
|
|
12
|
+
}
|
|
13
|
+
//# sourceMappingURL=DeliverableValidator.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"DeliverableValidator.d.ts","sourceRoot":"","sources":["../../../../src/core/validation/layers/DeliverableValidator.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,qBAAqB,EAAE,iBAAiB,EAAmB,MAAM,aAAa,CAAC;AAsH7F,MAAM,WAAW,kBAAmB,SAAQ,iBAAiB;IACzD,uDAAuD;IACvD,QAAQ,EAAE,MAAM,CAAC;IACjB,gEAAgE;IAChE,aAAa,CAAC,EAAE,MAAM,EAAE,CAAC;CAC5B;AAED,qBAAa,oBAAoB;IACvB,QAAQ,CACV,OAAO,EAAE,MAAM,EACf,OAAO,CAAC,EAAE,kBAAkB,GAC7B,OAAO,CAAC,qBAAqB,CAAC;IA8HjC,OAAO,CAAC,oBAAoB;IAyC5B,OAAO,CAAC,cAAc;CAsBzB"}
|