@maestro-ai/mcp-server 2.2.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.
- package/dist/gates/quality-scorer.d.ts +25 -0
- package/dist/gates/quality-scorer.d.ts.map +1 -0
- package/dist/gates/quality-scorer.js +233 -0
- package/dist/gates/quality-scorer.js.map +1 -0
- package/dist/gates/template-parser.d.ts +60 -0
- package/dist/gates/template-parser.d.ts.map +1 -0
- package/dist/gates/template-parser.js +221 -0
- package/dist/gates/template-parser.js.map +1 -0
- package/dist/gates/template-validator.d.ts +31 -0
- package/dist/gates/template-validator.d.ts.map +1 -0
- package/dist/gates/template-validator.js +252 -0
- package/dist/gates/template-validator.js.map +1 -0
- package/dist/gates/validator.d.ts +14 -1
- package/dist/gates/validator.d.ts.map +1 -1
- package/dist/gates/validator.js +66 -1
- package/dist/gates/validator.js.map +1 -1
- package/dist/tools/iniciar-projeto.d.ts +1 -1
- package/dist/tools/iniciar-projeto.d.ts.map +1 -1
- package/dist/tools/iniciar-projeto.js +64 -66
- package/dist/tools/iniciar-projeto.js.map +1 -1
- package/dist/tools/validar-gate.d.ts.map +1 -1
- package/dist/tools/validar-gate.js +56 -25
- package/dist/tools/validar-gate.js.map +1 -1
- package/package.json +1 -1
|
@@ -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
|
|
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;
|
|
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"}
|
package/dist/gates/validator.js
CHANGED
|
@@ -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
|
|
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":"AACA,OAAO,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"validator.js","sourceRoot":"","sources":["../../src/gates/validator.ts"],"names":[],"mappings":"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"}
|
|
@@ -14,7 +14,7 @@ interface ConfirmarProjetoArgs extends IniciarProjetoArgs {
|
|
|
14
14
|
}
|
|
15
15
|
/**
|
|
16
16
|
* Tool: iniciar_projeto
|
|
17
|
-
*
|
|
17
|
+
* Faz perguntas interativas sobre tipo, complexidade e modo
|
|
18
18
|
* NÃO CRIA ARQUIVOS AINDA
|
|
19
19
|
*/
|
|
20
20
|
export declare function iniciarProjeto(args: IniciarProjetoArgs): Promise<ToolResult>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"iniciar-projeto.d.ts","sourceRoot":"","sources":["../../src/tools/iniciar-projeto.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,UAAU,EAAE,YAAY,EAAE,iBAAiB,EAAY,MAAM,mBAAmB,CAAC;AAY/F,UAAU,kBAAkB;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,GAAG,CAAC,EAAE,UAAU,GAAG,QAAQ,GAAG,aAAa,CAAC;IAC5C,IAAI,CAAC,EAAE,SAAS,GAAG,UAAU,GAAG,SAAS,CAAC;CAC7C;AAED,UAAU,oBAAqB,SAAQ,kBAAkB;IACrD,aAAa,EAAE,YAAY,CAAC;IAC5B,kBAAkB,EAAE,iBAAiB,CAAC;IACtC,GAAG,EAAE,UAAU,GAAG,QAAQ,GAAG,aAAa,CAAC;IAC3C,IAAI,EAAE,SAAS,GAAG,UAAU,GAAG,SAAS,CAAC;CAC5C;AA8ED;;;;GAIG;AACH,wBAAsB,cAAc,CAAC,IAAI,EAAE,kBAAkB,GAAG,OAAO,CAAC,UAAU,CAAC,
|
|
1
|
+
{"version":3,"file":"iniciar-projeto.d.ts","sourceRoot":"","sources":["../../src/tools/iniciar-projeto.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,UAAU,EAAE,YAAY,EAAE,iBAAiB,EAAY,MAAM,mBAAmB,CAAC;AAY/F,UAAU,kBAAkB;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,GAAG,CAAC,EAAE,UAAU,GAAG,QAAQ,GAAG,aAAa,CAAC;IAC5C,IAAI,CAAC,EAAE,SAAS,GAAG,UAAU,GAAG,SAAS,CAAC;CAC7C;AAED,UAAU,oBAAqB,SAAQ,kBAAkB;IACrD,aAAa,EAAE,YAAY,CAAC;IAC5B,kBAAkB,EAAE,iBAAiB,CAAC;IACtC,GAAG,EAAE,UAAU,GAAG,QAAQ,GAAG,aAAa,CAAC;IAC3C,IAAI,EAAE,SAAS,GAAG,UAAU,GAAG,SAAS,CAAC;CAC5C;AA8ED;;;;GAIG;AACH,wBAAsB,cAAc,CAAC,IAAI,EAAE,kBAAkB,GAAG,OAAO,CAAC,UAAU,CAAC,CA4HlF;AAED;;;GAGG;AACH,wBAAsB,gBAAgB,CAAC,IAAI,EAAE,oBAAoB,GAAG,OAAO,CAAC,UAAU,CAAC,CA4KtF;AAED,eAAO,MAAM,oBAAoB;;;;;;;;;;;;;;;;;;;;;;;;;;;CAUhC,CAAC;AAEF,eAAO,MAAM,sBAAsB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAYlC,CAAC"}
|
|
@@ -2,7 +2,7 @@ import { randomUUID } from "crypto";
|
|
|
2
2
|
import { criarEstadoInicial, serializarEstado } from "../state/storage.js";
|
|
3
3
|
import { setCurrentDirectory } from "../state/context.js";
|
|
4
4
|
import { criarResumoInicial, serializarResumo } from "../state/memory.js";
|
|
5
|
-
import { determinarTierGate
|
|
5
|
+
import { determinarTierGate } from "../gates/tiers.js";
|
|
6
6
|
import { logEvent, EventTypes } from "../utils/history.js";
|
|
7
7
|
import { gerarSystemMd } from "../utils/system-md.js";
|
|
8
8
|
import { detectarStack, gerarSecaoPrompts, gerarSecaoExemplo, getSkillParaFase } from "../utils/prompt-mapper.js";
|
|
@@ -75,7 +75,7 @@ function getModoDescription(modo) {
|
|
|
75
75
|
}
|
|
76
76
|
/**
|
|
77
77
|
* Tool: iniciar_projeto
|
|
78
|
-
*
|
|
78
|
+
* Faz perguntas interativas sobre tipo, complexidade e modo
|
|
79
79
|
* NÃO CRIA ARQUIVOS AINDA
|
|
80
80
|
*/
|
|
81
81
|
export async function iniciarProjeto(args) {
|
|
@@ -87,80 +87,88 @@ export async function iniciarProjeto(args) {
|
|
|
87
87
|
}
|
|
88
88
|
// Normalizar e resolver diretório
|
|
89
89
|
const diretorio = resolveProjectPath(args.diretorio);
|
|
90
|
-
//
|
|
91
|
-
|
|
90
|
+
// Verificar IDE
|
|
91
|
+
if (!args.ide) {
|
|
92
|
+
return {
|
|
93
|
+
content: [{ type: "text", text: `# 🎯 Configuração do Projeto: ${args.nome}
|
|
94
|
+
|
|
95
|
+
## ❓ Pergunta 1/4: Qual IDE você está utilizando?
|
|
96
|
+
|
|
97
|
+
Escolha uma das opções:
|
|
98
|
+
|
|
99
|
+
- **windsurf**: Windsurf IDE
|
|
100
|
+
- **cursor**: Cursor IDE
|
|
101
|
+
- **antigravity**: Antigravity IDE
|
|
102
|
+
|
|
103
|
+
**Responda executando:**
|
|
104
|
+
\`\`\`
|
|
105
|
+
iniciar_projeto(
|
|
106
|
+
nome: "${args.nome}",
|
|
107
|
+
descricao: "${args.descricao || ''}",
|
|
108
|
+
diretorio: "${args.diretorio}",
|
|
109
|
+
ide: "windsurf" // Escolha: windsurf | cursor | antigravity
|
|
110
|
+
)
|
|
111
|
+
\`\`\`` }],
|
|
112
|
+
};
|
|
113
|
+
}
|
|
92
114
|
// 🚀 INJETAR CONTEÚDO AUTOMATICAMENTE
|
|
93
115
|
try {
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
console.error(`[INFO] Rules/Skills injetados para ${args.ide} em: ${injResult.targetDir}`);
|
|
97
|
-
}
|
|
98
|
-
else {
|
|
99
|
-
return {
|
|
100
|
-
content: [{ type: "text", text: `⚠️ **Ação Necessária**: Por favor, informe qual IDE você está utilizando para configurar o ambiente corretamente.\n\nExecute novamente o comando informando o parâmetro \`ide\`:\n\n- \`windsurf\`\n- \`cursor\`\n- \`antigravity\`\n\nExemplo:\n\`iniciar_projeto(..., ide: "cursor")\`` }],
|
|
101
|
-
};
|
|
102
|
-
}
|
|
116
|
+
const injResult = await injectContentForIDE(diretorio, args.ide);
|
|
117
|
+
console.error(`[INFO] Rules/Skills injetados para ${args.ide} em: ${injResult.targetDir}`);
|
|
103
118
|
}
|
|
104
119
|
catch (error) {
|
|
105
120
|
console.error('[WARN] Não foi possível injetar conteúdo:', error);
|
|
106
121
|
}
|
|
107
|
-
// Inferir
|
|
122
|
+
// Inferir sugestões baseadas na descrição
|
|
108
123
|
const inferenciaTipo = inferirTipoArtefato(args.nome, args.descricao);
|
|
109
124
|
const inferenciaNivel = inferirComplexidade(inferenciaTipo.tipo, args.descricao);
|
|
110
|
-
const tierSugerido = determinarTierGate(inferenciaTipo.tipo, inferenciaNivel.nivel);
|
|
111
|
-
// Validação de segurança
|
|
112
|
-
if (!tierSugerido) {
|
|
113
|
-
return {
|
|
114
|
-
content: [{ type: "text", text: "❌ Erro: Não foi possível determinar o tier do projeto." }],
|
|
115
|
-
isError: true,
|
|
116
|
-
};
|
|
117
|
-
}
|
|
118
|
-
const descricaoTier = descreverTier(tierSugerido);
|
|
119
|
-
// Mapear modo para nível de complexidade se não especificado
|
|
120
125
|
const modoSugerido = args.modo || mapearModoParaNivel(inferenciaTipo.tipo);
|
|
121
|
-
const resposta = `#
|
|
126
|
+
const resposta = `# 🎯 Configuração do Projeto: ${args.nome}
|
|
122
127
|
|
|
123
|
-
Analisei a descrição
|
|
124
|
-
|
|
125
|
-
| Configuração | Sugestão | Motivo |
|
|
126
|
-
|---|---|---|
|
|
127
|
-
| **Tipo de Artefato** | \`${inferenciaTipo.tipo}\` | ${inferenciaTipo.razao} |
|
|
128
|
-
| **Complexidade** | \`${inferenciaNivel.nivel}\` | ${inferenciaNivel.razao} |
|
|
129
|
-
| **Tier de Gates** | **${tierSugerido?.toUpperCase() || 'N/A'}** | ${descricaoTier} |
|
|
130
|
-
| **Modo** | **${modoSugerido.toUpperCase()}** | ${getModoDescription(modoSugerido)} |
|
|
128
|
+
Analisei a descrição do projeto. Agora preciso de algumas informações para configurar corretamente:
|
|
131
129
|
|
|
132
130
|
---
|
|
133
131
|
|
|
134
|
-
##
|
|
132
|
+
## ❓ Pergunta 2/4: Qual o tipo de artefato?
|
|
133
|
+
|
|
134
|
+
**Sugestão baseada na análise:** \`${inferenciaTipo.tipo}\` (${inferenciaTipo.razao})
|
|
135
|
+
|
|
136
|
+
### Opções disponíveis:
|
|
135
137
|
|
|
136
|
-
### Tipo de Artefato
|
|
137
138
|
- **poc**: Prova de conceito, experimentos rápidos
|
|
138
139
|
- **script**: Automações, CLIs, ferramentas de linha de comando
|
|
139
140
|
- **internal**: Ferramentas internas, backoffice, dashboards
|
|
140
|
-
- **product**: Sistemas voltados ao usuário final
|
|
141
|
+
- **product**: Sistemas voltados ao usuário final
|
|
142
|
+
|
|
143
|
+
---
|
|
144
|
+
|
|
145
|
+
## ❓ Pergunta 3/4: Qual a complexidade do projeto?
|
|
146
|
+
|
|
147
|
+
**Sugestão baseada na análise:** \`${inferenciaNivel.nivel}\` (${inferenciaNivel.razao})
|
|
148
|
+
|
|
149
|
+
### Opções disponíveis:
|
|
141
150
|
|
|
142
|
-
### Complexidade
|
|
143
151
|
- **simples**: CRUDs básicos, landing pages, scripts simples
|
|
144
|
-
- **medio**: Aplicações web/mobile padrão
|
|
152
|
+
- **medio**: Aplicações web/mobile padrão
|
|
145
153
|
- **complexo**: Microserviços, sistemas distribuídos, alta escala
|
|
146
154
|
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
155
|
+
---
|
|
156
|
+
|
|
157
|
+
## ❓ Pergunta 4/4: Qual modo de execução deseja?
|
|
158
|
+
|
|
159
|
+
**Sugestão baseada no tipo:** \`${modoSugerido}\`
|
|
160
|
+
|
|
161
|
+
### Opções disponíveis:
|
|
151
162
|
|
|
152
|
-
### Modo de Execução
|
|
153
163
|
- **economy**: Rápido - 7 fases, perguntas mínimas, validação essencial
|
|
154
|
-
- **balanced**: Equilibrado - 13 fases, perguntas moderadas, validação completa
|
|
164
|
+
- **balanced**: Equilibrado - 13 fases, perguntas moderadas, validação completa
|
|
155
165
|
- **quality**: Qualidade - 17 fases, perguntas detalhadas, validação avançada
|
|
156
166
|
|
|
157
167
|
---
|
|
158
168
|
|
|
159
|
-
## 🚦
|
|
169
|
+
## 🚦 Confirme as Configurações
|
|
160
170
|
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
**Opção 1: Concordo (Criar como sugerido)**
|
|
171
|
+
**Opção 1: Usar sugestões (Recomendado)**
|
|
164
172
|
\`\`\`
|
|
165
173
|
confirmar_projeto(
|
|
166
174
|
nome: "${args.nome}",
|
|
@@ -173,16 +181,16 @@ confirmar_projeto(
|
|
|
173
181
|
)
|
|
174
182
|
\`\`\`
|
|
175
183
|
|
|
176
|
-
**Opção 2:
|
|
184
|
+
**Opção 2: Personalizar**
|
|
177
185
|
\`\`\`
|
|
178
186
|
confirmar_projeto(
|
|
179
187
|
nome: "${args.nome}",
|
|
180
188
|
descricao: "${args.descricao || ''}",
|
|
181
189
|
diretorio: "${args.diretorio}",
|
|
182
190
|
tipo_artefato: "product", // poc | script | internal | product
|
|
183
|
-
nivel_complexidade: "
|
|
191
|
+
nivel_complexidade: "medio", // simples | medio | complexo
|
|
184
192
|
ide: "${args.ide}",
|
|
185
|
-
modo: "
|
|
193
|
+
modo: "balanced" // economy | balanced | quality
|
|
186
194
|
)
|
|
187
195
|
\`\`\`
|
|
188
196
|
`;
|
|
@@ -326,20 +334,9 @@ ${args.modo === 'economy' ?
|
|
|
326
334
|
'**Modo Quality:** Vamos coletar informações detalhadas para garantir máxima qualidade.' :
|
|
327
335
|
'**Modo Balanced:** Vamos coletar informações moderadas para equilibrar velocidade e qualidade.'}
|
|
328
336
|
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
\`\`\`typescript
|
|
332
|
-
// 1. Ler o estado.json criado
|
|
333
|
-
const estadoJson = await readFile('${diretorio}/.maestro/estado.json');
|
|
337
|
+
O processo de **Discovery** será conduzido através da ferramenta MCP \`discovery\` ou pelo especialista skill ativado. Ele irá gerar um questionário agrupado adaptado ao modo selecionado e coletar as informações necessárias para o projeto.
|
|
334
338
|
|
|
335
|
-
|
|
336
|
-
await mcp_maestro_discovery({
|
|
337
|
-
estado_json: estadoJson,
|
|
338
|
-
diretorio: "${diretorio}"
|
|
339
|
-
});
|
|
340
|
-
\`\`\`
|
|
341
|
-
|
|
342
|
-
Isso irá gerar um questionário agrupado adaptado ao modo selecionado. Após o usuário responder, execute novamente com o parâmetro \`respostas\` preenchido. Os especialistas terão todo o contexto necessário!
|
|
339
|
+
Após a coleta, todos os especialistas terão o contexto completo para trabalhar!
|
|
343
340
|
|
|
344
341
|
---
|
|
345
342
|
|
|
@@ -351,10 +348,11 @@ Se desejar, você pode usar o **Google Stitch** para prototipagem de UI após a
|
|
|
351
348
|
|
|
352
349
|
---
|
|
353
350
|
|
|
354
|
-
##
|
|
351
|
+
## � Próximos Passos
|
|
355
352
|
|
|
356
|
-
Se não for usar o Stitch, você pode iniciar a Fase 1 (Produto) direto.
|
|
357
353
|
O projeto foi inicializado no Tier **${tier?.toUpperCase() || 'N/A'}**.
|
|
354
|
+
|
|
355
|
+
Você pode iniciar a Fase 1 (Produto) diretamente ou usar o Google Stitch para prototipagem rápida.
|
|
358
356
|
${gerarSecaoPrompts("Produto")}
|
|
359
357
|
${gerarSecaoExemplo(detectarStack(args.nome, args.descricao))}
|
|
360
358
|
`;
|