@maestro-ai/mcp-server 5.4.5 → 5.5.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 (127) hide show
  1. package/README.md +68 -83
  2. package/dist/content/rules/RULES.md +14 -0
  3. package/dist/core/metrics/MetricsCollector.d.ts +28 -12
  4. package/dist/core/metrics/MetricsCollector.d.ts.map +1 -1
  5. package/dist/core/metrics/MetricsCollector.js +151 -12
  6. package/dist/core/metrics/MetricsCollector.js.map +1 -1
  7. package/dist/core/validation/ValidationPipeline.d.ts +24 -2
  8. package/dist/core/validation/ValidationPipeline.d.ts.map +1 -1
  9. package/dist/core/validation/ValidationPipeline.js +46 -2
  10. package/dist/core/validation/ValidationPipeline.js.map +1 -1
  11. package/dist/core/validation/layers/DeliverableValidator.d.ts +13 -0
  12. package/dist/core/validation/layers/DeliverableValidator.d.ts.map +1 -0
  13. package/dist/core/validation/layers/DeliverableValidator.js +276 -0
  14. package/dist/core/validation/layers/DeliverableValidator.js.map +1 -0
  15. package/dist/gates/contextual-recommender.d.ts.map +1 -1
  16. package/dist/gates/contextual-recommender.js +260 -1
  17. package/dist/gates/contextual-recommender.js.map +1 -1
  18. package/dist/gates/validator.d.ts +5 -6
  19. package/dist/gates/validator.d.ts.map +1 -1
  20. package/dist/gates/validator.js +9 -6
  21. package/dist/gates/validator.js.map +1 -1
  22. package/dist/middleware/adr-generation.middleware.d.ts +5 -0
  23. package/dist/middleware/adr-generation.middleware.d.ts.map +1 -0
  24. package/dist/middleware/adr-generation.middleware.js +214 -0
  25. package/dist/middleware/adr-generation.middleware.js.map +1 -0
  26. package/dist/middleware/flow-engine.middleware.d.ts +5 -3
  27. package/dist/middleware/flow-engine.middleware.d.ts.map +1 -1
  28. package/dist/middleware/flow-engine.middleware.js +18 -10
  29. package/dist/middleware/flow-engine.middleware.js.map +1 -1
  30. package/dist/middleware/index.d.ts +18 -11
  31. package/dist/middleware/index.d.ts.map +1 -1
  32. package/dist/middleware/index.js +24 -11
  33. package/dist/middleware/index.js.map +1 -1
  34. package/dist/middleware/orchestration-pipeline.middleware.d.ts +42 -0
  35. package/dist/middleware/orchestration-pipeline.middleware.d.ts.map +1 -0
  36. package/dist/middleware/orchestration-pipeline.middleware.js +57 -0
  37. package/dist/middleware/orchestration-pipeline.middleware.js.map +1 -0
  38. package/dist/middleware/skill-injection.middleware.js +1 -1
  39. package/dist/middleware/skill-injection.middleware.js.map +1 -1
  40. package/dist/middleware/validation.middleware.d.ts +11 -0
  41. package/dist/middleware/validation.middleware.d.ts.map +1 -1
  42. package/dist/middleware/validation.middleware.js +54 -0
  43. package/dist/middleware/validation.middleware.js.map +1 -1
  44. package/dist/router.d.ts.map +1 -1
  45. package/dist/router.js +20 -14
  46. package/dist/router.js.map +1 -1
  47. package/dist/services/flow-engine.d.ts +1 -0
  48. package/dist/services/flow-engine.d.ts.map +1 -1
  49. package/dist/services/flow-engine.js +14 -2
  50. package/dist/services/flow-engine.js.map +1 -1
  51. package/dist/services/watcher.service.d.ts +45 -0
  52. package/dist/services/watcher.service.d.ts.map +1 -0
  53. package/dist/services/watcher.service.js +106 -0
  54. package/dist/services/watcher.service.js.map +1 -0
  55. package/dist/state/context.d.ts +15 -4
  56. package/dist/state/context.d.ts.map +1 -1
  57. package/dist/state/context.js +36 -9
  58. package/dist/state/context.js.map +1 -1
  59. package/dist/state/storage.d.ts.map +1 -1
  60. package/dist/state/storage.js +6 -0
  61. package/dist/state/storage.js.map +1 -1
  62. package/dist/tests/aprovar-gate.test.d.ts +2 -0
  63. package/dist/tests/aprovar-gate.test.d.ts.map +1 -0
  64. package/dist/tests/aprovar-gate.test.js +113 -0
  65. package/dist/tests/aprovar-gate.test.js.map +1 -0
  66. package/dist/tests/deliverable-validator.test.d.ts +12 -0
  67. package/dist/tests/deliverable-validator.test.d.ts.map +1 -0
  68. package/dist/tests/deliverable-validator.test.js +214 -0
  69. package/dist/tests/deliverable-validator.test.js.map +1 -0
  70. package/dist/tests/flow-engine.test.d.ts +2 -0
  71. package/dist/tests/flow-engine.test.d.ts.map +1 -0
  72. package/dist/tests/flow-engine.test.js +85 -0
  73. package/dist/tests/flow-engine.test.js.map +1 -0
  74. package/dist/tests/gate-orientation.test.d.ts +2 -0
  75. package/dist/tests/gate-orientation.test.d.ts.map +1 -0
  76. package/dist/tests/gate-orientation.test.js +59 -0
  77. package/dist/tests/gate-orientation.test.js.map +1 -0
  78. package/dist/tests/middleware.test.js +30 -4
  79. package/dist/tests/middleware.test.js.map +1 -1
  80. package/dist/tests/watcher.service.test.d.ts +2 -0
  81. package/dist/tests/watcher.service.test.d.ts.map +1 -0
  82. package/dist/tests/watcher.service.test.js +119 -0
  83. package/dist/tests/watcher.service.test.js.map +1 -0
  84. package/dist/tools/aprovar-gate.d.ts.map +1 -1
  85. package/dist/tools/aprovar-gate.js +4 -0
  86. package/dist/tools/aprovar-gate.js.map +1 -1
  87. package/dist/tools/contexto.d.ts.map +1 -1
  88. package/dist/tools/contexto.js +41 -0
  89. package/dist/tools/contexto.js.map +1 -1
  90. package/dist/tools/proximo.d.ts.map +1 -1
  91. package/dist/tools/proximo.js +224 -54
  92. package/dist/tools/proximo.js.map +1 -1
  93. package/dist/tools/status.d.ts.map +1 -1
  94. package/dist/tools/status.js +27 -0
  95. package/dist/tools/status.js.map +1 -1
  96. package/dist/tools/validar-gate.d.ts +8 -1
  97. package/dist/tools/validar-gate.d.ts.map +1 -1
  98. package/dist/tools/validar-gate.js +147 -99
  99. package/dist/tools/validar-gate.js.map +1 -1
  100. package/dist/types/config.d.ts +2 -0
  101. package/dist/types/config.d.ts.map +1 -1
  102. package/dist/types/config.js +2 -0
  103. package/dist/types/config.js.map +1 -1
  104. package/dist/types/index.d.ts +6 -0
  105. package/dist/types/index.d.ts.map +1 -1
  106. package/dist/types/index.js.map +1 -1
  107. package/dist/utils/gate-orientation.d.ts +11 -0
  108. package/dist/utils/gate-orientation.d.ts.map +1 -0
  109. package/dist/utils/gate-orientation.js +64 -0
  110. package/dist/utils/gate-orientation.js.map +1 -0
  111. package/dist/utils/ide-paths.d.ts +11 -0
  112. package/dist/utils/ide-paths.d.ts.map +1 -1
  113. package/dist/utils/ide-paths.js +27 -0
  114. package/dist/utils/ide-paths.js.map +1 -1
  115. package/dist/utils/instructions.d.ts +6 -1
  116. package/dist/utils/instructions.d.ts.map +1 -1
  117. package/dist/utils/instructions.js +32 -1
  118. package/dist/utils/instructions.js.map +1 -1
  119. package/package.json +2 -1
  120. package/dist/gates/compatibility-wrapper.d.ts +0 -139
  121. package/dist/gates/compatibility-wrapper.d.ts.map +0 -1
  122. package/dist/gates/compatibility-wrapper.js +0 -362
  123. package/dist/gates/compatibility-wrapper.js.map +0 -1
  124. package/dist/gates/unified-validator.d.ts +0 -67
  125. package/dist/gates/unified-validator.d.ts.map +0 -1
  126. package/dist/gates/unified-validator.js +0 -234
  127. package/dist/gates/unified-validator.js.map +0 -1
