@neetru/cli 2.11.0 → 2.11.2
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 +547 -547
- package/README.md +141 -141
- package/dist/commands/add.js +5 -0
- package/dist/commands/add.js.map +1 -1
- package/dist/commands/ai.js +8 -8
- package/dist/commands/autocomplete.d.ts +2 -2
- package/dist/commands/autocomplete.js +39 -35
- package/dist/commands/autocomplete.js.map +1 -1
- package/dist/commands/db.js +60 -57
- package/dist/commands/db.js.map +1 -1
- package/dist/commands/deploy.d.ts +11 -0
- package/dist/commands/deploy.js +15 -1
- package/dist/commands/deploy.js.map +1 -1
- package/dist/commands/init.js +121 -121
- package/dist/commands/products-db.js +1 -0
- package/dist/commands/products-db.js.map +1 -1
- package/dist/commands/servers.d.ts +18 -0
- package/dist/commands/servers.js +80 -2
- package/dist/commands/servers.js.map +1 -1
- package/dist/index.js +36 -4
- package/dist/index.js.map +1 -1
- package/dist/lib/agent-commands.d.ts +20 -0
- package/dist/lib/agent-commands.js +38 -0
- package/dist/lib/agent-commands.js.map +1 -0
- package/dist/lib/ai/context.js +90 -90
- package/dist/lib/db-local/env.d.ts +11 -0
- package/dist/lib/db-local/env.js +11 -0
- package/dist/lib/db-local/env.js.map +1 -1
- package/package.json +66 -66
- 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/dist/commands/fn.d.ts +0 -6
- package/dist/commands/fn.js +0 -88
- package/dist/commands/fn.js.map +0 -1
- package/dist/commands/marketplace.d.ts +0 -36
- package/dist/commands/marketplace.js +0 -585
- package/dist/commands/marketplace.js.map +0 -1
package/README.md
CHANGED
|
@@ -1,141 +1,141 @@
|
|
|
1
|
-
# @neetru/cli
|
|
2
|
-
|
|
3
|
-
> Developer Kit oficial da Neetru — scaffolding, IA Neetru-aware, deploy de produtos SaaS, gestão de workspaces, bancos isolados por produto, e mais 40+ comandos pra operar todo o ecossistema Neetru via terminal.
|
|
4
|
-
|
|
5
|
-
<p>
|
|
6
|
-
<img alt="npm" src="https://img.shields.io/npm/v/@neetru/cli?logo=npm">
|
|
7
|
-
<img alt="downloads" src="https://img.shields.io/npm/dm/@neetru/cli?logo=npm">
|
|
8
|
-
<img alt="Node" src="https://img.shields.io/badge/node-%3E%3D22-339933?logo=node.js&logoColor=white">
|
|
9
|
-
<img alt="license" src="https://img.shields.io/badge/license-MIT-22c55e">
|
|
10
|
-
</p>
|
|
11
|
-
|
|
12
|
-
## Instalação
|
|
13
|
-
|
|
14
|
-
```bash
|
|
15
|
-
npm install -g @neetru/cli
|
|
16
|
-
```
|
|
17
|
-
|
|
18
|
-
Bootstrap completo da máquina dev (Node, gcloud, Docker, Firebase CLI, deps NPM, GCP ADC):
|
|
19
|
-
|
|
20
|
-
```bash
|
|
21
|
-
neetru bootstrap
|
|
22
|
-
```
|
|
23
|
-
|
|
24
|
-
Login no Core via OAuth Device Code Flow:
|
|
25
|
-
|
|
26
|
-
```bash
|
|
27
|
-
neetru login
|
|
28
|
-
```
|
|
29
|
-
|
|
30
|
-
Validar estado:
|
|
31
|
-
|
|
32
|
-
```bash
|
|
33
|
-
neetru doctor
|
|
34
|
-
```
|
|
35
|
-
|
|
36
|
-
## Quickstart — criar produto SaaS novo
|
|
37
|
-
|
|
38
|
-
```bash
|
|
39
|
-
neetru new gestovendas --env=dev --tier=dev --customer=neetru
|
|
40
|
-
```
|
|
41
|
-
|
|
42
|
-
Cria produto + workspace + scaffold local Next.js 15 + instala deps + abre cockpit no browser.
|
|
43
|
-
|
|
44
|
-
## Comandos principais
|
|
45
|
-
|
|
46
|
-
| Comando | O que faz |
|
|
47
|
-
|---|---|
|
|
48
|
-
| `neetru bootstrap` | Setup da máquina dev (binários + deps + ADC) |
|
|
49
|
-
| `neetru login` / `logout` / `whoami` | Auth OAuth Device Code Flow |
|
|
50
|
-
| `neetru doctor` | Diagnóstico saúde (5 checks rápidos) |
|
|
51
|
-
| `neetru new <slug>` | Criar produto completo (registry + workspace + scaffold) |
|
|
52
|
-
| `neetru init <name>` | Só scaffold local Next.js + Firebase |
|
|
53
|
-
| `neetru add <feature>` | Adicionar features ao scaffold (auth, billing, etc) |
|
|
54
|
-
| `neetru deploy` | Pipeline de deploy interativo (cloud-run / vm / workspace) |
|
|
55
|
-
| `neetru build` | Empacotar produto em tarball pra deploy |
|
|
56
|
-
| `neetru promote` | Promover dev → staging → prod |
|
|
57
|
-
| `neetru env switch <target>` | Trocar `NEETRU_ENV` no `.env.local` |
|
|
58
|
-
| `neetru env set --service=X --set KEY=VAL` | Setar env vars de serviço Cloud Run |
|
|
59
|
-
| `neetru ar create <name>` | Criar repositório Artifact Registry |
|
|
60
|
-
| `neetru hosting create-mapping --service=X --domain=Y` | Domain mapping |
|
|
61
|
-
| `neetru db create --product=X --engine=postgres` | Criar banco por produto |
|
|
62
|
-
| `neetru db engines` | Listar engines disponíveis (firestore, postgres, mysql) |
|
|
63
|
-
| `neetru cloud-run pause/resume/delete <service>` | Controle Cloud Run |
|
|
64
|
-
| `neetru products list/create/update` | Registry de produtos |
|
|
65
|
-
| `neetru workspaces create/list/get/advance` | Instâncias por cliente |
|
|
66
|
-
| `neetru deployments create/rollback` | Histórico de deploys |
|
|
67
|
-
| `neetru tenants list/create/update/suspend` | Gerenciar tenants |
|
|
68
|
-
| `neetru audit tail` | Tail de `audit_logs/` em tempo real |
|
|
69
|
-
| `neetru billing summary` | Resumo de billing |
|
|
70
|
-
| `neetru servers list/provision/deactivate` | Gerenciar servidores |
|
|
71
|
-
| `neetru agent release/yank/canary` | Gerenciar releases do agente |
|
|
72
|
-
| `neetru support tickets list/reply/assign` | Suporte inbox staff |
|
|
73
|
-
| `neetru dns zones list` / `hosting list` | Listar DNS + customer domains |
|
|
74
|
-
| `neetru builds list` | Listar Cloud Build |
|
|
75
|
-
| `neetru dr exports/restore` | Disaster Recovery |
|
|
76
|
-
| `neetru logs` | Ver logs de produtos |
|
|
77
|
-
| `neetru status` | Visão geral do ecossistema |
|
|
78
|
-
| `neetru open <produto>` | Abrir cockpit do produto no browser |
|
|
79
|
-
| `neetru ai` | REPL IA Neetru-aware (Claude/OpenAI/Gemini) |
|
|
80
|
-
| `neetru ui` | Menu interativo do CLI |
|
|
81
|
-
| `neetru publish` | Publicar produto no catálogo público |
|
|
82
|
-
| `neetru upgrade` | Auto-update do CLI |
|
|
83
|
-
| `neetru autocomplete <bash\|zsh\|pwsh>` | Gerar script autocomplete |
|
|
84
|
-
|
|
85
|
-
**Atalhos:** `neetru ar` = `artifact-registry`, `neetru menu` = `ui`.
|
|
86
|
-
|
|
87
|
-
40+ subcomandos. Quase todos suportam `--json` pra automação.
|
|
88
|
-
|
|
89
|
-
## Configuração
|
|
90
|
-
|
|
91
|
-
Token Bearer fica em `~/.config/neetru-cli/auth.json` (chmod 0600 em Unix, NTFS ACL em Windows) — gerado por `neetru login` via OAuth Device Code Flow. Configs gerais ficam em `~/.config/neetru-cli/config.json` (Linux/macOS) ou `%APPDATA%\neetru-cli\config.json` (Windows):
|
|
92
|
-
|
|
93
|
-
| Chave | Valor |
|
|
94
|
-
|---|---|
|
|
95
|
-
| `neetruApiUrl` | URL base do Core (default `https://api.neetru.com`). **Allowlist** desde 2.11.0: `*.neetru.com` + `localhost`; demais hosts exigem `--allow-untrusted-url` |
|
|
96
|
-
| `defaultModel` | `claude` / `openai` / `gemini` / `auto` (REPL `neetru ai`) |
|
|
97
|
-
| `telemetry.enabled` | Telemetry opt-in (default `false`) — desde 2.11.0 emite eventos anônimos pra `/api/sdk/v1/telemetry/log` |
|
|
98
|
-
| `neetruApiKey` | **(legado)** Token em Conf — substituído por `auth.json`. Será removido em 2.12.0 |
|
|
99
|
-
|
|
100
|
-
```bash
|
|
101
|
-
neetru config set telemetry.enabled true
|
|
102
|
-
neetru config get neetruApiUrl
|
|
103
|
-
neetru config path # mostra caminho do config file
|
|
104
|
-
neetru config set neetruApiUrl https://staging.neetru.com # subdomínio neetru.com — OK
|
|
105
|
-
neetru config set neetruApiUrl http://my-proxy.local --allow-untrusted-url # explicit opt-in
|
|
106
|
-
```
|
|
107
|
-
|
|
108
|
-
## Output JSON
|
|
109
|
-
|
|
110
|
-
```bash
|
|
111
|
-
neetru products list --json | jq '.[] | select(.status == "ativo")'
|
|
112
|
-
neetru audit tail --json | jq 'select(.action | startswith("billing"))'
|
|
113
|
-
```
|
|
114
|
-
|
|
115
|
-
## Auth & Segurança
|
|
116
|
-
|
|
117
|
-
- **OAuth Device Code Flow** (RFC 8628) pra login interativo — não armazena password
|
|
118
|
-
- **Tokens** salvos em `~/.config/neetru-cli/auth.json` (chmod 0600 em Unix, NTFS ACL em Windows). Desde 2.11.0 o resolver canônico (`getActiveTokenSync`) prefere esse arquivo sobre o Conf storage legado (que será removido em 2.12.0)
|
|
119
|
-
- **URL allowlist** (desde 2.11.0): `neetruApiUrl` rejeita hosts fora de `*.neetru.com` + `localhost` sem `--allow-untrusted-url` — fecha vetor de exfiltração do Bearer token
|
|
120
|
-
- **Rate-limit** por método HTTP: GET 120/min, POST/PUT/PATCH 30/min, DELETE 5/min
|
|
121
|
-
- **Step-up MFA** (TOTP) obrigatório em operações destrutivas: `--mfa-token <code>` ou prompt
|
|
122
|
-
- **Dry-run** disponível em comandos de mutação: `--dry-run` mostra efeito SEM aplicar
|
|
123
|
-
- **Telemetry** opt-in (desde 2.11.0): habilitando `telemetry.enabled=true` o CLI emite `{command, durationMs, ok, exitCode}` anônimo via `installId` UUID. Zero token/path/email/env vazam
|
|
124
|
-
|
|
125
|
-
## Stack
|
|
126
|
-
|
|
127
|
-
- TypeScript 5 ESM-first
|
|
128
|
-
- Node 22+ (LTS)
|
|
129
|
-
- Sem `node-fetch`/`axios`: fetch global nativo
|
|
130
|
-
- Commander 11 (CLI framework) + Inquirer 12 (prompts) + Chalk 5 + Ora (spinners)
|
|
131
|
-
|
|
132
|
-
## Mais info
|
|
133
|
-
|
|
134
|
-
- **Repo:** [github.com/Neetru/neetru-core](https://github.com/Neetru/neetru-core)
|
|
135
|
-
- **Docs:** [docs.neetru.com](https://docs.neetru.com)
|
|
136
|
-
- **SDK complementar:** `npm install @neetru/sdk`
|
|
137
|
-
- **Issues / suporte:** abrir issue no repo ou `neetru support`
|
|
138
|
-
|
|
139
|
-
## Licença
|
|
140
|
-
|
|
141
|
-
MIT © Neetru
|
|
1
|
+
# @neetru/cli
|
|
2
|
+
|
|
3
|
+
> Developer Kit oficial da Neetru — scaffolding, IA Neetru-aware, deploy de produtos SaaS, gestão de workspaces, bancos isolados por produto, e mais 40+ comandos pra operar todo o ecossistema Neetru via terminal.
|
|
4
|
+
|
|
5
|
+
<p>
|
|
6
|
+
<img alt="npm" src="https://img.shields.io/npm/v/@neetru/cli?logo=npm">
|
|
7
|
+
<img alt="downloads" src="https://img.shields.io/npm/dm/@neetru/cli?logo=npm">
|
|
8
|
+
<img alt="Node" src="https://img.shields.io/badge/node-%3E%3D22-339933?logo=node.js&logoColor=white">
|
|
9
|
+
<img alt="license" src="https://img.shields.io/badge/license-MIT-22c55e">
|
|
10
|
+
</p>
|
|
11
|
+
|
|
12
|
+
## Instalação
|
|
13
|
+
|
|
14
|
+
```bash
|
|
15
|
+
npm install -g @neetru/cli
|
|
16
|
+
```
|
|
17
|
+
|
|
18
|
+
Bootstrap completo da máquina dev (Node, gcloud, Docker, Firebase CLI, deps NPM, GCP ADC):
|
|
19
|
+
|
|
20
|
+
```bash
|
|
21
|
+
neetru bootstrap
|
|
22
|
+
```
|
|
23
|
+
|
|
24
|
+
Login no Core via OAuth Device Code Flow:
|
|
25
|
+
|
|
26
|
+
```bash
|
|
27
|
+
neetru login
|
|
28
|
+
```
|
|
29
|
+
|
|
30
|
+
Validar estado:
|
|
31
|
+
|
|
32
|
+
```bash
|
|
33
|
+
neetru doctor
|
|
34
|
+
```
|
|
35
|
+
|
|
36
|
+
## Quickstart — criar produto SaaS novo
|
|
37
|
+
|
|
38
|
+
```bash
|
|
39
|
+
neetru new gestovendas --env=dev --tier=dev --customer=neetru
|
|
40
|
+
```
|
|
41
|
+
|
|
42
|
+
Cria produto + workspace + scaffold local Next.js 15 + instala deps + abre cockpit no browser.
|
|
43
|
+
|
|
44
|
+
## Comandos principais
|
|
45
|
+
|
|
46
|
+
| Comando | O que faz |
|
|
47
|
+
|---|---|
|
|
48
|
+
| `neetru bootstrap` | Setup da máquina dev (binários + deps + ADC) |
|
|
49
|
+
| `neetru login` / `logout` / `whoami` | Auth OAuth Device Code Flow |
|
|
50
|
+
| `neetru doctor` | Diagnóstico saúde (5 checks rápidos) |
|
|
51
|
+
| `neetru new <slug>` | Criar produto completo (registry + workspace + scaffold) |
|
|
52
|
+
| `neetru init <name>` | Só scaffold local Next.js + Firebase |
|
|
53
|
+
| `neetru add <feature>` | Adicionar features ao scaffold (auth, billing, etc) |
|
|
54
|
+
| `neetru deploy` | Pipeline de deploy interativo (cloud-run / vm / workspace) |
|
|
55
|
+
| `neetru build` | Empacotar produto em tarball pra deploy |
|
|
56
|
+
| `neetru promote` | Promover dev → staging → prod |
|
|
57
|
+
| `neetru env switch <target>` | Trocar `NEETRU_ENV` no `.env.local` |
|
|
58
|
+
| `neetru env set --service=X --set KEY=VAL` | Setar env vars de serviço Cloud Run |
|
|
59
|
+
| `neetru ar create <name>` | Criar repositório Artifact Registry |
|
|
60
|
+
| `neetru hosting create-mapping --service=X --domain=Y` | Domain mapping |
|
|
61
|
+
| `neetru db create --product=X --engine=postgres` | Criar banco por produto |
|
|
62
|
+
| `neetru db engines` | Listar engines disponíveis (firestore, postgres, mysql) |
|
|
63
|
+
| `neetru cloud-run pause/resume/delete <service>` | Controle Cloud Run |
|
|
64
|
+
| `neetru products list/create/update` | Registry de produtos |
|
|
65
|
+
| `neetru workspaces create/list/get/advance` | Instâncias por cliente |
|
|
66
|
+
| `neetru deployments create/rollback` | Histórico de deploys |
|
|
67
|
+
| `neetru tenants list/create/update/suspend` | Gerenciar tenants |
|
|
68
|
+
| `neetru audit tail` | Tail de `audit_logs/` em tempo real |
|
|
69
|
+
| `neetru billing summary` | Resumo de billing |
|
|
70
|
+
| `neetru servers list/provision/deactivate` | Gerenciar servidores |
|
|
71
|
+
| `neetru agent release/yank/canary` | Gerenciar releases do agente |
|
|
72
|
+
| `neetru support tickets list/reply/assign` | Suporte inbox staff |
|
|
73
|
+
| `neetru dns zones list` / `hosting list` | Listar DNS + customer domains |
|
|
74
|
+
| `neetru builds list` | Listar Cloud Build |
|
|
75
|
+
| `neetru dr exports/restore` | Disaster Recovery |
|
|
76
|
+
| `neetru logs` | Ver logs de produtos |
|
|
77
|
+
| `neetru status` | Visão geral do ecossistema |
|
|
78
|
+
| `neetru open <produto>` | Abrir cockpit do produto no browser |
|
|
79
|
+
| `neetru ai` | REPL IA Neetru-aware (Claude/OpenAI/Gemini) |
|
|
80
|
+
| `neetru ui` | Menu interativo do CLI |
|
|
81
|
+
| `neetru publish` | Publicar produto no catálogo público |
|
|
82
|
+
| `neetru upgrade` | Auto-update do CLI |
|
|
83
|
+
| `neetru autocomplete <bash\|zsh\|pwsh>` | Gerar script autocomplete |
|
|
84
|
+
|
|
85
|
+
**Atalhos:** `neetru ar` = `artifact-registry`, `neetru menu` = `ui`.
|
|
86
|
+
|
|
87
|
+
40+ subcomandos. Quase todos suportam `--json` pra automação.
|
|
88
|
+
|
|
89
|
+
## Configuração
|
|
90
|
+
|
|
91
|
+
Token Bearer fica em `~/.config/neetru-cli/auth.json` (chmod 0600 em Unix, NTFS ACL em Windows) — gerado por `neetru login` via OAuth Device Code Flow. Configs gerais ficam em `~/.config/neetru-cli/config.json` (Linux/macOS) ou `%APPDATA%\neetru-cli\config.json` (Windows):
|
|
92
|
+
|
|
93
|
+
| Chave | Valor |
|
|
94
|
+
|---|---|
|
|
95
|
+
| `neetruApiUrl` | URL base do Core (default `https://api.neetru.com`). **Allowlist** desde 2.11.0: `*.neetru.com` + `localhost`; demais hosts exigem `--allow-untrusted-url` |
|
|
96
|
+
| `defaultModel` | `claude` / `openai` / `gemini` / `auto` (REPL `neetru ai`) |
|
|
97
|
+
| `telemetry.enabled` | Telemetry opt-in (default `false`) — desde 2.11.0 emite eventos anônimos pra `/api/sdk/v1/telemetry/log` |
|
|
98
|
+
| `neetruApiKey` | **(legado)** Token em Conf — substituído por `auth.json`. Será removido em 2.12.0 |
|
|
99
|
+
|
|
100
|
+
```bash
|
|
101
|
+
neetru config set telemetry.enabled true
|
|
102
|
+
neetru config get neetruApiUrl
|
|
103
|
+
neetru config path # mostra caminho do config file
|
|
104
|
+
neetru config set neetruApiUrl https://staging.neetru.com # subdomínio neetru.com — OK
|
|
105
|
+
neetru config set neetruApiUrl http://my-proxy.local --allow-untrusted-url # explicit opt-in
|
|
106
|
+
```
|
|
107
|
+
|
|
108
|
+
## Output JSON
|
|
109
|
+
|
|
110
|
+
```bash
|
|
111
|
+
neetru products list --json | jq '.[] | select(.status == "ativo")'
|
|
112
|
+
neetru audit tail --json | jq 'select(.action | startswith("billing"))'
|
|
113
|
+
```
|
|
114
|
+
|
|
115
|
+
## Auth & Segurança
|
|
116
|
+
|
|
117
|
+
- **OAuth Device Code Flow** (RFC 8628) pra login interativo — não armazena password
|
|
118
|
+
- **Tokens** salvos em `~/.config/neetru-cli/auth.json` (chmod 0600 em Unix, NTFS ACL em Windows). Desde 2.11.0 o resolver canônico (`getActiveTokenSync`) prefere esse arquivo sobre o Conf storage legado (que será removido em 2.12.0)
|
|
119
|
+
- **URL allowlist** (desde 2.11.0): `neetruApiUrl` rejeita hosts fora de `*.neetru.com` + `localhost` sem `--allow-untrusted-url` — fecha vetor de exfiltração do Bearer token
|
|
120
|
+
- **Rate-limit** por método HTTP: GET 120/min, POST/PUT/PATCH 30/min, DELETE 5/min
|
|
121
|
+
- **Step-up MFA** (TOTP) obrigatório em operações destrutivas: `--mfa-token <code>` ou prompt
|
|
122
|
+
- **Dry-run** disponível em comandos de mutação: `--dry-run` mostra efeito SEM aplicar
|
|
123
|
+
- **Telemetry** opt-in (desde 2.11.0): habilitando `telemetry.enabled=true` o CLI emite `{command, durationMs, ok, exitCode}` anônimo via `installId` UUID. Zero token/path/email/env vazam
|
|
124
|
+
|
|
125
|
+
## Stack
|
|
126
|
+
|
|
127
|
+
- TypeScript 5 ESM-first
|
|
128
|
+
- Node 22+ (LTS)
|
|
129
|
+
- Sem `node-fetch`/`axios`: fetch global nativo
|
|
130
|
+
- Commander 11 (CLI framework) + Inquirer 12 (prompts) + Chalk 5 + Ora (spinners)
|
|
131
|
+
|
|
132
|
+
## Mais info
|
|
133
|
+
|
|
134
|
+
- **Repo:** [github.com/Neetru/neetru-core](https://github.com/Neetru/neetru-core)
|
|
135
|
+
- **Docs:** [docs.neetru.com](https://docs.neetru.com)
|
|
136
|
+
- **SDK complementar:** `npm install @neetru/sdk`
|
|
137
|
+
- **Issues / suporte:** abrir issue no repo ou `neetru support`
|
|
138
|
+
|
|
139
|
+
## Licença
|
|
140
|
+
|
|
141
|
+
MIT © Neetru
|
package/dist/commands/add.js
CHANGED
|
@@ -74,5 +74,10 @@ export async function runAdd(opts) {
|
|
|
74
74
|
const { copied, skipped } = await copyDir(srcDir, destDir, force);
|
|
75
75
|
log.info(`Concluído: ${copied} criados, ${skipped} pulados.`);
|
|
76
76
|
log.dim(`Próximo passo: configure NEETRU_API_KEY/NEETRU_PRODUCT_ID em .env.local.`);
|
|
77
|
+
// Se existe package.json no projeto alvo, avisar que @neetru/sdk precisa ser instalado.
|
|
78
|
+
const pkgJsonPath = path.join(cwd, 'package.json');
|
|
79
|
+
if (fsSync.existsSync(pkgJsonPath)) {
|
|
80
|
+
log.info(`Rode: npm install @neetru/sdk`);
|
|
81
|
+
}
|
|
77
82
|
}
|
|
78
83
|
//# sourceMappingURL=add.js.map
|
package/dist/commands/add.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"add.js","sourceRoot":"","sources":["../../src/commands/add.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"add.js","sourceRoot":"","sources":["../../src/commands/add.ts"],"names":[],"mappings":"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"}
|
package/dist/commands/ai.js
CHANGED
|
@@ -10,14 +10,14 @@ const PROMPT_PREFIX = chalk.hex('#1E90FF').bold(' › ');
|
|
|
10
10
|
const ASSISTANT_PREFIX = chalk.dim(' ◆ ');
|
|
11
11
|
// Help público — sem /modelo (orchestrator escolhe). /debug:model é o
|
|
12
12
|
// override avançado pra quem quer forçar.
|
|
13
|
-
const HELP_TEXT = `
|
|
14
|
-
Comandos:
|
|
15
|
-
/sair /exit encerrar sessão
|
|
16
|
-
/limpar /clear limpar histórico de contexto
|
|
17
|
-
/agentes <pergunta> consultar 2+ modelos em paralelo e comparar
|
|
18
|
-
/auth rodar wizard de configuração (claude/codex/gemini)
|
|
19
|
-
/help mostrar este texto
|
|
20
|
-
/debug:model <nome> forçar modelo (claude|openai|gemini|auto)
|
|
13
|
+
const HELP_TEXT = `
|
|
14
|
+
Comandos:
|
|
15
|
+
/sair /exit encerrar sessão
|
|
16
|
+
/limpar /clear limpar histórico de contexto
|
|
17
|
+
/agentes <pergunta> consultar 2+ modelos em paralelo e comparar
|
|
18
|
+
/auth rodar wizard de configuração (claude/codex/gemini)
|
|
19
|
+
/help mostrar este texto
|
|
20
|
+
/debug:model <nome> forçar modelo (claude|openai|gemini|auto)
|
|
21
21
|
`.trim();
|
|
22
22
|
/**
|
|
23
23
|
* Checa se o usuário tem pelo menos uma cred (local OU descoberta). Se zero,
|
|
@@ -4,9 +4,9 @@ export type Shell = 'bash' | 'zsh' | 'pwsh';
|
|
|
4
4
|
* alfabética para diff-friendly.
|
|
5
5
|
*
|
|
6
6
|
* IMPORTANTE: incluir TODOS os `program.command('X')` de `src/index.ts`.
|
|
7
|
-
* O regression test `top-level-commands-coverage.test.ts` exige
|
|
7
|
+
* O regression test `top-level-commands-coverage.test.ts` exige >=95%.
|
|
8
8
|
*/
|
|
9
|
-
export declare const TOP_LEVEL_COMMANDS: readonly ["add", "admin", "agent", "ai", "api-catalog", "ar", "archive", "artifact-registry", "audit", "auth", "autocomplete", "billing", "bootstrap", "bug", "build", "builds", "cloud-run", "config", "customers", "db", "db-hosts", "deploy", "deployments", "dev", "dns", "docs", "doctor", "dr", "env", "hosting", "init", "login", "logout", "logs", "menu", "mocks", "new", "open", "products", "promote", "publish", "servers", "status", "support", "tenants", "ui", "upgrade", "validate", "vm", "whoami", "workspaces"];
|
|
9
|
+
export declare const TOP_LEVEL_COMMANDS: readonly ["add", "admin", "agent", "ai", "api-catalog", "ar", "archive", "artifact-registry", "audit", "auth", "autocomplete", "billing", "bootstrap", "bug", "build", "builds", "cloud-run", "config", "customers", "db", "db-hosts", "deploy", "deployments", "dev", "dns", "docs", "doctor", "dr", "env", "hosting", "init", "login", "logout", "logs", "menu", "mocks", "new", "open", "ops", "products", "promote", "publish", "schema", "servers", "status", "support", "tenants", "ui", "upgrade", "validate", "vm", "whoami", "workspaces"];
|
|
10
10
|
export interface AutocompleteOptions {
|
|
11
11
|
shell?: string;
|
|
12
12
|
}
|
|
@@ -13,6 +13,8 @@
|
|
|
13
13
|
* varre o index pra detectar drift). A 2.10.1 cobria 22 entries (~45% do
|
|
14
14
|
* CLI); a 2.10.2 cobre TODOS os ≈50 comandos top-level.
|
|
15
15
|
*
|
|
16
|
+
* MASTER-HIGH-051 (P3): sync autocomplete com src/index.ts. Atualizar AMBOS quando adicionar comando.
|
|
17
|
+
*
|
|
16
18
|
* Para adicionar um comando: declarar em `src/index.ts` via `program.command()`
|
|
17
19
|
* e adicionar a entry aqui. O regression test falha se faltar (>5% drift).
|
|
18
20
|
*/
|
|
@@ -23,7 +25,7 @@ import { safeExit } from '../utils/safe-exit.js';
|
|
|
23
25
|
* alfabética para diff-friendly.
|
|
24
26
|
*
|
|
25
27
|
* IMPORTANTE: incluir TODOS os `program.command('X')` de `src/index.ts`.
|
|
26
|
-
* O regression test `top-level-commands-coverage.test.ts` exige
|
|
28
|
+
* O regression test `top-level-commands-coverage.test.ts` exige >=95%.
|
|
27
29
|
*/
|
|
28
30
|
export const TOP_LEVEL_COMMANDS = [
|
|
29
31
|
'add',
|
|
@@ -64,9 +66,11 @@ export const TOP_LEVEL_COMMANDS = [
|
|
|
64
66
|
'mocks',
|
|
65
67
|
'new',
|
|
66
68
|
'open',
|
|
69
|
+
'ops', // neetru ops — operações internas (heartbeat, smoke, reg-token, resolve-errors, openapi-diff)
|
|
67
70
|
'products',
|
|
68
71
|
'promote',
|
|
69
72
|
'publish',
|
|
73
|
+
'schema', // neetru schema — inspecionar spec OpenAPI do Core
|
|
70
74
|
'servers',
|
|
71
75
|
'status',
|
|
72
76
|
'support',
|
|
@@ -80,49 +84,49 @@ export const TOP_LEVEL_COMMANDS = [
|
|
|
80
84
|
];
|
|
81
85
|
function bashScript() {
|
|
82
86
|
const cmds = TOP_LEVEL_COMMANDS.join(' ');
|
|
83
|
-
return `# neetru CLI bash completion (v2.10.2)
|
|
84
|
-
_neetru_complete() {
|
|
85
|
-
local cur prev
|
|
86
|
-
COMPREPLY=()
|
|
87
|
-
cur="\${COMP_WORDS[COMP_CWORD]}"
|
|
88
|
-
prev="\${COMP_WORDS[COMP_CWORD-1]}"
|
|
89
|
-
if [ \${COMP_CWORD} -eq 1 ]; then
|
|
90
|
-
COMPREPLY=( $(compgen -W "${cmds}" -- "\${cur}") )
|
|
91
|
-
return 0
|
|
92
|
-
fi
|
|
93
|
-
}
|
|
94
|
-
complete -F _neetru_complete neetru
|
|
87
|
+
return `# neetru CLI bash completion (v2.10.2)
|
|
88
|
+
_neetru_complete() {
|
|
89
|
+
local cur prev
|
|
90
|
+
COMPREPLY=()
|
|
91
|
+
cur="\${COMP_WORDS[COMP_CWORD]}"
|
|
92
|
+
prev="\${COMP_WORDS[COMP_CWORD-1]}"
|
|
93
|
+
if [ \${COMP_CWORD} -eq 1 ]; then
|
|
94
|
+
COMPREPLY=( $(compgen -W "${cmds}" -- "\${cur}") )
|
|
95
|
+
return 0
|
|
96
|
+
fi
|
|
97
|
+
}
|
|
98
|
+
complete -F _neetru_complete neetru
|
|
95
99
|
`;
|
|
96
100
|
}
|
|
97
101
|
function zshScript() {
|
|
98
102
|
// Formato compsys do zsh.
|
|
99
103
|
const cmds = TOP_LEVEL_COMMANDS.map((c) => ` '${c}'`).join('\n');
|
|
100
|
-
return `#compdef neetru
|
|
101
|
-
# neetru CLI zsh completion (v2.10.2)
|
|
102
|
-
_neetru() {
|
|
103
|
-
local -a commands
|
|
104
|
-
commands=(
|
|
105
|
-
${cmds}
|
|
106
|
-
)
|
|
107
|
-
if (( CURRENT == 2 )); then
|
|
108
|
-
_describe 'command' commands
|
|
109
|
-
fi
|
|
110
|
-
}
|
|
111
|
-
_neetru "$@"
|
|
104
|
+
return `#compdef neetru
|
|
105
|
+
# neetru CLI zsh completion (v2.10.2)
|
|
106
|
+
_neetru() {
|
|
107
|
+
local -a commands
|
|
108
|
+
commands=(
|
|
109
|
+
${cmds}
|
|
110
|
+
)
|
|
111
|
+
if (( CURRENT == 2 )); then
|
|
112
|
+
_describe 'command' commands
|
|
113
|
+
fi
|
|
114
|
+
}
|
|
115
|
+
_neetru "$@"
|
|
112
116
|
`;
|
|
113
117
|
}
|
|
114
118
|
function pwshScript() {
|
|
115
119
|
const cmds = TOP_LEVEL_COMMANDS.map((c) => ` '${c}'`).join(',\n');
|
|
116
|
-
return `# neetru CLI PowerShell completion (v2.10.2)
|
|
117
|
-
Register-ArgumentCompleter -Native -CommandName neetru -ScriptBlock {
|
|
118
|
-
param($wordToComplete, $commandAst, $cursorPosition)
|
|
119
|
-
$commands = @(
|
|
120
|
-
${cmds}
|
|
121
|
-
)
|
|
122
|
-
$commands | Where-Object { $_ -like "$wordToComplete*" } | ForEach-Object {
|
|
123
|
-
[System.Management.Automation.CompletionResult]::new($_, $_, 'ParameterValue', $_)
|
|
124
|
-
}
|
|
125
|
-
}
|
|
120
|
+
return `# neetru CLI PowerShell completion (v2.10.2)
|
|
121
|
+
Register-ArgumentCompleter -Native -CommandName neetru -ScriptBlock {
|
|
122
|
+
param($wordToComplete, $commandAst, $cursorPosition)
|
|
123
|
+
$commands = @(
|
|
124
|
+
${cmds}
|
|
125
|
+
)
|
|
126
|
+
$commands | Where-Object { $_ -like "$wordToComplete*" } | ForEach-Object {
|
|
127
|
+
[System.Management.Automation.CompletionResult]::new($_, $_, 'ParameterValue', $_)
|
|
128
|
+
}
|
|
129
|
+
}
|
|
126
130
|
`;
|
|
127
131
|
}
|
|
128
132
|
export function generateAutocompleteScript(shell) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"autocomplete.js","sourceRoot":"","sources":["../../src/commands/autocomplete.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"autocomplete.js","sourceRoot":"","sources":["../../src/commands/autocomplete.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AACH,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AAIjD;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,kBAAkB,GAAG;IAChC,KAAK;IACL,OAAO;IACP,OAAO;IACP,IAAI;IACJ,aAAa;IACb,IAAI,EAAE,6BAA6B;IACnC,SAAS;IACT,mBAAmB;IACnB,OAAO;IACP,MAAM;IACN,cAAc;IACd,SAAS;IACT,WAAW;IACX,KAAK;IACL,OAAO;IACP,QAAQ;IACR,WAAW;IACX,QAAQ;IACR,WAAW;IACX,IAAI;IACJ,UAAU;IACV,QAAQ;IACR,aAAa;IACb,KAAK;IACL,KAAK;IACL,MAAM;IACN,QAAQ;IACR,IAAI;IACJ,KAAK;IACL,SAAS;IACT,MAAM;IACN,OAAO;IACP,QAAQ;IACR,MAAM;IACN,MAAM,EAAE,cAAc;IACtB,OAAO;IACP,KAAK;IACL,MAAM;IACN,KAAK,EAAE,8FAA8F;IACrG,UAAU;IACV,SAAS;IACT,SAAS;IACT,QAAQ,EAAE,mDAAmD;IAC7D,SAAS;IACT,QAAQ;IACR,SAAS;IACT,SAAS;IACT,IAAI;IACJ,SAAS;IACT,UAAU;IACV,IAAI;IACJ,QAAQ;IACR,YAAY;CACJ,CAAC;AAMX,SAAS,UAAU;IACjB,MAAM,IAAI,GAAG,kBAAkB,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAC1C,OAAO;;;;;;;gCAOuB,IAAI;;;;;CAKnC,CAAC;AACF,CAAC;AAED,SAAS,SAAS;IAChB,0BAA0B;IAC1B,MAAM,IAAI,GAAG,kBAAkB,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACpE,OAAO;;;;;EAKP,IAAI;;;;;;;CAOL,CAAC;AACF,CAAC;AAED,SAAS,UAAU;IACjB,MAAM,IAAI,GAAG,kBAAkB,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACrE,OAAO;;;;EAIP,IAAI;;;;;;CAML,CAAC;AACF,CAAC;AAED,MAAM,UAAU,0BAA0B,CAAC,KAAY;IACrD,QAAQ,KAAK,EAAE,CAAC;QACd,KAAK,MAAM;YACT,OAAO,UAAU,EAAE,CAAC;QACtB,KAAK,KAAK;YACR,OAAO,SAAS,EAAE,CAAC;QACrB,KAAK,MAAM;YACT,OAAO,UAAU,EAAE,CAAC;IACxB,CAAC;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,eAAe,CACnC,QAA4B,EAC5B,QAA6B,EAAE;IAE/B,MAAM,KAAK,GAAY,CAAC,MAAM,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC;IAC/C,MAAM,CAAC,GAAG,CAAC,QAAQ,IAAI,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC;IACzC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAU,CAAC,EAAE,CAAC;QAChC,OAAO,CAAC,KAAK,CACX,KAAK,CAAC,GAAG,CAAC,mBAAmB,QAAQ,IAAI,EAAE,WAAW,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,CAC3E,CAAC;QACF,QAAQ,CAAC,CAAC,CAAC,CAAC;QACZ,OAAO;IACT,CAAC;IACD,MAAM,MAAM,GAAG,0BAA0B,CAAC,CAAU,CAAC,CAAC;IACtD,6CAA6C;IAC7C,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;AAC/B,CAAC"}
|
package/dist/commands/db.js
CHANGED
|
@@ -37,7 +37,8 @@ const CONFIG_FILES = ['neetru.config.json', '.neetru.json'];
|
|
|
37
37
|
const DB_JSON_REL = '.neetru/db.json';
|
|
38
38
|
/** Caminho default do arquivo de schema DrizzleORM do produto. */
|
|
39
39
|
const DEFAULT_SCHEMA_PATH = 'db/schema.ts';
|
|
40
|
-
/** Engines disponíveis (espelha os
|
|
40
|
+
/** Engines disponíveis (espelha os 8 engines do Core — src/types/product-databases.ts). */
|
|
41
|
+
// NEW-MED-01 fix: nosql-vm estava ausente, causando rejeição de `neetru db init --engine nosql-vm`.
|
|
41
42
|
const ENGINES = [
|
|
42
43
|
'firestore-instance',
|
|
43
44
|
'cloud-sql-postgres',
|
|
@@ -46,6 +47,7 @@ const ENGINES = [
|
|
|
46
47
|
'vm-postgres-cluster',
|
|
47
48
|
'vm-mysql-single',
|
|
48
49
|
'vm-mysql-cluster',
|
|
50
|
+
'nosql-vm',
|
|
49
51
|
];
|
|
50
52
|
/**
|
|
51
53
|
* Engines NoSQL — schemaless por natureza.
|
|
@@ -64,6 +66,7 @@ const ENGINE_LABELS = {
|
|
|
64
66
|
'vm-postgres-cluster': 'VM — PostgreSQL (cluster HA)',
|
|
65
67
|
'vm-mysql-single': 'VM — MySQL (nó único)',
|
|
66
68
|
'vm-mysql-cluster': 'VM — MySQL (cluster HA)',
|
|
69
|
+
'nosql-vm': 'VM — MongoDB/NoSQL (self-hosted)',
|
|
67
70
|
};
|
|
68
71
|
// ---------------------------------------------------------------------------
|
|
69
72
|
// Helpers internos
|
|
@@ -210,64 +213,64 @@ export async function runDbStatus(dbId, opts = {}) {
|
|
|
210
213
|
}
|
|
211
214
|
// pdv #7 fix: template diferenciado por família de engine.
|
|
212
215
|
/** Template para engines NoSQL (firestore-instance). */
|
|
213
|
-
const SCHEMA_STARTER_NOSQL = (productId, engine) => `/**
|
|
214
|
-
* Schema do banco "${productId}" — ${ENGINE_LABELS[engine] ?? engine}.
|
|
215
|
-
*
|
|
216
|
-
* Gerado por \`neetru db init\`.
|
|
217
|
-
* Edite este arquivo com as collections do seu produto.
|
|
218
|
-
* Rode \`neetru db apply\` pra enviar a definição ao Core.
|
|
219
|
-
*
|
|
220
|
-
* Para bancos NoSQL (Firestore), o schema define a estrutura esperada
|
|
221
|
-
* dos documentos. O Core usa essa definição para validação e auditoria —
|
|
222
|
-
* o banco em si é schemaless (primeira escrita cria a estrutura).
|
|
223
|
-
*
|
|
224
|
-
* Documentação: https://core.neetru.com/docs/dev/db/nosql-schema
|
|
225
|
-
*/
|
|
226
|
-
|
|
227
|
-
// Exemplo de collection com tipagem TypeScript pura:
|
|
228
|
-
|
|
229
|
-
export interface Produto {
|
|
230
|
-
id: string;
|
|
231
|
-
nome: string;
|
|
232
|
-
preco: number;
|
|
233
|
-
ativo: boolean;
|
|
234
|
-
criadoEm: Date;
|
|
235
|
-
}
|
|
236
|
-
|
|
237
|
-
export interface Pedido {
|
|
238
|
-
id: string;
|
|
239
|
-
produtoId: string;
|
|
240
|
-
quantidade: number;
|
|
241
|
-
total: number;
|
|
242
|
-
status: 'pendente' | 'pago' | 'cancelado';
|
|
243
|
-
criadoEm: Date;
|
|
244
|
-
}
|
|
245
|
-
|
|
246
|
-
// Exporte as collections que o SDK vai usar:
|
|
247
|
-
// import { createNeetruClient } from '@neetru/sdk';
|
|
248
|
-
// const neetru = createNeetruClient({ ... });
|
|
249
|
-
// const produtos = neetru.db.collection<Produto>('produtos');
|
|
250
|
-
// const pedidos = neetru.db.collection<Pedido>('pedidos');
|
|
216
|
+
const SCHEMA_STARTER_NOSQL = (productId, engine) => `/**
|
|
217
|
+
* Schema do banco "${productId}" — ${ENGINE_LABELS[engine] ?? engine}.
|
|
218
|
+
*
|
|
219
|
+
* Gerado por \`neetru db init\`.
|
|
220
|
+
* Edite este arquivo com as collections do seu produto.
|
|
221
|
+
* Rode \`neetru db apply\` pra enviar a definição ao Core.
|
|
222
|
+
*
|
|
223
|
+
* Para bancos NoSQL (Firestore), o schema define a estrutura esperada
|
|
224
|
+
* dos documentos. O Core usa essa definição para validação e auditoria —
|
|
225
|
+
* o banco em si é schemaless (primeira escrita cria a estrutura).
|
|
226
|
+
*
|
|
227
|
+
* Documentação: https://core.neetru.com/docs/dev/db/nosql-schema
|
|
228
|
+
*/
|
|
229
|
+
|
|
230
|
+
// Exemplo de collection com tipagem TypeScript pura:
|
|
231
|
+
|
|
232
|
+
export interface Produto {
|
|
233
|
+
id: string;
|
|
234
|
+
nome: string;
|
|
235
|
+
preco: number;
|
|
236
|
+
ativo: boolean;
|
|
237
|
+
criadoEm: Date;
|
|
238
|
+
}
|
|
239
|
+
|
|
240
|
+
export interface Pedido {
|
|
241
|
+
id: string;
|
|
242
|
+
produtoId: string;
|
|
243
|
+
quantidade: number;
|
|
244
|
+
total: number;
|
|
245
|
+
status: 'pendente' | 'pago' | 'cancelado';
|
|
246
|
+
criadoEm: Date;
|
|
247
|
+
}
|
|
248
|
+
|
|
249
|
+
// Exporte as collections que o SDK vai usar:
|
|
250
|
+
// import { createNeetruClient } from '@neetru/sdk';
|
|
251
|
+
// const neetru = createNeetruClient({ ... });
|
|
252
|
+
// const produtos = neetru.db.collection<Produto>('produtos');
|
|
253
|
+
// const pedidos = neetru.db.collection<Pedido>('pedidos');
|
|
251
254
|
`;
|
|
252
255
|
/** Template padrão para engines SQL (PostgreSQL/MySQL). */
|
|
253
|
-
const SCHEMA_STARTER_SQL = (productId, engine) => `/**
|
|
254
|
-
* Schema do banco "${productId}" — ${ENGINE_LABELS[engine] ?? engine}.
|
|
255
|
-
*
|
|
256
|
-
* Gerado por \`neetru db init\`.
|
|
257
|
-
* Edite este arquivo e rode \`neetru db apply\` pra enviar a migração ao Core.
|
|
258
|
-
*/
|
|
259
|
-
|
|
260
|
-
// Exemplo com DrizzleORM (PostgreSQL):
|
|
261
|
-
// import { pgTable, serial, text, timestamp } from 'drizzle-orm/pg-core';
|
|
262
|
-
//
|
|
263
|
-
// export const usuarios = pgTable('usuarios', {
|
|
264
|
-
// id: serial('id').primaryKey(),
|
|
265
|
-
// email: text('email').notNull().unique(),
|
|
266
|
-
// criadoEm: timestamp('criado_em').defaultNow(),
|
|
267
|
-
// });
|
|
268
|
-
|
|
269
|
-
// Remova o comentário acima e adapte ao seu schema.
|
|
270
|
-
export {};
|
|
256
|
+
const SCHEMA_STARTER_SQL = (productId, engine) => `/**
|
|
257
|
+
* Schema do banco "${productId}" — ${ENGINE_LABELS[engine] ?? engine}.
|
|
258
|
+
*
|
|
259
|
+
* Gerado por \`neetru db init\`.
|
|
260
|
+
* Edite este arquivo e rode \`neetru db apply\` pra enviar a migração ao Core.
|
|
261
|
+
*/
|
|
262
|
+
|
|
263
|
+
// Exemplo com DrizzleORM (PostgreSQL):
|
|
264
|
+
// import { pgTable, serial, text, timestamp } from 'drizzle-orm/pg-core';
|
|
265
|
+
//
|
|
266
|
+
// export const usuarios = pgTable('usuarios', {
|
|
267
|
+
// id: serial('id').primaryKey(),
|
|
268
|
+
// email: text('email').notNull().unique(),
|
|
269
|
+
// criadoEm: timestamp('criado_em').defaultNow(),
|
|
270
|
+
// });
|
|
271
|
+
|
|
272
|
+
// Remova o comentário acima e adapte ao seu schema.
|
|
273
|
+
export {};
|
|
271
274
|
`;
|
|
272
275
|
/** Conteúdo do `db/schema.ts` gerado durante o init. */
|
|
273
276
|
const SCHEMA_STARTER = (productId, engine) => {
|