@aiuby-ia/cli 0.3.0 → 0.4.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 +10 -7
- package/dist/aiuby.mjs +25 -3
- package/docs/api.md +16 -0
- package/docs/cli.md +4 -3
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -2,24 +2,26 @@
|
|
|
2
2
|
|
|
3
3
|
Linha de comando e templates de partida do **AIUBY Compute**.
|
|
4
4
|
|
|
5
|
-
> **Estado: prévia (0.
|
|
5
|
+
> **Estado: prévia (0.4.0).** A CLI autentica, copia templates, cadastra aplicações e
|
|
6
6
|
> revisões a partir do `aiuby.toml`, lê o catálogo de hardware e mostra o plano de
|
|
7
7
|
> implantação. **Implantar funciona só em organizações com a prévia do runtime habilitada
|
|
8
8
|
> pela AIUBY**: CPU no Google Cloud, até 1 vCPU e 1 GB, 1 réplica, endereço público e prazo
|
|
9
|
-
> (a aplicação para sozinha). Nas demais, o pedido é
|
|
10
|
-
> volumes, segredos e GPU ainda não existem.
|
|
9
|
+
> (a aplicação para sozinha), com `aiuby logs` para ver a saída. Nas demais, o pedido é
|
|
10
|
+
> recusado com os motivos. Escala, volumes, segredos e GPU ainda não existem.
|
|
11
11
|
|
|
12
12
|
## Instalação
|
|
13
13
|
|
|
14
|
-
Precisa de Node.js 20 ou mais novo.
|
|
14
|
+
Precisa de Node.js 20 ou mais novo.
|
|
15
15
|
|
|
16
16
|
```bash
|
|
17
|
-
npm install -g
|
|
17
|
+
npm install -g @aiuby-ia/cli
|
|
18
18
|
aiuby --version
|
|
19
19
|
```
|
|
20
20
|
|
|
21
|
-
|
|
22
|
-
|
|
21
|
+
Sem acesso ao registro do npm, o mesmo pacote está no site da AIUBY:
|
|
22
|
+
`npm install -g https://aiuby.com/cli/aiuby-cli-latest.tgz`.
|
|
23
|
+
|
|
24
|
+
Para atualizar, rode o comando de instalação de novo. Para remover: `npm uninstall -g @aiuby-ia/cli`.
|
|
23
25
|
|
|
24
26
|
## Primeiros passos
|
|
25
27
|
|
|
@@ -51,6 +53,7 @@ aiuby apps create # cadastra; não implanta
|
|
|
51
53
|
aiuby apps update # depois de mudar o aiuby.toml: nova revisão
|
|
52
54
|
aiuby deploy --dry-run minha-api
|
|
53
55
|
aiuby deploy minha-api # só com a prévia do runtime; pede o escopo "Implantar no Compute"
|
|
56
|
+
aiuby logs minha-api
|
|
54
57
|
aiuby stop minha-api
|
|
55
58
|
```
|
|
56
59
|
|
package/dist/aiuby.mjs
CHANGED
|
@@ -20482,6 +20482,9 @@ var APP_SLUG = /^[a-z][a-z0-9-]{1,38}[a-z0-9]$/;
|
|
|
20482
20482
|
var MAX_REPLICAS = 100;
|
|
20483
20483
|
var CONTROL_CHARS = /[\u0000-\u001f\u007f-\u009f]/;
|
|
20484
20484
|
var noControl = (v) => !CONTROL_CHARS.test(v);
|
|
20485
|
+
var ENV_NAME = /^[A-Z_][A-Z0-9_]{0,63}$/;
|
|
20486
|
+
var RESERVED_ENV = /* @__PURE__ */ new Set(["PORT", "K_SERVICE", "K_REVISION", "K_CONFIGURATION"]);
|
|
20487
|
+
var MAX_ENV_VARS = 50;
|
|
20485
20488
|
var IMAGE_REF = /^(?!.*\/\/)[A-Za-z0-9][A-Za-z0-9._\-/:@]*$/;
|
|
20486
20489
|
var HardwareRequest = external_exports.object({
|
|
20487
20490
|
/** `any`: o planejador escolhe entre os provedores habilitados. */
|
|
@@ -20497,6 +20500,11 @@ var AppConfig = external_exports.object({
|
|
|
20497
20500
|
image: external_exports.string().min(1).max(300).regex(IMAGE_REF, "image precisa ser uma refer\xEAncia de imagem de container, sem espa\xE7os").nullable().default(null),
|
|
20498
20501
|
entrypoint: external_exports.string().min(1).max(300).refine(noControl, "entrypoint n\xE3o aceita caracteres de controle").nullable().default(null),
|
|
20499
20502
|
port: external_exports.number().int().min(1).max(65535).default(8080),
|
|
20503
|
+
/**
|
|
20504
|
+
* Variáveis de ambiente da aplicação. Ficam na configuração, visíveis a quem vê a
|
|
20505
|
+
* aplicação: servem para ajuste, NÃO para segredo (senha, chave, token).
|
|
20506
|
+
*/
|
|
20507
|
+
env: external_exports.record(external_exports.string().regex(ENV_NAME, "nome de vari\xE1vel: mai\xFAsculas, d\xEDgitos e sublinhado").refine((name) => !RESERVED_ENV.has(name), "nome reservado pela plataforma"), external_exports.string().max(2e3).refine(noControl, "valor n\xE3o aceita caracteres de controle")).refine((env) => Object.keys(env).length <= MAX_ENV_VARS, `no m\xE1ximo ${MAX_ENV_VARS} vari\xE1veis`).default({}),
|
|
20500
20508
|
hardware: HardwareRequest,
|
|
20501
20509
|
scaling: external_exports.object({
|
|
20502
20510
|
minReplicas: external_exports.number().int().min(0).max(MAX_REPLICAS).default(0),
|
|
@@ -20672,6 +20680,18 @@ async function stop(io, args) {
|
|
|
20672
20680
|
await apiPost(requireLogin(), `/api/platform/compute/apps/${encodeURIComponent(slug)}/deployments/stop`, void 0, io.fetcher).catch(scopeHint(DEPLOY_HINT));
|
|
20673
20681
|
emit(io, { ok: true, slug }, () => io.out(`${slug} parada: o servi\xE7o foi apagado e o endere\xE7o n\xE3o responde mais.`));
|
|
20674
20682
|
}
|
|
20683
|
+
async function logs(io, args) {
|
|
20684
|
+
const slug = args.find((a, i) => !a.startsWith("--") && args[i - 1] !== "--limit");
|
|
20685
|
+
if (!slug) throw new CliError("Uso: aiuby logs [--limit N] <identificador>", EXIT.usage);
|
|
20686
|
+
const flag = args.indexOf("--limit");
|
|
20687
|
+
const limit = flag >= 0 ? Number(args[flag + 1]) : 100;
|
|
20688
|
+
if (!Number.isInteger(limit) || limit < 1 || limit > 200) throw new CliError("--limit precisa ser um n\xFAmero de 1 a 200.", EXIT.usage);
|
|
20689
|
+
const data = await apiGet(requireLogin(), `/api/platform/compute/apps/${encodeURIComponent(slug)}/logs?limit=${limit}`, io.fetcher);
|
|
20690
|
+
emit(io, data, () => {
|
|
20691
|
+
if (data.lines.length === 0) return io.out(`Nenhuma linha de log desde a implanta\xE7\xE3o (revis\xE3o r${data.deployment.revision}).`);
|
|
20692
|
+
for (const line of [...data.lines].reverse()) io.out(`${line.time.replace("T", " ").slice(0, 19)} ${line.severity.padEnd(7)} ${line.text}`);
|
|
20693
|
+
});
|
|
20694
|
+
}
|
|
20675
20695
|
async function capacityList(io, args) {
|
|
20676
20696
|
const flag = args.indexOf("--provider");
|
|
20677
20697
|
const provider = flag >= 0 ? args[flag + 1] : void 0;
|
|
@@ -20791,7 +20811,7 @@ var notYet = (command) => async () => {
|
|
|
20791
20811
|
};
|
|
20792
20812
|
|
|
20793
20813
|
// src/main.ts
|
|
20794
|
-
var VERSION = "0.
|
|
20814
|
+
var VERSION = "0.4.0";
|
|
20795
20815
|
var HELP = `aiuby ${VERSION} \u2014 linha de comando do AIUBY Compute
|
|
20796
20816
|
|
|
20797
20817
|
Uso: aiuby <comando> [op\xE7\xF5es]
|
|
@@ -20811,10 +20831,11 @@ Dispon\xEDveis hoje:
|
|
|
20811
20831
|
deploy --dry-run <identificador> Mostra o plano, sem criar nada
|
|
20812
20832
|
deploy [--no-wait] <identificador> Implanta a revis\xE3o atual (s\xF3 em organiza\xE7\xE3o com a pr\xE9via do runtime)
|
|
20813
20833
|
stop <identificador> Para a implanta\xE7\xE3o e apaga o servi\xE7o
|
|
20834
|
+
logs [--limit N] <identificador> \xDAltimas linhas de log da implanta\xE7\xE3o mais recente
|
|
20814
20835
|
doctor Confere ambiente, credencial e API
|
|
20815
20836
|
|
|
20816
20837
|
Ainda n\xE3o dispon\xEDveis:
|
|
20817
|
-
run,
|
|
20838
|
+
run, scale, rollback, volumes, secrets, domains
|
|
20818
20839
|
|
|
20819
20840
|
Op\xE7\xF5es gerais:
|
|
20820
20841
|
--json Sa\xEDda em JSON
|
|
@@ -20823,7 +20844,7 @@ Op\xE7\xF5es gerais:
|
|
|
20823
20844
|
|
|
20824
20845
|
Ambiente: AIUBY_TOKEN, AIUBY_API_URL, AIUBY_CONFIG_DIR
|
|
20825
20846
|
C\xF3digos de sa\xEDda: 0 ok \xB7 1 erro \xB7 2 uso incorreto \xB7 3 n\xE3o autenticado \xB7 4 recusado \xB7 5 configura\xE7\xE3o inv\xE1lida`;
|
|
20826
|
-
var PLANNED = ["run", "
|
|
20847
|
+
var PLANNED = ["run", "scale", "rollback", "volumes", "secrets", "domains"];
|
|
20827
20848
|
var ROUTES = {
|
|
20828
20849
|
login,
|
|
20829
20850
|
logout,
|
|
@@ -20838,6 +20859,7 @@ var ROUTES = {
|
|
|
20838
20859
|
"config validate": configValidate,
|
|
20839
20860
|
deploy,
|
|
20840
20861
|
stop,
|
|
20862
|
+
logs,
|
|
20841
20863
|
doctor
|
|
20842
20864
|
};
|
|
20843
20865
|
async function run(argv, io) {
|
package/docs/api.md
CHANGED
|
@@ -74,10 +74,15 @@ Cadastra a aplicação com a primeira revisão. Nada é implantado. Responde `20
|
|
|
74
74
|
```json
|
|
75
75
|
{ "name": "Minha API", "slug": "minha-api",
|
|
76
76
|
"config": { "runtime": "container", "image": "REGISTRO/minha-api:1", "port": 8080,
|
|
77
|
+
"env": { "LOG_LEVEL": "info" },
|
|
77
78
|
"hardware": { "provider": "any", "cpu": 1, "memoryMb": 512 },
|
|
78
79
|
"scaling": { "minReplicas": 0, "maxReplicas": 2 } } }
|
|
79
80
|
```
|
|
80
81
|
|
|
82
|
+
`config.env` são variáveis de ambiente (até 50; nomes em maiúsculas, dígitos e sublinhado;
|
|
83
|
+
`PORT` e os nomes `K_*` são da plataforma). Elas ficam visíveis a quem vê a aplicação: não
|
|
84
|
+
use para senha, chave ou token.
|
|
85
|
+
|
|
81
86
|
Regras: `slug` com 3 a 40 caracteres (minúsculas, dígitos e hífen, começando por letra),
|
|
82
87
|
único no workspace; `runtime` `container` exige `image`; campos desconhecidos são recusados.
|
|
83
88
|
Limites: 50 aplicações por workspace, 200 revisões por aplicação.
|
|
@@ -102,6 +107,17 @@ Leitura. A implantação mais recente, já conferida com a conta de nuvem, ou `n
|
|
|
102
107
|
|
|
103
108
|
`status`: `deploying`, `running`, `failed` ou `stopped`.
|
|
104
109
|
|
|
110
|
+
### `GET /apps/{ref}/logs`
|
|
111
|
+
|
|
112
|
+
Leitura. Últimas linhas de log da implantação mais recente, da mais nova para a mais antiga
|
|
113
|
+
(`?limit=`, padrão 100, até 200). Vale também para implantação que falhou ou já parou. Só em
|
|
114
|
+
organização com a prévia do runtime; sem implantação, responde `409`. Limite: 20 leituras por minuto.
|
|
115
|
+
|
|
116
|
+
```json
|
|
117
|
+
{ "lines": [ { "time": "2026-11-12T10:05:00Z", "severity": "INFO", "text": "servidor no ar" } ],
|
|
118
|
+
"deployment": { "status": "running", "revision": 2 } }
|
|
119
|
+
```
|
|
120
|
+
|
|
105
121
|
### `POST /apps/{ref}/deployments`
|
|
106
122
|
|
|
107
123
|
Sessão de quem gerencia o workspace, ou chave com `compute:deploy`. Implanta a revisão atual.
|
package/docs/cli.md
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
# Referência da CLI `aiuby`
|
|
2
2
|
|
|
3
|
-
Versão 0.
|
|
3
|
+
Versão 0.4.0. A CLI fala só com a API da AIUBY: nunca pede nem usa credenciais da AWS ou
|
|
4
4
|
do Google Cloud.
|
|
5
5
|
|
|
6
|
-
Instalação: `npm install -g
|
|
6
|
+
Instalação: `npm install -g @aiuby-ia/cli` (Node.js 20 ou mais novo).
|
|
7
7
|
|
|
8
8
|
## Autenticação
|
|
9
9
|
|
|
@@ -53,6 +53,7 @@ runtime habilitada pela AIUBY. Fora dela, a API recusa com os motivos (código d
|
|
|
53
53
|
| --- | --- |
|
|
54
54
|
| `aiuby deploy [--no-wait] <identificador>` | Implanta a revisão atual no Google Cloud e acompanha até ficar em execução (até 3 minutos). Mostra o endereço público e o prazo. Reimplantar troca a revisão no mesmo endereço |
|
|
55
55
|
| `aiuby stop <identificador>` | Para a implantação: o serviço é apagado e o endereço deixa de responder |
|
|
56
|
+
| `aiuby logs [--limit N] <identificador>` | Últimas linhas de log da implantação mais recente (padrão 100, até 200). Vale também para uma que falhou ou já parou |
|
|
56
57
|
|
|
57
58
|
Limites da prévia: só CPU, até 1 vCPU e 1 GB, 1 réplica (escala a zero quando ociosa),
|
|
58
59
|
endereço público sem autenticação, prazo de algumas horas. Sem cobrança nesta fase.
|
|
@@ -67,7 +68,7 @@ endereço público sem autenticação, prazo de algumas horas. Sem cobrança nes
|
|
|
67
68
|
|
|
68
69
|
## Ainda não disponíveis
|
|
69
70
|
|
|
70
|
-
`run`, `
|
|
71
|
+
`run`, `scale`, `rollback`, `volumes`, `secrets`
|
|
71
72
|
e `domains` respondem que ainda não estão disponíveis e saem com código 4. Nenhum deles chama a API.
|
|
72
73
|
|
|
73
74
|
## Opções gerais
|