@maestro-ai/mcp-server 5.5.3 → 5.6.1

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 (168) hide show
  1. package/dist/constants.d.ts +1 -1
  2. package/dist/constants.js +1 -1
  3. package/dist/errors/index.js +2 -2
  4. package/dist/errors/index.js.map +1 -1
  5. package/dist/flows/onboarding-orchestrator.js +1 -1
  6. package/dist/flows/onboarding-orchestrator.js.map +1 -1
  7. package/dist/handlers/field-normalizer.d.ts +31 -0
  8. package/dist/handlers/field-normalizer.d.ts.map +1 -0
  9. package/dist/handlers/field-normalizer.js +70 -0
  10. package/dist/handlers/field-normalizer.js.map +1 -0
  11. package/dist/handlers/prd-scorer.d.ts +60 -0
  12. package/dist/handlers/prd-scorer.d.ts.map +1 -0
  13. package/dist/handlers/prd-scorer.js +157 -0
  14. package/dist/handlers/prd-scorer.js.map +1 -0
  15. package/dist/handlers/prototype-phase-handler.js.map +1 -1
  16. package/dist/handlers/shared-prompt-handler.js.map +1 -1
  17. package/dist/handlers/specialist-formatters.d.ts +42 -0
  18. package/dist/handlers/specialist-formatters.d.ts.map +1 -0
  19. package/dist/handlers/specialist-formatters.js +272 -0
  20. package/dist/handlers/specialist-formatters.js.map +1 -0
  21. package/dist/handlers/specialist-phase-handler.d.ts +1 -10
  22. package/dist/handlers/specialist-phase-handler.d.ts.map +1 -1
  23. package/dist/handlers/specialist-phase-handler.js +11 -501
  24. package/dist/handlers/specialist-phase-handler.js.map +1 -1
  25. package/dist/legacy-tools.d.ts +21 -0
  26. package/dist/legacy-tools.d.ts.map +1 -0
  27. package/dist/legacy-tools.js +377 -0
  28. package/dist/legacy-tools.js.map +1 -0
  29. package/dist/router.d.ts +2 -2
  30. package/dist/router.d.ts.map +1 -1
  31. package/dist/router.js +6 -378
  32. package/dist/router.js.map +1 -1
  33. package/dist/server.d.ts +18 -4
  34. package/dist/server.d.ts.map +1 -1
  35. package/dist/server.js +70 -1
  36. package/dist/server.js.map +1 -1
  37. package/dist/services/flow-engine.d.ts.map +1 -1
  38. package/dist/services/flow-engine.js +1 -2
  39. package/dist/services/flow-engine.js.map +1 -1
  40. package/dist/services/onboarding.service.js.map +1 -1
  41. package/dist/services/scoring-config.d.ts +47 -0
  42. package/dist/services/scoring-config.d.ts.map +1 -0
  43. package/dist/services/scoring-config.js +88 -0
  44. package/dist/services/scoring-config.js.map +1 -0
  45. package/dist/services/state.service.d.ts.map +1 -1
  46. package/dist/services/state.service.js +3 -9
  47. package/dist/services/state.service.js.map +1 -1
  48. package/dist/services/static-validator.service.d.ts +28 -0
  49. package/dist/services/static-validator.service.d.ts.map +1 -0
  50. package/dist/services/static-validator.service.js +55 -0
  51. package/dist/services/static-validator.service.js.map +1 -0
  52. package/dist/services/task-decomposer.service.d.ts +59 -0
  53. package/dist/services/task-decomposer.service.d.ts.map +1 -0
  54. package/dist/services/task-decomposer.service.js +162 -0
  55. package/dist/services/task-decomposer.service.js.map +1 -0
  56. package/dist/services/test-stub-generator.service.d.ts +32 -0
  57. package/dist/services/test-stub-generator.service.d.ts.map +1 -0
  58. package/dist/services/test-stub-generator.service.js +71 -0
  59. package/dist/services/test-stub-generator.service.js.map +1 -0
  60. package/dist/stdio.js +7 -71
  61. package/dist/stdio.js.map +1 -1
  62. package/dist/tools/aprovar-gate.d.ts.map +1 -1
  63. package/dist/tools/aprovar-gate.js +4 -0
  64. package/dist/tools/aprovar-gate.js.map +1 -1
  65. package/dist/tools/brainstorm.js.map +1 -1
  66. package/dist/tools/consolidated/avancar.d.ts.map +1 -1
  67. package/dist/tools/consolidated/avancar.js +28 -20
  68. package/dist/tools/consolidated/avancar.js.map +1 -1
  69. package/dist/tools/discovery.js.map +1 -1
  70. package/dist/tools/iniciar-projeto.js.map +1 -1
  71. package/dist/tools/maestro-tool.d.ts.map +1 -1
  72. package/dist/tools/maestro-tool.js +23 -14
  73. package/dist/tools/maestro-tool.js.map +1 -1
  74. package/dist/tools/next-steps-dashboard.js.map +1 -1
  75. package/dist/tools/prd-writer.js.map +1 -1
  76. package/dist/tools/proximo.d.ts.map +1 -1
  77. package/dist/tools/proximo.js +34 -12
  78. package/dist/tools/proximo.js.map +1 -1
  79. package/dist/tools/salvar.d.ts.map +1 -1
  80. package/dist/tools/salvar.js +9 -2
  81. package/dist/tools/salvar.js.map +1 -1
  82. package/dist/types/index.d.ts +3 -1
  83. package/dist/types/index.d.ts.map +1 -1
  84. package/dist/types/index.js.map +1 -1
  85. package/dist/utils/entregavel-path.d.ts +9 -0
  86. package/dist/utils/entregavel-path.d.ts.map +1 -1
  87. package/dist/utils/entregavel-path.js +26 -10
  88. package/dist/utils/entregavel-path.js.map +1 -1
  89. package/dist/utils/gate-orientation.d.ts.map +1 -1
  90. package/dist/utils/gate-orientation.js +2 -1
  91. package/dist/utils/gate-orientation.js.map +1 -1
  92. package/dist/utils/instructions.d.ts +2 -1
  93. package/dist/utils/instructions.d.ts.map +1 -1
  94. package/dist/utils/instructions.js +20 -15
  95. package/dist/utils/instructions.js.map +1 -1
  96. package/package.json +3 -2
  97. package/dist/gates/tiers.test.d.ts +0 -2
  98. package/dist/gates/tiers.test.d.ts.map +0 -1
  99. package/dist/gates/tiers.test.js +0 -86
  100. package/dist/gates/tiers.test.js.map +0 -1
  101. package/dist/index.d.ts +0 -3
  102. package/dist/index.d.ts.map +0 -1
  103. package/dist/index.js +0 -343
  104. package/dist/index.js.map +0 -1
  105. package/dist/tests/aprovar-gate.test.d.ts +0 -2
  106. package/dist/tests/aprovar-gate.test.d.ts.map +0 -1
  107. package/dist/tests/aprovar-gate.test.js +0 -113
  108. package/dist/tests/aprovar-gate.test.js.map +0 -1
  109. package/dist/tests/brainstorm-prd.test.d.ts +0 -5
  110. package/dist/tests/brainstorm-prd.test.d.ts.map +0 -1
  111. package/dist/tests/brainstorm-prd.test.js +0 -291
  112. package/dist/tests/brainstorm-prd.test.js.map +0 -1
  113. package/dist/tests/classificacao-progressiva.test.d.ts +0 -5
  114. package/dist/tests/classificacao-progressiva.test.d.ts.map +0 -1
  115. package/dist/tests/classificacao-progressiva.test.js +0 -372
  116. package/dist/tests/classificacao-progressiva.test.js.map +0 -1
  117. package/dist/tests/content-resolver.test.d.ts +0 -5
  118. package/dist/tests/content-resolver.test.d.ts.map +0 -1
  119. package/dist/tests/content-resolver.test.js +0 -157
  120. package/dist/tests/content-resolver.test.js.map +0 -1
  121. package/dist/tests/deliverable-validator.test.d.ts +0 -12
  122. package/dist/tests/deliverable-validator.test.d.ts.map +0 -1
  123. package/dist/tests/deliverable-validator.test.js +0 -214
  124. package/dist/tests/deliverable-validator.test.js.map +0 -1
  125. package/dist/tests/flow-engine.test.d.ts +0 -2
  126. package/dist/tests/flow-engine.test.d.ts.map +0 -1
  127. package/dist/tests/flow-engine.test.js +0 -85
  128. package/dist/tests/flow-engine.test.js.map +0 -1
  129. package/dist/tests/gate-orientation.test.d.ts +0 -2
  130. package/dist/tests/gate-orientation.test.d.ts.map +0 -1
  131. package/dist/tests/gate-orientation.test.js +0 -59
  132. package/dist/tests/gate-orientation.test.js.map +0 -1
  133. package/dist/tests/middleware.test.d.ts +0 -5
  134. package/dist/tests/middleware.test.d.ts.map +0 -1
  135. package/dist/tests/middleware.test.js +0 -254
  136. package/dist/tests/middleware.test.js.map +0 -1
  137. package/dist/tests/migracao-skills.test.d.ts +0 -2
  138. package/dist/tests/migracao-skills.test.d.ts.map +0 -1
  139. package/dist/tests/migracao-skills.test.js +0 -208
  140. package/dist/tests/migracao-skills.test.js.map +0 -1
  141. package/dist/tests/onboarding-flow.test.d.ts +0 -5
  142. package/dist/tests/onboarding-flow.test.d.ts.map +0 -1
  143. package/dist/tests/onboarding-flow.test.js +0 -231
  144. package/dist/tests/onboarding-flow.test.js.map +0 -1
  145. package/dist/tests/prd-validation.test.d.ts +0 -6
  146. package/dist/tests/prd-validation.test.d.ts.map +0 -1
  147. package/dist/tests/prd-validation.test.js +0 -164
  148. package/dist/tests/prd-validation.test.js.map +0 -1
  149. package/dist/tests/readiness-dashboard.test.d.ts +0 -5
  150. package/dist/tests/readiness-dashboard.test.d.ts.map +0 -1
  151. package/dist/tests/readiness-dashboard.test.js +0 -252
  152. package/dist/tests/readiness-dashboard.test.js.map +0 -1
  153. package/dist/tests/skill-loader.test.d.ts +0 -5
  154. package/dist/tests/skill-loader.test.d.ts.map +0 -1
  155. package/dist/tests/skill-loader.test.js +0 -244
  156. package/dist/tests/skill-loader.test.js.map +0 -1
  157. package/dist/tests/v52-integration.test.d.ts +0 -14
  158. package/dist/tests/v52-integration.test.d.ts.map +0 -1
  159. package/dist/tests/v52-integration.test.js +0 -225
  160. package/dist/tests/v52-integration.test.js.map +0 -1
  161. package/dist/tests/watcher.service.test.d.ts +0 -2
  162. package/dist/tests/watcher.service.test.d.ts.map +0 -1
  163. package/dist/tests/watcher.service.test.js +0 -119
  164. package/dist/tests/watcher.service.test.js.map +0 -1
  165. package/dist/utils/__tests__/prompt-mapper.test.d.ts +0 -2
  166. package/dist/utils/__tests__/prompt-mapper.test.d.ts.map +0 -1
  167. package/dist/utils/__tests__/prompt-mapper.test.js +0 -184
  168. package/dist/utils/__tests__/prompt-mapper.test.js.map +0 -1
