@maestro-ai/mcp-server 5.3.7 → 5.3.8
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/flows/classifier.d.ts +12 -0
- package/dist/flows/classifier.d.ts.map +1 -1
- package/dist/flows/classifier.js +12 -0
- package/dist/flows/classifier.js.map +1 -1
- package/dist/handlers/specialist-phase-handler.d.ts.map +1 -1
- package/dist/handlers/specialist-phase-handler.js +103 -22
- package/dist/handlers/specialist-phase-handler.js.map +1 -1
- package/dist/middleware/index.d.ts +1 -0
- package/dist/middleware/index.d.ts.map +1 -1
- package/dist/middleware/index.js +1 -0
- package/dist/middleware/index.js.map +1 -1
- package/dist/middleware/validation.middleware.d.ts +31 -0
- package/dist/middleware/validation.middleware.d.ts.map +1 -0
- package/dist/middleware/validation.middleware.js +75 -0
- package/dist/middleware/validation.middleware.js.map +1 -0
- package/dist/services/auto-classifier.service.d.ts +91 -0
- package/dist/services/auto-classifier.service.d.ts.map +1 -0
- package/dist/services/auto-classifier.service.js +531 -0
- package/dist/services/auto-classifier.service.js.map +1 -0
- package/dist/services/classificacao-progressiva.service.d.ts +69 -0
- package/dist/services/classificacao-progressiva.service.d.ts.map +1 -0
- package/dist/services/classificacao-progressiva.service.js +500 -0
- package/dist/services/classificacao-progressiva.service.js.map +1 -0
- package/dist/services/prompt-validator.service.d.ts +20 -0
- package/dist/services/prompt-validator.service.d.ts.map +1 -0
- package/dist/services/prompt-validator.service.js +53 -0
- package/dist/services/prompt-validator.service.js.map +1 -0
- package/dist/tests/classificacao-progressiva.test.d.ts +5 -0
- package/dist/tests/classificacao-progressiva.test.d.ts.map +1 -0
- package/dist/tests/classificacao-progressiva.test.js +372 -0
- package/dist/tests/classificacao-progressiva.test.js.map +1 -0
- package/dist/tools/consolidated/avancar.d.ts.map +1 -1
- package/dist/tools/consolidated/avancar.js +49 -9
- package/dist/tools/consolidated/avancar.js.map +1 -1
- package/dist/tools/proximo.d.ts.map +1 -1
- package/dist/tools/proximo.js +90 -91
- package/dist/tools/proximo.js.map +1 -1
- package/dist/types/index.d.ts +21 -0
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/index.js.map +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ClassificacaoProgressivaService v6.0
|
|
3
|
+
*
|
|
4
|
+
* Serviço de classificação progressiva que acumula sinais ao longo das fases
|
|
5
|
+
* e refina a classificação continuamente, em vez de decidir tudo no PRD.
|
|
6
|
+
*
|
|
7
|
+
* Features:
|
|
8
|
+
* - Acumula sinais de múltiplas fases (Produto, Requisitos, Arquitetura)
|
|
9
|
+
* - Recalcula classificação com todos os sinais acumulados
|
|
10
|
+
* - Detecta necessidade de expansão do fluxo (simples → médio → complexo)
|
|
11
|
+
* - Nunca reduz complexidade (proteção contra regressão)
|
|
12
|
+
*/
|
|
13
|
+
import type { NivelComplexidade, SinalClassificacao, Fase } from "../types/index.js";
|
|
14
|
+
/**
|
|
15
|
+
* Serviço principal de classificação progressiva
|
|
16
|
+
*/
|
|
17
|
+
export declare class ClassificacaoProgressivaService {
|
|
18
|
+
/**
|
|
19
|
+
* Registra sinais extraídos do entregável de cada fase
|
|
20
|
+
*/
|
|
21
|
+
registrarSinais(entregavel: string, fase: Fase, sinaisExistentes: SinalClassificacao[]): SinalClassificacao[];
|
|
22
|
+
/**
|
|
23
|
+
* Recalcula classificação com todos os sinais acumulados
|
|
24
|
+
*/
|
|
25
|
+
recalcular(sinais: SinalClassificacao[]): {
|
|
26
|
+
nivel: NivelComplexidade;
|
|
27
|
+
confianca: number;
|
|
28
|
+
criterios: string[];
|
|
29
|
+
};
|
|
30
|
+
/**
|
|
31
|
+
* Verifica se o nível precisa mudar (expansão)
|
|
32
|
+
*/
|
|
33
|
+
verificarExpansao(nivelAtual: NivelComplexidade, nivelCalculado: NivelComplexidade, faseAtual: number): {
|
|
34
|
+
expandir: boolean;
|
|
35
|
+
de: NivelComplexidade;
|
|
36
|
+
para: NivelComplexidade;
|
|
37
|
+
fasesAdicionadas: number;
|
|
38
|
+
};
|
|
39
|
+
/**
|
|
40
|
+
* Extrai sinais do PRD (Fase 1: Produto)
|
|
41
|
+
*/
|
|
42
|
+
private extrairSinaisProduto;
|
|
43
|
+
/**
|
|
44
|
+
* Extrai sinais do documento de Requisitos (Fase 2)
|
|
45
|
+
*/
|
|
46
|
+
private extrairSinaisRequisitos;
|
|
47
|
+
/**
|
|
48
|
+
* Extrai sinais do documento de Arquitetura (Fase 4+)
|
|
49
|
+
*/
|
|
50
|
+
private extrairSinaisArquitetura;
|
|
51
|
+
/**
|
|
52
|
+
* Extrai sinais do documento de UX/Design (Fase 3)
|
|
53
|
+
*/
|
|
54
|
+
private extrairSinaisUX;
|
|
55
|
+
/**
|
|
56
|
+
* Extrator genérico para outras fases
|
|
57
|
+
*/
|
|
58
|
+
private extrairSinaisGenerico;
|
|
59
|
+
/**
|
|
60
|
+
* Agrupa sinais por categoria
|
|
61
|
+
*/
|
|
62
|
+
private agruparPorCategoria;
|
|
63
|
+
/**
|
|
64
|
+
* Retorna o sinal com maior confiança de um array
|
|
65
|
+
*/
|
|
66
|
+
private melhorSinal;
|
|
67
|
+
}
|
|
68
|
+
export declare const classificacaoProgressiva: ClassificacaoProgressivaService;
|
|
69
|
+
//# sourceMappingURL=classificacao-progressiva.service.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"classificacao-progressiva.service.d.ts","sourceRoot":"","sources":["../../src/services/classificacao-progressiva.service.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,KAAK,EACR,iBAAiB,EACjB,kBAAkB,EAElB,IAAI,EACP,MAAM,mBAAmB,CAAC;AAE3B;;GAEG;AACH,qBAAa,+BAA+B;IACxC;;OAEG;IACH,eAAe,CACX,UAAU,EAAE,MAAM,EAClB,IAAI,EAAE,IAAI,EACV,gBAAgB,EAAE,kBAAkB,EAAE,GACvC,kBAAkB,EAAE;IAgCvB;;OAEG;IACH,UAAU,CAAC,MAAM,EAAE,kBAAkB,EAAE,GAAG;QACtC,KAAK,EAAE,iBAAiB,CAAC;QACzB,SAAS,EAAE,MAAM,CAAC;QAClB,SAAS,EAAE,MAAM,EAAE,CAAA;KACtB;IAmFD;;OAEG;IACH,iBAAiB,CACb,UAAU,EAAE,iBAAiB,EAC7B,cAAc,EAAE,iBAAiB,EACjC,SAAS,EAAE,MAAM,GAClB;QACC,QAAQ,EAAE,OAAO,CAAC;QAClB,EAAE,EAAE,iBAAiB,CAAC;QACtB,IAAI,EAAE,iBAAiB,CAAC;QACxB,gBAAgB,EAAE,MAAM,CAAC;KAC5B;IA4BD;;OAEG;IACH,OAAO,CAAC,oBAAoB;IAgF5B;;OAEG;IACH,OAAO,CAAC,uBAAuB;IA+D/B;;OAEG;IACH,OAAO,CAAC,wBAAwB;IAyHhC;;OAEG;IACH,OAAO,CAAC,eAAe;IAsDvB;;OAEG;IACH,OAAO,CAAC,qBAAqB;IAgB7B;;OAEG;IACH,OAAO,CAAC,mBAAmB;IAW3B;;OAEG;IACH,OAAO,CAAC,WAAW;CAKtB;AAGD,eAAO,MAAM,wBAAwB,iCAAwC,CAAC"}
|
|
@@ -0,0 +1,500 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ClassificacaoProgressivaService v6.0
|
|
3
|
+
*
|
|
4
|
+
* Serviço de classificação progressiva que acumula sinais ao longo das fases
|
|
5
|
+
* e refina a classificação continuamente, em vez de decidir tudo no PRD.
|
|
6
|
+
*
|
|
7
|
+
* Features:
|
|
8
|
+
* - Acumula sinais de múltiplas fases (Produto, Requisitos, Arquitetura)
|
|
9
|
+
* - Recalcula classificação com todos os sinais acumulados
|
|
10
|
+
* - Detecta necessidade de expansão do fluxo (simples → médio → complexo)
|
|
11
|
+
* - Nunca reduz complexidade (proteção contra regressão)
|
|
12
|
+
*/
|
|
13
|
+
/**
|
|
14
|
+
* Serviço principal de classificação progressiva
|
|
15
|
+
*/
|
|
16
|
+
export class ClassificacaoProgressivaService {
|
|
17
|
+
/**
|
|
18
|
+
* Registra sinais extraídos do entregável de cada fase
|
|
19
|
+
*/
|
|
20
|
+
registrarSinais(entregavel, fase, sinaisExistentes) {
|
|
21
|
+
const novosSinais = [];
|
|
22
|
+
const timestamp = new Date().toISOString();
|
|
23
|
+
// Extrair sinais específicos por tipo de fase
|
|
24
|
+
if (fase.numero === 1 || fase.nome.toLowerCase().includes("produto")) {
|
|
25
|
+
novosSinais.push(...this.extrairSinaisProduto(entregavel, fase.numero, timestamp));
|
|
26
|
+
}
|
|
27
|
+
else if (fase.nome.toLowerCase().includes("requisito")) {
|
|
28
|
+
novosSinais.push(...this.extrairSinaisRequisitos(entregavel, fase.numero, timestamp));
|
|
29
|
+
}
|
|
30
|
+
else if (fase.nome.toLowerCase().includes("arquitetura")) {
|
|
31
|
+
novosSinais.push(...this.extrairSinaisArquitetura(entregavel, fase.numero, timestamp));
|
|
32
|
+
}
|
|
33
|
+
else if (fase.nome.toLowerCase().includes("ux") || fase.nome.toLowerCase().includes("design")) {
|
|
34
|
+
novosSinais.push(...this.extrairSinaisUX(entregavel, fase.numero, timestamp));
|
|
35
|
+
}
|
|
36
|
+
else {
|
|
37
|
+
// Extrator genérico para outras fases
|
|
38
|
+
novosSinais.push(...this.extrairSinaisGenerico(entregavel, fase, timestamp));
|
|
39
|
+
}
|
|
40
|
+
// Combinar com sinais existentes (deduplicar por categoria+valor)
|
|
41
|
+
const sinaisCombinados = [...sinaisExistentes];
|
|
42
|
+
for (const novoSinal of novosSinais) {
|
|
43
|
+
const jaExiste = sinaisExistentes.some(s => s.categoria === novoSinal.categoria && s.valor === novoSinal.valor);
|
|
44
|
+
if (!jaExiste) {
|
|
45
|
+
sinaisCombinados.push(novoSinal);
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
return sinaisCombinados;
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* Recalcula classificação com todos os sinais acumulados
|
|
52
|
+
*/
|
|
53
|
+
recalcular(sinais) {
|
|
54
|
+
let pontos = 0;
|
|
55
|
+
const criterios = [];
|
|
56
|
+
let confiancaTotal = 0;
|
|
57
|
+
// Agrupar sinais por categoria
|
|
58
|
+
const sinaisPorCategoria = this.agruparPorCategoria(sinais);
|
|
59
|
+
// Domínio (peso 1.0)
|
|
60
|
+
const sinaisDominio = sinaisPorCategoria.get("dominio") || [];
|
|
61
|
+
if (sinaisDominio.length > 0) {
|
|
62
|
+
const melhorDominio = this.melhorSinal(sinaisDominio);
|
|
63
|
+
criterios.push(`Domínio: ${melhorDominio.valor}`);
|
|
64
|
+
confiancaTotal += melhorDominio.confianca * 100;
|
|
65
|
+
}
|
|
66
|
+
// Stack (peso 1.5 - mais importante)
|
|
67
|
+
const sinaisStack = sinaisPorCategoria.get("stack") || [];
|
|
68
|
+
if (sinaisStack.length > 0) {
|
|
69
|
+
pontos += sinaisStack.length * 2;
|
|
70
|
+
criterios.push(`Stack definida (${sinaisStack.length} componentes)`);
|
|
71
|
+
const confiancaMedia = sinaisStack.reduce((acc, s) => acc + s.confianca, 0) / sinaisStack.length;
|
|
72
|
+
confiancaTotal += confiancaMedia * 100 * 1.5;
|
|
73
|
+
}
|
|
74
|
+
// Integrações (peso 2.0 - muito importante)
|
|
75
|
+
const sinaisIntegracao = sinaisPorCategoria.get("integracao") || [];
|
|
76
|
+
if (sinaisIntegracao.length >= 3) {
|
|
77
|
+
pontos += 5;
|
|
78
|
+
criterios.push(`Múltiplas integrações (${sinaisIntegracao.length})`);
|
|
79
|
+
confiancaTotal += 85 * 2.0;
|
|
80
|
+
}
|
|
81
|
+
else if (sinaisIntegracao.length > 0) {
|
|
82
|
+
pontos += sinaisIntegracao.length;
|
|
83
|
+
criterios.push(`Integrações: ${sinaisIntegracao.map(s => s.valor).join(", ")}`);
|
|
84
|
+
confiancaTotal += 70;
|
|
85
|
+
}
|
|
86
|
+
// Segurança/Compliance (peso 2.5 - crítico)
|
|
87
|
+
const sinaisSeguranca = sinaisPorCategoria.get("seguranca") || [];
|
|
88
|
+
if (sinaisSeguranca.length > 0) {
|
|
89
|
+
pontos += sinaisSeguranca.length * 3;
|
|
90
|
+
criterios.push(`Requisitos de segurança: ${sinaisSeguranca.map(s => s.valor).join(", ")}`);
|
|
91
|
+
confiancaTotal += 90 * 2.5;
|
|
92
|
+
}
|
|
93
|
+
// Volume (peso 1.8)
|
|
94
|
+
const sinaisVolume = sinaisPorCategoria.get("volume") || [];
|
|
95
|
+
if (sinaisVolume.length > 0) {
|
|
96
|
+
const melhorVolume = this.melhorSinal(sinaisVolume);
|
|
97
|
+
if (melhorVolume.valor.includes("Alto") || melhorVolume.valor.includes("10k+")) {
|
|
98
|
+
pontos += 4;
|
|
99
|
+
criterios.push(`Alto volume: ${melhorVolume.valor}`);
|
|
100
|
+
confiancaTotal += 80 * 1.8;
|
|
101
|
+
}
|
|
102
|
+
else {
|
|
103
|
+
pontos += 1;
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
// Equipe (peso 0.8 - menos importante)
|
|
107
|
+
const sinaisEquipe = sinaisPorCategoria.get("equipe") || [];
|
|
108
|
+
if (sinaisEquipe.length > 0) {
|
|
109
|
+
const melhorEquipe = this.melhorSinal(sinaisEquipe);
|
|
110
|
+
criterios.push(`Equipe: ${melhorEquipe.valor}`);
|
|
111
|
+
confiancaTotal += melhorEquipe.confianca * 100 * 0.8;
|
|
112
|
+
}
|
|
113
|
+
// Determinar nível baseado em pontos
|
|
114
|
+
let nivel;
|
|
115
|
+
if (pontos <= 8) {
|
|
116
|
+
nivel = "simples";
|
|
117
|
+
}
|
|
118
|
+
else if (pontos <= 18) {
|
|
119
|
+
nivel = "medio";
|
|
120
|
+
}
|
|
121
|
+
else {
|
|
122
|
+
nivel = "complexo";
|
|
123
|
+
}
|
|
124
|
+
// Calcular confiança geral (normalizada)
|
|
125
|
+
const pesoTotal = 1.0 + 1.5 + 2.0 + 2.5 + 1.8 + 0.8; // soma dos pesos
|
|
126
|
+
const confianca = Math.min(Math.round(confiancaTotal / pesoTotal), 100);
|
|
127
|
+
return { nivel, confianca, criterios };
|
|
128
|
+
}
|
|
129
|
+
/**
|
|
130
|
+
* Verifica se o nível precisa mudar (expansão)
|
|
131
|
+
*/
|
|
132
|
+
verificarExpansao(nivelAtual, nivelCalculado, faseAtual) {
|
|
133
|
+
const ordem = {
|
|
134
|
+
"simples": 1,
|
|
135
|
+
"medio": 2,
|
|
136
|
+
"complexo": 3
|
|
137
|
+
};
|
|
138
|
+
const expandir = ordem[nivelCalculado] > ordem[nivelAtual];
|
|
139
|
+
let fasesAdicionadas = 0;
|
|
140
|
+
if (expandir) {
|
|
141
|
+
// Simples: 7 fases, Médio: 13 fases, Complexo: 17 fases
|
|
142
|
+
const fasesPorNivel = {
|
|
143
|
+
"simples": 7,
|
|
144
|
+
"medio": 13,
|
|
145
|
+
"complexo": 17
|
|
146
|
+
};
|
|
147
|
+
fasesAdicionadas = fasesPorNivel[nivelCalculado] - fasesPorNivel[nivelAtual];
|
|
148
|
+
}
|
|
149
|
+
return {
|
|
150
|
+
expandir,
|
|
151
|
+
de: nivelAtual,
|
|
152
|
+
para: nivelCalculado,
|
|
153
|
+
fasesAdicionadas
|
|
154
|
+
};
|
|
155
|
+
}
|
|
156
|
+
/**
|
|
157
|
+
* Extrai sinais do PRD (Fase 1: Produto)
|
|
158
|
+
*/
|
|
159
|
+
extrairSinaisProduto(entregavel, fase, timestamp) {
|
|
160
|
+
const sinais = [];
|
|
161
|
+
// Domínio
|
|
162
|
+
const dominioPatterns = [
|
|
163
|
+
{ pattern: /e-?commerce|loja|venda|produto|pedido|carrinho/i, nome: "E-commerce" },
|
|
164
|
+
{ pattern: /saas|assinatura|subscription|mensalidade/i, nome: "SaaS" },
|
|
165
|
+
{ pattern: /marketplace|multi-?vendor/i, nome: "Marketplace" },
|
|
166
|
+
{ pattern: /dashboard|relatório|bi|analytics/i, nome: "Dashboard/BI" },
|
|
167
|
+
{ pattern: /educação|curso|aula|escola|e-?learning/i, nome: "EdTech" },
|
|
168
|
+
{ pattern: /saúde|médico|clínica|hospital|paciente/i, nome: "HealthTech" },
|
|
169
|
+
{ pattern: /financeiro|banco|fintech|pagamento/i, nome: "FinTech" },
|
|
170
|
+
{ pattern: /social|rede|comunidade|chat|mensagem/i, nome: "Social/Comunidade" },
|
|
171
|
+
];
|
|
172
|
+
for (const { pattern, nome } of dominioPatterns) {
|
|
173
|
+
if (pattern.test(entregavel)) {
|
|
174
|
+
sinais.push({
|
|
175
|
+
fase,
|
|
176
|
+
fonte: "prd",
|
|
177
|
+
categoria: "dominio",
|
|
178
|
+
valor: nome,
|
|
179
|
+
confianca: 0.75,
|
|
180
|
+
timestamp
|
|
181
|
+
});
|
|
182
|
+
break; // apenas um domínio
|
|
183
|
+
}
|
|
184
|
+
}
|
|
185
|
+
// Escopo funcional (número de funcionalidades mencionadas)
|
|
186
|
+
const funcionalidades = (entregavel.match(/funcionalidade|feature|capacidade/gi) || []).length;
|
|
187
|
+
if (funcionalidades > 15) {
|
|
188
|
+
sinais.push({
|
|
189
|
+
fase,
|
|
190
|
+
fonte: "prd",
|
|
191
|
+
categoria: "escopo",
|
|
192
|
+
valor: "Alto (15+ funcionalidades)",
|
|
193
|
+
confianca: 0.7,
|
|
194
|
+
timestamp
|
|
195
|
+
});
|
|
196
|
+
}
|
|
197
|
+
else if (funcionalidades > 8) {
|
|
198
|
+
sinais.push({
|
|
199
|
+
fase,
|
|
200
|
+
fonte: "prd",
|
|
201
|
+
categoria: "escopo",
|
|
202
|
+
valor: "Médio (8-15 funcionalidades)",
|
|
203
|
+
confianca: 0.7,
|
|
204
|
+
timestamp
|
|
205
|
+
});
|
|
206
|
+
}
|
|
207
|
+
else {
|
|
208
|
+
sinais.push({
|
|
209
|
+
fase,
|
|
210
|
+
fonte: "prd",
|
|
211
|
+
categoria: "escopo",
|
|
212
|
+
valor: "Baixo (<8 funcionalidades)",
|
|
213
|
+
confianca: 0.7,
|
|
214
|
+
timestamp
|
|
215
|
+
});
|
|
216
|
+
}
|
|
217
|
+
// Timeline
|
|
218
|
+
const cronogramaMatch = entregavel.match(/(\d+)\s*(meses?|semanas?)/i);
|
|
219
|
+
if (cronogramaMatch) {
|
|
220
|
+
const tempo = parseInt(cronogramaMatch[1]);
|
|
221
|
+
const unidade = cronogramaMatch[2].toLowerCase();
|
|
222
|
+
const tempoEmMeses = unidade.startsWith("semana") ? tempo / 4 : tempo;
|
|
223
|
+
sinais.push({
|
|
224
|
+
fase,
|
|
225
|
+
fonte: "prd",
|
|
226
|
+
categoria: "timeline",
|
|
227
|
+
valor: tempoEmMeses > 6 ? "Longo (>6 meses)" : tempoEmMeses > 3 ? "Médio (3-6 meses)" : "Curto (<3 meses)",
|
|
228
|
+
confianca: 0.9,
|
|
229
|
+
timestamp
|
|
230
|
+
});
|
|
231
|
+
}
|
|
232
|
+
return sinais;
|
|
233
|
+
}
|
|
234
|
+
/**
|
|
235
|
+
* Extrai sinais do documento de Requisitos (Fase 2)
|
|
236
|
+
*/
|
|
237
|
+
extrairSinaisRequisitos(entregavel, fase, timestamp) {
|
|
238
|
+
const sinais = [];
|
|
239
|
+
// Compliance/Segurança
|
|
240
|
+
const compliancePatterns = [
|
|
241
|
+
{ pattern: /lgpd|gdpr|lei\s*de\s*dados/i, nome: "LGPD/GDPR" },
|
|
242
|
+
{ pattern: /pci-?dss|cartão|crédito/i, nome: "PCI-DSS" },
|
|
243
|
+
{ pattern: /hipaa|saúde|médico/i, nome: "HIPAA" },
|
|
244
|
+
{ pattern: /sox|sarbanes/i, nome: "SOX" },
|
|
245
|
+
];
|
|
246
|
+
for (const { pattern, nome } of compliancePatterns) {
|
|
247
|
+
if (pattern.test(entregavel)) {
|
|
248
|
+
sinais.push({
|
|
249
|
+
fase,
|
|
250
|
+
fonte: "requisitos",
|
|
251
|
+
categoria: "seguranca",
|
|
252
|
+
valor: nome,
|
|
253
|
+
confianca: 0.9,
|
|
254
|
+
timestamp
|
|
255
|
+
});
|
|
256
|
+
}
|
|
257
|
+
}
|
|
258
|
+
// Autenticação/Autorização
|
|
259
|
+
if (/autenticação|autorização|jwt|oauth|sso|2fa|mfa/i.test(entregavel)) {
|
|
260
|
+
sinais.push({
|
|
261
|
+
fase,
|
|
262
|
+
fonte: "requisitos",
|
|
263
|
+
categoria: "seguranca",
|
|
264
|
+
valor: "Autenticação avançada",
|
|
265
|
+
confianca: 0.85,
|
|
266
|
+
timestamp
|
|
267
|
+
});
|
|
268
|
+
}
|
|
269
|
+
// Performance/NFRs
|
|
270
|
+
if (/performance|latência|throughput|sla|uptime/i.test(entregavel)) {
|
|
271
|
+
sinais.push({
|
|
272
|
+
fase,
|
|
273
|
+
fonte: "requisitos",
|
|
274
|
+
categoria: "nfr",
|
|
275
|
+
valor: "Requisitos de performance",
|
|
276
|
+
confianca: 0.8,
|
|
277
|
+
timestamp
|
|
278
|
+
});
|
|
279
|
+
}
|
|
280
|
+
// Escalabilidade
|
|
281
|
+
if (/escala|escalabilidade|milhares|milhões|concorrência/i.test(entregavel)) {
|
|
282
|
+
sinais.push({
|
|
283
|
+
fase,
|
|
284
|
+
fonte: "requisitos",
|
|
285
|
+
categoria: "volume",
|
|
286
|
+
valor: "Alto volume esperado",
|
|
287
|
+
confianca: 0.75,
|
|
288
|
+
timestamp
|
|
289
|
+
});
|
|
290
|
+
}
|
|
291
|
+
return sinais;
|
|
292
|
+
}
|
|
293
|
+
/**
|
|
294
|
+
* Extrai sinais do documento de Arquitetura (Fase 4+)
|
|
295
|
+
*/
|
|
296
|
+
extrairSinaisArquitetura(entregavel, fase, timestamp) {
|
|
297
|
+
const sinais = [];
|
|
298
|
+
// Stack - Frontend
|
|
299
|
+
const frontendPatterns = [
|
|
300
|
+
{ pattern: /react|next\.?js/i, nome: "React/Next.js" },
|
|
301
|
+
{ pattern: /vue|nuxt\.?js/i, nome: "Vue/Nuxt.js" },
|
|
302
|
+
{ pattern: /angular/i, nome: "Angular" },
|
|
303
|
+
{ pattern: /flutter|react native/i, nome: "Mobile (Flutter/RN)" },
|
|
304
|
+
];
|
|
305
|
+
for (const { pattern, nome } of frontendPatterns) {
|
|
306
|
+
if (pattern.test(entregavel)) {
|
|
307
|
+
sinais.push({
|
|
308
|
+
fase,
|
|
309
|
+
fonte: "arquitetura",
|
|
310
|
+
categoria: "stack",
|
|
311
|
+
valor: `Frontend: ${nome}`,
|
|
312
|
+
confianca: 0.95,
|
|
313
|
+
timestamp
|
|
314
|
+
});
|
|
315
|
+
break;
|
|
316
|
+
}
|
|
317
|
+
}
|
|
318
|
+
// Stack - Backend
|
|
319
|
+
const backendPatterns = [
|
|
320
|
+
{ pattern: /node\.?js|express|nestjs/i, nome: "Node.js" },
|
|
321
|
+
{ pattern: /python|django|fastapi|flask/i, nome: "Python" },
|
|
322
|
+
{ pattern: /java|spring/i, nome: "Java/Spring" },
|
|
323
|
+
{ pattern: /go|golang/i, nome: "Go" },
|
|
324
|
+
{ pattern: /\.net|csharp|c#/i, nome: ".NET/C#" },
|
|
325
|
+
];
|
|
326
|
+
for (const { pattern, nome } of backendPatterns) {
|
|
327
|
+
if (pattern.test(entregavel)) {
|
|
328
|
+
sinais.push({
|
|
329
|
+
fase,
|
|
330
|
+
fonte: "arquitetura",
|
|
331
|
+
categoria: "stack",
|
|
332
|
+
valor: `Backend: ${nome}`,
|
|
333
|
+
confianca: 0.95,
|
|
334
|
+
timestamp
|
|
335
|
+
});
|
|
336
|
+
break;
|
|
337
|
+
}
|
|
338
|
+
}
|
|
339
|
+
// Stack - Database
|
|
340
|
+
const dbPatterns = [
|
|
341
|
+
{ pattern: /postgresql|postgres/i, nome: "PostgreSQL" },
|
|
342
|
+
{ pattern: /mongodb|mongo/i, nome: "MongoDB" },
|
|
343
|
+
{ pattern: /mysql/i, nome: "MySQL" },
|
|
344
|
+
{ pattern: /firebase/i, nome: "Firebase" },
|
|
345
|
+
{ pattern: /supabase/i, nome: "Supabase" },
|
|
346
|
+
];
|
|
347
|
+
for (const { pattern, nome } of dbPatterns) {
|
|
348
|
+
if (pattern.test(entregavel)) {
|
|
349
|
+
sinais.push({
|
|
350
|
+
fase,
|
|
351
|
+
fonte: "arquitetura",
|
|
352
|
+
categoria: "stack",
|
|
353
|
+
valor: `Database: ${nome}`,
|
|
354
|
+
confianca: 0.95,
|
|
355
|
+
timestamp
|
|
356
|
+
});
|
|
357
|
+
break;
|
|
358
|
+
}
|
|
359
|
+
}
|
|
360
|
+
// Integrações
|
|
361
|
+
const integracaoPatterns = [
|
|
362
|
+
{ pattern: /stripe|mercadopago|paypal/i, nome: "Gateway de pagamento" },
|
|
363
|
+
{ pattern: /auth0|firebase auth|oauth/i, nome: "Autenticação social" },
|
|
364
|
+
{ pattern: /sendgrid|mailchimp|email/i, nome: "Email/SMTP" },
|
|
365
|
+
{ pattern: /twilio|sms|whatsapp/i, nome: "SMS/WhatsApp" },
|
|
366
|
+
{ pattern: /s3|cloudinary|storage/i, nome: "Armazenamento" },
|
|
367
|
+
{ pattern: /google maps|mapbox/i, nome: "Maps" },
|
|
368
|
+
];
|
|
369
|
+
for (const { pattern, nome } of integracaoPatterns) {
|
|
370
|
+
if (pattern.test(entregavel)) {
|
|
371
|
+
sinais.push({
|
|
372
|
+
fase,
|
|
373
|
+
fonte: "arquitetura",
|
|
374
|
+
categoria: "integracao",
|
|
375
|
+
valor: nome,
|
|
376
|
+
confianca: 0.9,
|
|
377
|
+
timestamp
|
|
378
|
+
});
|
|
379
|
+
}
|
|
380
|
+
}
|
|
381
|
+
// Microserviços
|
|
382
|
+
if (/microserviço|microservice|arquitetura\s*distribuída/i.test(entregavel)) {
|
|
383
|
+
sinais.push({
|
|
384
|
+
fase,
|
|
385
|
+
fonte: "arquitetura",
|
|
386
|
+
categoria: "arquitetura",
|
|
387
|
+
valor: "Microserviços",
|
|
388
|
+
confianca: 0.95,
|
|
389
|
+
timestamp
|
|
390
|
+
});
|
|
391
|
+
}
|
|
392
|
+
// Multi-tenant
|
|
393
|
+
if (/multi-tenant|multi-inquilino|organizações/i.test(entregavel)) {
|
|
394
|
+
sinais.push({
|
|
395
|
+
fase,
|
|
396
|
+
fonte: "arquitetura",
|
|
397
|
+
categoria: "arquitetura",
|
|
398
|
+
valor: "Multi-tenant",
|
|
399
|
+
confianca: 0.9,
|
|
400
|
+
timestamp
|
|
401
|
+
});
|
|
402
|
+
}
|
|
403
|
+
return sinais;
|
|
404
|
+
}
|
|
405
|
+
/**
|
|
406
|
+
* Extrai sinais do documento de UX/Design (Fase 3)
|
|
407
|
+
*/
|
|
408
|
+
extrairSinaisUX(entregavel, fase, timestamp) {
|
|
409
|
+
const sinais = [];
|
|
410
|
+
// Plataformas
|
|
411
|
+
const plataformas = [];
|
|
412
|
+
if (/web|navegador|browser/i.test(entregavel))
|
|
413
|
+
plataformas.push("Web");
|
|
414
|
+
if (/mobile|ios|android|app/i.test(entregavel))
|
|
415
|
+
plataformas.push("Mobile");
|
|
416
|
+
if (/desktop|electron/i.test(entregavel))
|
|
417
|
+
plataformas.push("Desktop");
|
|
418
|
+
if (plataformas.length > 1) {
|
|
419
|
+
sinais.push({
|
|
420
|
+
fase,
|
|
421
|
+
fonte: "ux",
|
|
422
|
+
categoria: "plataforma",
|
|
423
|
+
valor: `Multi-plataforma: ${plataformas.join(", ")}`,
|
|
424
|
+
confianca: 0.85,
|
|
425
|
+
timestamp
|
|
426
|
+
});
|
|
427
|
+
}
|
|
428
|
+
else if (plataformas.length === 1) {
|
|
429
|
+
sinais.push({
|
|
430
|
+
fase,
|
|
431
|
+
fonte: "ux",
|
|
432
|
+
categoria: "plataforma",
|
|
433
|
+
valor: plataformas[0],
|
|
434
|
+
confianca: 0.9,
|
|
435
|
+
timestamp
|
|
436
|
+
});
|
|
437
|
+
}
|
|
438
|
+
// Complexidade visual
|
|
439
|
+
const telas = (entregavel.match(/tela|página|view|screen/gi) || []).length;
|
|
440
|
+
if (telas > 20) {
|
|
441
|
+
sinais.push({
|
|
442
|
+
fase,
|
|
443
|
+
fonte: "ux",
|
|
444
|
+
categoria: "complexidade_ui",
|
|
445
|
+
valor: "Alta (20+ telas)",
|
|
446
|
+
confianca: 0.8,
|
|
447
|
+
timestamp
|
|
448
|
+
});
|
|
449
|
+
}
|
|
450
|
+
else if (telas > 10) {
|
|
451
|
+
sinais.push({
|
|
452
|
+
fase,
|
|
453
|
+
fonte: "ux",
|
|
454
|
+
categoria: "complexidade_ui",
|
|
455
|
+
valor: "Média (10-20 telas)",
|
|
456
|
+
confianca: 0.8,
|
|
457
|
+
timestamp
|
|
458
|
+
});
|
|
459
|
+
}
|
|
460
|
+
return sinais;
|
|
461
|
+
}
|
|
462
|
+
/**
|
|
463
|
+
* Extrator genérico para outras fases
|
|
464
|
+
*/
|
|
465
|
+
extrairSinaisGenerico(entregavel, fase, timestamp) {
|
|
466
|
+
const sinais = [];
|
|
467
|
+
// Apenas registrar que a fase foi completada
|
|
468
|
+
sinais.push({
|
|
469
|
+
fase: fase.numero,
|
|
470
|
+
fonte: fase.nome.toLowerCase(),
|
|
471
|
+
categoria: "fase_completa",
|
|
472
|
+
valor: fase.nome,
|
|
473
|
+
confianca: 1.0,
|
|
474
|
+
timestamp
|
|
475
|
+
});
|
|
476
|
+
return sinais;
|
|
477
|
+
}
|
|
478
|
+
/**
|
|
479
|
+
* Agrupa sinais por categoria
|
|
480
|
+
*/
|
|
481
|
+
agruparPorCategoria(sinais) {
|
|
482
|
+
const mapa = new Map();
|
|
483
|
+
for (const sinal of sinais) {
|
|
484
|
+
if (!mapa.has(sinal.categoria)) {
|
|
485
|
+
mapa.set(sinal.categoria, []);
|
|
486
|
+
}
|
|
487
|
+
mapa.get(sinal.categoria).push(sinal);
|
|
488
|
+
}
|
|
489
|
+
return mapa;
|
|
490
|
+
}
|
|
491
|
+
/**
|
|
492
|
+
* Retorna o sinal com maior confiança de um array
|
|
493
|
+
*/
|
|
494
|
+
melhorSinal(sinais) {
|
|
495
|
+
return sinais.reduce((melhor, atual) => atual.confianca > melhor.confianca ? atual : melhor);
|
|
496
|
+
}
|
|
497
|
+
}
|
|
498
|
+
// Singleton export
|
|
499
|
+
export const classificacaoProgressiva = new ClassificacaoProgressivaService();
|
|
500
|
+
//# sourceMappingURL=classificacao-progressiva.service.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"classificacao-progressiva.service.js","sourceRoot":"","sources":["../../src/services/classificacao-progressiva.service.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* PromptValidatorService v1.0
|
|
3
|
+
*
|
|
4
|
+
* Serviço de validação de conformidade da IA com o protocolo MCP.
|
|
5
|
+
*/
|
|
6
|
+
export interface ValidationResult {
|
|
7
|
+
valid: boolean;
|
|
8
|
+
errors: string[];
|
|
9
|
+
suggestions: string[];
|
|
10
|
+
severity: 'low' | 'medium' | 'high' | 'critical';
|
|
11
|
+
}
|
|
12
|
+
export declare class PromptValidatorService {
|
|
13
|
+
private errorCount;
|
|
14
|
+
validateToolCall(response: string, expectedTool: string): ValidationResult;
|
|
15
|
+
generateFeedback(result: ValidationResult): string;
|
|
16
|
+
getErrorStats(): Record<string, number>;
|
|
17
|
+
clearStats(): void;
|
|
18
|
+
}
|
|
19
|
+
export declare const promptValidator: PromptValidatorService;
|
|
20
|
+
//# sourceMappingURL=prompt-validator.service.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"prompt-validator.service.d.ts","sourceRoot":"","sources":["../../src/services/prompt-validator.service.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,MAAM,WAAW,gBAAgB;IAC/B,KAAK,EAAE,OAAO,CAAC;IACf,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,QAAQ,EAAE,KAAK,GAAG,QAAQ,GAAG,MAAM,GAAG,UAAU,CAAC;CAClD;AAED,qBAAa,sBAAsB;IACjC,OAAO,CAAC,UAAU,CAAkC;IAEpD,gBAAgB,CAAC,QAAQ,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,GAAG,gBAAgB;IA6B1E,gBAAgB,CAAC,MAAM,EAAE,gBAAgB,GAAG,MAAM;IAelD,aAAa,IAAI,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC;IAIvC,UAAU,IAAI,IAAI;CAGnB;AAED,eAAO,MAAM,eAAe,wBAA+B,CAAC"}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* PromptValidatorService v1.0
|
|
3
|
+
*
|
|
4
|
+
* Serviço de validação de conformidade da IA com o protocolo MCP.
|
|
5
|
+
*/
|
|
6
|
+
export class PromptValidatorService {
|
|
7
|
+
errorCount = new Map();
|
|
8
|
+
validateToolCall(response, expectedTool) {
|
|
9
|
+
const errors = [];
|
|
10
|
+
const suggestions = [];
|
|
11
|
+
// Detectar tool usada
|
|
12
|
+
const toolMatch = response.match(/(executar|maestro|validar)\s*\(/);
|
|
13
|
+
const usedTool = toolMatch ? toolMatch[1] : null;
|
|
14
|
+
if (!usedTool) {
|
|
15
|
+
errors.push("Nenhuma chamada de tool detectada");
|
|
16
|
+
suggestions.push("Use 'executar({...})' para avançar no fluxo");
|
|
17
|
+
return { valid: false, errors, suggestions, severity: 'critical' };
|
|
18
|
+
}
|
|
19
|
+
if (usedTool !== expectedTool) {
|
|
20
|
+
errors.push(`Tool incorreta: usou '${usedTool}', esperado '${expectedTool}'`);
|
|
21
|
+
if (expectedTool === 'executar' && usedTool === 'maestro') {
|
|
22
|
+
suggestions.push("NUNCA use 'maestro()' para tentar avançar");
|
|
23
|
+
suggestions.push("Use 'executar({acao: 'avancar'})' em vez disso");
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
const severity = usedTool !== expectedTool ? 'critical' :
|
|
27
|
+
errors.length > 2 ? 'high' :
|
|
28
|
+
errors.length > 0 ? 'medium' : 'low';
|
|
29
|
+
return { valid: errors.length === 0, errors, suggestions, severity };
|
|
30
|
+
}
|
|
31
|
+
generateFeedback(result) {
|
|
32
|
+
if (result.valid)
|
|
33
|
+
return "";
|
|
34
|
+
let feedback = "## ⚠️ Erro de Comunicação\n\n";
|
|
35
|
+
feedback += "### Problemas:\n";
|
|
36
|
+
for (const error of result.errors) {
|
|
37
|
+
feedback += `- ${error}\n`;
|
|
38
|
+
}
|
|
39
|
+
feedback += "\n### Correção:\n";
|
|
40
|
+
for (const suggestion of result.suggestions) {
|
|
41
|
+
feedback += `- ${suggestion}\n`;
|
|
42
|
+
}
|
|
43
|
+
return feedback;
|
|
44
|
+
}
|
|
45
|
+
getErrorStats() {
|
|
46
|
+
return Object.fromEntries(this.errorCount);
|
|
47
|
+
}
|
|
48
|
+
clearStats() {
|
|
49
|
+
this.errorCount.clear();
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
export const promptValidator = new PromptValidatorService();
|
|
53
|
+
//# sourceMappingURL=prompt-validator.service.js.map
|