@maestro-ai/mcp-server 2.6.1 → 5.0.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 (153) hide show
  1. package/dist/content/.version.json +16 -0
  2. package/dist/data/project-templates.d.ts +37 -0
  3. package/dist/data/project-templates.d.ts.map +1 -0
  4. package/dist/data/project-templates.js +208 -0
  5. package/dist/data/project-templates.js.map +1 -0
  6. package/dist/errors/index.d.ts +84 -0
  7. package/dist/errors/index.d.ts.map +1 -0
  8. package/dist/errors/index.js +158 -0
  9. package/dist/errors/index.js.map +1 -0
  10. package/dist/flows/onboarding-orchestrator.d.ts.map +1 -1
  11. package/dist/flows/onboarding-orchestrator.js +126 -91
  12. package/dist/flows/onboarding-orchestrator.js.map +1 -1
  13. package/dist/gates/validator.d.ts +2 -1
  14. package/dist/gates/validator.d.ts.map +1 -1
  15. package/dist/gates/validator.js +33 -2
  16. package/dist/gates/validator.js.map +1 -1
  17. package/dist/index.js +19 -164
  18. package/dist/index.js.map +1 -1
  19. package/dist/middleware/flow-engine.middleware.d.ts +14 -0
  20. package/dist/middleware/flow-engine.middleware.d.ts.map +1 -0
  21. package/dist/middleware/flow-engine.middleware.js +51 -0
  22. package/dist/middleware/flow-engine.middleware.js.map +1 -0
  23. package/dist/middleware/index.d.ts +36 -0
  24. package/dist/middleware/index.d.ts.map +1 -0
  25. package/dist/middleware/index.js +45 -0
  26. package/dist/middleware/index.js.map +1 -0
  27. package/dist/middleware/persistence.middleware.d.ts +14 -0
  28. package/dist/middleware/persistence.middleware.d.ts.map +1 -0
  29. package/dist/middleware/persistence.middleware.js +55 -0
  30. package/dist/middleware/persistence.middleware.js.map +1 -0
  31. package/dist/middleware/skill-injection.middleware.d.ts +15 -0
  32. package/dist/middleware/skill-injection.middleware.d.ts.map +1 -0
  33. package/dist/middleware/skill-injection.middleware.js +63 -0
  34. package/dist/middleware/skill-injection.middleware.js.map +1 -0
  35. package/dist/middleware/state-loader.middleware.d.ts +13 -0
  36. package/dist/middleware/state-loader.middleware.d.ts.map +1 -0
  37. package/dist/middleware/state-loader.middleware.js +36 -0
  38. package/dist/middleware/state-loader.middleware.js.map +1 -0
  39. package/dist/router.d.ts +46 -0
  40. package/dist/router.d.ts.map +1 -0
  41. package/dist/router.js +441 -0
  42. package/dist/router.js.map +1 -0
  43. package/dist/services/content-resolver.service.d.ts +96 -0
  44. package/dist/services/content-resolver.service.d.ts.map +1 -0
  45. package/dist/services/content-resolver.service.js +280 -0
  46. package/dist/services/content-resolver.service.js.map +1 -0
  47. package/dist/services/flow-engine.d.ts +82 -0
  48. package/dist/services/flow-engine.d.ts.map +1 -0
  49. package/dist/services/flow-engine.js +270 -0
  50. package/dist/services/flow-engine.js.map +1 -0
  51. package/dist/services/onboarding.service.d.ts +20 -0
  52. package/dist/services/onboarding.service.d.ts.map +1 -0
  53. package/dist/services/onboarding.service.js +49 -0
  54. package/dist/services/onboarding.service.js.map +1 -0
  55. package/dist/services/skill-loader.service.d.ts +81 -0
  56. package/dist/services/skill-loader.service.d.ts.map +1 -0
  57. package/dist/services/skill-loader.service.js +321 -0
  58. package/dist/services/skill-loader.service.js.map +1 -0
  59. package/dist/services/specialist.service.d.ts +20 -0
  60. package/dist/services/specialist.service.d.ts.map +1 -0
  61. package/dist/services/specialist.service.js +115 -0
  62. package/dist/services/specialist.service.js.map +1 -0
  63. package/dist/services/state.service.d.ts +59 -0
  64. package/dist/services/state.service.d.ts.map +1 -0
  65. package/dist/services/state.service.js +131 -0
  66. package/dist/services/state.service.js.map +1 -0
  67. package/dist/stdio.js +329 -437
  68. package/dist/stdio.js.map +1 -1
  69. package/dist/tests/content-resolver.test.d.ts +5 -0
  70. package/dist/tests/content-resolver.test.d.ts.map +1 -0
  71. package/dist/tests/content-resolver.test.js +157 -0
  72. package/dist/tests/content-resolver.test.js.map +1 -0
  73. package/dist/tests/middleware.test.d.ts +5 -0
  74. package/dist/tests/middleware.test.d.ts.map +1 -0
  75. package/dist/tests/middleware.test.js +228 -0
  76. package/dist/tests/middleware.test.js.map +1 -0
  77. package/dist/tests/skill-loader.test.d.ts +5 -0
  78. package/dist/tests/skill-loader.test.d.ts.map +1 -0
  79. package/dist/tests/skill-loader.test.js +242 -0
  80. package/dist/tests/skill-loader.test.js.map +1 -0
  81. package/dist/tools/aprovar-gate.d.ts.map +1 -1
  82. package/dist/tools/aprovar-gate.js +35 -0
  83. package/dist/tools/aprovar-gate.js.map +1 -1
  84. package/dist/tools/brainstorm.d.ts.map +1 -1
  85. package/dist/tools/brainstorm.js +90 -49
  86. package/dist/tools/brainstorm.js.map +1 -1
  87. package/dist/tools/classificar.d.ts.map +1 -1
  88. package/dist/tools/classificar.js +20 -1
  89. package/dist/tools/classificar.js.map +1 -1
  90. package/dist/tools/confirmar-classificacao.d.ts.map +1 -1
  91. package/dist/tools/confirmar-classificacao.js +20 -1
  92. package/dist/tools/confirmar-classificacao.js.map +1 -1
  93. package/dist/tools/consolidated/analisar.d.ts +56 -0
  94. package/dist/tools/consolidated/analisar.d.ts.map +1 -0
  95. package/dist/tools/consolidated/analisar.js +96 -0
  96. package/dist/tools/consolidated/analisar.js.map +1 -0
  97. package/dist/tools/consolidated/avancar.d.ts +67 -0
  98. package/dist/tools/consolidated/avancar.d.ts.map +1 -0
  99. package/dist/tools/consolidated/avancar.js +132 -0
  100. package/dist/tools/consolidated/avancar.js.map +1 -0
  101. package/dist/tools/consolidated/checkpoint-tool.d.ts +66 -0
  102. package/dist/tools/consolidated/checkpoint-tool.d.ts.map +1 -0
  103. package/dist/tools/consolidated/checkpoint-tool.js +111 -0
  104. package/dist/tools/consolidated/checkpoint-tool.js.map +1 -0
  105. package/dist/tools/consolidated/validar.d.ts +63 -0
  106. package/dist/tools/consolidated/validar.d.ts.map +1 -0
  107. package/dist/tools/consolidated/validar.js +104 -0
  108. package/dist/tools/consolidated/validar.js.map +1 -0
  109. package/dist/tools/contexto.d.ts.map +1 -1
  110. package/dist/tools/contexto.js +18 -0
  111. package/dist/tools/contexto.js.map +1 -1
  112. package/dist/tools/discovery.d.ts +10 -10
  113. package/dist/tools/discovery.d.ts.map +1 -1
  114. package/dist/tools/discovery.js +82 -56
  115. package/dist/tools/discovery.js.map +1 -1
  116. package/dist/tools/iniciar-projeto.d.ts +48 -0
  117. package/dist/tools/iniciar-projeto.d.ts.map +1 -1
  118. package/dist/tools/iniciar-projeto.js +234 -45
  119. package/dist/tools/iniciar-projeto.js.map +1 -1
  120. package/dist/tools/maestro-tool.d.ts +51 -0
  121. package/dist/tools/maestro-tool.d.ts.map +1 -0
  122. package/dist/tools/maestro-tool.js +224 -0
  123. package/dist/tools/maestro-tool.js.map +1 -0
  124. package/dist/tools/prd-writer.d.ts +1 -1
  125. package/dist/tools/prd-writer.d.ts.map +1 -1
  126. package/dist/tools/prd-writer.js +138 -2
  127. package/dist/tools/prd-writer.js.map +1 -1
  128. package/dist/tools/proximo.d.ts.map +1 -1
  129. package/dist/tools/proximo.js +22 -16
  130. package/dist/tools/proximo.js.map +1 -1
  131. package/dist/tools/salvar.d.ts.map +1 -1
  132. package/dist/tools/salvar.js +13 -0
  133. package/dist/tools/salvar.js.map +1 -1
  134. package/dist/tools/setup-inicial.d.ts.map +1 -1
  135. package/dist/tools/setup-inicial.js +12 -0
  136. package/dist/tools/setup-inicial.js.map +1 -1
  137. package/dist/tools/status.d.ts.map +1 -1
  138. package/dist/tools/status.js +6 -0
  139. package/dist/tools/status.js.map +1 -1
  140. package/dist/tools/validar-gate.d.ts.map +1 -1
  141. package/dist/tools/validar-gate.js +25 -0
  142. package/dist/tools/validar-gate.js.map +1 -1
  143. package/dist/types/index.d.ts +20 -1
  144. package/dist/types/index.d.ts.map +1 -1
  145. package/dist/types/index.js.map +1 -1
  146. package/dist/types/response.d.ts +49 -0
  147. package/dist/types/response.d.ts.map +1 -1
  148. package/dist/types/response.js.map +1 -1
  149. package/dist/utils/smart-defaults.d.ts +56 -0
  150. package/dist/utils/smart-defaults.d.ts.map +1 -0
  151. package/dist/utils/smart-defaults.js +113 -0
  152. package/dist/utils/smart-defaults.js.map +1 -0
  153. package/package.json +1 -1
