@maestro-ai/cli 1.1.0 → 1.3.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 (54) hide show
  1. package/README.md +84 -54
  2. package/content/guides/fases-mapeamento.md +34 -0
  3. package/content/guides/guide-brainstorm.md +38 -0
  4. package/content/guides/guide-orquestracao.md +45 -0
  5. package/content/guides/guide-testes.md +51 -0
  6. package/content/guides/guide-troubleshooting.md +43 -0
  7. package/content/guides/guide-validacao.md +50 -0
  8. package/content/guides/internal/automated-events.md +27 -0
  9. package/content/guides/internal/automated-map.md +56 -0
  10. package/content/guides/internal/automated-stitch.md +51 -0
  11. package/content/guides/internal/automated-system.md +46 -0
  12. package/content/guides/mapa-sistema.md +86 -0
  13. package/content/guides/multi-ide.md +32 -0
  14. package/content/guides/playbook-orquestrador.md +45 -0
  15. package/content/guides/workflows-avancados.md +62 -0
  16. package/content/rules/GEMINI.md +70 -762
  17. package/content/rules/RULES.md +71 -761
  18. package/content/rules/complexity-rules.md +43 -0
  19. package/content/rules/quality-gates.md +55 -0
  20. package/content/rules/security-rules.md +40 -0
  21. package/content/rules/structure-rules.md +63 -0
  22. package/content/rules/validation-rules.md +56 -0
  23. package/content/templates/estado-template.json +73 -0
  24. package/content/workflows/00-maestro.md +78 -0
  25. package/content/workflows/01-iniciar-projeto.md +59 -0
  26. package/content/workflows/02-avancar-fase.md +72 -0
  27. package/content/workflows/03-continuar-fase.md +64 -0
  28. package/content/workflows/04-implementar-historia.md +64 -0
  29. package/content/workflows/05-nova-feature.md +39 -0
  30. package/content/workflows/06-corrigir-bug.md +34 -0
  31. package/content/workflows/07-refatorar-codigo.md +34 -0
  32. package/dist/commands/init.d.ts +2 -2
  33. package/dist/commands/init.js +89 -76
  34. package/dist/index.js +94 -5
  35. package/package.json +10 -4
  36. package/content/workflows/README-MCP.md +0 -363
  37. package/content/workflows/brainstorm.md +0 -113
  38. package/content/workflows/create.md +0 -59
  39. package/content/workflows/debug.md +0 -103
  40. package/content/workflows/enhance.md +0 -63
  41. package/content/workflows/mcp-debug.md +0 -506
  42. package/content/workflows/mcp-feature.md +0 -385
  43. package/content/workflows/mcp-gate.md +0 -413
  44. package/content/workflows/mcp-next.md +0 -388
  45. package/content/workflows/mcp-refactor.md +0 -600
  46. package/content/workflows/mcp-start.md +0 -304
  47. package/content/workflows/mcp-status.md +0 -400
  48. package/content/workflows/orchestrate.md +0 -237
  49. package/content/workflows/plan.md +0 -89
  50. package/content/workflows/preview.md +0 -81
  51. package/content/workflows/status.md +0 -86
  52. package/content/workflows/test.md +0 -144
  53. package/content/workflows/ui-ux-pro-max.md +0 -296
  54. /package/content/workflows/{deploy.md → 08-deploy-projeto.md} +0 -0
