@maestro-ai/mcp-server 5.1.0 → 5.2.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 (116) hide show
  1. package/dist/constants.d.ts +16 -0
  2. package/dist/constants.d.ts.map +1 -0
  3. package/dist/constants.js +16 -0
  4. package/dist/constants.js.map +1 -0
  5. package/dist/handlers/shared-prompt-handler.d.ts +41 -0
  6. package/dist/handlers/shared-prompt-handler.d.ts.map +1 -0
  7. package/dist/handlers/shared-prompt-handler.js +289 -0
  8. package/dist/handlers/shared-prompt-handler.js.map +1 -0
  9. package/dist/handlers/shared-resource-handler.d.ts +54 -0
  10. package/dist/handlers/shared-resource-handler.d.ts.map +1 -0
  11. package/dist/handlers/shared-resource-handler.js +131 -0
  12. package/dist/handlers/shared-resource-handler.js.map +1 -0
  13. package/dist/index.js +34 -146
  14. package/dist/index.js.map +1 -1
  15. package/dist/middleware/index.d.ts +6 -0
  16. package/dist/middleware/index.d.ts.map +1 -1
  17. package/dist/middleware/index.js +8 -0
  18. package/dist/middleware/index.js.map +1 -1
  19. package/dist/resources/index.d.ts +5 -3
  20. package/dist/resources/index.d.ts.map +1 -1
  21. package/dist/resources/index.js +1 -165
  22. package/dist/resources/index.js.map +1 -1
  23. package/dist/router.d.ts +1 -5
  24. package/dist/router.d.ts.map +1 -1
  25. package/dist/router.js +116 -28
  26. package/dist/router.js.map +1 -1
  27. package/dist/server.d.ts +4 -3
  28. package/dist/server.d.ts.map +1 -1
  29. package/dist/server.js +1 -26
  30. package/dist/server.js.map +1 -1
  31. package/dist/services/annotations-fallback.service.d.ts +64 -0
  32. package/dist/services/annotations-fallback.service.d.ts.map +1 -0
  33. package/dist/services/annotations-fallback.service.js +64 -0
  34. package/dist/services/annotations-fallback.service.js.map +1 -0
  35. package/dist/services/client-capabilities.service.d.ts +46 -0
  36. package/dist/services/client-capabilities.service.d.ts.map +1 -0
  37. package/dist/services/client-capabilities.service.js +96 -0
  38. package/dist/services/client-capabilities.service.js.map +1 -0
  39. package/dist/services/elicitation-fallback.service.d.ts +37 -0
  40. package/dist/services/elicitation-fallback.service.d.ts.map +1 -0
  41. package/dist/services/elicitation-fallback.service.js +90 -0
  42. package/dist/services/elicitation-fallback.service.js.map +1 -0
  43. package/dist/services/sampling-fallback.service.d.ts +33 -0
  44. package/dist/services/sampling-fallback.service.d.ts.map +1 -0
  45. package/dist/services/sampling-fallback.service.js +71 -0
  46. package/dist/services/sampling-fallback.service.js.map +1 -0
  47. package/dist/services/skill-cache.service.d.ts +28 -0
  48. package/dist/services/skill-cache.service.d.ts.map +1 -0
  49. package/dist/services/skill-cache.service.js +49 -0
  50. package/dist/services/skill-cache.service.js.map +1 -0
  51. package/dist/services/skill-loader.service.d.ts.map +1 -1
  52. package/dist/services/skill-loader.service.js +16 -1
  53. package/dist/services/skill-loader.service.js.map +1 -1
  54. package/dist/services/structured-content.service.d.ts +38 -0
  55. package/dist/services/structured-content.service.d.ts.map +1 -0
  56. package/dist/services/structured-content.service.js +44 -0
  57. package/dist/services/structured-content.service.js.map +1 -0
  58. package/dist/services/system-prompt.service.d.ts +17 -0
  59. package/dist/services/system-prompt.service.d.ts.map +1 -0
  60. package/dist/services/system-prompt.service.js +72 -0
  61. package/dist/services/system-prompt.service.js.map +1 -0
  62. package/dist/stdio.js +26 -381
  63. package/dist/stdio.js.map +1 -1
  64. package/dist/tests/skill-loader.test.js +2 -0
  65. package/dist/tests/skill-loader.test.js.map +1 -1
  66. package/dist/tests/v52-integration.test.d.ts +14 -0
  67. package/dist/tests/v52-integration.test.d.ts.map +1 -0
  68. package/dist/tests/v52-integration.test.js +223 -0
  69. package/dist/tests/v52-integration.test.js.map +1 -0
  70. package/dist/tools/consolidated/analisar.d.ts.map +1 -1
  71. package/dist/tools/consolidated/analisar.js +21 -5
  72. package/dist/tools/consolidated/analisar.js.map +1 -1
  73. package/dist/tools/consolidated/avancar.d.ts.map +1 -1
  74. package/dist/tools/consolidated/avancar.js +13 -18
  75. package/dist/tools/consolidated/avancar.js.map +1 -1
  76. package/dist/tools/consolidated/checkpoint-tool.d.ts.map +1 -1
  77. package/dist/tools/consolidated/checkpoint-tool.js +4 -12
  78. package/dist/tools/consolidated/checkpoint-tool.js.map +1 -1
  79. package/dist/tools/consolidated/executar.d.ts +119 -0
  80. package/dist/tools/consolidated/executar.d.ts.map +1 -0
  81. package/dist/tools/consolidated/executar.js +155 -0
  82. package/dist/tools/consolidated/executar.js.map +1 -0
  83. package/dist/tools/consolidated/validar.d.ts.map +1 -1
  84. package/dist/tools/consolidated/validar.js +2 -4
  85. package/dist/tools/consolidated/validar.js.map +1 -1
  86. package/dist/tools/contexto.d.ts.map +1 -1
  87. package/dist/tools/contexto.js +22 -33
  88. package/dist/tools/contexto.js.map +1 -1
  89. package/dist/tools/discovery.d.ts.map +1 -1
  90. package/dist/tools/discovery.js +26 -5
  91. package/dist/tools/discovery.js.map +1 -1
  92. package/dist/tools/index.d.ts +4 -3
  93. package/dist/tools/index.d.ts.map +1 -1
  94. package/dist/tools/index.js +1 -369
  95. package/dist/tools/index.js.map +1 -1
  96. package/dist/tools/maestro-tool.d.ts.map +1 -1
  97. package/dist/tools/maestro-tool.js +83 -76
  98. package/dist/tools/maestro-tool.js.map +1 -1
  99. package/dist/tools/salvar.d.ts.map +1 -1
  100. package/dist/tools/salvar.js +16 -38
  101. package/dist/tools/salvar.js.map +1 -1
  102. package/dist/tools/status.d.ts.map +1 -1
  103. package/dist/tools/status.js +27 -32
  104. package/dist/tools/status.js.map +1 -1
  105. package/dist/types/index.d.ts +11 -5
  106. package/dist/types/index.d.ts.map +1 -1
  107. package/dist/types/index.js.map +1 -1
  108. package/dist/utils/resource-links.d.ts +44 -0
  109. package/dist/utils/resource-links.d.ts.map +1 -0
  110. package/dist/utils/resource-links.js +84 -0
  111. package/dist/utils/resource-links.js.map +1 -0
  112. package/dist/utils/response-formatter.d.ts +113 -0
  113. package/dist/utils/response-formatter.d.ts.map +1 -0
  114. package/dist/utils/response-formatter.js +185 -0
  115. package/dist/utils/response-formatter.js.map +1 -0
  116. package/package.json +1 -1
