@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
|
@@ -37,13 +37,43 @@ import { CARACTERE_DE_TROCA, decodificarUtf8, recusaNaoUtf8, semBomInicial } fro
|
|
|
37
37
|
// mesma). Reexportada para quem já importava daqui.
|
|
38
38
|
export { CARACTERE_DE_TROCA, CodificacaoInvalida, decodificarUtf8, semBomInicial, } from './texto-utf8.js';
|
|
39
39
|
/**
|
|
40
|
-
*
|
|
41
|
-
*
|
|
42
|
-
*
|
|
40
|
+
* Primeira versão PUBLICADA do agente da VM que entrega os segredos do produto
|
|
41
|
+
* ao app (Parte 2 de bug_8b85353b, agent#87): com `productEnv: true` no
|
|
42
|
+
* `agent.deploy`, ele busca os valores no Core e grava
|
|
43
|
+
* `/etc/neetru/<slug>.product.env` (root, 0600), lido pelo unit do app.
|
|
44
|
+
*
|
|
45
|
+
* Por que 1.6.80 e não 1.6.79: o CHANGELOG do agente põe o recurso na 1.6.79,
|
|
46
|
+
* mas essa versão foi declarada e nunca publicada; `agent_releases/1.6.80`
|
|
47
|
+
* (stable) saiu em 2026-10-20 e as duas VMs operacionais (snee-002-multi e
|
|
48
|
+
* snee-003-db) reportam 1.6.80 desde 2026-10-22 (medido na vistoria de 22/10).
|
|
49
|
+
* Agente mais velho ignora `productEnv` calado — por isso a versão vai na nota.
|
|
50
|
+
*/
|
|
51
|
+
export const AGENTE_MINIMO_SEGREDO_DO_PRODUTO = '1.6.80';
|
|
52
|
+
// Até a 2.33.0 a CLI dizia, no `secrets set` (tela e `note` do `--json`) e no
|
|
53
|
+
// `deploy --target vm`, que "o agente da VM ainda não entrega segredos do
|
|
54
|
+
// produto ao app" — frase escrita em 2026-10-16, verdadeira até a 1.6.80 sair
|
|
55
|
+
// (2026-10-20) e falsa depois. Ela mandava o dev NÃO usar um caminho que
|
|
56
|
+
// funciona: a imagem espelhada do defeito que define o bug_8b85353b
|
|
57
|
+
// ("documentar um caminho que não existe"). As duas notas abaixo dizem só o
|
|
58
|
+
// que é verdade hoje: QUANDO o segredo chega (num deploy) e o que a VM precisa.
|
|
59
|
+
/** Nota depois de `neetru secrets set` gravar: o app só vê a gravação no PRÓXIMO deploy. */
|
|
60
|
+
export function notaEntregaDoSegredo(ambiente) {
|
|
61
|
+
return (`O app recebe o segredo no próximo deploy em ${ambiente}: nesse deploy o agente da VM ` +
|
|
62
|
+
`(versão ${AGENTE_MINIMO_SEGREDO_DO_PRODUTO} ou mais nova) busca o valor no Core e o grava ` +
|
|
63
|
+
'num arquivo que só o root da VM lê. O app que está no ar só vê esta gravação depois desse deploy.');
|
|
64
|
+
}
|
|
65
|
+
/**
|
|
66
|
+
* Nota do `neetru deploy --target vm` depois de descartar do `--env-file`
|
|
67
|
+
* chave(s) com cara de segredo que o registro aceita. `env` é o `--env` cru do
|
|
68
|
+
* deploy: sai no nome canônico que o Core aceita, ou `<ambiente>`.
|
|
43
69
|
*/
|
|
44
|
-
export
|
|
45
|
-
|
|
46
|
-
'
|
|
70
|
+
export function notaSegredoDescartadoNoDeploy(env) {
|
|
71
|
+
const ambiente = normalizarAmbienteTenant(env) ?? '<ambiente>';
|
|
72
|
+
return ('Segredo do produto chega ao app na VM pelo registro, não pelo --env-file: a chave já ' +
|
|
73
|
+
`registrada em ${ambiente} entra neste deploy (agente da VM ${AGENTE_MINIMO_SEGREDO_DO_PRODUTO} ` +
|
|
74
|
+
'ou mais novo); a que ainda não está registrada só chega no primeiro deploy depois do ' +
|
|
75
|
+
`registro. Confira o que já está registrado com \`neetru secrets list --env ${ambiente}\`.`);
|
|
76
|
+
}
|
|
47
77
|
/**
|
|
48
78
|
* O comando que registra `chave` no ambiente do deploy. `env` é o `--env` cru
|
|
49
79
|
* do deploy (`dev`, `production`…): sai no nome canônico que o Core aceita, ou
|
|
@@ -140,15 +170,20 @@ export function problemaNaChaveReservada(chave) {
|
|
|
140
170
|
* Por que a chave é recusada, ou `null` se serve. NUNCA repete o que foi
|
|
141
171
|
* digitado: `KEY=valor` e o valor colado no lugar do nome são os dois erros
|
|
142
172
|
* mais prováveis, e ecoar a entrada imprimiria o segredo.
|
|
173
|
+
*
|
|
174
|
+
* `comoMandarOValor`: por onde o valor entra NO COMANDO que chamou (o `set`
|
|
175
|
+
* passa "por --stdin, --from-file ou pelo pedido na tela"). bug_89d2497e
|
|
176
|
+
* (etapa 1): o texto citava essas flags a todo chamador, e o `secrets archive`
|
|
177
|
+
* — que não recebe valor nem declara as flags — também o mostrava.
|
|
143
178
|
*/
|
|
144
|
-
export function problemaNaChave(chave) {
|
|
179
|
+
export function problemaNaChave(chave, comoMandarOValor) {
|
|
145
180
|
if (typeof chave === 'string' && CHAVE_SEGREDO_RE.test(chave))
|
|
146
181
|
return null;
|
|
147
182
|
if (typeof chave === 'string' && chave.includes('=')) {
|
|
148
183
|
return ('Parece que você passou CHAVE=VALOR. O valor do segredo nunca vai na linha de ' +
|
|
149
|
-
'comando (fica no histórico do shell). Passe só o nome
|
|
150
|
-
|
|
151
|
-
'considere-o exposto e troque-o.');
|
|
184
|
+
'comando (fica no histórico do shell). Passe só o nome' +
|
|
185
|
+
(comoMandarOValor ? ` e mande o valor ${comoMandarOValor}` : '') +
|
|
186
|
+
'. Se o valor já foi digitado, considere-o exposto e troque-o.');
|
|
152
187
|
}
|
|
153
188
|
return ('Nome de segredo inválido. Use CAIXA_ALTA com letras, dígitos e underscore, ' +
|
|
154
189
|
'começando por letra, de 2 a 64 caracteres (ex.: NEETRU_WEBHOOK_SECRET). ' +
|
package/dist/lib/sse.d.ts
CHANGED
|
@@ -4,11 +4,10 @@
|
|
|
4
4
|
* linha `data: ` encontrada — `payload` é a string crua (sem parse; o caller
|
|
5
5
|
* decide o shape do JSON e trata `[DONE]`/keep-alives à sua maneira).
|
|
6
6
|
*
|
|
7
|
-
* Extraído de `src/lib/ai/orchestrator.ts` (onde nasceu
|
|
8
|
-
*
|
|
9
|
-
*
|
|
10
|
-
*
|
|
11
|
-
* + openai). Cleanup do reader é feito aqui (`reader.cancel()` em finally) —
|
|
7
|
+
* Extraído de `src/lib/ai/orchestrator.ts` (onde nasceu no `streamGateway`)
|
|
8
|
+
* pra um módulo sem dependências pesadas — `code-agent-gateway.ts`
|
|
9
|
+
* (`neetru code`) reusa o mesmo parser sem herdar o bundle inteiro do
|
|
10
|
+
* orchestrator (SDK `openai`). Cleanup do reader é feito aqui (`reader.cancel()` em finally) —
|
|
12
11
|
* o caller só precisa gerenciar seu próprio timeout/AbortController.
|
|
13
12
|
*/
|
|
14
13
|
export declare function readSseLines(body: ReadableStream<Uint8Array>, onLine: (payload: string) => void): Promise<void>;
|
package/dist/lib/sse.js
CHANGED
|
@@ -4,11 +4,10 @@
|
|
|
4
4
|
* linha `data: ` encontrada — `payload` é a string crua (sem parse; o caller
|
|
5
5
|
* decide o shape do JSON e trata `[DONE]`/keep-alives à sua maneira).
|
|
6
6
|
*
|
|
7
|
-
* Extraído de `src/lib/ai/orchestrator.ts` (onde nasceu
|
|
8
|
-
*
|
|
9
|
-
*
|
|
10
|
-
*
|
|
11
|
-
* + openai). Cleanup do reader é feito aqui (`reader.cancel()` em finally) —
|
|
7
|
+
* Extraído de `src/lib/ai/orchestrator.ts` (onde nasceu no `streamGateway`)
|
|
8
|
+
* pra um módulo sem dependências pesadas — `code-agent-gateway.ts`
|
|
9
|
+
* (`neetru code`) reusa o mesmo parser sem herdar o bundle inteiro do
|
|
10
|
+
* orchestrator (SDK `openai`). Cleanup do reader é feito aqui (`reader.cancel()` em finally) —
|
|
12
11
|
* o caller só precisa gerenciar seu próprio timeout/AbortController.
|
|
13
12
|
*/
|
|
14
13
|
export async function readSseLines(body, onLine) {
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@neetru/cli",
|
|
3
|
-
"version": "2.
|
|
3
|
+
"version": "2.34.0",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"description": "Neetru Developer Kit — scaffold, AI assistant, publish, build e deploy de produtos SaaS Neetru via Core (VM-based agents)",
|
|
6
6
|
"keywords": [
|
|
@@ -42,7 +42,6 @@
|
|
|
42
42
|
"prepublishOnly": "npm run build"
|
|
43
43
|
},
|
|
44
44
|
"dependencies": {
|
|
45
|
-
"@anthropic-ai/sdk": "^0.96.0",
|
|
46
45
|
"@neetru/db-classifier": "^0.1.5",
|
|
47
46
|
"chalk": "^5.4.1",
|
|
48
47
|
"commander": "^12.1.0",
|