@@ -0,0 +1,106 @@
1
+ /**
2
+ * V6 Sprint 5: Event-Driven Watcher Service
3
+ *
4
+ * Monitora o arquivo de entregável da fase atual em background.
5
+ * Ao detectar um salvamento (evento 'change'), dispara a ValidationPipeline
6
+ * automaticamente — sem que o usuário precise chamar `validar()`.
7
+ *
8
+ * Cuidados:
9
+ * - Debounce de 500ms para evitar múltiplas validações em edições rápidas
10
+ * - Gerenciamento de ciclo de vida: watcher é descartado ao avançar de fase
11
+ * - Usa chokidar (mais robusto que fs.watch nativo no Windows e Mac)
12
+ *
13
+ * IMPORTANTE: Instalar dependência: npm install chokidar --workspace=packages/mcp-server
14
+ */
15
+ // Mapa de watchers ativos por diretório do projeto
16
+ // Chave: diretório, Valor: objeto watcher (FSWatcher do chokidar ou fallback)
17
+ const activeWatchers = new Map();
18
+ /**
19
+ * Inicia o monitoramento de um arquivo de entregável.
20
+ * Se já existe um watcher ativo para este diretório, ele é substituído.
21
+ */
22
+ export async function startFileWatcher(config) {
23
+ // Parar watcher anterior se existir (evita duplicatas)
24
+ stopFileWatcher(config.diretorio);
25
+ let debounceTimer = null;
26
+ try {
27
+ // Tentar usar chokidar (mais robusto, cross-platform)
28
+ const chokidar = await import('chokidar');
29
+ const watcher = chokidar.default.watch(config.filePath, {
30
+ persistent: false, // Não impedir o processo de terminar
31
+ ignoreInitial: true, // Não disparar na inicialização
32
+ awaitWriteFinish: {
33
+ stabilityThreshold: 200,
34
+ pollInterval: 100,
35
+ },
36
+ });
37
+ watcher.on('change', () => {
38
+ if (debounceTimer)
39
+ clearTimeout(debounceTimer);
40
+ debounceTimer = setTimeout(async () => {
41
+ await runValidation(config);
42
+ }, 500); // Debounce de 500ms
43
+ });
44
+ watcher.on('error', (error) => {
45
+ console.warn(`[watcher] Erro ao monitorar ${config.filePath}:`, error);
46
+ });
47
+ activeWatchers.set(config.diretorio, { close: () => watcher.close() });
48
+ console.log(`[watcher] Monitorando: ${config.filePath}`);
49
+ }
50
+ catch {
51
+ // Fallback para fs.watch nativo se chokidar não estiver disponível
52
+ console.warn('[watcher] chokidar não disponível, usando fs.watch nativo como fallback');
53
+ const { watch } = await import('fs');
54
+ const nativeWatcher = watch(config.filePath, { persistent: false }, () => {
55
+ if (debounceTimer)
56
+ clearTimeout(debounceTimer);
57
+ debounceTimer = setTimeout(async () => {
58
+ await runValidation(config);
59
+ }, 500);
60
+ });
61
+ activeWatchers.set(config.diretorio, { close: () => nativeWatcher.close() });
62
+ }
63
+ }
64
+ /**
65
+ * Para e descarta o watcher ativo para um diretório.
66
+ * Deve ser chamado ao avançar de fase para evitar leaks de file handles.
67
+ */
68
+ export function stopFileWatcher(diretorio) {
69
+ const watcher = activeWatchers.get(diretorio);
70
+ if (watcher) {
71
+ watcher.close();
72
+ activeWatchers.delete(diretorio);
73
+ console.log(`[watcher] Monitoramento encerrado para: ${diretorio}`);
74
+ }
75
+ }
76
+ /**
77
+ * Retorna o número de watchers ativos (útil para debugging e testes).
78
+ */
79
+ export function getActiveWatcherCount() {
80
+ return activeWatchers.size;
81
+ }
82
+ /**
83
+ * Executa a validação do entregável e chama o callback com o resultado.
84
+ * Implementação real: integrar com ValidationPipeline.
85
+ */
86
+ async function runValidation(config) {
87
+ try {
88
+ const { readFile } = await import('fs/promises');
89
+ const content = await readFile(config.filePath, 'utf-8');
90
+ console.log(`[watcher] Arquivo salvo, executando validação: ${config.filePath} (${content.length} chars)`);
91
+ const { ValidationPipeline } = await import('../core/validation/ValidationPipeline.js');
92
+ const pipeline = new ValidationPipeline();
93
+ const tier = config.tier || 'base';
94
+ const gateChecklist = config.gateChecklist || [];
95
+ const result = await pipeline.validateDeliverable(content, config.faseNome, tier, gateChecklist);
96
+ let feedback = `Score: ${result.overallScore}/100`;
97
+ if (result.recommendations && result.recommendations.length > 0) {
98
+ feedback += '\n' + result.recommendations.join('\n');
99
+ }
100
+ config.onValidationResult(result.overallScore, feedback, config.filePath);
101
+ }
102
+ catch (error) {
103
+ console.error('[watcher] Erro ao ler arquivo para validação:', error);
104
+ }
105
+ }
106
+ //# sourceMappingURL=watcher.service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"watcher.service.js","sourceRoot":"","sources":["../../src/services/watcher.service.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAmBH,mDAAmD;AACnD,8EAA8E;AAC9E,MAAM,cAAc,GAAG,IAAI,GAAG,EAAiC,CAAC;AAEhE;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,gBAAgB,CAAC,MAAqB;IACxD,uDAAuD;IACvD,eAAe,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;IAElC,IAAI,aAAa,GAAyC,IAAI,CAAC;IAE/D,IAAI,CAAC;QACD,sDAAsD;QACtD,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,UAAU,CAAC,CAAC;QAC1C,MAAM,OAAO,GAAG,QAAQ,CAAC,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,QAAQ,EAAE;YACpD,UAAU,EAAE,KAAK,EAAQ,qCAAqC;YAC9D,aAAa,EAAE,IAAI,EAAO,gCAAgC;YAC1D,gBAAgB,EAAE;gBACd,kBAAkB,EAAE,GAAG;gBACvB,YAAY,EAAE,GAAG;aACpB;SACJ,CAAC,CAAC;QAEH,OAAO,CAAC,EAAE,CAAC,QAAQ,EAAE,GAAG,EAAE;YACtB,IAAI,aAAa;gBAAE,YAAY,CAAC,aAAa,CAAC,CAAC;YAC/C,aAAa,GAAG,UAAU,CAAC,KAAK,IAAI,EAAE;gBAClC,MAAM,aAAa,CAAC,MAAM,CAAC,CAAC;YAChC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,oBAAoB;QACjC,CAAC,CAAC,CAAC;QAEH,OAAO,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,KAAc,EAAE,EAAE;YACnC,OAAO,CAAC,IAAI,CAAC,+BAA+B,MAAM,CAAC,QAAQ,GAAG,EAAE,KAAK,CAAC,CAAC;QAC3E,CAAC,CAAC,CAAC;QAEH,cAAc,CAAC,GAAG,CAAC,MAAM,CAAC,SAAS,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;QACvE,OAAO,CAAC,GAAG,CAAC,0BAA0B,MAAM,CAAC,QAAQ,EAAE,CAAC,CAAC;IAC7D,CAAC;IAAC,MAAM,CAAC;QACL,mEAAmE;QACnE,OAAO,CAAC,IAAI,CAAC,yEAAyE,CAAC,CAAC;QACxF,MAAM,EAAE,KAAK,EAAE,GAAG,MAAM,MAAM,CAAC,IAAI,CAAC,CAAC;QACrC,MAAM,aAAa,GAAG,KAAK,CAAC,MAAM,CAAC,QAAQ,EAAE,EAAE,UAAU,EAAE,KAAK,EAAE,EAAE,GAAG,EAAE;YACrE,IAAI,aAAa;gBAAE,YAAY,CAAC,aAAa,CAAC,CAAC;YAC/C,aAAa,GAAG,UAAU,CAAC,KAAK,IAAI,EAAE;gBAClC,MAAM,aAAa,CAAC,MAAM,CAAC,CAAC;YAChC,CAAC,EAAE,GAAG,CAAC,CAAC;QACZ,CAAC,CAAC,CAAC;QAEH,cAAc,CAAC,GAAG,CAAC,MAAM,CAAC,SAAS,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC,aAAa,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;IACjF,CAAC;AACL,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,eAAe,CAAC,SAAiB;IAC7C,MAAM,OAAO,GAAG,cAAc,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;IAC9C,IAAI,OAAO,EAAE,CAAC;QACV,OAAO,CAAC,KAAK,EAAE,CAAC;QAChB,cAAc,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;QACjC,OAAO,CAAC,GAAG,CAAC,2CAA2C,SAAS,EAAE,CAAC,CAAC;IACxE,CAAC;AACL,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,qBAAqB;IACjC,OAAO,cAAc,CAAC,IAAI,CAAC;AAC/B,CAAC;AAED;;;GAGG;AACH,KAAK,UAAU,aAAa,CAAC,MAAqB;IAC9C,IAAI,CAAC;QACD,MAAM,EAAE,QAAQ,EAAE,GAAG,MAAM,MAAM,CAAC,aAAa,CAAC,CAAC;QACjD,MAAM,OAAO,GAAG,MAAM,QAAQ,CAAC,MAAM,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;QAEzD,OAAO,CAAC,GAAG,CAAC,kDAAkD,MAAM,CAAC,QAAQ,KAAK,OAAO,CAAC,MAAM,SAAS,CAAC,CAAC;QAE3G,MAAM,EAAE,kBAAkB,EAAE,GAAG,MAAM,MAAM,CAAC,0CAA0C,CAAC,CAAC;QACxF,MAAM,QAAQ,GAAG,IAAI,kBAAkB,EAAE,CAAC;QAE1C,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,IAAI,MAAM,CAAC;QACnC,MAAM,aAAa,GAAG,MAAM,CAAC,aAAa,IAAI,EAAE,CAAC;QAEjD,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC,mBAAmB,CAAC,OAAO,EAAE,MAAM,CAAC,QAAQ,EAAE,IAAI,EAAE,aAAa,CAAC,CAAC;QAEjG,IAAI,QAAQ,GAAG,UAAU,MAAM,CAAC,YAAY,MAAM,CAAC;QACnD,IAAI,MAAM,CAAC,eAAe,IAAI,MAAM,CAAC,eAAe,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC9D,QAAQ,IAAI,IAAI,GAAG,MAAM,CAAC,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACzD,CAAC;QAED,MAAM,CAAC,kBAAkB,CACrB,MAAM,CAAC,YAAY,EACnB,QAAQ,EACR,MAAM,CAAC,QAAQ,CAClB,CAAC;IACN,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACb,OAAO,CAAC,KAAK,CAAC,+CAA+C,EAAE,KAAK,CAAC,CAAC;IAC1E,CAAC;AACL,CAAC"}
@@ -1,7 +1,21 @@
1
1
  /**
2
- * Global project context management
2
+ * Global project context management — v6.3
3
3
  * Tracks the current project directory across tool calls
4
+ * S4.1: Adds state cache to avoid repeated disk reads within the same session
4
5
  */