@@ -0,0 +1,39 @@
1
+ ---
2
+ description: Adicionar nova feature com fluxo estruturado (Análise → Implementação → Deploy)
3
+ ---
4
+
5
+ # 🆕 /nova-feature - Workflow de Nova Feature
6
+
7
+ ## 1. Preparação (Análise de Impacto)
8
+
9
+ * **Estratégia:** Verifique a complexidade. Se envolver múltiplos domínios ou alto risco, consulte `guides/guide-orquestracao.md` para ativar o **Modo Squad**.
10
+ * **Ação:** Pergunte ao usuário a descrição da feature e o impacto estimado (baixo/médio/alto).
11
+ * **Ação:** Crie o diretório `docs/features/{FEATURE-ID}/`.
12
+ * **Ação:** Crie o arquivo `docs/features/{FEATURE-ID}/01-analise.md` com a análise inicial:
13
+ * Tabelas afetadas
14
+ * Novos Endpoints
15
+ * Componentes de UI necessários
16
+
17
+ ## 2. Refinamento e Design
18
+
19
+ * **Instrução:** Use o workflow padrão `/02-avancar-fase` para mover a feature para Design.
20
+ * **Entregável Esperado:** Contrato de Interface (OpenAPI) e Mockups/Wireframes se necessário.
21
+
22
+ ## 3. Implementação (O "Core")
23
+
24
+ > Aqui usamos o workflow especializado de granularidade fina.
25
+
26
+ * **Ação:** Quebre a feature em Histórias de Usuário (ex: `US-01: Criar API`, `US-02: Tela de Listagem`).
27
+ * **Para cada História:**
28
+ * Execute o workflow: **`/04-implementar-historia`**
29
+ * Siga ordenadamente: Types -> Mocks -> Frontend -> Backend -> Integração.
30
+
31
+ ## 4. Testes e Validação
32
+
33
+ * **Verificação de Segurança:** Antes de finalizar, leia `rules/security-rules.md` e revise o código.
34
+ * **Testes:** Garanta que os testes criados na fase de implementação estão passando.
35
+
36
+ ## 5. Deploy e Encerramento
37
+
38
+ * **Ação:** Atualize o `estado.json` (ou use `/02-avancar-fase`) para marcar a feature como CONCLUÍDA.
39
+ * **Resumo:** Atualize `.maestro/resumo.json` adicionando a feature ao histórico.
@@ -0,0 +1,34 @@
1
+ ---
2
+ description: Workflow para correção de bugs com análise de causa raiz e segurança
3
+ ---
4
+
5
+ # 🐛 /corrigir-bug - Workflow de Correção
6
+
7
+ ## 1. Reprodução e Análise
8
+
9
+ * **Estratégia:** Se o bug for crítico, arquitetural ou envolver múltiplos serviços, consulte `guides/guide-orquestracao.md` para ativar o **Modo Squad**.
10
+ * **Ação:** Crie um caso de teste que reproduza o erro (se possível).
11
+ * **Ação:** Analise a causa raiz.
12
+
13
+ ## 2. Classificação de Segurança
14
+
15
+ * **Ação:** O bug é uma vulnerabilidade de segurança?
16
+ * **Sim:** Leia imediatamente `rules/security-rules.md` para entender a categoria (ex: SQL Injection, XSS).
17
+ * **Não:** Prossiga normalmente.
18
+
19
+ ## 3. Implementação da Correção
20
+
21
+ * **Ação:** Implemente o fix.
22
+ * **Regra:** Não altere comportamento não relacionado (escopo fechado).
23
+
24
+ ## 4. Verificação
25
+
26
+ * **Ação:** Rode o teste de reprodução (deve passar).
27
+ * **Ação:** Rode testes de regressão (não deve quebrar nada existente).
28
+ * **Revisão (Self-Code-Review):**
29
+ * Verifique se não deixou `console.log` (Regra `SEC-LOG`).
30
+ * Verifique se não hardcodou credenciais (Regra `A02-SECRET`).
31
+
32
+ ## 5. Finalização
33
+
34
+ * **Ação:** Atualize o histórico em `.maestro/resumo.json` registrando o bug fix.
@@ -0,0 +1,34 @@
1
+ ---
2
+ description: Workflow para refatoração segura de código existente
3
+ ---
4
+
5
+ # 🧹 /refatorar-codigo - Workflow de Refatoração
6
+
7
+ ## 1. Análise Prévia
8
+
9
+ * **Estratégia:** Se a refatoração for estrutural ou de alto risco, consulte `guides/guide-orquestracao.md` para ativar o **Modo Squad**.
10
+ * **Ação:** Identifique a área a ser refatorada (arquivo, função, módulo).
11
+ * **Ação:** Entenda o "Motivo" (Legibilidade, Performance, Segurança, Estrutura).
12
+ * **Ação:** **Importante**: Garanta que existem testes cobrindo essa área. Se não houver, crie um "Teste de Caracterização" (Snapshot/Unitário) antes de tocar no código.
13
+
14
+ ## 2. Consulta de Regras
15
+
16
+ * **Ação:** Se for refatoração de Segurança, leia `rules/security-rules.md`.
17
+ * **Ação:** Se for refatoração de Estrutura, consulte `.maestro/mapa.md` para entender dependências.
18
+
19
+ ## 3. Execução (Ciclo Red-Green-Refactor)
20
+
21
+ * **Passo 1:** Rode os testes (Devem passar: 🟢).
22
+ * **Passo 2:** Aplique uma pequena mudança de refatoração.
23
+ * **Passo 3:** Rode os testes (Devem passar: 🟢).
24
+ * **Passo 4:** Repita.
25
+
26
+ ## 4. Atualização de Mapa
27
+
28
+ * **Ação:** Se você alterou nomes de classes, arquivos ou assinaturas de API:
29
+ * Execute `guides/internal/automated-map.md`.
30
+ * **Ação:** Registre o evento de refatoração via `guides/internal/automated-events.md`.
31
+
32
+ ## 5. Registro
33
+
34
+ * **Ação:** Registre a refatoração no `.maestro/resumo.json`.
@@ -1,7 +1,7 @@
1
1
  interface InitOptions {
2
2
  force?: boolean;
3
3
  minimal?: boolean;
4
- ide?: 'gemini' | 'cursor' | 'copilot' | 'windsurf' | 'all';
4
+ ide?: 'windsurf' | 'cursor' | 'antigravity';
5
5
  }
