@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.
Files changed (41) hide show
  1. package/dist/flows/classifier.d.ts +12 -0
  2. package/dist/flows/classifier.d.ts.map +1 -1
  3. package/dist/flows/classifier.js +12 -0
  4. package/dist/flows/classifier.js.map +1 -1
  5. package/dist/handlers/specialist-phase-handler.d.ts.map +1 -1
  6. package/dist/handlers/specialist-phase-handler.js +103 -22
  7. package/dist/handlers/specialist-phase-handler.js.map +1 -1
  8. package/dist/middleware/index.d.ts +1 -0
  9. package/dist/middleware/index.d.ts.map +1 -1
  10. package/dist/middleware/index.js +1 -0
  11. package/dist/middleware/index.js.map +1 -1
  12. package/dist/middleware/validation.middleware.d.ts +31 -0
  13. package/dist/middleware/validation.middleware.d.ts.map +1 -0
  14. package/dist/middleware/validation.middleware.js +75 -0
  15. package/dist/middleware/validation.middleware.js.map +1 -0
  16. package/dist/services/auto-classifier.service.d.ts +91 -0
  17. package/dist/services/auto-classifier.service.d.ts.map +1 -0
  18. package/dist/services/auto-classifier.service.js +531 -0
  19. package/dist/services/auto-classifier.service.js.map +1 -0
  20. package/dist/services/classificacao-progressiva.service.d.ts +69 -0
  21. package/dist/services/classificacao-progressiva.service.d.ts.map +1 -0
  22. package/dist/services/classificacao-progressiva.service.js +500 -0
  23. package/dist/services/classificacao-progressiva.service.js.map +1 -0
  24. package/dist/services/prompt-validator.service.d.ts +20 -0
  25. package/dist/services/prompt-validator.service.d.ts.map +1 -0
  26. package/dist/services/prompt-validator.service.js +53 -0
  27. package/dist/services/prompt-validator.service.js.map +1 -0
  28. package/dist/tests/classificacao-progressiva.test.d.ts +5 -0
  29. package/dist/tests/classificacao-progressiva.test.d.ts.map +1 -0
  30. package/dist/tests/classificacao-progressiva.test.js +372 -0
  31. package/dist/tests/classificacao-progressiva.test.js.map +1 -0
  32. package/dist/tools/consolidated/avancar.d.ts.map +1 -1
  33. package/dist/tools/consolidated/avancar.js +49 -9
  34. package/dist/tools/consolidated/avancar.js.map +1 -1
  35. package/dist/tools/proximo.d.ts.map +1 -1
  36. package/dist/tools/proximo.js +90 -91
  37. package/dist/tools/proximo.js.map +1 -1
  38. package/dist/types/index.d.ts +21 -0
  39. package/dist/types/index.d.ts.map +1 -1
  40. package/dist/types/index.js.map +1 -1
  41. 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