@maestro-ai/mcp-server 2.4.2 → 2.6.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.
Files changed (122) hide show
  1. package/dist/flows/onboarding-orchestrator.d.ts +41 -0
  2. package/dist/flows/onboarding-orchestrator.d.ts.map +1 -0
  3. package/dist/flows/onboarding-orchestrator.js +399 -0
  4. package/dist/flows/onboarding-orchestrator.js.map +1 -0
  5. package/dist/flows/types.d.ts.map +1 -1
  6. package/dist/flows/types.js +7 -0
  7. package/dist/flows/types.js.map +1 -1
  8. package/dist/gates/adaptive-scoring.d.ts +133 -0
  9. package/dist/gates/adaptive-scoring.d.ts.map +1 -0
  10. package/dist/gates/adaptive-scoring.js +404 -0
  11. package/dist/gates/adaptive-scoring.js.map +1 -0
  12. package/dist/gates/compatibility-wrapper.d.ts +139 -0
  13. package/dist/gates/compatibility-wrapper.d.ts.map +1 -0
  14. package/dist/gates/compatibility-wrapper.js +362 -0
  15. package/dist/gates/compatibility-wrapper.js.map +1 -0
  16. package/dist/gates/contextual-recommender.d.ts +128 -0
  17. package/dist/gates/contextual-recommender.d.ts.map +1 -0
  18. package/dist/gates/contextual-recommender.js +446 -0
  19. package/dist/gates/contextual-recommender.js.map +1 -0
  20. package/dist/gates/intelligent-gate-engine.d.ts +158 -0
  21. package/dist/gates/intelligent-gate-engine.d.ts.map +1 -0
  22. package/dist/gates/intelligent-gate-engine.js +429 -0
  23. package/dist/gates/intelligent-gate-engine.js.map +1 -0
  24. package/dist/gates/intelligent-validator.d.ts +164 -0
  25. package/dist/gates/intelligent-validator.d.ts.map +1 -0
  26. package/dist/gates/intelligent-validator.js +347 -0
  27. package/dist/gates/intelligent-validator.js.map +1 -0
  28. package/dist/gates/maturity-levels.d.ts +119 -0
  29. package/dist/gates/maturity-levels.d.ts.map +1 -0
  30. package/dist/gates/maturity-levels.js +455 -0
  31. package/dist/gates/maturity-levels.js.map +1 -0
  32. package/dist/state/storage.d.ts.map +1 -1
  33. package/dist/state/storage.js +1 -0
  34. package/dist/state/storage.js.map +1 -1
  35. package/dist/tests/brainstorm-prd.test.d.ts +5 -0
  36. package/dist/tests/brainstorm-prd.test.d.ts.map +1 -0
  37. package/dist/tests/brainstorm-prd.test.js +291 -0
  38. package/dist/tests/brainstorm-prd.test.js.map +1 -0
  39. package/dist/tests/migracao-skills.test.d.ts +2 -0
  40. package/dist/tests/migracao-skills.test.d.ts.map +1 -0
  41. package/dist/tests/migracao-skills.test.js +208 -0
  42. package/dist/tests/migracao-skills.test.js.map +1 -0
  43. package/dist/tests/onboarding-flow.test.d.ts +5 -0
  44. package/dist/tests/onboarding-flow.test.d.ts.map +1 -0
  45. package/dist/tests/onboarding-flow.test.js +231 -0
  46. package/dist/tests/onboarding-flow.test.js.map +1 -0
  47. package/dist/tests/readiness-dashboard.test.d.ts +5 -0
  48. package/dist/tests/readiness-dashboard.test.d.ts.map +1 -0
  49. package/dist/tests/readiness-dashboard.test.js +252 -0
  50. package/dist/tests/readiness-dashboard.test.js.map +1 -0
  51. package/dist/tools/brainstorm.d.ts +41 -0
  52. package/dist/tools/brainstorm.d.ts.map +1 -0
  53. package/dist/tools/brainstorm.js +429 -0
  54. package/dist/tools/brainstorm.js.map +1 -0
  55. package/dist/tools/carregar-projeto.js +1 -1
  56. package/dist/tools/carregar-projeto.js.map +1 -1
  57. package/dist/tools/confirmar-stitch.js +1 -1
  58. package/dist/tools/confirmar-stitch.js.map +1 -1
  59. package/dist/tools/index.d.ts.map +1 -1
  60. package/dist/tools/index.js +65 -0
  61. package/dist/tools/index.js.map +1 -1
  62. package/dist/tools/iniciar-projeto.d.ts +2 -2
  63. package/dist/tools/iniciar-projeto.d.ts.map +1 -1
  64. package/dist/tools/iniciar-projeto.js +53 -96
  65. package/dist/tools/iniciar-projeto.js.map +1 -1
  66. package/dist/tools/next-steps-dashboard.d.ts +30 -0
  67. package/dist/tools/next-steps-dashboard.d.ts.map +1 -0
  68. package/dist/tools/next-steps-dashboard.js +248 -0
  69. package/dist/tools/next-steps-dashboard.js.map +1 -0
  70. package/dist/tools/prd-writer.d.ts +36 -0
  71. package/dist/tools/prd-writer.d.ts.map +1 -0
  72. package/dist/tools/prd-writer.js +377 -0
  73. package/dist/tools/prd-writer.js.map +1 -0
  74. package/dist/tools/proximo.d.ts.map +1 -1
  75. package/dist/tools/proximo.js +147 -22
  76. package/dist/tools/proximo.js.map +1 -1
  77. package/dist/tools/setup-inicial.d.ts +48 -0
  78. package/dist/tools/setup-inicial.d.ts.map +1 -0
  79. package/dist/tools/setup-inicial.js +84 -0
  80. package/dist/tools/setup-inicial.js.map +1 -0
  81. package/dist/tools/validar-gate.d.ts.map +1 -1
  82. package/dist/tools/validar-gate.js +28 -28
  83. package/dist/tools/validar-gate.js.map +1 -1
  84. package/dist/types/index.d.ts +24 -0
  85. package/dist/types/index.d.ts.map +1 -1
  86. package/dist/types/index.js.map +1 -1
  87. package/dist/types/onboarding.d.ts +124 -0
  88. package/dist/types/onboarding.d.ts.map +1 -0
  89. package/dist/types/onboarding.js +5 -0
  90. package/dist/types/onboarding.js.map +1 -0
  91. package/dist/utils/config.d.ts +16 -0
  92. package/dist/utils/config.d.ts.map +1 -0
  93. package/dist/utils/config.js +26 -0
  94. package/dist/utils/config.js.map +1 -0
  95. package/dist/utils/content-injector.d.ts +1 -0
  96. package/dist/utils/content-injector.d.ts.map +1 -1
  97. package/dist/utils/content-injector.js +5 -0
  98. package/dist/utils/content-injector.js.map +1 -1
  99. package/dist/utils/discovery-adapter.d.ts +33 -0
  100. package/dist/utils/discovery-adapter.d.ts.map +1 -0
  101. package/dist/utils/discovery-adapter.js +392 -0
  102. package/dist/utils/discovery-adapter.js.map +1 -0
  103. package/dist/utils/files.d.ts +1 -0
  104. package/dist/utils/files.d.ts.map +1 -1
  105. package/dist/utils/files.js +97 -7
  106. package/dist/utils/files.js.map +1 -1
  107. package/dist/utils/ide-paths.d.ts.map +1 -1
  108. package/dist/utils/ide-paths.js +7 -8
  109. package/dist/utils/ide-paths.js.map +1 -1
  110. package/dist/utils/inferencia-contextual.d.ts +3 -0
  111. package/dist/utils/inferencia-contextual.d.ts.map +1 -0
  112. package/dist/utils/inferencia-contextual.js +93 -0
  113. package/dist/utils/inferencia-contextual.js.map +1 -0
  114. package/dist/utils/instructions.d.ts +8 -3
  115. package/dist/utils/instructions.d.ts.map +1 -1
  116. package/dist/utils/instructions.js +72 -25
  117. package/dist/utils/instructions.js.map +1 -1
  118. package/dist/utils/readiness-checker.d.ts +27 -0
  119. package/dist/utils/readiness-checker.d.ts.map +1 -0
  120. package/dist/utils/readiness-checker.js +226 -0
  121. package/dist/utils/readiness-checker.js.map +1 -0
  122. package/package.json +1 -1
