@maestro-ai/mcp-server 5.3.1 → 5.3.3

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 (39) hide show
  1. package/dist/handlers/shared-prompt-handler.js +108 -3
  2. package/dist/handlers/shared-prompt-handler.js.map +1 -1
  3. package/dist/handlers/specialist-phase-handler.d.ts +26 -0
  4. package/dist/handlers/specialist-phase-handler.d.ts.map +1 -0
  5. package/dist/handlers/specialist-phase-handler.js +542 -0
  6. package/dist/handlers/specialist-phase-handler.js.map +1 -0
  7. package/dist/services/flow-engine.d.ts.map +1 -1
  8. package/dist/services/flow-engine.js +57 -12
  9. package/dist/services/flow-engine.js.map +1 -1
  10. package/dist/services/onboarding.service.d.ts +5 -0
  11. package/dist/services/onboarding.service.d.ts.map +1 -1
  12. package/dist/services/onboarding.service.js +29 -0
  13. package/dist/services/onboarding.service.js.map +1 -1
  14. package/dist/services/skill-loader.service.d.ts +18 -0
  15. package/dist/services/skill-loader.service.d.ts.map +1 -1
  16. package/dist/services/skill-loader.service.js +151 -0
  17. package/dist/services/skill-loader.service.js.map +1 -1
  18. package/dist/services/state.service.d.ts.map +1 -1
  19. package/dist/services/state.service.js +5 -1
  20. package/dist/services/state.service.js.map +1 -1
  21. package/dist/tools/consolidated/avancar.d.ts.map +1 -1
  22. package/dist/tools/consolidated/avancar.js +39 -13
  23. package/dist/tools/consolidated/avancar.js.map +1 -1
  24. package/dist/tools/contexto.d.ts.map +1 -1
  25. package/dist/tools/contexto.js +37 -15
  26. package/dist/tools/contexto.js.map +1 -1
  27. package/dist/tools/iniciar-projeto.d.ts.map +1 -1
  28. package/dist/tools/iniciar-projeto.js +62 -60
  29. package/dist/tools/iniciar-projeto.js.map +1 -1
  30. package/dist/tools/maestro-tool.d.ts.map +1 -1
  31. package/dist/tools/maestro-tool.js +123 -51
  32. package/dist/tools/maestro-tool.js.map +1 -1
  33. package/dist/tools/setup-inicial.d.ts +1 -1
  34. package/dist/tools/setup-inicial.d.ts.map +1 -1
  35. package/dist/tools/setup-inicial.js +62 -10
  36. package/dist/tools/setup-inicial.js.map +1 -1
  37. package/dist/types/onboarding.d.ts +15 -1
  38. package/dist/types/onboarding.d.ts.map +1 -1
  39. package/package.json +1 -1