@@ -0,0 +1,96 @@
1
+ /**
2
+ * ContentResolverService — Resolução Unificada de Conteúdo
3
+ *
4
+ * Única fonte de verdade para resolver onde ler conteúdo:
5
+ * 1. Projeto local (.maestro/content/) — Plano B (prioridade)
6
+ * 2. Servidor (content/) — Plano A (fallback)
7
+ *
8
+ * Cache em memória para evitar I/O repetido.
9
+ */
10
+ export declare class ContentResolverService {
11
+ private diretorio;
12
+ private projectContentRoot;
13
+ private serverContentRoot;
14
+ private cache;
15
+ constructor(diretorio: string);
16
+ /**
17
+ * Resolve o diretório raiz de conteúdo do servidor.
18
+ * Tenta múltiplos caminhos relativos ao módulo.
19
+ */
20
+ private resolveServerContentRoot;
21
+ /**
22
+ * Retorna o diretório raiz de conteúdo ativo.
23
+ * Prioriza projeto local, fallback para servidor.
24
+ */
25
+ getContentRoot(): string;
26
+ /**
27
+ * Verifica se o projeto tem conteúdo local instalado (.maestro/content)
28
+ */
29
+ hasProjectContent(): boolean;
30
+ /**
31
+ * Retorna o diretório raiz do conteúdo do servidor (sempre disponível)
32
+ */
33
+ getServerContentRoot(): string;
34
+ /**
35
+ * Resolve o diretório de uma skill específica.
36
+ * Prioriza projeto local → servidor.
37
+ * Retorna null se não encontrada em nenhum.
38
+ */
39
+ getSkillDir(skillName: string): string | null;
40
+ /**
41
+ * Lê conteúdo de um arquivo de skill.
42
+ * Prioriza projeto local → servidor.
43
+ * Retorna null se não encontrado.
44
+ */
45
+ readSkillFile(skillName: string, fileName: string): Promise<string | null>;
46
+ /**
47
+ * Lista recursos disponíveis de uma skill (templates, examples, checklists, reference).
48
+ */
49
+ listSkillResources(skillName: string, tipo: "templates" | "examples" | "checklists" | "reference"): Promise<string[]>;
50
+ /**
51
+ * Lê recurso específico de uma skill.
52
+ */
53
+ readSkillResource(skillName: string, tipo: "templates" | "examples" | "checklists" | "reference", arquivo: string): Promise<string | null>;
54
+ /**
55
+ * Lê o primeiro arquivo de template encontrado para uma skill.
56
+ * Retorna null se nenhum template disponível.
57
+ */
58
+ readFirstTemplate(skillName: string): Promise<string | null>;
59
+ /**
60
+ * Lê o primeiro arquivo de checklist encontrado para uma skill.
61
+ * Retorna null se nenhum checklist disponível.
62
+ */
63
+ readFirstChecklist(skillName: string): Promise<string | null>;
64
+ /**
65
+ * Lista todas as skills disponíveis (pastas dentro de skills/).
66
+ */
67
+ listAvailableSkills(): Promise<string[]>;
68
+ private getFromCache;
69
+ private setCache;
70
+ /**
71
+ * Limpa o cache (útil para testes ou após injeção de conteúdo).
72
+ */
73
+ clearCache(): void;
74
+ /**
75
+ * Lê o manifesto de versão do conteúdo (.version.json).
76
+ * Retorna null se não encontrado.
77
+ */
78
+ readVersionManifest(source?: "project" | "server"): Promise<Record<string, unknown> | null>;
79
+ /**
80
+ * Verifica se o conteúdo local está desatualizado comparado ao servidor.
81
+ * Retorna objeto com informações de compatibilidade.
82
+ */
83
+ checkVersionCompatibility(): Promise<{
84
+ hasProjectContent: boolean;
85
+ projectVersion: string | null;
86
+ serverVersion: string | null;
87
+ isCompatible: boolean;
88
+ needsUpdate: boolean;
89
+ message: string;
90
+ }>;
91
+ }
92
+ /**
93
+ * Factory function para criar ContentResolverService.
94
+ */
95
+ export declare function createContentResolver(diretorio: string): ContentResolverService;
96
+ //# sourceMappingURL=content-resolver.service.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"content-resolver.service.d.ts","sourceRoot":"","sources":["../../src/services/content-resolver.service.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAgBH,qBAAa,sBAAsB;IAC/B,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,kBAAkB,CAAS;IACnC,OAAO,CAAC,iBAAiB,CAAS;IAClC,OAAO,CAAC,KAAK,CAAsC;gBAEvC,SAAS,EAAE,MAAM;IAM7B;;;OAGG;IACH,OAAO,CAAC,wBAAwB;IAkBhC;;;OAGG;IACH,cAAc,IAAI,MAAM;IAOxB;;OAEG;IACH,iBAAiB,IAAI,OAAO;IAI5B;;OAEG;IACH,oBAAoB,IAAI,MAAM;IAI9B;;;;OAIG;IACH,WAAW,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI;IAgB7C;;;;OAIG;IACG,aAAa,CAAC,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;IAmBhF;;OAEG;IACG,kBAAkB,CACpB,SAAS,EAAE,MAAM,EACjB,IAAI,EAAE,WAAW,GAAG,UAAU,GAAG,YAAY,GAAG,WAAW,GAC5D,OAAO,CAAC,MAAM,EAAE,CAAC;IAcpB;;OAEG;IACG,iBAAiB,CACnB,SAAS,EAAE,MAAM,EACjB,IAAI,EAAE,WAAW,GAAG,UAAU,GAAG,YAAY,GAAG,WAAW,EAC3D,OAAO,EAAE,MAAM,GAChB,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;IAmBzB;;;OAGG;IACG,iBAAiB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;IAMlE;;;OAGG;IACG,kBAAkB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;IAMnE;;OAEG;IACG,mBAAmB,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;IAiB9C,OAAO,CAAC,YAAY;IAUpB,OAAO,CAAC,QAAQ;IAIhB;;OAEG;IACH,UAAU,IAAI,IAAI;IAMlB;;;OAGG;IACG,mBAAmB,CAAC,MAAM,GAAE,SAAS,GAAG,QAAoB,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC;IAa5G;;;OAGG;IACG,yBAAyB,IAAI,OAAO,CAAC;QACvC,iBAAiB,EAAE,OAAO,CAAC;QAC3B,cAAc,EAAE,MAAM,GAAG,IAAI,CAAC;QAC9B,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;QAC7B,YAAY,EAAE,OAAO,CAAC;QACtB,WAAW,EAAE,OAAO,CAAC;QACrB,OAAO,EAAE,MAAM,CAAC;KACnB,CAAC;CAgDL;AAED;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,SAAS,EAAE,MAAM,GAAG,sBAAsB,CAE/E"}
@@ -0,0 +1,280 @@
1
+ /**
2
+ * ContentResolverService — Resolução Unificada de Conteúdo
3
+ *
4
+ * Única fonte de verdade para resolver onde ler conteúdo:
5
+ * 1. Projeto local (.maestro/content/) — Plano B (prioridade)
6
+ * 2. Servidor (content/) — Plano A (fallback)
7
+ *
8
+ * Cache em memória para evitar I/O repetido.
9
+ */
10
+ import { readFile, readdir } from "fs/promises";
11
+ import { existsSync } from "fs";
12
+ import { join, dirname } from "path";
13
+ import { fileURLToPath } from "url";
14
+ const __dirname = dirname(fileURLToPath(import.meta.url));
15
+ const CACHE_TTL_MS = 5 * 60 * 1000; // 5 minutos
16
+ export class ContentResolverService {
17
+ diretorio;
18
+ projectContentRoot;
19
+ serverContentRoot;
20
+ cache = new Map();
21
+ constructor(diretorio) {
22
+ this.diretorio = diretorio;
23
+ this.projectContentRoot = join(diretorio, ".maestro", "content");
24
+ this.serverContentRoot = this.resolveServerContentRoot();
25
+ }
26
+ /**
27
+ * Resolve o diretório raiz de conteúdo do servidor.
28
+ * Tenta múltiplos caminhos relativos ao módulo.
29
+ */
30
+ resolveServerContentRoot() {
31
+ const possiblePaths = [
32
+ join(__dirname, "..", "..", "..", "content"),
33
+ join(__dirname, "..", "..", "content"),
34
+ join(__dirname, "..", "content"),
35
+ join(process.cwd(), "content"),
36
+ ];
37
+ for (const path of possiblePaths) {
38
+ if (existsSync(path)) {
39
+ return path;
40
+ }
41
+ }
42
+ // Fallback: retorna o path mais provável mesmo sem existir
43
+ return possiblePaths[0];
44
+ }
45
+ /**
46
+ * Retorna o diretório raiz de conteúdo ativo.
47
+ * Prioriza projeto local, fallback para servidor.
48
+ */
49
+ getContentRoot() {
50
+ if (this.hasProjectContent()) {
51
+ return this.projectContentRoot;
52
+ }
53
+ return this.serverContentRoot;
54
+ }
55
+ /**
56
+ * Verifica se o projeto tem conteúdo local instalado (.maestro/content)
57
+ */
58
+ hasProjectContent() {
59
+ return existsSync(this.projectContentRoot);
60
+ }
61
+ /**
62
+ * Retorna o diretório raiz do conteúdo do servidor (sempre disponível)
63
+ */
64
+ getServerContentRoot() {
65
+ return this.serverContentRoot;
66
+ }
67
+ /**
68
+ * Resolve o diretório de uma skill específica.
69
+ * Prioriza projeto local → servidor.
70
+ * Retorna null se não encontrada em nenhum.
71
+ */
72
+ getSkillDir(skillName) {
73
+ // 1. Tentar no projeto local
74
+ const projectSkillDir = join(this.projectContentRoot, "skills", skillName);
75
+ if (existsSync(projectSkillDir)) {
76
+ return projectSkillDir;
77
+ }
78
+ // 2. Tentar no servidor
79
+ const serverSkillDir = join(this.serverContentRoot, "skills", skillName);
80
+ if (existsSync(serverSkillDir)) {
81
+ return serverSkillDir;
82
+ }
83
+ return null;
84
+ }
85
+ /**
86
+ * Lê conteúdo de um arquivo de skill.
87
+ * Prioriza projeto local → servidor.
88
+ * Retorna null se não encontrado.
89
+ */
90
+ async readSkillFile(skillName, fileName) {
91
+ const cacheKey = `skill:${skillName}:${fileName}`;
92
+ const cached = this.getFromCache(cacheKey);
93
+ if (cached !== null)
94
+ return cached;
95
+ const skillDir = this.getSkillDir(skillName);
96
+ if (!skillDir)
97
+ return null;
98
+ const filePath = join(skillDir, fileName);
99
+ try {
100
+ if (!existsSync(filePath))
101
+ return null;
102
+ const content = await readFile(filePath, "utf-8");
103
+ this.setCache(cacheKey, content);
104
+ return content;
105
+ }
106
+ catch {
107
+ return null;
108
+ }
109
+ }
110
+ /**
111
+ * Lista recursos disponíveis de uma skill (templates, examples, checklists, reference).
112
+ */
113
+ async listSkillResources(skillName, tipo) {
114
+ const skillDir = this.getSkillDir(skillName);
115
+ if (!skillDir)
116
+ return [];
117
+ const resourceDir = join(skillDir, "resources", tipo);
118
+ try {
119
+ if (!existsSync(resourceDir))
120
+ return [];
121
+ const entries = await readdir(resourceDir);
122
+ return entries.filter(e => e.endsWith(".md"));
123
+ }
124
+ catch {
125
+ return [];
126
+ }
127
+ }
128
+ /**
129
+ * Lê recurso específico de uma skill.
130
+ */
131
+ async readSkillResource(skillName, tipo, arquivo) {
132
+ const cacheKey = `resource:${skillName}:${tipo}:${arquivo}`;
133
+ const cached = this.getFromCache(cacheKey);
134
+ if (cached !== null)
135
+ return cached;
136
+ const skillDir = this.getSkillDir(skillName);
137
+ if (!skillDir)
138
+ return null;
139
+ const filePath = join(skillDir, "resources", tipo, arquivo);
140
+ try {
141
+ if (!existsSync(filePath))
142
+ return null;
143
+ const content = await readFile(filePath, "utf-8");
144
+ this.setCache(cacheKey, content);
145
+ return content;
146
+ }
147
+ catch {
148
+ return null;
149
+ }
150
+ }
151
+ /**
152
+ * Lê o primeiro arquivo de template encontrado para uma skill.
153
+ * Retorna null se nenhum template disponível.
154
+ */
155
+ async readFirstTemplate(skillName) {
156
+ const templates = await this.listSkillResources(skillName, "templates");
157
+ if (templates.length === 0)
158
+ return null;
159
+ return this.readSkillResource(skillName, "templates", templates[0]);
160
+ }
161
+ /**
162
+ * Lê o primeiro arquivo de checklist encontrado para uma skill.
163
+ * Retorna null se nenhum checklist disponível.
164
+ */
165
+ async readFirstChecklist(skillName) {
166
+ const checklists = await this.listSkillResources(skillName, "checklists");
167
+ if (checklists.length === 0)
168
+ return null;
169
+ return this.readSkillResource(skillName, "checklists", checklists[0]);
170
+ }
171
+ /**
172
+ * Lista todas as skills disponíveis (pastas dentro de skills/).
173
+ */
174
+ async listAvailableSkills() {
175
+ const contentRoot = this.getContentRoot();
176
+ const skillsDir = join(contentRoot, "skills");
177
+ try {
178
+ if (!existsSync(skillsDir))
179
+ return [];
180
+ const entries = await readdir(skillsDir, { withFileTypes: true });
181
+ return entries
182
+ .filter(e => e.isDirectory() && e.name.startsWith("specialist-"))
183
+ .map(e => e.name);
184
+ }
185
+ catch {
186
+ return [];
187
+ }
188
+ }
189
+ // === Cache ===
190
+ getFromCache(key) {
191
+ const entry = this.cache.get(key);
192
+ if (!entry)
193
+ return null;
194
+ if (Date.now() - entry.timestamp > CACHE_TTL_MS) {
195
+ this.cache.delete(key);
196
+ return null;
197
+ }
198
+ return entry.content;
199
+ }
200
+ setCache(key, content) {
201
+ this.cache.set(key, { content, timestamp: Date.now() });
202
+ }
203
+ /**
204
+ * Limpa o cache (útil para testes ou após injeção de conteúdo).
205
+ */
206
+ clearCache() {
207
+ this.cache.clear();
208
+ }
209
+ // === Version Management (v5: Sprint D.3) ===
210
+ /**
211
+ * Lê o manifesto de versão do conteúdo (.version.json).
212
+ * Retorna null se não encontrado.
213
+ */
214
+ async readVersionManifest(source = "project") {
215
+ const root = source === "project" ? this.projectContentRoot : this.serverContentRoot;
216
+ const versionPath = join(root, ".version.json");
217
+ try {
218
+ if (!existsSync(versionPath))
219
+ return null;
220
+ const content = await readFile(versionPath, "utf-8");
221
+ return JSON.parse(content);
222
+ }
223
+ catch {
224
+ return null;
225
+ }
226
+ }
227
+ /**
228
+ * Verifica se o conteúdo local está desatualizado comparado ao servidor.
229
+ * Retorna objeto com informações de compatibilidade.
230
+ */
231
+ async checkVersionCompatibility() {
232
+ const projectManifest = await this.readVersionManifest("project");
233
+ const serverManifest = await this.readVersionManifest("server");
234
+ const projectVersion = projectManifest?.version;
235
+ const serverVersion = serverManifest?.version;
236
+ const hasProjectContent = this.hasProjectContent();
237
+ if (!hasProjectContent) {
238
+ return {
239
+ hasProjectContent: false,
240
+ projectVersion: null,
241
+ serverVersion,
242
+ isCompatible: true,
243
+ needsUpdate: false,
244
+ message: "Usando conteúdo do servidor (builtin).",
245
+ };
246
+ }
247
+ if (!projectVersion || !serverVersion) {
248
+ return {
249
+ hasProjectContent: true,
250
+ projectVersion,
251
+ serverVersion,
252
+ isCompatible: true,
253
+ needsUpdate: false,
254
+ message: "Sem informação de versão disponível.",
255
+ };
256
+ }
257
+ // Comparar versões major.minor.patch
258
+ const [pMajor, pMinor] = projectVersion.split(".").map(Number);
259
+ const [sMajor, sMinor] = serverVersion.split(".").map(Number);
260
+ const isCompatible = pMajor === sMajor;
261
+ const needsUpdate = pMinor < sMinor || (pMajor < sMajor);
262
+ return {
263
+ hasProjectContent: true,
264
+ projectVersion,
265
+ serverVersion,
266
+ isCompatible,
267
+ needsUpdate,
268
+ message: needsUpdate
269
+ ? `Conteúdo local desatualizado (${projectVersion} vs ${serverVersion}). Execute 'npx @maestro-ai/cli' para atualizar.`
270
+ : `Conteúdo local atualizado (${projectVersion}).`,
271
+ };
272
+ }
273
+ }
274
+ /**
275
+ * Factory function para criar ContentResolverService.
276
+ */
277
+ export function createContentResolver(diretorio) {
278
+ return new ContentResolverService(diretorio);
279
+ }
280
+ //# sourceMappingURL=content-resolver.service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"content-resolver.service.js","sourceRoot":"","sources":["../../src/services/content-resolver.service.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,82 @@
1
+ /**
2
+ * Flow Engine — State Machine para Fluxos do Maestro
3
+ *
4
+ * Codifica transições de fase como state machine declarativa.
5
+ * Qualquer tool pode perguntar "qual o próximo passo?" ao flow engine.
6
+ * Gera next_action automaticamente baseado no estado atual.
7
+ */
8
+ import type { EstadoProjeto } from "../types/index.js";
9
+ import type { NextAction, FlowProgress, SpecialistPersona } from "../types/response.js";
10
+ /**
11
+ * Estado do fluxo extraído do estado do projeto
12
+ */
13
+ export interface FlowState {
14
+ hasGlobalConfig: boolean;
15
+ hasProject: boolean;
16
+ currentPhase: string;
17
+ faseNumero: number;
18
+ totalFases: number;
19
+ gatesValidados: number[];
20
+ mode: 'economy' | 'balanced' | 'quality';
21
+ discoveryStatus: string;
22
+ brainstormStatus: string;
23
+ prdStatus: string;
24
+ aguardandoAprovacao: boolean;
25
+ aguardandoClassificacao: boolean;
26
+ wantsBrainstorm: boolean;
27
+ nivel: string;
28
+ usarStitch: boolean;
29
+ diretorio: string;
30
+ }
31
+ /**
32
+ * Resultado do flow engine: próximo passo recomendado
33
+ */
34
+ export interface FlowStep {
35
+ phase: string;
36
+ tool: string;
37
+ description: string;
38
+ args_template: Record<string, unknown>;
39
+ requires_user_input: boolean;
40
+ user_prompt?: string;
41
+ auto_execute?: boolean;
42
+ specialist?: SpecialistPersona | null;
43
+ }
44
+ /**
45
+ * Transição declarativa no flow
46
+ */
47
+ interface FlowTransition {
48
+ from: string;
49
+ to: string;
50
+ tool: string;
51
+ description: string;
52
+ condition?: (state: FlowState) => boolean;
53
+ requires_user_input: boolean;
54
+ user_prompt?: string;
55
+ auto_execute?: boolean;
56
+ }
57
+ /**
58
+ * Extrai estado do fluxo a partir do estado do projeto
59
+ */
60
+ export declare function getFlowState(estado: EstadoProjeto, diretorio: string): FlowState;
61
+ /**
62
+ * Obtém o próximo passo recomendado pelo flow engine
63
+ */
64
+ export declare function getNextStep(estado: EstadoProjeto, diretorio: string): FlowStep;
65
+ /**
66
+ * Converte FlowStep em NextAction para resposta de tool
67
+ */
68
+ export declare function flowStepToNextAction(step: FlowStep): NextAction;
69
+ /**
70
+ * Calcula progresso atual do fluxo
71
+ */
72
+ export declare function getFlowProgress(estado: EstadoProjeto): FlowProgress;
73
+ /**
74
+ * Verifica se o projeto está no fluxo de onboarding
75
+ */
76
+ export declare function isInOnboarding(estado: EstadoProjeto): boolean;
77
+ /**
78
+ * Lista todas as transições disponíveis a partir do estado atual
79
+ */
80
+ export declare function getAvailableTransitions(estado: EstadoProjeto, diretorio: string): FlowTransition[];
81
+ export {};
82
+ //# sourceMappingURL=flow-engine.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"flow-engine.d.ts","sourceRoot":"","sources":["../../src/services/flow-engine.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AACvD,OAAO,KAAK,EAAE,UAAU,EAAE,YAAY,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AAIxF;;GAEG;AACH,MAAM,WAAW,SAAS;IACtB,eAAe,EAAE,OAAO,CAAC;IACzB,UAAU,EAAE,OAAO,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,cAAc,EAAE,MAAM,EAAE,CAAC;IACzB,IAAI,EAAE,SAAS,GAAG,UAAU,GAAG,SAAS,CAAC;IACzC,eAAe,EAAE,MAAM,CAAC;IACxB,gBAAgB,EAAE,MAAM,CAAC;IACzB,SAAS,EAAE,MAAM,CAAC;IAClB,mBAAmB,EAAE,OAAO,CAAC;IAC7B,uBAAuB,EAAE,OAAO,CAAC;IACjC,eAAe,EAAE,OAAO,CAAC;IACzB,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,OAAO,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;CACrB;AAED;;GAEG;AACH,MAAM,WAAW,QAAQ;IACrB,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,aAAa,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACvC,mBAAmB,EAAE,OAAO,CAAC;IAC7B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,UAAU,CAAC,EAAE,iBAAiB,GAAG,IAAI,CAAC;CACzC;AAED;;GAEG;AACH,UAAU,cAAc;IACpB,IAAI,EAAE,MAAM,CAAC;IACb,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,CAAC,EAAE,CAAC,KAAK,EAAE,SAAS,KAAK,OAAO,CAAC;IAC1C,mBAAmB,EAAE,OAAO,CAAC;IAC7B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,YAAY,CAAC,EAAE,OAAO,CAAC;CAC1B;AAyID;;GAEG;AACH,wBAAgB,YAAY,CAAC,MAAM,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,GAAG,SAAS,CAoBhF;AAyBD;;GAEG;AACH,wBAAgB,WAAW,CAAC,MAAM,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,GAAG,QAAQ,CAsC9E;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,QAAQ,GAAG,UAAU,CAS/D;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,MAAM,EAAE,aAAa,GAAG,YAAY,CAanE;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,MAAM,EAAE,aAAa,GAAG,OAAO,CAQ7D;AAED;;GAEG;AACH,wBAAgB,uBAAuB,CAAC,MAAM,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,GAAG,cAAc,EAAE,CAMlG"}