@nimbuslab/cli 0.9.0 → 0.10.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/README.md CHANGED
@@ -1,105 +1,118 @@
1
1
  # @nimbuslab/cli
2
2
 
3
- CLI para criar projetos Next.js com templates modernos e prontos para producao.
4
-
5
- ## Instalacao
3
+ CLI oficial da nimbuslab para criar, analisar e migrar projetos.
6
4
 
7
5
  ```bash
8
- # Via bun (recomendado)
9
6
  bun add -g @nimbuslab/cli
10
-
11
- # Via npm
12
- npm install -g @nimbuslab/cli
13
7
  ```
14
8
 
15
- ## Uso
16
-
17
- ```bash
18
- # Criar novo projeto (interativo)
19
- nimbus create
9
+ ---
20
10
 
21
- # Criar projeto com nome
22
- nimbus create meu-projeto
11
+ ## Comandos
23
12
 
24
- # Modo automatico
25
- nimbus create meu-projeto -y
13
+ | Comando | Descricao | Docs |
14
+ |---------|-----------|------|
15
+ | `nimbus create` | Criar novo projeto | [docs/create.md](./docs/create.md) |
16
+ | `nimbus analyze` | Analisar stack existente | [docs/analyze.md](./docs/analyze.md) |
17
+ | `nimbus upgrade` | Planejar upgrades | [docs/upgrade.md](./docs/upgrade.md) |
18
+ | `nimbus migrate` | Migrar de outras tecnologias | [docs/migrate.md](./docs/migrate.md) |
26
19
 
27
- # Ajuda
28
- nimbus help
29
- ```
30
-
31
- ## Templates
20
+ ---
32
21
 
33
- | Template | Descricao | Stack |
34
- |----------|-----------|-------|
35
- | Landing Page | Site institucional | Next.js 16 + Tailwind 4 + shadcn/ui |
36
- | Web App | Aplicacao com auth | Landing + Better Auth + Prisma |
37
- | Monorepo | Multiplos apps | Turborepo + apps/packages |
22
+ ## Quick Start
38
23
 
39
- ### Flags de template
24
+ ### Criar landing page
40
25
 
41
26
  ```bash
42
- # Landing page
43
27
  nimbus create meu-site --landing
28
+ cd meu-site
29
+ bun dev
30
+ ```
31
+
32
+ ### Criar web app
44
33
 
45
- # Web app com autenticacao
34
+ ```bash
46
35
  nimbus create meu-app --app
36
+ cd meu-app
37
+ bun setup
38
+ bun dev
39
+ ```
40
+
41
+ ### Analisar projeto existente
47
42
 
48
- # Monorepo
49
- nimbus create meu-monorepo --turborepo
43
+ ```bash
44
+ nimbus analyze
45
+ nimbus upgrade --plan
50
46
  ```
51
47
 
52
- ## Opcoes
48
+ ---
53
49
 
54
- | Flag | Descricao |
55
- |------|-----------|
56
- | `-y, --yes` | Aceitar defaults |
57
- | `--no-git` | Nao inicializar Git |
58
- | `--no-install` | Nao instalar dependencias |
59
- | `--template <url>` | Usar template customizado |
50
+ ## Templates
60
51
 