@@ -0,0 +1,542 @@
1
+ /**
2
+ * Specialist Phase Handler (v6.0)
3
+ *
4
+ * Handler central do novo fluxo de onboarding unificado.
5
+ * Gerencia o ciclo: specialist_active → collecting → generating → validating → approved
6
+ *
7
+ * Resolve:
8
+ * - P5: Especialista nunca ativado de verdade
9
+ * - P10: IA chama tool errada
10
+ * - P11: next_action sem parâmetros necessários
11
+ * - P14: Recovery paths claros em caso de erro
12
+ */
13
+ import { formatResponse, formatError } from "../utils/response-formatter.js";
14
+ import { serializarEstado } from "../state/storage.js";
15
+ import { saveFile } from "../utils/persistence.js";
16
+ import { ContentResolverService } from "../services/content-resolver.service.js";
17
+ import { SkillLoaderService } from "../services/skill-loader.service.js";
18
+ /**
19
+ * Entry point do specialist phase handler.
20
+ * Detecta o status atual e delega para o handler correto.
21
+ */
22
+ export async function handleSpecialistPhase(args) {
23
+ const { estado, diretorio } = args;
24
+ const onboarding = estado.onboarding;
25
+ if (!onboarding?.specialistPhase) {
26
+ return {
27
+ content: formatError("specialist-phase", "Nenhuma fase de especialista ativa encontrada.", `Use \`maestro({diretorio: "${diretorio}"})\` para verificar o status do projeto.`),
28
+ isError: true,
29
+ };
30
+ }
31
+ const sp = onboarding.specialistPhase;
32
+ switch (sp.status) {
33
+ case 'active':
34
+ case 'collecting':
35
+ return handleCollecting(args, onboarding, sp);
36
+ case 'generating':
37
+ return handleGenerating(args, onboarding, sp);
38
+ case 'validating':
39
+ return handleValidating(args, onboarding, sp);
40
+ case 'approved':
41
+ return handleApproved(args, onboarding, sp);
42
+ default:
43
+ return {
44
+ content: formatError("specialist-phase", `Status desconhecido: ${sp.status}`, `Use \`executar({diretorio: "${diretorio}", acao: "avancar"})\` para tentar avançar.`),
45
+ isError: true,
46
+ };
47
+ }
48
+ }
49
+ /**
50
+ * Handler: collecting — Recebe respostas do usuário e acumula dados
51
+ */
52
+ async function handleCollecting(args, onboarding, sp) {
53
+ const { estado, diretorio, respostas } = args;
54
+ const mode = onboarding.mode || 'balanced';
55
+ // Se não há respostas, mostrar o que falta
56
+ if (!respostas || Object.keys(respostas).length === 0) {
57
+ return buildCollectionPrompt(diretorio, sp, mode);
58
+ }
59
+ // Acumular dados recebidos
60
+ for (const [key, value] of Object.entries(respostas)) {
61
+ if (value !== undefined && value !== null && value !== '') {
62
+ sp.collectedData[key] = value;
63
+ }
64
+ }
65
+ sp.interactionCount++;
66
+ sp.status = 'collecting';
67
+ onboarding.totalInteractions++;
68
+ onboarding.lastInteractionAt = new Date().toISOString();
69
+ // Verificar se tem dados suficientes para gerar PRD
70
+ const required = getRequiredFields(mode);
71
+ const missing = required.filter(f => !sp.collectedData[f.id]);
72
+ const collected = required.filter(f => sp.collectedData[f.id]);
73
+ if (missing.length === 0) {
74
+ // Todos os campos obrigatórios preenchidos → gerar PRD
75
+ sp.status = 'generating';
76
+ await persistState(estado, onboarding, diretorio);
77
+ return handleGenerating(args, onboarding, sp);
78
+ }
79
+ // Ainda faltam campos — pedir mais informações
80
+ await persistState(estado, onboarding, diretorio);
81
+ const progressPct = Math.round((collected.length / required.length) * 100);
82
+ // v6.0 (P11): next_action com parâmetros COMPLETOS e EXATOS
83
+ const missingTemplate = {};
84
+ for (const f of missing) {
85
+ missingTemplate[f.id] = `<${f.label}>`;
86
+ }
87
+ return {
88
+ content: formatResponse({
89
+ titulo: "🧠 Especialista: Gestão de Produto",
90
+ resumo: `Dados recebidos! ${collected.length}/${required.length} campos preenchidos (${progressPct}%).`,
91
+ dados: {
92
+ "Campos preenchidos": `${collected.length}/${required.length}`,
93
+ "Progresso": `${progressPct}%`,
94
+ "Interações": sp.interactionCount.toString(),
95
+ },
96
+ instrucoes: `⚠️ OBRIGATÓRIO: Pergunte ao usuário os campos que ainda faltam. NÃO invente dados.
97
+
98
+ Campos já coletados:
99
+ ${collected.map(f => `✅ **${f.label}**: ${truncateValue(sp.collectedData[f.id])}`).join('\n')}
100
+
101
+ Campos que FALTAM (pergunte ao usuário):
102
+ ${missing.map(f => `❌ **${f.label}** — ${f.hint}`).join('\n')}
103
+
104
+ ⚠️ Para avançar, SEMPRE use: \`executar({acao: "avancar"})\`
105
+ ⚠️ NUNCA use: \`maestro({acao: "status"})\` para tentar avançar`,
106
+ proximo_passo: {
107
+ tool: "executar",
108
+ descricao: `Enviar respostas dos campos faltantes`,
109
+ args: `{ "diretorio": "${diretorio}", "acao": "avancar", "respostas": ${JSON.stringify(missingTemplate)} }`,
110
+ requer_input_usuario: true,
111
+ prompt_usuario: `Responda: ${missing.map(f => f.label).join(', ')}`,
112
+ },
113
+ }),
114
+ next_action: {
115
+ tool: "executar",
116
+ description: `Enviar respostas: ${missing.map(f => f.label).join(', ')}`,
117
+ args_template: {
118
+ diretorio,
119
+ acao: "avancar",
120
+ respostas: missingTemplate,
121
+ },
122
+ requires_user_input: true,
123
+ user_prompt: `Responda: ${missing.map(f => f.label).join(', ')}`,
124
+ },
125
+ specialist_persona: {
126
+ name: "Gestão de Produto",
127
+ tone: "Estratégico e orientado ao usuário",
128
+ expertise: ["product discovery", "lean startup", "user stories", "MVP definition"],
129
+ instructions: "Conduza a coleta de forma conversacional focada em PRODUTO. PERGUNTE — NÃO invente. Faça follow-up quando respostas forem vagas (< 20 palavras).",
130
+ },
131
+ progress: {
132
+ current_phase: "specialist_collecting",
133
+ total_phases: 5,
134
+ completed_phases: 1,
135
+ percentage: 20 + Math.round(progressPct * 0.3),
136
+ },
137
+ };
138
+ }
139
+ /**
140
+ * Handler: generating — Gera PRD draft a partir dos dados coletados
141
+ */
142
+ async function handleGenerating(args, onboarding, sp) {
143
+ const { estado, diretorio } = args;
144
+ const mode = onboarding.mode || 'balanced';
145
+ // Carregar template e checklist reais da skill
146
+ let templateContent = "";
147
+ let checklistContent = "";
148
+ try {
149
+ const contentResolver = new ContentResolverService(diretorio);
150
+ const skillLoader = new SkillLoaderService(contentResolver);
151
+ const pkg = await skillLoader.loadFullPackage(sp.skillName);
152
+ if (pkg) {
153
+ templateContent = pkg.templateContent;
154
+ checklistContent = pkg.checklistContent;
155
+ }
156
+ }
157
+ catch (err) {
158
+ console.warn('[specialist-phase] Falha ao carregar recursos:', err);
159
+ }
160
+ // Montar contexto para geração do PRD
161
+ const collectedSummary = Object.entries(sp.collectedData)
162
+ .map(([key, value]) => `- **${key}**: ${value}`)
163
+ .join('\n');
164
+ sp.status = 'generating';
165
+ await persistState(estado, onboarding, diretorio);
166
+ return {
167
+ content: formatResponse({
168
+ titulo: "📝 Geração do PRD",
169
+ resumo: "Todos os dados foram coletados. Gerando PRD draft usando o template do especialista.",
170
+ instrucoes: `⚠️ OBRIGATÓRIO: Use o template abaixo para gerar o PRD. NÃO invente dados que não foram coletados.
171
+
172
+ ## Dados Coletados do Usuário
173
+
174
+ ${collectedSummary}
175
+
176
+ ${templateContent ? `## Template do PRD (USE ESTE TEMPLATE)
177
+
178
+ ${templateContent}` : '## Template do PRD\n\nGere um PRD estruturado com: Visão, Problema, Público-alvo, Funcionalidades MVP, Métricas de Sucesso, Riscos.'}
179
+
180
+ ${checklistContent ? `## Checklist de Validação (VALIDE CONTRA ESTE CHECKLIST)
181
+
182
+ ${checklistContent}` : ''}
183
+
184
+ ---
185
+
186
+ ⚠️ **INSTRUÇÕES DE GERAÇÃO:**
187
+ 1. Preencha CADA seção do template com os dados coletados
188
+ 2. Se um dado não foi coletado, marque como "A definir com o usuário"
189
+ 3. NÃO invente números, métricas ou dados que o usuário não forneceu
190
+ 4. Após gerar, envie o PRD como entregável:
191
+
192
+ \`\`\`json
193
+ executar({
194
+ "diretorio": "${diretorio}",
195
+ "acao": "avancar",
196
+ "entregavel": "<conteúdo completo do PRD>"
197
+ })
198
+ \`\`\`
199
+
200
+ ⚠️ Para avançar, SEMPRE use: \`executar({acao: "avancar", entregavel: "..."})\`
201
+ ⚠️ NUNCA use: \`maestro({acao: "status"})\` para tentar avançar`,
202
+ proximo_passo: {
203
+ tool: "executar",
204
+ descricao: "Enviar PRD gerado como entregável",
205
+ args: `{ "diretorio": "${diretorio}", "acao": "avancar", "entregavel": "<PRD completo>" }`,
206
+ requer_input_usuario: false,
207
+ auto_execute: true,
208
+ },
209
+ }),
210
+ next_action: {
211
+ tool: "executar",
212
+ description: "Gerar e enviar PRD como entregável",
213
+ args_template: {
214
+ diretorio,
215
+ acao: "avancar",
216
+ entregavel: "{{PRD_GERADO_COM_TEMPLATE}}",
217
+ },
218
+ requires_user_input: false,
219
+ auto_execute: true,
220
+ },
221
+ specialist_persona: {
222
+ name: "Gestão de Produto",
223
+ tone: "Completo e estruturado",
224
+ expertise: ["PRDs", "especificações", "escopo", "métricas de sucesso"],
225
+ instructions: "Gere o PRD usando EXATAMENTE o template fornecido. Preencha com dados REAIS coletados. Marque gaps como 'A definir'.",
226
+ },
227
+ progress: {
228
+ current_phase: "specialist_generating",
229
+ total_phases: 5,
230
+ completed_phases: 2,
231
+ percentage: 55,
232
+ },
233
+ };
234
+ }
235
+ /**
236
+ * Handler: validating — Recebe PRD draft e valida
237
+ */
238
+ async function handleValidating(args, onboarding, sp) {
239
+ const { estado, diretorio, entregavel } = args;
240
+ if (!entregavel) {
241
+ // Se chamou sem entregável, voltar para generating
242
+ sp.status = 'generating';
243
+ await persistState(estado, onboarding, diretorio);
244
+ return handleGenerating(args, onboarding, sp);
245
+ }
246
+ // Salvar PRD draft
247
+ sp.prdDraft = entregavel;
248
+ sp.status = 'validating';
249
+ // Calcular score básico de validação
250
+ const score = calculatePrdScore(entregavel, onboarding.mode);
251
+ sp.validationScore = score;
252
+ onboarding.prdStatus = 'draft';
253
+ onboarding.totalInteractions++;
254
+ onboarding.lastInteractionAt = new Date().toISOString();
255
+ // Salvar PRD como arquivo
256
+ try {
257
+ await saveFile(`${diretorio}/.maestro/entregaveis/prd-draft.md`, entregavel);
258
+ }
259
+ catch (err) {
260
+ console.warn('[specialist-phase] Falha ao salvar PRD:', err);
261
+ }
262
+ await persistState(estado, onboarding, diretorio);
263
+ if (score >= 70) {
264
+ // PRD aprovado
265
+ sp.status = 'approved';
266
+ sp.completedAt = new Date().toISOString();
267
+ onboarding.prdStatus = 'validated';
268
+ onboarding.prdScore = score;
269
+ await persistState(estado, onboarding, diretorio);
270
+ return handleApproved(args, onboarding, sp);
271
+ }
272
+ // PRD precisa de melhorias
273
+ const gaps = identifyPrdGaps(entregavel, onboarding.mode);
274
+ return {
275
+ content: formatResponse({
276
+ titulo: "📊 Validação do PRD",
277
+ resumo: `PRD recebido. Score: ${score}/100. ${score >= 70 ? 'Aprovado!' : 'Precisa de melhorias.'}`,
278
+ dados: {
279
+ "Score": `${score}/100`,
280
+ "Status": score >= 70 ? "✅ Aprovado" : "⚠️ Precisa de melhorias",
281
+ "Mínimo": "70/100",
282
+ },
283
+ instrucoes: `${gaps.length > 0 ? `## Gaps Identificados\n\n${gaps.map(g => `- ❌ ${g}`).join('\n')}\n\n` : ''}⚠️ Melhore o PRD nos pontos acima e reenvie:
284
+
285
+ \`\`\`json
286
+ executar({
287
+ "diretorio": "${diretorio}",
288
+ "acao": "avancar",
289
+ "entregavel": "<PRD melhorado>"
290
+ })
291
+ \`\`\`
292
+
293
+ ⚠️ Para avançar, SEMPRE use: \`executar({acao: "avancar", entregavel: "..."})\``,
294
+ proximo_passo: {
295
+ tool: "executar",
296
+ descricao: "Reenviar PRD melhorado",
297
+ args: `{ "diretorio": "${diretorio}", "acao": "avancar", "entregavel": "<PRD melhorado>" }`,
298
+ requer_input_usuario: false,
299
+ auto_execute: true,
300
+ },
301
+ }),
302
+ next_action: {
303
+ tool: "executar",
304
+ description: "Melhorar e reenviar PRD",
305
+ args_template: {
306
+ diretorio,
307
+ acao: "avancar",
308
+ entregavel: "{{PRD_MELHORADO}}",
309
+ },
310
+ requires_user_input: false,
311
+ auto_execute: true,
312
+ },
313
+ progress: {
314
+ current_phase: "specialist_validating",
315
+ total_phases: 5,
316
+ completed_phases: 3,
317
+ percentage: 65,
318
+ },
319
+ };
320
+ }
321
+ /**
322
+ * Handler: approved — PRD aprovado, preparar transição
323
+ */
324
+ async function handleApproved(args, onboarding, sp) {
325
+ const { estado, diretorio } = args;
326
+ sp.status = 'approved';
327
+ sp.completedAt = sp.completedAt || new Date().toISOString();
328
+ onboarding.prdStatus = 'approved';
329
+ onboarding.phase = 'completed';
330
+ onboarding.completedAt = new Date().toISOString();
331
+ // Avançar estado do projeto para fase 1 de desenvolvimento
332
+ estado.fase_atual = 1;
333
+ estado.aguardando_classificacao = true;
334
+ await persistState(estado, onboarding, diretorio);
335
+ return {
336
+ content: formatResponse({
337
+ titulo: "✅ PRD Aprovado!",
338
+ resumo: `PRD validado com score ${sp.validationScore || 'N/A'}/100. Onboarding concluído!`,
339
+ dados: {
340
+ "Score Final": `${sp.validationScore || 'N/A'}/100`,
341
+ "Interações": sp.interactionCount.toString(),
342
+ "Status": "Aprovado",
343
+ },
344
+ instrucoes: `O PRD foi aprovado. O projeto agora avança para a fase de desenvolvimento.
345
+
346
+ ⚠️ Próximo passo: Confirmar classificação do projeto baseada no PRD gerado.
347
+
348
+ \`\`\`json
349
+ executar({
350
+ "diretorio": "${diretorio}",
351
+ "acao": "avancar"
352
+ })
353
+ \`\`\`
354
+
355
+ ⚠️ Para avançar, SEMPRE use: \`executar({acao: "avancar"})\`
356
+ ⚠️ NUNCA use: \`maestro({acao: "status"})\` para tentar avançar`,
357
+ proximo_passo: {
358
+ tool: "executar",
359
+ descricao: "Avançar para fase de desenvolvimento",
360
+ args: `{ "diretorio": "${diretorio}", "acao": "avancar" }`,
361
+ requer_input_usuario: false,
362
+ auto_execute: true,
363
+ },
364
+ }),
365
+ next_action: {
366
+ tool: "executar",
367
+ description: "Avançar para fase de desenvolvimento",
368
+ args_template: {
369
+ diretorio,
370
+ acao: "avancar",
371
+ },
372
+ requires_user_input: false,
373
+ auto_execute: true,
374
+ },
375
+ progress: {
376
+ current_phase: "specialist_approved",
377
+ total_phases: 5,
378
+ completed_phases: 4,
379
+ percentage: 85,
380
+ },
381
+ };
382
+ }
383
+ // === HELPERS ===
384
+ /**
385
+ * Constrói prompt de coleta quando não há respostas
386
+ */
387
+ function buildCollectionPrompt(diretorio, sp, mode) {
388
+ const required = getRequiredFields(mode);
389
+ const missing = required.filter(f => !sp.collectedData[f.id]);
390
+ const collected = required.filter(f => sp.collectedData[f.id]);
391
+ const missingTemplate = {};
392
+ for (const f of missing) {
393
+ missingTemplate[f.id] = `<${f.label}>`;
394
+ }
395
+ const collectedInfo = collected.length > 0
396
+ ? `\n\nCampos já coletados:\n${collected.map(f => `✅ **${f.label}**: ${truncateValue(sp.collectedData[f.id])}`).join('\n')}`
397
+ : '';
398
+ return {
399
+ content: formatResponse({
400
+ titulo: "🧠 Especialista: Gestão de Produto",
401
+ resumo: `Coleta de informações do produto. ${collected.length}/${required.length} campos preenchidos.`,
402
+ instrucoes: `⚠️ OBRIGATÓRIO: Pergunte ao usuário os campos abaixo. NÃO invente dados.
403
+ ${collectedInfo}
404
+
405
+ Campos que FALTAM (pergunte ao usuário):
406
+ ${missing.map(f => `❌ **${f.label}** — ${f.hint}`).join('\n')}
407
+
408
+ Após coletar as respostas, EXECUTE:
409
+
410
+ \`\`\`json
411
+ executar({
412
+ "diretorio": "${diretorio}",
413
+ "acao": "avancar",
414
+ "respostas": ${JSON.stringify(missingTemplate, null, 4)}
415
+ })
416
+ \`\`\`
417
+
418
+ ⚠️ Para avançar, SEMPRE use: \`executar({acao: "avancar"})\`
419
+ ⚠️ NUNCA use: \`maestro({acao: "status"})\` para tentar avançar`,
420
+ proximo_passo: {
421
+ tool: "executar",
422
+ descricao: "Enviar respostas coletadas do usuário",
423
+ args: `{ "diretorio": "${diretorio}", "acao": "avancar", "respostas": ${JSON.stringify(missingTemplate)} }`,
424
+ requer_input_usuario: true,
425
+ prompt_usuario: `Responda: ${missing.map(f => f.label).join(', ')}`,
426
+ },
427
+ }),
428
+ next_action: {
429
+ tool: "executar",
430
+ description: `Coletar e enviar: ${missing.map(f => f.label).join(', ')}`,
431
+ args_template: {
432
+ diretorio,
433
+ acao: "avancar",
434
+ respostas: missingTemplate,
435
+ },
436
+ requires_user_input: true,
437
+ user_prompt: `Pergunte ao usuário: ${missing.map(f => f.label).join(', ')}`,
438
+ },
439
+ specialist_persona: {
440
+ name: "Gestão de Produto",
441
+ tone: "Estratégico e orientado ao usuário",
442
+ expertise: ["product discovery", "lean startup", "user stories", "MVP definition"],
443
+ instructions: "Conduza a coleta focada em PRODUTO. PERGUNTE — NÃO invente. Faça follow-up quando respostas forem vagas.",
444
+ },
445
+ progress: {
446
+ current_phase: "specialist_active",
447
+ total_phases: 5,
448
+ completed_phases: 1,
449
+ percentage: 20,
450
+ },
451
+ };
452
+ }
453
+ /**
454
+ * Retorna campos obrigatórios por modo
455
+ */
456
+ function getRequiredFields(mode) {
457
+ const fields = [
458
+ { id: 'problema', label: 'Problema central', hint: 'Qual problema o produto resolve?', modes: ['economy', 'balanced', 'quality'] },
459
+ { id: 'publico_alvo', label: 'Público-alvo', hint: 'Quem são os usuários principais?', modes: ['economy', 'balanced', 'quality'] },
460
+ { id: 'funcionalidades_mvp', label: 'Funcionalidades MVP', hint: '3-5 features essenciais', modes: ['economy', 'balanced', 'quality'] },
461
+ { id: 'north_star_metric', label: 'North Star Metric', hint: 'Como medir sucesso?', modes: ['economy', 'balanced', 'quality'] },
462
+ { id: 'riscos', label: 'Riscos principais', hint: 'Riscos de mercado, técnicos, negócio', modes: ['balanced', 'quality'] },
463
+ { id: 'timeline', label: 'Timeline desejado', hint: 'Cronograma esperado', modes: ['balanced', 'quality'] },
464
+ { id: 'personas', label: 'Personas detalhadas', hint: '2-3 personas com JTBD', modes: ['quality'] },
465
+ { id: 'go_to_market', label: 'Estratégia go-to-market', hint: 'Como alcançar os primeiros usuários', modes: ['quality'] },
466
+ ];
467
+ return fields.filter(f => f.modes.includes(mode));
468
+ }
469
+ /**
470
+ * Calcula score básico do PRD
471
+ */
472
+ function calculatePrdScore(prd, mode) {
473
+ let score = 0;
474
+ const checks = [
475
+ { pattern: /proble?ma|pain\s*point/i, weight: 15, label: 'Problema definido' },
476
+ { pattern: /p[uú]blico|target|persona|usu[aá]rio/i, weight: 15, label: 'Público-alvo' },
477
+ { pattern: /funcionalidade|feature|mvp/i, weight: 15, label: 'Funcionalidades MVP' },
478
+ { pattern: /m[eé]trica|kpi|north\s*star|sucesso/i, weight: 10, label: 'Métricas' },
479
+ { pattern: /risco|mitiga/i, weight: 10, label: 'Riscos' },
480
+ { pattern: /escopo|fora\s*do\s*escopo|out\s*of\s*scope/i, weight: 10, label: 'Escopo' },
481
+ { pattern: /cronograma|timeline|prazo/i, weight: 5, label: 'Timeline' },
482
+ { pattern: /requisito|requirement/i, weight: 5, label: 'Requisitos' },
483
+ ];
484
+ for (const check of checks) {
485
+ if (check.pattern.test(prd)) {
486
+ score += check.weight;
487
+ }
488
+ }
489
+ // Bonus por tamanho (PRDs muito curtos são incompletos)
490
+ const wordCount = prd.split(/\s+/).length;
491
+ if (wordCount > 500)
492
+ score += 10;
493
+ if (wordCount > 1000)
494
+ score += 5;
495
+ return Math.min(score, 100);
496
+ }
497
+ /**
498
+ * Identifica gaps no PRD
499
+ */
500
+ function identifyPrdGaps(prd, mode) {
501
+ const gaps = [];
502
+ const checks = [
503
+ { pattern: /proble?ma|pain\s*point/i, label: 'Seção de Problema não encontrada' },
504
+ { pattern: /p[uú]blico|target|persona/i, label: 'Seção de Público-alvo não encontrada' },
505
+ { pattern: /funcionalidade|feature|mvp/i, label: 'Seção de Funcionalidades MVP não encontrada' },
506
+ { pattern: /m[eé]trica|kpi|north\s*star/i, label: 'Seção de Métricas de Sucesso não encontrada' },
507
+ { pattern: /risco|mitiga/i, label: 'Seção de Riscos não encontrada' },
508
+ { pattern: /escopo|fora\s*do\s*escopo/i, label: 'Definição de Escopo não encontrada' },
509
+ ];
510
+ for (const check of checks) {
511
+ if (!check.pattern.test(prd)) {
512
+ gaps.push(check.label);
513
+ }
514
+ }
515
+ const wordCount = prd.split(/\s+/).length;
516
+ if (wordCount < 200) {
517
+ gaps.push(`PRD muito curto (${wordCount} palavras). Mínimo recomendado: 500 palavras.`);
518
+ }
519
+ return gaps;
520
+ }
521
+ /**
522
+ * Trunca valor para exibição
523
+ */
524
+ function truncateValue(value) {
525
+ const str = String(value);
526
+ return str.length > 80 ? str.substring(0, 77) + '...' : str;
527
+ }
528
+ /**
529
+ * Persiste estado atualizado
530
+ */
531
+ async function persistState(estado, onboarding, diretorio) {
532
+ estado.onboarding = onboarding;
533
+ estado.atualizado_em = new Date().toISOString();
534
+ const estadoFile = serializarEstado(estado);
535
+ try {
536
+ await saveFile(`${diretorio}/${estadoFile.path}`, estadoFile.content);
537
+ }
538
+ catch (err) {
539
+ console.error('[specialist-phase] Erro ao salvar estado:', err);
540
+ }
541
+ }
542
+ //# sourceMappingURL=specialist-phase-handler.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"specialist-phase-handler.js","sourceRoot":"","sources":["../../src/handlers/specialist-phase-handler.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"flow-engine.d.ts","sourceRoot":"","sources":["../../src/services/flow-engine.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AACvD,OAAO,KAAK,EAAE,UAAU,EAAE,YAAY,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AAIxF;;GAEG;AACH,MAAM,WAAW,SAAS;IACtB,eAAe,EAAE,OAAO,CAAC;IACzB,UAAU,EAAE,OAAO,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,cAAc,EAAE,MAAM,EAAE,CAAC;IACzB,IAAI,EAAE,SAAS,GAAG,UAAU,GAAG,SAAS,CAAC;IACzC,eAAe,EAAE,MAAM,CAAC;IACxB,gBAAgB,EAAE,MAAM,CAAC;IACzB,SAAS,EAAE,MAAM,CAAC;IAClB,mBAAmB,EAAE,OAAO,CAAC;IAC7B,uBAAuB,EAAE,OAAO,CAAC;IACjC,eAAe,EAAE,OAAO,CAAC;IACzB,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,OAAO,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;CACrB;AAED;;GAEG;AACH,MAAM,WAAW,QAAQ;IACrB,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,aAAa,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACvC,mBAAmB,EAAE,OAAO,CAAC;IAC7B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,UAAU,CAAC,EAAE,iBAAiB,GAAG,IAAI,CAAC;CACzC;AAED;;GAEG;AACH,UAAU,cAAc;IACpB,IAAI,EAAE,MAAM,CAAC;IACb,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,CAAC,EAAE,CAAC,KAAK,EAAE,SAAS,KAAK,OAAO,CAAC;IAC1C,mBAAmB,EAAE,OAAO,CAAC;IAC7B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,YAAY,CAAC,EAAE,OAAO,CAAC;CAC1B;AAyID;;GAEG;AACH,wBAAgB,YAAY,CAAC,MAAM,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,GAAG,SAAS,CAoBhF;AAyBD;;GAEG;AACH,wBAAgB,WAAW,CAAC,MAAM,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,GAAG,QAAQ,CAsC9E;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,QAAQ,GAAG,UAAU,CAS/D;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,MAAM,EAAE,aAAa,GAAG,YAAY,CAanE;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,MAAM,EAAE,aAAa,GAAG,OAAO,CAQ7D;AAED;;GAEG;AACH,wBAAgB,uBAAuB,CAAC,MAAM,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,GAAG,cAAc,EAAE,CAMlG"}
1
+ {"version":3,"file":"flow-engine.d.ts","sourceRoot":"","sources":["../../src/services/flow-engine.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AACvD,OAAO,KAAK,EAAE,UAAU,EAAE,YAAY,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AAIxF;;GAEG;AACH,MAAM,WAAW,SAAS;IACtB,eAAe,EAAE,OAAO,CAAC;IACzB,UAAU,EAAE,OAAO,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,cAAc,EAAE,MAAM,EAAE,CAAC;IACzB,IAAI,EAAE,SAAS,GAAG,UAAU,GAAG,SAAS,CAAC;IACzC,eAAe,EAAE,MAAM,CAAC;IACxB,gBAAgB,EAAE,MAAM,CAAC;IACzB,SAAS,EAAE,MAAM,CAAC;IAClB,mBAAmB,EAAE,OAAO,CAAC;IAC7B,uBAAuB,EAAE,OAAO,CAAC;IACjC,eAAe,EAAE,OAAO,CAAC;IACzB,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,OAAO,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;CACrB;AAED;;GAEG;AACH,MAAM,WAAW,QAAQ;IACrB,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,aAAa,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACvC,mBAAmB,EAAE,OAAO,CAAC;IAC7B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,UAAU,CAAC,EAAE,iBAAiB,GAAG,IAAI,CAAC;CACzC;AAED;;GAEG;AACH,UAAU,cAAc;IACpB,IAAI,EAAE,MAAM,CAAC;IACb,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,CAAC,EAAE,CAAC,KAAK,EAAE,SAAS,KAAK,OAAO,CAAC;IAC1C,mBAAmB,EAAE,OAAO,CAAC;IAC7B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,YAAY,CAAC,EAAE,OAAO,CAAC;CAC1B;AAsKD;;GAEG;AACH,wBAAgB,YAAY,CAAC,MAAM,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,GAAG,SAAS,CAoBhF;AAuCD;;GAEG;AACH,wBAAgB,WAAW,CAAC,MAAM,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,GAAG,QAAQ,CAsC9E;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,QAAQ,GAAG,UAAU,CAS/D;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,MAAM,EAAE,aAAa,GAAG,YAAY,CAanE;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,MAAM,EAAE,aAAa,GAAG,OAAO,CAY7D;AAED;;GAEG;AACH,wBAAgB,uBAAuB,CAAC,MAAM,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,GAAG,cAAc,EAAE,CAMlG"}