aiteam-x 0.8.1

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 (3) hide show
  1. package/README.md +397 -0
  2. package/package.json +54 -0
  3. package/scripts/cli.mjs +106 -0
package/README.md ADDED
@@ -0,0 +1,397 @@
1
+ # AITeam Team Overview
2
+
3
+ **Painel visual em estilo pixel art para orquestrar e monitorar agentes BMAD em tempo real.**
4
+
5
+ [![Next.js](https://img.shields.io/badge/Next.js-15-black?logo=next.js)](https://nextjs.org/)
6
+ [![React](https://img.shields.io/badge/React-19-61dafb?logo=react)](https://react.dev/)
7
+ [![TypeScript](https://img.shields.io/badge/TypeScript-5-3178c6?logo=typescript)](https://www.typescriptlang.org/)
8
+ [![BMAD Method](https://img.shields.io/badge/BMAD-Method-ff6b6b)](https://github.com/bmad-method)
9
+ [![License](https://img.shields.io/badge/License-Proprietary-red)]()
10
+
11
+ ---
12
+
13
+ ## Visao Geral
14
+
15
+ O **AITeam Team Overview** e um dashboard interativo que transforma a gestao de agentes de IA em uma experiencia visual e intuitiva. Inspirado em jogos de simulacao tipo *sim manager*, o painel exibe agentes BMAD como personagens pixel art em um escritorio virtual, permitindo:
16
+
17
+ - **Visualizar** o status e a localizacao de cada agente em tempo real
18
+ - **Interagir** diretamente com agentes atraves de janelas de chat integradas
19
+ - **Orquestrar** workflows como Party Mode e brainstorming sessions
20
+ - **Monitorar** metricas de uso (mensagens, tokens in/out) por agente
21
+ - **Persistir** contexto e memorias entre sessoes de trabalho com extracao via LLM
22
+
23
+ O projeto utiliza o **BMAD Method** como framework de agentes, integrando-se nativamente com o **Cursor Agent CLI** para comunicacao bidirecional com LLMs.
24
+
25
+ ---
26
+
27
+ ## Screenshots
28
+
29
+ ### Dashboard Principal
30
+
31
+ ![Dashboard Principal](docs/screenshots/05-dashboard-clean.png)
32
+
33
+ *Escritorio virtual com Jarvis Office, Kitchen e workspaces individuais. Barra inferior com avatares e progresso do sprint (14/14 — 100%).*
34
+
35
+ ---
36
+
37
+ ### Janela de Chat com Agente
38
+
39
+ ![Chat com Agente](docs/screenshots/03-chat-window.png)
40
+
41
+ *Janela de conversa com BMad Master em tempo real. Cada agente responde com streaming de texto e suporte a Markdown.*
42
+
43
+ ---
44
+
45
+ ### Memory Vault
46
+
47
+ ![Memory Vault](docs/screenshots/02-memory-vault.png)
48
+
49
+ *Painel de gerenciamento de memorias por agente. Categorias: decisions, lessons, tasks, projects, handoffs. Busca BM25 em tempo real.*
50
+
51
+ ---
52
+
53
+ ### Filtros de Agentes
54
+
55
+ ![Filtros](docs/screenshots/04-filters.png)
56
+
57
+ *Filtros de Status (Todos / Trabalhando) e Modulo (BMGD / BMM / CORE) para visualizacao segmentada dos agentes.*
58
+
59
+ ---
60
+
61
+ ## Funcionalidades Principais
62
+
63
+ ### Dashboard Pixel Art
64
+ - Salas compartilhadas: **Jarvis Office**, **Kitchen** — com contexto de atividade dos agentes
65
+ - Grid de workspaces individuais por agente com indicadores de modulo (BMGD / BMM / CORE)
66
+ - Avatares pixel art com status visual em tempo real
67
+ - Barra inferior com avatares compactos e timeline do sprint com progresso granular por story
68
+ - Ciclo dia/noite e efeitos de ambiente
69
+
70
+ ### Interacao com Agentes
71
+ - Selecao de agente (click) ou multi-selecao (Ctrl+click) para comandos em lote
72
+ - Janelas de conversa redimensionaveis com streaming SSE em tempo real
73
+ - Bubble de "pensando" animado durante processamento
74
+ - Rendering completo de Markdown nas respostas
75
+ - Botao de stop para cancelar processamento em andamento
76
+ - Historico de conversa persistido entre reloads
77
+ - Sistema de z-index dinamico (bring-to-front ao clicar)
78
+ - Selecao e copia de texto dentro das janelas
79
+
80
+ ### Seletor de Modelo e Filtros
81
+ - **Model Bar**: selecao do modelo LLM aplicado a todos os agentes (Padrao do Cursor, Claude Sonnet, etc.)
82
+ - **Filtro de Status**: Todos / Trabalhando — exibe contador em tempo real (ex: 14/14)
83
+ - **Filtro de Modulo**: BMGD / BMM / CORE — segmenta agentes por area de atuacao
84
+
85
+ ### Orquestracao BMAD
86
+ - Deteccao automatica de Party Mode e workflows ativos
87
+ - Agentes se movem dinamicamente para salas conforme o workflow
88
+ - Sessao de estado persistida em disco e sincronizada via SSE
89
+ - Metricas de mensagens e tokens por agente
90
+
91
+ ### Sistema de Memoria Persistente (v2.1)
92
+ - **Memory Vault**: painel visual completo com 5 categorias (decisions, lessons, tasks, projects, handoffs)
93
+ - **Auto-extract via LLM**: ao fechar uma sessao, o sistema analisa a conversa e extrai memorias estruturadas automaticamente
94
+ - **Badge 🤖 llm**: entradas extraidas automaticamente ficam marcadas por 10 minutos com opcao de veto
95
+ - **Busca BM25**: busca semantica por relevancia dentro do vault de cada agente
96
+ - **Injecao de contexto**: memorias relevantes injetadas automaticamente ao iniciar novas sessoes (budget de 2.000 tokens)
97
+ - **Auto-save**: conversas salvas a cada 30s + save on unload via `sendBeacon`
98
+ - **Checkpoint de sessao**: historico preservado mesmo em reinicios inesperados
99
+ - **Memoria compartilhada**: `_project.md` injetado em todos os agentes como contexto global
100
+
101
+ ### Portabilidade e Instalacao (v1.0)
102
+ - **Discovery dinamico**: detecta agentes BMAD automaticamente via CSV/YAML — sem hardcode
103
+ - **Cross-platform**: funciona em Windows, macOS e Linux
104
+ - **Wizard de setup web**: `/setup` no browser — 3 fases animadas: scan da maquina, revisao, configuracao passo a passo
105
+ - **Wizard de setup CLI**: `npm run setup` — alternativa interativa no terminal (6 passos)
106
+ - **Health gate**: se nao configurado, redireciona para `/setup` automaticamente
107
+ - **Config flexivel**: `aiteam.config.json` local + `AITEAM_BMAD_ROOT` para instancias externas/CI
108
+
109
+ ---
110
+
111
+ ## Stack Tecnologico
112
+
113
+ | Camada | Tecnologia | Versao |
114
+ |--------|-----------|--------|
115
+ | Framework | Next.js (App Router) | 15.x |
116
+ | UI | React | 19.x |
117
+ | Linguagem | TypeScript | 5.x |
118
+ | Estilo | CSS custom (pixel art design system) | — |
119
+ | Fonte | VT323 (Google Fonts) | — |
120
+ | Backend | Next.js API Routes + SSE | — |
121
+ | Busca | MiniSearch (BM25) | — |
122
+ | Agentes | Cursor Agent CLI | latest |
123
+ | Parsing | yaml (npm) | 2.8.x |
124
+ | Framework de Agentes | BMAD Method | — |
125
+
126
+ ---
127
+
128
+ ## Inicio Rapido
129
+
130
+ ### Pre-requisitos
131
+
132
+ | Requisito | Obrigatorio | Notas |
133
+ |-----------|-------------|-------|
134
+ | Node.js >= 18 | Sim | `node --version` |
135
+ | BMAD Framework | Sim | Ver [Guia de Instalacao](docs/installation-guide.md) |
136
+ | Cursor IDE | Sim | Gera o Cursor Agent CLI na primeira abertura |
137
+ | Git | Sim | — |
138
+
139
+ > **Plataformas suportadas:** Windows 10/11, macOS, Linux
140
+
141
+ ### Instalacao
142
+
143
+ **Opcao 1 — Um comando (recomendado):**
144
+
145
+ ```bash
146
+ npx aiteam-x@latest
147
+ ```
148
+
149
+ Cria o projeto no diretorio atual (deve estar vazio). Ou especifique o nome da pasta:
150
+
151
+ ```bash
152
+ npx aiteam-x@latest meu-projeto
153
+ ```
154
+
155
+ O comando baixa o template, instala dependencias, executa o wizard de configuracao e inicia o servidor automaticamente.
156
+
157
+ **Opcao 2 — Instalacao manual:**
158
+
159
+ ```bash
160
+ # 1. Clonar o repositorio
161
+ git clone https://github.com/INOSX/AITeam.git
162
+ cd AITeam
163
+
164
+ # 2. Instalar dependencias
165
+ npm install
166
+
167
+ # 3. Executar wizard de configuracao
168
+ npm run setup
169
+
170
+ # 4. Iniciar o servidor de desenvolvimento
171
+ npm run dev
172
+ ```
173
+
174
+ O painel estara disponivel em **http://localhost:3000**.
175
+
176
+ > Se o setup nao foi concluido, o sistema redireciona automaticamente para `http://localhost:3000/setup` — um wizard animado que detecta o ambiente, mostra o que esta pronto e permite configurar tudo pelo browser.
177
+
178
+ > **Alternativa CLI:** `npm run setup` executa o wizard interativo no terminal.
179
+
180
+ ### Scripts Disponiveis
181
+
182
+ | Comando | Descricao |
183
+ |---------|-----------|
184
+ | `npm run setup` | **Wizard interativo de configuracao** (primeira instalacao) |
185
+ | `npm run dev` | Inicia o servidor de desenvolvimento (porta 3000) |
186
+ | `npm run build` | Gera o build de producao |
187
+ | `npm run start` | Inicia o servidor de producao |
188
+ | `npm run lint` | Executa o linter (ESLint) |
189
+
190
+ ### Scripts Utilitarios
191
+
192
+ | Script | Descricao |
193
+ |--------|-----------|
194
+ | `node scripts/extract-memories.mjs --all` | Extrai memorias de conversas historicas via LLM |
195
+ | `node scripts/extract-memories.mjs --agent bmad-master` | Extrai memorias de um agente especifico |
196
+ | `node scripts/extract-memories.mjs --all --dry-run` | Simula extracao sem salvar |
197
+ | `node scripts/import-conversations.mjs` | Importa historico de conversas para o vault |
198
+
199
+ > Todos os scripts requerem o servidor rodando em `localhost:3000`.
200
+
201
+ ---
202
+
203
+ ## Estrutura do Projeto
204
+
205
+ ```
206
+ AITeam/
207
+ ├── app/ # Next.js App Router
208
+ │ ├── api/ # API Routes (backend)
209
+ │ │ ├── agents/
210
+ │ │ │ ├── route.ts # GET: lista agentes com status
211
+ │ │ │ └── command/route.ts # POST: envia comando via SSE
212
+ │ │ ├── config/route.ts # GET: configuracao BMAD
213
+ │ │ ├── memory/
214
+ │ │ │ ├── route.ts # GET/POST: memoria e conversas (legado)
215
+ │ │ │ ├── vault/route.ts # GET/POST/PUT/DELETE: vault estruturado
216
+ │ │ │ ├── search/route.ts # GET: busca BM25
217
+ │ │ │ ├── checkpoint/route.ts # POST: checkpoint de sessao
218
+ │ │ │ ├── sleep/route.ts # POST: encerra sessao + enfileira extracao LLM
219
+ │ │ │ └── extract/route.ts # POST: trigger manual de extracao LLM
220
+ │ │ ├── session/
221
+ │ │ │ ├── route.ts # GET/POST: sessao ativa
222
+ │ │ │ └── stream/route.ts # GET: SSE de mudancas de sessao
223
+ │ │ ├── sprint/route.ts # GET/POST: status do sprint
224
+ │ │ └── workflows/route.ts # GET: workflows disponiveis
225
+ │ ├── actions/
226
+ │ │ └── setup-save.ts # Server Action: salva aiteam.config.json
227
+ │ ├── setup/
228
+ │ │ ├── page.tsx # Pagina de setup (health gate + Server Component)
229
+ │ │ └── SetupWizard.tsx # Wizard animado 3 fases (Client Component)
230
+ │ ├── globals.css # Design system pixel art (800+ linhas)
231
+ │ ├── layout.tsx # Root layout (VT323, pt-BR)
232
+ │ ├── error.tsx # Error boundary
233
+ │ └── page.tsx # Pagina principal (health gate)
234
+
235
+ ├── components/ # Componentes React
236
+ │ ├── rooms/ # Salas do escritorio virtual
237
+ │ │ ├── ConferenceRoom.tsx
238
+ │ │ ├── JarvisOffice.tsx
239
+ │ │ └── Kitchen.tsx
240
+ │ ├── AgentsProvider.tsx # Context Provider global
241
+ │ ├── CommandPopup.tsx # Popup multi-agente
242
+ │ ├── FilterContext.tsx # Context de filtros (status + modulo)
243
+ │ ├── Layout.tsx # Shell (TopBar + ModelBar + BottomBar)
244
+ │ ├── MainContent.tsx # Orquestrador principal (~500 linhas)
245
+ │ ├── MarkdownRenderer.tsx # Renderer custom de Markdown
246
+ │ ├── MemoryVault.tsx # Dashboard do Memory Vault (modal)
247
+ │ ├── ModelBar.tsx # Barra de selecao de modelo e filtros
248
+ │ ├── PixelAvatar.tsx # Avatar SVG pixel art
249
+ │ ├── SpeechBubbleOverlay.tsx # Sistema de chat overlay
250
+ │ ├── ThinkingBubble.tsx # Indicador de pensamento animado
251
+ │ ├── WorkspaceCell.tsx # Celula de workspace individual
252
+ │ └── WorkspaceGrid.tsx # Grid de workspaces
253
+
254
+ ├── lib/ # Logica de negocio e utilitarios
255
+ │ ├── aiteam-config.ts # Config loader (env var > arquivo > defaults)
256
+ │ ├── health.ts # Health check: BMAD, Cursor CLI, config
257
+ │ ├── setup-discovery.ts # Discovery ampliado para o wizard web
258
+ │ ├── bmad/ # Integracao BMAD
259
+ │ │ ├── discovery.ts # Scanner dinamico BMAD + deteccao Cursor CLI
260
+ │ │ ├── agent-mapping.ts # Mapeamento BmadAgent -> Agent
261
+ │ │ ├── chat-sessions.ts # Persistencia de sessoes de chat
262
+ │ │ ├── parse-agents.ts # Parser do agent-manifest.csv
263
+ │ │ ├── parse-config.ts # Parser do config.yaml
264
+ │ │ ├── parse-persona.ts # Parser de persona (.mdc)
265
+ │ │ ├── parse-session.ts # Estado de sessao + SSE
266
+ │ │ ├── parse-sprint.ts # Parser do sprint-status.yaml
267
+ │ │ └── parse-workflows.ts # Parser de workflows
268
+ │ ├── memory/ # Sistema de memoria v2
269
+ │ │ ├── extract.ts # Motor de extracao LLM
270
+ │ │ ├── inject.ts # Injecao de contexto (BM25 + budget)
271
+ │ │ ├── session.ts # Ciclo de vida de sessao (sleep/recover)
272
+ │ │ ├── types.ts # Tipos do sistema de memoria
273
+ │ │ └── vault.ts # CRUD do vault estruturado
274
+ │ ├── model-config.ts # Opcoes de modelos LLM disponiveis
275
+ │ └── types.ts # Tipos TypeScript globais
276
+
277
+ ├── .memory/ # Memory Bank (persistente, gitignored)
278
+ │ ├── _project.md # Contexto global — injetado em todos agentes
279
+ │ ├── {agent-id}.md # Memory bank individual por agente
280
+ │ ├── conversations/ # Historico de conversas (JSON)
281
+ │ └── .vault/ # Vault estruturado e fila de extracao
282
+
283
+ ├── docs/ # Documentacao do projeto
284
+ │ ├── screenshots/ # Screenshots da interface
285
+ │ ├── installation-guide.md # Guia completo de instalacao
286
+ │ ├── architecture.md # Arquitetura do sistema
287
+ │ ├── api-reference.md # Referencia completa da API
288
+ │ ├── developer-guide.md # Guia do desenvolvedor
289
+ │ ├── user-guide.md # Guia do usuario final
290
+ │ ├── memory-system.md # Arquitetura tecnica do sistema de memoria
291
+ │ ├── memory-system-guide.md # Guia funcional do sistema de memoria
292
+ │ ├── agent-catalog.md # Catalogo completo dos agentes BMAD
293
+ │ └── sprint-status.yaml # Status do sprint atual
294
+
295
+ ├── scripts/ # Scripts utilitarios
296
+ │ ├── setup.mjs # Wizard de configuracao interativo (6 passos)
297
+ │ ├── extract-memories.mjs # Extracao em lote via LLM
298
+ │ └── import-conversations.mjs # Importacao de historico para o vault
299
+
300
+ ├── aiteam.config.example.json # Exemplo de configuracao (referencia)
301
+ ├── .cursor/ # Regras e skills do Cursor IDE
302
+ │ └── rules/bmad/ # Regras BMAD (.mdc): agentes e workflows
303
+
304
+ ├── package.json
305
+ ├── tsconfig.json
306
+ ├── next.config.ts
307
+ └── .gitignore
308
+ ```
309
+
310
+ ---
311
+
312
+ ## Documentacao
313
+
314
+ | Documento | Nivel | Descricao |
315
+ |-----------|-------|-----------|
316
+ | [Guia de Instalacao](docs/installation-guide.md) | Iniciante | Instalacao passo a passo, wizard de setup, solucao de problemas |
317
+ | [Arquitetura](docs/architecture.md) | Tecnico/Arquitetural | Diagramas, fluxos de dados, decisoes de design |
318
+ | [Referencia da API](docs/api-reference.md) | Tecnico | Endpoints, parametros, exemplos de request/response |
319
+ | [Guia do Desenvolvedor](docs/developer-guide.md) | Desenvolvedor | Setup, convencoes, como contribuir |
320
+ | [Guia do Usuario](docs/user-guide.md) | Usuario Final | Como usar o painel, interagir com agentes, Memory Vault |
321
+ | [Sistema de Memoria (tecnico)](docs/memory-system.md) | Tecnico/Conceitual | Arquitetura em camadas do sistema de memoria |
322
+ | [Guia de Memoria (funcional)](docs/memory-system-guide.md) | Usuario Final | Como usar o Memory Vault, estudos de caso, boas praticas |
323
+ | [Catalogo de Agentes](docs/agent-catalog.md) | Referencia | Todos os agentes, especialidades e como trabalhar com cada um |
324
+
325
+ ---
326
+
327
+ ## Agentes BMAD
328
+
329
+ O sistema descobre agentes automaticamente a partir do `bmad/_cfg/agent-manifest.csv`. A instalacao padrao inclui 14 agentes:
330
+
331
+ | Persona | Papel | Modulo |
332
+ |---------|-------|--------|
333
+ | **BMad Master** | Orquestrador principal, custodio de conhecimento | core |
334
+ | **BMad Builder** | Criacao de modulos, agentes e workflows BMAD | core |
335
+ | **Mary** | Business Analyst — pesquisa e requisitos de negocio | bmm |
336
+ | **John** | Product Manager — PRD, epicos, gestao de produto | bmm |
337
+ | **Winston** | Architect — arquitetura de sistemas e tech spec | bmm |
338
+ | **Sally** | UX Designer — design de experiencia e interface | bmm |
339
+ | **Bob** | Scrum Master — sprint planning e revisao de codigo | bmm |
340
+ | **Amelia** | Developer — implementacao de stories e features | bmm |
341
+ | **Murat** | Test Architect — estrategia e design de testes | bmm |
342
+ | **Paige** | Tech Writer — documentacao tecnica e knowledge | bmm |
343
+ | **Cloud Dragonborn** | Game Architect — arquitetura e sistemas de jogo | bmgd |
344
+ | **Samus Shepard** | Game Designer — GDD, narrativa e design de jogo | bmgd |
345
+ | **Link Freeman** | Game Developer — implementacao de jogo | bmgd |
346
+ | **Max** | Game Scrum Master — gestao agil para game dev | bmgd |
347
+
348
+ > Consulte o [Catalogo de Agentes](docs/agent-catalog.md) para detalhes sobre especialidades e comandos de cada agente.
349
+
350
+ ---
351
+
352
+ ## Configuracao
353
+
354
+ O AITEAM-X usa um arquivo `aiteam.config.json` local (gitignored) gerado pelo `npm run setup`. Para configuracao avancada, crie um `.env.local`:
355
+
356
+ ```env
357
+ # Caminho alternativo para a instalacao BMAD
358
+ # Util para: BMAD em outro diretorio, CI/CD, multiplos projetos
359
+ AITEAM_BMAD_ROOT=/caminho/para/seu/projeto-bmad
360
+
361
+ # Sobrescreve o diretorio de memoria (util para testes)
362
+ MEMORY_DIR_OVERRIDE=/caminho/customizado/.memory
363
+ ```
364
+
365
+ **Prioridade de configuracao para `bmadRoot`:**
366
+ ```
367
+ AITEAM_BMAD_ROOT (env var) > aiteam.config.json > "./" (padrao)
368
+ ```
369
+
370
+ Consulte o [Guia de Instalacao](docs/installation-guide.md) para todos os cenarios de configuracao.
371
+
372
+ ---
373
+
374
+ ## Contribuindo
375
+
376
+ 1. Crie uma branch a partir de `develop`
377
+ 2. Faca suas alteracoes seguindo as convencoes do projeto
378
+ 3. Certifique-se de que `npm run lint` e `npm run build` passam
379
+ 4. Abra um Pull Request para `develop`
380
+
381
+ Consulte o [Guia do Desenvolvedor](docs/developer-guide.md) para detalhes.
382
+
383
+ ---
384
+
385
+ ## Licenca
386
+
387
+ Projeto proprietario — **INOSX, Inc.** Todos os direitos reservados.
388
+
389
+ ---
390
+
391
+ ## Autor
392
+
393
+ **Mario Mayerle (MaMFLux)** — [INOSX](https://inosx.com)
394
+
395
+ ---
396
+
397
+ *Construido com o BMAD Method — onde agentes de IA trabalham como um time.*
package/package.json ADDED
@@ -0,0 +1,54 @@
1
+ {
2
+ "name": "aiteam-x",
3
+ "version": "0.8.1",
4
+ "description": "Painel pixel art para orquestrar agentes BMAD em tempo real",
5
+ "keywords": [
6
+ "bmad",
7
+ "ai",
8
+ "agents",
9
+ "cursor",
10
+ "dashboard"
11
+ ],
12
+ "repository": {
13
+ "type": "git",
14
+ "url": "https://github.com/INOSX/AITeam.git"
15
+ },
16
+ "license": "UNLICENSED",
17
+ "private": false,
18
+ "files": [
19
+ "scripts/cli.mjs"
20
+ ],
21
+ "bin": {
22
+ "aiteam-x": "./scripts/cli.mjs"
23
+ },
24
+ "scripts": {
25
+ "dev": "next dev",
26
+ "build": "next build",
27
+ "start": "next start",
28
+ "lint": "next lint",
29
+ "test": "vitest run",
30
+ "test:watch": "vitest",
31
+ "setup": "node scripts/setup.mjs"
32
+ },
33
+ "dependencies": {
34
+ "@react-three/drei": "^10.7.7",
35
+ "@react-three/fiber": "^9.5.0",
36
+ "minisearch": "^7.2.0",
37
+ "next": "^15.0.0",
38
+ "react": "^19.0.0",
39
+ "react-dom": "^19.0.0",
40
+ "three": "^0.183.2",
41
+ "three-pathfinding": "^1.3.0",
42
+ "yaml": "^2.8.2"
43
+ },
44
+ "devDependencies": {
45
+ "@types/node": "^22",
46
+ "@types/react": "^19",
47
+ "@types/react-dom": "^19",
48
+ "@vitest/coverage-v8": "^4.1.0",
49
+ "eslint": "^9",
50
+ "eslint-config-next": "^15.0.0",
51
+ "typescript": "^5",
52
+ "vitest": "^4.1.0"
53
+ }
54
+ }
@@ -0,0 +1,106 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * AITEAM-X CLI — Instalação simplificada via npx
4
+ *
5
+ * Uso:
6
+ * npx aiteam-x@latest → cria no diretório atual
7
+ * npx aiteam-x@latest meu-projeto → cria em meu-projeto/
8
+ *
9
+ * Fluxo: degit (baixa template) → npm install → npm run setup → npm run dev
10
+ */
11
+
12
+ import { execSync, spawn } from "child_process";
13
+ import fs from "fs";
14
+ import path from "path";
15
+ import { fileURLToPath } from "url";
16
+
17
+ const __dirname = path.dirname(fileURLToPath(import.meta.url));
18
+ const REPO = "INOSX/AITeam";
19
+
20
+ const C = {
21
+ green: (s) => `\x1b[32m${s}\x1b[0m`,
22
+ yellow: (s) => `\x1b[33m${s}\x1b[0m`,
23
+ cyan: (s) => `\x1b[36m${s}\x1b[0m`,
24
+ bold: (s) => `\x1b[1m${s}\x1b[0m`,
25
+ dim: (s) => `\x1b[2m${s}\x1b[0m`,
26
+ };
27
+
28
+ function isDirEmpty(dir) {
29
+ if (!fs.existsSync(dir)) return true;
30
+ const entries = fs.readdirSync(dir);
31
+ return entries.length === 0;
32
+ }
33
+
34
+ function main() {
35
+ const targetDir = process.argv[2] || ".";
36
+ const cwd = process.cwd();
37
+ const absTarget = path.resolve(cwd, targetDir);
38
+
39
+ console.log("\n" + C.bold(C.cyan("╔══════════════════════════════════╗")));
40
+ console.log(C.bold(C.cyan("║ AITEAM-X — Instalação rápida ║")));
41
+ console.log(C.bold(C.cyan("╚══════════════════════════════════╝")) + "\n");
42
+
43
+ // Se diretório atual, verificar se está vazio
44
+ if (targetDir === "." && !isDirEmpty(cwd)) {
45
+ console.log(C.yellow(" O diretório atual não está vazio."));
46
+ console.log(C.dim(" Use: npx aiteam-x@latest nome-do-projeto"));
47
+ console.log(C.dim(" Ou crie uma pasta vazia e execute o comando dentro dela.\n"));
48
+ process.exit(1);
49
+ }
50
+
51
+ if (targetDir !== "." && fs.existsSync(absTarget) && !isDirEmpty(absTarget)) {
52
+ console.log(C.yellow(` O diretório "${targetDir}" já existe e não está vazio.\n`));
53
+ process.exit(1);
54
+ }
55
+
56
+ try {
57
+ // 1. Baixar template via degit
58
+ console.log(C.bold("1. Baixando template AITEAM-X..."));
59
+ execSync(`npx degit@latest ${REPO} ${targetDir}`, {
60
+ stdio: "inherit",
61
+ cwd,
62
+ });
63
+ console.log(C.green(" ✓ Template baixado\n"));
64
+
65
+ // 2. npm install
66
+ console.log(C.bold("2. Instalando dependências..."));
67
+ execSync("npm install", {
68
+ stdio: "inherit",
69
+ cwd: absTarget,
70
+ });
71
+ console.log(C.green(" ✓ Dependências instaladas\n"));
72
+
73
+ // 3. npm run setup
74
+ console.log(C.bold("3. Executando wizard de configuração..."));
75
+ execSync("npm run setup", {
76
+ stdio: "inherit",
77
+ cwd: absTarget,
78
+ });
79
+ console.log(C.green(" ✓ Configuração concluída\n"));
80
+
81
+ // 4. Iniciar servidor
82
+ console.log(C.bold("4. Iniciando servidor de desenvolvimento..."));
83
+ console.log(C.dim(" Acesse http://localhost:3000 quando estiver pronto.\n"));
84
+
85
+ const child = spawn("npm", ["run", "dev"], {
86
+ stdio: "inherit",
87
+ cwd: absTarget,
88
+ shell: true,
89
+ });
90
+
91
+ child.on("error", (err) => {
92
+ console.error(C.yellow("Erro ao iniciar:"), err);
93
+ process.exit(1);
94
+ });
95
+
96
+ child.on("exit", (code) => {
97
+ process.exit(code ?? 0);
98
+ });
99
+ } catch (err) {
100
+ if (err.status !== undefined) process.exit(err.status);
101
+ console.error("\n" + C.yellow("Erro:"), err.message);
102
+ process.exit(1);
103
+ }
104
+ }
105
+
106
+ main();