6
+ import type { EstadoProjeto } from "../types/index.js";
7
+ /**
8
+ * Armazena estado no cache (chamar após salvarEstado / parsearEstado bem-sucedido)
9
+ */
10
+ export declare function setCachedEstado(estado: EstadoProjeto, diretorio: string): void;
11
+ /**
12
+ * Recupera estado do cache se ainda válido para o diretório informado
13
+ */
14
+ export declare function getCachedEstado(diretorio: string): EstadoProjeto | null;
15
+ /**
16
+ * Invalida o cache (chamar quando estado for modificado)
17
+ */
18
+ export declare function invalidateEstadoCache(): void;
5
19
  /**
6
20
  * Check if a directory contains a valid Maestro project
7
21
  */
@@ -26,13 +40,10 @@ export declare function clearCurrentDirectory(): void;
26
40
  export declare function hasCurrentDirectory(): boolean;
27
41
  /**
28
42
  * Get default projects directory based on environment
29
- * In production (Docker), use /app/projects (where volume is mounted)
30
- * In development, use current working directory
31
43
  */
32
44
  export declare function getDefaultProjectsDirectory(): string;
33
45
  /**
34
46
  * Get project directory from args or fallback to current/cwd
35
- * Also performs auto-detection of existing projects
36
47
  */
