@neetru/cli 2.3.0 → 2.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.
Files changed (39) hide show
  1. package/dist/commands/deploy.js +8 -8
  2. package/dist/commands/deployments.d.ts +5 -5
  3. package/dist/commands/deployments.js +32 -6
  4. package/dist/commands/deployments.js.map +1 -1
  5. package/dist/commands/products-db.d.ts +9 -9
  6. package/dist/commands/products-db.js +84 -19
  7. package/dist/commands/products-db.js.map +1 -1
  8. package/dist/commands/products.d.ts +2 -2
  9. package/dist/commands/products.js +8 -6
  10. package/dist/commands/products.js.map +1 -1
  11. package/dist/commands/schema.d.ts +25 -0
  12. package/dist/commands/schema.js +321 -0
  13. package/dist/commands/schema.js.map +1 -0
  14. package/dist/commands/servers.d.ts +5 -5
  15. package/dist/commands/servers.js +25 -17
  16. package/dist/commands/servers.js.map +1 -1
  17. package/dist/commands/status.js +3 -2
  18. package/dist/commands/status.js.map +1 -1
  19. package/dist/commands/tenants.d.ts +14 -14
  20. package/dist/commands/tenants.js +62 -30
  21. package/dist/commands/tenants.js.map +1 -1
  22. package/dist/commands/ui.d.ts +1 -0
  23. package/dist/commands/ui.js +454 -0
  24. package/dist/commands/ui.js.map +1 -0
  25. package/dist/commands/workspaces.d.ts +9 -9
  26. package/dist/commands/workspaces.js +66 -31
  27. package/dist/commands/workspaces.js.map +1 -1
  28. package/dist/index.js +95 -63
  29. package/dist/index.js.map +1 -1
  30. package/dist/lib/ai/orchestrator.js +46 -23
  31. package/dist/lib/ai/orchestrator.js.map +1 -1
  32. package/dist/lib/config-schema.d.ts +18 -18
  33. package/dist/lib/pickers.d.ts +123 -0
  34. package/dist/lib/pickers.js +336 -0
  35. package/dist/lib/pickers.js.map +1 -0
  36. package/dist/lib/schema-cache.d.ts +87 -0
  37. package/dist/lib/schema-cache.js +134 -0
  38. package/dist/lib/schema-cache.js.map +1 -0
  39. package/package.json +1 -1
@@ -13,6 +13,7 @@ import { apiRequest } from '../lib/api-client.js';
13
13
  import { requireToken, handleApiError } from '../lib/cli-read.js';
14
14
  import { confirmDestructive, printWriteResult, } from '../lib/cli-write.js';
15
15
  import { renderTable, fmtTimestamp } from '../lib/render.js';
16
+ import { pickProductId, pickTenant, promptChoice, promptText } from '../lib/pickers.js';
16
17
  import { log } from '../utils/logger.js';
