@maestro-ai/mcp-server 1.0.1 → 1.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.
- package/dist/adapters/skill-adapter.d.ts +57 -0
- package/dist/adapters/skill-adapter.d.ts.map +1 -0
- package/dist/adapters/skill-adapter.js +272 -0
- package/dist/adapters/skill-adapter.js.map +1 -0
- package/dist/index.js +4 -4
- package/dist/index.js.map +1 -1
- package/dist/resources/index.d.ts.map +1 -1
- package/dist/resources/index.js +9 -9
- package/dist/resources/index.js.map +1 -1
- package/dist/stdio.js +5 -1
- package/dist/stdio.js.map +1 -1
- package/dist/tools/carregar-projeto.d.ts.map +1 -1
- package/dist/tools/carregar-projeto.js +4 -29
- package/dist/tools/carregar-projeto.js.map +1 -1
- package/dist/tools/iniciar-projeto.d.ts +12 -0
- package/dist/tools/iniciar-projeto.d.ts.map +1 -1
- package/dist/tools/iniciar-projeto.js +35 -112
- package/dist/tools/iniciar-projeto.js.map +1 -1
- package/dist/tools/proximo.d.ts.map +1 -1
- package/dist/tools/proximo.js +2 -30
- package/dist/tools/proximo.js.map +1 -1
- package/dist/tools/status.d.ts.map +1 -1
- package/dist/tools/status.js +4 -33
- package/dist/tools/status.js.map +1 -1
- package/dist/utils/content-injector.d.ts +1 -0
- package/dist/utils/content-injector.d.ts.map +1 -1
- package/dist/utils/content-injector.js +122 -2
- package/dist/utils/content-injector.js.map +1 -1
- package/dist/utils/files.d.ts +16 -16
- package/dist/utils/files.d.ts.map +1 -1
- package/dist/utils/files.js +59 -115
- package/dist/utils/files.js.map +1 -1
- package/package.json +1 -1
|
@@ -2,6 +2,8 @@ import { cp, mkdir, readdir } from "fs/promises";
|
|
|
2
2
|
import { existsSync, statSync } from "fs";
|
|
3
3
|
import { join, dirname } from "path";
|
|
4
4
|
import { fileURLToPath } from "url";
|
|
5
|
+
import { writeFile, readFile } from "fs/promises";
|
|
6
|
+
import { SkillAdapter } from "../adapters/skill-adapter.js";
|
|
5
7
|
const __dirname = dirname(fileURLToPath(import.meta.url));
|
|
6
8
|
function getDefaultSourceDir() {
|
|
7
9
|
// Tente diferentes caminhos relativos para encontrar o conteúdo
|
|
@@ -14,11 +16,11 @@ function getDefaultSourceDir() {
|
|
|
14
16
|
];
|
|
15
17
|
for (const path of possiblePaths) {
|
|
16
18
|
if (existsSync(path)) {
|
|
17
|
-
console.
|
|
19
|
+
console.error(`[DEBUG] Conteúdo encontrado em: ${path}`);
|
|
18
20
|
return path;
|
|
19
21
|
}
|
|
20
22
|
}
|
|
21
|
-
console.
|
|
23
|
+
console.error(`[DEBUG] Conteúdo não encontrado. Tentados: ${possiblePaths.join(", ")}`);
|
|
22
24
|
throw new Error("Conteúdo embutido não encontrado");
|
|
23
25
|
}
|
|
24
26
|
export function getBuiltinContentDir() {
|
|
@@ -76,6 +78,124 @@ export async function ensureContentInstalled(diretorio) {
|
|
|
76
78
|
}
|
|
77
79
|
return injectContentIntoProject(diretorio);
|
|
78
80
|
}
|
|
81
|
+
const IDE_CONFIGS = {
|
|
82
|
+
windsurf: {
|
|
83
|
+
path: '.windsurfrules',
|
|
84
|
+
header: '',
|
|
85
|
+
workflowsDir: '.windsurf/workflows',
|
|
86
|
+
skillsDir: '.windsurf/skills'
|
|
87
|
+
},
|
|
88
|
+
cursor: {
|
|
89
|
+
path: '.cursorrules',
|
|
90
|
+
header: '',
|
|
91
|
+
workflowsDir: '.cursor/commands',
|
|
92
|
+
skillsDir: '.cursor/skills'
|
|
93
|
+
},
|
|
94
|
+
antigravity: {
|
|
95
|
+
path: '.gemini/GEMINI.md',
|
|
96
|
+
header: '---\ntrigger: always_on\nsystem: maestro\nversion: 1.0.0\n---\n\n',
|
|
97
|
+
workflowsDir: '.agent/workflows',
|
|
98
|
+
skillsDir: '.agent/skills'
|
|
99
|
+
}
|
|
100
|
+
};
|
|
101
|
+
export async function injectContentForIDE(diretorio, ide) {
|
|
102
|
+
const sourceDir = getDefaultSourceDir();
|
|
103
|
+
const config = IDE_CONFIGS[ide];
|
|
104
|
+
// 1. Injetar Rules
|
|
105
|
+
const rulesSource = join(sourceDir, 'rules', 'RULES.md');
|
|
106
|
+
let rulesContent = '';
|
|
107
|
+
if (existsSync(rulesSource)) {
|
|
108
|
+
rulesContent = await readFile(rulesSource, 'utf-8');
|
|
109
|
+
}
|
|
110
|
+
else {
|
|
111
|
+
rulesContent = generateDefaultRules();
|
|
112
|
+
}
|
|
113
|
+
const rulesTarget = join(diretorio, config.path);
|
|
114
|
+
const rulesDir = dirname(rulesTarget);
|
|
115
|
+
if (!existsSync(rulesDir)) {
|
|
116
|
+
await mkdir(rulesDir, { recursive: true });
|
|
117
|
+
}
|
|
118
|
+
await writeFile(rulesTarget, config.header + rulesContent);
|
|
119
|
+
// 2. Injetar Skills (Adaptadas)
|
|
120
|
+
const skillsSource = join(sourceDir, 'skills');
|
|
121
|
+
const skillsTarget = join(diretorio, config.skillsDir);
|
|
122
|
+
if (existsSync(skillsSource)) {
|
|
123
|
+
const adapter = new SkillAdapter();
|
|
124
|
+
await adapter.adaptSkills(skillsSource, skillsTarget, ide, true);
|
|
125
|
+
}
|
|
126
|
+
// 3. Injetar Workflows
|
|
127
|
+
const workflowsSource = join(sourceDir, 'workflows');
|
|
128
|
+
const workflowsTarget = join(diretorio, config.workflowsDir);
|
|
129
|
+
if (existsSync(workflowsSource)) {
|
|
130
|
+
await mkdir(workflowsTarget, { recursive: true });
|
|
131
|
+
// Simples cópia para workflows (assumindo compatibilidade ou sem adapter específico por enquanto)
|
|
132
|
+
// Nota: CLI copia workflows. Vamos copiar também.
|
|
133
|
+
await cp(workflowsSource, workflowsTarget, { recursive: true, force: true });
|
|
134
|
+
}
|
|
135
|
+
return {
|
|
136
|
+
targetDir: diretorio,
|
|
137
|
+
sourceDir,
|
|
138
|
+
installed: true,
|
|
139
|
+
filesCopied: 0 // Simplificado
|
|
140
|
+
};
|
|
141
|
+
}
|
|
142
|
+
function generateDefaultRules() {
|
|
143
|
+
return `# Maestro File System - AI Rules
|
|
144
|
+
|
|
145
|
+
> Este arquivo define como a IA deve se comportar ao trabalhar com o sistema Maestro File System.
|
|
146
|
+
|
|
147
|
+
## Como Usar
|
|
148
|
+
|
|
149
|
+
1. **Ver status**: Use \`/00-maestro\` para ver progresso
|
|
150
|
+
2. **Iniciar projeto**: Use \`/01-iniciar-projeto\` para começar
|
|
151
|
+
3. **Avançar fases**: Use \`/02-avancar-fase\` para avançar
|
|
152
|
+
4. **Continuar**: Use \`/03-continuar-fase\` para retomar trabalho
|
|
153
|
+
|
|
154
|
+
## Estrutura Local
|
|
155
|
+
|
|
156
|
+
| Pasta | Conteúdo |
|
|
157
|
+
|-------|----------|
|
|
158
|
+
| \`.maestro/estado.json\` | Estado do projeto (fonte da verdade) |
|
|
159
|
+
| \`.maestro/content/\` | Especialistas, templates, guides (Interno) |
|
|
160
|
+
| \`.windsurf/workflows/\` | Workflows para Windsurf |
|
|
161
|
+
| \`.windsurf/skills/\` | Skills especializadas |
|
|
162
|
+
| \`.cursor/commands/\` | Commands para Cursor |
|
|
163
|
+
| \`.cursor/skills/\` | Skills especializadas |
|
|
164
|
+
| \`.agent/workflows/\` | Workflows Principais (00-08) |
|
|
165
|
+
| \`.agent/skills/\` | Skills especializadas |
|
|
166
|
+
|
|
167
|
+
## Comandos Disponíveis
|
|
168
|
+
|
|
169
|
+
### Gestão de Projeto
|
|
170
|
+
- \`/00-maestro\` - Router Inteligente (Status)
|
|
171
|
+
- \`/01-iniciar-projeto\` - Setup Inicial
|
|
172
|
+
- \`/02-avancar-fase\` - Transição de Fase (com automações)
|
|
173
|
+
- \`/03-continuar-fase\` - Retomada de Trabalho
|
|
174
|
+
- \`/08-deploy-projeto\` - Deploy e Encerramento
|
|
175
|
+
|
|
176
|
+
### Desenvolvimento
|
|
177
|
+
- \`/04-implementar-historia\` - Frontend-First Dev
|
|
178
|
+
- \`/05-nova-feature\` - Grandes Funcionalidades
|
|
179
|
+
- \`/06-corrigir-bug\` - Fix com análise de causa
|
|
180
|
+
- \`/07-refatorar-codigo\` - Melhoria técnica segura
|
|
181
|
+
|
|
182
|
+
## Especialistas IA
|
|
183
|
+
|
|
184
|
+
- Gestão de Produto
|
|
185
|
+
- Engenharia de Requisitos
|
|
186
|
+
- UX Design
|
|
187
|
+
- Arquitetura de Software
|
|
188
|
+
- E mais 20 especialistas disponíveis
|
|
189
|
+
|
|
190
|
+
## Orquestração Local
|
|
191
|
+
|
|
192
|
+
Este sistema opera 100% localmente, sem dependência de MCP remoto. A IA detecta automaticamente os arquivos e workflows disponíveis.
|
|
193
|
+
|
|
194
|
+
## Estado do Projeto
|
|
195
|
+
|
|
196
|
+
O estado é mantido em \`.maestro/estado.json\` e serve como fonte da verdade para o progresso do projeto.
|
|
197
|
+
`;
|
|
198
|
+
}
|
|
79
199
|
function directoryExists(path) {
|
|
80
200
|
try {
|
|
81
201
|
const stats = statSync(path);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"content-injector.js","sourceRoot":"","sources":["../../src/utils/content-injector.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AACjD,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,IAAI,CAAC;AAC1C,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;AACrC,OAAO,EAAE,aAAa,EAAE,MAAM,KAAK,CAAC;
|
|
1
|
+
{"version":3,"file":"content-injector.js","sourceRoot":"","sources":["../../src/utils/content-injector.ts"],"names":[],"mappings":"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"}
|
package/dist/utils/files.d.ts
CHANGED
|
@@ -11,37 +11,37 @@ export declare function getProjectDirectory(): string | null;
|
|
|
11
11
|
*/
|
|
12
12
|
export declare function temContentLocal(diretorio?: string): boolean;
|
|
13
13
|
/**
|
|
14
|
-
* Lê conteúdo de um especialista (
|
|
14
|
+
* Lê conteúdo de um especialista (apenas servidor)
|
|
15
15
|
*/
|
|
16
|
-
export declare function lerEspecialista(nome: string
|
|
16
|
+
export declare function lerEspecialista(nome: string): Promise<string>;
|
|
17
17
|
/**
|
|
18
|
-
* Lê conteúdo de um template (
|
|
18
|
+
* Lê conteúdo de um template (apenas servidor)
|
|
19
19
|
*/
|
|
20
|
-
export declare function lerTemplate(nome: string
|
|
20
|
+
export declare function lerTemplate(nome: string): Promise<string>;
|
|
21
21
|
/**
|
|
22
|
-
* Lê conteúdo de um prompt (
|
|
22
|
+
* Lê conteúdo de um prompt (apenas servidor)
|
|
23
23
|
*/
|
|
24
|
-
export declare function lerPrompt(categoria: string, nome: string
|
|
24
|
+
export declare function lerPrompt(categoria: string, nome: string): Promise<string>;
|
|
25
25
|
/**
|
|
26
|
-
* Lê conteúdo de um guia (
|
|
26
|
+
* Lê conteúdo de um guia (apenas servidor)
|
|
27
27
|
*/
|
|
28
|
-
export declare function lerGuia(nome: string
|
|
28
|
+
export declare function lerGuia(nome: string): Promise<string>;
|
|
29
29
|
/**
|
|
30
|
-
* Lista arquivos markdown em um diretório dentro de content
|
|
30
|
+
* Lista arquivos markdown em um diretório dentro de content (servidor)
|
|
31
31
|
*/
|
|
32
|
-
export declare function listarArquivos(subdir: string
|
|
32
|
+
export declare function listarArquivos(subdir: string): Promise<string[]>;
|
|
33
33
|
/**
|
|
34
34
|
* Lista especialistas disponíveis
|
|
35
35
|
*/
|
|
36
|
-
export declare function listarEspecialistas(
|
|
36
|
+
export declare function listarEspecialistas(): Promise<string[]>;
|
|
37
37
|
/**
|
|
38
38
|
* Lista templates disponíveis
|
|
39
39
|
*/
|
|
40
|
-
export declare function listarTemplates(
|
|
40
|
+
export declare function listarTemplates(): Promise<string[]>;
|
|
41
41
|
/**
|
|
42
42
|
* Lista guias disponíveis
|
|
43
43
|
*/
|
|
44
|
-
export declare function listarGuias(
|
|
44
|
+
export declare function listarGuias(): Promise<string[]>;
|
|
45
45
|
/**
|
|
46
46
|
* Verifica se arquivo existe
|
|
47
47
|
*/
|
|
@@ -51,13 +51,13 @@ export declare function arquivoExiste(path: string): Promise<boolean>;
|
|
|
51
51
|
*/
|
|
52
52
|
export declare function getServerContentRoot(): string;
|
|
53
53
|
/**
|
|
54
|
-
* Lê conteúdo de um exemplo de fluxo (
|
|
54
|
+
* Lê conteúdo de um exemplo de fluxo (apenas servidor)
|
|
55
55
|
*/
|
|
56
|
-
export declare function lerExemplo(nome: string
|
|
56
|
+
export declare function lerExemplo(nome: string): Promise<string>;
|
|
57
57
|
/**
|
|
58
58
|
* Lista exemplos disponíveis
|
|
59
59
|
*/
|
|
60
|
-
export declare function listarExemplos(
|
|
60
|
+
export declare function listarExemplos(): Promise<string[]>;
|
|
61
61
|
/**
|
|
62
62
|
* Normaliza o caminho do projeto, removendo prefixos de container (ex: /app/c:)
|
|
63
63
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"files.d.ts","sourceRoot":"","sources":["../../src/utils/files.ts"],"names":[],"mappings":"AAcA;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,QAErD;AAED;;GAEG;AACH,wBAAgB,mBAAmB,IAAI,MAAM,GAAG,IAAI,CAEnD;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,SAAS,CAAC,EAAE,MAAM,GAAG,OAAO,CAI3D;
|
|
1
|
+
{"version":3,"file":"files.d.ts","sourceRoot":"","sources":["../../src/utils/files.ts"],"names":[],"mappings":"AAcA;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,QAErD;AAED;;GAEG;AACH,wBAAgB,mBAAmB,IAAI,MAAM,GAAG,IAAI,CAEnD;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,SAAS,CAAC,EAAE,MAAM,GAAG,OAAO,CAI3D;AAaD;;GAEG;AACH,wBAAsB,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAiBnE;AAED;;GAEG;AACH,wBAAsB,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAgB/D;AAED;;GAEG;AACH,wBAAsB,SAAS,CAAC,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAIhF;AAED;;GAEG;AACH,wBAAsB,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAgB3D;AAED;;GAEG;AACH,wBAAsB,cAAc,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAUtE;AAED;;GAEG;AACH,wBAAsB,mBAAmB,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC,CAG7D;AAED;;GAEG;AACH,wBAAsB,eAAe,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC,CAGzD;AAED;;GAEG;AACH,wBAAsB,WAAW,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC,CAGrD;AAED;;GAEG;AACH,wBAAsB,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAOlE;AAED;;GAEG;AACH,wBAAgB,oBAAoB,IAAI,MAAM,CAE7C;AAED;;GAEG;AACH,wBAAsB,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAiB9D;AAED;;GAEG;AACH,wBAAsB,cAAc,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC,CAGxD;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAiBzD;AAGD;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAwBvD;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,GAAG,KAAK,EAAE,MAAM,EAAE,GAAG,MAAM,CAU1D"}
|
package/dist/utils/files.js
CHANGED
|
@@ -31,147 +31,100 @@ export function temContentLocal(diretorio) {
|
|
|
31
31
|
return existsSync(join(dir, '.maestro', 'content'));
|
|
32
32
|
}
|
|
33
33
|
/**
|
|
34
|
-
* Obtém o diretório de content (
|
|
34
|
+
* Obtém o diretório de content (SEMPRE do servidor para recursos internos)
|
|
35
35
|
*/
|
|
36
|
-
function
|
|
37
|
-
const dir = diretorio || currentProjectDir;
|
|
38
|
-
// Tenta local primeiro
|
|
39
|
-
if (dir) {
|
|
40
|
-
const localContent = join(dir, '.maestro', 'content');
|
|
41
|
-
if (existsSync(localContent)) {
|
|
42
|
-
return localContent;
|
|
43
|
-
}
|
|
44
|
-
}
|
|
45
|
-
// Fallback para servidor (usa o content-injector para encontrar)
|
|
36
|
+
function getServerContentDir() {
|
|
46
37
|
try {
|
|
47
38
|
return getBuiltinContentDir();
|
|
48
39
|
}
|
|
49
40
|
catch {
|
|
50
|
-
|
|
51
|
-
return join(__dirname, "..", "..", "..", "content");
|
|
41
|
+
return SERVER_CONTENT_ROOT;
|
|
52
42
|
}
|
|
53
43
|
}
|
|
54
44
|
/**
|
|
55
|
-
* Lê conteúdo de um especialista (
|
|
45
|
+
* Lê conteúdo de um especialista (apenas servidor)
|
|
56
46
|
*/
|
|
57
|
-
export async function lerEspecialista(nome
|
|
58
|
-
const contentRoot =
|
|
47
|
+
export async function lerEspecialista(nome) {
|
|
48
|
+
const contentRoot = getServerContentDir();
|
|
59
49
|
const especialistasDir = join(contentRoot, "specialists");
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
throw new Error(`Especialista não encontrado: ${nome}`);
|
|
66
|
-
}
|
|
67
|
-
const path = join(especialistasDir, arquivo);
|
|
68
|
-
return readFile(path, "utf-8");
|
|
69
|
-
}
|
|
70
|
-
catch (error) {
|
|
71
|
-
// Se falhou no local, tenta no servidor
|
|
72
|
-
if (contentRoot !== SERVER_CONTENT_ROOT) {
|
|
73
|
-
return lerEspecialista(nome, undefined);
|
|
74
|
-
}
|
|
75
|
-
throw error;
|
|
50
|
+
const files = await readdir(especialistasDir);
|
|
51
|
+
// Busca arquivo que contém o nome do especialista
|
|
52
|
+
const arquivo = files.find(f => f.toLowerCase().includes(nome.toLowerCase()) && f.endsWith(".md"));
|
|
53
|
+
if (!arquivo) {
|
|
54
|
+
throw new Error(`Especialista não encontrado: ${nome}`);
|
|
76
55
|
}
|
|
56
|
+
const path = join(especialistasDir, arquivo);
|
|
57
|
+
return readFile(path, "utf-8");
|
|
77
58
|
}
|
|
78
59
|
/**
|
|
79
|
-
* Lê conteúdo de um template (
|
|
60
|
+
* Lê conteúdo de um template (apenas servidor)
|
|
80
61
|
*/
|
|
81
|
-
export async function lerTemplate(nome
|
|
82
|
-
const contentRoot =
|
|
62
|
+
export async function lerTemplate(nome) {
|
|
63
|
+
const contentRoot = getServerContentDir();
|
|
83
64
|
const templatesDir = join(contentRoot, "templates");
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
throw new Error(`Template não encontrado: ${nome}`);
|
|
89
|
-
}
|
|
90
|
-
const path = join(templatesDir, arquivo);
|
|
91
|
-
return readFile(path, "utf-8");
|
|
92
|
-
}
|
|
93
|
-
catch (error) {
|
|
94
|
-
if (contentRoot !== SERVER_CONTENT_ROOT) {
|
|
95
|
-
return lerTemplate(nome, undefined);
|
|
96
|
-
}
|
|
97
|
-
throw error;
|
|
65
|
+
const files = await readdir(templatesDir);
|
|
66
|
+
const arquivo = files.find(f => f.toLowerCase().includes(nome.toLowerCase()) && f.endsWith(".md"));
|
|
67
|
+
if (!arquivo) {
|
|
68
|
+
throw new Error(`Template não encontrado: ${nome}`);
|
|
98
69
|
}
|
|
70
|
+
const path = join(templatesDir, arquivo);
|
|
71
|
+
return readFile(path, "utf-8");
|
|
99
72
|
}
|
|
100
73
|
/**
|
|
101
|
-
* Lê conteúdo de um prompt (
|
|
74
|
+
* Lê conteúdo de um prompt (apenas servidor)
|
|
102
75
|
*/
|
|
103
|
-
export async function lerPrompt(categoria, nome
|
|
104
|
-
const contentRoot =
|
|
76
|
+
export async function lerPrompt(categoria, nome) {
|
|
77
|
+
const contentRoot = getServerContentDir();
|
|
105
78
|
const path = join(contentRoot, "prompts", categoria, `${nome}.md`);
|
|
106
|
-
|
|
107
|
-
return await readFile(path, "utf-8");
|
|
108
|
-
}
|
|
109
|
-
catch (error) {
|
|
110
|
-
if (contentRoot !== SERVER_CONTENT_ROOT) {
|
|
111
|
-
return lerPrompt(categoria, nome, undefined);
|
|
112
|
-
}
|
|
113
|
-
throw error;
|
|
114
|
-
}
|
|
79
|
+
return await readFile(path, "utf-8");
|
|
115
80
|
}
|
|
116
81
|
/**
|
|
117
|
-
* Lê conteúdo de um guia (
|
|
82
|
+
* Lê conteúdo de um guia (apenas servidor)
|
|
118
83
|
*/
|
|
119
|
-
export async function lerGuia(nome
|
|
120
|
-
const contentRoot =
|
|
84
|
+
export async function lerGuia(nome) {
|
|
85
|
+
const contentRoot = getServerContentDir();
|
|
121
86
|
const guiasDir = join(contentRoot, "guides");
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
throw new Error(`Guia não encontrado: ${nome}`);
|
|
127
|
-
}
|
|
128
|
-
const path = join(guiasDir, arquivo);
|
|
129
|
-
return readFile(path, "utf-8");
|
|
130
|
-
}
|
|
131
|
-
catch (error) {
|
|
132
|
-
if (contentRoot !== SERVER_CONTENT_ROOT) {
|
|
133
|
-
return lerGuia(nome, undefined);
|
|
134
|
-
}
|
|
135
|
-
throw error;
|
|
87
|
+
const files = await readdir(guiasDir);
|
|
88
|
+
const arquivo = files.find(f => f.toLowerCase().includes(nome.toLowerCase()) && f.endsWith(".md"));
|
|
89
|
+
if (!arquivo) {
|
|
90
|
+
throw new Error(`Guia não encontrado: ${nome}`);
|
|
136
91
|
}
|
|
92
|
+
const path = join(guiasDir, arquivo);
|
|
93
|
+
return readFile(path, "utf-8");
|
|
137
94
|
}
|
|
138
95
|
/**
|
|
139
|
-
* Lista arquivos markdown em um diretório dentro de content
|
|
96
|
+
* Lista arquivos markdown em um diretório dentro de content (servidor)
|
|
140
97
|
*/
|
|
141
|
-
export async function listarArquivos(subdir
|
|
142
|
-
const contentRoot =
|
|
98
|
+
export async function listarArquivos(subdir) {
|
|
99
|
+
const contentRoot = getServerContentDir();
|
|
143
100
|
const dir = join(contentRoot, subdir);
|
|
144
101
|
try {
|
|
145
102
|
const entries = await readdir(dir);
|
|
146
103
|
return entries.filter(e => e.endsWith(".md"));
|
|
147
104
|
}
|
|
148
105
|
catch {
|
|
149
|
-
// Se falhar no local, tenta servidor
|
|
150
|
-
if (contentRoot !== SERVER_CONTENT_ROOT) {
|
|
151
|
-
return listarArquivos(subdir, undefined);
|
|
152
|
-
}
|
|
153
106
|
return [];
|
|
154
107
|
}
|
|
155
108
|
}
|
|
156
109
|
/**
|
|
157
110
|
* Lista especialistas disponíveis
|
|
158
111
|
*/
|
|
159
|
-
export async function listarEspecialistas(
|
|
160
|
-
const files = await listarArquivos("specialists"
|
|
112
|
+
export async function listarEspecialistas() {
|
|
113
|
+
const files = await listarArquivos("specialists");
|
|
161
114
|
return files.map(f => f.replace(/^Especialista em /i, "").replace(".md", ""));
|
|
162
115
|
}
|
|
163
116
|
/**
|
|
164
117
|
* Lista templates disponíveis
|
|
165
118
|
*/
|
|
166
|
-
export async function listarTemplates(
|
|
167
|
-
const files = await listarArquivos("templates"
|
|
119
|
+
export async function listarTemplates() {
|
|
120
|
+
const files = await listarArquivos("templates");
|
|
168
121
|
return files.map(f => f.replace(".md", ""));
|
|
169
122
|
}
|
|
170
123
|
/**
|
|
171
124
|
* Lista guias disponíveis
|
|
172
125
|
*/
|
|
173
|
-
export async function listarGuias(
|
|
174
|
-
const files = await listarArquivos("guides"
|
|
126
|
+
export async function listarGuias() {
|
|
127
|
+
const files = await listarArquivos("guides");
|
|
175
128
|
return files.map(f => f.replace(".md", ""));
|
|
176
129
|
}
|
|
177
130
|
/**
|
|
@@ -193,34 +146,25 @@ export function getServerContentRoot() {
|
|
|
193
146
|
return SERVER_CONTENT_ROOT;
|
|
194
147
|
}
|
|
195
148
|
/**
|
|
196
|
-
* Lê conteúdo de um exemplo de fluxo (
|
|
149
|
+
* Lê conteúdo de um exemplo de fluxo (apenas servidor)
|
|
197
150
|
*/
|
|
198
|
-
export async function lerExemplo(nome
|
|
199
|
-
const contentRoot =
|
|
151
|
+
export async function lerExemplo(nome) {
|
|
152
|
+
const contentRoot = getServerContentDir();
|
|
200
153
|
const examplesDir = join(contentRoot, "examples");
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
throw new Error(`Exemplo não encontrado: ${nome}`);
|
|
207
|
-
}
|
|
208
|
-
const path = join(examplesDir, arquivo);
|
|
209
|
-
return readFile(path, "utf-8");
|
|
210
|
-
}
|
|
211
|
-
catch (error) {
|
|
212
|
-
// Se falhou no local, tenta no servidor
|
|
213
|
-
if (contentRoot !== SERVER_CONTENT_ROOT) {
|
|
214
|
-
return lerExemplo(nome, undefined);
|
|
215
|
-
}
|
|
216
|
-
throw error;
|
|
154
|
+
const files = await readdir(examplesDir);
|
|
155
|
+
// Busca arquivo que contém o nome do exemplo
|
|
156
|
+
const arquivo = files.find(f => f.toLowerCase().includes(nome.toLowerCase()) && f.endsWith(".md"));
|
|
157
|
+
if (!arquivo) {
|
|
158
|
+
throw new Error(`Exemplo não encontrado: ${nome}`);
|
|
217
159
|
}
|
|
160
|
+
const path = join(examplesDir, arquivo);
|
|
161
|
+
return readFile(path, "utf-8");
|
|
218
162
|
}
|
|
219
163
|
/**
|
|
220
164
|
* Lista exemplos disponíveis
|
|
221
165
|
*/
|
|
222
|
-
export async function listarExemplos(
|
|
223
|
-
const files = await listarArquivos("examples"
|
|
166
|
+
export async function listarExemplos() {
|
|
167
|
+
const files = await listarArquivos("examples");
|
|
224
168
|
return files.map(f => f.replace(".md", ""));
|
|
225
169
|
}
|
|
226
170
|
/**
|
|
@@ -249,13 +193,13 @@ export function resolveProjectPath(path) {
|
|
|
249
193
|
const normalized = normalizeProjectPath(path).trim();
|
|
250
194
|
// Debug logging
|
|
251
195
|
if (platform() !== 'win32') {
|
|
252
|
-
console.
|
|
253
|
-
console.
|
|
196
|
+
console.error(`[DEBUG] resolveProjectPath input: "${path}"`);
|
|
197
|
+
console.error(`[DEBUG] normalized: "${normalized}"`);
|
|
254
198
|
}
|
|
255
199
|
// Se o path é Windows (Drive Letter) mas estamos no Linux (Docker/WSL)
|
|
256
200
|
// Checks for "C:" at start OR "C:\" inside string (handling weird mounting)
|
|
257
201
|
if (platform() !== 'win32' && (normalized.match(/^[a-zA-Z]:/) || normalized.includes(':\\'))) {
|
|
258
|
-
console.
|
|
202
|
+
console.error(`[DEBUG] Windows path detected on Linux. Mapping to CWD: ${process.cwd()}`);
|
|
259
203
|
return process.cwd();
|
|
260
204
|
}
|
|
261
205
|
// Se parece um caminho Windows em ambiente Windows, força win32
|
package/dist/utils/files.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"files.js","sourceRoot":"","sources":["../../src/utils/files.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,aAAa,CAAC;AACtD,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,MAAM,CAAC;AACrD,OAAO,EAAE,aAAa,EAAE,MAAM,KAAK,CAAC;AACpC,OAAO,EAAE,UAAU,EAAE,MAAM,IAAI,CAAC;AAChC,OAAO,EAAE,QAAQ,EAAE,MAAM,IAAI,CAAC;AAC9B,OAAO,EAAE,oBAAoB,EAAE,MAAM,uBAAuB,CAAC;AAE7D,mDAAmD;AACnD,MAAM,SAAS,GAAG,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;AAC1D,MAAM,mBAAmB,GAAG,IAAI,CAAC,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,SAAS,CAAC,CAAC;AAEzE,4DAA4D;AAC5D,IAAI,iBAAiB,GAAkB,IAAI,CAAC;AAE5C;;GAEG;AACH,MAAM,UAAU,mBAAmB,CAAC,GAAkB;IAClD,iBAAiB,GAAG,GAAG,CAAC;AAC5B,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,mBAAmB;IAC/B,OAAO,iBAAiB,CAAC;AAC7B,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,eAAe,CAAC,SAAkB;IAC9C,MAAM,GAAG,GAAG,SAAS,IAAI,iBAAiB,CAAC;IAC3C,IAAI,CAAC,GAAG;QAAE,OAAO,KAAK,CAAC;IACvB,OAAO,UAAU,CAAC,IAAI,CAAC,GAAG,EAAE,UAAU,EAAE,SAAS,CAAC,CAAC,CAAC;AACxD,CAAC;AAED;;GAEG;AACH,SAAS,
|
|
1
|
+
{"version":3,"file":"files.js","sourceRoot":"","sources":["../../src/utils/files.ts"],"names":[],"mappings":"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"}
|