37
48
  export declare function resolveDirectory(argsDir?: string): string;
38
49
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../../src/state/context.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAYH;;GAEG;AACH,wBAAgB,cAAc,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAGnD;AAED;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAIrD;AAED;;;GAGG;AACH,wBAAgB,mBAAmB,IAAI,MAAM,CAE5C;AAED;;GAEG;AACH,wBAAgB,qBAAqB,IAAI,IAAI,CAG5C;AAED;;GAEG;AACH,wBAAgB,mBAAmB,IAAI,OAAO,CAE7C;AAED;;;;GAIG;AACH,wBAAgB,2BAA2B,IAAI,MAAM,CAIpD;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,MAAM,CAsBzD;AAED;;;GAGG;AACH,wBAAgB,aAAa,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAMxD"}
1
+ {"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../../src/state/context.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAKH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAqBvD;;GAEG;AACH,wBAAgB,eAAe,CAAC,MAAM,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,GAAG,IAAI,CAE9E;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,SAAS,EAAE,MAAM,GAAG,aAAa,GAAG,IAAI,CAQvE;AAED;;GAEG;AACH,wBAAgB,qBAAqB,IAAI,IAAI,CAE5C;AAID;;GAEG;AACH,wBAAgB,cAAc,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAGnD;AAED;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAOrD;AAED;;;GAGG;AACH,wBAAgB,mBAAmB,IAAI,MAAM,CAE5C;AAED;;GAEG;AACH,wBAAgB,qBAAqB,IAAI,IAAI,CAI5C;AAED;;GAEG;AACH,wBAAgB,mBAAmB,IAAI,OAAO,CAE7C;AAED;;GAEG;AACH,wBAAgB,2BAA2B,IAAI,MAAM,CAIpD;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,MAAM,CAczD;AAED;;;GAGG;AACH,wBAAgB,aAAa,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAMxD"}
@@ -1,6 +1,7 @@
1
1
  /**
2
- * Global project context management
2
+ * Global project context management — v6.3
3
3
  * Tracks the current project directory across tool calls
4
+ * S4.1: Adds state cache to avoid repeated disk reads within the same session
4
5
  */
5
6
  import { existsSync } from "fs";
6
7
  import { join } from "path";
@@ -9,6 +10,35 @@ import { setProjectDirectory } from "../utils/files.js";
9
10
  let currentProjectDirectory = null;
10
11
  // Path to state file
11
12
  const ESTADO_FILE = ".maestro/estado.json";
13
+ const CACHE_TTL_MS = 30_000;
14
+ let estadoCache = null;
15
+ /**
16
+ * Armazena estado no cache (chamar após salvarEstado / parsearEstado bem-sucedido)
17
+ */
18
+ export function setCachedEstado(estado, diretorio) {
19
+ estadoCache = { estado, timestamp: Date.now(), diretorio };
20
+ }
21
+ /**
22
+ * Recupera estado do cache se ainda válido para o diretório informado
23
+ */
24
+ export function getCachedEstado(diretorio) {
25
+ if (!estadoCache)
26
+ return null;
27
+ if (estadoCache.diretorio !== diretorio)
28
+ return null;
29
+ if (Date.now() - estadoCache.timestamp > CACHE_TTL_MS) {
30
+ estadoCache = null;
31
+ return null;
32
+ }
33
+ return estadoCache.estado;
34
+ }
35
+ /**
36
+ * Invalida o cache (chamar quando estado for modificado)
37
+ */
38
+ export function invalidateEstadoCache() {
39
+ estadoCache = null;
40
+ }
41
+ // ─── Directory management ─────────────────────────────────────────────────────
12
42
  /**
13
43
  * Check if a directory contains a valid Maestro project
14
44
  */