@@ -0,0 +1,377 @@
1
+ /**
2
+ * Tool: PRD Writer
3
+ * Consolida brainstorm e discovery em um PRD estruturado e validado
4
+ */
5
+ import { parsearEstado, serializarEstado } from "../state/storage.js";
6
+ import { setCurrentDirectory } from "../state/context.js";
7
+ import { resolveProjectPath } from "../utils/files.js";
8
+ import { calcularQualidade } from "../gates/quality-scorer.js";
9
+ /**
10
+ * Gera PRD estruturado a partir do brainstorm e discovery
11
+ */
12
+ function gerarPRDConteudo(onboarding, nomeProjetoDiretorio) {
13
+ const linhas = [];
14
+ // Cabeçalho
15
+ linhas.push(`# PRD - ${onboarding.discoveryResponses.nome_projeto || 'Projeto'}`);
16
+ linhas.push(`\n**Data:** ${new Date().toLocaleDateString('pt-BR')}`);
17
+ linhas.push(`**Versão:** 1.0 (Draft)`);
18
+ linhas.push(`**Status:** Em Validação\n`);
19
+ // Sumário Executivo
20
+ linhas.push('---\n');
21
+ linhas.push('## 1. Sumário Executivo\n');
22
+ const problemaSecao = onboarding.brainstormSections.find((s) => s.id === 'problema-oportunidade');
23
+ if (problemaSecao?.response) {
24
+ linhas.push('### Problema e Oportunidade\n');
25
+ linhas.push(problemaSecao.response);
26
+ linhas.push('\n');
27
+ }
28
+ // Personas
29
+ linhas.push('---\n');
30
+ linhas.push('## 2. Personas e Jobs to Be Done\n');
31
+ const personasSecao = onboarding.brainstormSections.find((s) => s.id === 'personas-jtbd');
32
+ if (personasSecao?.response) {
33
+ linhas.push(personasSecao.response);
34
+ linhas.push('\n');
35
+ }
36
+ // MVP e Funcionalidades
37
+ linhas.push('---\n');
38
+ linhas.push('## 3. MVP e Funcionalidades Priorizadas\n');
39
+ const mvpSecao = onboarding.brainstormSections.find((s) => s.id === 'mvp-funcionalidades');
40
+ if (mvpSecao?.response) {
41
+ linhas.push(mvpSecao.response);
42
+ linhas.push('\n');
43
+ }
44
+ // Métricas
45
+ linhas.push('---\n');
46
+ linhas.push('## 4. Métricas de Sucesso\n');
47
+ const metricasSecao = onboarding.brainstormSections.find((s) => s.id === 'metricas-sucesso');
48
+ if (metricasSecao?.response) {
49
+ linhas.push(metricasSecao.response);
50
+ linhas.push('\n');
51
+ }
52
+ // Riscos
53
+ linhas.push('---\n');
54
+ linhas.push('## 5. Riscos e Planos de Mitigação\n');
55
+ const riscosSecao = onboarding.brainstormSections.find((s) => s.id === 'riscos-mitigacoes');
56
+ if (riscosSecao?.response) {
57
+ linhas.push(riscosSecao.response);
58
+ linhas.push('\n');
59
+ }
60
+ // Contexto Técnico
61
+ linhas.push('---\n');
62
+ linhas.push('## 6. Contexto Técnico\n');
63
+ linhas.push('### Stack Preferida\n');
64
+ linhas.push(`${onboarding.discoveryResponses.stack_preferida || 'A sugerir baseado em requisitos'}\n`);
65
+ linhas.push('### Plataformas\n');
66
+ const plataformas = Array.isArray(onboarding.discoveryResponses.plataformas)
67
+ ? onboarding.discoveryResponses.plataformas.join(', ')
68
+ : onboarding.discoveryResponses.plataformas || 'A definir';
69
+ linhas.push(`${plataformas}\n`);
70
+ if (onboarding.discoveryResponses.integracoes_externas) {
71
+ linhas.push('### Integrações Externas\n');
72
+ linhas.push(`${onboarding.discoveryResponses.integracoes_externas}\n`);
73
+ }
74
+ // Timeline
75
+ linhas.push('---\n');
76
+ linhas.push('## 7. Timeline e Recursos\n');
77
+ linhas.push(`### Cronograma Desejado\n`);
78
+ linhas.push(`${onboarding.discoveryResponses.cronograma || 'A definir'}\n`);
79
+ if (onboarding.discoveryResponses.tamanho_time) {
80
+ linhas.push(`### Tamanho do Time\n`);
81
+ linhas.push(`${onboarding.discoveryResponses.tamanho_time}\n`);
82
+ }
83
+ if (onboarding.discoveryResponses.experiencia_time) {
84
+ linhas.push(`### Experiência do Time\n`);
85
+ linhas.push(`${onboarding.discoveryResponses.experiencia_time}\n`);
86
+ }
87
+ // Requisitos Críticos
88
+ linhas.push('---\n');
89
+ linhas.push('## 8. Requisitos Críticos\n');
90
+ if (onboarding.discoveryResponses.performance_esperada) {
91
+ linhas.push(`### Performance\n`);
92
+ linhas.push(`${onboarding.discoveryResponses.performance_esperada}\n`);
93
+ }
94
+ if (onboarding.discoveryResponses.seguranca_compliance && onboarding.discoveryResponses.seguranca_compliance.length > 0) {
95
+ linhas.push(`### Compliance\n`);
96
+ const compliance = Array.isArray(onboarding.discoveryResponses.seguranca_compliance)
97
+ ? onboarding.discoveryResponses.seguranca_compliance.join(', ')
98
+ : onboarding.discoveryResponses.seguranca_compliance;
99
+ linhas.push(`${compliance}\n`);
100
+ }
101
+ if (onboarding.discoveryResponses.escalabilidade) {
102
+ linhas.push(`### Escalabilidade\n`);
103
+ linhas.push(`${onboarding.discoveryResponses.escalabilidade}\n`);
104
+ }
105
+ // Metadata
106
+ linhas.push('---\n');
107
+ linhas.push('## Metadata\n');
108
+ linhas.push(`- **Modo:** ${onboarding.mode.toUpperCase()}`);
109
+ linhas.push(`- **Criado em:** ${new Date().toISOString()}`);
110
+ linhas.push(`- **Total de interações:** ${onboarding.totalInteractions}`);
111
+ return linhas.join('\n');
112
+ }
113
+ /**
114
+ * Tool: prd_writer
115
+ * Gera, valida e consolida PRD
116
+ */
117
+ export async function prdWriter(args) {
118
+ if (!args.estado_json) {
119
+ return {
120
+ content: [{
121
+ type: "text",
122
+ text: "❌ **Erro**: Parâmetro `estado_json` é obrigatório.",
123
+ }],
124
+ isError: true,
125
+ };
126
+ }
127
+ if (!args.diretorio) {
128
+ return {
129
+ content: [{
130
+ type: "text",
131
+ text: "❌ **Erro**: Parâmetro `diretorio` é obrigatório.",
132
+ }],
133
+ isError: true,
134
+ };
135
+ }
136
+ const estado = parsearEstado(args.estado_json);
137
+ if (!estado) {
138
+ return {
139
+ content: [{
140
+ type: "text",
141
+ text: "❌ **Erro**: Não foi possível parsear o estado JSON.",
142
+ }],
143
+ isError: true,
144
+ };
145
+ }
146
+ const diretorio = resolveProjectPath(args.diretorio);
147
+ setCurrentDirectory(diretorio);
148
+ const acao = args.acao || 'gerar';
149
+ // Obter estado de onboarding
150
+ const onboarding = estado.onboarding;
151
+ if (!onboarding) {
152
+ return {
153
+ content: [{
154
+ type: "text",
155
+ text: "❌ **Erro**: Nenhum estado de onboarding encontrado.",
156
+ }],
157
+ isError: true,
158
+ };
159
+ }
160
+ if (acao === 'gerar') {
161
+ return handleGerarPRD(onboarding, estado, diretorio);
162
+ }
163
+ else if (acao === 'validar') {
164
+ return handleValidarPRD(onboarding, estado, diretorio);
165
+ }
166
+ else if (acao === 'status') {
167
+ return handleStatusPRD(onboarding);
168
+ }
169
+ return {
170
+ content: [{
171
+ type: "text",
172
+ text: `❌ **Erro**: Ação desconhecida: ${acao}`,
173
+ }],
174
+ isError: true,
175
+ };
176
+ }
177
+ /**
178
+ * Handler: gerar PRD
179
+ */
180
+ function handleGerarPRD(onboarding, estado, diretorio) {
181
+ if (onboarding.brainstormStatus !== 'completed') {
182
+ return {
183
+ content: [{
184
+ type: "text",
185
+ text: "❌ **Erro**: Brainstorm não foi concluído. Complete o brainstorm antes de gerar o PRD.",
186
+ }],
187
+ isError: true,
188
+ };
189
+ }
190
+ // Gerar conteúdo do PRD
191
+ const prdConteudo = gerarPRDConteudo(onboarding, estado.nome);
192
+ // Atualizar estado
193
+ onboarding.prdStatus = 'draft';
194
+ onboarding.phase = 'prd_draft';
195
+ onboarding.totalInteractions++;
196
+ onboarding.lastInteractionAt = new Date().toISOString();
197
+ const estadoAtualizado = {
198
+ ...estado,
199
+ onboarding,
200
+ atualizado_em: new Date().toISOString(),
201
+ };
202
+ const estadoFile = serializarEstado(estadoAtualizado);
203
+ const resposta = `# ✅ PRD Draft Gerado!
204
+
205
+ O PRD foi consolidado a partir do discovery e brainstorm.
206
+
207
+ ---
208
+
209
+ ## 📄 Conteúdo do PRD
210
+
211
+ \`\`\`markdown
212
+ ${prdConteudo.substring(0, 500)}...
213
+ \`\`\`
214
+
215
+ ---
216
+
217
+ ## 🔍 Próximos Passos
218
+
219
+ 1. **Revisar PRD:** Verifique se todos os detalhes estão corretos
220
+ 2. **Validar Completude:** Use \`prd_writer(estado_json: "...", diretorio: "...", acao: "validar")\`
221
+ 3. **Ajustar se necessário:** Refine seções que precisam de melhorias
222
+ 4. **Avançar para Fase 1:** Quando validado, o PRD estará pronto para a próxima fase
223
+
224
+ ---
225
+
226
+ ## ⚡ AÇÃO OBRIGATÓRIA - Atualizar Estado
227
+
228
+ **Caminho:** \`${estadoFile.path}\`
229
+
230
+ \`\`\`json
231
+ ${estadoFile.content}
232
+ \`\`\`
233
+
234
+ **Arquivo PRD:** \`docs/01-produto/PRD.md\`
235
+
236
+ \`\`\`markdown
237
+ ${prdConteudo}
238
+ \`\`\`
239
+ `;
240
+ return {
241
+ content: [{ type: "text", text: resposta }],
242
+ files: [
243
+ {
244
+ path: `${diretorio}/${estadoFile.path}`,
245
+ content: estadoFile.content,
246
+ },
247
+ {
248
+ path: `${diretorio}/docs/01-produto/PRD.md`,
249
+ content: prdConteudo,
250
+ },
251
+ ],
252
+ estado_atualizado: estadoFile.content,
253
+ };
254
+ }
255
+ /**
256
+ * Handler: validar PRD
257
+ */
258
+ function handleValidarPRD(onboarding, estado, diretorio) {
259
+ if (onboarding.prdStatus !== 'draft') {
260
+ return {
261
+ content: [{
262
+ type: "text",
263
+ text: "❌ **Erro**: PRD não está em draft. Gere o PRD primeiro.",
264
+ }],
265
+ isError: true,
266
+ };
267
+ }
268
+ // Gerar conteúdo do PRD para validação
269
+ const prdConteudo = gerarPRDConteudo(onboarding, estado.nome);
270
+ // Validar completude
271
+ const checklist = {
272
+ 'Sumário Executivo': prdConteudo.includes('Problema e Oportunidade'),
273
+ 'Personas e JTBD': prdConteudo.includes('Personas e Jobs to Be Done'),
274
+ 'MVP e Funcionalidades': prdConteudo.includes('MVP e Funcionalidades Priorizadas'),
275
+ 'Métricas de Sucesso': prdConteudo.includes('Métricas de Sucesso'),
276
+ 'Riscos e Mitigações': prdConteudo.includes('Riscos e Planos de Mitigação'),
277
+ 'Contexto Técnico': prdConteudo.includes('Contexto Técnico'),
278
+ 'Timeline e Recursos': prdConteudo.includes('Timeline e Recursos'),
279
+ 'Requisitos Críticos': prdConteudo.includes('Requisitos Críticos'),
280
+ };
281
+ const itemsValidados = Object.values(checklist).filter((v) => v).length;
282
+ const totalItems = Object.keys(checklist).length;
283
+ const score = Math.round((itemsValidados / totalItems) * 100);
284
+ // Calcular qualidade
285
+ const qualidade = calcularQualidade(prdConteudo, {
286
+ camposObrigatorios: Object.keys(checklist),
287
+ secoes: Object.keys(checklist),
288
+ });
289
+ onboarding.prdScore = qualidade.overall;
290
+ onboarding.prdStatus = score >= 70 ? 'validated' : 'draft';
291
+ const linhas = [];
292
+ linhas.push('# 📊 Validação do PRD\n');
293
+ linhas.push(`**Score de Completude:** ${score}/100`);
294
+ linhas.push(`**Score de Qualidade:** ${qualidade.overall}/100\n`);
295
+ linhas.push('## Checklist de Completude\n');
296
+ Object.entries(checklist).forEach(([item, valido]) => {
297
+ const icon = valido ? '✅' : '❌';
298
+ linhas.push(`${icon} ${item}`);
299
+ });
300
+ linhas.push(`\n**Total:** ${itemsValidados}/${totalItems} itens validados\n`);
301
+ if (score >= 70) {
302
+ linhas.push('✅ **PRD VALIDADO!** Score ≥ 70\n');
303
+ linhas.push('Próximo passo: Avançar para Fase 1 (Produto)');
304
+ }
305
+ else {
306
+ linhas.push(`⚠️ **PRD INCOMPLETO** Score: ${score}/100\n`);
307
+ linhas.push('Recomendações:');
308
+ Object.entries(checklist).forEach(([item, valido]) => {
309
+ if (!valido) {
310
+ linhas.push(`- Adicionar: ${item}`);
311
+ }
312
+ });
313
+ }
314
+ return {
315
+ content: [{
316
+ type: "text",
317
+ text: linhas.join('\n'),
318
+ }],
319
+ };
320
+ }
321
+ /**
322
+ * Handler: status do PRD
323
+ */
324
+ function handleStatusPRD(onboarding) {
325
+ const linhas = [];
326
+ linhas.push('# 📄 Status do PRD\n');
327
+ linhas.push(`**Status:** ${onboarding.prdStatus}`);
328
+ linhas.push(`**Score:** ${onboarding.prdScore}/100`);
329
+ linhas.push(`**Fase:** ${onboarding.phase}\n`);
330
+ if (onboarding.prdValidationReport) {
331
+ linhas.push('## Relatório de Validação\n');
332
+ linhas.push(`**Score:** ${onboarding.prdValidationReport.score}/100\n`);
333
+ linhas.push('### Checklist\n');
334
+ Object.entries(onboarding.prdValidationReport.checklist).forEach(([item, valido]) => {
335
+ const icon = valido ? '✅' : '❌';
336
+ linhas.push(`${icon} ${item}`);
337
+ });
338
+ if (onboarding.prdValidationReport.gaps.length > 0) {
339
+ linhas.push('\n### Lacunas\n');
340
+ onboarding.prdValidationReport.gaps.forEach((gap) => {
341
+ linhas.push(`- ${gap}`);
342
+ });
343
+ }
344
+ if (onboarding.prdValidationReport.suggestions.length > 0) {
345
+ linhas.push('\n### Sugestões\n');
346
+ onboarding.prdValidationReport.suggestions.forEach((sugestao) => {
347
+ linhas.push(`- ${sugestao}`);
348
+ });
349
+ }
350
+ }
351
+ return {
352
+ content: [{
353
+ type: "text",
354
+ text: linhas.join('\n'),
355
+ }],
356
+ };
357
+ }
358
+ export const prdWriterSchema = {
359
+ type: "object",
360
+ properties: {
361
+ estado_json: {
362
+ type: "string",
363
+ description: "Conteúdo do arquivo .maestro/estado.json",
364
+ },
365
+ diretorio: {
366
+ type: "string",
367
+ description: "Diretório absoluto do projeto",
368
+ },
369
+ acao: {
370
+ type: "string",
371
+ enum: ["gerar", "validar", "status"],
372
+ description: "Ação a executar",
373
+ },
374
+ },
375
+ required: ["estado_json", "diretorio"],
376
+ };
377
+ //# sourceMappingURL=prd-writer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"prd-writer.js","sourceRoot":"","sources":["../../src/tools/prd-writer.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"proximo.d.ts","sourceRoot":"","sources":["../../src/tools/proximo.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,UAAU,EAAiB,MAAM,mBAAmB,CAAC;AAgBnE,UAAU,WAAW;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,SAAS,EAAE,MAAM,CAAC;CACrB;AAuBD;;;;GAIG;AACH,wBAAsB,OAAO,CAAC,IAAI,EAAE,WAAW,GAAG,OAAO,CAAC,UAAU,CAAC,CAmjBpE;AAED;;GAEG;AACH,eAAO,MAAM,aAAa;;;;;;;;;;;;;;;;;;;;;;;;;CAyBzB,CAAC"}
1
+ {"version":3,"file":"proximo.d.ts","sourceRoot":"","sources":["../../src/tools/proximo.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,UAAU,EAAiB,MAAM,mBAAmB,CAAC;AAkBnE,UAAU,WAAW;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,SAAS,EAAE,MAAM,CAAC;CACrB;AAuBD;;;;GAIG;AACH,wBAAsB,OAAO,CAAC,IAAI,EAAE,WAAW,GAAG,OAAO,CAAC,UAAU,CAAC,CAwrBpE;AAED;;GAEG;AACH,eAAO,MAAM,aAAa;;;;;;;;;;;;;;;;;;;;;;;;;CAyBzB,CAAC"}
@@ -2,15 +2,17 @@ import { existsSync } from "fs";
2
2
  import { parsearEstado, serializarEstado } from "../state/storage.js";
3
3
  import { getFaseComStitch, getFluxoComStitch } from "../flows/types.js";
4
4
  import { classificarPRD, descreverNivel } from "../flows/classifier.js";
5
- import { validarGate } from "../gates/validator.js";
5
+ import { validarGate, validarGateComTemplate } from "../gates/validator.js";
6
6
  import { setCurrentDirectory } from "../state/context.js";
7
7
  import { parsearResumo, serializarResumo, criarResumoInicial, extrairResumoEntregavel } from "../state/memory.js";
8
8
  import { logEvent, EventTypes } from "../utils/history.js";
9
9
  import { gerarSystemMd } from "../utils/system-md.js";
10
10
  import { getSkillParaFase, getSkillResourcePath } from "../utils/prompt-mapper.js";
11
11
  import { validarEstrutura } from "../gates/estrutura.js";
12
- import { resolveProjectPath } from "../utils/files.js";
12
+ import { resolveProjectPath, getServerContentRoot } from "../utils/files.js";
13
13
  import { formatSkillMessage, detectIDE, getSkillResourcePath as getIDESkillResourcePath } from "../utils/ide-paths.js";
14
+ import { inferirContextoBalanceado } from "../utils/inferencia-contextual.js";
15
+ import { verificarSkillCarregada } from "../utils/content-injector.js";
14
16
  /**
15
17
  * Calcula score de qualidade
16
18
  */
@@ -84,6 +86,28 @@ proximo(
84
86
  // Validar tamanho mínimo do entregável
85
87
  const TAMANHO_MINIMO_ENTREGAVEL = 200;
86
88
  if (!args.entregavel || args.entregavel.trim().length < TAMANHO_MINIMO_ENTREGAVEL) {
89
+ // Obter skill e IDE para instruções corretas
90
+ const ideDetectada = detectIDE(diretorio) || 'windsurf';
91
+ const skillNome = faseAtualInfo ? getSkillParaFase(faseAtualInfo.nome) : null;
92
+ let instrucoesSkill = "";
93
+ if (skillNome) {
94
+ const skillPath = getIDESkillResourcePath(skillNome, 'reference', ideDetectada);
95
+ const templatesPath = getIDESkillResourcePath(skillNome, 'templates', ideDetectada);
96
+ instrucoesSkill = `
97
+ ### 📚 Recursos da Skill
98
+
99
+ Abra os seguintes arquivos no seu IDE:
100
+
101
+ 1. **SKILL.md** (instruções do especialista):
102
+ \`${getIDESkillResourcePath(skillNome, 'reference', ideDetectada)}SKILL.md\`
103
+
104
+ 2. **Templates** (estrutura do entregável):
105
+ \`${templatesPath}\`
106
+
107
+ 3. **Checklists** (validação):
108
+ \`${getIDESkillResourcePath(skillNome, 'checklists', ideDetectada)}\`
109
+ `;
110
+ }
87
111
  return {
88
112
  content: [{
89
113
  type: "text",
@@ -101,21 +125,17 @@ O entregável está vazio ou muito curto.
101
125
  ## ⚡ AÇÃO OBRIGATÓRIA
102
126
 
103
127
  Você **DEVE** desenvolver o entregável corretamente:
128
+ ${instrucoesSkill}
104
129
 
105
- 1. **Ler especialista:**
106
- \`\`\`
107
- read_resource("maestro://especialista/${faseAtualInfo?.especialista || "..."}")
108
- \`\`\`
130
+ ### Fluxo Obrigatório
109
131
 
110
- 2. **Ler template:**
111
- \`\`\`
112
- read_resource("maestro://template/${faseAtualInfo?.template || "..."}")
113
- \`\`\`
114
-
115
- 3. Fazer as perguntas do especialista ao usuário
116
- 4. Gerar entregável seguindo TODAS as seções do template
117
- 5. Apresentar ao usuário para aprovação
118
- 6. Só então chamar \`proximo()\`
132
+ 1. Leia a **SKILL.md** → Siga as instruções e perguntas do especialista
133
+ 2. Consulte os **Templates** → Use como base estrutural
134
+ 3. Faça perguntas ao usuário → Conforme indicado na SKILL
135
+ 4. Gere o entregável → Seguindo TODAS as seções do template
136
+ 5. Valide com o **Checklist** → Antes de avançar
137
+ 6. Apresente ao usuário Para aprovação
138
+ 7. então chame \`proximo()\`
119
139
 
120
140
  > ⛔ **NÃO TENTE AVANÇAR** com entregáveis vazios ou incompletos!
121
141
  `,
@@ -149,6 +169,52 @@ O **usuário humano** deve decidir:
149
169
  }],
150
170
  };
151
171
  }
172
+ // Fluxo PRD-first: se ainda aguardando PRD, analisar e sugerir em um único passo
173
+ if (estado.status === "aguardando_prd" && estado.fase_atual === 1) {
174
+ const analise = classificarPRD(args.entregavel);
175
+ estado.classificacao_sugerida = analise;
176
+ estado.aguardando_classificacao = true;
177
+ estado.classificacao_pos_prd_confirmada = false;
178
+ estado.status = "ativo";
179
+ // Inferência balanceada (não assume críticos) + perguntas agrupadas
180
+ estado.inferencia_contextual = inferirContextoBalanceado(`${estado.nome} ${args.entregavel}`);
181
+ const estadoFile = serializarEstado(estado);
182
+ const perguntas = estado.inferencia_contextual?.perguntas_prioritarias || [];
183
+ const perguntasMarkdown = perguntas.length
184
+ ? perguntas.map((p) => `- (${p.prioridade}) ${p.pergunta}${p.valor_inferido ? `
185
+ - Inferido: ${p.valor_inferido} (confiança ${((p.confianca_inferencia ?? 0) * 100).toFixed(0)}%)` : ""}`).join("\n")
186
+ : "- Informe domínio, stack preferida e integrações em um único prompt.";
187
+ return {
188
+ content: [{
189
+ type: "text",
190
+ text: `# 🔍 PRD Analisado (PRD-first)
191
+
192
+ | Campo | Valor |
193
+ |-------|-------|
194
+ | Nível sugerido | ${analise.nivel.toUpperCase()} |
195
+ | Pontuação | ${analise.pontuacao} |
196
+ | Critérios | ${analise.criterios.join(", ")} |
197
+
198
+ ## Ação obrigatória (responder em UM ÚNICO PROMPT)
199
+ 1) Confirme ou ajuste a classificação:
200
+ \`\`\`
201
+ confirmar_classificacao({
202
+ estado_json: "...",
203
+ diretorio: "${diretorio}",
204
+ nivel: "${analise.nivel}" // opcional, ajuste se necessário
205
+ })
206
+ \`\`\`
207
+ 2) Responda também às perguntas abaixo no MESMO prompt (evita múltiplos prompts):
208
+ ${perguntasMarkdown}
209
+
210
+ > ⚠️ Não prossiga para outras fases antes de confirmar a classificação.
211
+ > Consulte SKILL e templates em: ${getIDESkillResourcePath(getSkillParaFase(faseAtualInfo?.nome || "Produto") || "specialist-gestao-produto", 'templates', detectIDE(diretorio) || 'windsurf')}
212
+ `,
213
+ }],
214
+ files: [{ path: `${diretorio}/${estadoFile.path}`, content: estadoFile.content }],
215
+ estado_atualizado: estadoFile.content,
216
+ };
217
+ }
152
218
  // Verificar se há bloqueio de confirmação de classificação (Pós-PRD)
153
219
  if (estado.aguardando_classificacao) {
154
220
  let msgSugestao = "";
@@ -170,7 +236,7 @@ Antes de prosseguir, você precisa confirmar a classificação do projeto.
170
236
 
171
237
  ${msgSugestao}
172
238
 
173
- ## 🔐 Ação Necessária
239
+ ## 🔐 Ação Necessária (responder em UM ÚNICO PROMPT)
174
240
 
175
241
  Use a tool \`confirmar_classificacao\` para validar ou ajustar a complexidade.
176
242
 
@@ -181,6 +247,8 @@ confirmar_classificacao(
181
247
  )
182
248
  \`\`\`
183
249
 
250
+ Inclua no MESMO prompt qualquer ajuste de domínio/stack ou integrações críticas para evitar prompts adicionais.
251
+
184
252
  > ⚠️ **IMPORTANTE**: Você DEVE chamar esta tool antes de continuar.
185
253
  `,
186
254
  }],
@@ -196,12 +264,69 @@ confirmar_classificacao(
196
264
  isError: true,
197
265
  };
198
266
  }