61
- ## Exemplos
52
+ | Template | Descricao | Docs |
53
+ |----------|-----------|------|
54
+ | `--landing` | Next.js 16 + Tailwind 4 + shadcn/ui | [docs/create.md#landing](./docs/create.md#landing-page---landing) |
55
+ | `--app` | Landing + Better Auth + Drizzle | [docs/create.md#app](./docs/create.md#web-app---app) |
56
+ | `--turborepo` | Monorepo com apps e packages | [docs/create.md#turborepo](./docs/create.md#turborepo---turborepo) |
57
+ | `--package` | Pacote npm com tsup + CI/CD | [docs/package.md](./docs/package.md) |
62
58
 
63
- ```bash
64
- # Landing page rapida
65
- nimbus create meu-site --landing -y
59
+ **Repos Open Source:**
60
+ - [create-next-landing](https://github.com/nimbuslab/create-next-landing)
61
+ - [create-next-app](https://github.com/nimbuslab/create-next-app)
62
+ - [create-turborepo](https://github.com/nimbuslab/create-turborepo)
66
63
 
67
- # Web app sem instalar deps
68
- nimbus create meu-app --app --no-install
64
+ ---
69
65
 
70
- # Template customizado
71
- nimbus create projeto --template usuario/repositorio
72
- ```
66
+ ## Stack Alvo
67
+
68
+ | Categoria | Tecnologia |
69
+ |-----------|------------|
70
+ | Framework | Next.js 16+ |
71
+ | Runtime | React 19+ |
72
+ | Styling | Tailwind CSS 4+ |
73
+ | Components | shadcn/ui |
74
+ | Package Manager | Bun |
75
+ | Auth | Better Auth |
76
+ | Database | Drizzle ORM |
77
+ | Monorepo | Turborepo |
78
+
79
+ ---
80
+
81
+ ## Documentacao
82
+
83
+ | Arquivo | Conteudo |
84
+ |---------|----------|
85
+ | [docs/create.md](./docs/create.md) | Templates, opcoes, fluxo interativo |
86
+ | [docs/package.md](./docs/package.md) | Criar pacotes npm |
87
+ | [docs/analyze.md](./docs/analyze.md) | Deteccao de stack, recomendacoes |
88
+ | [docs/upgrade.md](./docs/upgrade.md) | Breaking changes, codemods |
89
+ | [docs/migrate.md](./docs/migrate.md) | Strangler Fig, estrategias |
90
+ | [MIGRATION-ROADMAP.md](./MIGRATION-ROADMAP.md) | Roadmap de migracao |
91
+
92
+ ---
73
93
 
74
94
  ## Requisitos
75
95
 
76
96
  - [Bun](https://bun.sh) - Runtime e package manager
77
97
  - [Git](https://git-scm.com) - Controle de versao
78
98
 
79
- ### Instalando Bun
80
-
81
99
  ```bash
82
- # Linux/Mac
83
100
  curl -fsSL https://bun.sh/install | bash
84
-
85
- # Windows (PowerShell)
86
- powershell -c "irm bun.sh/install.ps1 | iex"
87
101
  ```
88
102
 
89
- ## Templates Open Source
103
+ ---
90
104
 
91
- Os templates publicos estao disponiveis em:
105
+ ## Desenvolvimento
92
106
 
93
- - [create-next-landing](https://github.com/nimbuslab/create-next-landing) - Landing page
94
- - [create-next-app](https://github.com/nimbuslab/create-next-app) - Web app com auth
95
- - [create-turborepo](https://github.com/nimbuslab/create-turborepo) - Monorepo
96
-
97
- ## Stack
107
+ ```bash
108
+ gh repo clone nimbuslab/cli
109
+ cd cli
110
+ bun install
111
+ bun run dev
112
+ ```
98
113
 
99
- - **Runtime:** Bun
100
- - **Prompts:** @clack/prompts
101
- - **Cores:** picocolors
114
+ ---
102
115
 
103
116
  ## Licenca
104
117
 
105
- MIT - [nimbuslab](https://nimbuslab.com.br)
118
+ UNLICENSED - [nimbuslab](https://nimbuslab.com.br) 2026
package/dist/index.js CHANGED
@@ -147,7 +147,7 @@ var require_src = __commonJS((exports, module) => {
147
147
  });
148
148
 
149
149
  // src/index.ts
150
- var import_picocolors6 = __toESM(require_picocolors(), 1);
150
+ var import_picocolors7 = __toESM(require_picocolors(), 1);
151
151
 
152
152
  // node_modules/@clack/core/dist/index.mjs
153
153
  var import_sisteransi = __toESM(require_src(), 1);
@@ -2283,6 +2283,182 @@ function printUpgradePlan(name, plan) {
2283
2283
  console.log();
2284
2284
  }
2285
2285
 
2286
+ // src/commands/lola.ts
2287
+ var import_picocolors6 = __toESM(require_picocolors(), 1);
2288
+ import { existsSync as existsSync2 } from "fs";
2289
+ import { join as join3 } from "path";
2290
+ var LOLA_DIR = join3(process.env.HOME || "~", ".lola");
2291
+ var LOLA_REPO = "git@github.com:nimbuslab/lola.git";
2292
+ var USER_MEMORY = join3(process.env.HOME || "~", ".claude", "USER_MEMORY.md");
2293
+ async function installLola() {
2294
+ console.log();
2295
+ console.log(import_picocolors6.default.cyan(" Lola - Code Agent da nimbuslab"));
2296
+ console.log(import_picocolors6.default.dim(" ==============================="));
2297
+ console.log();
2298
+ const isUpdate = existsSync2(LOLA_DIR);
2299
+ if (isUpdate) {
2300
+ console.log(import_picocolors6.default.dim(` Lola ja instalada em ${LOLA_DIR}`));
2301
+ console.log(import_picocolors6.default.cyan(" Atualizando..."));
2302
+ const result = Bun.spawnSync(["git", "pull", "--quiet"], {
2303
+ cwd: LOLA_DIR,
2304
+ stdout: "inherit",
2305
+ stderr: "inherit"
2306
+ });
2307
+ if (result.exitCode !== 0) {
2308
+ console.log(import_picocolors6.default.red(" Erro ao atualizar Lola"));
2309
+ process.exit(1);
2310
+ }
2311
+ console.log(import_picocolors6.default.green(" Atualizado!"));
2312
+ } else {
2313
+ console.log(import_picocolors6.default.cyan(` Instalando Lola em ${LOLA_DIR}...`));
2314
+ const result = Bun.spawnSync(["git", "clone", "--quiet", LOLA_REPO, LOLA_DIR], {
2315
+ stdout: "inherit",
2316
+ stderr: "inherit"
2317
+ });
2318
+ if (result.exitCode !== 0) {
2319
+ console.log(import_picocolors6.default.red(" Erro ao clonar repositorio"));
2320
+ console.log(import_picocolors6.default.dim(" Verifique se tem acesso ao repo nimbuslab/lola"));
2321
+ process.exit(1);
2322
+ }
2323
+ console.log(import_picocolors6.default.green(" Instalado!"));
2324
+ }
2325
+ const claudeDir = join3(process.env.HOME || "~", ".claude");
2326
+ if (!existsSync2(USER_MEMORY)) {
2327
+ console.log();
2328
+ console.log(import_picocolors6.default.cyan(" Criando USER_MEMORY.md..."));
2329
+ await Bun.$`mkdir -p ${claudeDir}`;
2330
+ const content = `# User Memory
2331
+
2332
+ Memoria persistente para sessoes Claude Code
2333
+
2334
+ ---
2335
+
2336
+ ## Configuracoes da Lola
2337
+
2338
+ \`\`\`
2339
+ lola_profile: millennial
2340
+ \`\`\`
2341
+
2342
+ ---
2343
+
2344
+ ## Ultima Sessao
2345
+
2346
+ (sera preenchido automaticamente)
2347
+
2348
+ ---
2349
+ `;
2350
+ await Bun.write(USER_MEMORY, content);
2351
+ console.log(import_picocolors6.default.green(" USER_MEMORY.md criado!"));
2352
+ }
2353
+ console.log();
2354
+ console.log(import_picocolors6.default.green(" Instalacao concluida!"));
2355
+ console.log();
2356
+ console.log(import_picocolors6.default.bold(" Para usar a Lola:"));
2357
+ console.log(import_picocolors6.default.dim(" lola ") + import_picocolors6.default.white("# Iniciar sessao"));
2358
+ console.log(import_picocolors6.default.dim(' lola suggest "x" ') + import_picocolors6.default.white("# Sugerir melhoria"));
2359
+ console.log();
2360
+ console.log(import_picocolors6.default.bold(" Para mudar perfil, edite ~/.claude/USER_MEMORY.md:"));
2361
+ console.log(import_picocolors6.default.dim(" lola_profile: millennial|genz|profissional|nerd|chill"));
2362
+ console.log();
2363
+ }
2364
+ async function suggestImprovement(message) {
2365
+ if (!message) {
2366
+ console.log(import_picocolors6.default.red(" Erro: forne\xE7a uma mensagem"));
2367
+ console.log(import_picocolors6.default.dim(' Uso: nimbus lola suggest "sua sugestao aqui"'));
2368
+ process.exit(1);
2369
+ }
2370
+ const ghCheck = Bun.spawnSync(["which", "gh"]);
2371
+ if (ghCheck.exitCode !== 0) {
2372
+ console.log(import_picocolors6.default.red(" Erro: GitHub CLI (gh) nao encontrado"));
2373
+ console.log(import_picocolors6.default.dim(" Instale: https://cli.github.com"));
2374
+ process.exit(1);
2375
+ }
2376
+ const authCheck = Bun.spawnSync(["gh", "auth", "status"], {
2377
+ stdout: "pipe",
2378
+ stderr: "pipe"
2379
+ });
2380
+ if (authCheck.exitCode !== 0) {
2381
+ console.log(import_picocolors6.default.red(" Erro: GitHub CLI nao autenticado"));
2382
+ console.log(import_picocolors6.default.dim(" Execute: gh auth login"));
2383
+ process.exit(1);
2384
+ }
2385
+ const gitUser = Bun.spawnSync(["git", "config", "user.name"], { stdout: "pipe" });
2386
+ const gitEmail = Bun.spawnSync(["git", "config", "user.email"], { stdout: "pipe" });
2387
+ const userName = gitUser.stdout.toString().trim() || "Dev";
2388
+ const userEmail = gitEmail.stdout.toString().trim() || "";
2389
+ console.log();
2390
+ console.log(import_picocolors6.default.cyan(" Criando sugestao..."));
2391
+ const date = new Date().toISOString().split("T")[0];
2392
+ const body = `## Sugestao
2393
+
2394
+ ${message}
2395
+
2396
+ ---
2397
+
2398
+ **Enviado por:** ${userName}
2399
+ **Email:** ${userEmail}
2400
+ **Data:** ${date}
2401
+
2402
+ ---
2403
+ *Criado via \`nimbus lola suggest\`*`;
2404
+ const title = `Sugestao: ${message.slice(0, 50)}${message.length > 50 ? "..." : ""}`;
2405
+ const result = Bun.spawnSync([
2406
+ "gh",
2407
+ "issue",
2408
+ "create",
2409
+ "--repo",
2410
+ "nimbuslab/lola",
2411
+ "--title",
2412
+ title,
2413
+ "--body",
2414
+ body,
2415
+ "--label",
2416
+ "sugestao"
2417
+ ], {
2418
+ stdout: "inherit",
2419
+ stderr: "inherit"
2420
+ });
2421
+ if (result.exitCode !== 0) {
2422
+ console.log(import_picocolors6.default.red(" Erro ao criar issue"));
2423
+ process.exit(1);
2424
+ }
2425
+ console.log();
2426
+ console.log(import_picocolors6.default.green(" Sugestao enviada! Hugo vai revisar."));
2427
+ console.log();
2428
+ }
2429
+ async function lola(args) {
2430
+ const subcommand = args[0];
2431
+ if (!subcommand || subcommand === "install" || subcommand === "sync") {
2432
+ await installLola();
2433
+ } else if (subcommand === "suggest") {
2434
+ const message = args.slice(1).join(" ");
2435
+ await suggestImprovement(message);
2436
+ } else if (subcommand === "help" || subcommand === "--help" || subcommand === "-h") {
2437
+ showLolaHelp();
2438
+ } else {
2439
+ console.log(import_picocolors6.default.red(` Subcomando desconhecido: ${subcommand}`));
2440
+ showLolaHelp();
2441
+ process.exit(1);
2442
+ }
2443
+ }
2444
+ function showLolaHelp() {
2445
+ console.log();
2446
+ console.log(import_picocolors6.default.bold(" Lola - Code Agent da nimbuslab"));
2447
+ console.log();
2448
+ console.log(import_picocolors6.default.bold(" Uso:") + " nimbus lola [subcomando]");
2449
+ console.log();
2450
+ console.log(import_picocolors6.default.bold(" Subcomandos:"));
2451
+ console.log(import_picocolors6.default.dim(" install ") + import_picocolors6.default.white("Instalar/atualizar Lola"));
2452
+ console.log(import_picocolors6.default.dim(" sync ") + import_picocolors6.default.white("Alias para install"));
2453
+ console.log(import_picocolors6.default.dim(' suggest "msg" ') + import_picocolors6.default.white("Sugerir melhoria (cria issue)"));
2454
+ console.log(import_picocolors6.default.dim(" help ") + import_picocolors6.default.white("Mostrar esta ajuda"));
2455
+ console.log();
2456
+ console.log(import_picocolors6.default.bold(" Exemplos:"));
2457
+ console.log(import_picocolors6.default.dim(" $ nimbus lola install"));
2458
+ console.log(import_picocolors6.default.dim(' $ nimbus lola suggest "adicionar suporte a X"'));
2459
+ console.log();
2460
+ }
2461
+
2286
2462
  // src/index.ts
2287
2463
  var PACKAGE_NAME = "@nimbuslab/cli";
2288
2464
  var CURRENT_VERSION = "0.9.0";
@@ -2321,18 +2497,18 @@ function showUpdateNotice(latestVersion) {
2321
2497
  const line2 = ` Update with: ${command}`;
2322
2498
  const maxLen = Math.max(line1.length, line2.length);
2323
2499
  const border = "\u2500".repeat(maxLen + 2);
2324
- console.log(import_picocolors6.default.yellow(` \u250C${border}\u2510`));
2325
- console.log(import_picocolors6.default.yellow(` \u2502`) + import_picocolors6.default.white(line1.padEnd(maxLen + 1)) + import_picocolors6.default.yellow(`\u2502`));
2326
- console.log(import_picocolors6.default.yellow(` \u2502`) + import_picocolors6.default.cyan(line2.padEnd(maxLen + 1)) + import_picocolors6.default.yellow(`\u2502`));
2327
- console.log(import_picocolors6.default.yellow(` \u2514${border}\u2518`));
2500
+ console.log(import_picocolors7.default.yellow(` \u250C${border}\u2510`));
2501
+ console.log(import_picocolors7.default.yellow(` \u2502`) + import_picocolors7.default.white(line1.padEnd(maxLen + 1)) + import_picocolors7.default.yellow(`\u2502`));
2502
+ console.log(import_picocolors7.default.yellow(` \u2502`) + import_picocolors7.default.cyan(line2.padEnd(maxLen + 1)) + import_picocolors7.default.yellow(`\u2502`));
2503
+ console.log(import_picocolors7.default.yellow(` \u2514${border}\u2518`));
2328
2504
  console.log();
2329
2505
  }
2330
2506
  async function main() {
2331
2507
  const args = process.argv.slice(2);
2332
2508
  const command = args[0];
2333
- console.log(import_picocolors6.default.cyan(LOGO));
2334
- console.log(import_picocolors6.default.white(" nimbuslab CLI"));
2335
- console.log(import_picocolors6.default.dim(" Create awesome projects"));
2509
+ console.log(import_picocolors7.default.cyan(LOGO));
2510
+ console.log(import_picocolors7.default.white(" nimbuslab CLI"));
2511
+ console.log(import_picocolors7.default.dim(" Create awesome projects"));
2336
2512
  console.log();
2337
2513
  const latestVersion = await checkForUpdates();
2338
2514
  if (latestVersion) {
@@ -2344,56 +2520,65 @@ async function main() {
2344
2520
  await analyze(args.slice(1));
2345
2521
  } else if (command === "upgrade") {
2346
2522
  await upgrade(args.slice(1));
2523
+ } else if (command === "lola") {
2524
+ await lola(args.slice(1));
2347
2525
  } else if (command === "help" || command === "--help" || command === "-h") {
2348
2526
  showHelp();
2349
2527
  } else if (command === "version" || command === "--version" || command === "-v") {
2350
2528
  showVersion();
2351
2529
  } else {
2352
- console.log(import_picocolors6.default.red(`Unknown command: ${command}`));
2530
+ console.log(import_picocolors7.default.red(`Unknown command: ${command}`));
2353
2531
  showHelp();
2354
2532
  process.exit(1);
2355
2533
  }
2356
2534
  }
2357
2535
  function showHelp() {
2358
2536
  console.log(`
2359
- ${import_picocolors6.default.bold("Usage:")} nimbus [command] [options]
2537
+ ${import_picocolors7.default.bold("Usage:")} nimbus [command] [options]
2360
2538
 
2361
- ${import_picocolors6.default.bold("Commands:")}
2539
+ ${import_picocolors7.default.bold("Commands:")}
2362
2540
  create [name] Create a new project
2363
2541
  analyze [dir] Analyze project stack
2364
2542
  upgrade [target] Upgrade dependencies
2543
+ lola [action] Lola - Code Agent
2365
2544
  help Show this help
2366
2545
  version Show version
2367
2546
 
2368
- ${import_picocolors6.default.bold("Templates:")}
2547
+ ${import_picocolors7.default.bold("Templates:")}
2369
2548
  --landing Landing page (Next.js 16 + Tailwind 4 + shadcn)
2370
2549
  --app Web app (Landing + Better Auth + Drizzle)
2371
2550
  --turborepo Monorepo (Turborepo + apps/packages)
2372
2551
 
2373
- ${import_picocolors6.default.bold("Analyze & Upgrade:")}
2552
+ ${import_picocolors7.default.bold("Analyze & Upgrade:")}
2374
2553
  analyze . Detect stack and show recommendations
2375
2554
  analyze --json Output as JSON
2376
2555
  upgrade --plan Show upgrade plan
2377
2556
  upgrade next Upgrade Next.js
2378
2557
  upgrade tailwind Upgrade Tailwind CSS
2379
2558
 
2380
- ${import_picocolors6.default.bold("Options:")}
2559
+ ${import_picocolors7.default.bold("Options:")}
2381
2560
  -y, --yes Accept defaults
2382
2561
  --no-git Don't initialize Git
2383
2562
  --no-install Don't install dependencies
2384
2563
  --template <url> Use custom template
2385
2564
 
2386
- ${import_picocolors6.default.bold("Examples:")}
2387
- ${import_picocolors6.default.dim("$")} nimbus create my-landing --landing
2388
- ${import_picocolors6.default.dim("$")} nimbus create my-app --app
2389
- ${import_picocolors6.default.dim("$")} nimbus analyze ./my-project
2390
- ${import_picocolors6.default.dim("$")} nimbus upgrade --plan
2565
+ ${import_picocolors7.default.bold("Lola (Code Agent):")}
2566
+ lola install Install/update Lola
2567
+ lola suggest Suggest improvement (creates issue)
2568
+
2569
+ ${import_picocolors7.default.bold("Examples:")}
2570
+ ${import_picocolors7.default.dim("$")} nimbus create my-landing --landing
2571
+ ${import_picocolors7.default.dim("$")} nimbus create my-app --app
2572
+ ${import_picocolors7.default.dim("$")} nimbus analyze ./my-project
2573
+ ${import_picocolors7.default.dim("$")} nimbus upgrade --plan
2574
+ ${import_picocolors7.default.dim("$")} nimbus lola install
2575
+ ${import_picocolors7.default.dim("$")} nimbus lola suggest "add support for X"
2391
2576
  `);
2392
2577
  }
2393
2578
  function showVersion() {
2394
2579
  console.log(`${PACKAGE_NAME} v${CURRENT_VERSION}`);
2395
2580
  }
2396
2581
  main().catch((err) => {
2397
- console.error(import_picocolors6.default.red("Erro:"), err.message);
2582
+ console.error(import_picocolors7.default.red("Erro:"), err.message);
2398
2583
  process.exit(1);
2399
2584
  });
@@ -0,0 +1,148 @@
1
+ # nimbus analyze
2
+
3
+ Analisa a stack de um projeto existente e sugere melhorias baseadas na stack nimbuslab.
4
+
5
+ ## Uso
6
+
7
+ ```bash
8
+ # Analisar diretorio atual
9
+ nimbus analyze
10
+
11
+ # Analisar diretorio especifico
12
+ nimbus analyze ./meu-projeto
13
+ nimbus analyze ~/www/nimbuslab/projeto
14
+
15
+ # Output em JSON (para automacao)
16
+ nimbus analyze --json
17
+ ```
18
+
19
+ ## O que Detecta
20
+
21
+ ### Framework
22
+ - Next.js (com versao)
23
+ - React (standalone)
24
+ - Angular
25
+ - Vue
26
+ - Svelte
27
+
28
+ ### Styling
29
+ - Tailwind CSS (com versao)
30
+ - styled-components
31
+ - Emotion
32
+ - Sass/SCSS
33
+ - Less
34
+ - CSS puro
35
+
36
+ ### Package Manager
37
+ - bun (recomendado)
38
+ - pnpm
39
+ - npm
40
+ - yarn
41
+
42
+ ### Monorepo
43
+ - Turborepo
44
+ - Nx
45
+ - Lerna
46
+ - Workspaces nativo
47
+
48
+ ### Autenticacao
49
+ - Better Auth (recomendado)
50
+ - NextAuth / Auth.js
51
+ - Clerk
52
+ - Auth0
53
+ - Supabase Auth
54
+
55
+ ### Banco de Dados
56
+ - Drizzle ORM (recomendado)
57
+ - Prisma
58
+ - TypeORM
59
+ - Mongoose
60
+ - pg / mysql2 direto
61
+
62
+ ### Outros
63
+ - TypeScript (tsconfig.json)
64
+ - ESLint
65
+ - Prettier
66
+
67
+ ## Recomendacoes Automaticas
68
+
69
+ O comando gera recomendacoes baseadas na stack nimbuslab:
70
+
71
+ | Detectado | Recomendacao |
72
+ |-----------|--------------|
73
+ | pnpm/npm/yarn | Migrar para bun |
74
+ | Next.js < 16 | Atualizar para Next.js 16 |
75
+ | React < 19 | Atualizar para React 19 |
76
+ | Tailwind < 4 | Atualizar para Tailwind 4 |
77
+ | Prisma | Considerar Drizzle ORM |
78
+ | NextAuth | Considerar Better Auth |
79
+ | Sem auth | Adicionar autenticacao |
80
+ | Sem DB | Adicionar banco de dados |
81
+
82
+ ## Exemplo de Output
83
+
84
+ ```
85
+ Analisando projeto...
86
+
87
+ Projeto: meu-app v1.0.0
88
+
89
+ Stack Detectada:
90
+ Framework: nextjs@15.0.2
91
+ Styling: tailwind@3.4.1
92
+ Package Manager: pnpm
93
+ TypeScript: sim
94
+ Monorepo: turborepo
95
+ Auth: next-auth
96
+ Database: prisma
97
+
98
+ Recomendacoes:
99
+ 1. Migrar pnpm -> bun (nimbus codemod bun)
100
+ 2. Atualizar Next.js 15 -> 16 (nimbus upgrade next)
101
+ 3. Atualizar React 18 -> 19 (nimbus upgrade react)
102
+ 4. Atualizar Tailwind 3 -> 4 (nimbus upgrade tailwind)
103
+ 5. Considerar migrar Prisma -> Drizzle (nimbus codemod drizzle)
104
+ ```
105
+
106
+ ## Output JSON
107
+
108
+ Com `--json`, retorna estrutura para automacao:
109
+
110
+ ```json
111
+ {
112
+ "name": "meu-app",
113
+ "version": "1.0.0",
114
+ "framework": "nextjs",
115
+ "frameworkVersion": "15.0.2",
116
+ "styling": ["tailwind@3.4.1"],
117
+ "packageManager": "pnpm",
118
+ "monorepo": "turborepo",
119
+ "auth": "next-auth",
120
+ "database": "prisma",
121
+ "typescript": true,
122
+ "recommendations": [
123
+ "Migrar pnpm -> bun",
124
+ "Atualizar Next.js 15 -> 16"
125
+ ]
126
+ }
127
+ ```
128
+
129
+ ## Integracao com Outros Comandos
130
+
131
+ ```bash
132
+ # Analisar e depois ver plano de upgrade
133
+ nimbus analyze
134
+ nimbus upgrade --plan
135
+
136
+ # Pipeline completo
137
+ nimbus analyze ./projeto && nimbus upgrade --plan
138
+ ```
139
+
140
+ ## Limitacoes
141
+
142
+ - Analisa apenas `package.json` e arquivos de config
143
+ - Nao analisa codigo-fonte
144
+ - Requer projeto Node.js (package.json)
145
+
146
+ ---
147
+
148
+ [Voltar ao README](../README.md) | [create](./create.md) | [upgrade](./upgrade.md) | [migrate](./migrate.md)