@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.
- package/README.md +68 -83
- package/dist/content/rules/RULES.md +14 -0
- package/dist/core/metrics/MetricsCollector.d.ts +28 -12
- package/dist/core/metrics/MetricsCollector.d.ts.map +1 -1
- package/dist/core/metrics/MetricsCollector.js +151 -12
- package/dist/core/metrics/MetricsCollector.js.map +1 -1
- package/dist/core/validation/ValidationPipeline.d.ts +24 -2
- package/dist/core/validation/ValidationPipeline.d.ts.map +1 -1
- package/dist/core/validation/ValidationPipeline.js +46 -2
- package/dist/core/validation/ValidationPipeline.js.map +1 -1
- package/dist/core/validation/layers/DeliverableValidator.d.ts +13 -0
- package/dist/core/validation/layers/DeliverableValidator.d.ts.map +1 -0
- package/dist/core/validation/layers/DeliverableValidator.js +276 -0
- package/dist/core/validation/layers/DeliverableValidator.js.map +1 -0
- package/dist/gates/contextual-recommender.d.ts.map +1 -1
- package/dist/gates/contextual-recommender.js +260 -1
- package/dist/gates/contextual-recommender.js.map +1 -1
- package/dist/gates/validator.d.ts +5 -6
- package/dist/gates/validator.d.ts.map +1 -1
- package/dist/gates/validator.js +9 -6
- package/dist/gates/validator.js.map +1 -1
- package/dist/middleware/adr-generation.middleware.d.ts +5 -0
- package/dist/middleware/adr-generation.middleware.d.ts.map +1 -0
- package/dist/middleware/adr-generation.middleware.js +214 -0
- package/dist/middleware/adr-generation.middleware.js.map +1 -0
- package/dist/middleware/flow-engine.middleware.d.ts +5 -3
- package/dist/middleware/flow-engine.middleware.d.ts.map +1 -1
- package/dist/middleware/flow-engine.middleware.js +18 -10
- package/dist/middleware/flow-engine.middleware.js.map +1 -1
- package/dist/middleware/index.d.ts +18 -11
- package/dist/middleware/index.d.ts.map +1 -1
- package/dist/middleware/index.js +24 -11
- package/dist/middleware/index.js.map +1 -1
- package/dist/middleware/orchestration-pipeline.middleware.d.ts +42 -0
- package/dist/middleware/orchestration-pipeline.middleware.d.ts.map +1 -0
- package/dist/middleware/orchestration-pipeline.middleware.js +57 -0
- package/dist/middleware/orchestration-pipeline.middleware.js.map +1 -0
- package/dist/middleware/skill-injection.middleware.js +1 -1
- package/dist/middleware/skill-injection.middleware.js.map +1 -1
- package/dist/middleware/validation.middleware.d.ts +11 -0
- package/dist/middleware/validation.middleware.d.ts.map +1 -1
- package/dist/middleware/validation.middleware.js +54 -0
- package/dist/middleware/validation.middleware.js.map +1 -1
- package/dist/router.d.ts.map +1 -1
- package/dist/router.js +20 -14
- package/dist/router.js.map +1 -1
- package/dist/services/flow-engine.d.ts +1 -0
- package/dist/services/flow-engine.d.ts.map +1 -1
- package/dist/services/flow-engine.js +14 -2
- package/dist/services/flow-engine.js.map +1 -1
- package/dist/services/watcher.service.d.ts +45 -0
- package/dist/services/watcher.service.d.ts.map +1 -0
- package/dist/services/watcher.service.js +106 -0
- package/dist/services/watcher.service.js.map +1 -0
- package/dist/state/context.d.ts +15 -4
- package/dist/state/context.d.ts.map +1 -1
- package/dist/state/context.js +36 -9
- package/dist/state/context.js.map +1 -1
- package/dist/state/storage.d.ts.map +1 -1
- package/dist/state/storage.js +6 -0
- package/dist/state/storage.js.map +1 -1
- package/dist/tests/aprovar-gate.test.d.ts +2 -0
- package/dist/tests/aprovar-gate.test.d.ts.map +1 -0
- package/dist/tests/aprovar-gate.test.js +113 -0
- package/dist/tests/aprovar-gate.test.js.map +1 -0
- package/dist/tests/deliverable-validator.test.d.ts +12 -0
- package/dist/tests/deliverable-validator.test.d.ts.map +1 -0
- package/dist/tests/deliverable-validator.test.js +214 -0
- package/dist/tests/deliverable-validator.test.js.map +1 -0
- package/dist/tests/flow-engine.test.d.ts +2 -0
- package/dist/tests/flow-engine.test.d.ts.map +1 -0
- package/dist/tests/flow-engine.test.js +85 -0
- package/dist/tests/flow-engine.test.js.map +1 -0
- package/dist/tests/gate-orientation.test.d.ts +2 -0
- package/dist/tests/gate-orientation.test.d.ts.map +1 -0
- package/dist/tests/gate-orientation.test.js +59 -0
- package/dist/tests/gate-orientation.test.js.map +1 -0
- package/dist/tests/middleware.test.js +30 -4
- package/dist/tests/middleware.test.js.map +1 -1
- package/dist/tests/watcher.service.test.d.ts +2 -0
- package/dist/tests/watcher.service.test.d.ts.map +1 -0
- package/dist/tests/watcher.service.test.js +119 -0
- package/dist/tests/watcher.service.test.js.map +1 -0
- package/dist/tools/aprovar-gate.d.ts.map +1 -1
- package/dist/tools/aprovar-gate.js +4 -0
- package/dist/tools/aprovar-gate.js.map +1 -1
- package/dist/tools/contexto.d.ts.map +1 -1
- package/dist/tools/contexto.js +41 -0
- package/dist/tools/contexto.js.map +1 -1
- package/dist/tools/proximo.d.ts.map +1 -1
- package/dist/tools/proximo.js +224 -54
- package/dist/tools/proximo.js.map +1 -1
- package/dist/tools/status.d.ts.map +1 -1
- package/dist/tools/status.js +27 -0
- package/dist/tools/status.js.map +1 -1
- package/dist/tools/validar-gate.d.ts +8 -1
- package/dist/tools/validar-gate.d.ts.map +1 -1
- package/dist/tools/validar-gate.js +147 -99
- package/dist/tools/validar-gate.js.map +1 -1
- package/dist/types/config.d.ts +2 -0
- package/dist/types/config.d.ts.map +1 -1
- package/dist/types/config.js +2 -0
- package/dist/types/config.js.map +1 -1
- package/dist/types/index.d.ts +6 -0
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/index.js.map +1 -1
- package/dist/utils/gate-orientation.d.ts +11 -0
- package/dist/utils/gate-orientation.d.ts.map +1 -0
- package/dist/utils/gate-orientation.js +64 -0
- package/dist/utils/gate-orientation.js.map +1 -0
- package/dist/utils/ide-paths.d.ts +11 -0
- package/dist/utils/ide-paths.d.ts.map +1 -1
- package/dist/utils/ide-paths.js +27 -0
- package/dist/utils/ide-paths.js.map +1 -1
- package/dist/utils/instructions.d.ts +6 -1
- package/dist/utils/instructions.d.ts.map +1 -1
- package/dist/utils/instructions.js +32 -1
- package/dist/utils/instructions.js.map +1 -1
- package/package.json +2 -1
- package/dist/gates/compatibility-wrapper.d.ts +0 -139
- package/dist/gates/compatibility-wrapper.d.ts.map +0 -1
- package/dist/gates/compatibility-wrapper.js +0 -362
- package/dist/gates/compatibility-wrapper.js.map +0 -1
- package/dist/gates/unified-validator.d.ts +0 -67
- package/dist/gates/unified-validator.d.ts.map +0 -1
- package/dist/gates/unified-validator.js +0 -234
- package/dist/gates/unified-validator.js.map +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"watcher.service.test.js","sourceRoot":"","sources":["../../src/tests/watcher.service.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"aprovar-gate.d.ts","sourceRoot":"","sources":["../../src/tools/aprovar-gate.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAiB,MAAM,mBAAmB,CAAC;AAUnE,UAAU,eAAe;IACrB,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,SAAS,GAAG,UAAU,CAAC;CAChC;AAED;;;;;;;;GAQG;AACH,wBAAsB,WAAW,CAAC,IAAI,EAAE,eAAe,GAAG,OAAO,CAAC,UAAU,CAAC,
|
|
1
|
+
{"version":3,"file":"aprovar-gate.d.ts","sourceRoot":"","sources":["../../src/tools/aprovar-gate.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAiB,MAAM,mBAAmB,CAAC;AAUnE,UAAU,eAAe;IACrB,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,SAAS,GAAG,UAAU,CAAC;CAChC;AAED;;;;;;;;GAQG;AACH,wBAAsB,WAAW,CAAC,IAAI,EAAE,eAAe,GAAG,OAAO,CAAC,UAAU,CAAC,CA2O5E;AAED;;GAEG;AACH,eAAO,MAAM,iBAAiB;;;;;;;;;;;;;;;;;;CAkB7B,CAAC"}
|
|
@@ -114,6 +114,8 @@ O projeto deve primeiro:
|
|
|
114
114
|
estado.aguardando_aprovacao = false;
|
|
115
115
|
estado.motivo_bloqueio = undefined;
|
|
116
116
|
estado.score_bloqueado = undefined;
|
|
117
|
+
// V6 Sprint 2: Desativar modo compulsório ao aprovar
|
|
118
|
+
estado.em_estado_compulsorio = false;
|
|
117
119
|
// Serializar estado
|
|
118
120
|
const estadoFile = serializarEstado(estado);
|
|
119
121
|
const faseAtual = getFaseComStitch(estado.nivel, estado.fase_atual, estado.usar_stitch);
|
|
@@ -177,6 +179,8 @@ ${estadoFile.content}
|
|
|
177
179
|
estado.aguardando_aprovacao = false;
|
|
178
180
|
estado.motivo_bloqueio = undefined;
|
|
179
181
|
estado.score_bloqueado = undefined;
|
|
182
|
+
// V6 Sprint 2: Desativar modo compulsório ao rejeitar também
|
|
183
|
+
estado.em_estado_compulsorio = false;
|
|
180
184
|
// Serializar estado
|
|
181
185
|
const estadoFile = serializarEstado(estado);
|
|
182
186
|
const faseAtualRej = getFaseComStitch(estado.nivel, estado.fase_atual, estado.usar_stitch);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"aprovar-gate.js","sourceRoot":"","sources":["../../src/tools/aprovar-gate.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,aAAa,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AACtE,OAAO,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAE1D,OAAO,EAAwB,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AAE7E,OAAO,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AACrD,OAAO,EAAE,oBAAoB,EAAE,MAAM,mCAAmC,CAAC;AAQzE;;;;;;;;GAQG;AACH,MAAM,CAAC,KAAK,UAAU,WAAW,CAAC,IAAqB;IACnD,qBAAqB;IACrB,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;QACpB,OAAO;YACH,OAAO,EAAE,CAAC;oBACN,IAAI,EAAE,MAAM;oBACZ,IAAI,EAAE;;;;;;;;;;;;;;;CAerB;iBACY,CAAC;SACL,CAAC;IACN,CAAC;IAED,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC;QAClB,OAAO;YACH,OAAO,EAAE,CAAC;oBACN,IAAI,EAAE,MAAM;oBACZ,IAAI,EAAE,kDAAkD;iBAC3D,CAAC;YACF,OAAO,EAAE,IAAI;SAChB,CAAC;IACN,CAAC;IAED,MAAM,SAAS,GAAG,kBAAkB,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IAErD,IAAI,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,CAAC,SAAS,EAAE,UAAU,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;QAC7D,OAAO;YACH,OAAO,EAAE,CAAC;oBACN,IAAI,EAAE,MAAM;oBACZ,IAAI,EAAE,gEAAgE;iBACzE,CAAC;YACF,OAAO,EAAE,IAAI;SAChB,CAAC;IACN,CAAC;IAED,iBAAiB;IACjB,MAAM,MAAM,GAAG,aAAa,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;IAC/C,IAAI,CAAC,MAAM,EAAE,CAAC;QACV,OAAO;YACH,OAAO,EAAE,CAAC;oBACN,IAAI,EAAE,MAAM;oBACZ,IAAI,EAAE,qDAAqD;iBAC9D,CAAC;YACF,OAAO,EAAE,IAAI;SAChB,CAAC;IACN,CAAC;IAED,mBAAmB,CAAC,SAAS,CAAC,CAAC;IAE/B,qCAAqC;IACrC,IAAI,CAAC,MAAM,CAAC,oBAAoB,EAAE,CAAC;QAC/B,OAAO;YACH,OAAO,EAAE,CAAC;oBACN,IAAI,EAAE,MAAM;oBACZ,IAAI,EAAE;;;;;UAKZ,MAAM,CAAC,UAAU,IAAI,MAAM,CAAC,WAAW;WACtC,MAAM,CAAC,KAAK;;;;CAItB;iBACY,CAAC;SACL,CAAC;IACN,CAAC;IAED,2EAA2E;IAC3E,IAAI,IAAI,CAAC,IAAI,KAAK,SAAS,IAAI,MAAM,CAAC,eAAe,KAAK,SAAS,EAAE,CAAC;QAClE,OAAO;YACH,OAAO,EAAE,CAAC;oBACN,IAAI,EAAE,MAAM;oBACZ,IAAI,EAAE;;;;;;;;;;CAUrB;iBACY,CAAC;YACF,OAAO,EAAE,IAAI;SAChB,CAAC;IACN,CAAC;IAED,MAAM,aAAa,GAAG,MAAM,CAAC,eAAe,CAAC;IAC7C,MAAM,cAAc,GAAG,MAAM,CAAC,eAAe,CAAC;IAE9C,IAAI,IAAI,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;QAC1B,2BAA2B;QAC3B,MAAM,CAAC,oBAAoB,GAAG,KAAK,CAAC;QACpC,MAAM,CAAC,eAAe,GAAG,SAAS,CAAC;QACnC,MAAM,CAAC,eAAe,GAAG,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"aprovar-gate.js","sourceRoot":"","sources":["../../src/tools/aprovar-gate.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"contexto.d.ts","sourceRoot":"","sources":["../../src/tools/contexto.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAiB,MAAM,mBAAmB,CAAC;
|
|
1
|
+
{"version":3,"file":"contexto.d.ts","sourceRoot":"","sources":["../../src/tools/contexto.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAiB,MAAM,mBAAmB,CAAC;AAiBnE,UAAU,YAAY;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;CACrB;AAED;;;GAGG;AACH,wBAAsB,QAAQ,CAAC,IAAI,EAAE,YAAY,GAAG,OAAO,CAAC,UAAU,CAAC,CAkOtE;AAED;;GAEG;AACH,eAAO,MAAM,cAAc;;;;;;;;;;;;;CAa1B,CAAC"}
|
package/dist/tools/contexto.js
CHANGED
|
@@ -10,6 +10,7 @@ import { formatError, embedAllMetadata } from "../utils/response-formatter.js";
|
|
|
10
10
|
import { withStructuredContent } from "../services/structured-content.service.js";
|
|
11
11
|
import { ContentResolverService } from "../services/content-resolver.service.js";
|
|
12
12
|
import { SkillLoaderService } from "../services/skill-loader.service.js";
|
|
13
|
+
import { KnowledgeBase } from "../core/knowledge/KnowledgeBase.js";
|
|
13
14
|
/**
|
|
14
15
|
* Tool: contexto
|
|
15
16
|
* Retorna contexto acumulado do projeto para injeção em prompts (modo stateless)
|
|
@@ -49,6 +50,45 @@ export async function contexto(args) {
|
|
|
49
50
|
.join("\n");
|
|
50
51
|
// Identificar stack e modelo (se disponíveis nas fases anteriores)
|
|
51
52
|
const fasesCompletas = estado.gates_validados.map(num => getFase(estado.nivel, num)?.nome).join(", ");
|
|
53
|
+
// v6.3 S3.3: Carregar ADRs e decisões acumuladas do KnowledgeBase
|
|
54
|
+
let knowledgeSection = "";
|
|
55
|
+
try {
|
|
56
|
+
const kb = new KnowledgeBase(diretorio);
|
|
57
|
+
const [adrs, decisions] = await Promise.all([
|
|
58
|
+
kb.listByType('adr'),
|
|
59
|
+
kb.listByType('decision'),
|
|
60
|
+
]);
|
|
61
|
+
const partes = [];
|
|
62
|
+
if (adrs.length > 0) {
|
|
63
|
+
partes.push(`## 📚 Decisões Arquiteturais (ADRs)\n`);
|
|
64
|
+
partes.push(`> ${adrs.length} ADR(s) registrado(s) ao longo do projeto.\n`);
|
|
65
|
+
adrs.slice(0, 10).forEach(adr => {
|
|
66
|
+
const content = adr.content;
|
|
67
|
+
const faseInfo = getFase(estado.nivel, adr.metadata.fase);
|
|
68
|
+
partes.push(`**${adr.id}** _(Fase ${adr.metadata.fase}: ${faseInfo?.nome || '?'})_`);
|
|
69
|
+
partes.push(`> ${content?.decision || 'Decisão não disponível'}\n`);
|
|
70
|
+
});
|
|
71
|
+
if (adrs.length > 10) {
|
|
72
|
+
partes.push(`_... e mais ${adrs.length - 10} ADR(s). Consulte \`.maestro/adrs/\` para ver todos._\n`);
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
if (decisions.length > 0) {
|
|
76
|
+
partes.push(`## 📌 Decisões Técnicas\n`);
|
|
77
|
+
decisions.slice(0, 5).forEach(d => {
|
|
78
|
+
const content = d.content;
|
|
79
|
+
partes.push(`- **${d.id}**: ${content?.action || d.id}`);
|
|
80
|
+
if (content?.reason)
|
|
81
|
+
partes.push(` _Motivo: ${content.reason}_`);
|
|
82
|
+
});
|
|
83
|
+
partes.push('');
|
|
84
|
+
}
|
|
85
|
+
if (partes.length > 0) {
|
|
86
|
+
knowledgeSection = partes.join('\n');
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
catch {
|
|
90
|
+
// KnowledgeBase é best-effort
|
|
91
|
+
}
|
|
52
92
|
// v6.0 (P13): Carregar conteúdo real da skill ANTES do template
|
|
53
93
|
let skillInjectionContent = "";
|
|
54
94
|
if (faseAtual) {
|
|
@@ -143,6 +183,7 @@ ${fluxo.fases.map(f => {
|
|
|
143
183
|
return `${status} **Fase ${f.numero}**: ${f.nome}`;
|
|
144
184
|
}).join("\n")}
|
|
145
185
|
|
|
186
|
+
${knowledgeSection ? `\n${knowledgeSection}\n` : ""}
|
|
146
187
|
---
|
|
147
188
|
|
|
148
189
|
*Use este contexto para manter consistência entre as fases do projeto.*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"contexto.js","sourceRoot":"","sources":["../../src/tools/contexto.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AACtD,OAAO,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAE1D,OAAO,EAAE,oBAAoB,EAAuC,MAAM,mBAAmB,CAAC;AAC9F,OAAO,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;AAC/B,OAAO,EAAE,gBAAgB,EAAE,MAAM,2BAA2B,CAAC;AAC7D,OAAO,EAAE,kBAAkB,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AACtE,OAAO,EAAE,oBAAoB,EAAE,MAAM,mCAAmC,CAAC;AACzE,OAAO,EAAE,WAAW,EAAE,gBAAgB,EAAE,MAAM,gCAAgC,CAAC;AAC/E,OAAO,EAAE,qBAAqB,EAAE,MAAM,2CAA2C,CAAC;AAClF,OAAO,EAAE,sBAAsB,EAAE,MAAM,yCAAyC,CAAC;AACjF,OAAO,EAAE,kBAAkB,EAAE,MAAM,qCAAqC,CAAC;
|
|
1
|
+
{"version":3,"file":"contexto.js","sourceRoot":"","sources":["../../src/tools/contexto.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"proximo.d.ts","sourceRoot":"","sources":["../../src/tools/proximo.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,UAAU,EAAiB,MAAM,mBAAmB,CAAC;
|
|
1
|
+
{"version":3,"file":"proximo.d.ts","sourceRoot":"","sources":["../../src/tools/proximo.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,UAAU,EAAiB,MAAM,mBAAmB,CAAC;AAmCnE,UAAU,WAAW;IACjB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,OAAO,CAAC;CACvB;AAyGD;;;;GAIG;AACH,wBAAsB,OAAO,CAAC,IAAI,EAAE,WAAW,GAAG,OAAO,CAAC,UAAU,CAAC,CAkhCpE;AAED;;GAEG;AACH,eAAO,MAAM,aAAa;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA6BzB,CAAC"}
|
package/dist/tools/proximo.js
CHANGED
|
@@ -3,17 +3,15 @@ import { existsSync, readdirSync } from "fs";
|
|
|
3
3
|
import { parsearEstado, serializarEstado } from "../state/storage.js";
|
|
4
4
|
import { getFaseComStitch, getFluxoComStitch } from "../flows/types.js";
|
|
5
5
|
import { classificarPRD } from "../flows/classifier.js"; // @deprecated v6.0 - usar ClassificacaoProgressivaService
|
|
6
|
-
import { validarGate, validarGateComTemplate } from "../gates/validator.js";
|
|
7
6
|
import { setCurrentDirectory } from "../state/context.js";
|
|
8
7
|
import { parsearResumo, serializarResumo, criarResumoInicial, extrairResumoEntregavel } from "../state/memory.js";
|
|
9
|
-
import { gerarInstrucaoCorrecao } from "../utils/instructions.js";
|
|
8
|
+
import { gerarInstrucaoCorrecao, gerarInstrucaoContinuidade } from "../utils/instructions.js";
|
|
10
9
|
import { logEvent, EventTypes } from "../utils/history.js";
|
|
11
10
|
import { getSpecialistPersona } from "../services/specialist.service.js";
|
|
12
11
|
import { gerarSystemMd } from "../utils/system-md.js";
|
|
13
12
|
import { getSkillParaFase } from "../utils/prompt-mapper.js";
|
|
14
|
-
import {
|
|
15
|
-
import {
|
|
16
|
-
import { formatSkillMessage, detectIDE, getSkillResourcePath as getIDESkillResourcePath } from "../utils/ide-paths.js";
|
|
13
|
+
import { resolveProjectPath } from "../utils/files.js";
|
|
14
|
+
import { formatSkillHydrationCommand, detectIDE, getSkillResourcePath as getIDESkillResourcePath } from "../utils/ide-paths.js";
|
|
17
15
|
import { inferirContextoBalanceado } from "../utils/inferencia-contextual.js";
|
|
18
16
|
import { verificarSkillCarregada } from "../utils/content-injector.js";
|
|
19
17
|
import { ContentResolverService } from "../services/content-resolver.service.js";
|
|
@@ -24,6 +22,81 @@ import { getSpecialistQuestions } from "../handlers/specialist-phase-handler.js"
|
|
|
24
22
|
import { resolverPathEntregavel, listarPathsEsperados } from "../utils/entregavel-path.js"; // v5.5.0
|
|
25
23
|
import { readFile } from "fs/promises";
|
|
26
24
|
import { isPrototypePhase } from "../handlers/prototype-phase-handler.js"; // v9.0
|
|
25
|
+
// v6.3 S5.1: Autonomia calibrada
|
|
26
|
+
import { DecisionEngine } from "../core/decision/DecisionEngine.js";
|
|
27
|
+
// V6 Sprint 4+5: Gate orientation e watcher de entregáveis
|
|
28
|
+
import { generateGateOrientationDoc } from "../utils/gate-orientation.js";
|
|
29
|
+
import { startFileWatcher, stopFileWatcher } from "../services/watcher.service.js";
|
|
30
|
+
import { RiskEvaluator } from "../core/risk/RiskEvaluator.js";
|
|
31
|
+
/**
|
|
32
|
+
* v6.3 S5.2-S5.3: Avalia autonomia para o avanço de fase usando RiskEvaluator + DecisionEngine.
|
|
33
|
+
* Retorna null se pode prosseguir, ou ToolResult de bloqueio se requer aprovação humana.
|
|
34
|
+
*/
|
|
35
|
+
async function avaliarAutonomia(estado, nomeFase, diretorio, autoFlow) {
|
|
36
|
+
if (autoFlow)
|
|
37
|
+
return null; // Modo automático: sempre passa direto
|
|
38
|
+
try {
|
|
39
|
+
const riskEvaluator = new RiskEvaluator(diretorio);
|
|
40
|
+
const decisionEngine = new DecisionEngine();
|
|
41
|
+
// Avaliar risco do avanço de fase
|
|
42
|
+
const riskInfo = await riskEvaluator.evaluate(`advance-phase-${nomeFase}`, {
|
|
43
|
+
filesAffected: 1,
|
|
44
|
+
hasTests: estado.gates_validados.length > 0,
|
|
45
|
+
});
|
|
46
|
+
// Mapear nível do RiskEvaluator para DecisionEngine
|
|
47
|
+
const riskMap = {
|
|
48
|
+
SAFE: 'baixo', LOW: 'baixo', MEDIUM: 'medio', HIGH: 'alto', DANGEROUS: 'critico',
|
|
49
|
+
};
|
|
50
|
+
const decisionRisk = riskMap[riskInfo.level] ?? 'medio';
|
|
51
|
+
const decision = await decisionEngine.evaluate({
|
|
52
|
+
operation: `advance-phase-${nomeFase}`,
|
|
53
|
+
riskLevel: decisionRisk,
|
|
54
|
+
context: {
|
|
55
|
+
fase: estado.fase_atual,
|
|
56
|
+
hasHistoricalMatch: estado.gates_validados.length > 0,
|
|
57
|
+
matchesKnownPattern: true,
|
|
58
|
+
isNovelOperation: estado.fase_atual === 1,
|
|
59
|
+
hasFullContext: !!nomeFase,
|
|
60
|
+
},
|
|
61
|
+
});
|
|
62
|
+
// v6.3 S5.4: Só bloqueia em risco crítico / human_only
|
|
63
|
+
if (decision.action === 'human_only') {
|
|
64
|
+
return {
|
|
65
|
+
content: [{
|
|
66
|
+
type: "text",
|
|
67
|
+
text: `# ✋ Aprovação Necessária — Autonomia Calibrada (v6.3)
|
|
68
|
+
|
|
69
|
+
O sistema avaliou que esta operação requer aprovação explícita do usuário.
|
|
70
|
+
|
|
71
|
+
| Fator | Valor |
|
|
72
|
+
|-------|-------|
|
|
73
|
+
| **Fase** | ${estado.fase_atual} — ${nomeFase} |
|
|
74
|
+
| **Risco** | ${riskInfo.level} (score: ${riskInfo.score}) |
|
|
75
|
+
| **Confiança da IA** | ${Math.round(decision.confidence * 100)}% |
|
|
76
|
+
|
|
77
|
+
## Fatores de Risco Detectados
|
|
78
|
+
${riskInfo.factors.map(f => `- **${f.name}** (peso: ${f.weight}) — ${f.description}`).join('\n')}
|
|
79
|
+
|
|
80
|
+
## Raciocínio
|
|
81
|
+
\`\`\`
|
|
82
|
+
${decision.reasoning}
|
|
83
|
+
\`\`\`
|
|
84
|
+
|
|
85
|
+
> 🔐 Para prosseguir, confirme: **"Confirmo o avanço da fase ${estado.fase_atual}"**
|
|
86
|
+
> Ou use \`auto_flow: true\` para modo automático sem checagens de risco.
|
|
87
|
+
`,
|
|
88
|
+
}],
|
|
89
|
+
};
|
|
90
|
+
}
|
|
91
|
+
// Para outros níveis, apenas loga (não bloqueia)
|
|
92
|
+
console.log(`[Autonomia v6.3] fase=${estado.fase_atual} nome=${nomeFase} confianca=${Math.round(decision.confidence * 100)}% risco=${riskInfo.level} acao=${decision.action}`);
|
|
93
|
+
}
|
|
94
|
+
catch (err) {
|
|
95
|
+
// Best-effort — nunca bloqueia o fluxo
|
|
96
|
+
console.warn('[Autonomia v6.3] Falha na avaliação (non-blocking):', err);
|
|
97
|
+
}
|
|
98
|
+
return null;
|
|
99
|
+
}
|
|
27
100
|
/**
|
|
28
101
|
* Calcula score de qualidade
|
|
29
102
|
*/
|
|
@@ -258,6 +331,10 @@ ${instrucoesSkill}
|
|
|
258
331
|
// v5.5.0: Após validação, entregavel é garantidamente string não-vazia
|
|
259
332
|
// TypeScript assertion para evitar erros de tipo
|
|
260
333
|
const entregavelValidado = entregavel;
|
|
334
|
+
// v6.3 S5.3: Avaliação de autonomia — RiskEvaluator + DecisionEngine
|
|
335
|
+
const autonomiaBlock = await avaliarAutonomia(estado, faseAtualInfo?.nome ?? `Fase ${estado.fase_atual}`, diretorio, args.auto_flow ?? false);
|
|
336
|
+
if (autonomiaBlock)
|
|
337
|
+
return autonomiaBlock;
|
|
261
338
|
// Verificar se há bloqueio de aprovação pendente (Gate)
|
|
262
339
|
if (estado.aguardando_aprovacao) {
|
|
263
340
|
// v5.5.0: Incluir instruções de correção no bloqueio
|
|
@@ -415,11 +492,11 @@ Inclua no MESMO prompt qualquer ajuste de domínio/stack ou integrações críti
|
|
|
415
492
|
isError: true,
|
|
416
493
|
};
|
|
417
494
|
}
|
|
418
|
-
// Enforcement de skill + template + checklist antes de avançar
|
|
419
|
-
//
|
|
495
|
+
// v6.0 Sprint 5: Enforcement de skill + template + checklist antes de avançar
|
|
496
|
+
// Verificação obrigatória em TODOS os modos (incluindo auto_flow)
|
|
420
497
|
const ideDetectada = detectIDE(diretorio) || 'windsurf';
|
|
421
498
|
const skillObrigatoria = getSkillParaFase(faseAtual.nome);
|
|
422
|
-
if (skillObrigatoria
|
|
499
|
+
if (skillObrigatoria) {
|
|
423
500
|
const skillOk = await verificarSkillCarregada(diretorio, skillObrigatoria, ideDetectada).catch(() => false);
|
|
424
501
|
if (!skillOk) {
|
|
425
502
|
return {
|
|
@@ -441,48 +518,75 @@ Carregue e leia a skill antes de gerar o entregável:
|
|
|
441
518
|
};
|
|
442
519
|
}
|
|
443
520
|
}
|
|
444
|
-
//
|
|
445
|
-
|
|
521
|
+
// v6.1 Correção 1: Usar validateDeliverable() ao invés de validate()
|
|
522
|
+
// O validate() aplicava regras de TypeScript em documentos Markdown — ineficaz.
|
|
523
|
+
// validateDeliverable() valida conteúdo semântico por fase: seções, gate checklist, tamanho.
|
|
446
524
|
const tier = estado.tier_gate || "base";
|
|
447
|
-
|
|
448
|
-
|
|
449
|
-
|
|
450
|
-
let
|
|
451
|
-
|
|
452
|
-
|
|
453
|
-
// Usar validação baseada em template (enforcement)
|
|
454
|
-
usouTemplate = true;
|
|
455
|
-
const resultado = validacaoTemplate.resultado;
|
|
456
|
-
// Converter resultado do template para formato legado para compatibilidade
|
|
457
|
-
qualityScore = resultado.qualidade?.scoreGeral || resultado.score || 0;
|
|
458
|
-
// Criar estrutura compatível para gateResultado
|
|
459
|
-
gateResultado = {
|
|
460
|
-
valido: resultado.valido,
|
|
461
|
-
itens_validados: resultado.checkboxes?.preenchidos.map((c) => c.texto) || [],
|
|
462
|
-
itens_pendentes: resultado.checkboxes?.faltando.map((c) => c.texto) || [],
|
|
463
|
-
sugestoes: resultado.sugestoes || [],
|
|
464
|
-
};
|
|
465
|
-
// Criar estrutura compatível para estruturaResult
|
|
466
|
-
estruturaResult = {
|
|
467
|
-
valido: resultado.estrutura?.valida || false,
|
|
468
|
-
score: resultado.estrutura?.score || 0,
|
|
469
|
-
secoes_encontradas: resultado.estrutura?.secoesEncontradas || [],
|
|
470
|
-
secoes_faltando: resultado.estrutura?.secoesFaltando || [],
|
|
471
|
-
tamanho_ok: true,
|
|
472
|
-
feedback: resultado.feedback || [],
|
|
473
|
-
};
|
|
525
|
+
console.log(`[proximo] Iniciando validateDeliverable (fase: ${faseAtual.nome}, tier: ${tier})`);
|
|
526
|
+
const { ValidationPipeline } = await import("../core/validation/ValidationPipeline.js");
|
|
527
|
+
const validationPipeline = new ValidationPipeline();
|
|
528
|
+
let validationResult;
|
|
529
|
+
try {
|
|
530
|
+
validationResult = await validationPipeline.validateDeliverable(entregavelValidado, faseAtual.nome, tier, faseAtual.gate_checklist || []);
|
|
474
531
|
}
|
|
475
|
-
|
|
476
|
-
|
|
477
|
-
|
|
478
|
-
|
|
479
|
-
|
|
480
|
-
|
|
532
|
+
catch (error) {
|
|
533
|
+
console.error('[proximo] Erro ao executar validateDeliverable:', error);
|
|
534
|
+
return {
|
|
535
|
+
content: [{
|
|
536
|
+
type: "text",
|
|
537
|
+
text: `# ❌ Erro na Validação do Entregável
|
|
538
|
+
|
|
539
|
+
Ocorreu um erro ao validar o entregável da fase **${faseAtual.nome}**.
|
|
540
|
+
|
|
541
|
+
**Erro:** ${error instanceof Error ? error.message : String(error)}
|
|
542
|
+
|
|
543
|
+
Por favor, verifique:
|
|
544
|
+
1. O entregável está formatado corretamente em Markdown?
|
|
545
|
+
2. O conteúdo segue o template da fase?
|
|
546
|
+
3. Todos os itens do gate checklist estão evidenciados?
|
|
547
|
+
|
|
548
|
+
Se o erro persistir, contate o suporte técnico.`,
|
|
549
|
+
}],
|
|
550
|
+
isError: true,
|
|
551
|
+
};
|
|
481
552
|
}
|
|
553
|
+
const qualityScore = validationResult.overallScore;
|
|
554
|
+
// Converter resultado para formato compatível com mensagens de erro
|
|
555
|
+
const gateResultado = {
|
|
556
|
+
valido: validationResult.passed,
|
|
557
|
+
itens_validados: validationResult.results
|
|
558
|
+
.filter(r => r.passed)
|
|
559
|
+
.map(r => `${r.layer}: ${r.score.toFixed(0)}%`),
|
|
560
|
+
itens_pendentes: validationResult.results
|
|
561
|
+
.filter(r => !r.passed)
|
|
562
|
+
.flatMap(r => r.issues.map(i => `[${r.layer}] ${i.message}`)),
|
|
563
|
+
sugestoes: validationResult.recommendations
|
|
564
|
+
};
|
|
565
|
+
const estruturaResult = {
|
|
566
|
+
valido: validationResult.passed,
|
|
567
|
+
score: qualityScore,
|
|
568
|
+
secoes_encontradas: validationResult.results
|
|
569
|
+
.filter(r => r.passed)
|
|
570
|
+
.map(r => r.layer),
|
|
571
|
+
secoes_faltando: validationResult.results
|
|
572
|
+
.filter(r => !r.passed)
|
|
573
|
+
.map(r => r.layer),
|
|
574
|
+
tamanho_ok: true,
|
|
575
|
+
feedback: validationResult.recommendations
|
|
576
|
+
};
|
|
577
|
+
console.log(`[proximo] validateDeliverable completo — Score: ${qualityScore}/100, Passou: ${validationResult.passed}`);
|
|
482
578
|
// Score < 50: BLOQUEAR com instruções detalhadas de correção
|
|
483
579
|
if (qualityScore < 50) {
|
|
580
|
+
// V6 Sprint 2: Ativar modo compulsório também no score < 50
|
|
581
|
+
estado.em_estado_compulsorio = true;
|
|
582
|
+
estado.aguardando_aprovacao = false; // Score < 50 não aguarda aprovação — é bloqueio total
|
|
583
|
+
try {
|
|
584
|
+
await saveFile(`${diretorio}/.maestro/estado.json`, serializarEstado(estado).content);
|
|
585
|
+
}
|
|
586
|
+
catch { /* silencioso */ }
|
|
484
587
|
const ideParaBloqueio = detectIDE(diretorio) || 'windsurf';
|
|
485
|
-
const feedbackBloqueio = gerarInstrucaoCorrecao(faseAtual.nome, qualityScore, gateResultado.itens_validados || [], gateResultado.itens_pendentes || [], gateResultado.sugestoes || [], estruturaResult.secoes_faltando || [], ideParaBloqueio
|
|
588
|
+
const feedbackBloqueio = gerarInstrucaoCorrecao(faseAtual.nome, qualityScore, gateResultado.itens_validados || [], gateResultado.itens_pendentes || [], gateResultado.sugestoes || [], estruturaResult.secoes_faltando || [], ideParaBloqueio, diretorio // V6 Sprint 1: payload de auto-correção
|
|
589
|
+
);
|
|
486
590
|
// Feedback de leitura do disco
|
|
487
591
|
const feedbackLeituraBloqueio = entregavelLidoDoDisco && caminhoResolvido
|
|
488
592
|
? `> 📄 **Entregável lido de:** \`${caminhoResolvido}\`\n\n`
|
|
@@ -512,6 +616,8 @@ ${feedbackBloqueio}
|
|
|
512
616
|
estado.aguardando_aprovacao = true;
|
|
513
617
|
estado.motivo_bloqueio = "Score abaixo de 70 - requer aprovação do usuário";
|
|
514
618
|
estado.score_bloqueado = qualityScore;
|
|
619
|
+
// V6 Sprint 2: Ativar modo compulsório — bloqueia divagação da IA
|
|
620
|
+
estado.em_estado_compulsorio = true;
|
|
515
621
|
// Serializar estado bloqueado
|
|
516
622
|
const estadoBloqueado = serializarEstado(estado);
|
|
517
623
|
// v5.3: Persistência direta para estado bloqueado
|
|
@@ -523,7 +629,8 @@ ${feedbackBloqueio}
|
|
|
523
629
|
}
|
|
524
630
|
// v5.5.0: Feedback instrutor com templates e checklists
|
|
525
631
|
const ideParaAprovacao = detectIDE(diretorio) || 'windsurf';
|
|
526
|
-
const feedbackAprovacao = gerarInstrucaoCorrecao(faseAtual.nome, qualityScore, gateResultado.itens_validados || [], gateResultado.itens_pendentes || [], gateResultado.sugestoes || [], estruturaResult.secoes_faltando || [], ideParaAprovacao
|
|
632
|
+
const feedbackAprovacao = gerarInstrucaoCorrecao(faseAtual.nome, qualityScore, gateResultado.itens_validados || [], gateResultado.itens_pendentes || [], gateResultado.sugestoes || [], estruturaResult.secoes_faltando || [], ideParaAprovacao, diretorio // V6 Sprint 1: para payload de auto-correção
|
|
633
|
+
);
|
|
527
634
|
// Feedback de leitura do disco
|
|
528
635
|
const feedbackLeituraAprovacao = entregavelLidoDoDisco && caminhoResolvido
|
|
529
636
|
? `> 📄 **Entregável lido de:** \`${caminhoResolvido}\`\n\n`
|
|
@@ -570,6 +677,36 @@ O projeto foi **bloqueado** aguardando decisão do usuário:
|
|
|
570
677
|
});
|
|
571
678
|
// Atualizar estado com entregável registrado
|
|
572
679
|
estado.entregaveis[`fase_${estado.fase_atual}`] = caminhoArquivo;
|
|
680
|
+
// V6 Sprint 2: Garantir que ga saiu do modo compulsório ao avançar com sucesso
|
|
681
|
+
estado.em_estado_compulsorio = false;
|
|
682
|
+
estado.aguardando_aprovacao = false;
|
|
683
|
+
estado.motivo_bloqueio = undefined;
|
|
684
|
+
estado.score_bloqueado = undefined;
|
|
685
|
+
// V6 Sprint 6: PHASE_TYPE_MAP — classifica o tipo da PROXIMA fase para Smart Auto-Flow
|
|
686
|
+
// Nomes canônicos extraídos de flows/types.ts (FLUXO_SIMPLES, FLUXO_MEDIO, FLUXO_COMPLEXO, FASE_STITCH)
|
|
687
|
+
const PHASE_TYPE_MAP = {
|
|
688
|
+
// --- input_required: fase de coleta com o usuário ---
|
|
689
|
+
'Produto': 'input_required',
|
|
690
|
+
// --- derived: fases que derivam de fases anteriores, sem dúvidas do usuário ---
|
|
691
|
+
'Requisitos': 'derived',
|
|
692
|
+
'UX Design': 'derived',
|
|
693
|
+
'Modelo de Domínio': 'derived',
|
|
694
|
+
'Arquitetura': 'derived',
|
|
695
|
+
'Arquitetura Avançada': 'derived',
|
|
696
|
+
'Backlog': 'derived',
|
|
697
|
+
'Contrato API': 'derived',
|
|
698
|
+
'Prototipagem': 'derived', // Sprint Stitch: deriva do Design Doc
|
|
699
|
+
// --- technical: implementação pura, sem perguntas conceituais ---
|
|
700
|
+
'Banco de Dados': 'technical',
|
|
701
|
+
'Segurança': 'technical',
|
|
702
|
+
'Testes': 'technical',
|
|
703
|
+
'Performance': 'technical',
|
|
704
|
+
'Observabilidade': 'technical',
|
|
705
|
+
'Frontend': 'technical',
|
|
706
|
+
'Backend': 'technical',
|
|
707
|
+
'Integração': 'technical',
|
|
708
|
+
'Deploy Final': 'technical',
|
|
709
|
+
};
|
|
573
710
|
// Preparar/atualizar resumo
|
|
574
711
|
let resumo;
|
|
575
712
|
if (args.resumo_json) {
|
|
@@ -757,6 +894,42 @@ ${criterios.slice(0, 5).map(c => `- ${c}`).join("\n")}
|
|
|
757
894
|
catch (error) {
|
|
758
895
|
console.warn('Aviso: Não foi possível atualizar histórico/SYSTEM.md:', error);
|
|
759
896
|
}
|
|
897
|
+
// V6 Sprint 4: Gerar guia de Gate da PRÓXIMA fase (TDD Invertido)
|
|
898
|
+
// Cria docs/fase-XX/.orientacoes-gate.md com os critérios exatos de validação
|
|
899
|
+
if (proximaFase) {
|
|
900
|
+
try {
|
|
901
|
+
const gateOrientationPath = await generateGateOrientationDoc(diretorio, proximaFase.nome, estado.fase_atual);
|
|
902
|
+
// Atualizar flow_phase_type da próxima fase no estado (Sprint 6)
|
|
903
|
+
estado.flow_phase_type = PHASE_TYPE_MAP[proximaFase.nome] ?? 'derived';
|
|
904
|
+
if (gateOrientationPath) {
|
|
905
|
+
console.log(`[proximo] Guia de Gate gerado: ${gateOrientationPath}`);
|
|
906
|
+
}
|
|
907
|
+
}
|
|
908
|
+
catch (error) {
|
|
909
|
+
console.warn('[proximo] Falha ao gerar orientação de gate (não crítico):', error);
|
|
910
|
+
}
|
|
911
|
+
}
|
|
912
|
+
// V6 Sprint 5: Gerenciar ciclo de vida do watcher de entregáveis
|
|
913
|
+
// Parar watcher da fase anterior (evita leak de file handles)
|
|
914
|
+
stopFileWatcher(diretorio);
|
|
915
|
+
// Iniciar watcher para o PRÓXIMO entregável assim que a fase avançar
|
|
916
|
+
if (proximaFase) {
|
|
917
|
+
const proximaFaseDirName = `fase-${estado.fase_atual.toString().padStart(2, '0')}-${proximaFase.nome.toLowerCase().replace(/\s/g, '-')}`;
|
|
918
|
+
const proximoEntregavelPath = `${diretorio}/docs/${proximaFaseDirName}/${proximaFase.entregavel_esperado}`;
|
|
919
|
+
startFileWatcher({
|
|
920
|
+
filePath: proximoEntregavelPath,
|
|
921
|
+
diretorio,
|
|
922
|
+
faseNome: proximaFase.nome,
|
|
923
|
+
tier: estado.tier_gate || 'base',
|
|
924
|
+
gateChecklist: proximaFase.gate_checklist || [],
|
|
925
|
+
onValidationResult: (score, feedback, filePath) => {
|
|
926
|
+
// Log no console — o usuário será notificado via IDE ao chamar executar
|
|
927
|
+
console.log(`\n==========================================\n[watcher] ${proximaFase.nome} | Score: ${score} | ${filePath}`);
|
|
928
|
+
if (score >= 0)
|
|
929
|
+
console.log(`[watcher] Feedback:\n${feedback}\n==========================================\n`);
|
|
930
|
+
}
|
|
931
|
+
}).catch(err => console.warn('[watcher] Não foi possível iniciar o watcher:', err));
|
|
932
|
+
}
|
|
760
933
|
// v6.0: Bloco de interrupção pós-PRD removido — classificação progressiva já cuida disso
|
|
761
934
|
// v5.5.0: Feedback visual quando entregável foi lido do disco
|
|
762
935
|
const feedbackLeitura = entregavelLidoDoDisco && caminhoResolvido
|
|
@@ -786,19 +959,13 @@ ${criterios.slice(0, 5).map(c => `- ${c}`).join("\n")}
|
|
|
786
959
|
catch (error) {
|
|
787
960
|
console.warn("[proximo] Falha ao carregar skill ativa, usando fallback:", error);
|
|
788
961
|
}
|
|
789
|
-
// Fallback: referência textual (
|
|
962
|
+
// Fallback: referência textual com comando de hydration (V6 Sprint 3)
|
|
790
963
|
const ide = estado.ide || detectIDE(diretorio) || 'windsurf';
|
|
791
964
|
return `
|
|
792
965
|
|
|
793
966
|
## 🤖 Próximo Especialista
|
|
794
967
|
|
|
795
|
-
${
|
|
796
|
-
|
|
797
|
-
> 💡 **Próximos passos:**
|
|
798
|
-
> 1. Ative a skill: \`@${proximaSkill}\`
|
|
799
|
-
> 2. Leia SKILL.md para entender a fase
|
|
800
|
-
> 3. Consulte o template apropriado
|
|
801
|
-
> 4. Siga o checklist de validação
|
|
968
|
+
${formatSkillHydrationCommand(proximaSkill, ide)}
|
|
802
969
|
`;
|
|
803
970
|
})();
|
|
804
971
|
const resposta = `# ✅ Fase ${faseAnterior} Concluída!
|
|
@@ -826,6 +993,9 @@ ${proximaSkillInfo}
|
|
|
826
993
|
---
|
|
827
994
|
|
|
828
995
|
`;
|
|
996
|
+
// V6 Sprint 6: Instrução de continuidade autônoma
|
|
997
|
+
// Retorna vazio para fases 'input_required' (especialista faz as perguntas naturalmente)
|
|
998
|
+
const continuidade = gerarInstrucaoContinuidade(diretorio, faseAnterior, proximaFase?.nome ?? '', estado.flow_phase_type ?? 'derived');
|
|
829
999
|
// v5.3: Persistência direta — salvar todos os arquivos via fs
|
|
830
1000
|
try {
|
|
831
1001
|
await saveMultipleFiles(filesToSave);
|
|
@@ -838,7 +1008,7 @@ ${proximaSkillInfo}
|
|
|
838
1008
|
// v5: next_action e progress são calculados automaticamente pelo middleware flow-engine.middleware.ts
|
|
839
1009
|
// Mantemos apenas specialist_persona e estado_atualizado para o middleware processar
|
|
840
1010
|
return {
|
|
841
|
-
content: [{ type: "text", text: feedbackLeitura + resposta + confirmacao }],
|
|
1011
|
+
content: [{ type: "text", text: feedbackLeitura + resposta + confirmacao + continuidade }],
|
|
842
1012
|
estado_atualizado: estadoFile.content,
|
|
843
1013
|
specialist_persona: specialist || undefined,
|
|
844
1014
|
// next_action e progress serão adicionados pelo middleware withFlowEngine
|