@neetru/cli 2.31.0 → 2.32.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 +99 -2
- package/README.md +2 -0
- package/dist/cli-kit/choices.d.ts +33 -0
- package/dist/cli-kit/choices.js +32 -0
- package/dist/cli-kit/command-context.d.ts +98 -0
- package/dist/cli-kit/command-context.js +108 -0
- package/dist/cli-kit/errors.d.ts +79 -0
- package/dist/cli-kit/errors.js +94 -0
- package/dist/cli-kit/index.d.ts +8 -0
- package/dist/cli-kit/index.js +8 -0
- package/dist/cli-kit/suggest.d.ts +74 -0
- package/dist/cli-kit/suggest.js +207 -0
- package/dist/commands/admin/oidc-login.js +1 -1
- package/dist/commands/admin/sdk-credential.js +1 -1
- package/dist/commands/autocomplete.d.ts +1 -1
- package/dist/commands/autocomplete.js +1 -0
- package/dist/commands/bug.d.ts +59 -0
- package/dist/commands/bug.js +118 -6
- package/dist/commands/build.d.ts +24 -1
- package/dist/commands/build.js +195 -73
- package/dist/commands/chat.d.ts +94 -1
- package/dist/commands/chat.js +258 -26
- package/dist/commands/customers.js +1 -1
- package/dist/commands/db-move.js +3 -3
- package/dist/commands/db.js +20 -33
- package/dist/commands/deploy.d.ts +91 -2
- package/dist/commands/deploy.js +423 -78
- package/dist/commands/deployments.js +11 -6
- package/dist/commands/dev-context.js +15 -5
- package/dist/commands/docs-produto.d.ts +25 -0
- package/dist/commands/docs-produto.js +70 -8
- package/dist/commands/doctor.js +36 -1
- package/dist/commands/domains.js +85 -4
- package/dist/commands/env.d.ts +9 -3
- package/dist/commands/env.js +23 -3
- package/dist/commands/infra-read.js +2 -2
- package/dist/commands/init.js +8 -1
- package/dist/commands/login.js +35 -8
- package/dist/commands/logs.js +12 -4
- package/dist/commands/mobile.js +33 -9
- package/dist/commands/new.d.ts +29 -1
- package/dist/commands/new.js +92 -4
- package/dist/commands/open.js +16 -6
- package/dist/commands/ops.js +1 -1
- package/dist/commands/products-db.d.ts +1 -0
- package/dist/commands/products-db.js +41 -8
- package/dist/commands/products.d.ts +17 -3
- package/dist/commands/products.js +86 -18
- package/dist/commands/promote.js +30 -5
- package/dist/commands/secrets.d.ts +91 -0
- package/dist/commands/secrets.js +471 -0
- package/dist/commands/servers.js +8 -5
- package/dist/commands/status.js +2 -2
- package/dist/commands/support.js +5 -3
- package/dist/commands/tenants.js +28 -16
- package/dist/commands/upgrade.d.ts +9 -0
- package/dist/commands/upgrade.js +50 -1
- package/dist/commands/vm-memory.js +1 -0
- package/dist/commands/webhooks.d.ts +2 -0
- package/dist/commands/webhooks.js +9 -3
- package/dist/commands/workspaces.js +42 -11
- package/dist/index.js +70 -14
- package/dist/lib/api-client.d.ts +14 -0
- package/dist/lib/api-client.js +59 -6
- package/dist/lib/api-error.d.ts +14 -0
- package/dist/lib/api-error.js +107 -46
- package/dist/lib/build-targets.d.ts +127 -0
- package/dist/lib/build-targets.js +348 -0
- package/dist/lib/cli-error.d.ts +13 -0
- package/dist/lib/cli-error.js +24 -0
- package/dist/lib/cli-write.d.ts +43 -9
- package/dist/lib/cli-write.js +154 -45
- package/dist/lib/config-schema.d.ts +8 -8
- package/dist/lib/db-local/db-json.d.ts +1 -1
- package/dist/lib/db-local/db-json.js +13 -5
- package/dist/lib/db-local/env.d.ts +15 -3
- package/dist/lib/db-local/env.js +37 -10
- package/dist/lib/db-pipeline/build-deps.d.ts +5 -1
- package/dist/lib/db-pipeline/build-deps.js +23 -3
- package/dist/lib/db-pipeline/types.d.ts +6 -2
- package/dist/lib/db-pipeline/types.js +0 -18
- package/dist/lib/deploy-target-contract.d.ts +152 -0
- package/dist/lib/deploy-target-contract.js +411 -0
- package/dist/lib/env-file-do-build.d.ts +19 -0
- package/dist/lib/env-file-do-build.js +44 -0
- package/dist/lib/envs.d.ts +108 -0
- package/dist/lib/envs.js +127 -0
- package/dist/lib/fs-seguro.d.ts +63 -0
- package/dist/lib/fs-seguro.js +108 -0
- package/dist/lib/inquirer-sob-demanda.d.ts +14 -0
- package/dist/lib/inquirer-sob-demanda.js +18 -0
- package/dist/lib/mobile-local/mobile-json.js +10 -4
- package/dist/lib/pickers.d.ts +44 -7
- package/dist/lib/pickers.js +65 -7
- package/dist/lib/product-docs/sync.d.ts +6 -0
- package/dist/lib/product-docs/sync.js +10 -1
- package/dist/lib/public-secret-scan.d.ts +44 -3
- package/dist/lib/public-secret-scan.js +361 -36
- package/dist/lib/render.d.ts +16 -0
- package/dist/lib/render.js +34 -4
- package/dist/lib/segredo-produto.d.ts +124 -0
- package/dist/lib/segredo-produto.js +336 -0
- package/dist/lib/texto-utf8.d.ts +96 -0
- package/dist/lib/texto-utf8.js +196 -0
- package/package.json +2 -1
- package/dist/cli-kit/format.js.map +0 -1
- package/dist/cli-kit/glyphs.js.map +0 -1
- package/dist/cli-kit/index.js.map +0 -1
- package/dist/cli-kit/palette.js.map +0 -1
- package/dist/commands/add.js.map +0 -1
- package/dist/commands/admin/iam-check.js.map +0 -1
- package/dist/commands/admin/oidc-login.js.map +0 -1
- package/dist/commands/admin/sdk-credential.js.map +0 -1
- package/dist/commands/agent-release.js.map +0 -1
- package/dist/commands/agent-write.js.map +0 -1
- package/dist/commands/ai-models.js.map +0 -1
- package/dist/commands/ai.js.map +0 -1
- package/dist/commands/api-catalog.js.map +0 -1
- package/dist/commands/archive.js.map +0 -1
- package/dist/commands/artifact-registry.js.map +0 -1
- package/dist/commands/audit.js.map +0 -1
- package/dist/commands/auth.js.map +0 -1
- package/dist/commands/autocomplete.js.map +0 -1
- package/dist/commands/billing.js.map +0 -1
- package/dist/commands/bootstrap.js.map +0 -1
- package/dist/commands/bug.js.map +0 -1
- package/dist/commands/build.js.map +0 -1
- package/dist/commands/chat-menu.js.map +0 -1
- package/dist/commands/chat.js.map +0 -1
- package/dist/commands/cloud-run.js.map +0 -1
- package/dist/commands/code.js.map +0 -1
- package/dist/commands/config.js.map +0 -1
- package/dist/commands/customers.js.map +0 -1
- package/dist/commands/db-move.js.map +0 -1
- package/dist/commands/db.js.map +0 -1
- package/dist/commands/deploy.js.map +0 -1
- package/dist/commands/deployments.js.map +0 -1
- package/dist/commands/dev-context.js.map +0 -1
- package/dist/commands/dev-up.js.map +0 -1
- package/dist/commands/dev.js.map +0 -1
- package/dist/commands/docs-produto.js.map +0 -1
- package/dist/commands/docs.js.map +0 -1
- package/dist/commands/doctor.js.map +0 -1
- package/dist/commands/domains.js.map +0 -1
- package/dist/commands/dr.js.map +0 -1
- package/dist/commands/env.js.map +0 -1
- package/dist/commands/hosting-write.js.map +0 -1
- package/dist/commands/infra-read.js.map +0 -1
- package/dist/commands/init.js.map +0 -1
- package/dist/commands/login.js.map +0 -1
- package/dist/commands/logout.js.map +0 -1
- package/dist/commands/logs.js.map +0 -1
- package/dist/commands/mobile.js.map +0 -1
- package/dist/commands/mocks.js.map +0 -1
- package/dist/commands/new.js.map +0 -1
- package/dist/commands/open.js.map +0 -1
- package/dist/commands/ops.js.map +0 -1
- package/dist/commands/products-db.js.map +0 -1
- package/dist/commands/products.js.map +0 -1
- package/dist/commands/promote.js.map +0 -1
- package/dist/commands/publish.js.map +0 -1
- package/dist/commands/schema.js.map +0 -1
- package/dist/commands/servers.js.map +0 -1
- package/dist/commands/smoke.js.map +0 -1
- package/dist/commands/status.js.map +0 -1
- package/dist/commands/support.js.map +0 -1
- package/dist/commands/surface-status.js.map +0 -1
- package/dist/commands/tenants.js.map +0 -1
- package/dist/commands/ui.js.map +0 -1
- package/dist/commands/upgrade.js.map +0 -1
- package/dist/commands/validate.js.map +0 -1
- package/dist/commands/vm-memory.js.map +0 -1
- package/dist/commands/vm.js.map +0 -1
- package/dist/commands/webhooks.js.map +0 -1
- package/dist/commands/whoami.js.map +0 -1
- package/dist/commands/workspaces.js.map +0 -1
- package/dist/index.js.map +0 -1
- package/dist/lib/agent-artifact-url.js.map +0 -1
- package/dist/lib/agent-commands.js.map +0 -1
- package/dist/lib/ai/auth-discovery.js.map +0 -1
- package/dist/lib/ai/context.js.map +0 -1
- package/dist/lib/ai/orchestrator.js.map +0 -1
- package/dist/lib/api-client.js.map +0 -1
- package/dist/lib/api-error.js.map +0 -1
- package/dist/lib/auth.js.map +0 -1
- package/dist/lib/cli-read.js.map +0 -1
- package/dist/lib/cli-write.js.map +0 -1
- package/dist/lib/code-agent-budget.js.map +0 -1
- package/dist/lib/code-agent-files.js.map +0 -1
- package/dist/lib/code-agent-gateway.js.map +0 -1
- package/dist/lib/code-agent-git-tools.js.map +0 -1
- package/dist/lib/code-agent-protocol.js.map +0 -1
- package/dist/lib/code-agent-session.js.map +0 -1
- package/dist/lib/code-agent-settings.js.map +0 -1
- package/dist/lib/code-agent-skills.js.map +0 -1
- package/dist/lib/code-agent-subagents.js.map +0 -1
- package/dist/lib/code-agent-tools.js.map +0 -1
- package/dist/lib/code-agent-tui.js.map +0 -1
- package/dist/lib/code-agent-types.js.map +0 -1
- package/dist/lib/code-agent-ui.js.map +0 -1
- package/dist/lib/code-agent-web-tools.js.map +0 -1
- package/dist/lib/code-agent-write-tools.js.map +0 -1
- package/dist/lib/compose-generator.js.map +0 -1
- package/dist/lib/config-schema.js.map +0 -1
- package/dist/lib/config.js.map +0 -1
- package/dist/lib/db-local/db-json.js.map +0 -1
- package/dist/lib/db-local/env.js.map +0 -1
- package/dist/lib/db-local/fingerprint.js.map +0 -1
- package/dist/lib/db-local/index.js.map +0 -1
- package/dist/lib/db-pipeline/build-deps.js.map +0 -1
- package/dist/lib/db-pipeline/errors.js.map +0 -1
- package/dist/lib/db-pipeline/index.js.map +0 -1
- package/dist/lib/db-pipeline/pipeline.js.map +0 -1
- package/dist/lib/db-pipeline/rehearse.js.map +0 -1
- package/dist/lib/db-pipeline/types.js.map +0 -1
- package/dist/lib/dev-local-context.js.map +0 -1
- package/dist/lib/iam-preflight.js.map +0 -1
- package/dist/lib/mobile-local/index.js.map +0 -1
- package/dist/lib/mobile-local/mobile-json.js.map +0 -1
- package/dist/lib/pickers.js.map +0 -1
- package/dist/lib/product-config.js.map +0 -1
- package/dist/lib/product-docs/check.js.map +0 -1
- package/dist/lib/product-docs/config.js.map +0 -1
- package/dist/lib/product-docs/dates.js.map +0 -1
- package/dist/lib/product-docs/frontmatter.js.map +0 -1
- package/dist/lib/product-docs/git.js.map +0 -1
- package/dist/lib/product-docs/markdown.js.map +0 -1
- package/dist/lib/product-docs/ops.js.map +0 -1
- package/dist/lib/product-docs/structure.js.map +0 -1
- package/dist/lib/product-docs/sync.js.map +0 -1
- package/dist/lib/product-docs/taxonomy.js.map +0 -1
- package/dist/lib/product-docs/templates.js.map +0 -1
- package/dist/lib/public-secret-scan.js.map +0 -1
- package/dist/lib/render.js.map +0 -1
- package/dist/lib/schema-cache.js.map +0 -1
- package/dist/lib/sse.js.map +0 -1
- package/dist/lib/telemetry.js.map +0 -1
- package/dist/lib/token-resolver.js.map +0 -1
- package/dist/lib/url-allowlist.js.map +0 -1
- package/dist/lib/version-check.js.map +0 -1
- package/dist/utils/logger.js.map +0 -1
- package/dist/utils/logo.js.map +0 -1
- package/dist/utils/safe-exit.js.map +0 -1
- package/dist/utils/spinner-registry.js.map +0 -1
- package/dist/version.js.map +0 -1
package/dist/commands/bug.js
CHANGED
|
@@ -14,13 +14,115 @@
|
|
|
14
14
|
*/
|
|
15
15
|
import chalk from 'chalk';
|
|
16
16
|
import ora from 'ora';
|
|
17
|
-
import
|
|
17
|
+
import { carregarInquirer } from '../lib/inquirer-sob-demanda.js';
|
|
18
18
|
import { apiRequest } from '../lib/api-client.js';
|
|
19
19
|
import { requireToken, handleApiError } from '../lib/cli-read.js';
|
|
20
20
|
import { printWriteResult } from '../lib/cli-write.js';
|
|
21
21
|
import { renderTable, fmtTimestamp } from '../lib/render.js';
|
|
22
22
|
import { log } from '../utils/logger.js';
|
|
23
23
|
import { safeExit } from '../utils/safe-exit.js';
|
|
24
|
+
// ─── Id do bug: inteiro na tela, prefixo como atalho ─────────────────────────
|
|
25
|
+
//
|
|
26
|
+
// bug_a4f84c1b (2026-10-12): o id que o Core gera tem 36 caracteres
|
|
27
|
+
// (`bug_` + uuid sem hífen) e a tabela cortava em 24 com `…`. O usuário copiava
|
|
28
|
+
// o que via, e `bug show` respondia "não encontrado" — negando a EXISTÊNCIA de
|
|
29
|
+
// um bug que existe. O próprio Dev Core caiu nisso consultando bug_a8375858.
|
|
30
|
+
//
|
|
31
|
+
// A tabela mostra o id INTEIRO: é o único handle que funciona sempre. A primeira
|
|
32
|
+
// versão deste conserto mostrava um id curto (`bug_` + 8 hex), e a revisão
|
|
33
|
+
// independente reproduziu em produção o defeito de novo: numa listagem filtrada
|
|
34
|
+
// (`--status resolved`), 38 de 200 linhas estavam fora da janela que a resolução
|
|
35
|
+
// de prefixo enxerga — a tabela imprimia de novo um handle que não resolvia.
|
|
36
|
+
//
|
|
37
|
+
// O prefixo continua aceito como ATALHO, pra quem digita ou cola o que o time
|
|
38
|
+
// escreve no chat (`bug_a4f84c1b`). Ambíguo lista candidatos; não achado NUNCA
|
|
39
|
+
// afirma que o bug não existe — só que não estava no que a listagem devolveu.
|
|
40
|
+
/** Formato do id gerado pelo Core (`bug_${randomUUID().replace(/-/g, '')}`). */
|
|
41
|
+
const ID_COMPLETO = /^bug_[0-9a-f]{32}$/;
|
|
42
|
+
/** Mínimo de hex depois de `bug_` pra aceitar como prefixo. */
|
|
43
|
+
const PREFIXO_MINIMO = 4;
|
|
44
|
+
/** Teto do `?limit` da listagem no Core (`cli/v1/bugs/route.ts`). */
|
|
45
|
+
const LIMITE_DA_LISTAGEM = 200;
|
|
46
|
+
/**
|
|
47
|
+
* Limpa o que o usuário colou: espaços, reticências da tabela antiga, caixa
|
|
48
|
+
* alta, e aceita o hex sem o `bug_` na frente (`a4f84c1b` → `bug_a4f84c1b`).
|
|
49
|
+
*/
|
|
50
|
+
export function normalizarEntradaDeId(entrada) {
|
|
51
|
+
let s = entrada.trim().toLowerCase();
|
|
52
|
+
s = s.replace(/(…|\.\.\.)$/, '');
|
|
53
|
+
if (!s.startsWith('bug_') && /^[0-9a-f]+$/.test(s))
|
|
54
|
+
s = `bug_${s}`;
|
|
55
|
+
return s;
|
|
56
|
+
}
|
|
57
|
+
/** Pura: decide o id a partir da entrada e da lista. Testável sem rede. */
|
|
58
|
+
export function escolherBugPorPrefixo(entrada, rows) {
|
|
59
|
+
const alvo = normalizarEntradaDeId(entrada);
|
|
60
|
+
if (ID_COMPLETO.test(alvo))
|
|
61
|
+
return { ok: true, id: alvo };
|
|
62
|
+
if (alvo.length < 'bug_'.length + PREFIXO_MINIMO) {
|
|
63
|
+
return { ok: false, motivo: 'curto_demais', candidatos: [] };
|
|
64
|
+
}
|
|
65
|
+
const candidatos = rows.filter((r) => typeof r.id === 'string' && r.id.startsWith(alvo));
|
|
66
|
+
if (candidatos.length === 1)
|
|
67
|
+
return { ok: true, id: candidatos[0].id };
|
|
68
|
+
return {
|
|
69
|
+
ok: false,
|
|
70
|
+
motivo: candidatos.length === 0 ? 'nao_encontrado' : 'ambiguo',
|
|
71
|
+
candidatos,
|
|
72
|
+
};
|
|
73
|
+
}
|
|
74
|
+
/**
|
|
75
|
+
* Resolve o id que o usuário digitou pro id completo. Id completo não custa
|
|
76
|
+
* chamada extra; prefixo custa UMA listagem. Falha sai com mensagem que diz o
|
|
77
|
+
* que fazer, em vez do "não encontrado" que mentia.
|
|
78
|
+
*/
|
|
79
|
+
export async function resolverIdDoBug(entrada, token, json) {
|
|
80
|
+
const direto = normalizarEntradaDeId(entrada);
|
|
81
|
+
if (ID_COMPLETO.test(direto))
|
|
82
|
+
return direto;
|
|
83
|
+
let rows = [];
|
|
84
|
+
try {
|
|
85
|
+
const res = await apiRequest(`/api/cli/v1/bugs?limit=${LIMITE_DA_LISTAGEM}`, { token });
|
|
86
|
+
rows = Array.isArray(res?.reports) ? res.reports : [];
|
|
87
|
+
}
|
|
88
|
+
catch (error) {
|
|
89
|
+
handleApiError(error, json);
|
|
90
|
+
}
|
|
91
|
+
const r = escolherBugPorPrefixo(entrada, rows);
|
|
92
|
+
if (r.ok)
|
|
93
|
+
return r.id;
|
|
94
|
+
let msg;
|
|
95
|
+
if (r.motivo === 'curto_demais') {
|
|
96
|
+
msg =
|
|
97
|
+
`Id "${entrada}" curto demais. Use ao menos bug_ + ${PREFIXO_MINIMO} caracteres ` +
|
|
98
|
+
'(ex.: bug_a4f8) ou o id completo de `neetru bug list --json`.';
|
|
99
|
+
}
|
|
100
|
+
else if (r.motivo === 'ambiguo') {
|
|
101
|
+
const lista = r.candidatos
|
|
102
|
+
.slice(0, 10)
|
|
103
|
+
.map((b) => ` ${b.id} ${b.title ?? ''}`.trimEnd())
|
|
104
|
+
.join('\n');
|
|
105
|
+
msg = `Prefixo "${entrada}" casa com ${r.candidatos.length} bugs — use mais caracteres:\n${lista}`;
|
|
106
|
+
}
|
|
107
|
+
else {
|
|
108
|
+
// NUNCA afirmar que o bug não existe: a listagem tem teto (200) e, pra quem
|
|
109
|
+
// não é admin, ainda é filtrada por produto no Core. O que dá pra afirmar é
|
|
110
|
+
// só o que foi visto.
|
|
111
|
+
msg =
|
|
112
|
+
`Não achei bug começando com "${direto}" entre os ${rows.length} que a ` +
|
|
113
|
+
'listagem devolveu (os mais recentes que você pode ver). Use o id completo — ' +
|
|
114
|
+
'a coluna ID de `neetru bug list` mostra inteiro.';
|
|
115
|
+
}
|
|
116
|
+
if (json) {
|
|
117
|
+
// Mesmo formato do resto da CLI (`cli-write.ts`): `error` é o CÓDIGO, em texto.
|
|
118
|
+
console.log(JSON.stringify({ ok: false, error: `bug_id_${r.motivo}`, message: msg }));
|
|
119
|
+
}
|
|
120
|
+
else {
|
|
121
|
+
log.error(msg);
|
|
122
|
+
}
|
|
123
|
+
safeExit(1);
|
|
124
|
+
return '';
|
|
125
|
+
}
|
|
24
126
|
// ─── Formatação ──────────────────────────────────────────────────────────────
|
|
25
127
|
function colorStatus(s) {
|
|
26
128
|
if (!s)
|
|
@@ -67,7 +169,7 @@ export async function runBugReport(opts) {
|
|
|
67
169
|
let severity = opts.severity?.trim() ?? '';
|
|
68
170
|
const interactive = !opts.json && (!title || !description);
|
|
69
171
|
if (interactive) {
|
|
70
|
-
const answers = await
|
|
172
|
+
const answers = await (await carregarInquirer()).prompt([
|
|
71
173
|
{
|
|
72
174
|
type: 'input',
|
|
73
175
|
name: 'title',
|
|
@@ -187,12 +289,14 @@ export async function runBugList(opts) {
|
|
|
187
289
|
return;
|
|
188
290
|
}
|
|
189
291
|
renderTable([
|
|
190
|
-
{ header: 'ID', value: (b) => b.id,
|
|
292
|
+
{ header: 'ID', value: (b) => b.id, identificador: true },
|
|
191
293
|
{ header: 'TÍTULO', value: (b) => b.title ?? '—', maxWidth: 40 },
|
|
192
294
|
{ header: 'STATUS', value: (b) => colorStatus(b.status) },
|
|
193
295
|
{ header: 'SEV', value: (b) => colorSeverity(b.severity) },
|
|
194
296
|
{ header: 'CATEGORIA', value: (b) => b.category ?? '—', maxWidth: 10 },
|
|
195
|
-
|
|
297
|
+
// uid de 28 caracteres que `--assigned-to` aceita de volta: cortado em 24
|
|
298
|
+
// virava um uid que não existe (revisão do #75).
|
|
299
|
+
{ header: 'RESPONSÁVEL', value: (b) => b.assignedTo ?? chalk.dim('—'), identificador: true },
|
|
196
300
|
{ header: 'REPORTADO', value: (b) => fmtTimestamp(b.reportedAt), maxWidth: 14 },
|
|
197
301
|
], res.reports);
|
|
198
302
|
console.log();
|
|
@@ -209,6 +313,7 @@ export async function runBugShow(id, opts) {
|
|
|
209
313
|
safeExit(1);
|
|
210
314
|
}
|
|
211
315
|
const token = await requireToken(opts.json);
|
|
316
|
+
id = await resolverIdDoBug(id, token, opts.json);
|
|
212
317
|
const spinner = opts.json ? null : ora({ text: `Buscando bug ${id}…`, color: 'blue' }).start();
|
|
213
318
|
let res;
|
|
214
319
|
try {
|
|
@@ -286,6 +391,7 @@ export async function runBugClaim(id, opts) {
|
|
|
286
391
|
safeExit(1);
|
|
287
392
|
}
|
|
288
393
|
const token = await requireToken(opts.json);
|
|
394
|
+
id = await resolverIdDoBug(id, token, opts.json);
|
|
289
395
|
const spinner = opts.json ? null : ora({ text: `Assumindo bug ${id}…`, color: 'blue' }).start();
|
|
290
396
|
let res;
|
|
291
397
|
try {
|
|
@@ -317,7 +423,7 @@ export async function runBugResolve(id, opts) {
|
|
|
317
423
|
let status = (opts.status ?? 'resolved').trim();
|
|
318
424
|
let duplicateOf = opts.duplicateOf?.trim() ?? '';
|
|
319
425
|
if (!opts.json && !summary) {
|
|
320
|
-
const ans = await
|
|
426
|
+
const ans = await (await carregarInquirer()).prompt([
|
|
321
427
|
{
|
|
322
428
|
type: 'editor',
|
|
323
429
|
name: 'summary',
|
|
@@ -352,6 +458,11 @@ export async function runBugResolve(id, opts) {
|
|
|
352
458
|
safeExit(1);
|
|
353
459
|
}
|
|
354
460
|
const token = await requireToken(opts.json);
|
|
461
|
+
id = await resolverIdDoBug(id, token, opts.json);
|
|
462
|
+
// `--duplicate-of` também é id de bug: sem resolver, o Core gravaria a
|
|
463
|
+
// duplicata apontando pra um id que não existe.
|
|
464
|
+
if (duplicateOf)
|
|
465
|
+
duplicateOf = await resolverIdDoBug(duplicateOf, token, opts.json);
|
|
355
466
|
const spinner = opts.json ? null : ora({ text: `Encerrando bug ${id}…`, color: 'blue' }).start();
|
|
356
467
|
let res;
|
|
357
468
|
try {
|
|
@@ -386,7 +497,7 @@ export async function runBugComment(id, opts) {
|
|
|
386
497
|
}
|
|
387
498
|
let body = opts.body?.trim() ?? '';
|
|
388
499
|
if (!opts.json && !body) {
|
|
389
|
-
const ans = await
|
|
500
|
+
const ans = await (await carregarInquirer()).prompt([
|
|
390
501
|
{
|
|
391
502
|
type: 'editor',
|
|
392
503
|
name: 'body',
|
|
@@ -401,6 +512,7 @@ export async function runBugComment(id, opts) {
|
|
|
401
512
|
safeExit(1);
|
|
402
513
|
}
|
|
403
514
|
const token = await requireToken(opts.json);
|
|
515
|
+
id = await resolverIdDoBug(id, token, opts.json);
|
|
404
516
|
const spinner = opts.json ? null : ora({ text: `Comentando bug ${id}…`, color: 'blue' }).start();
|
|
405
517
|
let res;
|
|
406
518
|
try {
|
package/dist/commands/build.d.ts
CHANGED
|
@@ -1,5 +1,17 @@
|
|
|
1
|
+
import { type RuntimeEnvironmentId } from '../lib/envs.js';
|
|
1
2
|
export interface BuildOptions {
|
|
2
3
|
product?: string;
|
|
4
|
+
/**
|
|
5
|
+
* bug_678ddc98: diretório do APP a construir, relativo a onde o comando foi
|
|
6
|
+
* invocado. Em monorepo (pnpm workspaces + Turborepo) o app não fica na raiz
|
|
7
|
+
* do repo — antes disso só dava pra buildar com `cd apps/web`, o que levava
|
|
8
|
+
* junto o `.neetru-build` e a resolução de lockfile pro lugar errado.
|
|
9
|
+
*
|
|
10
|
+
* O artefato continua saindo onde o comando foi invocado (a raiz do repo, em
|
|
11
|
+
* geral) pra que o `neetru deploy` seguinte, que procura
|
|
12
|
+
* `<cwd>/.neetru-build/manifest.json`, encontre o que acabou de ser gerado.
|
|
13
|
+
*/
|
|
14
|
+
app?: string;
|
|
3
15
|
/**
|
|
4
16
|
* Stack a usar no build. 'nextjs' é alias de conveniência da CLI — normalizado
|
|
5
17
|
* pra 'node' internamente (bug_ebac4e6c: antes causava "Stack desconhecida: nextjs").
|
|
@@ -34,7 +46,7 @@ export interface BuildOptions {
|
|
|
34
46
|
* spawn-env (que dotenv/Next.js NUNCA sobrescreve a partir de arquivo)
|
|
35
47
|
* — neutraliza o arquivo ambiente sem tocar em nada no disco do dev.
|
|
36
48
|
*/
|
|
37
|
-
targetEnv?:
|
|
49
|
+
targetEnv?: RuntimeEnvironmentId;
|
|
38
50
|
/**
|
|
39
51
|
* SETOR 5.1 (PLANO_MESTRE_QUALIDADE_ECOSSISTEMA_2026-08-03): saída
|
|
40
52
|
* machine-readable. Suprime banner/spinner/logs humanos do stdout, roteia a
|
|
@@ -62,6 +74,17 @@ export interface BuildManifest {
|
|
|
62
74
|
sha256: string;
|
|
63
75
|
sizeBytes: number;
|
|
64
76
|
entrypoint?: string;
|
|
77
|
+
/**
|
|
78
|
+
* Prefixo do app dentro do standalone, quando o Next.js ANINHOU o app num
|
|
79
|
+
* monorepo (`apps/web`). `''`/ausente = app na raiz do tarball, layout que o
|
|
80
|
+
* agente sabe inferir sozinho.
|
|
81
|
+
*
|
|
82
|
+
* Existe pra o `deploy` conseguir distinguir "entrypoint que o agente NÃO tem
|
|
83
|
+
* como adivinhar" de "entrypoint que ele adivinha melhor que a gente" — ver
|
|
84
|
+
* `entrypointParaDeploy` em `deploy.ts`. Sem este campo o deploy teria que
|
|
85
|
+
* inferir o aninhamento do formato da string, inferência sobre inferência.
|
|
86
|
+
*/
|
|
87
|
+
appPrefix?: string;
|
|
65
88
|
builtAt: string;
|
|
66
89
|
}
|
|
67
90
|
/**
|