@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.
- package/dist/content/.version.json +16 -0
- package/dist/data/project-templates.d.ts +37 -0
- package/dist/data/project-templates.d.ts.map +1 -0
- package/dist/data/project-templates.js +208 -0
- package/dist/data/project-templates.js.map +1 -0
- package/dist/errors/index.d.ts +84 -0
- package/dist/errors/index.d.ts.map +1 -0
- package/dist/errors/index.js +158 -0
- package/dist/errors/index.js.map +1 -0
- package/dist/flows/onboarding-orchestrator.d.ts.map +1 -1
- package/dist/flows/onboarding-orchestrator.js +126 -91
- package/dist/flows/onboarding-orchestrator.js.map +1 -1
- package/dist/gates/validator.d.ts +2 -1
- package/dist/gates/validator.d.ts.map +1 -1
- package/dist/gates/validator.js +33 -2
- package/dist/gates/validator.js.map +1 -1
- package/dist/index.js +19 -164
- package/dist/index.js.map +1 -1
- package/dist/middleware/flow-engine.middleware.d.ts +14 -0
- package/dist/middleware/flow-engine.middleware.d.ts.map +1 -0
- package/dist/middleware/flow-engine.middleware.js +51 -0
- package/dist/middleware/flow-engine.middleware.js.map +1 -0
- package/dist/middleware/index.d.ts +36 -0
- package/dist/middleware/index.d.ts.map +1 -0
- package/dist/middleware/index.js +45 -0
- package/dist/middleware/index.js.map +1 -0
- package/dist/middleware/persistence.middleware.d.ts +14 -0
- package/dist/middleware/persistence.middleware.d.ts.map +1 -0
- package/dist/middleware/persistence.middleware.js +55 -0
- package/dist/middleware/persistence.middleware.js.map +1 -0
- package/dist/middleware/skill-injection.middleware.d.ts +15 -0
- package/dist/middleware/skill-injection.middleware.d.ts.map +1 -0
- package/dist/middleware/skill-injection.middleware.js +63 -0
- package/dist/middleware/skill-injection.middleware.js.map +1 -0
- package/dist/middleware/state-loader.middleware.d.ts +13 -0
- package/dist/middleware/state-loader.middleware.d.ts.map +1 -0
- package/dist/middleware/state-loader.middleware.js +36 -0
- package/dist/middleware/state-loader.middleware.js.map +1 -0
- package/dist/router.d.ts +46 -0
- package/dist/router.d.ts.map +1 -0
- package/dist/router.js +441 -0
- package/dist/router.js.map +1 -0
- package/dist/services/content-resolver.service.d.ts +96 -0
- package/dist/services/content-resolver.service.d.ts.map +1 -0
- package/dist/services/content-resolver.service.js +280 -0
- package/dist/services/content-resolver.service.js.map +1 -0
- package/dist/services/flow-engine.d.ts +82 -0
- package/dist/services/flow-engine.d.ts.map +1 -0
- package/dist/services/flow-engine.js +270 -0
- package/dist/services/flow-engine.js.map +1 -0
- package/dist/services/onboarding.service.d.ts +20 -0
- package/dist/services/onboarding.service.d.ts.map +1 -0
- package/dist/services/onboarding.service.js +49 -0
- package/dist/services/onboarding.service.js.map +1 -0
- package/dist/services/skill-loader.service.d.ts +81 -0
- package/dist/services/skill-loader.service.d.ts.map +1 -0
- package/dist/services/skill-loader.service.js +321 -0
- package/dist/services/skill-loader.service.js.map +1 -0
- package/dist/services/specialist.service.d.ts +20 -0
- package/dist/services/specialist.service.d.ts.map +1 -0
- package/dist/services/specialist.service.js +115 -0
- package/dist/services/specialist.service.js.map +1 -0
- package/dist/services/state.service.d.ts +59 -0
- package/dist/services/state.service.d.ts.map +1 -0
- package/dist/services/state.service.js +131 -0
- package/dist/services/state.service.js.map +1 -0
- package/dist/stdio.js +329 -437
- package/dist/stdio.js.map +1 -1
- package/dist/tests/content-resolver.test.d.ts +5 -0
- package/dist/tests/content-resolver.test.d.ts.map +1 -0
- package/dist/tests/content-resolver.test.js +157 -0
- package/dist/tests/content-resolver.test.js.map +1 -0
- package/dist/tests/middleware.test.d.ts +5 -0
- package/dist/tests/middleware.test.d.ts.map +1 -0
- package/dist/tests/middleware.test.js +228 -0
- package/dist/tests/middleware.test.js.map +1 -0
- package/dist/tests/skill-loader.test.d.ts +5 -0
- package/dist/tests/skill-loader.test.d.ts.map +1 -0
- package/dist/tests/skill-loader.test.js +242 -0
- package/dist/tests/skill-loader.test.js.map +1 -0
- package/dist/tools/aprovar-gate.d.ts.map +1 -1
- package/dist/tools/aprovar-gate.js +35 -0
- package/dist/tools/aprovar-gate.js.map +1 -1
- package/dist/tools/brainstorm.d.ts.map +1 -1
- package/dist/tools/brainstorm.js +90 -49
- package/dist/tools/brainstorm.js.map +1 -1
- package/dist/tools/classificar.d.ts.map +1 -1
- package/dist/tools/classificar.js +20 -1
- package/dist/tools/classificar.js.map +1 -1
- package/dist/tools/confirmar-classificacao.d.ts.map +1 -1
- package/dist/tools/confirmar-classificacao.js +20 -1
- package/dist/tools/confirmar-classificacao.js.map +1 -1
- package/dist/tools/consolidated/analisar.d.ts +56 -0
- package/dist/tools/consolidated/analisar.d.ts.map +1 -0
- package/dist/tools/consolidated/analisar.js +96 -0
- package/dist/tools/consolidated/analisar.js.map +1 -0
- package/dist/tools/consolidated/avancar.d.ts +67 -0
- package/dist/tools/consolidated/avancar.d.ts.map +1 -0
- package/dist/tools/consolidated/avancar.js +132 -0
- package/dist/tools/consolidated/avancar.js.map +1 -0
- package/dist/tools/consolidated/checkpoint-tool.d.ts +66 -0
- package/dist/tools/consolidated/checkpoint-tool.d.ts.map +1 -0
- package/dist/tools/consolidated/checkpoint-tool.js +111 -0
- package/dist/tools/consolidated/checkpoint-tool.js.map +1 -0
- package/dist/tools/consolidated/validar.d.ts +63 -0
- package/dist/tools/consolidated/validar.d.ts.map +1 -0
- package/dist/tools/consolidated/validar.js +104 -0
- package/dist/tools/consolidated/validar.js.map +1 -0
- package/dist/tools/contexto.d.ts.map +1 -1
- package/dist/tools/contexto.js +18 -0
- package/dist/tools/contexto.js.map +1 -1
- package/dist/tools/discovery.d.ts +10 -10
- package/dist/tools/discovery.d.ts.map +1 -1
- package/dist/tools/discovery.js +82 -56
- package/dist/tools/discovery.js.map +1 -1
- package/dist/tools/iniciar-projeto.d.ts +48 -0
- package/dist/tools/iniciar-projeto.d.ts.map +1 -1
- package/dist/tools/iniciar-projeto.js +234 -45
- package/dist/tools/iniciar-projeto.js.map +1 -1
- package/dist/tools/maestro-tool.d.ts +51 -0
- package/dist/tools/maestro-tool.d.ts.map +1 -0
- package/dist/tools/maestro-tool.js +224 -0
- package/dist/tools/maestro-tool.js.map +1 -0
- package/dist/tools/prd-writer.d.ts +1 -1
- package/dist/tools/prd-writer.d.ts.map +1 -1
- package/dist/tools/prd-writer.js +138 -2
- package/dist/tools/prd-writer.js.map +1 -1
- package/dist/tools/proximo.d.ts.map +1 -1
- package/dist/tools/proximo.js +22 -16
- package/dist/tools/proximo.js.map +1 -1
- package/dist/tools/salvar.d.ts.map +1 -1
- package/dist/tools/salvar.js +13 -0
- package/dist/tools/salvar.js.map +1 -1
- package/dist/tools/setup-inicial.d.ts.map +1 -1
- package/dist/tools/setup-inicial.js +12 -0
- package/dist/tools/setup-inicial.js.map +1 -1
- package/dist/tools/status.d.ts.map +1 -1
- package/dist/tools/status.js +6 -0
- package/dist/tools/status.js.map +1 -1
- package/dist/tools/validar-gate.d.ts.map +1 -1
- package/dist/tools/validar-gate.js +25 -0
- package/dist/tools/validar-gate.js.map +1 -1
- package/dist/types/index.d.ts +20 -1
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/index.js.map +1 -1
- package/dist/types/response.d.ts +49 -0
- package/dist/types/response.d.ts.map +1 -1
- package/dist/types/response.js.map +1 -1
- package/dist/utils/smart-defaults.d.ts +56 -0
- package/dist/utils/smart-defaults.d.ts.map +1 -0
- package/dist/utils/smart-defaults.js +113 -0
- package/dist/utils/smart-defaults.js.map +1 -0
- 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"}
|