@@ -0,0 +1,16 @@
1
+ /**
2
+ * Constantes centralizadas do Maestro MCP
3
+ *
4
+ * Ponto ÚNICO de definição de versão, nome e protocol.
5
+ * Todos os entry points (stdio.ts, index.ts) importam daqui.
6
+ */
7
+ export declare const MAESTRO_NAME = "mcp-maestro";
8
+ export declare const MAESTRO_VERSION = "5.2.0";
9
+ export declare const MAESTRO_DESCRIPTION = "Maestro \u2014 Orquestrador de desenvolvimento assistido por IA";
10
+ /**
11
+ * Protocol version suportada pelo servidor.
12
+ * 2025-03-26 é compatível com Windsurf (protocolo mais antigo entre os targets).
13
+ * Quando Windsurf atualizar, mover para 2025-06-18.
14
+ */
15
+ export declare const SUPPORTED_PROTOCOL_VERSION = "2025-03-26";
16
+ //# sourceMappingURL=constants.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,eAAO,MAAM,YAAY,gBAAgB,CAAC;AAC1C,eAAO,MAAM,eAAe,UAAU,CAAC;AACvC,eAAO,MAAM,mBAAmB,oEAA+D,CAAC;AAEhG;;;;GAIG;AACH,eAAO,MAAM,0BAA0B,eAAe,CAAC"}
@@ -0,0 +1,16 @@
1
+ /**
2
+ * Constantes centralizadas do Maestro MCP
3
+ *
4
+ * Ponto ÚNICO de definição de versão, nome e protocol.
5
+ * Todos os entry points (stdio.ts, index.ts) importam daqui.
6
+ */
7
+ export const MAESTRO_NAME = "mcp-maestro";
8
+ export const MAESTRO_VERSION = "5.2.0";
9
+ export const MAESTRO_DESCRIPTION = "Maestro — Orquestrador de desenvolvimento assistido por IA";
10
+ /**
11
+ * Protocol version suportada pelo servidor.
12
+ * 2025-03-26 é compatível com Windsurf (protocolo mais antigo entre os targets).
13
+ * Quando Windsurf atualizar, mover para 2025-06-18.
14
+ */
15
+ export const SUPPORTED_PROTOCOL_VERSION = "2025-03-26";
16
+ //# sourceMappingURL=constants.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"constants.js","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,MAAM,CAAC,MAAM,YAAY,GAAG,aAAa,CAAC;AAC1C,MAAM,CAAC,MAAM,eAAe,GAAG,OAAO,CAAC;AACvC,MAAM,CAAC,MAAM,mBAAmB,GAAG,4DAA4D,CAAC;AAEhG;;;;GAIG;AACH,MAAM,CAAC,MAAM,0BAA0B,GAAG,YAAY,CAAC"}
@@ -0,0 +1,41 @@
1
+ /**
2
+ * Handler compartilhado de Prompts MCP.
3
+ *
4
+ * Centraliza a lógica de listagem e resolução de prompts
5
+ * para ambos entry points (stdio.ts e index.ts).
6
+ *
7
+ * @since v5.2.0 — Task C.4 do Roadmap v5.2
8
+ */
9
+ interface PromptDefinition {
10
+ name: string;
11
+ description: string;
12
+ arguments: Array<{
13
+ name: string;
14
+ description: string;
15
+ required: boolean;
16
+ }>;
17
+ }
18
+ interface PromptMessage {
19
+ role: "user" | "assistant";
20
+ content: {
21
+ type: "text";
22
+ text: string;
23
+ };
24
+ }
25
+ interface PromptResult {
26
+ [x: string]: unknown;
27
+ description: string;
28
+ messages: PromptMessage[];
29
+ }
30
+ /**
31
+ * Retorna lista de prompts disponíveis.
32
+ */
33
+ export declare function listPrompts(): {
34
+ prompts: PromptDefinition[];
35
+ };
36
+ /**
37
+ * Resolve um prompt pelo nome.
38
+ */
39
+ export declare function getPrompt(name: string, diretorio: string): Promise<PromptResult>;
40
+ export {};
41
+ //# sourceMappingURL=shared-prompt-handler.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"shared-prompt-handler.d.ts","sourceRoot":"","sources":["../../src/handlers/shared-prompt-handler.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAWH,UAAU,gBAAgB;IACtB,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,WAAW,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,OAAO,CAAA;KAAE,CAAC,CAAC;CAC9E;AAED,UAAU,aAAa;IACnB,IAAI,EAAE,MAAM,GAAG,WAAW,CAAC;IAC3B,OAAO,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC;CAC3C;AAED,UAAU,YAAY;IAClB,CAAC,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC;IACrB,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,aAAa,EAAE,CAAC;CAC7B;AA2BD;;GAEG;AACH,wBAAgB,WAAW,IAAI;IAAE,OAAO,EAAE,gBAAgB,EAAE,CAAA;CAAE,CAE7D;AAED;;GAEG;AACH,wBAAsB,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC,CAatF"}
@@ -0,0 +1,289 @@
1
+ /**
2
+ * Handler compartilhado de Prompts MCP.
3
+ *
4
+ * Centraliza a lógica de listagem e resolução de prompts
5
+ * para ambos entry points (stdio.ts e index.ts).
6
+ *
7
+ * @since v5.2.0 — Task C.4 do Roadmap v5.2
8
+ */
9
+ import { createStateService } from "../services/state.service.js";
10
+ import { getFaseComStitch } from "../flows/types.js";
11
+ import { getSpecialistPersona } from "../services/specialist.service.js";
12
+ import { ContentResolverService } from "../services/content-resolver.service.js";
13
+ import { SkillLoaderService } from "../services/skill-loader.service.js";
14
+ import { getRegisteredTools } from "../router.js";
15
+ // === LISTAGEM ===
16
+ const PROMPT_DEFINITIONS = [
17
+ {
18
+ name: "maestro-specialist",
19
+ description: "Persona + instruções do especialista da fase atual do projeto",
20
+ arguments: [{ name: "diretorio", description: "Diretório do projeto", required: true }],
21
+ },
22
+ {
23
+ name: "maestro-context",
24
+ description: "Contexto completo do projeto para a sessão de trabalho",
25
+ arguments: [{ name: "diretorio", description: "Diretório do projeto", required: true }],
26
+ },
27
+ {
28
+ name: "maestro-template",
29
+ description: "Template do entregável esperado para a fase atual",
30
+ arguments: [{ name: "diretorio", description: "Diretório do projeto", required: true }],
31
+ },
32
+ {
33
+ name: "maestro-sessao",
34
+ description: "Contexto completo para sessão de trabalho (specialist + context + template + tools)",
35
+ arguments: [{ name: "diretorio", description: "Diretório do projeto", required: true }],
36
+ },
37
+ ];
38
+ /**
39
+ * Retorna lista de prompts disponíveis.
40
+ */
41
+ export function listPrompts() {
42
+ return { prompts: PROMPT_DEFINITIONS };
43
+ }
44
+ /**
45
+ * Resolve um prompt pelo nome.
46
+ */
47
+ export async function getPrompt(name, diretorio) {
48
+ switch (name) {
49
+ case "maestro-specialist":
50
+ return buildSpecialistPrompt(diretorio);
51
+ case "maestro-context":
52
+ return buildContextPrompt(diretorio);
53
+ case "maestro-template":
54
+ return buildTemplatePrompt(diretorio);
55
+ case "maestro-sessao":
56
+ return buildSessionPrompt(diretorio);
57
+ default:
58
+ throw new Error(`Prompt não encontrado: ${name}`);
59
+ }
60
+ }
61
+ // === BUILDERS ===
62
+ function noProjectResult(msg) {
63
+ return {
64
+ description: "Nenhum projeto encontrado",
65
+ messages: [{
66
+ role: "user",
67
+ content: { type: "text", text: msg || "Nenhum projeto ativo neste diretório. Use `maestro(diretorio)` para começar." },
68
+ }],
69
+ };
70
+ }
71
+ async function buildSpecialistPrompt(diretorio) {
72
+ const stateService = createStateService(diretorio);
73
+ const estado = await stateService.load();
74
+ if (!estado)
75
+ return noProjectResult();
76
+ const faseInfo = getFaseComStitch(estado.nivel, estado.fase_atual, estado.usar_stitch);
77
+ if (!faseInfo) {
78
+ return {
79
+ description: `Projeto: ${estado.nome}`,
80
+ messages: [{
81
+ role: "user",
82
+ content: { type: "text", text: `Projeto ${estado.nome} — fase ${estado.fase_atual} não encontrada no fluxo.` },
83
+ }],
84
+ };
85
+ }
86
+ const mode = (estado.config?.mode || "balanced");
87
+ const contentResolver = new ContentResolverService(diretorio);
88
+ const skillLoader = new SkillLoaderService(contentResolver);
89
+ try {
90
+ const contextPkg = await skillLoader.loadForPhase(faseInfo.nome, mode);
91
+ if (contextPkg) {
92
+ return {
93
+ description: `Especialista: ${contextPkg.specialist?.name || faseInfo.nome} — Fase ${estado.fase_atual}/${estado.total_fases}`,
94
+ messages: [{
95
+ role: "user",
96
+ content: {
97
+ type: "text",
98
+ text: `# Especialista da Fase: ${faseInfo.nome}\n\n${skillLoader.formatAsMarkdown(contextPkg)}`,
99
+ },
100
+ }],
101
+ };
102
+ }
103
+ }
104
+ catch (error) {
105
+ console.warn("[Prompt] Falha ao carregar skill:", error);
106
+ }
107
+ // Fallback: persona básica
108
+ const specialist = getSpecialistPersona(faseInfo.nome);
109
+ return {
110
+ description: `Especialista: ${specialist?.name || faseInfo.nome}`,
111
+ messages: [{
112
+ role: "user",
113
+ content: {
114
+ type: "text",
115
+ text: specialist
116
+ ? `# ${specialist.name}\n\n**Tom:** ${specialist.tone}\n**Expertise:** ${specialist.expertise.join(", ")}\n**Instruções:** ${specialist.instructions}`
117
+ : `Fase ${estado.fase_atual}: ${faseInfo.nome}`,
118
+ },
119
+ }],
120
+ };
121
+ }
122
+ async function buildContextPrompt(diretorio) {
123
+ const stateService = createStateService(diretorio);
124
+ const estado = await stateService.load();
125
+ if (!estado)
126
+ return noProjectResult("Nenhum projeto ativo neste diretório.");
127
+ const faseInfo = getFaseComStitch(estado.nivel, estado.fase_atual, estado.usar_stitch);
128
+ const contextText = `# Contexto do Projeto: ${estado.nome}
129
+
130
+ ## Estado
131
+ | Campo | Valor |
132
+ |-------|-------|
133
+ | **Nível** | ${estado.nivel.toUpperCase()} |
134
+ | **Fase Atual** | ${estado.fase_atual}/${estado.total_fases} — ${faseInfo?.nome || "N/A"} |
135
+ | **Gates Validados** | ${estado.gates_validados?.join(", ") || "nenhum"} |
136
+
137
+ ## Entregáveis Salvos
138
+ ${Object.entries(estado.entregaveis || {}).map(([k, v]) => `- **${k}:** ${v}`).join("\n") || "Nenhum ainda."}
139
+
140
+ ## Próximo Passo
141
+ Trabalhe com o especialista **${faseInfo?.especialista || "N/A"}** para gerar: **${faseInfo?.entregavel_esperado || "N/A"}**
142
+ `;
143
+ return {
144
+ description: `Projeto: ${estado.nome} — Fase ${estado.fase_atual}/${estado.total_fases}`,
145
+ messages: [{
146
+ role: "user",
147
+ content: { type: "text", text: contextText },
148
+ }],
149
+ };
150
+ }
151
+ async function buildTemplatePrompt(diretorio) {
152
+ const stateService = createStateService(diretorio);
153
+ const estado = await stateService.load();
154
+ if (!estado)
155
+ return noProjectResult("Nenhum projeto ativo neste diretório.");
156
+ const faseInfo = getFaseComStitch(estado.nivel, estado.fase_atual, estado.usar_stitch);
157
+ if (!faseInfo) {
158
+ return {
159
+ description: `Projeto: ${estado.nome}`,
160
+ messages: [{
161
+ role: "user",
162
+ content: { type: "text", text: `Projeto ${estado.nome} — fase ${estado.fase_atual} não encontrada.` },
163
+ }],
164
+ };
165
+ }
166
+ const contentResolver = new ContentResolverService(diretorio);
167
+ const skillLoader = new SkillLoaderService(contentResolver);
168
+ try {
169
+ const templateContent = await skillLoader.loadTemplate(faseInfo.nome);
170
+ if (templateContent) {
171
+ return {
172
+ description: `Template: ${faseInfo.entregavel_esperado || faseInfo.nome}`,
173
+ messages: [{
174
+ role: "user",
175
+ content: {
176
+ type: "text",
177
+ text: `# Template do Entregável: ${faseInfo.entregavel_esperado || faseInfo.nome}
178
+
179
+ ## Fase ${estado.fase_atual}/${estado.total_fases}: ${faseInfo.nome}
180
+
181
+ Use este template como base para gerar o entregável:
182
+
183
+ ---
184
+
185
+ ${templateContent}
186
+
187
+ ---
188
+
189
+ > 💡 Dica: Preencha todas as seções marcadas com [...] ou indicadores de conteúdo.`,
190
+ },
191
+ }],
192
+ };
193
+ }
194
+ }
195
+ catch (error) {
196
+ console.warn("[Prompt] Falha ao carregar template:", error);
197
+ }
198
+ // Fallback: estrutura básica
199
+ return {
200
+ description: `Template: ${faseInfo.entregavel_esperado || faseInfo.nome}`,
201
+ messages: [{
202
+ role: "user",
203
+ content: {
204
+ type: "text",
205
+ text: `# Template do Entregável: ${faseInfo.entregavel_esperado || faseInfo.nome}
206
+
207
+ ## Fase ${estado.fase_atual}/${estado.total_fases}: ${faseInfo.nome}
208
+
209
+ ### Estrutura Esperada
210
+
211
+ ${faseInfo.gate_checklist.map((item, i) => `${i + 1}. ${item}`).join("\n")}
212
+
213
+ ---
214
+
215
+ > ℹ️ Template específico não disponível. Use a lista acima como guia.`,
216
+ },
217
+ }],
218
+ };
219
+ }
220
+ async function buildSessionPrompt(diretorio) {
221
+ const stateService = createStateService(diretorio);
222
+ const estado = await stateService.load();
223
+ if (!estado) {
224
+ // v5.2: Lista tools consolidadas
225
+ const tools = getRegisteredTools();
226
+ const toolsList = tools.map(t => `- **${t.name}** — ${t.description.replace(/^[^\s]+ /, "")}`).join("\n");
227
+ return {
228
+ description: "Nenhum projeto encontrado",
229
+ messages: [{
230
+ role: "user",
231
+ content: {
232
+ type: "text",
233
+ text: `# 🎯 Sessão Maestro
234
+
235
+ Nenhum projeto ativo em \`${diretorio}\`.
236
+
237
+ Use \`maestro(diretorio: "${diretorio}")\` para começar.
238
+
239
+ ## Tools Disponíveis
240
+ ${toolsList}`,
241
+ },
242
+ }],
243
+ };
244
+ }
245
+ const faseInfo = getFaseComStitch(estado.nivel, estado.fase_atual, estado.usar_stitch);
246
+ const specialist = faseInfo ? getSpecialistPersona(faseInfo.nome) : null;
247
+ let sessionContent = `# 🎯 Sessão Maestro — ${estado.nome}\n\n`;
248
+ // Specialist
249
+ if (specialist) {
250
+ sessionContent += `## 🤖 Especialista: ${specialist.name}\n\n`;
251
+ sessionContent += `**Tom:** ${specialist.tone}\n`;
252
+ sessionContent += `**Expertise:** ${specialist.expertise.join(", ")}\n`;
253
+ sessionContent += `**Instruções:** ${specialist.instructions}\n\n`;
254
+ }
255
+ // Contexto do projeto
256
+ sessionContent += `## 📋 Contexto\n\n`;
257
+ sessionContent += `| Campo | Valor |\n|-------|-------|\n`;
258
+ sessionContent += `| **Projeto** | ${estado.nome} |\n`;
259
+ sessionContent += `| **Nível** | ${estado.nivel.toUpperCase()} |\n`;
260
+ sessionContent += `| **Fase** | ${estado.fase_atual}/${estado.total_fases} — ${faseInfo?.nome || "N/A"} |\n`;
261
+ sessionContent += `| **Gates Validados** | ${estado.gates_validados.length} |\n\n`;
262
+ // Skill injection
263
+ if (faseInfo) {
264
+ try {
265
+ const contentResolver = new ContentResolverService(diretorio);
266
+ const skillLoader = new SkillLoaderService(contentResolver);
267
+ const mode = (estado.config?.mode || "balanced");
268
+ const contextPkg = await skillLoader.loadForPhase(faseInfo.nome, mode);
269
+ if (contextPkg) {
270
+ sessionContent += `## 📚 Skill da Fase\n\n${skillLoader.formatAsMarkdown(contextPkg)}\n\n`;
271
+ }
272
+ }
273
+ catch {
274
+ // Fallback silencioso
275
+ }
276
+ }
277
+ // v5.2: Tools consolidadas dinâmicas
278
+ const tools = getRegisteredTools();
279
+ sessionContent += `## 🔧 Tools Disponíveis\n\n`;
280
+ sessionContent += tools.map(t => `- **${t.name}** — ${t.description.replace(/^[^\s]+ /, "")}`).join("\n");
281
+ return {
282
+ description: `Sessão: ${estado.nome} — Fase ${estado.fase_atual}`,
283
+ messages: [{
284
+ role: "user",
285
+ content: { type: "text", text: sessionContent },
286
+ }],
287
+ };
288
+ }
289
+ //# sourceMappingURL=shared-prompt-handler.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"shared-prompt-handler.js","sourceRoot":"","sources":["../../src/handlers/shared-prompt-handler.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,54 @@
1
+ /**
2
+ * Handlers compartilhados de Resources entre stdio.ts e index.ts.
3
+ *
4
+ * Elimina duplicação de lógica de resources/list e resources/read.
5
+ * Ambos entry points importam daqui.
6
+ *
7
+ * @since v5.1.0 — Task 1.5 do Roadmap de Melhorias MCP
8
+ * @updated v5.2.0 — Task A.2: Integração efetiva + suporte a skills e system-prompt dinâmico
9
+ */
10
+ export interface ResourceInfo {
11
+ uri: string;
12
+ name: string;
13
+ mimeType: string;
14
+ description?: string;
15
+ }
16
+ export interface SkillResourceInfo {
17
+ uri: string;
18
+ name: string;
19
+ mimeType: string;
20
+ }
21
+ /**
22
+ * Opções para listagem de resources.
23
+ */
24
+ export interface ListResourcesOptions {
25
+ /** Diretório do projeto (para resolver skills) */
26
+ projectDir?: string;
27
+ /** Se true, inclui skill resources (usado no stdio) */
28
+ includeSkills?: boolean;
29
+ }
30
+ /**
31
+ * Lista todos os resources disponíveis (especialistas, templates, guias, system-prompt).
32
+ * Opcionalmente inclui skill resources quando projectDir é fornecido.
33
+ */
34
+ export declare function listResources(opts?: ListResourcesOptions): Promise<{
35
+ resources: ResourceInfo[];
36
+ }>;
37
+ /**
38
+ * Opções para leitura de resource.
39
+ */
40
+ export interface ReadResourceOptions {
41
+ /** Diretório do projeto (para resolver skills e system-prompt dinâmico) */
42
+ projectDir?: string;
43
+ }
44
+ /**
45
+ * Lê o conteúdo de um resource pelo URI.
46
+ */
47
+ export declare function readResource(uri: string, opts?: ReadResourceOptions): Promise<{
48
+ contents: Array<{
49
+ uri: string;
50
+ mimeType: string;
51
+ text: string;
52
+ }>;
53
+ }>;
54
+ //# sourceMappingURL=shared-resource-handler.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"shared-resource-handler.d.ts","sourceRoot":"","sources":["../../src/handlers/shared-resource-handler.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAeH,MAAM,WAAW,YAAY;IACzB,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,CAAC,EAAE,MAAM,CAAC;CACxB;AAED,MAAM,WAAW,iBAAiB;IAC9B,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;CACpB;AAED;;GAEG;AACH,MAAM,WAAW,oBAAoB;IACjC,kDAAkD;IAClD,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,uDAAuD;IACvD,aAAa,CAAC,EAAE,OAAO,CAAC;CAC3B;AAED;;;GAGG;AACH,wBAAsB,aAAa,CAAC,IAAI,CAAC,EAAE,oBAAoB,GAAG,OAAO,CAAC;IAAE,SAAS,EAAE,YAAY,EAAE,CAAA;CAAE,CAAC,CAoEvG;AAED;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAChC,2EAA2E;IAC3E,UAAU,CAAC,EAAE,MAAM,CAAC;CACvB;AAED;;GAEG;AACH,wBAAsB,YAAY,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,mBAAmB,GAAG,OAAO,CAAC;IAAE,QAAQ,EAAE,KAAK,CAAC;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAA;CAAE,CAAC,CA2DzJ"}
@@ -0,0 +1,131 @@
1
+ /**
2
+ * Handlers compartilhados de Resources entre stdio.ts e index.ts.
3
+ *
4
+ * Elimina duplicação de lógica de resources/list e resources/read.
5
+ * Ambos entry points importam daqui.
6
+ *
7
+ * @since v5.1.0 — Task 1.5 do Roadmap de Melhorias MCP
8
+ * @updated v5.2.0 — Task A.2: Integração efetiva + suporte a skills e system-prompt dinâmico
9
+ */
10
+ import { listarEspecialistas, listarTemplates, listarGuias, lerEspecialista, lerTemplate, lerGuia, lerPrompt, } from "../utils/files.js";
11
+ import { buildSystemPrompt } from "../services/system-prompt.service.js";
12
+ import { ContentResolverService } from "../services/content-resolver.service.js";
13
+ /**
14
+ * Lista todos os resources disponíveis (especialistas, templates, guias, system-prompt).
15
+ * Opcionalmente inclui skill resources quando projectDir é fornecido.
16
+ */
17
+ export async function listResources(opts) {
18
+ const especialistas = await listarEspecialistas();
19
+ const templates = await listarTemplates();
20
+ const guias = await listarGuias();
21
+ const resources = [];
22
+ // v5.2: Skill resources (quando projectDir disponível e includeSkills=true)
23
+ if (opts?.includeSkills && opts?.projectDir) {
24
+ const contentResolver = new ContentResolverService(opts.projectDir);
25
+ const skills = await contentResolver.listAvailableSkills();
26
+ for (const skillName of skills) {
27
+ resources.push({
28
+ uri: `maestro://skills/${skillName}/SKILL.md`,
29
+ name: `Skill: ${skillName}`,
30
+ mimeType: "text/markdown",
31
+ });
32
+ const skillTemplates = await contentResolver.listSkillResources(skillName, "templates");
33
+ for (const t of skillTemplates) {
34
+ resources.push({
35
+ uri: `maestro://skills/${skillName}/templates/${t}`,
36
+ name: `${skillName} Template: ${t}`,
37
+ mimeType: "text/markdown",
38
+ });
39
+ }
40
+ const checklists = await contentResolver.listSkillResources(skillName, "checklists");
41
+ for (const c of checklists) {
42
+ resources.push({
43
+ uri: `maestro://skills/${skillName}/checklists/${c}`,
44
+ name: `${skillName} Checklist: ${c}`,
45
+ mimeType: "text/markdown",
46
+ });
47
+ }
48
+ }
49
+ }
50
+ // Legacy: especialistas, templates, guias
51
+ resources.push(...especialistas.map((e) => ({
52
+ uri: `maestro://especialista/${encodeURIComponent(e)}`,
53
+ name: `Especialista: ${e}`,
54
+ mimeType: "text/markdown",
55
+ description: `Especialista em ${e}`,
56
+ })), ...templates.map((t) => ({
57
+ uri: `maestro://template/${encodeURIComponent(t)}`,
58
+ name: `Template: ${t}`,
59
+ mimeType: "text/markdown",
60
+ description: `Template de ${t}`,
61
+ })), ...guias.map((g) => ({
62
+ uri: `maestro://guia/${encodeURIComponent(g)}`,
63
+ name: `Guia: ${g}`,
64
+ mimeType: "text/markdown",
65
+ description: `Guia de ${g}`,
66
+ })), {
67
+ uri: "maestro://system-prompt",
68
+ name: "System Prompt",
69
+ mimeType: "text/markdown",
70
+ description: "Instruções de comportamento para a IA",
71
+ });
72
+ return { resources };
73
+ }
74
+ /**
75
+ * Lê o conteúdo de um resource pelo URI.
76
+ */
77
+ export async function readResource(uri, opts) {
78
+ // v5.2: Skills como resources
79
+ if (uri.startsWith("maestro://skills/") && opts?.projectDir) {
80
+ const path = uri.replace("maestro://skills/", "");
81
+ const parts = path.split("/");
82
+ const skillName = parts[0];
83
+ const contentResolver = new ContentResolverService(opts.projectDir);
84
+ if (parts.length === 2 && parts[1] === "SKILL.md") {
85
+ const content = await contentResolver.readSkillFile(skillName, "SKILL.md");
86
+ if (!content)
87
+ throw new Error(`SKILL.md não encontrado: ${skillName}`);
88
+ return { contents: [{ uri, mimeType: "text/markdown", text: content }] };
89
+ }
90
+ if (parts.length === 3) {
91
+ const tipo = parts[1];
92
+ const arquivo = parts[2];
93
+ const content = await contentResolver.readSkillResource(skillName, tipo, arquivo);
94
+ if (!content)
95
+ throw new Error(`Resource não encontrado: ${uri}`);
96
+ return { contents: [{ uri, mimeType: "text/markdown", text: content }] };
97
+ }
98
+ }
99
+ // Especialistas
100
+ if (uri.startsWith("maestro://especialista/")) {
101
+ const nome = decodeURIComponent(uri.replace("maestro://especialista/", ""));
102
+ const conteudo = await lerEspecialista(nome);
103
+ return { contents: [{ uri, mimeType: "text/markdown", text: conteudo || `Especialista "${nome}" não encontrado.` }] };
104
+ }
105
+ // Templates
106
+ if (uri.startsWith("maestro://template/")) {
107
+ const nome = decodeURIComponent(uri.replace("maestro://template/", ""));
108
+ const conteudo = await lerTemplate(nome);
109
+ return { contents: [{ uri, mimeType: "text/markdown", text: conteudo || `Template "${nome}" não encontrado.` }] };
110
+ }
111
+ // Guias
112
+ if (uri.startsWith("maestro://guia/")) {
113
+ const nome = decodeURIComponent(uri.replace("maestro://guia/", ""));
114
+ const conteudo = await lerGuia(nome);
115
+ return { contents: [{ uri, mimeType: "text/markdown", text: conteudo || `Guia "${nome}" não encontrado.` }] };
116
+ }
117
+ // Prompts
118
+ if (uri.startsWith("maestro://prompt/")) {
119
+ const path = uri.replace("maestro://prompt/", "");
120
+ const [categoria, nome] = path.split("/");
121
+ const conteudo = await lerPrompt(decodeURIComponent(categoria), decodeURIComponent(nome));
122
+ return { contents: [{ uri, mimeType: "text/markdown", text: conteudo || "Prompt não encontrado." }] };
123
+ }
124
+ // v5.2: System Prompt dinâmico (integra system-prompt.service)
125
+ if (uri === "maestro://system-prompt") {
126
+ const conteudo = buildSystemPrompt();
127
+ return { contents: [{ uri, mimeType: "text/markdown", text: conteudo }] };
128
+ }
129
+ throw new Error(`Resource não encontrado: ${uri}`);
130
+ }
131
+ //# sourceMappingURL=shared-resource-handler.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"shared-resource-handler.js","sourceRoot":"","sources":["../../src/handlers/shared-resource-handler.ts"],"names":[],"mappings":"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"}