6
- export declare function init(options?: InitOptions): Promise<void>;
6
+ export declare function init(options: InitOptions): Promise<void>;
7
7
  export {};
@@ -6,24 +6,26 @@ import chalk from 'chalk';
6
6
  import ora from 'ora';
7
7
  const __dirname = dirname(fileURLToPath(import.meta.url));
8
8
  const IDE_CONFIGS = {
9
- gemini: {
10
- path: '.gemini/GEMINI.md',
11
- header: '---\ntrigger: always_on\nsystem: maestro\nversion: 1.0.0\n---\n\n'
9
+ windsurf: {
10
+ path: '.windsurfrules',
11
+ header: '',
12
+ workflowsDir: '.windsurf/workflows',
13
+ skillsDir: '.windsurf/skills'
12
14
  },
13
15
  cursor: {
14
16
  path: '.cursorrules',
15
- header: ''
17
+ header: '',
18
+ workflowsDir: '.cursor/commands',
19
+ skillsDir: '.cursor/skills'
16
20
  },
17
- copilot: {
18
- path: '.github/copilot-instructions.md',
19
- header: ''
20
- },
21
- windsurf: {
22
- path: '.windsurfrules',
23
- header: ''
21
+ antigravity: {
22
+ path: '.gemini/GEMINI.md',
23
+ header: '---\ntrigger: always_on\nsystem: maestro\nversion: 1.0.0\n---\n\n',
24
+ workflowsDir: '.agent/workflows',
25
+ skillsDir: '.agent/skills'
24
26
  }
25
27
  };
26
- export async function init(options = {}) {
28
+ export async function init(options) {
27
29
  const cwd = process.cwd();
28
30
  const spinner = ora();
29
31
  console.log(chalk.blue.bold('\n🎯 Maestro - Inicializando projeto\n'));
@@ -41,9 +43,10 @@ export async function init(options = {}) {
41
43
  await fse.ensureDir(join(cwd, '.maestro'));
42
44
  await fse.ensureDir(join(cwd, '.maestro', 'history'));
43
45
  await fse.writeJSON(join(cwd, '.maestro', 'config.json'), {
44
- version: '1.0.0',
46
+ version: '1.3.0',
45
47
  initialized: new Date().toISOString(),
46
- mcpServer: 'https://maestro.deluna.dev.br/mcp'
48
+ ide: options.ide || 'windsurf',
49
+ mcpFree: true
47
50
  }, { spaces: 2 });
48
51
  spinner.succeed('Estrutura .maestro/ criada');
49
52
  // 2. Copiar content para .maestro/content/ (se não minimal)
@@ -60,27 +63,9 @@ export async function init(options = {}) {
60
63
  }
61
64
  spinner.succeed('Content copiado para .maestro/content/');
62
65
  }
63
- // 3. Copiar skills para .agent/skills/
64
- spinner.start('Copiando skills para .agent/skills/...');
65
- const skillsSrc = join(contentSource, 'skills');
66
- const skillsDest = join(cwd, '.agent', 'skills');
67
- if (await fse.pathExists(skillsSrc)) {
68
- await fse.copy(skillsSrc, skillsDest, { overwrite: options.force });
69
- }
70
- spinner.succeed('Skills copiados para .agent/skills/');
71
- // 4. Copiar workflows para .agent/workflows/
72
- spinner.start('Copiando workflows para .agent/workflows/...');
73
- const workflowsSrc = join(contentSource, 'workflows');
74
- const workflowsDest = join(cwd, '.agent', 'workflows');
75
- if (await fse.pathExists(workflowsSrc)) {
76
- await fse.copy(workflowsSrc, workflowsDest, { overwrite: options.force });
77
- }
78
- spinner.succeed('Workflows copiados para .agent/workflows/');
79
- // 5. Gerar arquivos de regras por IDE
80
- const targetIdes = options.ide === 'all'
81
- ? Object.keys(IDE_CONFIGS)
82
- : [options.ide || 'gemini'];
83
- spinner.start(`Gerando regras para IDE(s): ${targetIdes.join(', ')}...`);
66
+ // 4. Configurar IDE específica
67
+ const ideConfig = IDE_CONFIGS[options.ide];
68
+ spinner.start(`Configurando IDE: ${options.ide}...`);
84
69
  // Ler RULES.md base
85
70
  const rulesPath = join(contentSource, 'rules', 'RULES.md');
86
71
  let rulesContent = '';
@@ -90,17 +75,29 @@ export async function init(options = {}) {
90
75
  else {
91
76
  rulesContent = generateDefaultRules();
92
77
  }
93
- // Gerar arquivo para cada IDE alvo
94
- for (const ide of targetIdes) {
95
- const config = IDE_CONFIGS[ide];
96
- const targetPath = join(cwd, config.path);
97
- await fse.ensureDir(dirname(targetPath));
98
- const content = config.header + rulesContent;
99
- await fse.writeFile(targetPath, content);
78
+ // Criar diretórios específicos da IDE
79
+ await fse.ensureDir(join(cwd, dirname(ideConfig.path)));
80
+ await fse.ensureDir(join(cwd, ideConfig.workflowsDir));
81
+ await fse.ensureDir(join(cwd, ideConfig.skillsDir));
82
+ // Copiar workflows para diretório específico da IDE
83
+ const workflowsSrc = join(contentSource, 'workflows');
84
+ const workflowsDest = join(cwd, ideConfig.workflowsDir);
85
+ if (await fse.pathExists(workflowsSrc)) {
86
+ await fse.copy(workflowsSrc, workflowsDest, { overwrite: options.force });
87
+ }
88
+ // Copiar skills para diretório específico da IDE
89
+ const skillsSrc = join(contentSource, 'skills');
90
+ const skillsDest = join(cwd, ideConfig.skillsDir);
91
+ if (await fse.pathExists(skillsSrc)) {
92
+ await fse.copy(skillsSrc, skillsDest, { overwrite: options.force });
100
93
  }
101
- spinner.succeed(`Regras geradas para: ${targetIdes.join(', ')}`);
94
+ // Gerar arquivo de regras
95
+ const targetPath = join(cwd, ideConfig.path);
96
+ const content = ideConfig.header + rulesContent;
97
+ await fse.writeFile(targetPath, content);
98
+ spinner.succeed(`IDE ${options.ide} configurada com sucesso!`);
102
99
  // Resumo
103
- console.log(chalk.green.bold('\n✅ Maestro inicializado com sucesso!\n'));
100
+ console.log(chalk.green.bold(`\n✅ Maestro inicializado para ${options.ide}\n`));
104
101
  console.log(chalk.dim('Estrutura criada:'));
105
102
  console.log(chalk.dim(' .maestro/'));
106
103
  console.log(chalk.dim(' ├── config.json'));
@@ -112,16 +109,13 @@ export async function init(options = {}) {
112
109
  console.log(chalk.dim(' ├── guides/'));
113
110
  console.log(chalk.dim(' └── prompts/'));
114
111
  }
115
- console.log(chalk.dim(' .agent/'));
116
- console.log(chalk.dim(' ├── skills/'));
117
- console.log(chalk.dim(' └── workflows/'));
118
- for (const ide of targetIdes) {
119
- console.log(chalk.dim(` ${IDE_CONFIGS[ide].path}`));
120
- }
121
- console.log(chalk.blue('\n📋 Próximos passos:'));
122
- console.log(' 1. Configure o MCP na sua IDE:');
123
- console.log(chalk.gray(' "mcpServers": { "maestro": { "serverUrl": "https://maestro.deluna.dev.br/mcp" } }'));
124
- console.log(' 2. Inicie um novo projeto com: @mcp:maestro iniciar_projeto');
112
+ console.log(chalk.dim(` ${ideConfig.workflowsDir}/`));
113
+ console.log(chalk.dim(` ${ideConfig.skillsDir}/`));
114
+ console.log(chalk.dim(` ${ideConfig.path}`));
115
+ console.log(chalk.blue('\n🎯 Próximos passos:'));
116
+ console.log(` 1. Abra sua ${options.ide}`);
117
+ console.log(' 2. Digite: /maestro');
118
+ console.log(' 3. Comece a desenvolver!');
125
119
  console.log('');
126
120
  }
127
121
  catch (error) {
@@ -131,40 +125,59 @@ export async function init(options = {}) {
131
125
  }
132
126
  }
133
127
  function generateDefaultRules() {
134
- return `# MCP Maestro Development Kit - AI Rules
135
-
136
- > Este arquivo define como a IA deve se comportar ao trabalhar com o sistema MCP Maestro.
128
+ return `# Maestro File System - AI Rules
137
129
 
138
- ## Configuração MCP
139
-
140
- \`\`\`json
141
- {
142
- "mcpServers": {
143
- "maestro": {
144
- "serverUrl": "https://maestro.deluna.dev.br/mcp"
145
- }
146
- }
147
- }
148
- \`\`\`
130
+ > Este arquivo define como a IA deve se comportar ao trabalhar com o sistema Maestro File System.
149
131
 
150
132
  ## Como Usar
151
133
 
152
- 1. **Iniciar projeto**: Use \`iniciar_projeto\` para começar
153
- 2. **Avançar fases**: Use \`proximo\` para salvar e avançar
154
- 3. **Ver status**: Use \`status\` para ver onde está
134
+ 1. **Ver status**: Use \`/00-maestro\` para ver progresso
135
+ 2. **Iniciar projeto**: Use \`/01-iniciar-projeto\` para começar
136
+ 3. **Avançar fases**: Use \`/02-avancar-fase\` para avançar
137
+ 4. **Continuar**: Use \`/03-continuar-fase\` para retomar trabalho
155
138
 
156
139
  ## Estrutura Local
157
140
 
158
141
  | Pasta | Conteúdo |
159
142
  |-------|----------|
160
143
  | \`.maestro/estado.json\` | Estado do projeto (fonte da verdade) |
161
- | \`.maestro/SYSTEM.md\` | Contexto atual para IA |
162
- | \`.maestro/content/\` | Especialistas, templates, prompts |
163
- | \`.agent/skills/\` | Skills disponíveis |
164
- | \`.agent/workflows/\` | Workflows automatizados |
144
+ | \`.maestro/content/\` | Especialistas, templates, guides |
145
+ | \`.windsurf/workflows/\` | Workflows para Windsurf |
146
+ | \`.windsurf/skills/\` | Skills especializadas |
147
+ | \`.cursor/commands/\` | Commands para Cursor |
148
+ | \`.cursor/skills/\` | Skills especializadas |
149
+ | \`.agent/workflows/\` | Workflows Principais (00-08) |
150
+ | \`.agent/skills/\` | Skills especializadas |
151
+
152
+ ## Comandos Disponíveis
153
+
154
+ ### Gestão de Projeto
155
+ - \`/00-maestro\` - Router Inteligente (Status)
156
+ - \`/01-iniciar-projeto\` - Setup Inicial
157
+ - \`/02-avancar-fase\` - Transição de Fase (com automações)
158
+ - \`/03-continuar-fase\` - Retomada de Trabalho
159
+ - \`/08-deploy-projeto\` - Deploy e Encerramento
160
+
161
+ ### Desenvolvimento
162
+ - \`/04-implementar-historia\` - Frontend-First Dev
163
+ - \`/05-nova-feature\` - Grandes Funcionalidades
164
+ - \`/06-corrigir-bug\` - Fix com análise de causa
165
+ - \`/07-refatorar-codigo\` - Melhoria técnica segura
166
+
167
+ ## Especialistas IA
168
+
169
+ - Gestão de Produto
170
+ - Engenharia de Requisitos
171
+ - UX Design
172
+ - Arquitetura de Software
173
+ - E mais 20 especialistas disponíveis
174
+
175
+ ## Orquestração Local
176
+
177
+ Este sistema opera 100% localmente, sem dependência de MCP remoto. A IA detecta automaticamente os arquivos e workflows disponíveis.
165
178
 
166
179
  ## Estado do Projeto
167
180
 
168
- O estado é mantido em \`.maestro/estado.json\` e deve ser passado como \`estado_json\` em todos os tools MCP.
181
+ O estado é mantido em \`.maestro/estado.json\` e serve como fonte da verdade para o progresso do projeto.
169
182
  `;
170
183
  }
package/dist/index.js CHANGED
@@ -2,6 +2,62 @@
2
2
  import { Command } from 'commander';
3
3
  import { init } from './commands/init.js';
4
4
  import { update } from './commands/update.js';
5
+ import chalk from 'chalk';
6
+ import { createInterface } from 'readline';
7
+ const VALID_IDES = ['windsurf', 'cursor', 'antigravity'];
8
+ async function promptForIDE() {
9
+ while (true) {
10
+ console.log(chalk.cyan('\n🎯 Selecione sua IDE de desenvolvimento:\n'));
11
+ VALID_IDES.forEach((ide, index) => {
12
+ console.log(chalk.white(`${index + 1}. ${ide}`));
13
+ });
14
+ console.log(chalk.yellow('\nDigite o número da IDE desejada:'));
15
+ const answer = await new Promise((resolve) => {
16
+ const rl = createInterface({
17
+ input: process.stdin,
18
+ output: process.stdout
19
+ });
20
+ rl.question('', (answer) => {
21
+ rl.close();
22
+ resolve(answer.trim());
23
+ });
24
+ });
25
+ const choice = parseInt(answer);
26
+ if (choice >= 1 && choice <= VALID_IDES.length) {
27
+ return VALID_IDES[choice - 1];
28
+ }
29
+ console.log(chalk.red('❌ Opção inválida. Por favor, digite um número entre 1 e 3.'));
30
+ // Loop continua para perguntar novamente
31
+ }
32
+ }
33
+ async function promptForIDEWithDefault() {
34
+ while (true) {
35
+ console.log(chalk.cyan('\n🎯 Selecione sua IDE de desenvolvimento:\n'));
36
+ VALID_IDES.forEach((ide, index) => {
37
+ console.log(chalk.white(`${index + 1}. ${ide}`));
38
+ });
39
+ console.log(chalk.yellow('\nDigite o número da IDE desejada (ou pressione Enter para Windsurf):'));
40
+ const answer = await new Promise((resolve) => {
41
+ const rl = createInterface({
42
+ input: process.stdin,
43
+ output: process.stdout
44
+ });
45
+ rl.question('', (answer) => {
46
+ rl.close();
47
+ resolve(answer.trim());
48
+ });
49
+ });
50
+ if (answer === '') {
51
+ return 'windsurf'; // Default
52
+ }
53
+ const numChoice = parseInt(answer);
54
+ if (numChoice >= 1 && numChoice <= VALID_IDES.length) {
55
+ return VALID_IDES[numChoice - 1];
56
+ }
57
+ console.log(chalk.red('❌ Opção inválida. Por favor, digite um número entre 1 e 3.'));
58
+ // Loop continua para perguntar novamente
59
+ }
60
+ }
5
61
  const program = new Command();
6
62
  program
7
63
  .name('maestro')
@@ -9,18 +65,51 @@ program
9
65
  .version('1.0.0')
10
66
  .option('-f, --force', 'Sobrescreve arquivos existentes')
11
67
  .option('--minimal', 'Instala apenas workflows e rules')
12
- .option('--ide <ide>', 'IDE alvo: gemini, cursor, copilot, windsurf, all (default: all)', 'all')
68
+ .option('--ide <ide>', `IDE alvo: ${VALID_IDES.join(', ')} (opcional)`)
13
69
  .action(async (options) => {
14
- // Comportamento padrão: executa init quando chamado sem subcomando
15
- await init(options);
70
+ let selectedIDE = options.ide;
71
+ // Se não foi especificada, perguntar ao usuário
72
+ if (!selectedIDE) {
73
+ selectedIDE = await promptForIDEWithDefault();
74
+ }
75
+ else {
76
+ // Validar IDE se foi especificada
77
+ if (!VALID_IDES.includes(selectedIDE)) {
78
+ console.error(`❌ IDE inválida. Use: ${VALID_IDES.join(', ')}`);
79
+ console.log(chalk.cyan('\nOpções válidas:'));
80
+ VALID_IDES.forEach((ide, index) => {
81
+ console.log(chalk.white(` ${index + 1}. ${ide}`));
82
+ });
83
+ process.exit(1);
84
+ }
85
+ }
86
+ await init({ ...options, ide: selectedIDE });
16
87
  });
17
88
  program
18
89
  .command('init')
19
90
  .description('Inicializa Maestro no projeto atual')
20
91
  .option('-f, --force', 'Sobrescreve arquivos existentes')
21
92
  .option('--minimal', 'Instala apenas workflows e rules')
22
- .option('--ide <ide>', 'IDE alvo: gemini, cursor, copilot, windsurf, all (default: all)', 'all')
23
- .action(init);
93
+ .option('--ide <ide>', `IDE alvo: ${VALID_IDES.join(', ')} (opcional)`)
94
+ .action(async (options) => {
95
+ let selectedIDE = options.ide;
96
+ // Se não foi especificada, perguntar ao usuário
97
+ if (!selectedIDE) {
98
+ selectedIDE = await promptForIDE();
99
+ }
100
+ else {
101
+ // Validar IDE se foi especificada
102
+ if (!VALID_IDES.includes(selectedIDE)) {
103
+ console.error(`❌ IDE inválida. Use: ${VALID_IDES.join(', ')}`);
104
+ console.log(chalk.cyan('\nOpções válidas:'));
105
+ VALID_IDES.forEach((ide, index) => {
106
+ console.log(chalk.white(` ${index + 1}. ${ide}`));
107
+ });
108
+ process.exit(1);
109
+ }
110
+ }
111
+ init({ ...options, ide: selectedIDE });
112
+ });
24
113
  program
25
114
  .command('update')
26
115
  .description('Atualiza content para a última versão')
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@maestro-ai/cli",
3
- "version": "1.1.0",
4
- "description": "CLI para inicializar projetos com Maestro - Desenvolvimento assistido por IA",
3
+ "version": "1.3.0",
4
+ "description": "CLI para inicializar projetos Maestro File System - Orquestrador chat-first com workflows inteligentes",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",
7
7
  "bin": {
@@ -40,8 +40,14 @@
40
40
  "maestro",
41
41
  "ai",
42
42
  "development",
43
- "mcp",
44
- "cli"
43
+ "file-system",
44
+ "chat-first",
45
+ "workflows",
46
+ "orchestrator",
47
+ "cli",
48
+ "windsurf",
49
+ "cursor",
50
+ "antigravity"
45
51
  ],
46
52
  "author": "Matheus Luna",
47
53
  "license": "MIT"