@neetru/cli 2.7.5 → 2.9.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.
- package/CHANGELOG.md +316 -220
- package/README.md +137 -137
- package/dist/cli-kit/format.d.ts +49 -0
- package/dist/cli-kit/format.js +88 -0
- package/dist/cli-kit/format.js.map +1 -0
- package/dist/cli-kit/glyphs.d.ts +22 -0
- package/dist/cli-kit/glyphs.js +22 -0
- package/dist/cli-kit/glyphs.js.map +1 -0
- package/dist/cli-kit/index.d.ts +13 -0
- package/dist/cli-kit/index.js +12 -0
- package/dist/cli-kit/index.js.map +1 -0
- package/dist/cli-kit/palette.d.ts +10 -0
- package/dist/cli-kit/palette.js +36 -0
- package/dist/cli-kit/palette.js.map +1 -0
- package/dist/commands/ai.js +8 -8
- package/dist/commands/autocomplete.js +34 -34
- package/dist/commands/bug.d.ts +87 -0
- package/dist/commands/bug.js +419 -0
- package/dist/commands/bug.js.map +1 -0
- package/dist/commands/customers.d.ts +17 -0
- package/dist/commands/customers.js +160 -0
- package/dist/commands/customers.js.map +1 -0
- package/dist/commands/db.d.ts +91 -7
- package/dist/commands/db.js +898 -123
- package/dist/commands/db.js.map +1 -1
- package/dist/commands/deploy.d.ts +5 -0
- package/dist/commands/deploy.js +68 -0
- package/dist/commands/deploy.js.map +1 -1
- package/dist/commands/dev.d.ts +68 -0
- package/dist/commands/dev.js +345 -0
- package/dist/commands/dev.js.map +1 -0
- package/dist/commands/docs.d.ts +4 -0
- package/dist/commands/docs.js +99 -7
- package/dist/commands/docs.js.map +1 -1
- package/dist/commands/doctor.js +4 -1
- package/dist/commands/doctor.js.map +1 -1
- package/dist/commands/init.js +121 -121
- package/dist/commands/marketplace.d.ts +36 -0
- package/dist/commands/marketplace.js +584 -0
- package/dist/commands/marketplace.js.map +1 -0
- package/dist/commands/new.d.ts +6 -0
- package/dist/commands/new.js +220 -40
- package/dist/commands/new.js.map +1 -1
- package/dist/commands/open.d.ts +8 -0
- package/dist/commands/open.js +61 -13
- package/dist/commands/open.js.map +1 -1
- package/dist/commands/products-db.d.ts +1 -1
- package/dist/commands/products-db.js +17 -4
- package/dist/commands/products-db.js.map +1 -1
- package/dist/commands/products.d.ts +23 -0
- package/dist/commands/products.js +39 -1
- package/dist/commands/products.js.map +1 -1
- package/dist/commands/tenants.js +15 -0
- package/dist/commands/tenants.js.map +1 -1
- package/dist/commands/ui.d.ts +1 -1
- package/dist/commands/ui.js +172 -2
- package/dist/commands/ui.js.map +1 -1
- package/dist/commands/workspaces.d.ts +10 -1
- package/dist/commands/workspaces.js +136 -22
- package/dist/commands/workspaces.js.map +1 -1
- package/dist/index.js +532 -44
- package/dist/index.js.map +1 -1
- package/dist/lib/ai/context.js +90 -90
- package/dist/lib/config-schema.d.ts +8 -8
- package/dist/lib/db-local/db-json.d.ts +63 -0
- package/dist/lib/db-local/db-json.js +189 -0
- package/dist/lib/db-local/db-json.js.map +1 -0
- package/dist/lib/db-local/env.d.ts +26 -0
- package/dist/lib/db-local/env.js +64 -0
- package/dist/lib/db-local/env.js.map +1 -0
- package/dist/lib/db-local/fingerprint.d.ts +8 -0
- package/dist/lib/db-local/fingerprint.js +28 -0
- package/dist/lib/db-local/fingerprint.js.map +1 -0
- package/dist/lib/db-local/index.d.ts +15 -0
- package/dist/lib/db-local/index.js +14 -0
- package/dist/lib/db-local/index.js.map +1 -0
- package/dist/lib/db-pipeline/build-deps.d.ts +14 -0
- package/dist/lib/db-pipeline/build-deps.js +158 -0
- package/dist/lib/db-pipeline/build-deps.js.map +1 -0
- package/dist/lib/db-pipeline/errors.d.ts +29 -0
- package/dist/lib/db-pipeline/errors.js +29 -0
- package/dist/lib/db-pipeline/errors.js.map +1 -0
- package/dist/lib/db-pipeline/index.d.ts +26 -0
- package/dist/lib/db-pipeline/index.js +25 -0
- package/dist/lib/db-pipeline/index.js.map +1 -0
- package/dist/lib/db-pipeline/pipeline.d.ts +13 -0
- package/dist/lib/db-pipeline/pipeline.js +119 -0
- package/dist/lib/db-pipeline/pipeline.js.map +1 -0
- package/dist/lib/db-pipeline/rehearse.d.ts +99 -0
- package/dist/lib/db-pipeline/rehearse.js +219 -0
- package/dist/lib/db-pipeline/rehearse.js.map +1 -0
- package/dist/lib/db-pipeline/types.d.ts +112 -0
- package/dist/lib/db-pipeline/types.js +20 -0
- package/dist/lib/db-pipeline/types.js.map +1 -0
- package/dist/lib/pickers.d.ts +12 -0
- package/dist/lib/pickers.js +34 -0
- package/dist/lib/pickers.js.map +1 -1
- package/package.json +66 -62
- package/templates/auth/callback.ts +22 -22
- package/templates/auth/sign-in.tsx +41 -41
- package/templates/billing/checkout.ts +22 -22
- package/templates/billing/page.tsx +43 -43
- package/templates/support/ticket-form.tsx +68 -68
- package/templates/usage/track.ts +30 -30
- package/templates/users/profile.tsx +43 -43
package/CHANGELOG.md
CHANGED
|
@@ -1,220 +1,316 @@
|
|
|
1
|
-
# Changelog @neetru/cli
|
|
2
|
-
|
|
3
|
-
Convenção: [Keep a Changelog](https://keepachangelog.com/) + [SemVer](https://semver.org/).
|
|
4
|
-
|
|
5
|
-
## [2.
|
|
6
|
-
|
|
7
|
-
### Corrigido
|
|
8
|
-
|
|
9
|
-
- `
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
## [2.
|
|
36
|
-
|
|
37
|
-
###
|
|
38
|
-
|
|
39
|
-
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
-
|
|
60
|
-
-
|
|
61
|
-
`
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
## [2.
|
|
73
|
-
|
|
74
|
-
### Adicionado
|
|
75
|
-
|
|
76
|
-
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
- `neetru
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
- `neetru
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
###
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
local (`
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
- `neetru
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
###
|
|
178
|
-
|
|
179
|
-
- `neetru
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
- `neetru
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
- `neetru
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
- `
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
1
|
+
# Changelog @neetru/cli
|
|
2
|
+
|
|
3
|
+
Convenção: [Keep a Changelog](https://keepachangelog.com/) + [SemVer](https://semver.org/).
|
|
4
|
+
|
|
5
|
+
## [2.9.1] — 2026-05-25 (security: 5 HIGH fixes)
|
|
6
|
+
|
|
7
|
+
### Corrigido (segurança)
|
|
8
|
+
|
|
9
|
+
- **HIGH-1 — `db apply --json` selecionava o primeiro banco silenciosamente com múltiplos bancos.**
|
|
10
|
+
Em modo não-interativo (`--json` ou `--yes` sem TTY), se `.neetru/db.json` tiver N > 1 bancos
|
|
11
|
+
e `--db` não for passado, o CLI agora emite erro estruturado em vez de aplicar no primeiro banco.
|
|
12
|
+
Saída JSON: `{ ok: false, error: "db_required", message: "...", available: [...] }`.
|
|
13
|
+
Em CI isso evitava migração silenciosa no banco errado.
|
|
14
|
+
|
|
15
|
+
- **HIGH-2 — Abertura de URL no Windows usava `cmd /c start` sem validação de protocolo.**
|
|
16
|
+
URLs derivadas de config podiam conter caracteres de injeção de shell (`& malicious.exe`).
|
|
17
|
+
Nova função `safeOpenUrl` valida `^https?://` antes de qualquer chamada de sistema e usa
|
|
18
|
+
`rundll32 url.dll,FileProtocolHandler` (sem shell) no Windows. Aplica em `open.ts` e
|
|
19
|
+
`workspaces.ts` (que agora delega para `safeOpenUrl`).
|
|
20
|
+
|
|
21
|
+
- **HIGH-3 — `db init` gravava stub local em `.neetru/db.json` antes de registrar no Core.**
|
|
22
|
+
Falha de rede/400 do Core deixava entrada órfã e re-rodar `db init` adicionava banco duplicado.
|
|
23
|
+
Agora o registro no Core acontece primeiro; `.neetru/db.json` só é escrito após sucesso.
|
|
24
|
+
|
|
25
|
+
- **HIGH-4 — `marketplace sdk add <template>` aceitava path traversal.**
|
|
26
|
+
`path.join(templatesDir, templateName)` aceitava `../../etc/passwd` como nome.
|
|
27
|
+
Adicionada whitelist `ALLOWED_SDK_TEMPLATES` e verificação `startsWith(resolve(templatesDir) + sep)`
|
|
28
|
+
como defesa em profundidade.
|
|
29
|
+
|
|
30
|
+
- **HIGH-5 — `docs publish` usava path absoluto Windows como slug.**
|
|
31
|
+
Path como `C:/Users/dev/projeto/docs/intro.md` virava slug `C:/Users/dev/projeto/docs/intro`,
|
|
32
|
+
expondo estrutura de filesystem. `deriveSlugFromPath` agora converte para relativo via
|
|
33
|
+
`path.relative(cwd, file)` e rejeita slugs com `:`, `..` ou `/` inicial.
|
|
34
|
+
|
|
35
|
+
## [2.8.2] — 2026-05-25 (fix UX slug conflict + docs open)
|
|
36
|
+
|
|
37
|
+
### Corrigido
|
|
38
|
+
|
|
39
|
+
- **Bug #31 — `neetru new` não falha seco em conflito de slug.**
|
|
40
|
+
Quando o Core retorna 400 com "Já existe um produto com o slug X", o CLI
|
|
41
|
+
agora exibe o produto existente (nome, ID, status) e oferece um prompt
|
|
42
|
+
interativo com três opções:
|
|
43
|
+
1. Vincular este projeto local ao produto existente (escreve `.neetru/config.json`
|
|
44
|
+
apontando para o `productId`).
|
|
45
|
+
2. Criar com slug diferente — lista sugestões (`gestovendas-v2`, `-2`, etc.)
|
|
46
|
+
ou permite digitar um slug livre.
|
|
47
|
+
3. Cancelar.
|
|
48
|
+
Removida a mensagem "Tente manualmente: neetru products create --slug <mesmo-slug>"
|
|
49
|
+
que sugeria repetir exatamente o comando que vai falhar de novo.
|
|
50
|
+
O fallback genérico cobre qualquer 400 cujo `message` contenha "Já existe",
|
|
51
|
+
"slug", "already exists" ou "duplicate".
|
|
52
|
+
|
|
53
|
+
- **Bug #26 — `neetru docs` não abria documentação ao vivo.**
|
|
54
|
+
O comando `neetru docs` era exclusivamente um registry CRUD (publish/list/get/delete)
|
|
55
|
+
e não tinha forma de acessar a documentação pública. Adicionado:
|
|
56
|
+
- `neetru docs open [topic]` — abre `https://core.neetru.com/docs` (ou seção
|
|
57
|
+
específica) no browser padrão. Tópicos: `sdk`, `cli`, `db`, `webhooks`, `auth`,
|
|
58
|
+
`billing`, `observability`, `infra`, `dns`, `deploy`, `architecture`.
|
|
59
|
+
- `neetru docs open` sem argumento — abre o índice geral.
|
|
60
|
+
- Argumentos desconhecidos abrem busca: `core.neetru.com/docs?q=<query>`.
|
|
61
|
+
- No menu interativo (`neetru ui`), "Docs live" agora exibe "Abrir documentação
|
|
62
|
+
no navegador" como primeira opção antes das opções de registry.
|
|
63
|
+
|
|
64
|
+
### Notas de uso
|
|
65
|
+
|
|
66
|
+
```
|
|
67
|
+
neetru docs open # abre core.neetru.com/docs
|
|
68
|
+
neetru docs open sdk # vai direto pra referência do SDK
|
|
69
|
+
neetru docs open webhooks # manual de runtime/webhooks
|
|
70
|
+
```
|
|
71
|
+
|
|
72
|
+
## [2.8.1] — 2026-05-25 (marketplace)
|
|
73
|
+
|
|
74
|
+
### Adicionado
|
|
75
|
+
|
|
76
|
+
- **`neetru marketplace`** — central de artefatos do ecossistema Neetru.
|
|
77
|
+
- `neetru marketplace skills install` — clona `Neetru/neetru-libs` em
|
|
78
|
+
`~/.neetru/marketplace-cache/` e instala skills em `~/.claude/skills/`.
|
|
79
|
+
Linux/macOS: symlink (atualizações automáticas via git pull).
|
|
80
|
+
Windows: cópia recursiva (sem exigir Developer Mode).
|
|
81
|
+
- `neetru marketplace skills update` — git pull no cache + re-copia skills
|
|
82
|
+
instaladas como cópia (symlinks já são atualizados pelo pull).
|
|
83
|
+
- `neetru marketplace skills list` — tabela com nome, versão, status e
|
|
84
|
+
descrição de cada skill disponível no cache local.
|
|
85
|
+
- `neetru marketplace skills uninstall` — remove skills de `~/.claude/skills/`
|
|
86
|
+
com confirmação interativa (bypass via `--yes`).
|
|
87
|
+
- `neetru marketplace sdk init` — adiciona `@neetru/sdk@^2.1.0` ao
|
|
88
|
+
`package.json` do projeto atual e cria `src/neetru.ts` com boilerplate
|
|
89
|
+
de `createNeetruClient`. Idempotente — não sobrescreve arquivo existente.
|
|
90
|
+
- `neetru marketplace sdk templates` — lista templates disponíveis em
|
|
91
|
+
`templates/` da instalação do CLI.
|
|
92
|
+
- `neetru marketplace sdk add <template>` — copia template de feature
|
|
93
|
+
(auth/billing/usage/support/users) pra `src/` do projeto atual.
|
|
94
|
+
- `neetru marketplace browse` — abre `https://github.com/Neetru/neetru-libs`
|
|
95
|
+
no browser (start/open/xdg-open por plataforma).
|
|
96
|
+
- **Menu interativo** — item **"Marketplace"** adicionado ao menu principal
|
|
97
|
+
(entre Suporte e Docs live) com sub-menu completo: skills (instalar /
|
|
98
|
+
atualizar / listar / remover) + SDK (init / add template / listar / docs)
|
|
99
|
+
+ abrir no GitHub.
|
|
100
|
+
|
|
101
|
+
## [2.7.5] — 2026-05-20 (fix do crash no upgrade)
|
|
102
|
+
|
|
103
|
+
### Corrigido
|
|
104
|
+
|
|
105
|
+
- `neetru upgrade` não crasha mais ao terminar. O comando chamava
|
|
106
|
+
`process.exit(0)` logo após o `fetch` ao npm — no Windows isso
|
|
107
|
+
derrubava o libuv com `Assertion failed: !(handle->flags &
|
|
108
|
+
UV_HANDLE_CLOSING)` (`async.c`), porque o socket do undici (fetch
|
|
109
|
+
nativo) ainda estava em teardown. Agora o comando só retorna; o event
|
|
110
|
+
loop drena sozinho (o undici dá unref nos sockets idle) e o processo
|
|
111
|
+
encerra limpo na hora.
|
|
112
|
+
|
|
113
|
+
## [2.7.4] — 2026-05-20 (submenus redesenhados)
|
|
114
|
+
|
|
115
|
+
### Adicionado
|
|
116
|
+
|
|
117
|
+
- Submenu **"Começar um projeto"** no menu principal — reúne o scaffold
|
|
118
|
+
local (`neetru init`), a criação completa (`neetru new`) e uma tela de
|
|
119
|
+
info sobre o `@neetru/sdk` (o que é, como instalar e consumir).
|
|
120
|
+
- Os 10 submenus ganharam o **mesmo visual do menu principal**: moldura
|
|
121
|
+
azul-marinho, marcador `> <` no item ativo e navegação por setas — em
|
|
122
|
+
coluna única, alinhada à esquerda.
|
|
123
|
+
|
|
124
|
+
### Corrigido
|
|
125
|
+
|
|
126
|
+
- Submenu não engole mais a primeira seta. O menu principal entregava o
|
|
127
|
+
stdin pausado / fora de raw mode pro submenu, e o inquirer perdia a
|
|
128
|
+
1ª tecla — só respondia depois de um toque inicial. Agora o stdin fica
|
|
129
|
+
"quente" na entrega; a seta funciona de cara.
|
|
130
|
+
|
|
131
|
+
## [2.7.3] — 2026-05-20 (polish do cabeçalho)
|
|
132
|
+
|
|
133
|
+
### Mudado
|
|
134
|
+
|
|
135
|
+
- Cabeçalho do `neetru` interativo: logo renderizado **ao lado** do texto
|
|
136
|
+
(antes era acima), com a sessão e a versão alinhadas à direita do logo.
|
|
137
|
+
- Paleta de contorno do menu e do logo ajustada para um azul mais suave.
|
|
138
|
+
|
|
139
|
+
## [2.7.2] — 2026-05-20 (aviso de versão + menu em 2 colunas)
|
|
140
|
+
|
|
141
|
+
### Adicionado
|
|
142
|
+
|
|
143
|
+
- O cabeçalho do `neetru` interativo mostra a **versão instalada** (`v2.7.2`)
|
|
144
|
+
ao lado do usuário logado. Quando há uma versão mais nova publicada no
|
|
145
|
+
npm, aparece uma linha **amarela** avisando pra rodar `neetru upgrade`.
|
|
146
|
+
A checagem tem timeout curto e é à prova de falha — offline não trava o
|
|
147
|
+
CLI.
|
|
148
|
+
- Menu principal redesenhado em **duas colunas**, com navegação por setas
|
|
149
|
+
(↑/↓/←/→) e contorno azul-marinho; o item ativo é marcado com `> <`.
|
|
150
|
+
|
|
151
|
+
## [2.7.1] — 2026-05-20 (UI do CLI interativo)
|
|
152
|
+
|
|
153
|
+
### Adicionado
|
|
154
|
+
|
|
155
|
+
- Logo Neetru em ANSI truecolor no cabeçalho do `neetru` interativo.
|
|
156
|
+
- Cabeçalho mostra o usuário logado (email), lido localmente do
|
|
157
|
+
`auth.json` — sem chamada de rede.
|
|
158
|
+
- Menu principal com o nome do recurso + uma descrição curta abaixo,
|
|
159
|
+
quando útil.
|
|
160
|
+
|
|
161
|
+
### Corrigido
|
|
162
|
+
|
|
163
|
+
- O CLI interativo não encerra mais sozinho: comandos que chamavam
|
|
164
|
+
`process.exit()` em erro (ex.: "Nenhum server encontrado") matavam o
|
|
165
|
+
menu inteiro. Agora o erro é capturado e o CLI volta ao menu — só
|
|
166
|
+
"Sair" (ou Ctrl+C) encerra.
|
|
167
|
+
|
|
168
|
+
## [2.7.0] — 2026-05-20 (Fluxo de Ambientes Fase 3 — destino cloud-run)
|
|
169
|
+
|
|
170
|
+
### Adicionado
|
|
171
|
+
|
|
172
|
+
- `neetru deploy --target=cloud-run` — caminho de deploy pro destino Cloud Run
|
|
173
|
+
dedicado. Aceita `--image <uri>` (imagem de container já buildada e pushada)
|
|
174
|
+
ou faz `docker build` + `docker push` automático via `--registry <host>`
|
|
175
|
+
(Artifact Registry). O destino `cloud-run` agora aparece no menu interativo.
|
|
176
|
+
|
|
177
|
+
### Mudado
|
|
178
|
+
|
|
179
|
+
- `neetru promote` — vocabulário de estágios migrado para `dev | staging | prod`
|
|
180
|
+
(antes `dev/workspace/beta/prod`). Gates: 24h em `dev→staging`,
|
|
181
|
+
168h + canary em `staging→prod`.
|
|
182
|
+
- `neetru deploy --target` — sem valor default; omitir abre o menu interativo
|
|
183
|
+
(workspace / cloud-run / vm). Modo não-interativo continua assumindo `vm`.
|
|
184
|
+
|
|
185
|
+
## [2.0.0] — 2026-05-06 (Sprint 12 — CLI estabilizada)
|
|
186
|
+
|
|
187
|
+
### Adicionado
|
|
188
|
+
|
|
189
|
+
- `neetru doctor` — diagnóstico completo do ambiente: token CLI, Core acessível,
|
|
190
|
+
schema do `neetru.config.json`, valor de `NEETRU_ENV`, e versão do CLI
|
|
191
|
+
comparada com a `latest` no npm. Saída em tabela colorida (default) ou
|
|
192
|
+
JSON (`--json`). Diferença pra `validate`: doctor inclui environment +
|
|
193
|
+
version mismatch (warning, não fail).
|
|
194
|
+
- `neetru upgrade` — verifica `dist-tags.latest` em
|
|
195
|
+
`https://registry.npmjs.org/@neetru/cli` e exibe instrução de upgrade
|
|
196
|
+
(`npm install -g @neetru/cli@latest`). Sem auto-install — não quebra
|
|
197
|
+
pipelines pinados.
|
|
198
|
+
- `neetru autocomplete <bash|zsh|pwsh>` — gera script de shell completion
|
|
199
|
+
pra os 22 subcomandos top-level. Usuário cola na config do shell:
|
|
200
|
+
`neetru autocomplete bash >> ~/.bashrc`.
|
|
201
|
+
- `neetru config set telemetry.enabled <true|false>` — opt-in explícito de
|
|
202
|
+
telemetria. Default desligado. Quando ligado, CLI envia eventos
|
|
203
|
+
anonimizados pra `POST /sdk/v1/telemetry/log` (placeholder na v2.0).
|
|
204
|
+
Nunca envia tokens, paths absolutos ou conteúdo de arquivos.
|
|
205
|
+
|
|
206
|
+
### Bumped
|
|
207
|
+
|
|
208
|
+
- `1.4.0 → 2.0.0` (major bump por convenção de estabilidade — sem breaking
|
|
209
|
+
changes funcionais).
|
|
210
|
+
|
|
211
|
+
### Não publicado no npm ainda
|
|
212
|
+
|
|
213
|
+
Bump local. Publish manual pra npm fica deferido — owner aprovará. Build
|
|
214
|
+
local (`npm run build` em `cli/`) gera o `dist/` pronto pra publicação.
|
|
215
|
+
|
|
216
|
+
## [1.3.0] — 2026-05-06
|
|
217
|
+
|
|
218
|
+
### Adicionado
|
|
219
|
+
|
|
220
|
+
- `neetru add <feature>` — copia template em `cli/templates/{feature}/*` para
|
|
221
|
+
`src/lib/neetru/{feature}/*` no projeto atual. Features: `auth`, `billing`,
|
|
222
|
+
`usage`, `users`, `support`. Suporta `--force` pra sobrescrever.
|
|
223
|
+
- `neetru mocks reset` — reseta `.neetru/dev-fixtures.json` para `{}` (útil
|
|
224
|
+
com `NEETRU_ENV=dev`).
|
|
225
|
+
- `neetru env switch <dev|workspace|production>` — atualiza/insere
|
|
226
|
+
`NEETRU_ENV=<value>` em `.env.local` preservando as outras chaves.
|
|
227
|
+
- `neetru logs` ganhou flags:
|
|
228
|
+
- `--product <productId>` — filtra logs por produto.
|
|
229
|
+
- `--channel <channel>` — filtra por channel (stdout/stderr/app/...).
|
|
230
|
+
- `--correlation-id <uuid>` — filtra por correlation ID.
|
|
231
|
+
|
|
232
|
+
### Templates novos (`cli/templates/`)
|
|
233
|
+
|
|
234
|
+
- `auth/sign-in.tsx`, `auth/callback.ts`
|
|
235
|
+
- `billing/page.tsx`, `billing/checkout.ts`
|
|
236
|
+
- `usage/track.ts`
|
|
237
|
+
- `users/profile.tsx`
|
|
238
|
+
- `support/ticket-form.tsx`
|
|
239
|
+
|
|
240
|
+
### Não publicado no npm ainda
|
|
241
|
+
|
|
242
|
+
Bump local `1.2.0 → 1.3.0`. Publish pra npm fica deferido — owner aprovará
|
|
243
|
+
manualmente quando quiser. Build local (`npm run build` em `cli/`) já compila.
|
|
244
|
+
|
|
245
|
+
## [1.2.0] — 2026-05-06
|
|
246
|
+
|
|
247
|
+
**Consolidação das duas linhas paralelas.** Esta versão unifica os comandos das duas linhas de CLI que estavam coexistindo:
|
|
248
|
+
|
|
249
|
+
- **`@neetru/cli@1.0.x` (publicada no npm)**: linha *workspace-centric* com `init`, `add`, `validate`, `generate-types`, `whoami`, `login`, `status`, `logs`, `deploy`, `open`. APIs: `/api/v1/cli/workspace/*`.
|
|
250
|
+
- **`@neetru/cli@0.1.0` (monorepo, não publicada)**: linha *server-centric* com `ai`, `init`, `config`, `login`, `logout`, `whoami`, `build`, `deploy`, `publish`. APIs: `/api/v1/cli/{catalog,deploy,servers}`.
|
|
251
|
+
|
|
252
|
+
As duas falam **APIs distintas e complementares** do mesmo Neetru Core, refletindo a topologia real do produto:
|
|
253
|
+
|
|
254
|
+
```
|
|
255
|
+
Workspace (prototipação) ──build/promote──► Server VM ou Cloud Run (produção)
|
|
256
|
+
```
|
|
257
|
+
|
|
258
|
+
A `1.2.0` traz ambos os conjuntos de comandos numa única CLI. O monorepo passa a ser a fonte canônica.
|
|
259
|
+
|
|
260
|
+
### Adicionado em relação a `1.0.1`
|
|
261
|
+
|
|
262
|
+
Comandos da linha *server-centric* (deploy via VM agent ou Cloud Run):
|
|
263
|
+
|
|
264
|
+
- `neetru ai` — REPL multi-model (Claude/OpenAI/Gemini) com contexto Neetru-aware
|
|
265
|
+
- `neetru build` — empacota produto local em tarball + manifest com sha256, detecção automática de stack (node/docker/php-apache/static)
|
|
266
|
+
- `neetru deploy` — pipeline E2E interativo (escolha de produto/server/domain/port + polling status até estado terminal). Suporta `--non-interactive` para CI.
|
|
267
|
+
- `neetru publish` — registra produto no catálogo público (`public_products`), com `--draft` e `--unpublish`
|
|
268
|
+
- `neetru config {set|get|path}` — gerenciamento de chaves de API e config local
|
|
269
|
+
- `neetru logout` — limpa credenciais
|
|
270
|
+
- `neetru login --token nrt_<keyId>_<secret>` — modo CI/legacy paralelo ao Device Code OAuth
|
|
271
|
+
- `neetru login --json` — saída machine-readable para scripts
|
|
272
|
+
|
|
273
|
+
### Mantido de `1.0.1` (re-implementado em TypeScript com convenções do monorepo)
|
|
274
|
+
|
|
275
|
+
- `neetru status --client-id <id>` — status de workspace (build/deploy último, domínio, tier, expira em N dias)
|
|
276
|
+
- `neetru logs --client-id <id>` — visualiza logs do workspace; suporta `-f` follow + `-n N` lines + `--since 30m` + `--level error`
|
|
277
|
+
- `neetru validate` — health-check da config local + ping `/api/health` + whoami
|
|
278
|
+
- `neetru open [target]` — abre dashboard, builds, logs, workspaces, products, servers, incidents no browser
|
|
279
|
+
- `neetru init <name>` — agora gera projeto Next.js 15 OU Node API (Fastify) com schema canônico v2
|
|
280
|
+
|
|
281
|
+
### Backlog 1.3.x
|
|
282
|
+
|
|
283
|
+
Comandos que ainda dependem de design/templates novos:
|
|
284
|
+
|
|
285
|
+
- `neetru add <feature>` — scaffolds OAuth/billing/usage/users
|
|
286
|
+
- `neetru generate-types` — codegen TypeScript de planos/features/entitlements
|
|
287
|
+
|
|
288
|
+
### Alterado
|
|
289
|
+
|
|
290
|
+
- Package agora é ESM nativo (`"type": "module"`). Imports usam `.js` extension.
|
|
291
|
+
- `neetru login` agora usa Device Code OAuth (RFC 8628) por default; `--token` permanece para CI.
|
|
292
|
+
|
|
293
|
+
### Migração de `1.0.x`
|
|
294
|
+
|
|
295
|
+
Não há caminho 100% automático porque a config local muda:
|
|
296
|
+
|
|
297
|
+
- `1.0.x` lia `neetru.json` workspace-local com `{clientId, coreUrl}` + var de ambiente `NEETRU_CLIENT_SECRET`
|
|
298
|
+
- `1.2.0` lê `~/.config/neetru-cli/auth.json` (Bearer token salvo por `neetru login`) + `neetru.config.json` por projeto com `{slug, runtime, publish}`
|
|
299
|
+
|
|
300
|
+
Recomendação:
|
|
301
|
+
|
|
302
|
+
1. `npm uninstall -g @neetru/cli && npm install -g @neetru/cli@1.2.0`
|
|
303
|
+
2. `neetru login` (Device Code) — gera credencial Bearer no novo formato
|
|
304
|
+
3. Para comandos workspace (`status`, `logs`, `open`), passe `--client-id <oauthClientId>` explicitamente — o `clientId` continua sendo o `oauthClientId` do seu workspace, achável em UI Core `/workspaces/{id}`
|
|
305
|
+
|
|
306
|
+
## [1.0.1] — anterior
|
|
307
|
+
|
|
308
|
+
Linha workspace publicada no npm. Comandos: `init`, `add`, `validate`, `generate-types`, `whoami`, `login`, `status`, `logs`, `deploy`, `open`. APIs: `/api/v1/cli/workspace/*`.
|
|
309
|
+
|
|
310
|
+
## [1.0.0] — anterior
|
|
311
|
+
|
|
312
|
+
Primeira versão pública.
|
|
313
|
+
|
|
314
|
+
## [0.1.0] — interno (não publicado)
|
|
315
|
+
|
|
316
|
+
Snapshot interno do monorepo durante desenvolvimento da Sprint 1+. Substituído por `1.2.0`.
|