@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 +77 -64
- package/dist/index.js +205 -20
- package/docs/analyze.md +148 -0
- package/docs/create.md +219 -0
- package/docs/migrate.md +177 -0
- package/docs/package.md +229 -0
- package/docs/upgrade.md +152 -0
- package/package.json +1 -1
- package/src/commands/lola.ts +201 -0
- package/src/index.ts +10 -0
package/README.md
CHANGED
|
@@ -1,105 +1,118 @@
|
|
|
1
1
|
# @nimbuslab/cli
|
|
2
2
|
|
|
3
|
-
CLI
|
|
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
|
-
|
|
16
|
-
|
|
17
|
-
```bash
|
|
18
|
-
# Criar novo projeto (interativo)
|
|
19
|
-
nimbus create
|
|
9
|
+
---
|
|
20
10
|
|
|
21
|
-
|
|
22
|
-
nimbus create meu-projeto
|
|
11
|
+
## Comandos
|
|
23
12
|
|
|
24
|
-
|
|
25
|
-
|
|
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
|
-
|
|
28
|
-
nimbus help
|
|
29
|
-
```
|
|
30
|
-
|
|
31
|
-
## Templates
|
|
20
|
+
---
|
|
32
21
|
|
|
33
|
-
|
|
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
|
-
###
|
|
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
|
-
|
|
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
|
-
|
|
49
|
-
nimbus
|
|
43
|
+
```bash
|
|
44
|
+
nimbus analyze
|
|
45
|
+
nimbus upgrade --plan
|
|
50
46
|
```
|
|
51
47
|
|
|
52
|
-
|
|
48
|
+
---
|
|
53
49
|
|
|
54
|
-
|
|
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
|
-
|
|
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
|
-
|
|
64
|
-
|
|
65
|
-
|
|
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
|
-
|
|
68
|
-
nimbus create meu-app --app --no-install
|
|
64
|
+
---
|
|
69
65
|
|
|
70
|
-
|
|
71
|
-
|
|
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
|
-
|
|
103
|
+
---
|
|
90
104
|
|
|
91
|
-
|
|
105
|
+
## Desenvolvimento
|
|
92
106
|
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
107
|
+
```bash
|
|
108
|
+
gh repo clone nimbuslab/cli
|
|
109
|
+
cd cli
|
|
110
|
+
bun install
|
|
111
|
+
bun run dev
|
|
112
|
+
```
|
|
98
113
|
|
|
99
|
-
|
|
100
|
-
- **Prompts:** @clack/prompts
|
|
101
|
-
- **Cores:** picocolors
|
|
114
|
+
---
|
|
102
115
|
|
|
103
116
|
## Licenca
|
|
104
117
|
|
|
105
|
-
|
|
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
|
|
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(
|
|
2325
|
-
console.log(
|
|
2326
|
-
console.log(
|
|
2327
|
-
console.log(
|
|
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(
|
|
2334
|
-
console.log(
|
|
2335
|
-
console.log(
|
|
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(
|
|
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
|
-
${
|
|
2537
|
+
${import_picocolors7.default.bold("Usage:")} nimbus [command] [options]
|
|
2360
2538
|
|
|
2361
|
-
${
|
|
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
|
-
${
|
|
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
|
-
${
|
|
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
|
-
${
|
|
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
|
-
${
|
|
2387
|
-
|
|
2388
|
-
|
|
2389
|
-
|
|
2390
|
-
|
|
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(
|
|
2582
|
+
console.error(import_picocolors7.default.red("Erro:"), err.message);
|
|
2398
2583
|
process.exit(1);
|
|
2399
2584
|
});
|
package/docs/analyze.md
ADDED
|
@@ -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)
|