199
- // Validar estrutura do entregável
200
- const estruturaResult = validarEstrutura(estado.fase_atual, args.entregavel);
201
- // Validar gate (checklist)
202
- const gateResultado = validarGate(faseAtual, args.entregavel);
203
- // Calcular score de qualidade
204
- const qualityScore = calcularQualityScore(estruturaResult, gateResultado);
267
+ // Enforcement de skill + template + checklist antes de avançar
268
+ const ideDetectada = detectIDE(diretorio) || 'windsurf';
269
+ const skillObrigatoria = getSkillParaFase(faseAtual.nome);
270
+ if (skillObrigatoria) {
271
+ const skillOk = await verificarSkillCarregada(diretorio, skillObrigatoria, ideDetectada).catch(() => false);
272
+ if (!skillOk) {
273
+ return {
274
+ content: [{
275
+ type: "text",
276
+ text: `# ⛔ Skill Obrigatória Não Carregada
277
+
278
+ Fase: **${faseAtual.nome}**
279
+ Skill necessária: \`${skillObrigatoria}\`
280
+
281
+ Carregue e leia a skill antes de gerar o entregável:
282
+ 1) Ler SKILL: \`${getIDESkillResourcePath(skillObrigatoria, 'reference', ideDetectada)}SKILL.md\`
283
+ 2) Templates: \`${getIDESkillResourcePath(skillObrigatoria, 'templates', ideDetectada)}\`
284
+ 3) Checklist: \`${getIDESkillResourcePath(skillObrigatoria, 'checklists', ideDetectada)}\`
285
+
286
+ > Gere o entregável seguindo o template e valide com o checklist antes de chamar \`proximo\`.`,
287
+ }],
288
+ isError: true,
289
+ };
290
+ }
291
+ }
292
+ // Tentar validação com template (novo sistema inteligente)
293
+ const diretorioContent = getServerContentRoot();
294
+ const tier = estado.tier_gate || "base";
295
+ const validacaoTemplate = validarGateComTemplate(faseAtual, args.entregavel, tier, diretorioContent);
296
+ let qualityScore;
297
+ let gateResultado;
298
+ let estruturaResult;
299
+ let usouTemplate = false;
300
+ if (validacaoTemplate.sucesso && validacaoTemplate.resultado) {
301
+ // Usar validação baseada em template (enforcement)
302
+ usouTemplate = true;
303
+ const resultado = validacaoTemplate.resultado;
304
+ // Converter resultado do template para formato legado para compatibilidade
305
+ qualityScore = resultado.qualidade?.scoreGeral || resultado.score || 0;
306
+ // Criar estrutura compatível para gateResultado
307
+ gateResultado = {
308
+ valido: resultado.valido,
309
+ itens_validados: resultado.checkboxes?.preenchidos.map((c) => c.texto) || [],
310
+ itens_pendentes: resultado.checkboxes?.faltando.map((c) => c.texto) || [],
311
+ sugestoes: resultado.sugestoes || [],
312
+ };
313
+ // Criar estrutura compatível para estruturaResult
314
+ estruturaResult = {
315
+ valido: resultado.estrutura?.valida || false,
316
+ score: resultado.estrutura?.score || 0,
317
+ secoes_encontradas: resultado.estrutura?.secoesEncontradas || [],
318
+ secoes_faltando: resultado.estrutura?.secoesFaltando || [],
319
+ tamanho_ok: true,
320
+ feedback: resultado.feedback || [],
321
+ };
322
+ }
323
+ else {
324
+ // Fallback para sistema legado
325
+ usouTemplate = false;
326
+ estruturaResult = validarEstrutura(estado.fase_atual, args.entregavel);
327
+ gateResultado = validarGate(faseAtual, args.entregavel);
328
+ qualityScore = calcularQualityScore(estruturaResult, gateResultado);
329
+ }
205
330
  // Score < 50: BLOQUEAR
206
331
  if (qualityScore < 50) {
207
332
  return {