@neetru/cli 2.33.0 → 2.34.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/CHANGELOG.md +60 -0
- package/README.md +38 -3
- package/dist/commands/admin/sdk-credential.js +3 -1
- package/dist/commands/ai-models.d.ts +2 -1
- package/dist/commands/ai-models.js +4 -5
- package/dist/commands/ai.d.ts +12 -2
- package/dist/commands/ai.js +47 -38
- package/dist/commands/auth.d.ts +3 -2
- package/dist/commands/auth.js +96 -57
- package/dist/commands/build.js +35 -4
- package/dist/commands/chat.d.ts +24 -6
- package/dist/commands/chat.js +43 -7
- package/dist/commands/code.js +11 -2
- package/dist/commands/config.js +15 -13
- package/dist/commands/db-frontdoor.js +10 -5
- package/dist/commands/db.d.ts +8 -2
- package/dist/commands/db.js +13 -6
- package/dist/commands/deploy.d.ts +14 -5
- package/dist/commands/deploy.js +376 -55
- package/dist/commands/dev-context.js +1 -1
- package/dist/commands/environments-repoint.d.ts +49 -0
- package/dist/commands/environments-repoint.js +219 -0
- package/dist/commands/init.js +7 -1
- package/dist/commands/new.js +14 -0
- package/dist/commands/secrets.d.ts +6 -4
- package/dist/commands/secrets.js +14 -7
- package/dist/commands/ui.js +1 -1
- package/dist/commands/workspaces.js +16 -1
- package/dist/index.js +47 -7
- package/dist/lib/ai/auth-discovery.d.ts +9 -12
- package/dist/lib/ai/auth-discovery.js +43 -145
- package/dist/lib/ai/orchestrator.d.ts +13 -6
- package/dist/lib/ai/orchestrator.js +46 -246
- package/dist/lib/ai/provedores.d.ts +57 -0
- package/dist/lib/ai/provedores.js +66 -0
- package/dist/lib/build-targets.d.ts +48 -10
- package/dist/lib/build-targets.js +64 -10
- package/dist/lib/cli-write.js +6 -3
- package/dist/lib/code-agent-gateway.d.ts +2 -2
- package/dist/lib/code-agent-gateway.js +2 -2
- package/dist/lib/code-agent-settings.d.ts +2 -2
- package/dist/lib/code-agent-settings.js +2 -4
- package/dist/lib/code-agent-types.d.ts +3 -1
- package/dist/lib/config.d.ts +4 -7
- package/dist/lib/config.js +9 -6
- package/dist/lib/deploy-recusa-de-destino.d.ts +9 -0
- package/dist/lib/deploy-recusa-de-destino.js +98 -0
- package/dist/lib/deploy-render-probe.d.ts +117 -0
- package/dist/lib/deploy-render-probe.js +475 -0
- package/dist/lib/deploy-vm-um-app.d.ts +62 -0
- package/dist/lib/deploy-vm-um-app.js +83 -0
- package/dist/lib/segredo-produto.d.ts +25 -5
- package/dist/lib/segredo-produto.js +45 -10
- package/dist/lib/sse.d.ts +4 -5
- package/dist/lib/sse.js +4 -5
- package/package.json +1 -2
package/dist/commands/db.js
CHANGED
|
@@ -1370,7 +1370,9 @@ function restoreFail(json, error, message) {
|
|
|
1370
1370
|
* 1. Lista backups disponíveis via GET /api/cli/v1/db/[id]/backups
|
|
1371
1371
|
* 2. Operador escolhe qual backup restaurar
|
|
1372
1372
|
* 3. Exige confirmação textual "RESTAURAR" (operação destrutiva)
|
|
1373
|
-
* 4. POST /api/cli/v1/db/[id]/restore com MFA step-up
|
|
1373
|
+
* 4. POST /api/cli/v1/db/[id]/restore com MFA step-up (`resolveStepUp`:
|
|
1374
|
+
* `--mfa-token` → sessão de 1h → pergunta do TOTP; sem nenhum dos três em
|
|
1375
|
+
* `--json`/sem terminal, falha fechada com `mfa_required`)
|
|
1374
1376
|
*
|
|
1375
1377
|
* Automação / --json (auditoria UX 2026-09): o restore precisa ser scriptável.
|
|
1376
1378
|
* - `--backup-id <id>` pula o prompt de seleção (validado contra a lista).
|
|
@@ -1388,10 +1390,6 @@ export async function runDbRestore(dbId, opts) {
|
|
|
1388
1390
|
restoreFail(opts.json, 'invalid_input', '<dbId> é obrigatório.');
|
|
1389
1391
|
return;
|
|
1390
1392
|
}
|
|
1391
|
-
if (!opts.mfa) {
|
|
1392
|
-
restoreFail(opts.json, 'mfa_required', '--mfa-token <token> é obrigatório para restaurar banco (operação destrutiva).');
|
|
1393
|
-
return;
|
|
1394
|
-
}
|
|
1395
1393
|
// Fail-CLOSED em --json: sem TTY pra escolher backup ou digitar a confirmação,
|
|
1396
1394
|
// então exige --backup-id e --yes explícitos (pula o inquirer, nunca trava).
|
|
1397
1395
|
if (opts.json && !opts.backupId) {
|
|
@@ -1471,6 +1469,15 @@ export async function runDbRestore(dbId, opts) {
|
|
|
1471
1469
|
}
|
|
1472
1470
|
}
|
|
1473
1471
|
// 4. POST restore com MFA step-up.
|
|
1472
|
+
//
|
|
1473
|
+
// bug_757b9746: o restore exigia `--mfa-token` logo na entrada e montava
|
|
1474
|
+
// `X-Neetru-MFA-Token` à mão — com a sessão de 1h de `neetru auth mfa-session`
|
|
1475
|
+
// ativa, recusava do mesmo jeito, embora a rota do Core
|
|
1476
|
+
// (`requireCliStepUpMfa`) aceite `X-Neetru-MFA-Session`. Era o último comando
|
|
1477
|
+
// destrutivo fora do `resolveStepUp`. Resolvido AQUI, depois da escolha e da
|
|
1478
|
+
// confirmação e antes do spinner: o TOTP perguntado não vence no meio, quem
|
|
1479
|
+
// cancela não gasta código e a pergunta não disputa a linha com o spinner.
|
|
1480
|
+
const { headers: mfaHeaders } = await resolveStepUp({ mfaToken: opts.mfa, json: opts.json });
|
|
1474
1481
|
const spinnerRestore = opts.json
|
|
1475
1482
|
? null
|
|
1476
1483
|
: ora({ text: 'Disparando restore…', color: 'yellow' }).start();
|
|
@@ -1478,7 +1485,7 @@ export async function runDbRestore(dbId, opts) {
|
|
|
1478
1485
|
try {
|
|
1479
1486
|
resp = await apiRequest(`/api/cli/v1/db/${encodeURIComponent(dbId)}/restore`, {
|
|
1480
1487
|
method: 'POST',
|
|
1481
|
-
headers:
|
|
1488
|
+
headers: mfaHeaders,
|
|
1482
1489
|
body: { backupId, dbId },
|
|
1483
1490
|
});
|
|
1484
1491
|
spinnerRestore?.succeed(`Restore iniciado — job ${chalk.bold(resp.jobId ?? '—')} · status: ${resp.status}`);
|
|
@@ -84,6 +84,8 @@ export interface DeployOptions {
|
|
|
84
84
|
* HTTP de saúde pós-deploy (`GET https://<domain>/api/health?deep=1`). Default
|
|
85
85
|
* SEMPRE false — o probe roda por padrão. Use apenas em casos legítimos sem
|
|
86
86
|
* superfície HTTP (ex.: deploy de um serviço/worker sem endpoint web).
|
|
87
|
+
* Pula também a conferência da página inicial (bug_0d2e0087), que só roda
|
|
88
|
+
* depois de a saúde passar.
|
|
87
89
|
*/
|
|
88
90
|
skipHealthProbe?: boolean;
|
|
89
91
|
/**
|
|
@@ -170,9 +172,16 @@ export declare function runPublicSecretGate(source: {
|
|
|
170
172
|
* Também não mandamos para stack não-node: ali `entrypoint` é `index.html` /
|
|
171
173
|
* `index.php` / referência de imagem, que não é "arquivo para o `node` rodar".
|
|
172
174
|
*
|
|
173
|
-
*
|
|
174
|
-
*
|
|
175
|
-
*
|
|
175
|
+
* Do lado do Core o campo chega: desde o d6cfda64 (2026-10-11) o
|
|
176
|
+
* `deployRequestSchema` declara `entrypoint` e o `entrypointToStartCommand` o
|
|
177
|
+
* traduz para o `startCommand` do agente (`node apps/web/server.js`).
|
|
178
|
+
*
|
|
179
|
+
* O que ainda NÃO fecha é do agente (medido na main dele, 1.6.80): a decisão de
|
|
180
|
+
* instalar dependências (`resolveNodeInstallPlan` em `deploy-plan.ts`) também
|
|
181
|
+
* olha só a raiz do pacote. Sem `server.js` nem `.next/` na raiz, o pacote de
|
|
182
|
+
* monorepo não é reconhecido como standalone e o agente roda `npm rebuild` (e,
|
|
183
|
+
* se falhar, `npm install`) na raiz do pacote, em vez de pular a instalação.
|
|
184
|
+
* O conserto é no `neetru-agent-service-vm` (bug_bc72fe7e).
|
|
176
185
|
*/
|
|
177
186
|
export declare function entrypointParaDeploy(manifest: Pick<BuildManifest, 'entrypoint' | 'appPrefix' | 'stack'> | null | undefined): string | undefined;
|
|
178
187
|
/** `true` pra `prod`/`production` (o Core normaliza `production`→`prod`). */
|
|
@@ -262,8 +271,8 @@ export declare const SECRET_ENVVAR_PATTERNS: RegExp[];
|
|
|
262
271
|
export declare function avisoSegredoDescartadoNaVm(chave: string, env: string | undefined): string;
|
|
263
272
|
/**
|
|
264
273
|
* O aviso desta chave manda para `neetru secrets set`? Não manda quando o
|
|
265
|
-
* Core reserva a chave — aí
|
|
266
|
-
*
|
|
274
|
+
* Core reserva a chave — aí a nota de como o segredo registrado chega ao app
|
|
275
|
+
* (`notaSegredoDescartadoNoDeploy`) também não cabe.
|
|
267
276
|
*/
|
|
268
277
|
export declare function segredoDescartadoApontaSecretsSet(chave: string): boolean;
|
|
269
278
|
export declare function pickTarget(opts: DeployOptions, nonInteractive: boolean, runtime?: string): Promise<'cloud-run' | 'vm' | 'workspace'>;
|