17
18
  function colorStatus(s) {
18
19
  if (!s)
@@ -61,15 +62,16 @@ export async function runTenantsList(opts) {
61
62
  console.log();
62
63
  }
63
64
  export async function runTenantsGet(id, opts) {
64
- if (!id) {
65
- log.error('Uso: neetru tenants get <id>');
66
- process.exit(1);
67
- }
68
65
  const token = await requireToken(opts.json);
69
- const spinner = opts.json ? null : ora({ text: `Buscando tenant ${id}…`, color: 'blue' }).start();
66
+ const tenantId = await pickTenant(token, {
67
+ fromFlag: id,
68
+ json: opts.json,
69
+ message: 'Tenant:',
70
+ });
71
+ const spinner = opts.json ? null : ora({ text: `Buscando tenant ${tenantId}...`, color: 'blue' }).start();
70
72
  let res;
71
73
  try {
72
- res = await apiRequest(`/api/cli/v1/tenants/${encodeURIComponent(id)}`, { token });
74
+ res = await apiRequest(`/api/cli/v1/tenants/${encodeURIComponent(tenantId)}`, { token });
73
75
  spinner?.stop();
74
76
  }
75
77
  catch (error) {
@@ -96,6 +98,20 @@ export async function runTenantsGet(id, opts) {
96
98
  }
97
99
  export async function runTenantsCreate(opts) {
98
100
  const token = await requireToken(opts.json);
101
+ const name = opts.name ?? (await promptText('Nome do tenant:', { json: opts.json }));
102
+ const slug = opts.slug ?? (await promptText('Slug do tenant:', { json: opts.json }));
103
+ const customer = opts.customer ?? (await promptText('customerId:', { json: opts.json }));
104
+ const product = await pickProductId(token, {
105
+ fromFlag: opts.product,
106
+ json: opts.json,
107
+ message: 'Produto do tenant:',
108
+ });
109
+ const env = opts.env ??
110
+ (await promptChoice('Ambiente:', [
111
+ { name: 'dev', value: 'dev' },
112
+ { name: 'staging', value: 'staging' },
113
+ { name: 'prod', value: 'prod' },
114
+ ], { default: 'dev', json: opts.json }));
99
115
  const spinner = opts.json ? null : ora({ text: 'Criando tenant…', color: 'blue' }).start();
100
116
  let res;
101
117
  try {
@@ -103,11 +119,11 @@ export async function runTenantsCreate(opts) {
103
119
  method: 'POST',
104
120
  token,
105
121
  body: {
106
- name: opts.name,
107
- slug: opts.slug,
108
- customerId: opts.customer,
109
- productId: opts.product,
110
- environmentId: opts.env,
122
+ name,
123
+ slug,
124
+ customerId: customer,
125
+ productId: product,
126
+ environmentId: env,
111
127
  primaryDomain: opts.domain,
112
128
  },
113
129
  });
@@ -120,22 +136,37 @@ export async function runTenantsCreate(opts) {
120
136
  printWriteResult({ id: res.id }, `Tenant criado: ${res.id}`, opts.json);
121
137
  }
122
138
  export async function runTenantsUpdate(id, opts) {
123
- if (!id) {
124
- log.error('Uso: neetru tenants update <id> --name … --slug … --customer … --product … --env …');
125
- process.exit(1);
126
- }
127
139
  const token = await requireToken(opts.json);
128
- const spinner = opts.json ? null : ora({ text: `Atualizando tenant ${id}…`, color: 'blue' }).start();
140
+ const tenantId = await pickTenant(token, {
141
+ fromFlag: id,
142
+ json: opts.json,
143
+ message: 'Tenant a atualizar:',
144
+ });
145
+ const name = opts.name ?? (await promptText('Nome do tenant:', { json: opts.json }));
146
+ const slug = opts.slug ?? (await promptText('Slug do tenant:', { json: opts.json }));
147
+ const customer = opts.customer ?? (await promptText('customerId:', { json: opts.json }));
148
+ const product = await pickProductId(token, {
149
+ fromFlag: opts.product,
150
+ json: opts.json,
151
+ message: 'Produto do tenant:',
152
+ });
153
+ const env = opts.env ??
154
+ (await promptChoice('Ambiente:', [
155
+ { name: 'dev', value: 'dev' },
156
+ { name: 'staging', value: 'staging' },
157
+ { name: 'prod', value: 'prod' },
158
+ ], { default: 'dev', json: opts.json }));
159
+ const spinner = opts.json ? null : ora({ text: `Atualizando tenant ${tenantId}...`, color: 'blue' }).start();
129
160
  try {
130
- await apiRequest(`/api/cli/v1/tenants/${encodeURIComponent(id)}`, {
161
+ await apiRequest(`/api/cli/v1/tenants/${encodeURIComponent(tenantId)}`, {
131
162
  method: 'PATCH',
132
163
  token,
133
164
  body: {
134
- name: opts.name,
135
- slug: opts.slug,
136
- customerId: opts.customer,
137
- productId: opts.product,
138
- environmentId: opts.env,
165
+ name,
166
+ slug,
167
+ customerId: customer,
168
+ productId: product,
169
+ environmentId: env,
139
170
  primaryDomain: opts.domain,
140
171
  },
141
172
  });
@@ -145,23 +176,24 @@ export async function runTenantsUpdate(id, opts) {
145
176
  spinner?.fail('Falha ao atualizar tenant.');
146
177
  handleApiError(error, opts.json);
147
178
  }
148
- printWriteResult({ id }, `Tenant ${id} atualizado.`, opts.json);
179
+ printWriteResult({ id: tenantId }, `Tenant ${tenantId} atualizado.`, opts.json);
149
180
  }
150
181
  async function runTenantsStatusChange(id, action, opts) {
151
- if (!id) {
152
- log.error(`Uso: neetru tenants ${action} <id>`);
153
- process.exit(1);
154
- }
155
182
  const token = await requireToken(opts.json);
183
+ const tenantId = await pickTenant(token, {
184
+ fromFlag: id,
185
+ json: opts.json,
186
+ message: action === 'suspend' ? 'Tenant a suspender:' : 'Tenant a reativar:',
187
+ });
156
188
  if (action === 'suspend') {
157
- await confirmDestructive(`Suspender o tenant ${id}? O acesso do cliente fica bloqueado até reativar.`, opts);
189
+ await confirmDestructive(`Suspender o tenant ${tenantId}? O acesso do cliente fica bloqueado ate reativar.`, opts);
158
190
  }
159
191
  const spinner = opts.json
160
192
  ? null
161
- : ora({ text: `${action === 'suspend' ? 'Suspendendo' : 'Reativando'} tenant ${id}…`, color: 'blue' }).start();
193
+ : ora({ text: `${action === 'suspend' ? 'Suspendendo' : 'Reativando'} tenant ${tenantId}...`, color: 'blue' }).start();
162
194
  let res;
163
195
  try {
164
- res = await apiRequest(`/api/cli/v1/tenants/${encodeURIComponent(id)}?action=${action}`, { method: 'POST', token });
196
+ res = await apiRequest(`/api/cli/v1/tenants/${encodeURIComponent(tenantId)}?action=${action}`, { method: 'POST', token });
165
197
  spinner?.stop();
166
198
  }
167
199
  catch (error) {
@@ -1 +1 @@
1
- {"version":3,"file":"tenants.js","sourceRoot":"","sources":["../../src/commands/tenants.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"tenants.js","sourceRoot":"","sources":["../../src/commands/tenants.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ export declare function runTerminalUi(): Promise<void>;
@@ -0,0 +1,454 @@
1
+ import * as fs from 'node:fs/promises';
2
+ import * as path from 'node:path';
3
+ import chalk from 'chalk';
4
+ import inquirer from 'inquirer';
5
+ import { apiRequest } from '../lib/api-client.js';
6
+ import { config } from '../lib/config.js';
7
+ import { resolveToken } from '../lib/cli-read.js';
8
+ import { CLI_VERSION } from '../version.js';
9
+ import { log } from '../utils/logger.js';
10
+ function canPrompt() {
11
+ return Boolean(process.stdin.isTTY) && Boolean(process.stdout.isTTY) && process.env.CI !== 'true';
12
+ }
13
+ async function pause() {
14
+ await inquirer.prompt([
15
+ {
16
+ type: 'input',
17
+ name: 'continue',
18
+ message: 'Enter para voltar ao menu',
19
+ },
20
+ ]);
21
+ }
22
+ async function safeRun(fn, opts = {}) {
23
+ try {
24
+ await fn();
25
+ }
26
+ catch (error) {
27
+ log.error(error instanceof Error ? error.message : String(error));
28
+ }
29
+ if (opts.pauseAfter !== false)
30
+ await pause();
31
+ }
32
+ async function readLocalProject(cwd) {
33
+ for (const file of ['neetru.config.json', '.neetru.json']) {
34
+ const full = path.join(cwd, file);
35
+ try {
36
+ const raw = await fs.readFile(full, 'utf8');
37
+ return { file, data: JSON.parse(raw) };
38
+ }
39
+ catch (error) {
40
+ if (error.code !== 'ENOENT') {
41
+ return { file, data: { error: error.message } };
42
+ }
43
+ }
44
+ }
45
+ return null;
46
+ }
47
+ async function showOverview() {
48
+ const cwd = process.cwd();
49
+ const local = await readLocalProject(cwd);
50
+ const token = await resolveToken();
51
+ console.log();
52
+ log.heading('Projeto atual');
53
+ console.log(` ${chalk.dim('cwd')} ${cwd}`);
54
+ console.log(` ${chalk.dim('cli')} ${CLI_VERSION}`);
55
+ console.log(` ${chalk.dim('api')} ${config.get('neetruApiUrl') ?? 'https://api.neetru.com'}`);
56
+ console.log(` ${chalk.dim('config')} ${config.path}`);
57
+ if (local) {
58
+ console.log(` ${chalk.dim('arquivo')} ${local.file}`);
59
+ for (const key of ['name', 'slug', 'runtime', 'stack', 'schemaVersion', 'apiVersion']) {
60
+ if (local.data[key] !== undefined) {
61
+ console.log(` ${chalk.dim(key.padEnd(10))} ${String(local.data[key])}`);
62
+ }
63
+ }
64
+ }
65
+ else {
66
+ console.log(` ${chalk.dim('arquivo')} nenhum neetru.config.json no cwd`);
67
+ }
68
+ console.log();
69
+ log.heading('Sessao');
70
+ if (!token) {
71
+ console.log(` ${chalk.yellow('sem login')} rode ${chalk.cyan('neetru login')}`);
72
+ return;
73
+ }
74
+ try {
75
+ const me = await apiRequest('/api/cli/v1/whoami', { token });
76
+ console.log(` ${chalk.dim('email')} ${me.email}`);
77
+ console.log(` ${chalk.dim('role')} ${me.role}`);
78
+ console.log(` ${chalk.dim('uid')} ${me.uid}`);
79
+ console.log(` ${chalk.dim('keyId')} ${me.keyId}`);
80
+ }
81
+ catch (error) {
82
+ console.log(` ${chalk.yellow('login local encontrado, mas whoami falhou')}`);
83
+ console.log(` ${chalk.dim(error instanceof Error ? error.message : String(error))}`);
84
+ }
85
+ }
86
+ async function quickstart() {
87
+ const answers = await inquirer.prompt([
88
+ {
89
+ type: 'input',
90
+ name: 'name',
91
+ message: 'Nome do produto:',
92
+ validate: (value) => value.trim().length > 0 || 'Obrigatorio.',
93
+ },
94
+ {
95
+ type: 'confirm',
96
+ name: 'skipInit',
97
+ message: 'Pular scaffold local?',
98
+ default: false,
99
+ },
100
+ {
101
+ type: 'confirm',
102
+ name: 'skipOpen',
103
+ message: 'Nao abrir browser no final?',
104
+ default: false,
105
+ },
106
+ ]);
107
+ const { runNewMacro } = await import('./new.js');
108
+ await runNewMacro(answers.name, {
109
+ skipInit: answers.skipInit,
110
+ skipOpen: answers.skipOpen,
111
+ });
112
+ }
113
+ async function productsMenu() {
114
+ const answer = await inquirer.prompt([
115
+ {
116
+ type: 'list',
117
+ name: 'action',
118
+ message: 'Produtos',
119
+ choices: [
120
+ { name: 'Listar produtos', value: 'list' },
121
+ { name: 'Criar produto', value: 'create' },
122
+ { name: 'Publicar no catalogo', value: 'publish' },
123
+ { name: 'Remover do catalogo', value: 'unpublish' },
124
+ { name: 'Voltar', value: 'back' },
125
+ ],
126
+ },
127
+ ]);
128
+ if (answer.action === 'back')
129
+ return;
130
+ const products = await import('./products.js');
131
+ if (answer.action === 'list')
132
+ await products.runProductsList({});
133
+ if (answer.action === 'create')
134
+ await products.runProductsCreate({});
135
+ if (answer.action === 'publish')
136
+ await products.runProductsPublish(undefined, {});
137
+ if (answer.action === 'unpublish')
138
+ await products.runProductsUnpublish(undefined, {});
139
+ await pause();
140
+ }
141
+ async function workspacesMenu() {
142
+ const answer = await inquirer.prompt([
143
+ {
144
+ type: 'list',
145
+ name: 'action',
146
+ message: 'Workspaces',
147
+ choices: [
148
+ { name: 'Listar workspaces', value: 'list' },
149
+ { name: 'Criar workspace', value: 'create' },
150
+ { name: 'Ver detalhes', value: 'get' },
151
+ { name: 'Abrir no painel', value: 'open' },
152
+ { name: 'Promover bundle', value: 'advance' },
153
+ { name: 'Voltar', value: 'back' },
154
+ ],
155
+ },
156
+ ]);
157
+ if (answer.action === 'back')
158
+ return;
159
+ const workspaces = await import('./workspaces.js');
160
+ if (answer.action === 'list')
161
+ await workspaces.runWorkspacesList({});
162
+ if (answer.action === 'create')
163
+ await workspaces.runWorkspacesCreate({});
164
+ if (answer.action === 'get')
165
+ await workspaces.runWorkspacesGet(undefined, {});
166
+ if (answer.action === 'open')
167
+ await workspaces.runWorkspacesOpen(undefined);
168
+ if (answer.action === 'advance')
169
+ await workspaces.runWorkspacesAdvance(undefined, {});
170
+ await pause();
171
+ }
172
+ async function serversMenu() {
173
+ const answer = await inquirer.prompt([
174
+ {
175
+ type: 'list',
176
+ name: 'action',
177
+ message: 'Servers',
178
+ choices: [
179
+ { name: 'Listar servers', value: 'list' },
180
+ { name: 'Provisionar VM', value: 'provision' },
181
+ { name: 'Despachar comando', value: 'dispatch' },
182
+ { name: 'Desativar server', value: 'deactivate' },
183
+ { name: 'Voltar', value: 'back' },
184
+ ],
185
+ },
186
+ ]);
187
+ if (answer.action === 'back')
188
+ return;
189
+ const servers = await import('./servers.js');
190
+ if (answer.action === 'list')
191
+ await servers.runServersList({ capacity: true });
192
+ if (answer.action === 'provision')
193
+ await servers.runServersProvision({});
194
+ if (answer.action === 'dispatch')
195
+ await servers.runServersDispatch(undefined, undefined, {});
196
+ if (answer.action === 'deactivate')
197
+ await servers.runServersDeactivate(undefined, {});
198
+ await pause();
199
+ }
200
+ async function databasesMenu() {
201
+ const answer = await inquirer.prompt([
202
+ {
203
+ type: 'list',
204
+ name: 'action',
205
+ message: 'Bancos de produto',
206
+ choices: [
207
+ { name: 'Listar bancos', value: 'list' },
208
+ { name: 'Criar banco', value: 'create' },
209
+ { name: 'Detalhar banco', value: 'get' },
210
+ { name: 'Listar engines', value: 'engines' },
211
+ { name: 'Retry provisionamento', value: 'retry' },
212
+ { name: 'Rotacionar credenciais', value: 'rotate' },
213
+ { name: 'Arquivar banco', value: 'delete' },
214
+ { name: 'Voltar', value: 'back' },
215
+ ],
216
+ },
217
+ ]);
218
+ if (answer.action === 'back')
219
+ return;
220
+ const db = await import('./products-db.js');
221
+ if (answer.action === 'list')
222
+ await db.runDbList({});
223
+ if (answer.action === 'create')
224
+ await db.runDbCreate({ region: 'us-central1' });
225
+ if (answer.action === 'get')
226
+ await db.runDbGet(undefined, {});
227
+ if (answer.action === 'engines')
228
+ await db.runDbEngines({});
229
+ if (answer.action === 'retry')
230
+ await db.runDbRetry(undefined, {});
231
+ if (answer.action === 'rotate')
232
+ await db.runDbRotate(undefined, {});
233
+ if (answer.action === 'delete')
234
+ await db.runDbDelete(undefined, {});
235
+ await pause();
236
+ }
237
+ async function tenantsMenu() {
238
+ const answer = await inquirer.prompt([
239
+ {
240
+ type: 'list',
241
+ name: 'action',
242
+ message: 'Tenants',
243
+ choices: [
244
+ { name: 'Listar tenants', value: 'list' },
245
+ { name: 'Detalhar tenant', value: 'get' },
246
+ { name: 'Criar tenant', value: 'create' },
247
+ { name: 'Atualizar tenant', value: 'update' },
248
+ { name: 'Suspender tenant', value: 'suspend' },
249
+ { name: 'Reativar tenant', value: 'reactivate' },
250
+ { name: 'Voltar', value: 'back' },
251
+ ],
252
+ },
253
+ ]);
254
+ if (answer.action === 'back')
255
+ return;
256
+ const tenants = await import('./tenants.js');
257
+ if (answer.action === 'list')
258
+ await tenants.runTenantsList({});
259
+ if (answer.action === 'get')
260
+ await tenants.runTenantsGet(undefined, {});
261
+ if (answer.action === 'create')
262
+ await tenants.runTenantsCreate({});
263
+ if (answer.action === 'update')
264
+ await tenants.runTenantsUpdate(undefined, {});
265
+ if (answer.action === 'suspend')
266
+ await tenants.runTenantsSuspend(undefined, {});
267
+ if (answer.action === 'reactivate')
268
+ await tenants.runTenantsReactivate(undefined, {});
269
+ await pause();
270
+ }
271
+ async function supportMenu() {
272
+ const answer = await inquirer.prompt([
273
+ {
274
+ type: 'list',
275
+ name: 'action',
276
+ message: 'Suporte',
277
+ choices: [
278
+ { name: 'Listar tickets', value: 'list' },
279
+ { name: 'Detalhar ticket', value: 'describe' },
280
+ { name: 'Responder ticket', value: 'reply' },
281
+ { name: 'Mudar status', value: 'status' },
282
+ { name: 'Voltar', value: 'back' },
283
+ ],
284
+ },
285
+ ]);
286
+ if (answer.action === 'back')
287
+ return;
288
+ const support = await import('./support.js');
289
+ if (answer.action === 'list')
290
+ await support.runSupportTicketsList({});
291
+ if (answer.action === 'describe') {
292
+ const { id } = await inquirer.prompt([
293
+ { type: 'input', name: 'id', message: 'Ticket ID:', validate: Boolean },
294
+ ]);
295
+ await support.runSupportTicketsDescribe(id, {});
296
+ }
297
+ if (answer.action === 'reply') {
298
+ const { id, message } = await inquirer.prompt([
299
+ { type: 'input', name: 'id', message: 'Ticket ID:', validate: Boolean },
300
+ { type: 'editor', name: 'message', message: 'Mensagem:' },
301
+ ]);
302
+ await support.runSupportTicketsReply(id, { message });
303
+ }
304
+ if (answer.action === 'status') {
305
+ const { id, to } = await inquirer.prompt([
306
+ { type: 'input', name: 'id', message: 'Ticket ID:', validate: Boolean },
307
+ {
308
+ type: 'list',
309
+ name: 'to',
310
+ message: 'Novo status:',
311
+ choices: ['open', 'in_progress', 'resolved', 'closed'],
312
+ },
313
+ ]);
314
+ await support.runSupportTicketsStatus(id, { to });
315
+ }
316
+ await pause();
317
+ }
318
+ async function healthMenu() {
319
+ const answer = await inquirer.prompt([
320
+ {
321
+ type: 'list',
322
+ name: 'action',
323
+ message: 'Status e diagnostico',
324
+ choices: [
325
+ { name: 'Status das superficies', value: 'status' },
326
+ { name: 'Doctor', value: 'doctor' },
327
+ { name: 'Whoami', value: 'whoami' },
328
+ { name: 'Voltar', value: 'back' },
329
+ ],
330
+ },
331
+ ]);
332
+ if (answer.action === 'back')
333
+ return;
334
+ if (answer.action === 'status') {
335
+ const { runSurfaceStatus } = await import('./surface-status.js');
336
+ await runSurfaceStatus({});
337
+ }
338
+ if (answer.action === 'doctor') {
339
+ const doctor = await import('./doctor.js');
340
+ const checks = [
341
+ await doctor.checkToken(),
342
+ await doctor.checkCoreHealth(),
343
+ await doctor.checkConfigSchema(process.cwd()),
344
+ await doctor.checkNeetruEnv(process.cwd()),
345
+ await doctor.checkCliVersion(),
346
+ ];
347
+ log.heading('Doctor');
348
+ for (const check of checks) {
349
+ const marker = check.ok ? chalk.green('*') : check.warning ? chalk.yellow('!') : chalk.red('x');
350
+ console.log(` ${marker} ${check.name}${check.detail ? chalk.dim(` - ${check.detail}`) : ''}`);
351
+ }
352
+ }
353
+ if (answer.action === 'whoami') {
354
+ const { runWhoami } = await import('./whoami.js');
355
+ await runWhoami({});
356
+ }
357
+ await pause();
358
+ }
359
+ async function authMenu() {
360
+ const answer = await inquirer.prompt([
361
+ {
362
+ type: 'list',
363
+ name: 'action',
364
+ message: 'Login e configuracao',
365
+ choices: [
366
+ { name: 'Login', value: 'login' },
367
+ { name: 'Logout', value: 'logout' },
368
+ { name: 'Ver config', value: 'config' },
369
+ { name: 'Caminho da config', value: 'path' },
370
+ { name: 'Voltar', value: 'back' },
371
+ ],
372
+ },
373
+ ]);
374
+ if (answer.action === 'back')
375
+ return;
376
+ if (answer.action === 'login') {
377
+ const { runLogin } = await import('./login.js');
378
+ await runLogin({});
379
+ }
380
+ if (answer.action === 'logout') {
381
+ const { runLogout } = await import('./logout.js');
382
+ await runLogout();
383
+ }
384
+ if (answer.action === 'config') {
385
+ const { configGet } = await import('./config.js');
386
+ configGet();
387
+ }
388
+ if (answer.action === 'path') {
389
+ const { configPath } = await import('./config.js');
390
+ configPath();
391
+ }
392
+ await pause();
393
+ }
394
+ export async function runTerminalUi() {
395
+ if (!canPrompt()) {
396
+ log.error('A interface interativa exige um terminal TTY. Use comandos diretos ou --json em CI.');
397
+ process.exit(1);
398
+ }
399
+ log.banner();
400
+ let running = true;
401
+ while (running) {
402
+ const answer = await inquirer.prompt([
403
+ {
404
+ type: 'list',
405
+ name: 'action',
406
+ message: 'Neetru',
407
+ pageSize: 14,
408
+ choices: [
409
+ { name: 'Visao do projeto e sessao', value: 'overview' },
410
+ { name: 'Criar produto + workspace', value: 'quickstart' },
411
+ { name: 'Produtos', value: 'products' },
412
+ { name: 'Workspaces', value: 'workspaces' },
413
+ { name: 'Deploy guiado', value: 'deploy' },
414
+ { name: 'Servers', value: 'servers' },
415
+ { name: 'Bancos de produto', value: 'databases' },
416
+ { name: 'Tenants', value: 'tenants' },
417
+ { name: 'Suporte', value: 'support' },
418
+ { name: 'Status e diagnostico', value: 'health' },
419
+ { name: 'Login e configuracao', value: 'auth' },
420
+ { name: 'Sair', value: 'exit' },
421
+ ],
422
+ },
423
+ ]);
424
+ if (answer.action === 'exit') {
425
+ running = false;
426
+ continue;
427
+ }
428
+ if (answer.action === 'overview')
429
+ await safeRun(showOverview);
430
+ if (answer.action === 'quickstart')
431
+ await safeRun(quickstart, { pauseAfter: false });
432
+ if (answer.action === 'products')
433
+ await safeRun(productsMenu, { pauseAfter: false });
434
+ if (answer.action === 'workspaces')
435
+ await safeRun(workspacesMenu, { pauseAfter: false });
436
+ if (answer.action === 'deploy') {
437
+ const { runDeploy } = await import('./deploy.js');
438
+ await safeRun(() => runDeploy({}), { pauseAfter: false });
439
+ }
440
+ if (answer.action === 'servers')
441
+ await safeRun(serversMenu, { pauseAfter: false });
442
+ if (answer.action === 'databases')
443
+ await safeRun(databasesMenu, { pauseAfter: false });
444
+ if (answer.action === 'tenants')
445
+ await safeRun(tenantsMenu, { pauseAfter: false });
446
+ if (answer.action === 'support')
447
+ await safeRun(supportMenu, { pauseAfter: false });
448
+ if (answer.action === 'health')
449
+ await safeRun(healthMenu, { pauseAfter: false });
450
+ if (answer.action === 'auth')
451
+ await safeRun(authMenu, { pauseAfter: false });
452
+ }
453
+ }
454
+ //# sourceMappingURL=ui.js.map