@maestro-ai/mcp-server 5.6.4 → 5.7.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/dist/constants.d.ts +1 -1
- package/dist/constants.js +1 -1
- package/dist/flows/types.d.ts +25 -0
- package/dist/flows/types.d.ts.map +1 -1
- package/dist/flows/types.js +104 -27
- package/dist/flows/types.js.map +1 -1
- package/dist/gates/code-validator.d.ts +47 -0
- package/dist/gates/code-validator.d.ts.map +1 -0
- package/dist/gates/code-validator.js +225 -0
- package/dist/gates/code-validator.js.map +1 -0
- package/dist/handlers/code-phase-handler.d.ts +36 -0
- package/dist/handlers/code-phase-handler.d.ts.map +1 -0
- package/dist/handlers/code-phase-handler.js +723 -0
- package/dist/handlers/code-phase-handler.js.map +1 -0
- package/dist/handlers/specialist-formatters.d.ts.map +1 -1
- package/dist/handlers/specialist-formatters.js +100 -0
- package/dist/handlers/specialist-formatters.js.map +1 -1
- package/dist/services/deliverable-gate.service.d.ts +40 -0
- package/dist/services/deliverable-gate.service.d.ts.map +1 -0
- package/dist/services/deliverable-gate.service.js +88 -0
- package/dist/services/deliverable-gate.service.js.map +1 -0
- package/dist/services/task-decomposer.service.d.ts +17 -0
- package/dist/services/task-decomposer.service.d.ts.map +1 -1
- package/dist/services/task-decomposer.service.js +344 -0
- package/dist/services/task-decomposer.service.js.map +1 -1
- package/dist/tools/consolidated/avancar.d.ts.map +1 -1
- package/dist/tools/consolidated/avancar.js +21 -3
- package/dist/tools/consolidated/avancar.js.map +1 -1
- package/dist/tools/proximo.d.ts.map +1 -1
- package/dist/tools/proximo.js +56 -121
- package/dist/tools/proximo.js.map +1 -1
- package/dist/types/code-manifest.d.ts +47 -0
- package/dist/types/code-manifest.d.ts.map +1 -0
- package/dist/types/code-manifest.js +12 -0
- package/dist/types/code-manifest.js.map +1 -0
- package/package.json +1 -1
package/dist/constants.d.ts
CHANGED
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
* Todos os entry points (stdio.ts, index.ts) importam daqui.
|
|
6
6
|
*/
|
|
7
7
|
export declare const MAESTRO_NAME = "mcp-maestro";
|
|
8
|
-
export declare const MAESTRO_VERSION = "7.
|
|
8
|
+
export declare const MAESTRO_VERSION = "5.7.0";
|
|
9
9
|
export declare const MAESTRO_DESCRIPTION = "Maestro \u2014 Orquestrador de desenvolvimento assistido por IA";
|
|
10
10
|
/**
|
|
11
11
|
* Protocol version suportada pelo servidor.
|
package/dist/constants.js
CHANGED
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
* Todos os entry points (stdio.ts, index.ts) importam daqui.
|
|
6
6
|
*/
|
|
7
7
|
export const MAESTRO_NAME = "mcp-maestro";
|
|
8
|
-
export const MAESTRO_VERSION = "7.
|
|
8
|
+
export const MAESTRO_VERSION = "5.7.0";
|
|
9
9
|
export const MAESTRO_DESCRIPTION = "Maestro — Orquestrador de desenvolvimento assistido por IA";
|
|
10
10
|
/**
|
|
11
11
|
* Protocol version suportada pelo servidor.
|
package/dist/flows/types.d.ts
CHANGED
|
@@ -1,4 +1,29 @@
|
|
|
1
1
|
import type { Fase, Fluxo } from "../types/index.js";
|
|
2
|
+
import type { EstadoProjeto } from "../types/index.js";
|
|
3
|
+
/**
|
|
4
|
+
* Nomes canônicos das fases de desenvolvimento de código.
|
|
5
|
+
* FONTE ÚNICA DE VERDADE — todos os arquivos devem importar daqui.
|
|
6
|
+
*
|
|
7
|
+
* Nota: "Testes" é fase de DOCUMENTO (plano-testes.md), não de código.
|
|
8
|
+
* "Deploy Final" é fase de código (release.md + CI/CD).
|
|
9
|
+
*
|
|
10
|
+
* @since v9.0
|
|
11
|
+
*/
|
|
12
|
+
export declare const CODE_PHASE_NAMES: readonly ["Frontend", "Backend", "Integração", "Deploy Final"];
|
|
13
|
+
/**
|
|
14
|
+
* Verifica se uma fase é de código (desenvolvimento).
|
|
15
|
+
* Usa CODE_PHASE_NAMES como fonte única.
|
|
16
|
+
*
|
|
17
|
+
* @since v9.0
|
|
18
|
+
*/
|
|
19
|
+
export declare function isCodePhaseName(faseNome: string | undefined): boolean;
|
|
20
|
+
/**
|
|
21
|
+
* Classificação de tipo de fase para Smart Auto-Flow.
|
|
22
|
+
* Usado por proximo.ts para decidir se a próxima fase precisa de input do usuário.
|
|
23
|
+
*
|
|
24
|
+
* @since v9.0 — movido de proximo.ts (era local)
|
|
25
|
+
*/
|
|
26
|
+
export declare const PHASE_TYPE_MAP: Record<string, EstadoProjeto['flow_phase_type']>;
|
|
2
27
|
export declare const FLUXO_SIMPLES: Fluxo;
|
|
3
28
|
export declare const FLUXO_MEDIO: Fluxo;
|
|
4
29
|
export declare const FLUXO_COMPLEXO: Fluxo;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/flows/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAC;
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/flows/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAC;AACrD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAEvD;;;;;;;;GAQG;AACH,eAAO,MAAM,gBAAgB,gEAAiE,CAAC;AAE/F;;;;;GAKG;AACH,wBAAgB,eAAe,CAAC,QAAQ,EAAE,MAAM,GAAG,SAAS,GAAG,OAAO,CAGrE;AAED;;;;;GAKG;AACH,eAAO,MAAM,cAAc,EAAE,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,iBAAiB,CAAC,CAmB3E,CAAC;AAGF,eAAO,MAAM,aAAa,EAAE,KAwG3B,CAAC;AAGF,eAAO,MAAM,WAAW,EAAE,KAiLzB,CAAC;AAGF,eAAO,MAAM,cAAc,EAAE,KA0J5B,CAAC;AAEF;;GAEG;AACH,wBAAgB,QAAQ,CAAC,KAAK,EAAE,SAAS,GAAG,OAAO,GAAG,UAAU,GAAG,KAAK,CASvE;AAED;;GAEG;AACH,wBAAgB,OAAO,CAAC,KAAK,EAAE,SAAS,GAAG,OAAO,GAAG,UAAU,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,CAGjG;AAmBD;;;;GAIG;AACH,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,SAAS,GAAG,OAAO,GAAG,UAAU,EAAE,UAAU,EAAE,OAAO,GAAG,KAAK,CAoBrG;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAC5B,KAAK,EAAE,SAAS,GAAG,OAAO,GAAG,UAAU,EACvC,MAAM,EAAE,MAAM,EACd,UAAU,EAAE,OAAO,GACpB,IAAI,GAAG,SAAS,CAGlB"}
|
package/dist/flows/types.js
CHANGED
|
@@ -1,3 +1,50 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Nomes canônicos das fases de desenvolvimento de código.
|
|
3
|
+
* FONTE ÚNICA DE VERDADE — todos os arquivos devem importar daqui.
|
|
4
|
+
*
|
|
5
|
+
* Nota: "Testes" é fase de DOCUMENTO (plano-testes.md), não de código.
|
|
6
|
+
* "Deploy Final" é fase de código (release.md + CI/CD).
|
|
7
|
+
*
|
|
8
|
+
* @since v9.0
|
|
9
|
+
*/
|
|
10
|
+
export const CODE_PHASE_NAMES = ['Frontend', 'Backend', 'Integração', 'Deploy Final'];
|
|
11
|
+
/**
|
|
12
|
+
* Verifica se uma fase é de código (desenvolvimento).
|
|
13
|
+
* Usa CODE_PHASE_NAMES como fonte única.
|
|
14
|
+
*
|
|
15
|
+
* @since v9.0
|
|
16
|
+
*/
|
|
17
|
+
export function isCodePhaseName(faseNome) {
|
|
18
|
+
if (!faseNome)
|
|
19
|
+
return false;
|
|
20
|
+
return CODE_PHASE_NAMES.some(k => faseNome.includes(k));
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* Classificação de tipo de fase para Smart Auto-Flow.
|
|
24
|
+
* Usado por proximo.ts para decidir se a próxima fase precisa de input do usuário.
|
|
25
|
+
*
|
|
26
|
+
* @since v9.0 — movido de proximo.ts (era local)
|
|
27
|
+
*/
|
|
28
|
+
export const PHASE_TYPE_MAP = {
|
|
29
|
+
'Produto': 'input_required',
|
|
30
|
+
'Requisitos': 'derived',
|
|
31
|
+
'UX Design': 'derived',
|
|
32
|
+
'Modelo de Domínio': 'derived',
|
|
33
|
+
'Arquitetura': 'derived',
|
|
34
|
+
'Arquitetura Avançada': 'derived',
|
|
35
|
+
'Backlog': 'derived',
|
|
36
|
+
'Contrato API': 'derived',
|
|
37
|
+
'Prototipagem': 'derived',
|
|
38
|
+
'Banco de Dados': 'technical',
|
|
39
|
+
'Segurança': 'technical',
|
|
40
|
+
'Testes': 'technical',
|
|
41
|
+
'Performance': 'technical',
|
|
42
|
+
'Observabilidade': 'technical',
|
|
43
|
+
'Frontend': 'technical',
|
|
44
|
+
'Backend': 'technical',
|
|
45
|
+
'Integração': 'technical',
|
|
46
|
+
'Deploy Final': 'technical',
|
|
47
|
+
};
|
|
1
48
|
// Fluxo para projetos simples (7 fases)
|
|
2
49
|
export const FLUXO_SIMPLES = {
|
|
3
50
|
nivel: "simples",
|
|
@@ -75,9 +122,13 @@ export const FLUXO_SIMPLES = {
|
|
|
75
122
|
template: "historia-usuario",
|
|
76
123
|
skill: "specialist-desenvolvimento-frontend",
|
|
77
124
|
gate_checklist: [
|
|
78
|
-
"Componentes
|
|
79
|
-
"
|
|
80
|
-
"
|
|
125
|
+
"Componentes implementados conforme design doc e user stories do backlog",
|
|
126
|
+
"Pages com rotas configuradas para cada fluxo",
|
|
127
|
+
"State management conectado (hooks/stores)",
|
|
128
|
+
"Integração com mocks do contrato API",
|
|
129
|
+
"Testes unitários para componentes críticos",
|
|
130
|
+
"Responsivo mobile-first e acessível",
|
|
131
|
+
"Loading, empty e error states em todas as telas",
|
|
81
132
|
],
|
|
82
133
|
entregavel_esperado: "frontend-code",
|
|
83
134
|
},
|
|
@@ -88,9 +139,13 @@ export const FLUXO_SIMPLES = {
|
|
|
88
139
|
template: "historia-usuario",
|
|
89
140
|
skill: "specialist-desenvolvimento-backend",
|
|
90
141
|
gate_checklist: [
|
|
91
|
-
"
|
|
92
|
-
"
|
|
93
|
-
"
|
|
142
|
+
"Endpoints implementados conforme contrato OpenAPI",
|
|
143
|
+
"DTOs com validação de input para cada endpoint",
|
|
144
|
+
"Services com regras de negócio do modelo de domínio",
|
|
145
|
+
"Testes unitários para services e controllers",
|
|
146
|
+
"Migrações de banco executáveis",
|
|
147
|
+
"Error handling padronizado conforme schema de erros",
|
|
148
|
+
"Autenticação implementada conforme arquitetura",
|
|
94
149
|
],
|
|
95
150
|
entregavel_esperado: "backend-code",
|
|
96
151
|
},
|
|
@@ -233,9 +288,13 @@ export const FLUXO_MEDIO = {
|
|
|
233
288
|
especialista: "Desenvolvimento Frontend",
|
|
234
289
|
template: "historia-usuario",
|
|
235
290
|
gate_checklist: [
|
|
236
|
-
"Componentes implementados",
|
|
237
|
-
"
|
|
238
|
-
"
|
|
291
|
+
"Componentes implementados conforme design doc e user stories do backlog",
|
|
292
|
+
"Pages com rotas configuradas para cada fluxo",
|
|
293
|
+
"State management conectado (hooks/stores)",
|
|
294
|
+
"Integração com mocks do contrato API",
|
|
295
|
+
"Testes unitários para componentes críticos",
|
|
296
|
+
"Responsivo mobile-first e acessível",
|
|
297
|
+
"Loading, empty e error states em todas as telas",
|
|
239
298
|
],
|
|
240
299
|
entregavel_esperado: "frontend-code",
|
|
241
300
|
},
|
|
@@ -245,9 +304,13 @@ export const FLUXO_MEDIO = {
|
|
|
245
304
|
especialista: "Desenvolvimento e Vibe Coding Estruturado",
|
|
246
305
|
template: "historia-usuario",
|
|
247
306
|
gate_checklist: [
|
|
248
|
-
"
|
|
249
|
-
"
|
|
250
|
-
"
|
|
307
|
+
"Endpoints implementados conforme contrato OpenAPI",
|
|
308
|
+
"DTOs com validação de input para cada endpoint",
|
|
309
|
+
"Services com regras de negócio do modelo de domínio",
|
|
310
|
+
"Testes unitários para services e controllers",
|
|
311
|
+
"Migrações de banco executáveis",
|
|
312
|
+
"Error handling padronizado conforme schema de erros",
|
|
313
|
+
"Autenticação implementada conforme arquitetura",
|
|
251
314
|
],
|
|
252
315
|
entregavel_esperado: "backend-code",
|
|
253
316
|
},
|
|
@@ -257,9 +320,11 @@ export const FLUXO_MEDIO = {
|
|
|
257
320
|
especialista: "DevOps e Infraestrutura",
|
|
258
321
|
template: "arquitetura",
|
|
259
322
|
gate_checklist: [
|
|
260
|
-
"Frontend
|
|
261
|
-
"
|
|
262
|
-
"
|
|
323
|
+
"Frontend conectado ao Backend real (mocks removidos)",
|
|
324
|
+
"Todos os endpoints do OpenAPI funcionando end-to-end",
|
|
325
|
+
"Testes E2E para fluxos críticos",
|
|
326
|
+
"CORS e variáveis de ambiente configurados",
|
|
327
|
+
"Pipeline CI/CD verde com testes automatizados",
|
|
263
328
|
],
|
|
264
329
|
entregavel_esperado: "deploy.md",
|
|
265
330
|
},
|
|
@@ -365,9 +430,13 @@ export const FLUXO_COMPLEXO = {
|
|
|
365
430
|
especialista: "Desenvolvimento Frontend",
|
|
366
431
|
template: "historia-usuario",
|
|
367
432
|
gate_checklist: [
|
|
368
|
-
"Componentes implementados",
|
|
369
|
-
"
|
|
370
|
-
"
|
|
433
|
+
"Componentes implementados conforme design doc e user stories do backlog",
|
|
434
|
+
"Pages com rotas configuradas para cada fluxo",
|
|
435
|
+
"State management conectado (hooks/stores)",
|
|
436
|
+
"Integração com mocks do contrato API",
|
|
437
|
+
"Testes unitários para componentes críticos",
|
|
438
|
+
"Responsivo mobile-first e acessível",
|
|
439
|
+
"Loading, empty e error states em todas as telas",
|
|
371
440
|
],
|
|
372
441
|
entregavel_esperado: "frontend-code",
|
|
373
442
|
},
|
|
@@ -377,9 +446,13 @@ export const FLUXO_COMPLEXO = {
|
|
|
377
446
|
especialista: "Desenvolvimento e Vibe Coding Estruturado",
|
|
378
447
|
template: "historia-usuario",
|
|
379
448
|
gate_checklist: [
|
|
380
|
-
"
|
|
381
|
-
"
|
|
382
|
-
"
|
|
449
|
+
"Endpoints implementados conforme contrato OpenAPI",
|
|
450
|
+
"DTOs com validação de input para cada endpoint",
|
|
451
|
+
"Services com regras de negócio do modelo de domínio",
|
|
452
|
+
"Testes unitários para services e controllers",
|
|
453
|
+
"Migrações de banco executáveis",
|
|
454
|
+
"Error handling padronizado conforme schema de erros",
|
|
455
|
+
"Autenticação implementada conforme arquitetura",
|
|
383
456
|
],
|
|
384
457
|
entregavel_esperado: "backend-code",
|
|
385
458
|
},
|
|
@@ -389,9 +462,11 @@ export const FLUXO_COMPLEXO = {
|
|
|
389
462
|
especialista: "DevOps e Infraestrutura",
|
|
390
463
|
template: "arquitetura",
|
|
391
464
|
gate_checklist: [
|
|
392
|
-
"Frontend
|
|
393
|
-
"
|
|
394
|
-
"
|
|
465
|
+
"Frontend conectado ao Backend real (mocks removidos)",
|
|
466
|
+
"Todos os endpoints do OpenAPI funcionando end-to-end",
|
|
467
|
+
"Testes E2E para fluxos críticos",
|
|
468
|
+
"CORS e variáveis de ambiente configurados",
|
|
469
|
+
"Pipeline CI/CD verde com testes automatizados",
|
|
395
470
|
],
|
|
396
471
|
entregavel_esperado: "deploy.md",
|
|
397
472
|
},
|
|
@@ -401,9 +476,11 @@ export const FLUXO_COMPLEXO = {
|
|
|
401
476
|
especialista: "DevOps e Infraestrutura",
|
|
402
477
|
template: "arquitetura",
|
|
403
478
|
gate_checklist: [
|
|
404
|
-
"Deploy em produção",
|
|
405
|
-
"Monitoramento ativo",
|
|
406
|
-
"Health
|
|
479
|
+
"Deploy em produção realizado com sucesso",
|
|
480
|
+
"Monitoramento ativo com métricas e alertas",
|
|
481
|
+
"Health checks respondendo corretamente",
|
|
482
|
+
"Runbook de operações documentado",
|
|
483
|
+
"Rollback testado e funcional",
|
|
407
484
|
],
|
|
408
485
|
entregavel_esperado: "release.md",
|
|
409
486
|
},
|
package/dist/flows/types.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/flows/types.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/flows/types.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* CodeValidator — Validação de fases de código orientada a artefatos (v9.0)
|
|
3
|
+
*
|
|
4
|
+
* Em vez de buscar keywords em texto markdown, valida por:
|
|
5
|
+
* 1. Existência de arquivos no disco (50% do score)
|
|
6
|
+
* 2. Progresso de tasks/user stories (30% do score)
|
|
7
|
+
* 3. Manifest gerado corretamente (20% do score)
|
|
8
|
+
*
|
|
9
|
+
* Fallback textual mantido como contingência quando manifest não existe.
|
|
10
|
+
*
|
|
11
|
+
* @since v9.0
|
|
12
|
+
*/
|
|
13
|
+
import type { CodeManifest } from "../types/code-manifest.js";
|
|
14
|
+
import type { TaskItem } from "../services/task-decomposer.service.js";
|
|
15
|
+
export interface CodeValidationResult {
|
|
16
|
+
score: number;
|
|
17
|
+
approved: boolean;
|
|
18
|
+
breakdown: {
|
|
19
|
+
arquivos: number;
|
|
20
|
+
tasks: number;
|
|
21
|
+
manifest: number;
|
|
22
|
+
};
|
|
23
|
+
details: {
|
|
24
|
+
arquivos_encontrados: string[];
|
|
25
|
+
arquivos_faltando: string[];
|
|
26
|
+
tasks_done: number;
|
|
27
|
+
tasks_total: number;
|
|
28
|
+
user_stories_cobertas: string[];
|
|
29
|
+
user_stories_pendentes: string[];
|
|
30
|
+
};
|
|
31
|
+
feedback: string[];
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* Valida uma fase de código usando manifest + artefatos reais no disco.
|
|
35
|
+
*
|
|
36
|
+
* @param manifest - CodeManifest gerado pelo code-phase-handler
|
|
37
|
+
* @param diretorio - Diretório raiz do projeto
|
|
38
|
+
* @param tasks - Tasks da fase atual (do estado.tasks)
|
|
39
|
+
* @param faseNumero - Número da fase
|
|
40
|
+
* @returns CodeValidationResult com score, breakdown e detalhes
|
|
41
|
+
*/
|
|
42
|
+
export declare function validateCodePhase(manifest: CodeManifest | undefined, diretorio: string, tasks: TaskItem[], faseNumero: number): CodeValidationResult;
|
|
43
|
+
/**
|
|
44
|
+
* Formata o resultado da validação como markdown para exibição.
|
|
45
|
+
*/
|
|
46
|
+
export declare function formatCodeValidationResult(result: CodeValidationResult, faseNome: string): string;
|
|
47
|
+
//# sourceMappingURL=code-validator.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"code-validator.d.ts","sourceRoot":"","sources":["../../src/gates/code-validator.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAIH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AAC9D,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,wCAAwC,CAAC;AAEvE,MAAM,WAAW,oBAAoB;IACjC,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,OAAO,CAAC;IAClB,SAAS,EAAE;QACP,QAAQ,EAAE,MAAM,CAAC;QACjB,KAAK,EAAE,MAAM,CAAC;QACd,QAAQ,EAAE,MAAM,CAAC;KACpB,CAAC;IACF,OAAO,EAAE;QACL,oBAAoB,EAAE,MAAM,EAAE,CAAC;QAC/B,iBAAiB,EAAE,MAAM,EAAE,CAAC;QAC5B,UAAU,EAAE,MAAM,CAAC;QACnB,WAAW,EAAE,MAAM,CAAC;QACpB,qBAAqB,EAAE,MAAM,EAAE,CAAC;QAChC,sBAAsB,EAAE,MAAM,EAAE,CAAC;KACpC,CAAC;IACF,QAAQ,EAAE,MAAM,EAAE,CAAC;CACtB;AAYD;;;;;;;;GAQG;AACH,wBAAgB,iBAAiB,CAC7B,QAAQ,EAAE,YAAY,GAAG,SAAS,EAClC,SAAS,EAAE,MAAM,EACjB,KAAK,EAAE,QAAQ,EAAE,EACjB,UAAU,EAAE,MAAM,GACnB,oBAAoB,CA0EtB;AAED;;GAEG;AACH,wBAAgB,0BAA0B,CAAC,MAAM,EAAE,oBAAoB,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,CA0CjG"}
|
|
@@ -0,0 +1,225 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* CodeValidator — Validação de fases de código orientada a artefatos (v9.0)
|
|
3
|
+
*
|
|
4
|
+
* Em vez de buscar keywords em texto markdown, valida por:
|
|
5
|
+
* 1. Existência de arquivos no disco (50% do score)
|
|
6
|
+
* 2. Progresso de tasks/user stories (30% do score)
|
|
7
|
+
* 3. Manifest gerado corretamente (20% do score)
|
|
8
|
+
*
|
|
9
|
+
* Fallback textual mantido como contingência quando manifest não existe.
|
|
10
|
+
*
|
|
11
|
+
* @since v9.0
|
|
12
|
+
*/
|
|
13
|
+
import { existsSync } from "fs";
|
|
14
|
+
import { join } from "path";
|
|
15
|
+
/** Peso de cada componente do score */
|
|
16
|
+
const WEIGHTS = {
|
|
17
|
+
arquivos: 0.50,
|
|
18
|
+
tasks: 0.30,
|
|
19
|
+
manifest: 0.20,
|
|
20
|
+
};
|
|
21
|
+
/** Threshold para aprovação automática */
|
|
22
|
+
const SCORE_AUTO_APPROVE = 70;
|
|
23
|
+
/**
|
|
24
|
+
* Valida uma fase de código usando manifest + artefatos reais no disco.
|
|
25
|
+
*
|
|
26
|
+
* @param manifest - CodeManifest gerado pelo code-phase-handler
|
|
27
|
+
* @param diretorio - Diretório raiz do projeto
|
|
28
|
+
* @param tasks - Tasks da fase atual (do estado.tasks)
|
|
29
|
+
* @param faseNumero - Número da fase
|
|
30
|
+
* @returns CodeValidationResult com score, breakdown e detalhes
|
|
31
|
+
*/
|
|
32
|
+
export function validateCodePhase(manifest, diretorio, tasks, faseNumero) {
|
|
33
|
+
const feedback = [];
|
|
34
|
+
// Se não tem manifest, retornar score mínimo com feedback
|
|
35
|
+
if (!manifest) {
|
|
36
|
+
feedback.push("Manifest não encontrado. Gere o manifest completando as tasks da fase.");
|
|
37
|
+
return {
|
|
38
|
+
score: 0,
|
|
39
|
+
approved: false,
|
|
40
|
+
breakdown: { arquivos: 0, tasks: 0, manifest: 0 },
|
|
41
|
+
details: {
|
|
42
|
+
arquivos_encontrados: [],
|
|
43
|
+
arquivos_faltando: [],
|
|
44
|
+
tasks_done: 0,
|
|
45
|
+
tasks_total: 0,
|
|
46
|
+
user_stories_cobertas: [],
|
|
47
|
+
user_stories_pendentes: [],
|
|
48
|
+
},
|
|
49
|
+
feedback,
|
|
50
|
+
};
|
|
51
|
+
}
|
|
52
|
+
// 1. Verificar existência de arquivos (50%)
|
|
53
|
+
const { arquivosScore, encontrados, faltando } = scoreArquivos(manifest, diretorio);
|
|
54
|
+
// 2. Verificar progresso de tasks (30%)
|
|
55
|
+
const { tasksScore, done, total } = scoreTasks(tasks, faseNumero);
|
|
56
|
+
// 3. Verificar manifest (20%)
|
|
57
|
+
const { manifestScore, storyCobertas, storyPendentes } = scoreManifest(manifest);
|
|
58
|
+
// Calcular score final ponderado
|
|
59
|
+
const score = Math.round(arquivosScore * WEIGHTS.arquivos +
|
|
60
|
+
tasksScore * WEIGHTS.tasks +
|
|
61
|
+
manifestScore * WEIGHTS.manifest);
|
|
62
|
+
// Gerar feedback
|
|
63
|
+
if (faltando.length > 0) {
|
|
64
|
+
feedback.push(`Arquivos faltando no disco: ${faltando.slice(0, 5).join(', ')}${faltando.length > 5 ? ` (+${faltando.length - 5} mais)` : ''}`);
|
|
65
|
+
}
|
|
66
|
+
if (done < total) {
|
|
67
|
+
feedback.push(`Tasks pendentes: ${total - done}/${total}`);
|
|
68
|
+
}
|
|
69
|
+
if (storyPendentes.length > 0) {
|
|
70
|
+
feedback.push(`User Stories não cobertas: ${storyPendentes.join(', ')}`);
|
|
71
|
+
}
|
|
72
|
+
if (score >= SCORE_AUTO_APPROVE) {
|
|
73
|
+
feedback.push("Gate de código aprovado automaticamente.");
|
|
74
|
+
}
|
|
75
|
+
else if (score >= 50) {
|
|
76
|
+
feedback.push("Score entre 50-69: aprovação manual necessária.");
|
|
77
|
+
}
|
|
78
|
+
else {
|
|
79
|
+
feedback.push("Score abaixo de 50: bloqueado. Complete mais tasks e gere os arquivos.");
|
|
80
|
+
}
|
|
81
|
+
return {
|
|
82
|
+
score,
|
|
83
|
+
approved: score >= SCORE_AUTO_APPROVE,
|
|
84
|
+
breakdown: {
|
|
85
|
+
arquivos: Math.round(arquivosScore),
|
|
86
|
+
tasks: Math.round(tasksScore),
|
|
87
|
+
manifest: Math.round(manifestScore),
|
|
88
|
+
},
|
|
89
|
+
details: {
|
|
90
|
+
arquivos_encontrados: encontrados,
|
|
91
|
+
arquivos_faltando: faltando,
|
|
92
|
+
tasks_done: done,
|
|
93
|
+
tasks_total: total,
|
|
94
|
+
user_stories_cobertas: storyCobertas,
|
|
95
|
+
user_stories_pendentes: storyPendentes,
|
|
96
|
+
},
|
|
97
|
+
feedback,
|
|
98
|
+
};
|
|
99
|
+
}
|
|
100
|
+
/**
|
|
101
|
+
* Formata o resultado da validação como markdown para exibição.
|
|
102
|
+
*/
|
|
103
|
+
export function formatCodeValidationResult(result, faseNome) {
|
|
104
|
+
const icon = result.approved ? '✅' : result.score >= 50 ? '⚠️' : '❌';
|
|
105
|
+
const status = result.approved ? 'Aprovado' : result.score >= 50 ? 'Aprovação Manual Necessária' : 'Bloqueado';
|
|
106
|
+
let md = `## ${icon} Gate de Código: ${faseNome} — ${status}\n\n`;
|
|
107
|
+
md += `### Score: ${result.score}/100\n\n`;
|
|
108
|
+
md += `| Componente | Score | Peso |\n`;
|
|
109
|
+
md += `|-----------|-------|------|\n`;
|
|
110
|
+
md += `| Arquivos no disco | ${result.breakdown.arquivos}/100 | 50% |\n`;
|
|
111
|
+
md += `| Tasks concluídas | ${result.breakdown.tasks}/100 | 30% |\n`;
|
|
112
|
+
md += `| Manifest/US | ${result.breakdown.manifest}/100 | 20% |\n\n`;
|
|
113
|
+
if (result.details.arquivos_encontrados.length > 0) {
|
|
114
|
+
md += `### Arquivos Encontrados (${result.details.arquivos_encontrados.length})\n`;
|
|
115
|
+
md += result.details.arquivos_encontrados.slice(0, 10).map(f => `- ✅ \`${f}\``).join('\n') + '\n\n';
|
|
116
|
+
}
|
|
117
|
+
if (result.details.arquivos_faltando.length > 0) {
|
|
118
|
+
md += `### Arquivos Faltando (${result.details.arquivos_faltando.length})\n`;
|
|
119
|
+
md += result.details.arquivos_faltando.slice(0, 10).map(f => `- ❌ \`${f}\``).join('\n') + '\n\n';
|
|
120
|
+
}
|
|
121
|
+
if (result.details.tasks_total > 0) {
|
|
122
|
+
md += `### Tasks: ${result.details.tasks_done}/${result.details.tasks_total}\n\n`;
|
|
123
|
+
}
|
|
124
|
+
if (result.details.user_stories_cobertas.length > 0) {
|
|
125
|
+
md += `### User Stories Cobertas\n`;
|
|
126
|
+
md += result.details.user_stories_cobertas.map(s => `- ✅ ${s}`).join('\n') + '\n\n';
|
|
127
|
+
}
|
|
128
|
+
if (result.details.user_stories_pendentes.length > 0) {
|
|
129
|
+
md += `### User Stories Pendentes\n`;
|
|
130
|
+
md += result.details.user_stories_pendentes.map(s => `- ⏳ ${s}`).join('\n') + '\n\n';
|
|
131
|
+
}
|
|
132
|
+
if (result.feedback.length > 0) {
|
|
133
|
+
md += `### Feedback\n`;
|
|
134
|
+
md += result.feedback.map(f => `> ${f}`).join('\n') + '\n';
|
|
135
|
+
}
|
|
136
|
+
return md;
|
|
137
|
+
}
|
|
138
|
+
// === SCORE HELPERS ===
|
|
139
|
+
function scoreArquivos(manifest, diretorio) {
|
|
140
|
+
const arquivos = manifest.arquivos_criados || [];
|
|
141
|
+
if (arquivos.length === 0) {
|
|
142
|
+
// Sem arquivos listados — tentar detectar diretórios relevantes
|
|
143
|
+
const fase = manifest.nome.toLowerCase();
|
|
144
|
+
const dirsToCheck = getDirsForPhase(fase);
|
|
145
|
+
const found = [];
|
|
146
|
+
for (const dir of dirsToCheck) {
|
|
147
|
+
const fullPath = join(diretorio, dir);
|
|
148
|
+
if (existsSync(fullPath)) {
|
|
149
|
+
found.push(dir + '/');
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
// Se encontrou pelo menos um diretório relevante, dar score parcial
|
|
153
|
+
return {
|
|
154
|
+
arquivosScore: found.length > 0 ? Math.min(found.length * 25, 80) : 0,
|
|
155
|
+
encontrados: found,
|
|
156
|
+
faltando: dirsToCheck.filter(d => !found.includes(d + '/')).map(d => d + '/'),
|
|
157
|
+
};
|
|
158
|
+
}
|
|
159
|
+
const encontrados = [];
|
|
160
|
+
const faltando = [];
|
|
161
|
+
for (const arquivo of arquivos) {
|
|
162
|
+
// Tentar path absoluto primeiro, depois relativo ao projeto
|
|
163
|
+
const absPath = arquivo.startsWith('/') || arquivo.match(/^[A-Z]:/) ? arquivo : join(diretorio, arquivo);
|
|
164
|
+
if (existsSync(absPath)) {
|
|
165
|
+
encontrados.push(arquivo);
|
|
166
|
+
}
|
|
167
|
+
else {
|
|
168
|
+
faltando.push(arquivo);
|
|
169
|
+
}
|
|
170
|
+
}
|
|
171
|
+
const total = arquivos.length;
|
|
172
|
+
const arquivosScore = total > 0 ? (encontrados.length / total) * 100 : 0;
|
|
173
|
+
return { arquivosScore, encontrados, faltando };
|
|
174
|
+
}
|
|
175
|
+
function scoreTasks(tasks, faseNumero) {
|
|
176
|
+
const phaseTasks = tasks.filter(t => t.phase === faseNumero && (t.type === 'task' || t.type === 'subtask'));
|
|
177
|
+
const done = phaseTasks.filter(t => t.status === 'done').length;
|
|
178
|
+
const total = phaseTasks.length;
|
|
179
|
+
// Se não tem tasks definidas, dar score neutro (não penalizar)
|
|
180
|
+
const tasksScore = total > 0 ? (done / total) * 100 : 50;
|
|
181
|
+
return { tasksScore, done, total };
|
|
182
|
+
}
|
|
183
|
+
function scoreManifest(manifest) {
|
|
184
|
+
let score = 0;
|
|
185
|
+
const storyCobertas = [];
|
|
186
|
+
const storyPendentes = [];
|
|
187
|
+
// Manifest existe — 40 pontos base
|
|
188
|
+
score += 40;
|
|
189
|
+
// Stack preenchida — 20 pontos
|
|
190
|
+
if (manifest.stack?.framework && manifest.stack.framework.length > 0) {
|
|
191
|
+
score += 20;
|
|
192
|
+
}
|
|
193
|
+
// User stories com status — 40 pontos
|
|
194
|
+
const stories = manifest.user_stories || [];
|
|
195
|
+
if (stories.length > 0) {
|
|
196
|
+
const doneStories = stories.filter(s => s.status === 'done');
|
|
197
|
+
storyCobertas.push(...doneStories.map(s => `${s.id}: ${s.titulo}`));
|
|
198
|
+
storyPendentes.push(...stories.filter(s => s.status !== 'done').map(s => `${s.id}: ${s.titulo}`));
|
|
199
|
+
const storyRatio = doneStories.length / stories.length;
|
|
200
|
+
score += Math.round(storyRatio * 40);
|
|
201
|
+
}
|
|
202
|
+
else {
|
|
203
|
+
// Sem US definidas — dar pontos parciais se tem tasks_done
|
|
204
|
+
if (manifest.tasks_done > 0 && manifest.tasks_total > 0) {
|
|
205
|
+
score += Math.round((manifest.tasks_done / manifest.tasks_total) * 40);
|
|
206
|
+
}
|
|
207
|
+
}
|
|
208
|
+
return { manifestScore: Math.min(score, 100), storyCobertas, storyPendentes };
|
|
209
|
+
}
|
|
210
|
+
function getDirsForPhase(faseNomeLower) {
|
|
211
|
+
if (faseNomeLower.includes('frontend')) {
|
|
212
|
+
return ['frontend', 'src', 'app', 'pages', 'components'];
|
|
213
|
+
}
|
|
214
|
+
if (faseNomeLower.includes('backend')) {
|
|
215
|
+
return ['backend', 'server', 'api', 'src'];
|
|
216
|
+
}
|
|
217
|
+
if (faseNomeLower.includes('integra')) {
|
|
218
|
+
return ['tests', 'e2e', '__tests__'];
|
|
219
|
+
}
|
|
220
|
+
if (faseNomeLower.includes('deploy')) {
|
|
221
|
+
return ['.github', 'docker', 'infra', 'scripts'];
|
|
222
|
+
}
|
|
223
|
+
return [];
|
|
224
|
+
}
|
|
225
|
+
//# sourceMappingURL=code-validator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"code-validator.js","sourceRoot":"","sources":["../../src/gates/code-validator.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Code Phase Handler (v8.0)
|
|
3
|
+
*
|
|
4
|
+
* Handler dedicado para fases de desenvolvimento de código (Frontend, Backend, Integração, Deploy).
|
|
5
|
+
*
|
|
6
|
+
* Responsabilidades:
|
|
7
|
+
* 1. Detectar que é fase de código e interceptar antes do proximo.ts
|
|
8
|
+
* 2. Ler backlog, OpenAPI, arquitetura do disco (via menções)
|
|
9
|
+
* 3. Gerar tasks baseadas no Backlog (não da arquitetura)
|
|
10
|
+
* 4. Apresentar tasks task-by-task com contexto dos docs anteriores
|
|
11
|
+
* 5. Validar existência real de arquivos (não keywords)
|
|
12
|
+
* 6. Gerar manifest ao completar todas tasks
|
|
13
|
+
*
|
|
14
|
+
* State machine: SETUP → WORKING → GATE → COMPLETED
|
|
15
|
+
*
|
|
16
|
+
* @since v8.0
|
|
17
|
+
*/
|
|
18
|
+
import type { ToolResult, EstadoProjeto } from "../types/index.js";
|
|
19
|
+
interface CodePhaseArgs {
|
|
20
|
+
estado: EstadoProjeto;
|
|
21
|
+
diretorio: string;
|
|
22
|
+
respostas?: Record<string, unknown>;
|
|
23
|
+
entregavel?: string;
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* Verifica se uma fase é de código.
|
|
27
|
+
* v9.0: Delega para isCodePhaseName de flows/types.ts (fonte única de verdade).
|
|
28
|
+
*/
|
|
29
|
+
export declare function isCodePhase(faseNome: string | undefined): boolean;
|
|
30
|
+
/**
|
|
31
|
+
* Entry point do Code Phase Handler.
|
|
32
|
+
* Detecta o estado atual e delega para o handler correto.
|
|
33
|
+
*/
|
|
34
|
+
export declare function handleCodePhase(args: CodePhaseArgs): Promise<ToolResult>;
|
|
35
|
+
export {};
|
|
36
|
+
//# sourceMappingURL=code-phase-handler.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"code-phase-handler.d.ts","sourceRoot":"","sources":["../../src/handlers/code-phase-handler.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAKH,OAAO,KAAK,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAWnE,UAAU,aAAa;IACnB,MAAM,EAAE,aAAa,CAAC;IACtB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACpC,UAAU,CAAC,EAAE,MAAM,CAAC;CACvB;AAED;;;GAGG;AACH,wBAAgB,WAAW,CAAC,QAAQ,EAAE,MAAM,GAAG,SAAS,GAAG,OAAO,CAEjE;AAED;;;GAGG;AACH,wBAAsB,eAAe,CAAC,IAAI,EAAE,aAAa,GAAG,OAAO,CAAC,UAAU,CAAC,CA4B9E"}
|