@maestro-ai/mcp-server 2.3.0 → 2.4.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.
@@ -0,0 +1,25 @@
1
+ import type { TierGate } from "../types/index.js";
2
+ import type { TemplateStructure } from "./template-parser.js";
3
+ export interface QualityMetrics {
4
+ densidadeInformacao: number;
5
+ ausenciaPlaceholders: number;
6
+ presencaDadosConcretos: number;
7
+ checklistQualidade: number;
8
+ overall: number;
9
+ }
10
+ /**
11
+ * Calcula métricas de qualidade do entregável
12
+ */
13
+ export declare function calcularQualidade(entregavel: string, template: TemplateStructure, tier?: TierGate): QualityMetrics;
14
+ /**
15
+ * Gera relatório de qualidade detalhado
16
+ */
17
+ export declare function gerarRelatorioQualidade(metricas: QualityMetrics, tier: TierGate): string;
18
+ /**
19
+ * Compara qualidade com tier esperado
20
+ */
21
+ export declare function compararComTier(metricas: QualityMetrics, tier: TierGate): {
22
+ adequado: boolean;
23
+ mensagem: string;
24
+ };
25
+ //# sourceMappingURL=quality-scorer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"quality-scorer.d.ts","sourceRoot":"","sources":["../../src/gates/quality-scorer.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAClD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AAE9D,MAAM,WAAW,cAAc;IAC3B,mBAAmB,EAAE,MAAM,CAAC;IAC5B,oBAAoB,EAAE,MAAM,CAAC;IAC7B,sBAAsB,EAAE,MAAM,CAAC;IAC/B,kBAAkB,EAAE,MAAM,CAAC;IAC3B,OAAO,EAAE,MAAM,CAAC;CACnB;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAC7B,UAAU,EAAE,MAAM,EAClB,QAAQ,EAAE,iBAAiB,EAC3B,IAAI,GAAE,QAAiB,GACxB,cAAc,CAoBhB;AA+GD;;GAEG;AACH,wBAAgB,uBAAuB,CACnC,QAAQ,EAAE,cAAc,EACxB,IAAI,EAAE,QAAQ,GACf,MAAM,CA6BR;AA0FD;;GAEG;AACH,wBAAgB,eAAe,CAAC,QAAQ,EAAE,cAAc,EAAE,IAAI,EAAE,QAAQ,GAAG;IACvE,QAAQ,EAAE,OAAO,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;CACpB,CAmBA"}
@@ -0,0 +1,233 @@
1
+ /**
2
+ * Calcula métricas de qualidade do entregável
3
+ */
4
+ export function calcularQualidade(entregavel, template, tier = "base") {
5
+ const densidadeInformacao = calcularDensidadeInformacao(entregavel);
6
+ const ausenciaPlaceholders = calcularAusenciaPlaceholders(entregavel, template);
7
+ const presencaDadosConcretos = calcularPresencaDadosConcretos(entregavel);
8
+ const checklistQualidade = calcularChecklistQualidade(entregavel, template);
9
+ const overall = Math.round((densidadeInformacao * 0.3) +
10
+ (ausenciaPlaceholders * 0.3) +
11
+ (presencaDadosConcretos * 0.2) +
12
+ (checklistQualidade * 0.2));
13
+ return {
14
+ densidadeInformacao,
15
+ ausenciaPlaceholders,
16
+ presencaDadosConcretos,
17
+ checklistQualidade,
18
+ overall,
19
+ };
20
+ }
21
+ /**
22
+ * Calcula densidade de informação (chars úteis / seção)
23
+ */
24
+ function calcularDensidadeInformacao(entregavel) {
25
+ const linhas = entregavel.split("\n");
26
+ let charsUteis = 0;
27
+ let totalLinhas = 0;
28
+ for (const linha of linhas) {
29
+ const linhaTrimmed = linha.trim();
30
+ // Ignora linhas vazias, headers, separadores
31
+ if (linhaTrimmed.length === 0 ||
32
+ linhaTrimmed.match(/^#{1,6}\s/) ||
33
+ linhaTrimmed.match(/^-{3,}$/) ||
34
+ linhaTrimmed.match(/^={3,}$/)) {
35
+ continue;
36
+ }
37
+ charsUteis += linhaTrimmed.length;
38
+ totalLinhas++;
39
+ }
40
+ const mediaPorLinha = totalLinhas > 0 ? charsUteis / totalLinhas : 0;
41
+ // Score baseado em média de 50 chars/linha como ideal
42
+ const score = Math.min((mediaPorLinha / 50) * 100, 100);
43
+ return Math.round(score);
44
+ }
45
+ /**
46
+ * Calcula score de ausência de placeholders
47
+ */
48
+ function calcularAusenciaPlaceholders(entregavel, template) {
49
+ if (template.camposObrigatorios.length === 0) {
50
+ return 100;
51
+ }
52
+ let placeholdersEncontrados = 0;
53
+ for (const campo of template.camposObrigatorios) {
54
+ const regex = new RegExp(`\\[${campo}\\]`, "i");
55
+ if (regex.test(entregavel)) {
56
+ placeholdersEncontrados++;
57
+ }
58
+ }
59
+ const score = ((template.camposObrigatorios.length - placeholdersEncontrados) / template.camposObrigatorios.length) * 100;
60
+ return Math.round(score);
61
+ }
62
+ /**
63
+ * Calcula presença de dados concretos (números, datas, URLs, etc)
64
+ */
65
+ function calcularPresencaDadosConcretos(entregavel) {
66
+ const indicadores = [
67
+ /\d{1,3}%/g, // Percentuais
68
+ /\d+\s*(usuários|users|clientes)/gi, // Números de usuários
69
+ /\d{4}-\d{2}-\d{2}/g, // Datas ISO
70
+ /\d{1,2}\/\d{1,2}\/\d{2,4}/g, // Datas BR/US
71
+ /https?:\/\/[^\s]+/g, // URLs
72
+ /\$\d+/g, // Valores monetários
73
+ /\d+\s*(ms|seg|min|hora)/gi, // Tempos
74
+ /\d+\s*(MB|GB|KB)/gi, // Tamanhos
75
+ ];
76
+ let totalIndicadores = 0;
77
+ for (const regex of indicadores) {
78
+ const matches = entregavel.match(regex);
79
+ if (matches) {
80
+ totalIndicadores += matches.length;
81
+ }
82
+ }
83
+ // Score baseado em pelo menos 10 dados concretos
84
+ const score = Math.min((totalIndicadores / 10) * 100, 100);
85
+ return Math.round(score);
86
+ }
87
+ /**
88
+ * Calcula score do checklist de qualidade
89
+ */
90
+ function calcularChecklistQualidade(entregavel, template) {
91
+ if (template.checklistQualidade.length === 0) {
92
+ return 100;
93
+ }
94
+ let itensPreenchidos = 0;
95
+ for (const item of template.checklistQualidade) {
96
+ const textoLimpo = item
97
+ .toLowerCase()
98
+ .replace(/[^a-z0-9\s]/g, "")
99
+ .slice(0, 30);
100
+ const regex = new RegExp(`\\[x\\].*?${textoLimpo}`, "i");
101
+ if (regex.test(entregavel)) {
102
+ itensPreenchidos++;
103
+ }
104
+ }
105
+ const score = (itensPreenchidos / template.checklistQualidade.length) * 100;
106
+ return Math.round(score);
107
+ }
108
+ /**
109
+ * Gera relatório de qualidade detalhado
110
+ */
111
+ export function gerarRelatorioQualidade(metricas, tier) {
112
+ let relatorio = `## 📈 Relatório de Qualidade\n\n`;
113
+ relatorio += `**Score Geral:** ${metricas.overall}/100\n\n`;
114
+ relatorio += `### Métricas Detalhadas\n\n`;
115
+ relatorio += `- **Densidade de Informação:** ${metricas.densidadeInformacao}/100\n`;
116
+ relatorio += ` ${getStatusEmoji(metricas.densidadeInformacao)} ${getStatusTexto(metricas.densidadeInformacao, "densidade")}\n\n`;
117
+ relatorio += `- **Ausência de Placeholders:** ${metricas.ausenciaPlaceholders}/100\n`;
118
+ relatorio += ` ${getStatusEmoji(metricas.ausenciaPlaceholders)} ${getStatusTexto(metricas.ausenciaPlaceholders, "placeholders")}\n\n`;
119
+ relatorio += `- **Presença de Dados Concretos:** ${metricas.presencaDadosConcretos}/100\n`;
120
+ relatorio += ` ${getStatusEmoji(metricas.presencaDadosConcretos)} ${getStatusTexto(metricas.presencaDadosConcretos, "dados")}\n\n`;
121
+ relatorio += `- **Checklist de Qualidade:** ${metricas.checklistQualidade}/100\n`;
122
+ relatorio += ` ${getStatusEmoji(metricas.checklistQualidade)} ${getStatusTexto(metricas.checklistQualidade, "checklist")}\n\n`;
123
+ // Sugestões baseadas em tier
124
+ const sugestoes = gerarSugestoesQualidade(metricas, tier);
125
+ if (sugestoes.length > 0) {
126
+ relatorio += `### 💡 Sugestões de Melhoria\n\n`;
127
+ sugestoes.forEach(s => {
128
+ relatorio += `- ${s}\n`;
129
+ });
130
+ }
131
+ return relatorio;
132
+ }
133
+ /**
134
+ * Retorna emoji baseado no score
135
+ */
136
+ function getStatusEmoji(score) {
137
+ if (score >= 80)
138
+ return "✅";
139
+ if (score >= 60)
140
+ return "⚠️";
141
+ return "❌";
142
+ }
143
+ /**
144
+ * Retorna texto de status baseado no score e tipo
145
+ */
146
+ function getStatusTexto(score, tipo) {
147
+ if (score >= 80) {
148
+ switch (tipo) {
149
+ case "densidade":
150
+ return "Conteúdo bem detalhado";
151
+ case "placeholders":
152
+ return "Todos os campos preenchidos";
153
+ case "dados":
154
+ return "Dados concretos presentes";
155
+ case "checklist":
156
+ return "Checklist completo";
157
+ default:
158
+ return "Excelente";
159
+ }
160
+ }
161
+ if (score >= 60) {
162
+ switch (tipo) {
163
+ case "densidade":
164
+ return "Conteúdo pode ser mais detalhado";
165
+ case "placeholders":
166
+ return "Alguns campos ainda não preenchidos";
167
+ case "dados":
168
+ return "Adicione mais dados concretos";
169
+ case "checklist":
170
+ return "Complete o checklist";
171
+ default:
172
+ return "Bom, mas pode melhorar";
173
+ }
174
+ }
175
+ switch (tipo) {
176
+ case "densidade":
177
+ return "Conteúdo muito superficial";
178
+ case "placeholders":
179
+ return "Muitos campos não preenchidos";
180
+ case "dados":
181
+ return "Faltam dados concretos";
182
+ case "checklist":
183
+ return "Checklist incompleto";
184
+ default:
185
+ return "Precisa melhorar";
186
+ }
187
+ }
188
+ /**
189
+ * Gera sugestões de melhoria baseadas nas métricas
190
+ */
191
+ function gerarSugestoesQualidade(metricas, tier) {
192
+ const sugestoes = [];
193
+ if (metricas.densidadeInformacao < 70) {
194
+ sugestoes.push("Adicione mais detalhes e contexto em cada seção");
195
+ sugestoes.push("Expanda as descrições com exemplos práticos");
196
+ }
197
+ if (metricas.ausenciaPlaceholders < 80) {
198
+ sugestoes.push("Substitua todos os placeholders [Campo] por valores reais");
199
+ }
200
+ if (metricas.presencaDadosConcretos < 60) {
201
+ sugestoes.push("Inclua dados concretos: números, percentuais, datas, URLs");
202
+ sugestoes.push("Adicione métricas mensuráveis e objetivos quantificáveis");
203
+ }
204
+ if (metricas.checklistQualidade < 70 && tier !== "essencial") {
205
+ sugestoes.push("Complete o checklist de qualidade no final do documento");
206
+ }
207
+ if (metricas.overall < 60) {
208
+ sugestoes.push("Revise o template da skill para garantir completude");
209
+ }
210
+ return sugestoes;
211
+ }
212
+ /**
213
+ * Compara qualidade com tier esperado
214
+ */
215
+ export function compararComTier(metricas, tier) {
216
+ const requisitos = {
217
+ essencial: 50,
218
+ base: 70,
219
+ avancado: 85,
220
+ };
221
+ const scoreMinimo = requisitos[tier];
222
+ const adequado = metricas.overall >= scoreMinimo;
223
+ let mensagem = "";
224
+ if (adequado) {
225
+ mensagem = `✅ Qualidade adequada para tier ${tier} (mínimo: ${scoreMinimo})`;
226
+ }
227
+ else {
228
+ const diferenca = scoreMinimo - metricas.overall;
229
+ mensagem = `⚠️ Qualidade abaixo do tier ${tier}. Faltam ${diferenca} pontos para atingir o mínimo de ${scoreMinimo}`;
230
+ }
231
+ return { adequado, mensagem };
232
+ }
233
+ //# sourceMappingURL=quality-scorer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"quality-scorer.js","sourceRoot":"","sources":["../../src/gates/quality-scorer.ts"],"names":[],"mappings":"AAWA;;GAEG;AACH,MAAM,UAAU,iBAAiB,CAC7B,UAAkB,EAClB,QAA2B,EAC3B,OAAiB,MAAM;IAEvB,MAAM,mBAAmB,GAAG,2BAA2B,CAAC,UAAU,CAAC,CAAC;IACpE,MAAM,oBAAoB,GAAG,4BAA4B,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC;IAChF,MAAM,sBAAsB,GAAG,8BAA8B,CAAC,UAAU,CAAC,CAAC;IAC1E,MAAM,kBAAkB,GAAG,0BAA0B,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC;IAE5E,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CACtB,CAAC,mBAAmB,GAAG,GAAG,CAAC;QAC3B,CAAC,oBAAoB,GAAG,GAAG,CAAC;QAC5B,CAAC,sBAAsB,GAAG,GAAG,CAAC;QAC9B,CAAC,kBAAkB,GAAG,GAAG,CAAC,CAC7B,CAAC;IAEF,OAAO;QACH,mBAAmB;QACnB,oBAAoB;QACpB,sBAAsB;QACtB,kBAAkB;QAClB,OAAO;KACV,CAAC;AACN,CAAC;AAED;;GAEG;AACH,SAAS,2BAA2B,CAAC,UAAkB;IACnD,MAAM,MAAM,GAAG,UAAU,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IACtC,IAAI,UAAU,GAAG,CAAC,CAAC;IACnB,IAAI,WAAW,GAAG,CAAC,CAAC;IAEpB,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;QACzB,MAAM,YAAY,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC;QAElC,6CAA6C;QAC7C,IACI,YAAY,CAAC,MAAM,KAAK,CAAC;YACzB,YAAY,CAAC,KAAK,CAAC,WAAW,CAAC;YAC/B,YAAY,CAAC,KAAK,CAAC,SAAS,CAAC;YAC7B,YAAY,CAAC,KAAK,CAAC,SAAS,CAAC,EAC/B,CAAC;YACC,SAAS;QACb,CAAC;QAED,UAAU,IAAI,YAAY,CAAC,MAAM,CAAC;QAClC,WAAW,EAAE,CAAC;IAClB,CAAC;IAED,MAAM,aAAa,GAAG,WAAW,GAAG,CAAC,CAAC,CAAC,CAAC,UAAU,GAAG,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC;IAErE,sDAAsD;IACtD,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,aAAa,GAAG,EAAE,CAAC,GAAG,GAAG,EAAE,GAAG,CAAC,CAAC;IACxD,OAAO,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;AAC7B,CAAC;AAED;;GAEG;AACH,SAAS,4BAA4B,CAAC,UAAkB,EAAE,QAA2B;IACjF,IAAI,QAAQ,CAAC,kBAAkB,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC3C,OAAO,GAAG,CAAC;IACf,CAAC;IAED,IAAI,uBAAuB,GAAG,CAAC,CAAC;IAEhC,KAAK,MAAM,KAAK,IAAI,QAAQ,CAAC,kBAAkB,EAAE,CAAC;QAC9C,MAAM,KAAK,GAAG,IAAI,MAAM,CAAC,MAAM,KAAK,KAAK,EAAE,GAAG,CAAC,CAAC;QAChD,IAAI,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC;YACzB,uBAAuB,EAAE,CAAC;QAC9B,CAAC;IACL,CAAC;IAED,MAAM,KAAK,GAAG,CAAC,CAAC,QAAQ,CAAC,kBAAkB,CAAC,MAAM,GAAG,uBAAuB,CAAC,GAAG,QAAQ,CAAC,kBAAkB,CAAC,MAAM,CAAC,GAAG,GAAG,CAAC;IAC1H,OAAO,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;AAC7B,CAAC;AAED;;GAEG;AACH,SAAS,8BAA8B,CAAC,UAAkB;IACtD,MAAM,WAAW,GAAG;QAChB,WAAW,EAAqB,cAAc;QAC9C,mCAAmC,EAAE,sBAAsB;QAC3D,oBAAoB,EAAY,YAAY;QAC5C,4BAA4B,EAAI,cAAc;QAC9C,oBAAoB,EAAY,OAAO;QACvC,QAAQ,EAAwB,qBAAqB;QACrD,2BAA2B,EAAK,SAAS;QACzC,oBAAoB,EAAY,WAAW;KAC9C,CAAC;IAEF,IAAI,gBAAgB,GAAG,CAAC,CAAC;IAEzB,KAAK,MAAM,KAAK,IAAI,WAAW,EAAE,CAAC;QAC9B,MAAM,OAAO,GAAG,UAAU,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QACxC,IAAI,OAAO,EAAE,CAAC;YACV,gBAAgB,IAAI,OAAO,CAAC,MAAM,CAAC;QACvC,CAAC;IACL,CAAC;IAED,iDAAiD;IACjD,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,gBAAgB,GAAG,EAAE,CAAC,GAAG,GAAG,EAAE,GAAG,CAAC,CAAC;IAC3D,OAAO,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;AAC7B,CAAC;AAED;;GAEG;AACH,SAAS,0BAA0B,CAAC,UAAkB,EAAE,QAA2B;IAC/E,IAAI,QAAQ,CAAC,kBAAkB,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC3C,OAAO,GAAG,CAAC;IACf,CAAC;IAED,IAAI,gBAAgB,GAAG,CAAC,CAAC;IAEzB,KAAK,MAAM,IAAI,IAAI,QAAQ,CAAC,kBAAkB,EAAE,CAAC;QAC7C,MAAM,UAAU,GAAG,IAAI;aAClB,WAAW,EAAE;aACb,OAAO,CAAC,cAAc,EAAE,EAAE,CAAC;aAC3B,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QAElB,MAAM,KAAK,GAAG,IAAI,MAAM,CAAC,aAAa,UAAU,EAAE,EAAE,GAAG,CAAC,CAAC;QAEzD,IAAI,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC;YACzB,gBAAgB,EAAE,CAAC;QACvB,CAAC;IACL,CAAC;IAED,MAAM,KAAK,GAAG,CAAC,gBAAgB,GAAG,QAAQ,CAAC,kBAAkB,CAAC,MAAM,CAAC,GAAG,GAAG,CAAC;IAC5E,OAAO,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;AAC7B,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,uBAAuB,CACnC,QAAwB,EACxB,IAAc;IAEd,IAAI,SAAS,GAAG,kCAAkC,CAAC;IAEnD,SAAS,IAAI,oBAAoB,QAAQ,CAAC,OAAO,UAAU,CAAC;IAE5D,SAAS,IAAI,6BAA6B,CAAC;IAE3C,SAAS,IAAI,kCAAkC,QAAQ,CAAC,mBAAmB,QAAQ,CAAC;IACpF,SAAS,IAAI,KAAK,cAAc,CAAC,QAAQ,CAAC,mBAAmB,CAAC,IAAI,cAAc,CAAC,QAAQ,CAAC,mBAAmB,EAAE,WAAW,CAAC,MAAM,CAAC;IAElI,SAAS,IAAI,mCAAmC,QAAQ,CAAC,oBAAoB,QAAQ,CAAC;IACtF,SAAS,IAAI,KAAK,cAAc,CAAC,QAAQ,CAAC,oBAAoB,CAAC,IAAI,cAAc,CAAC,QAAQ,CAAC,oBAAoB,EAAE,cAAc,CAAC,MAAM,CAAC;IAEvI,SAAS,IAAI,sCAAsC,QAAQ,CAAC,sBAAsB,QAAQ,CAAC;IAC3F,SAAS,IAAI,KAAK,cAAc,CAAC,QAAQ,CAAC,sBAAsB,CAAC,IAAI,cAAc,CAAC,QAAQ,CAAC,sBAAsB,EAAE,OAAO,CAAC,MAAM,CAAC;IAEpI,SAAS,IAAI,iCAAiC,QAAQ,CAAC,kBAAkB,QAAQ,CAAC;IAClF,SAAS,IAAI,KAAK,cAAc,CAAC,QAAQ,CAAC,kBAAkB,CAAC,IAAI,cAAc,CAAC,QAAQ,CAAC,kBAAkB,EAAE,WAAW,CAAC,MAAM,CAAC;IAEhI,6BAA6B;IAC7B,MAAM,SAAS,GAAG,uBAAuB,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;IAC1D,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACvB,SAAS,IAAI,kCAAkC,CAAC;QAChD,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE;YAClB,SAAS,IAAI,KAAK,CAAC,IAAI,CAAC;QAC5B,CAAC,CAAC,CAAC;IACP,CAAC;IAED,OAAO,SAAS,CAAC;AACrB,CAAC;AAED;;GAEG;AACH,SAAS,cAAc,CAAC,KAAa;IACjC,IAAI,KAAK,IAAI,EAAE;QAAE,OAAO,GAAG,CAAC;IAC5B,IAAI,KAAK,IAAI,EAAE;QAAE,OAAO,IAAI,CAAC;IAC7B,OAAO,GAAG,CAAC;AACf,CAAC;AAED;;GAEG;AACH,SAAS,cAAc,CAAC,KAAa,EAAE,IAAY;IAC/C,IAAI,KAAK,IAAI,EAAE,EAAE,CAAC;QACd,QAAQ,IAAI,EAAE,CAAC;YACX,KAAK,WAAW;gBACZ,OAAO,wBAAwB,CAAC;YACpC,KAAK,cAAc;gBACf,OAAO,6BAA6B,CAAC;YACzC,KAAK,OAAO;gBACR,OAAO,2BAA2B,CAAC;YACvC,KAAK,WAAW;gBACZ,OAAO,oBAAoB,CAAC;YAChC;gBACI,OAAO,WAAW,CAAC;QAC3B,CAAC;IACL,CAAC;IAED,IAAI,KAAK,IAAI,EAAE,EAAE,CAAC;QACd,QAAQ,IAAI,EAAE,CAAC;YACX,KAAK,WAAW;gBACZ,OAAO,kCAAkC,CAAC;YAC9C,KAAK,cAAc;gBACf,OAAO,qCAAqC,CAAC;YACjD,KAAK,OAAO;gBACR,OAAO,+BAA+B,CAAC;YAC3C,KAAK,WAAW;gBACZ,OAAO,sBAAsB,CAAC;YAClC;gBACI,OAAO,wBAAwB,CAAC;QACxC,CAAC;IACL,CAAC;IAED,QAAQ,IAAI,EAAE,CAAC;QACX,KAAK,WAAW;YACZ,OAAO,4BAA4B,CAAC;QACxC,KAAK,cAAc;YACf,OAAO,+BAA+B,CAAC;QAC3C,KAAK,OAAO;YACR,OAAO,wBAAwB,CAAC;QACpC,KAAK,WAAW;YACZ,OAAO,sBAAsB,CAAC;QAClC;YACI,OAAO,kBAAkB,CAAC;IAClC,CAAC;AACL,CAAC;AAED;;GAEG;AACH,SAAS,uBAAuB,CAAC,QAAwB,EAAE,IAAc;IACrE,MAAM,SAAS,GAAa,EAAE,CAAC;IAE/B,IAAI,QAAQ,CAAC,mBAAmB,GAAG,EAAE,EAAE,CAAC;QACpC,SAAS,CAAC,IAAI,CAAC,iDAAiD,CAAC,CAAC;QAClE,SAAS,CAAC,IAAI,CAAC,6CAA6C,CAAC,CAAC;IAClE,CAAC;IAED,IAAI,QAAQ,CAAC,oBAAoB,GAAG,EAAE,EAAE,CAAC;QACrC,SAAS,CAAC,IAAI,CAAC,2DAA2D,CAAC,CAAC;IAChF,CAAC;IAED,IAAI,QAAQ,CAAC,sBAAsB,GAAG,EAAE,EAAE,CAAC;QACvC,SAAS,CAAC,IAAI,CAAC,2DAA2D,CAAC,CAAC;QAC5E,SAAS,CAAC,IAAI,CAAC,0DAA0D,CAAC,CAAC;IAC/E,CAAC;IAED,IAAI,QAAQ,CAAC,kBAAkB,GAAG,EAAE,IAAI,IAAI,KAAK,WAAW,EAAE,CAAC;QAC3D,SAAS,CAAC,IAAI,CAAC,yDAAyD,CAAC,CAAC;IAC9E,CAAC;IAED,IAAI,QAAQ,CAAC,OAAO,GAAG,EAAE,EAAE,CAAC;QACxB,SAAS,CAAC,IAAI,CAAC,qDAAqD,CAAC,CAAC;IAC1E,CAAC;IAED,OAAO,SAAS,CAAC;AACrB,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,eAAe,CAAC,QAAwB,EAAE,IAAc;IAIpE,MAAM,UAAU,GAA6B;QACzC,SAAS,EAAE,EAAE;QACb,IAAI,EAAE,EAAE;QACR,QAAQ,EAAE,EAAE;KACf,CAAC;IAEF,MAAM,WAAW,GAAG,UAAU,CAAC,IAAI,CAAC,CAAC;IACrC,MAAM,QAAQ,GAAG,QAAQ,CAAC,OAAO,IAAI,WAAW,CAAC;IAEjD,IAAI,QAAQ,GAAG,EAAE,CAAC;IAClB,IAAI,QAAQ,EAAE,CAAC;QACX,QAAQ,GAAG,kCAAkC,IAAI,aAAa,WAAW,GAAG,CAAC;IACjF,CAAC;SAAM,CAAC;QACJ,MAAM,SAAS,GAAG,WAAW,GAAG,QAAQ,CAAC,OAAO,CAAC;QACjD,QAAQ,GAAG,+BAA+B,IAAI,YAAY,SAAS,oCAAoC,WAAW,EAAE,CAAC;IACzH,CAAC;IAED,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,CAAC;AAClC,CAAC"}
@@ -0,0 +1,60 @@
1
+ import type { TierGate } from "../types/index.js";
2
+ export interface TemplateMetadata {
3
+ fase: string;
4
+ skill: string;
5
+ versao?: string;
6
+ autor?: string;
7
+ }
8
+ export interface TemplateCheckbox {
9
+ secao: string;
10
+ texto: string;
11
+ obrigatorio: boolean;
12
+ tierMinimo: TierGate;
13
+ linha: number;
14
+ }
15
+ export interface TemplateSection {
16
+ nivel: number;
17
+ titulo: string;
18
+ tituloCompleto: string;
19
+ obrigatorio: boolean;
20
+ tierMinimo: TierGate;
21
+ subsecoes: TemplateSection[];
22
+ checkboxes: TemplateCheckbox[];
23
+ conteudo: string;
24
+ linha: number;
25
+ }
26
+ export interface TemplateStructure {
27
+ secoes: TemplateSection[];
28
+ checkboxes: TemplateCheckbox[];
29
+ camposObrigatorios: string[];
30
+ checklistQualidade: string[];
31
+ metadata: TemplateMetadata;
32
+ conteudoCompleto: string;
33
+ }
34
+ /**
35
+ * Parseia um template markdown e extrai sua estrutura
36
+ */
37
+ export declare function parseTemplate(templatePath: string): TemplateStructure | null;
38
+ /**
39
+ * Conta checkboxes por tier
40
+ */
41
+ export declare function contarCheckboxesPorTier(estrutura: TemplateStructure, tier: TierGate): number;
42
+ /**
43
+ * Obtém seções obrigatórias por tier
44
+ */
45
+ export declare function getSecoesObrigatoriasPorTier(estrutura: TemplateStructure, tier: TierGate): TemplateSection[];
46
+ /**
47
+ * Gera regex para encontrar seção no entregável
48
+ */
49
+ export declare function gerarRegexSecao(secao: TemplateSection): RegExp;
50
+ /**
51
+ * Extrai estatísticas do template
52
+ */
53
+ export declare function getEstatisticasTemplate(estrutura: TemplateStructure): {
54
+ totalSecoes: number;
55
+ totalCheckboxes: number;
56
+ totalCamposObrigatorios: number;
57
+ totalChecklistQualidade: number;
58
+ profundidadeMaxima: number;
59
+ };
60
+ //# sourceMappingURL=template-parser.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"template-parser.d.ts","sourceRoot":"","sources":["../../src/gates/template-parser.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAElD,MAAM,WAAW,gBAAgB;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,gBAAgB;IAC7B,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,OAAO,CAAC;IACrB,UAAU,EAAE,QAAQ,CAAC;IACrB,KAAK,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,eAAe;IAC5B,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,cAAc,EAAE,MAAM,CAAC;IACvB,WAAW,EAAE,OAAO,CAAC;IACrB,UAAU,EAAE,QAAQ,CAAC;IACrB,SAAS,EAAE,eAAe,EAAE,CAAC;IAC7B,UAAU,EAAE,gBAAgB,EAAE,CAAC;IAC/B,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,iBAAiB;IAC9B,MAAM,EAAE,eAAe,EAAE,CAAC;IAC1B,UAAU,EAAE,gBAAgB,EAAE,CAAC;IAC/B,kBAAkB,EAAE,MAAM,EAAE,CAAC;IAC7B,kBAAkB,EAAE,MAAM,EAAE,CAAC;IAC7B,QAAQ,EAAE,gBAAgB,CAAC;IAC3B,gBAAgB,EAAE,MAAM,CAAC;CAC5B;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,YAAY,EAAE,MAAM,GAAG,iBAAiB,GAAG,IAAI,CAsH5E;AAsDD;;GAEG;AACH,wBAAgB,uBAAuB,CAAC,SAAS,EAAE,iBAAiB,EAAE,IAAI,EAAE,QAAQ,GAAG,MAAM,CAQ5F;AAED;;GAEG;AACH,wBAAgB,4BAA4B,CACxC,SAAS,EAAE,iBAAiB,EAC5B,IAAI,EAAE,QAAQ,GACf,eAAe,EAAE,CAgBnB;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,KAAK,EAAE,eAAe,GAAG,MAAM,CAO9D;AAED;;GAEG;AACH,wBAAgB,uBAAuB,CAAC,SAAS,EAAE,iBAAiB,GAAG;IACnE,WAAW,EAAE,MAAM,CAAC;IACpB,eAAe,EAAE,MAAM,CAAC;IACxB,uBAAuB,EAAE,MAAM,CAAC;IAChC,uBAAuB,EAAE,MAAM,CAAC;IAChC,kBAAkB,EAAE,MAAM,CAAC;CAC9B,CAqBA"}
@@ -0,0 +1,221 @@
1
+ import { readFileSync, existsSync } from "fs";
2
+ /**
3
+ * Parseia um template markdown e extrai sua estrutura
4
+ */
5
+ export function parseTemplate(templatePath) {
6
+ if (!existsSync(templatePath)) {
7
+ return null;
8
+ }
9
+ const conteudo = readFileSync(templatePath, "utf-8");
10
+ const linhas = conteudo.split("\n");
11
+ const secoes = [];
12
+ const checkboxes = [];
13
+ const camposObrigatorios = [];
14
+ const checklistQualidade = [];
15
+ let secaoAtual = null;
16
+ let pilhaSecoes = [];
17
+ let dentroChecklistQualidade = false;
18
+ for (let i = 0; i < linhas.length; i++) {
19
+ const linha = linhas[i];
20
+ const numeroLinha = i + 1;
21
+ // Detectar checklist de qualidade
22
+ if (linha.match(/^#{1,3}\s*checklist\s+(de\s+)?qualidade/i)) {
23
+ dentroChecklistQualidade = true;
24
+ continue;
25
+ }
26
+ // Extrair itens do checklist de qualidade
27
+ if (dentroChecklistQualidade && linha.match(/^-\s*\[\s*\]/)) {
28
+ const match = linha.match(/^-\s*\[\s*\]\s*\*?\*?(.+?)\*?\*?$/);
29
+ if (match) {
30
+ checklistQualidade.push(match[1].trim());
31
+ }
32
+ continue;
33
+ }
34
+ // Detectar headers (seções)
35
+ const headerMatch = linha.match(/^(#{1,6})\s+(.+)$/);
36
+ if (headerMatch) {
37
+ dentroChecklistQualidade = false;
38
+ const nivel = headerMatch[1].length;
39
+ const titulo = headerMatch[2].trim();
40
+ const secao = {
41
+ nivel,
42
+ titulo: limparTitulo(titulo),
43
+ tituloCompleto: titulo,
44
+ obrigatorio: true,
45
+ tierMinimo: "base",
46
+ subsecoes: [],
47
+ checkboxes: [],
48
+ conteudo: "",
49
+ linha: numeroLinha,
50
+ };
51
+ // Ajustar hierarquia de seções
52
+ while (pilhaSecoes.length > 0 && pilhaSecoes[pilhaSecoes.length - 1].nivel >= nivel) {
53
+ pilhaSecoes.pop();
54
+ }
55
+ if (pilhaSecoes.length === 0) {
56
+ secoes.push(secao);
57
+ }
58
+ else {
59
+ pilhaSecoes[pilhaSecoes.length - 1].subsecoes.push(secao);
60
+ }
61
+ pilhaSecoes.push(secao);
62
+ secaoAtual = secao;
63
+ continue;
64
+ }
65
+ // Detectar checkboxes
66
+ const checkboxMatch = linha.match(/^-?\s*\[\s*\]\s*\*?\*?(.+?):?\*?\*?\s*(.*)$/);
67
+ if (checkboxMatch && secaoAtual) {
68
+ const textoCheckbox = checkboxMatch[1].trim();
69
+ const descricao = checkboxMatch[2].trim();
70
+ const checkbox = {
71
+ secao: secaoAtual.titulo,
72
+ texto: textoCheckbox + (descricao ? ": " + descricao : ""),
73
+ obrigatorio: true,
74
+ tierMinimo: "base",
75
+ linha: numeroLinha,
76
+ };
77
+ secaoAtual.checkboxes.push(checkbox);
78
+ checkboxes.push(checkbox);
79
+ continue;
80
+ }
81
+ // Detectar campos obrigatórios (placeholders)
82
+ const placeholderMatches = linha.matchAll(/\[([^\]]+)\]/g);
83
+ for (const match of placeholderMatches) {
84
+ const campo = match[1];
85
+ if (!campo.includes("http") && !campo.includes("Data") && campo.length > 3) {
86
+ if (!camposObrigatorios.includes(campo)) {
87
+ camposObrigatorios.push(campo);
88
+ }
89
+ }
90
+ }
91
+ // Adicionar conteúdo à seção atual
92
+ if (secaoAtual) {
93
+ secaoAtual.conteudo += linha + "\n";
94
+ }
95
+ }
96
+ // Extrair metadata do conteúdo
97
+ const metadata = extrairMetadata(conteudo, templatePath);
98
+ return {
99
+ secoes,
100
+ checkboxes,
101
+ camposObrigatorios,
102
+ checklistQualidade,
103
+ metadata,
104
+ conteudoCompleto: conteudo,
105
+ };
106
+ }
107
+ /**
108
+ * Limpa título de seção removendo marcadores e formatação
109
+ */
110
+ function limparTitulo(titulo) {
111
+ return titulo
112
+ .replace(/^\d+\.\s*/, "")
113
+ .replace(/\*\*/g, "")
114
+ .replace(/\[.*?\]/g, "")
115
+ .trim();
116
+ }
117
+ /**
118
+ * Extrai metadata do template
119
+ */
120
+ function extrairMetadata(conteudo, templatePath) {
121
+ const linhas = conteudo.split("\n");
122
+ let fase = "";
123
+ let skill = "";
124
+ let versao = "";
125
+ let autor = "";
126
+ // Extrair do path
127
+ const pathParts = templatePath.split(/[/\\]/);
128
+ const skillIndex = pathParts.findIndex(p => p === "skills");
129
+ if (skillIndex >= 0 && skillIndex + 1 < pathParts.length) {
130
+ skill = pathParts[skillIndex + 1];
131
+ }
132
+ // Extrair do conteúdo
133
+ for (const linha of linhas.slice(0, 20)) {
134
+ if (linha.match(/\*\*versão:\*\*/i)) {
135
+ const match = linha.match(/\*\*versão:\*\*\s*(.+)/i);
136
+ if (match)
137
+ versao = match[1].trim();
138
+ }
139
+ if (linha.match(/\*\*autor:\*\*/i)) {
140
+ const match = linha.match(/\*\*autor:\*\*\s*(.+)/i);
141
+ if (match)
142
+ autor = match[1].trim();
143
+ }
144
+ }
145
+ // Inferir fase do primeiro header
146
+ if (linhas.length > 0) {
147
+ const primeiroHeader = linhas.find(l => l.match(/^#\s+/));
148
+ if (primeiroHeader) {
149
+ fase = primeiroHeader.replace(/^#\s+/, "").trim();
150
+ }
151
+ }
152
+ return { fase, skill, versao, autor };
153
+ }
154
+ /**
155
+ * Conta checkboxes por tier
156
+ */
157
+ export function contarCheckboxesPorTier(estrutura, tier) {
158
+ const tierOrder = { essencial: 0, base: 1, avancado: 2 };
159
+ const tierAtual = tierOrder[tier];
160
+ return estrutura.checkboxes.filter(cb => {
161
+ const tierMinimo = tierOrder[cb.tierMinimo];
162
+ return tierAtual >= tierMinimo;
163
+ }).length;
164
+ }
165
+ /**
166
+ * Obtém seções obrigatórias por tier
167
+ */
168
+ export function getSecoesObrigatoriasPorTier(estrutura, tier) {
169
+ const tierOrder = { essencial: 0, base: 1, avancado: 2 };
170
+ const tierAtual = tierOrder[tier];
171
+ const secoesObrigatorias = [];
172
+ function processarSecao(secao) {
173
+ const tierMinimo = tierOrder[secao.tierMinimo];
174
+ if (secao.obrigatorio && tierAtual >= tierMinimo) {
175
+ secoesObrigatorias.push(secao);
176
+ }
177
+ secao.subsecoes.forEach(processarSecao);
178
+ }
179
+ estrutura.secoes.forEach(processarSecao);
180
+ return secoesObrigatorias;
181
+ }
182
+ /**
183
+ * Gera regex para encontrar seção no entregável
184
+ */
185
+ export function gerarRegexSecao(secao) {
186
+ const tituloLimpo = secao.titulo
187
+ .toLowerCase()
188
+ .replace(/[^a-z0-9\s]/g, "")
189
+ .replace(/\s+/g, "\\s+");
190
+ return new RegExp(`^#{1,${secao.nivel + 1}}\\s+.*?${tituloLimpo}`, "im");
191
+ }
192
+ /**
193
+ * Extrai estatísticas do template
194
+ */
195
+ export function getEstatisticasTemplate(estrutura) {
196
+ let profundidadeMaxima = 0;
197
+ function calcularProfundidade(secoes, nivel = 1) {
198
+ for (const secao of secoes) {
199
+ profundidadeMaxima = Math.max(profundidadeMaxima, nivel);
200
+ if (secao.subsecoes.length > 0) {
201
+ calcularProfundidade(secao.subsecoes, nivel + 1);
202
+ }
203
+ }
204
+ }
205
+ calcularProfundidade(estrutura.secoes);
206
+ return {
207
+ totalSecoes: contarSecoes(estrutura.secoes),
208
+ totalCheckboxes: estrutura.checkboxes.length,
209
+ totalCamposObrigatorios: estrutura.camposObrigatorios.length,
210
+ totalChecklistQualidade: estrutura.checklistQualidade.length,
211
+ profundidadeMaxima,
212
+ };
213
+ }
214
+ function contarSecoes(secoes) {
215
+ let total = secoes.length;
216
+ for (const secao of secoes) {
217
+ total += contarSecoes(secao.subsecoes);
218
+ }
219
+ return total;
220
+ }
221
+ //# sourceMappingURL=template-parser.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"template-parser.js","sourceRoot":"","sources":["../../src/gates/template-parser.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,31 @@
1
+ import type { TierGate } from "../types/index.js";
2
+ import type { TemplateStructure } from "./template-parser.js";
3
+ export interface ValidationResult {
4
+ valido: boolean;
5
+ score: number;
6
+ scoreDetalhado: ScoreDetalhado;
7
+ secoesEncontradas: string[];
8
+ secoesFaltando: string[];
9
+ checkboxesPreenchidos: number;
10
+ checkboxesTotal: number;
11
+ placeholdersNaoSubstituidos: string[];
12
+ camposFaltando: string[];
13
+ feedback: string[];
14
+ sugestoes: string[];
15
+ }
16
+ export interface ScoreDetalhado {
17
+ estrutura: number;
18
+ conteudo: number;
19
+ checkboxes: number;
20
+ qualidade: number;
21
+ total: number;
22
+ }
23
+ /**
24
+ * Valida um entregável contra um template
25
+ */
26
+ export declare function validarContraTemplate(entregavel: string, template: TemplateStructure, tier?: TierGate): ValidationResult;
27
+ /**
28
+ * Formata resultado de validação para exibição
29
+ */
30
+ export declare function formatarResultadoValidacao(resultado: ValidationResult, tier: TierGate): string;
31
+ //# sourceMappingURL=template-validator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"template-validator.d.ts","sourceRoot":"","sources":["../../src/gates/template-validator.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAClD,OAAO,KAAK,EAAE,iBAAiB,EAAqC,MAAM,sBAAsB,CAAC;AAGjG,MAAM,WAAW,gBAAgB;IAC7B,MAAM,EAAE,OAAO,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,cAAc,EAAE,cAAc,CAAC;IAC/B,iBAAiB,EAAE,MAAM,EAAE,CAAC;IAC5B,cAAc,EAAE,MAAM,EAAE,CAAC;IACzB,qBAAqB,EAAE,MAAM,CAAC;IAC9B,eAAe,EAAE,MAAM,CAAC;IACxB,2BAA2B,EAAE,MAAM,EAAE,CAAC;IACtC,cAAc,EAAE,MAAM,EAAE,CAAC;IACzB,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,SAAS,EAAE,MAAM,EAAE,CAAC;CACvB;AAED,MAAM,WAAW,cAAc;IAC3B,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;CACjB;AAED;;GAEG;AACH,wBAAgB,qBAAqB,CACjC,UAAU,EAAE,MAAM,EAClB,QAAQ,EAAE,iBAAiB,EAC3B,IAAI,GAAE,QAAiB,GACxB,gBAAgB,CAmFlB;AAuND;;GAEG;AACH,wBAAgB,0BAA0B,CAAC,SAAS,EAAE,gBAAgB,EAAE,IAAI,EAAE,QAAQ,GAAG,MAAM,CAsD9F"}
@@ -0,0 +1,252 @@
1
+ import { getSecoesObrigatoriasPorTier, gerarRegexSecao } from "./template-parser.js";
2
+ /**
3
+ * Valida um entregável contra um template
4
+ */
5
+ export function validarContraTemplate(entregavel, template, tier = "base") {
6
+ const secoesObrigatorias = getSecoesObrigatoriasPorTier(template, tier);
7
+ const secoesEncontradas = [];
8
+ const secoesFaltando = [];
9
+ const feedback = [];
10
+ const sugestoes = [];
11
+ // 1. Validar estrutura de seções
12
+ for (const secao of secoesObrigatorias) {
13
+ const regex = gerarRegexSecao(secao);
14
+ const encontrada = regex.test(entregavel);
15
+ if (encontrada) {
16
+ secoesEncontradas.push(secao.titulo);
17
+ }
18
+ else {
19
+ secoesFaltando.push(secao.titulo);
20
+ feedback.push(`❌ Seção obrigatória faltando: **${secao.titulo}**`);
21
+ sugestoes.push(`Adicione a seção "${secao.titulo}" seguindo o template`);
22
+ }
23
+ }
24
+ // 2. Validar checkboxes
25
+ const { checkboxesPreenchidos, checkboxesTotal } = validarCheckboxes(entregavel, template, tier, feedback, sugestoes);
26
+ // 3. Validar placeholders
27
+ const placeholdersNaoSubstituidos = detectarPlaceholders(entregavel, template.camposObrigatorios);
28
+ if (placeholdersNaoSubstituidos.length > 0) {
29
+ feedback.push(`⚠️ ${placeholdersNaoSubstituidos.length} placeholder(s) não substituído(s)`);
30
+ placeholdersNaoSubstituidos.slice(0, 3).forEach(p => {
31
+ sugestoes.push(`Substitua o placeholder: [${p}]`);
32
+ });
33
+ }
34
+ // 4. Validar campos obrigatórios
35
+ const camposFaltando = validarCamposObrigatorios(entregavel, template, feedback);
36
+ // 5. Validar checklist de qualidade
37
+ const checklistQualidadeScore = validarChecklistQualidade(entregavel, template.checklistQualidade, feedback);
38
+ // 6. Calcular scores
39
+ const scoreDetalhado = calcularScores(secoesEncontradas.length, secoesObrigatorias.length, checkboxesPreenchidos, checkboxesTotal, placeholdersNaoSubstituidos.length, template.camposObrigatorios.length, checklistQualidadeScore, entregavel.length);
40
+ // 7. Determinar se é válido
41
+ const valido = determinarValidade(secoesFaltando.length, checkboxesPreenchidos, checkboxesTotal, tier, scoreDetalhado.total);
42
+ return {
43
+ valido,
44
+ score: scoreDetalhado.total,
45
+ scoreDetalhado,
46
+ secoesEncontradas,
47
+ secoesFaltando,
48
+ checkboxesPreenchidos,
49
+ checkboxesTotal,
50
+ placeholdersNaoSubstituidos,
51
+ camposFaltando,
52
+ feedback,
53
+ sugestoes,
54
+ };
55
+ }
56
+ /**
57
+ * Valida checkboxes preenchidos no entregável
58
+ */
59
+ function validarCheckboxes(entregavel, template, tier, feedback, sugestoes) {
60
+ const tierOrder = { essencial: 0, base: 1, avancado: 2 };
61
+ const tierAtual = tierOrder[tier];
62
+ const checkboxesRelevantes = template.checkboxes.filter(cb => {
63
+ const tierMinimo = tierOrder[cb.tierMinimo];
64
+ return tierAtual >= tierMinimo;
65
+ });
66
+ let checkboxesPreenchidos = 0;
67
+ const checkboxesNaoPreenchidos = [];
68
+ for (const checkbox of checkboxesRelevantes) {
69
+ const textoLimpo = checkbox.texto
70
+ .toLowerCase()
71
+ .replace(/[^a-z0-9\s]/g, "")
72
+ .slice(0, 30);
73
+ const regexPreenchido = new RegExp(`\\[x\\].*?${textoLimpo}`, "i");
74
+ if (regexPreenchido.test(entregavel)) {
75
+ checkboxesPreenchidos++;
76
+ }
77
+ else {
78
+ checkboxesNaoPreenchidos.push(checkbox);
79
+ }
80
+ }
81
+ const percentualPreenchido = checkboxesRelevantes.length > 0
82
+ ? (checkboxesPreenchidos / checkboxesRelevantes.length) * 100
83
+ : 100;
84
+ if (percentualPreenchido < 50) {
85
+ feedback.push(`⚠️ Apenas ${Math.round(percentualPreenchido)}% dos checkboxes preenchidos`);
86
+ }
87
+ if (checkboxesNaoPreenchidos.length > 0 && checkboxesNaoPreenchidos.length <= 5) {
88
+ feedback.push(`📋 Checkboxes pendentes:`);
89
+ checkboxesNaoPreenchidos.slice(0, 5).forEach(cb => {
90
+ sugestoes.push(`Preencher: ${cb.texto.slice(0, 60)}`);
91
+ });
92
+ }
93
+ return {
94
+ checkboxesPreenchidos,
95
+ checkboxesTotal: checkboxesRelevantes.length,
96
+ };
97
+ }
98
+ /**
99
+ * Detecta placeholders não substituídos
100
+ */
101
+ function detectarPlaceholders(entregavel, camposObrigatorios) {
102
+ const placeholdersEncontrados = [];
103
+ for (const campo of camposObrigatorios) {
104
+ const regex = new RegExp(`\\[${campo}\\]`, "i");
105
+ if (regex.test(entregavel)) {
106
+ placeholdersEncontrados.push(campo);
107
+ }
108
+ }
109
+ return placeholdersEncontrados;
110
+ }
111
+ /**
112
+ * Valida campos obrigatórios preenchidos
113
+ */
114
+ function validarCamposObrigatorios(entregavel, template, feedback) {
115
+ const camposFaltando = [];
116
+ for (const campo of template.camposObrigatorios.slice(0, 10)) {
117
+ const regex = new RegExp(`\\[${campo}\\]`, "i");
118
+ if (regex.test(entregavel)) {
119
+ camposFaltando.push(campo);
120
+ }
121
+ }
122
+ if (camposFaltando.length > 0) {
123
+ feedback.push(`⚠️ ${camposFaltando.length} campo(s) obrigatório(s) não preenchido(s)`);
124
+ }
125
+ return camposFaltando;
126
+ }
127
+ /**
128
+ * Valida checklist de qualidade
129
+ */
130
+ function validarChecklistQualidade(entregavel, checklistQualidade, feedback) {
131
+ if (checklistQualidade.length === 0) {
132
+ return 100;
133
+ }
134
+ let itensEncontrados = 0;
135
+ for (const item of checklistQualidade) {
136
+ const textoLimpo = item
137
+ .toLowerCase()
138
+ .replace(/[^a-z0-9\s]/g, "")
139
+ .slice(0, 30);
140
+ const regexItem = new RegExp(`\\[x\\].*?${textoLimpo}`, "i");
141
+ if (regexItem.test(entregavel)) {
142
+ itensEncontrados++;
143
+ }
144
+ }
145
+ const percentual = (itensEncontrados / checklistQualidade.length) * 100;
146
+ if (percentual < 70) {
147
+ feedback.push(`⚠️ Checklist de qualidade: ${Math.round(percentual)}% completo`);
148
+ }
149
+ return percentual;
150
+ }
151
+ /**
152
+ * Calcula scores detalhados
153
+ */
154
+ function calcularScores(secoesEncontradas, secoesTotal, checkboxesPreenchidos, checkboxesTotal, placeholdersNaoSubstituidos, totalPlaceholders, checklistQualidadeScore, tamanhoEntregavel) {
155
+ // Score de estrutura (30%)
156
+ const scoreEstrutura = secoesTotal > 0
157
+ ? (secoesEncontradas / secoesTotal) * 100
158
+ : 100;
159
+ // Score de conteúdo (40%)
160
+ const placeholdersSubstituidos = totalPlaceholders > 0
161
+ ? ((totalPlaceholders - placeholdersNaoSubstituidos) / totalPlaceholders) * 100
162
+ : 100;
163
+ const densidadeScore = Math.min((tamanhoEntregavel / 1000) * 100, 100);
164
+ const scoreConteudo = (placeholdersSubstituidos * 0.7) + (densidadeScore * 0.3);
165
+ // Score de checkboxes (20%)
166
+ const scoreCheckboxes = checkboxesTotal > 0
167
+ ? (checkboxesPreenchidos / checkboxesTotal) * 100
168
+ : 100;
169
+ // Score de qualidade (10%)
170
+ const scoreQualidade = checklistQualidadeScore;
171
+ // Score total
172
+ const scoreTotal = Math.round((scoreEstrutura * 0.3) +
173
+ (scoreConteudo * 0.4) +
174
+ (scoreCheckboxes * 0.2) +
175
+ (scoreQualidade * 0.1));
176
+ return {
177
+ estrutura: Math.round(scoreEstrutura),
178
+ conteudo: Math.round(scoreConteudo),
179
+ checkboxes: Math.round(scoreCheckboxes),
180
+ qualidade: Math.round(scoreQualidade),
181
+ total: scoreTotal,
182
+ };
183
+ }
184
+ /**
185
+ * Determina se o entregável é válido
186
+ */
187
+ function determinarValidade(secoesFaltando, checkboxesPreenchidos, checkboxesTotal, tier, scoreTotal) {
188
+ // Critérios por tier
189
+ const criterios = {
190
+ essencial: { minScore: 50, minCheckboxes: 0.5 },
191
+ base: { minScore: 70, minCheckboxes: 0.7 },
192
+ avancado: { minScore: 85, minCheckboxes: 0.9 },
193
+ };
194
+ const criterio = criterios[tier];
195
+ const percentualCheckboxes = checkboxesTotal > 0
196
+ ? checkboxesPreenchidos / checkboxesTotal
197
+ : 1;
198
+ return (secoesFaltando === 0 &&
199
+ scoreTotal >= criterio.minScore &&
200
+ percentualCheckboxes >= criterio.minCheckboxes);
201
+ }
202
+ /**
203
+ * Formata resultado de validação para exibição
204
+ */
205
+ export function formatarResultadoValidacao(resultado, tier) {
206
+ const { valido, score, scoreDetalhado, feedback, sugestoes } = resultado;
207
+ let output = "";
208
+ // Status geral
209
+ if (valido) {
210
+ output += `✅ **Validação aprovada!** Score: ${score}/100\n\n`;
211
+ }
212
+ else {
213
+ output += `⚠️ **Validação pendente** Score: ${score}/100\n\n`;
214
+ }
215
+ // Score detalhado
216
+ output += `### 📊 Score Detalhado\n\n`;
217
+ output += `- **Estrutura (30%):** ${scoreDetalhado.estrutura}/100\n`;
218
+ output += `- **Conteúdo (40%):** ${scoreDetalhado.conteudo}/100\n`;
219
+ output += `- **Checkboxes (20%):** ${scoreDetalhado.checkboxes}/100\n`;
220
+ output += `- **Qualidade (10%):** ${scoreDetalhado.qualidade}/100\n\n`;
221
+ // Progresso de checkboxes
222
+ const percentualCheckboxes = resultado.checkboxesTotal > 0
223
+ ? Math.round((resultado.checkboxesPreenchidos / resultado.checkboxesTotal) * 100)
224
+ : 100;
225
+ output += `### ✅ Checkboxes: ${resultado.checkboxesPreenchidos}/${resultado.checkboxesTotal} (${percentualCheckboxes}%)\n\n`;
226
+ // Seções
227
+ if (resultado.secoesFaltando.length > 0) {
228
+ output += `### ❌ Seções Faltando (${resultado.secoesFaltando.length})\n\n`;
229
+ resultado.secoesFaltando.slice(0, 5).forEach(s => {
230
+ output += `- ${s}\n`;
231
+ });
232
+ output += `\n`;
233
+ }
234
+ // Feedback
235
+ if (feedback.length > 0) {
236
+ output += `### 💬 Feedback\n\n`;
237
+ feedback.slice(0, 8).forEach(f => {
238
+ output += `${f}\n`;
239
+ });
240
+ output += `\n`;
241
+ }
242
+ // Sugestões
243
+ if (sugestoes.length > 0 && !valido) {
244
+ output += `### 💡 Sugestões de Melhoria\n\n`;
245
+ sugestoes.slice(0, 5).forEach(s => {
246
+ output += `- ${s}\n`;
247
+ });
248
+ output += `\n`;
249
+ }
250
+ return output;
251
+ }
252
+ //# sourceMappingURL=template-validator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"template-validator.js","sourceRoot":"","sources":["../../src/gates/template-validator.ts"],"names":[],"mappings":"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"}
@@ -5,7 +5,20 @@ import type { GateResultado, Fase, TierGate } from "../types/index.js";
5
5
  */
6
6
  export declare const GATE_CHECKLISTS: Record<number, string[]>;
7
7
  /**
8
- * Valida gate de uma fase com suporte a tier
8
+ * Valida gate usando template da skill (novo sistema)
9
+ * @param fase - Fase a validar
10
+ * @param entregavel - Conteúdo do entregável
11
+ * @param tier - Tier de validação
12
+ * @param diretorioContent - Diretório base do content (ex: d:/Sistemas/Maestro/content)
13
+ */
14
+ export declare function validarGateComTemplate(fase: Fase, entregavel: string, tier?: TierGate, diretorioContent?: string): {
15
+ sucesso: boolean;
16
+ resultado?: any;
17
+ resultadoLegacy?: GateResultado;
18
+ erro?: string;
19
+ };
20
+ /**
21
+ * Valida gate de uma fase com suporte a tier (legado)
9
22
  * @param fase - Fase a validar
10
23
  * @param entregavel - Conteúdo do entregável
11
24
  * @param tier - Tier de validação (default: usa checklist da fase, que é tier 'base')
@@ -1 +1 @@
1
- {"version":3,"file":"validator.d.ts","sourceRoot":"","sources":["../../src/gates/validator.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAGvE;;;GAGG;AACH,eAAO,MAAM,eAAe,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CA0DpD,CAAC;AAEF;;;;;GAKG;AACH,wBAAgB,WAAW,CACvB,IAAI,EAAE,IAAI,EACV,UAAU,EAAE,MAAM,EAClB,IAAI,CAAC,EAAE,QAAQ,GAChB,aAAa,CAyBf;AAwDD;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,SAAS,EAAE,aAAa,GAAG,MAAM,CA6BtE"}
1
+ {"version":3,"file":"validator.d.ts","sourceRoot":"","sources":["../../src/gates/validator.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AASvE;;;GAGG;AACH,eAAO,MAAM,eAAe,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CA0DpD,CAAC;AAEF;;;;;;GAMG;AACH,wBAAgB,sBAAsB,CAClC,IAAI,EAAE,IAAI,EACV,UAAU,EAAE,MAAM,EAClB,IAAI,GAAE,QAAiB,EACvB,gBAAgB,CAAC,EAAE,MAAM,GAC1B;IAAE,OAAO,EAAE,OAAO,CAAC;IAAC,SAAS,CAAC,EAAE,GAAG,CAAC;IAAC,eAAe,CAAC,EAAE,aAAa,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAA;CAAE,CAoCvF;AA6BD;;;;;GAKG;AACH,wBAAgB,WAAW,CACvB,IAAI,EAAE,IAAI,EACV,UAAU,EAAE,MAAM,EAClB,IAAI,CAAC,EAAE,QAAQ,GAChB,aAAa,CAyBf;AAwDD;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,SAAS,EAAE,aAAa,GAAG,MAAM,CA6BtE"}
@@ -1,4 +1,10 @@
1
1
  import { getChecklistPorTier } from "./tiers.js";
2
+ import { parseTemplate } from "./template-parser.js";
3
+ import { validarContraTemplate } from "./template-validator.js";
4
+ import { calcularQualidade } from "./quality-scorer.js";
5
+ import { getSkillParaFase } from "../utils/prompt-mapper.js";
6
+ import { existsSync } from "fs";
7
+ import { join } from "path";
2
8
  /**
3
9
  * Checklists de validação por fase (legado - mantido para compatibilidade)
4
10
  * @deprecated Use getChecklistPorTier() para validação adaptativa
@@ -63,7 +69,66 @@ export const GATE_CHECKLISTS = {
63
69
  ],
64
70
  };
65
71
  /**
66
- * Valida gate de uma fase com suporte a tier
72
+ * Valida gate usando template da skill (novo sistema)
73
+ * @param fase - Fase a validar
74
+ * @param entregavel - Conteúdo do entregável
75
+ * @param tier - Tier de validação
76
+ * @param diretorioContent - Diretório base do content (ex: d:/Sistemas/Maestro/content)
77
+ */
78
+ export function validarGateComTemplate(fase, entregavel, tier = "base", diretorioContent) {
79
+ const skillNome = getSkillParaFase(fase.nome);
80
+ if (!skillNome || !diretorioContent) {
81
+ return { sucesso: false, erro: "Skill não encontrada ou diretório não especificado" };
82
+ }
83
+ // Tentar encontrar template principal da fase
84
+ const templatePath = resolverTemplatePath(skillNome, fase.nome, diretorioContent);
85
+ if (!templatePath || !existsSync(templatePath)) {
86
+ return { sucesso: false, erro: "Template não encontrado" };
87
+ }
88
+ // Parsear template
89
+ const templateStructure = parseTemplate(templatePath);
90
+ if (!templateStructure) {
91
+ return { sucesso: false, erro: "Erro ao parsear template" };
92
+ }
93
+ // Validar contra template
94
+ const resultado = validarContraTemplate(entregavel, templateStructure, tier);
95
+ // Calcular qualidade
96
+ const qualidade = calcularQualidade(entregavel, templateStructure, tier);
97
+ return {
98
+ sucesso: true,
99
+ resultado: {
100
+ ...resultado,
101
+ qualidade,
102
+ templateUsado: templatePath,
103
+ skillNome,
104
+ },
105
+ };
106
+ }
107
+ /**
108
+ * Resolve caminho do template baseado na skill e fase
109
+ */
110
+ function resolverTemplatePath(skillNome, faseNome, diretorioContent) {
111
+ const basePath = join(diretorioContent, "skills", skillNome, "resources", "templates");
112
+ // Mapeamento de fase para arquivo de template
113
+ const templateMap = {
114
+ "Produto": "PRD.md",
115
+ "Requisitos": "requisitos.md",
116
+ "UX Design": "design-doc.md",
117
+ "Modelo de Domínio": "modelo-dominio.md",
118
+ "Banco de Dados": "design-banco.md",
119
+ "Arquitetura": "arquitetura.md",
120
+ "Segurança": "checklist-seguranca.md",
121
+ "Backlog": "backlog.md",
122
+ "Contrato API": "contrato-api.md",
123
+ };
124
+ const templateFile = templateMap[faseNome];
125
+ if (!templateFile) {
126
+ return null;
127
+ }
128
+ return join(basePath, templateFile);
129
+ }
130
+ /**
131
+ * Valida gate de uma fase com suporte a tier (legado)
67
132
  * @param fase - Fase a validar
68
133
  * @param entregavel - Conteúdo do entregável
69
134
  * @param tier - Tier de validação (default: usa checklist da fase, que é tier 'base')
@@ -1 +1 @@
1
- {"version":3,"file":"validator.js","sourceRoot":"","sources":["../../src/gates/validator.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"validator.js","sourceRoot":"","sources":["../../src/gates/validator.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"validar-gate.d.ts","sourceRoot":"","sources":["../../src/tools/validar-gate.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAiB,MAAM,mBAAmB,CAAC;AAUnE,UAAU,eAAe;IACrB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;CACrB;AAED;;;GAGG;AACH,wBAAsB,WAAW,CAAC,IAAI,EAAE,eAAe,GAAG,OAAO,CAAC,UAAU,CAAC,CAyH5E;AAED;;GAEG;AACH,eAAO,MAAM,iBAAiB;;;;;;;;;;;;;;;;;;;;;CAqB7B,CAAC"}
1
+ {"version":3,"file":"validar-gate.d.ts","sourceRoot":"","sources":["../../src/tools/validar-gate.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAiB,MAAM,mBAAmB,CAAC;AAYnE,UAAU,eAAe;IACrB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;CACrB;AAED;;;GAGG;AACH,wBAAsB,WAAW,CAAC,IAAI,EAAE,eAAe,GAAG,OAAO,CAAC,UAAU,CAAC,CA8J5E;AAED;;GAEG;AACH,eAAO,MAAM,iBAAiB;;;;;;;;;;;;;;;;;;;;;CAqB7B,CAAC"}
@@ -1,8 +1,11 @@
1
1
  import { parsearEstado } from "../state/storage.js";
2
2
  import { getFase } from "../flows/types.js";
3
- import { validarGate as validarGateCore, formatarResultadoGate } from "../gates/validator.js";
3
+ import { validarGate as validarGateCore, formatarResultadoGate, validarGateComTemplate } from "../gates/validator.js";
4
+ import { formatarResultadoValidacao } from "../gates/template-validator.js";
5
+ import { gerarRelatorioQualidade, compararComTier } from "../gates/quality-scorer.js";
4
6
  import { resolveProjectPath } from "../utils/files.js";
5
7
  import { setCurrentDirectory } from "../state/context.js";
8
+ import { resolve, dirname } from "path";
6
9
  import { getSkillParaFase } from "../utils/prompt-mapper.js";
7
10
  import { getSkillResourcePath, detectIDE } from "../utils/ide-paths.js";
8
11
  /**
@@ -89,32 +92,60 @@ validar_gate(
89
92
  content: [{ type: "text", text: resposta }],
90
93
  };
91
94
  }
92
- // Validar gate
93
- const resultado = validarGateCore(fase, args.entregavel);
94
- const resultadoFormatado = formatarResultadoGate(resultado);
95
- const resposta = `# Gate da Fase ${numeroFase}: ${fase.nome}
95
+ // Tentar validação com template (novo sistema)
96
+ const diretorioMaestro = dirname(dirname(dirname(__dirname)));
97
+ const diretorioContent = resolve(diretorioMaestro, "content");
98
+ const tier = estado.tier_gate || "base";
99
+ const validacaoTemplate = validarGateComTemplate(fase, args.entregavel, tier, diretorioContent);
100
+ let resposta = "";
101
+ if (validacaoTemplate.sucesso && validacaoTemplate.resultado) {
102
+ // Usar novo sistema baseado em template
103
+ const resultado = validacaoTemplate.resultado;
104
+ resposta = `# Gate da Fase ${numeroFase}: ${fase.nome}
96
105
 
97
- ${resultadoFormatado}
98
-
99
- ${(() => {
100
- const skillAtual = getSkillParaFase(fase.nome);
101
- if (!skillAtual)
102
- return "";
103
- const ide = estado.ide || detectIDE(args.diretorio) || 'windsurf';
104
- const checklistPath = getSkillResourcePath(skillAtual, 'checklists', ide);
105
- return `
106
- ## 📋 Checklist da Skill
107
-
108
- **Localização:** \`${checklistPath}\`
109
-
110
- > 💡 Consulte o checklist completo da skill para validação detalhada.
111
- `;
112
- })()}
113
-
114
- ${resultado.valido
115
- ? "✅ **Você pode avançar!** Use `proximo(entregavel: \"...\", estado_json: \"...\")` para ir para a próxima fase."
116
- : "⚠️ **Complete os itens pendentes** ou use `proximo(entregavel: \"...\", estado_json: \"...\", confirmar_usuario: true)` para forçar avanço."}
117
106
  `;
107
+ resposta += `## 🎯 Validação Baseada em Template\n\n`;
108
+ resposta += `**Template:** \`${resultado.skillNome}\`\n`;
109
+ resposta += `**Tier:** ${tier}\n\n`;
110
+ resposta += formatarResultadoValidacao(resultado, tier);
111
+ // Relatório de qualidade
112
+ if (resultado.qualidade) {
113
+ resposta += "\n" + gerarRelatorioQualidade(resultado.qualidade, tier);
114
+ const comparacao = compararComTier(resultado.qualidade, tier);
115
+ resposta += "\n" + comparacao.mensagem + "\n\n";
116
+ }
117
+ // Link para template
118
+ const skillAtual = getSkillParaFase(fase.nome);
119
+ if (skillAtual) {
120
+ const ide = estado.ide || detectIDE(args.diretorio) || 'windsurf';
121
+ const templatesPath = getSkillResourcePath(skillAtual, 'templates', ide);
122
+ resposta += `## 📄 Template de Referência\n\n`;
123
+ resposta += `**Localização:** \`${templatesPath}\`\n\n`;
124
+ resposta += `> 💡 Consulte o template para ver a estrutura completa esperada.\n\n`;
125
+ }
126
+ resposta += resultado.valido
127
+ ? "✅ **Você pode avançar!** Use `proximo(entregavel: \"...\", estado_json: \"...\")` para ir para a próxima fase."
128
+ : "⚠️ **Complete os itens pendentes** ou use `proximo(entregavel: \"...\", estado_json: \"...\", confirmar_usuario: true)` para forçar avanço.";
129
+ }
130
+ else {
131
+ // Fallback para sistema legado
132
+ const resultado = validarGateCore(fase, args.entregavel);
133
+ const resultadoFormatado = formatarResultadoGate(resultado);
134
+ resposta = `# Gate da Fase ${numeroFase}: ${fase.nome}\n\n`;
135
+ resposta += `## ⚠️ Validação Legada (Template não disponível)\n\n`;
136
+ resposta += resultadoFormatado + "\n\n";
137
+ const skillAtual = getSkillParaFase(fase.nome);
138
+ if (skillAtual) {
139
+ const ide = estado.ide || detectIDE(args.diretorio) || 'windsurf';
140
+ const checklistPath = getSkillResourcePath(skillAtual, 'checklists', ide);
141
+ resposta += `## 📋 Checklist da Skill\n\n`;
142
+ resposta += `**Localização:** \`${checklistPath}\`\n\n`;
143
+ resposta += `> 💡 Consulte o checklist completo da skill para validação detalhada.\n\n`;
144
+ }
145
+ resposta += resultado.valido
146
+ ? "✅ **Você pode avançar!** Use `proximo(entregavel: \"...\", estado_json: \"...\")` para ir para a próxima fase."
147
+ : "⚠️ **Complete os itens pendentes** ou use `proximo(entregavel: \"...\", estado_json: \"...\", confirmar_usuario: true)` para forçar avanço.";
148
+ }
118
149
  return {
119
150
  content: [{ type: "text", text: resposta }],
120
151
  estado_atualizado: args.estado_json,
@@ -1 +1 @@
1
- {"version":3,"file":"validar-gate.js","sourceRoot":"","sources":["../../src/tools/validar-gate.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"validar-gate.js","sourceRoot":"","sources":["../../src/tools/validar-gate.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@maestro-ai/mcp-server",
3
- "version": "2.3.0",
3
+ "version": "2.4.0",
4
4
  "description": "MCP Server do Maestro v2.0 com otimizações, frontend-first e gerenciamento de tarefas",
5
5
  "type": "module",
6
6
  "main": "dist/stdio.js",