@@ -1,225 +0,0 @@
1
- /**
2
- * Testes unitários para módulos integrados na v5.2
3
- *
4
- * Cobre:
5
- * - skill-cache.service (A.3)
6
- * - structured-content.service (A.8)
7
- * - annotations-fallback.service (A.7)
8
- * - response-formatter (A.6)
9
- * - client-capabilities.service (A.5)
10
- * - elicitation-fallback.service (A.7)
11
- * - sampling-fallback.service (A.7)
12
- */
13
- import { describe, it, expect, beforeEach } from "vitest";
14
- // === skill-cache.service ===
15
- import { getCached, setCache, invalidateCache, getCacheStats, } from "../services/skill-cache.service.js";
16
- describe("skill-cache.service", () => {
17
- beforeEach(() => {
18
- invalidateCache();
19
- });
20
- it("retorna null para chave inexistente", () => {
21
- expect(getCached("nao-existe")).toBeNull();
22
- });
23
- it("armazena e recupera valor", () => {
24
- setCache("key1", "valor1");
25
- expect(getCached("key1")).toBe("valor1");
26
- });
27
- it("invalida cache específico", () => {
28
- setCache("key1", "valor1");
29
- setCache("key2", "valor2");
30
- invalidateCache("key1");
31
- expect(getCached("key1")).toBeNull();
32
- expect(getCached("key2")).toBe("valor2");
33
- });
34
- it("invalida todo o cache", () => {
35
- setCache("key1", "valor1");
36
- setCache("key2", "valor2");
37
- invalidateCache();
38
- expect(getCached("key1")).toBeNull();
39
- expect(getCached("key2")).toBeNull();
40
- });
41
- it("retorna stats corretas", () => {
42
- setCache("a", "1");
43
- setCache("b", "2");
44
- const stats = getCacheStats();
45
- expect(stats.size).toBe(2);
46
- expect(stats.keys).toContain("a");
47
- expect(stats.keys).toContain("b");
48
- });
49
- });
50
- // === structured-content.service ===
51
- import { withStructuredContent, extractStructuredData, } from "../services/structured-content.service.js";
52
- describe("structured-content.service", () => {
53
- it("embute JSON como bloco markdown quando client não suporta", () => {
54
- const text = [{ type: "text", text: "# Teste" }];
55
- const data = { fase: 1, nome: "Produto" };
56
- const result = withStructuredContent(text, data, "Dados");
57
- // Sem suporte nativo, deve ter 2 blocos (original + JSON)
58
- expect(result.content.length).toBe(2);
59
- expect(result.content[1].text).toContain("```json");
60
- expect(result.content[1].text).toContain('"fase": 1');
61
- expect(result.structuredContent).toBeUndefined();
62
- });
63
- it("extractStructuredData retorna null sem structuredContent", () => {
64
- expect(extractStructuredData({})).toBeNull();
65
- });
66
- it("extractStructuredData retorna dados quando presente", () => {
67
- const data = { x: 1 };
68
- const result = extractStructuredData({
69
- structuredContent: { type: "json", json: data },
70
- });
71
- expect(result).toEqual(data);
72
- });
73
- });
74
- // === annotations-fallback.service ===
75
- import { annotateContent, forAssistantOnly, forUserOnly, } from "../services/annotations-fallback.service.js";
76
- describe("annotations-fallback.service", () => {
77
- it("forAssistantOnly adiciona annotation ou prefixo inline", () => {
78
- const block = { type: "text", text: "Instruções secretas" };
79
- const result = forAssistantOnly(block);
80
- // Deve ter o texto original (possivelmente com prefixo)
81
- expect(result.text).toContain("Instruções secretas");
82
- expect(result.type).toBe("text");
83
- });
84
- it("forUserOnly adiciona annotation ou prefixo inline", () => {
85
- const block = { type: "text", text: "Para o usuário" };
86
- const result = forUserOnly(block);
87
- expect(result.text).toContain("Para o usuário");
88
- expect(result.type).toBe("text");
89
- });
90
- it("annotateContent processa bloco individual", () => {
91
- const block = { type: "text", text: "Bloco 1" };
92
- const result = annotateContent(block, { audience: ["user"], priority: 0.5 });
93
- expect(result.type).toBe("text");
94
- expect(result.text).toContain("Bloco 1");
95
- });
96
- });
97
- // === response-formatter ===
98
- import { formatResponse, formatError, embedAllMetadata, } from "../utils/response-formatter.js";
99
- describe("response-formatter", () => {
100
- it("formatResponse gera bloco com título e resumo", () => {
101
- const blocks = formatResponse({
102
- titulo: "Teste",
103
- resumo: "Resumo do teste",
104
- });
105
- expect(blocks.length).toBeGreaterThanOrEqual(1);
106
- expect(blocks[0].text).toContain("# Teste");
107
- expect(blocks[0].text).toContain("Resumo do teste");
108
- });
109
- it("formatResponse inclui dados como tabela", () => {
110
- const blocks = formatResponse({
111
- titulo: "T",
112
- resumo: "R",
113
- dados: { Projeto: "Meu App", Fase: 3 },
114
- });
115
- const text = blocks.map(b => b.text).join("\n");
116
- expect(text).toContain("Meu App");
117
- expect(text).toContain("3");
118
- });
119
- it("formatResponse inclui alertas", () => {
120
- const blocks = formatResponse({
121
- titulo: "T",
122
- resumo: "R",
123
- alertas: ["Atenção!"],
124
- });
125
- const text = blocks.map(b => b.text).join("\n");
126
- expect(text).toContain("⚠️ Atenção!");
127
- });
128
- it("formatResponse inclui próximo passo", () => {
129
- const blocks = formatResponse({
130
- titulo: "T",
131
- resumo: "R",
132
- proximo_passo: {
133
- tool: "avancar",
134
- descricao: "Avançar fase",
135
- },
136
- });
137
- const text = blocks.map(b => b.text).join("\n");
138
- // v5.3: tools internas são remapeadas para tools públicas (executar)
139
- expect(text).toContain("```json");
140
- expect(text).toMatch(/executar\(/);
141
- expect(text).toContain("Avançar fase");
142
- });
143
- it("formatError gera bloco de erro", () => {
144
- const blocks = formatError("status", "Algo deu errado", "Tente novamente");
145
- expect(blocks.length).toBe(1);
146
- expect(blocks[0].text).toContain("❌ Erro");
147
- expect(blocks[0].text).toContain("status");
148
- expect(blocks[0].text).toContain("Algo deu errado");
149
- expect(blocks[0].text).toContain("Tente novamente");
150
- });
151
- it("embedAllMetadata embute specialist, progress e next_action", () => {
152
- const base = [{ type: "text", text: "Base" }];
153
- const result = embedAllMetadata(base, {
154
- specialist: {
155
- name: "Arquiteto",
156
- tone: "Técnico",
157
- expertise: ["Backend"],
158
- instructions: "Foque em APIs",
159
- },
160
- progress: {
161
- current_phase: "Arquitetura",
162
- total_phases: 5,
163
- completed_phases: 2,
164
- percentage: 40,
165
- },
166
- next_action: {
167
- tool: "avancar",
168
- description: "Próxima fase",
169
- args_template: {},
170
- requires_user_input: false,
171
- },
172
- });
173
- const text = result.map(b => b.text).join("\n");
174
- expect(text).toContain("Arquiteto");
175
- expect(text).toContain("40%");
176
- expect(text).toContain("avancar");
177
- });
178
- });
179
- // === client-capabilities.service ===
180
- import { captureClientCapabilities, getClientCapabilities, clientSupports, } from "../services/client-capabilities.service.js";
181
- describe("client-capabilities.service", () => {
182
- it("captura e retorna capabilities", () => {
183
- captureClientCapabilities({
184
- capabilities: { sampling: {} },
185
- clientInfo: { name: "windsurf", version: "1.0" },
186
- protocolVersion: "2025-03-26",
187
- });
188
- const caps = getClientCapabilities();
189
- expect(caps).toBeDefined();
190
- expect(caps.clientName).toBe("windsurf");
191
- expect(caps.hasSampling).toBe(true);
192
- expect(caps.hasElicitation).toBe(false);
193
- });
194
- it("clientSupports retorna boolean", () => {
195
- const result = clientSupports("hasSampling");
196
- expect(typeof result).toBe("boolean");
197
- });
198
- });
199
- // === elicitation-fallback.service ===
200
- import { buildElicitation } from "../services/elicitation-fallback.service.js";
201
- describe("elicitation-fallback.service", () => {
202
- it("gera markdown fallback para questionário", () => {
203
- const result = buildElicitation({
204
- title: "Discovery",
205
- description: "Coleta de dados",
206
- fields: [
207
- { name: "nome", label: "Nome do projeto", type: "text", required: true },
208
- { name: "tipo", label: "Tipo", type: "select", options: ["web", "mobile"], required: false },
209
- ],
210
- });
211
- expect(result.markdownFallback).toContain("Discovery");
212
- expect(result.markdownFallback).toContain("Nome do projeto");
213
- expect(typeof result.useNative).toBe("boolean");
214
- });
215
- });
216
- // === sampling-fallback.service ===
217
- import { buildCodeAnalysisFallback } from "../services/sampling-fallback.service.js";
218
- describe("sampling-fallback.service", () => {
219
- it("gera checklist de análise para código", () => {
220
- const result = buildCodeAnalysisFallback("function hello() { return 'world'; }", "completo");
221
- expect(typeof result).toBe("string");
222
- expect(result.length).toBeGreaterThan(0);
223
- });
224
- });
225
- //# sourceMappingURL=v52-integration.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"v52-integration.test.js","sourceRoot":"","sources":["../../src/tests/v52-integration.test.ts"],"names":[],"mappings":"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"}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=watcher.service.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"watcher.service.test.d.ts","sourceRoot":"","sources":["../../src/tests/watcher.service.test.ts"],"names":[],"mappings":""}
@@ -1,119 +0,0 @@
1
- import { vi, describe, it, expect, beforeEach, afterEach } from 'vitest';
2
- import { startFileWatcher, stopFileWatcher, getActiveWatcherCount } from '../services/watcher.service.js';
3
- // Mock chokidar
4
- vi.mock('chokidar', () => {
5
- const watchers = new Map();
6
- return {
7
- default: {
8
- watch: vi.fn((filePath) => {
9
- const watcher = {
10
- on: vi.fn((event, cb) => {
11
- if (!watchers.has(filePath))
12
- watchers.set(filePath, {});
13
- watchers.get(filePath)[event] = cb;
14
- return watcher;
15
- }),
16
- close: vi.fn(),
17
- // Helper para simular eventos nos testes
18
- __emit: (event, ...args) => {
19
- if (watchers.get(filePath)?.[event]) {
20
- watchers.get(filePath)[event](...args);
21
- }
22
- }
23
- };
24
- // Salvar o watcher instanciado para acesso no teste
25
- watchers.set(filePath + '_instance', watcher);
26
- return watcher;
27
- }),
28
- __getWatchers: () => watchers
29
- }
30
- };
31
- });
32
- // Mock fs/promises
33
- vi.mock('fs/promises', () => ({
34
- readFile: vi.fn().mockResolvedValue('# Produto\n\nMocked PRD content for testing.')
35
- }));
36
- // Mock ValidationPipeline
37
- vi.mock('../core/validation/ValidationPipeline.js', () => {
38
- return {
39
- ValidationPipeline: class {
40
- async validateDeliverable() {
41
- return {
42
- overallScore: 85,
43
- recommendations: ['Sugestão mockada']
44
- };
45
- }
46
- }
47
- };
48
- });
49
- describe('WatcherService', () => {
50
- beforeEach(() => {
51
- vi.useFakeTimers();
52
- // Limpar watchers residuais
53
- stopFileWatcher('/test/dir');
54
- });
55
- afterEach(() => {
56
- vi.useRealTimers();
57
- vi.clearAllMocks();
58
- });
59
- it('deve registrar um novo watcher e gerenciar contagem', async () => {
60
- const onValidationResult = vi.fn();
61
- await startFileWatcher({
62
- filePath: '/test/dir/PRD.md',
63
- diretorio: '/test/dir',
64
- faseNome: 'Produto',
65
- onValidationResult
66
- });
67
- expect(getActiveWatcherCount()).toBe(1);
68
- stopFileWatcher('/test/dir');
69
- expect(getActiveWatcherCount()).toBe(0);
70
- });
71
- it('deve disparar a validação quando o arquivo mudar respeitando debounce', async () => {
72
- let resolveValidation;
73
- const validationPromise = new Promise(r => resolveValidation = r);
74
- const onValidationResult = vi.fn().mockImplementation(() => {
75
- resolveValidation();
76
- });
77
- await startFileWatcher({
78
- filePath: '/test/dir/PRD.md',
79
- diretorio: '/test/dir',
80
- faseNome: 'Produto',
81
- onValidationResult
82
- });
83
- const chokidar = await import('chokidar');
84
- const watchersMap = chokidar.default.__getWatchers();
85
- const watcherInstance = watchersMap.get('/test/dir/PRD.md_instance');
86
- // Simular 3 eventos de change muito rápidos
87
- watcherInstance.__emit('change');
88
- watcherInstance.__emit('change');
89
- watcherInstance.__emit('change');
90
- // Avançar o tempo apenas 200ms (antes do debounce de 500ms)
91
- await vi.advanceTimersByTimeAsync(200);
92
- expect(onValidationResult).not.toHaveBeenCalled();
93
- // Avançar o tempo além dos 500ms
94
- await vi.advanceTimersByTimeAsync(350);
95
- // Aguarda toda a cadeia async (resolve readFile, etc)
96
- await validationPromise;
97
- // Deve ter chamado a validação apenas 1 vez debido ao debounce
98
- expect(onValidationResult).toHaveBeenCalledTimes(1);
99
- expect(onValidationResult).toHaveBeenCalledWith(85, 'Score: 85/100\nSugestão mockada', '/test/dir/PRD.md');
100
- });
101
- it('não deve acumular múltiplos watchers para o mesmo diretório', async () => {
102
- const onValidationResult = vi.fn();
103
- await startFileWatcher({
104
- filePath: '/test/dir/PRD.md',
105
- diretorio: '/test/dir',
106
- faseNome: 'Produto',
107
- onValidationResult
108
- });
109
- // Chamar novamente para o mesmo diretório
110
- await startFileWatcher({
111
- filePath: '/test/dir/PRD.md',
112
- diretorio: '/test/dir',
113
- faseNome: 'Produto',
114
- onValidationResult
115
- });
116
- expect(getActiveWatcherCount()).toBe(1);
117
- });
118
- });
119
- //# sourceMappingURL=watcher.service.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"watcher.service.test.js","sourceRoot":"","sources":["../../src/tests/watcher.service.test.ts"],"names":[],"mappings":"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"}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=prompt-mapper.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"prompt-mapper.test.d.ts","sourceRoot":"","sources":["../../../src/utils/__tests__/prompt-mapper.test.ts"],"names":[],"mappings":""}
@@ -1,184 +0,0 @@
1
- import { describe, it, expect } from 'vitest';
2
- import { FASE_SKILL_MAP, getSkillParaFase, temSkillParaFase, getSkillPath, getSkillFilePath, getSkillResourcePath } from '../prompt-mapper.js';
3
- describe('Mapeamento de Skills', () => {
4
- describe('FASE_SKILL_MAP', () => {
5
- it('deve ter mapeamento para todas as fases principais (fluxo simples)', () => {
6
- const fasesObrigatorias = [
7
- 'Produto',
8
- 'Requisitos',
9
- 'UX Design',
10
- 'Arquitetura',
11
- 'Backlog',
12
- 'Frontend',
13
- 'Backend'
14
- ];
15
- fasesObrigatorias.forEach(fase => {
16
- expect(FASE_SKILL_MAP[fase]).toBeDefined();
17
- expect(FASE_SKILL_MAP[fase]).toMatch(/^specialist-/);
18
- });
19
- });
20
- it('deve ter mapeamento para fases médias', () => {
21
- const fasesMedias = [
22
- 'Modelo de Domínio',
23
- 'Banco de Dados',
24
- 'Segurança',
25
- 'Testes',
26
- 'Contrato API',
27
- 'Integração'
28
- ];
29
- fasesMedias.forEach(fase => {
30
- expect(FASE_SKILL_MAP[fase]).toBeDefined();
31
- expect(FASE_SKILL_MAP[fase]).toMatch(/^specialist-/);
32
- });
33
- });
34
- it('deve ter mapeamento para fases complexas', () => {
35
- const fasesComplexas = [
36
- 'Arquitetura Avançada',
37
- 'Performance',
38
- 'Observabilidade'
39
- ];
40
- fasesComplexas.forEach(fase => {
41
- expect(FASE_SKILL_MAP[fase]).toBeDefined();
42
- expect(FASE_SKILL_MAP[fase]).toMatch(/^specialist-/);
43
- });
44
- });
45
- it('deve ter mapeamento para fase opcional', () => {
46
- expect(FASE_SKILL_MAP['Prototipagem']).toBe('specialist-prototipagem-stitch');
47
- });
48
- it('deve ter mapeamento para fases complementares', () => {
49
- const fasesComplementares = [
50
- 'Dados e Analytics',
51
- 'Acessibilidade',
52
- 'Debugging',
53
- 'Documentação',
54
- 'Exploração',
55
- 'Migração',
56
- 'Mobile',
57
- 'Mobile Design'
58
- ];
59
- fasesComplementares.forEach(fase => {
60
- expect(FASE_SKILL_MAP[fase]).toBeDefined();
61
- expect(FASE_SKILL_MAP[fase]).toMatch(/^specialist-/);
62
- });
63
- });
64
- it('deve ter total de 25 mapeamentos', () => {
65
- const totalMapeamentos = Object.keys(FASE_SKILL_MAP).length;
66
- expect(totalMapeamentos).toBe(25);
67
- });
68
- });
69
- describe('getSkillParaFase', () => {
70
- it('deve retornar skill correta para fase conhecida', () => {
71
- expect(getSkillParaFase('Produto')).toBe('specialist-gestao-produto');
72
- expect(getSkillParaFase('Requisitos')).toBe('specialist-engenharia-requisitos-ia');
73
- expect(getSkillParaFase('Arquitetura Avançada')).toBe('specialist-arquitetura-avancada');
74
- expect(getSkillParaFase('UX Design')).toBe('specialist-ux-design');
75
- });
76
- it('deve retornar null para fase desconhecida', () => {
77
- expect(getSkillParaFase('Fase Inexistente')).toBeNull();
78
- expect(getSkillParaFase('')).toBeNull();
79
- });
80
- it('deve ser case-sensitive', () => {
81
- expect(getSkillParaFase('produto')).toBeNull(); // minúsculo
82
- expect(getSkillParaFase('Produto')).toBe('specialist-gestao-produto'); // correto
83
- });
84
- });
85
- describe('temSkillParaFase', () => {
86
- it('deve retornar true para fase com skill', () => {
87
- expect(temSkillParaFase('Produto')).toBe(true);
88
- expect(temSkillParaFase('Requisitos')).toBe(true);
89
- expect(temSkillParaFase('Observabilidade')).toBe(true);
90
- });
91
- it('deve retornar false para fase sem skill', () => {
92
- expect(temSkillParaFase('Fase Inexistente')).toBe(false);
93
- expect(temSkillParaFase('')).toBe(false);
94
- });
95
- });
96
- describe('getSkillPath', () => {
97
- it('deve retornar caminho correto no Windows', () => {
98
- const path = getSkillPath('specialist-gestao-produto', 'C:\\projeto');
99
- expect(path).toContain('specialist-gestao-produto');
100
- expect(path).toContain('.agent');
101
- expect(path).toContain('skills');
102
- });
103
- it('deve retornar caminho correto no Unix', () => {
104
- const path = getSkillPath('specialist-gestao-produto', '/projeto');
105
- expect(path).toContain('specialist-gestao-produto');
106
- expect(path).toContain('.agent');
107
- expect(path).toContain('skills');
108
- });
109
- it('deve funcionar com diferentes nomes de skills', () => {
110
- const skills = [
111
- 'specialist-gestao-produto',
112
- 'specialist-arquitetura-avancada',
113
- 'specialist-desenvolvimento-frontend'
114
- ];
115
- skills.forEach(skill => {
116
- const path = getSkillPath(skill, '/projeto');
117
- expect(path).toContain(skill);
118
- });
119
- });
120
- });
121
- describe('getSkillFilePath', () => {
122
- it('deve retornar caminho de arquivo correto', () => {
123
- const path = getSkillFilePath('specialist-gestao-produto', '/projeto', 'SKILL.md');
124
- expect(path).toContain('specialist-gestao-produto');
125
- expect(path).toContain('SKILL.md');
126
- });
127
- it('deve funcionar com diferentes arquivos', () => {
128
- const arquivos = ['SKILL.md', 'README.md', 'MCP_INTEGRATION.md'];
129
- arquivos.forEach(arquivo => {
130
- const path = getSkillFilePath('specialist-gestao-produto', '/projeto', arquivo);
131
- expect(path).toContain(arquivo);
132
- });
133
- });
134
- });
135
- describe('getSkillResourcePath', () => {
136
- it('deve retornar caminho de resource correto para templates', () => {
137
- const path = getSkillResourcePath('specialist-gestao-produto', '/projeto', 'templates');
138
- expect(path).toContain('specialist-gestao-produto');
139
- expect(path).toContain('resources');
140
- expect(path).toContain('templates');
141
- });
142
- it('deve funcionar com todos os tipos de resources', () => {
143
- const tipos = [
144
- 'templates',
145
- 'examples',
146
- 'checklists',
147
- 'reference'
148
- ];
149
- tipos.forEach(tipo => {
150
- const path = getSkillResourcePath('specialist-gestao-produto', '/projeto', tipo);
151
- expect(path).toContain(tipo);
152
- expect(path).toContain('resources');
153
- });
154
- });
155
- });
156
- describe('Integração entre funções', () => {
157
- it('deve mapear fase → skill → caminho completo', () => {
158
- const fase = 'Produto';
159
- const skill = getSkillParaFase(fase);
160
- expect(skill).not.toBeNull();
161
- if (skill) {
162
- const skillPath = getSkillPath(skill, '/projeto');
163
- expect(skillPath).toContain(skill);
164
- const skillFile = getSkillFilePath(skill, '/projeto', 'SKILL.md');
165
- expect(skillFile).toContain('SKILL.md');
166
- const templatesPath = getSkillResourcePath(skill, '/projeto', 'templates');
167
- expect(templatesPath).toContain('templates');
168
- }
169
- });
170
- it('deve validar fluxo completo para todas as fases', () => {
171
- const fases = Object.keys(FASE_SKILL_MAP);
172
- fases.forEach(fase => {
173
- const skill = getSkillParaFase(fase);
174
- expect(skill).not.toBeNull();
175
- expect(temSkillParaFase(fase)).toBe(true);
176
- if (skill) {
177
- const path = getSkillPath(skill, '/projeto');
178
- expect(path).toBeTruthy();
179
- }
180
- });
181
- });
182
- });
183
- });
184
- //# sourceMappingURL=prompt-mapper.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"prompt-mapper.test.js","sourceRoot":"","sources":["../../../src/utils/__tests__/prompt-mapper.test.ts"],"names":[],"mappings":"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"}