@@ -21,8 +51,11 @@ export function isValidProject(dir) {
21
51
  * Also updates the files utility for local content reading
22
52
  */
23
53
  export function setCurrentDirectory(dir) {
54
+ // Invalida cache se mudar de diretório
55
+ if (currentProjectDirectory !== dir) {
56
+ invalidateEstadoCache();
57
+ }
24
58
  currentProjectDirectory = dir;
25
- // Sincroniza com files.ts para leitura de content local
26
59
  setProjectDirectory(dir);
27
60
  }
28
61
  /**
@@ -37,6 +70,7 @@ export function getCurrentDirectory() {
37
70
  */
38
71
  export function clearCurrentDirectory() {
39
72
  currentProjectDirectory = null;
73
+ estadoCache = null;
40
74
  setProjectDirectory(null);
41
75
  }
42
76
  /**
@@ -47,8 +81,6 @@ export function hasCurrentDirectory() {
47
81
  }
48
82
  /**
49
83
  * Get default projects directory based on environment
50
- * In production (Docker), use /app/projects (where volume is mounted)
51
- * In development, use current working directory
52
84
  */
53
85
  export function getDefaultProjectsDirectory() {
54
86
  return process.env.NODE_ENV === "production"
@@ -57,21 +89,16 @@ export function getDefaultProjectsDirectory() {
57
89
  }
58
90
  /**
59
91
  * Get project directory from args or fallback to current/cwd
60
- * Also performs auto-detection of existing projects
61
92
  */
62
93
  export function resolveDirectory(argsDir) {
63
- // If directory provided, use it and update global state
64
94
  if (argsDir) {
65
95
  setCurrentDirectory(argsDir);
66
96
  return argsDir;
67
97
  }
68
- // If we have a current directory, use it
69
98
  if (currentProjectDirectory) {
70
99
  return currentProjectDirectory;
71
100
  }
72
- // Fallback to cwd
73
101
  const cwd = process.cwd();
74
- // Check if cwd has a valid project
75
102
  if (isValidProject(cwd)) {
76
103
  setCurrentDirectory(cwd);
77
104
  return cwd;
@@ -1 +1 @@
1
- {"version":3,"file":"context.js","sourceRoot":"","sources":["../../src/state/context.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,IAAI,CAAC;AAChC,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAC5B,OAAO,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AAExD,qDAAqD;AACrD,IAAI,uBAAuB,GAAkB,IAAI,CAAC;AAElD,qBAAqB;AACrB,MAAM,WAAW,GAAG,sBAAsB,CAAC;AAE3C;;GAEG;AACH,MAAM,UAAU,cAAc,CAAC,GAAW;IACtC,MAAM,UAAU,GAAG,IAAI,CAAC,GAAG,EAAE,WAAW,CAAC,CAAC;IAC1C,OAAO,UAAU,CAAC,UAAU,CAAC,CAAC;AAClC,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,mBAAmB,CAAC,GAAW;IAC3C,uBAAuB,GAAG,GAAG,CAAC;IAC9B,wDAAwD;IACxD,mBAAmB,CAAC,GAAG,CAAC,CAAC;AAC7B,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,mBAAmB;IAC/B,OAAO,uBAAuB,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC;AACpD,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,qBAAqB;IACjC,uBAAuB,GAAG,IAAI,CAAC;IAC/B,mBAAmB,CAAC,IAAI,CAAC,CAAC;AAC9B,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,mBAAmB;IAC/B,OAAO,uBAAuB,KAAK,IAAI,CAAC;AAC5C,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,2BAA2B;IACvC,OAAO,OAAO,CAAC,GAAG,CAAC,QAAQ,KAAK,YAAY;QACxC,CAAC,CAAC,eAAe;QACjB,CAAC,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC;AACxB,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,gBAAgB,CAAC,OAAgB;IAC7C,wDAAwD;IACxD,IAAI,OAAO,EAAE,CAAC;QACV,mBAAmB,CAAC,OAAO,CAAC,CAAC;QAC7B,OAAO,OAAO,CAAC;IACnB,CAAC;IAED,yCAAyC;IACzC,IAAI,uBAAuB,EAAE,CAAC;QAC1B,OAAO,uBAAuB,CAAC;IACnC,CAAC;IAED,kBAAkB;IAClB,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;IAE1B,mCAAmC;IACnC,IAAI,cAAc,CAAC,GAAG,CAAC,EAAE,CAAC;QACtB,mBAAmB,CAAC,GAAG,CAAC,CAAC;QACzB,OAAO,GAAG,CAAC;IACf,CAAC;IAED,OAAO,GAAG,CAAC;AACf,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,aAAa,CAAC,GAAW;IACrC,IAAI,cAAc,CAAC,GAAG,CAAC,EAAE,CAAC;QACtB,mBAAmB,CAAC,GAAG,CAAC,CAAC;QACzB,OAAO,GAAG,CAAC;IACf,CAAC;IACD,OAAO,IAAI,CAAC;AAChB,CAAC"}
1
+ {"version":3,"file":"context.js","sourceRoot":"","sources":["../../src/state/context.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"storage.d.ts","sourceRoot":"","sources":["../../src/state/storage.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAYvD;;GAEG;AACH,wBAAsB,cAAc,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,GAAG,IAAI,CAAC,CAQrF;AAED;;GAEG;AACH,wBAAsB,YAAY,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC,CAQ1F;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAC9B,SAAS,EAAE,MAAM,EACjB,IAAI,EAAE,MAAM,EACZ,SAAS,EAAE,MAAM,EACjB,GAAG,CAAC,EAAE,UAAU,GAAG,QAAQ,GAAG,aAAa,GAC5C,aAAa,CA+Bf;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,aAAa,GAAG;IACrD,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;CACnB,CASA;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,aAAa,GAAG,IAAI,CAMhE;AAED;;GAEG;AACH,wBAAsB,mBAAmB,CACrC,SAAS,EAAE,MAAM,EACjB,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,MAAM,GAChB,OAAO,CAAC,IAAI,CAAC,CAQf;AAED;;GAEG;AACH,wBAAsB,WAAW,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,CAAC,CAY3E;AAED;;GAEG;AACH,wBAAsB,kBAAkB,CACpC,SAAS,EAAE,MAAM,EACjB,IAAI,EAAE,MAAM,GACb,OAAO,CAAC,IAAI,CAAC,CAUf"}
1
+ {"version":3,"file":"storage.d.ts","sourceRoot":"","sources":["../../src/state/storage.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAYvD;;GAEG;AACH,wBAAsB,cAAc,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,GAAG,IAAI,CAAC,CAQrF;AAED;;GAEG;AACH,wBAAsB,YAAY,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC,CAQ1F;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAC9B,SAAS,EAAE,MAAM,EACjB,IAAI,EAAE,MAAM,EACZ,SAAS,EAAE,MAAM,EACjB,GAAG,CAAC,EAAE,UAAU,GAAG,QAAQ,GAAG,aAAa,GAC5C,aAAa,CAyCf;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,aAAa,GAAG;IACrD,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;CACnB,CASA;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,aAAa,GAAG,IAAI,CAMhE;AAED;;GAEG;AACH,wBAAsB,mBAAmB,CACrC,SAAS,EAAE,MAAM,EACjB,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,MAAM,GAChB,OAAO,CAAC,IAAI,CAAC,CAQf;AAED;;GAEG;AACH,wBAAsB,WAAW,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,CAAC,CAY3E;AAED;;GAEG;AACH,wBAAsB,kBAAkB,CACpC,SAAS,EAAE,MAAM,EACjB,IAAI,EAAE,MAAM,GACb,OAAO,CAAC,IAAI,CAAC,CAUf"}
@@ -60,6 +60,12 @@ export function criarEstadoInicial(projetoId, nome, diretorio, ide) {
60
60
  aguardando_aprovacao: false,
61
61
  motivo_bloqueio: undefined,
62
62
  score_bloqueado: undefined,
63
+ // V6 Sprint 2: Estado compulsório (bloqueio durante correção de gate)
64
+ em_estado_compulsorio: false,
65
+ tools_permitidas_no_compulsorio: ['executar', 'validar', 'contexto'],
66
+ // V6 Sprint 6: Smart Auto-Flow
67
+ flow_phase_type: 'input_required', // Fase 1 (Produto) começa com input required
68
+ auto_flow_enabled: false,
63
69
  criado_em: new Date().toISOString(),
64
70
  atualizado_em: new Date().toISOString(),
65
71
  };
@@ -1 +1 @@
1
- {"version":3,"file":"storage.js","sourceRoot":"","sources":["../../src/state/storage.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"storage.js","sourceRoot":"","sources":["../../src/state/storage.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=aprovar-gate.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"aprovar-gate.test.d.ts","sourceRoot":"","sources":["../../src/tests/aprovar-gate.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,113 @@
1
+ import { vi, describe, it, expect, beforeEach } from 'vitest';
2
+ import { aprovarGate } from '../tools/aprovar-gate.js';
3
+ import * as storage from '../state/storage.js';
4
+ // Mocks
5
+ vi.mock('../state/storage.js', () => ({
6
+ parsearEstado: vi.fn(),
7
+ serializarEstado: vi.fn()
8
+ }));
9
+ vi.mock('../state/context.js', () => ({
10
+ setCurrentDirectory: vi.fn()
11
+ }));
12
+ vi.mock('../utils/files.js', () => ({
13
+ resolveProjectPath: vi.fn((p) => p),
14
+ normalizeProjectPath: vi.fn((p) => p)
15
+ }));
16
+ vi.mock('../utils/history.js', () => ({
17
+ logEvent: vi.fn(),
18
+ EventTypes: {}
19
+ }));
20
+ vi.mock('../flows/types.js', () => ({
21
+ getFaseComStitch: vi.fn().mockReturnValue({ nome: 'Fase de Teste', entregavel_esperado: 'Doc de Teste' })
22
+ }));
23
+ vi.mock('../services/specialist.service.js', () => ({
24
+ getSpecialistPersona: vi.fn().mockReturnValue('Persona de Teste')
25
+ }));
26
+ describe('AprovarGate Tool', () => {
27
+ beforeEach(() => {
28
+ vi.clearAllMocks();
29
+ });
30
+ it('deve retornar erro se nao informar estado_json', async () => {
31
+ const result = await aprovarGate({
32
+ acao: 'aprovar',
33
+ estado_json: '',
34
+ diretorio: '/test'
35
+ });
36
+ expect(result.content[0].text).toContain('uso EXCLUSIVO do usuário');
37
+ expect(result.isError).toBeUndefined(); // Por design, o texto instrucional não tem isError = true
38
+ });
39
+ it('deve retornar mensagem informacional se o estado não estiver aguardando aprovação', async () => {
40
+ const estadoFalso = { aguardando_aprovacao: false, fase_atual: 1, total_fases: 10, nivel: 'simples' };
41
+ vi.mocked(storage.parsearEstado).mockReturnValue(estadoFalso);
42
+ const result = await aprovarGate({
43
+ acao: 'aprovar',
44
+ estado_json: JSON.stringify(estadoFalso),
45
+ diretorio: '/test'
46
+ });
47
+ expect(result.content[0].text).toContain('Nenhuma Aprovação Pendente');
48
+ });
49
+ it('deve retornar erro se acao for aprovar mas não houver score bloqueado', async () => {
50
+ const estadoAguardando = { aguardando_aprovacao: true, score_bloqueado: undefined, fase_atual: 1 };
51
+ vi.mocked(storage.parsearEstado).mockReturnValue(estadoAguardando);
52
+ const result = await aprovarGate({
53
+ acao: 'aprovar',
54
+ estado_json: JSON.stringify(estadoAguardando),
55
+ diretorio: '/test'
56
+ });
57
+ expect(result.isError).toBe(true);
58
+ expect(result.content[0].text).toContain('Aprovação Inválida');
59
+ });
60
+ it('deve aprovar o gate com sucesso, removendo flag compulsória e retornando next_action proximo', async () => {
61
+ const estadoValido = {
62
+ aguardando_aprovacao: true,
63
+ score_bloqueado: 60,
64
+ fase_atual: 1,
65
+ total_fases: 10,
66
+ gates_validados: [],
67
+ em_estado_compulsorio: true, // v6 compulsório
68
+ motivo_bloqueio: 'Faltam coisas'
69
+ };
70
+ vi.mocked(storage.parsearEstado).mockReturnValue(estadoValido);
71
+ vi.mocked(storage.serializarEstado).mockReturnValue({ content: '{"mock":true}', path: 'estado.json' });
72
+ const result = await aprovarGate({
73
+ acao: 'aprovar',
74
+ estado_json: JSON.stringify(estadoValido),
75
+ diretorio: '/test'
76
+ });
77
+ // Verificações de mutação de estado
78
+ expect(estadoValido.aguardando_aprovacao).toBe(false);
79
+ expect(estadoValido.score_bloqueado).toBeUndefined();
80
+ expect(estadoValido.motivo_bloqueio).toBeUndefined();
81
+ expect(estadoValido.em_estado_compulsorio).toBe(false);
82
+ expect(storage.serializarEstado).toHaveBeenCalledWith(estadoValido);
83
+ expect(result.next_action?.tool).toBe('proximo');
84
+ expect(result.content[0].text).toContain('Gate Aprovado pelo Usuário');
85
+ });
86
+ it('deve rejeitar o gate com sucesso e retornar next_action validar_gate', async () => {
87
+ const estadoValido = {
88
+ aguardando_aprovacao: true,
89
+ score_bloqueado: 60,
90
+ fase_atual: 1,
91
+ total_fases: 10,
92
+ gates_validados: [],
93
+ em_estado_compulsorio: true,
94
+ motivo_bloqueio: 'Faltam coisas'
95
+ };
96
+ vi.mocked(storage.parsearEstado).mockReturnValue(estadoValido);
97
+ vi.mocked(storage.serializarEstado).mockReturnValue({ content: '{"mock":true}', path: 'estado.json' });
98
+ const result = await aprovarGate({
99
+ acao: 'rejeitar',
100
+ estado_json: JSON.stringify(estadoValido),
101
+ diretorio: '/test'
102
+ });
103
+ // Verificações de mutação de estado
104
+ expect(estadoValido.aguardando_aprovacao).toBe(false);
105
+ expect(estadoValido.score_bloqueado).toBeUndefined();
106
+ expect(estadoValido.motivo_bloqueio).toBeUndefined();
107
+ expect(estadoValido.em_estado_compulsorio).toBe(false);
108
+ expect(storage.serializarEstado).toHaveBeenCalledWith(estadoValido);
109
+ expect(result.next_action?.tool).toBe('validar_gate');
110
+ expect(result.content[0].text).toContain('Gate Rejeitado pelo Usuário');
111
+ });
112
+ });
113
+ //# sourceMappingURL=aprovar-gate.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"aprovar-gate.test.js","sourceRoot":"","sources":["../../src/tests/aprovar-gate.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,QAAQ,CAAC;AAC9D,OAAO,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AACvD,OAAO,KAAK,OAAO,MAAM,qBAAqB,CAAC;AAI/C,QAAQ;AACR,EAAE,CAAC,IAAI,CAAC,qBAAqB,EAAE,GAAG,EAAE,CAAC,CAAC;IAClC,aAAa,EAAE,EAAE,CAAC,EAAE,EAAE;IACtB,gBAAgB,EAAE,EAAE,CAAC,EAAE,EAAE;CAC5B,CAAC,CAAC,CAAC;AAEJ,EAAE,CAAC,IAAI,CAAC,qBAAqB,EAAE,GAAG,EAAE,CAAC,CAAC;IAClC,mBAAmB,EAAE,EAAE,CAAC,EAAE,EAAE;CAC/B,CAAC,CAAC,CAAC;AAEJ,EAAE,CAAC,IAAI,CAAC,mBAAmB,EAAE,GAAG,EAAE,CAAC,CAAC;IAChC,kBAAkB,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;IACnC,oBAAoB,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;CACxC,CAAC,CAAC,CAAC;AAEJ,EAAE,CAAC,IAAI,CAAC,qBAAqB,EAAE,GAAG,EAAE,CAAC,CAAC;IAClC,QAAQ,EAAE,EAAE,CAAC,EAAE,EAAE;IACjB,UAAU,EAAE,EAAE;CACjB,CAAC,CAAC,CAAC;AAEJ,EAAE,CAAC,IAAI,CAAC,mBAAmB,EAAE,GAAG,EAAE,CAAC,CAAC;IAChC,gBAAgB,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,eAAe,CAAC,EAAE,IAAI,EAAE,eAAe,EAAE,mBAAmB,EAAE,cAAc,EAAE,CAAC;CAC5G,CAAC,CAAC,CAAC;AAEJ,EAAE,CAAC,IAAI,CAAC,mCAAmC,EAAE,GAAG,EAAE,CAAC,CAAC;IAChD,oBAAoB,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,eAAe,CAAC,kBAAkB,CAAC;CACpE,CAAC,CAAC,CAAC;AAEJ,QAAQ,CAAC,kBAAkB,EAAE,GAAG,EAAE;IAC9B,UAAU,CAAC,GAAG,EAAE;QACZ,EAAE,CAAC,aAAa,EAAE,CAAC;IACvB,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,gDAAgD,EAAE,KAAK,IAAI,EAAE;QAC5D,MAAM,MAAM,GAAG,MAAM,WAAW,CAAC;YAC7B,IAAI,EAAE,SAAS;YACf,WAAW,EAAE,EAAE;YACf,SAAS,EAAE,OAAO;SACrB,CAAC,CAAC;QACH,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,0BAA0B,CAAC,CAAC;QACrE,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,aAAa,EAAE,CAAC,CAAC,0DAA0D;IACtG,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,mFAAmF,EAAE,KAAK,IAAI,EAAE;QAC/F,MAAM,WAAW,GAAG,EAAE,oBAAoB,EAAE,KAAK,EAAE,UAAU,EAAE,CAAC,EAAE,WAAW,EAAE,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC;QACtG,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC,eAAe,CAAC,WAAkB,CAAC,CAAC;QAErE,MAAM,MAAM,GAAG,MAAM,WAAW,CAAC;YAC7B,IAAI,EAAE,SAAS;YACf,WAAW,EAAE,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC;YACxC,SAAS,EAAE,OAAO;SACrB,CAAC,CAAC;QAEH,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,4BAA4B,CAAC,CAAC;IAC3E,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,uEAAuE,EAAE,KAAK,IAAI,EAAE;QACnF,MAAM,gBAAgB,GAAG,EAAE,oBAAoB,EAAE,IAAI,EAAE,eAAe,EAAE,SAAS,EAAE,UAAU,EAAE,CAAC,EAAE,CAAC;QACnG,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC,eAAe,CAAC,gBAAuB,CAAC,CAAC;QAE1E,MAAM,MAAM,GAAG,MAAM,WAAW,CAAC;YAC7B,IAAI,EAAE,SAAS;YACf,WAAW,EAAE,IAAI,CAAC,SAAS,CAAC,gBAAgB,CAAC;YAC7C,SAAS,EAAE,OAAO;SACrB,CAAC,CAAC;QAEH,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAClC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,oBAAoB,CAAC,CAAC;IACnE,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,8FAA8F,EAAE,KAAK,IAAI,EAAE;QAC1G,MAAM,YAAY,GAAG;YACjB,oBAAoB,EAAE,IAAI;YAC1B,eAAe,EAAE,EAAE;YACnB,UAAU,EAAE,CAAC;YACb,WAAW,EAAE,EAAE;YACf,eAAe,EAAE,EAAE;YACnB,qBAAqB,EAAE,IAAI,EAAE,iBAAiB;YAC9C,eAAe,EAAE,eAAe;SACnC,CAAC;QACF,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC,eAAe,CAAC,YAAmB,CAAC,CAAC;QACtE,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,gBAAgB,CAAC,CAAC,eAAe,CAAC,EAAE,OAAO,EAAE,eAAe,EAAE,IAAI,EAAE,aAAa,EAAE,CAAC,CAAC;QAEvG,MAAM,MAAM,GAAG,MAAM,WAAW,CAAC;YAC7B,IAAI,EAAE,SAAS;YACf,WAAW,EAAE,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC;YACzC,SAAS,EAAE,OAAO;SACrB,CAAC,CAAC;QAEH,oCAAoC;QACpC,MAAM,CAAC,YAAY,CAAC,oBAAoB,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACtD,MAAM,CAAC,YAAY,CAAC,eAAe,CAAC,CAAC,aAAa,EAAE,CAAC;QACrD,MAAM,CAAC,YAAY,CAAC,eAAe,CAAC,CAAC,aAAa,EAAE,CAAC;QACrD,MAAM,CAAC,YAAY,CAAC,qBAAqB,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAEvD,MAAM,CAAC,OAAO,CAAC,gBAAgB,CAAC,CAAC,oBAAoB,CAAC,YAAY,CAAC,CAAC;QACpE,MAAM,CAAC,MAAM,CAAC,WAAW,EAAE,IAAI,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QACjD,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,4BAA4B,CAAC,CAAC;IAC3E,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,sEAAsE,EAAE,KAAK,IAAI,EAAE;QAClF,MAAM,YAAY,GAAG;YACjB,oBAAoB,EAAE,IAAI;YAC1B,eAAe,EAAE,EAAE;YACnB,UAAU,EAAE,CAAC;YACb,WAAW,EAAE,EAAE;YACf,eAAe,EAAE,EAAE;YACnB,qBAAqB,EAAE,IAAI;YAC3B,eAAe,EAAE,eAAe;SACnC,CAAC;QACF,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC,eAAe,CAAC,YAAmB,CAAC,CAAC;QACtE,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,gBAAgB,CAAC,CAAC,eAAe,CAAC,EAAE,OAAO,EAAE,eAAe,EAAE,IAAI,EAAE,aAAa,EAAE,CAAC,CAAC;QAEvG,MAAM,MAAM,GAAG,MAAM,WAAW,CAAC;YAC7B,IAAI,EAAE,UAAU;YAChB,WAAW,EAAE,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC;YACzC,SAAS,EAAE,OAAO;SACrB,CAAC,CAAC;QAEH,oCAAoC;QACpC,MAAM,CAAC,YAAY,CAAC,oBAAoB,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACtD,MAAM,CAAC,YAAY,CAAC,eAAe,CAAC,CAAC,aAAa,EAAE,CAAC;QACrD,MAAM,CAAC,YAAY,CAAC,eAAe,CAAC,CAAC,aAAa,EAAE,CAAC;QACrD,MAAM,CAAC,YAAY,CAAC,qBAAqB,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAEvD,MAAM,CAAC,OAAO,CAAC,gBAAgB,CAAC,CAAC,oBAAoB,CAAC,YAAY,CAAC,CAAC;QACpE,MAAM,CAAC,MAAM,CAAC,WAAW,EAAE,IAAI,CAAC,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;QACtD,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,6BAA6B,CAAC,CAAC;IAC5E,CAAC,CAAC,CAAC;AACP,CAAC,CAAC,CAAC"}
@@ -0,0 +1,12 @@
1
+ /**
2
+ * Testes para DeliverableValidator v6.1
3
+ *
4
+ * Cobre os cenários críticos de validação de entregáveis de fase:
5
+ * - PRD vazio → bloqueado
6
+ * - PRD completo → aprovado
7
+ * - Placeholders → penalizado
8
+ * - Gate checklist → score aumenta quando evidenciado
9
+ * - Fases de código (Frontend/Backend) → tratamento especial
10
+ */
11
+ export {};
12
+ //# sourceMappingURL=deliverable-validator.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"deliverable-validator.test.d.ts","sourceRoot":"","sources":["../../src/tests/deliverable-validator.test.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG"}