@neetru/cli 2.8.0 → 2.9.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.
Files changed (41) hide show
  1. package/CHANGELOG.md +96 -0
  2. package/dist/commands/bug.d.ts +87 -0
  3. package/dist/commands/bug.js +419 -0
  4. package/dist/commands/bug.js.map +1 -0
  5. package/dist/commands/customers.d.ts +17 -0
  6. package/dist/commands/customers.js +160 -0
  7. package/dist/commands/customers.js.map +1 -0
  8. package/dist/commands/db.d.ts +4 -0
  9. package/dist/commands/db.js +267 -63
  10. package/dist/commands/db.js.map +1 -1
  11. package/dist/commands/docs.d.ts +4 -0
  12. package/dist/commands/docs.js +99 -7
  13. package/dist/commands/docs.js.map +1 -1
  14. package/dist/commands/doctor.js +4 -1
  15. package/dist/commands/doctor.js.map +1 -1
  16. package/dist/commands/marketplace.d.ts +36 -0
  17. package/dist/commands/marketplace.js +584 -0
  18. package/dist/commands/marketplace.js.map +1 -0
  19. package/dist/commands/new.js +196 -37
  20. package/dist/commands/new.js.map +1 -1
  21. package/dist/commands/open.d.ts +8 -0
  22. package/dist/commands/open.js +61 -13
  23. package/dist/commands/open.js.map +1 -1
  24. package/dist/commands/products.d.ts +23 -0
  25. package/dist/commands/products.js +39 -1
  26. package/dist/commands/products.js.map +1 -1
  27. package/dist/commands/tenants.js +15 -0
  28. package/dist/commands/tenants.js.map +1 -1
  29. package/dist/commands/ui.d.ts +1 -1
  30. package/dist/commands/ui.js +172 -2
  31. package/dist/commands/ui.js.map +1 -1
  32. package/dist/commands/workspaces.d.ts +10 -1
  33. package/dist/commands/workspaces.js +136 -22
  34. package/dist/commands/workspaces.js.map +1 -1
  35. package/dist/index.js +276 -4
  36. package/dist/index.js.map +1 -1
  37. package/dist/lib/config-schema.d.ts +8 -8
  38. package/dist/lib/pickers.d.ts +12 -0
  39. package/dist/lib/pickers.js +34 -0
  40. package/dist/lib/pickers.js.map +1 -1
  41. package/package.json +5 -2
@@ -9,19 +9,40 @@
9
9
  * GET /api/cli/v1/workspaces/{id} (get)
10
10
  * (open) NÃO chama API — só monta a URL do painel e abre o browser.
11
11
  */
12
- import { spawn } from 'node:child_process';
12
+ import * as fs from 'node:fs/promises';
13
+ import * as path from 'node:path';
13
14
  import chalk from 'chalk';
15
+ import { safeOpenUrl } from './open.js';
14
16
  import ora from 'ora';
15
17
  import { apiRequest } from '../lib/api-client.js';
16
18
  import { config } from '../lib/config.js';
17
19
  import { requireToken, handleApiError, printWriteResult } from '../lib/cli-write.js';
18
20
  import { renderTable, fmtTimestamp } from '../lib/render.js';
19
- import { pickProductId, pickProductSlug, pickWorkspace, isInteractive, promptChoice, promptText, resolveCustomer, } from '../lib/pickers.js';
21
+ import { pickProductId, pickProductSlug, pickWorkspace, resolveProductIdentifier, isInteractive, promptChoice, promptText, resolveCustomer, } from '../lib/pickers.js';
20
22
  import { log } from '../utils/logger.js';
23
+ /** Formata o erro 400 "Nenhum customer ativo" de forma acionável. */
24
+ function humanizeWorkspaceCreateError(message) {
25
+ if (/nenhum customer ativo/i.test(message)) {
26
+ return ('Nenhum customer ativo encontrado.\n\n' +
27
+ ' Customer = entidade comercial (PJ) que vai operar o ambiente.\n' +
28
+ ' Você pode criar em:\n' +
29
+ ' • Painel web: https://core.neetru.com/customers\n' +
30
+ ' • CLI: neetru customers create --name "..." --email "..." (em breve)\n\n' +
31
+ ' Depois rode novamente:\n' +
32
+ ' neetru workspaces create --product <id> --customer <customerId>\n');
33
+ }
34
+ return message;
35
+ }
21
36
  export async function runWorkspacesCreate(opts) {
22
37
  const token = await requireToken(opts.json);
38
+ // pdv #3 fix: se --product for slug (ex: pdv-agiliza), resolve para id antes
39
+ // de chamar pickProductId. Isso corrige a inconsistência onde tenants create
40
+ // aceitava slug mas workspaces create não.
41
+ const productFlag = opts.product
42
+ ? await resolveProductIdentifier(token, opts.product, { json: opts.json })
43
+ : undefined;
23
44
  const product = await pickProductId(token, {
24
- fromFlag: opts.product,
45
+ fromFlag: productFlag,
25
46
  json: opts.json,
26
47
  message: 'Produto do workspace:',
27
48
  });
@@ -32,6 +53,71 @@ export async function runWorkspacesCreate(opts) {
32
53
  { name: 'staging', value: 'staging' },
33
54
  { name: 'prod', value: 'prod' },
34
55
  ], { default: 'dev', json: opts.json }));
56
+ // Bug #40: detecta tenant ativo existente para produto+env antes de criar.
57
+ if (!opts.forceDuplicate) {
58
+ const dupSpinner = opts.json
59
+ ? null
60
+ : ora({ text: 'Verificando ambientes existentes…', color: 'blue' }).start();
61
+ let existingTenant = null;
62
+ try {
63
+ const qs = new URLSearchParams({ product, status: 'ativo' }).toString();
64
+ const listRes = await apiRequest(`/api/cli/v1/tenants?${qs}`, { token });
65
+ dupSpinner?.stop();
66
+ const rows = listRes.tenants ?? listRes.workspaces ?? [];
67
+ const match = rows.find((r) => (r.environmentId ?? r.env) === env);
68
+ if (match)
69
+ existingTenant = match;
70
+ }
71
+ catch {
72
+ // Falha ao checar duplicatas não bloqueia — prossegue criação normalmente.
73
+ dupSpinner?.stop();
74
+ }
75
+ if (existingTenant) {
76
+ const label = existingTenant.name ?? existingTenant.id ?? '(sem nome)';
77
+ // Modo script/JSON (--json ou --yes implícito): bloqueia com 409.
78
+ if (opts.json) {
79
+ console.log(JSON.stringify({
80
+ ok: false,
81
+ error: 'tenant_already_exists',
82
+ status: 409,
83
+ message: `Já existe ambiente ativo '${label}' para produto=${product} env=${env}. Use --force-duplicate para criar mesmo assim.`,
84
+ existing: existingTenant,
85
+ }));
86
+ process.exit(1);
87
+ }
88
+ // Modo interativo: pergunta o que fazer.
89
+ if (isInteractive(opts)) {
90
+ log.warn(`Já existe ambiente '${chalk.cyan(label)}' (${existingTenant.id}) para este produto+env.`);
91
+ const choice = await promptChoice('O que deseja fazer?', [
92
+ { name: `Reusar '${label}' (sem novo OAuth)`, value: 'reuse' },
93
+ { name: 'Criar ambiente novo mesmo assim', value: 'new' },
94
+ { name: 'Cancelar', value: 'cancel' },
95
+ ], { json: opts.json });
96
+ if (choice === 'cancel') {
97
+ log.dim('Operação cancelada.');
98
+ process.exit(0);
99
+ }
100
+ if (choice === 'reuse') {
101
+ log.success(`Reusando ambiente existente: ${existingTenant.id}`);
102
+ log.dim('Nota: o OAuth client/secret já foi gerado na criação original.\n' +
103
+ ' Se precisar rotacionar, use o painel: https://core.neetru.com/workspaces/' +
104
+ existingTenant.id);
105
+ if (opts.bindConfig && existingTenant.id) {
106
+ await bindTenantToConfig(existingTenant.id);
107
+ }
108
+ return;
109
+ }
110
+ // choice === 'new': prossegue criando normalmente abaixo
111
+ }
112
+ else {
113
+ // Terminal não-interativo sem --json: bloqueia com instrução clara.
114
+ log.error(`Já existe ambiente ativo '${label}' para produto=${product} env=${env}.\n` +
115
+ ' Use --force-duplicate para criar um segundo ambiente (raro — verifique se é isso que quer).\n' +
116
+ ` Para reusar o existente, use o id: ${existingTenant.id}`);
117
+ process.exit(1);
118
+ }
119
+ }
120
+ }
35
121
  const tier = opts.tier ??
36
122
  (await promptChoice('Tier:', [
37
123
  { name: 'standard', value: 'standard' },
@@ -52,12 +138,27 @@ export async function runWorkspacesCreate(opts) {
52
138
  environmentId: env,
53
139
  resourceTier: tier,
54
140
  name: opts.name,
141
+ forceDuplicate: opts.forceDuplicate,
55
142
  },
56
143
  });
57
144
  spinner?.stop();
58
145
  }
59
146
  catch (error) {
60
147
  spinner?.fail('Falha ao criar workspace.');
148
+ // Bug #40: humaniza o erro "Nenhum customer ativo".
149
+ if (error instanceof Error &&
150
+ /nenhum customer ativo/i.test(error.message)) {
151
+ if (opts.json) {
152
+ console.log(JSON.stringify({
153
+ ok: false,
154
+ error: 'no_active_customer',
155
+ message: humanizeWorkspaceCreateError(error.message),
156
+ }));
157
+ process.exit(1);
158
+ }
159
+ log.error(humanizeWorkspaceCreateError(error.message));
160
+ process.exit(1);
161
+ }
61
162
  handleApiError(error, opts.json);
62
163
  }
63
164
  if (opts.json) {
@@ -69,6 +170,35 @@ export async function runWorkspacesCreate(opts) {
69
170
  log.warn('OAuth client secret (one-time — guarde agora):');
70
171
  console.log(` clientId: ${chalk.cyan(res.oauthClientId)}`);
71
172
  console.log(` secret: ${chalk.yellow(res.oauthClientSecret)}`);
173
+ // gestovendas #8 fix: --bind-config grava tenantId no neetru.config.json.
174
+ if (opts.bindConfig) {
175
+ await bindTenantToConfig(res.tenantId ?? res.id);
176
+ }
177
+ }
178
+ /**
179
+ * Grava `tenantId` no neetru.config.json (ou .neetru.json) do cwd.
180
+ * Não sobrescreve outros campos — faz merge shallow.
181
+ */
182
+ async function bindTenantToConfig(tenantId) {
183
+ for (const fname of ['neetru.config.json', '.neetru.json']) {
184
+ const filePath = path.resolve(process.cwd(), fname);
185
+ try {
186
+ const raw = await fs.readFile(filePath, 'utf8');
187
+ const parsed = JSON.parse(raw);
188
+ parsed['tenantId'] = tenantId;
189
+ await fs.writeFile(filePath, JSON.stringify(parsed, null, 2) + '\n', 'utf8');
190
+ log.success(`tenantId gravado em ${fname}`);
191
+ return;
192
+ }
193
+ catch (e) {
194
+ if (e.code !== 'ENOENT') {
195
+ log.warn(`Não foi possível atualizar ${fname}: ${e.message}`);
196
+ return;
197
+ }
198
+ }
199
+ }
200
+ log.warn(`neetru.config.json não encontrado no diretório atual.\n` +
201
+ ` Grave manualmente: "tenantId": "${tenantId}"`);
72
202
  }
73
203
  export async function runWorkspacesAdvance(id, opts) {
74
204
  const token = await requireToken(opts.json);
@@ -211,27 +341,11 @@ export function buildWorkspaceDashboardUrl(id) {
211
341
  }
212
342
  /**
213
343
  * Abre uma URL no browser default do OS. Não bloqueia o processo.
214
- * Em caso de erro, loga warn o caller pode copiar a URL printada.
344
+ * HIGH-2: delega pra safeOpenUrl que valida protocolo http(s) e usa
345
+ * shell:false — evita injeção via URLs config-derived no Windows.
215
346
  */
216
347
  export function openBrowser(url) {
217
- try {
218
- if (process.platform === 'win32') {
219
- spawn('cmd', ['/c', 'start', '""', url], {
220
- detached: true,
221
- stdio: 'ignore',
222
- windowsHide: true,
223
- }).unref();
224
- return;
225
- }
226
- if (process.platform === 'darwin') {
227
- spawn('open', [url], { detached: true, stdio: 'ignore' }).unref();
228
- return;
229
- }
230
- spawn('xdg-open', [url], { detached: true, stdio: 'ignore' }).unref();
231
- }
232
- catch (e) {
233
- log.warn(`Não consegui abrir browser. Acesse manualmente: ${url}`);
234
- }
348
+ safeOpenUrl(url);
235
349
  }
236
350
  export async function runWorkspacesOpen(id, opts = {}) {
237
351
  let workspaceId = id;
@@ -1 +1 @@
1
- {"version":3,"file":"workspaces.js","sourceRoot":"","sources":["../../src/commands/workspaces.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AACH,OAAO,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAC3C,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,GAAG,MAAM,KAAK,CAAC;AACtB,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAClD,OAAO,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAC1C,OAAO,EAAE,YAAY,EAAE,cAAc,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AACrF,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAC7D,OAAO,EACL,aAAa,EACb,eAAe,EACf,aAAa,EACb,aAAa,EACb,YAAY,EACZ,UAAU,EACV,eAAe,GAChB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,GAAG,EAAE,MAAM,oBAAoB,CAAC;AAWzC,MAAM,CAAC,KAAK,UAAU,mBAAmB,CACvC,IAA6B;IAE7B,MAAM,KAAK,GAAG,MAAM,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC5C,MAAM,OAAO,GAAG,MAAM,aAAa,CAAC,KAAK,EAAE;QACzC,QAAQ,EAAE,IAAI,CAAC,OAAO;QACtB,IAAI,EAAE,IAAI,CAAC,IAAI;QACf,OAAO,EAAE,uBAAuB;KACjC,CAAC,CAAC;IACH,MAAM,QAAQ,GAAG,MAAM,eAAe,CAAC,EAAE,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;IACrF,MAAM,GAAG,GACP,IAAI,CAAC,GAAG;QACR,CAAC,MAAM,YAAY,CACjB,WAAW,EACX;YACE,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE;YAC7B,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,SAAS,EAAE;YACrC,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE;SAChC,EACD,EAAE,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,CACpC,CAAC,CAAC;IACL,MAAM,IAAI,GACR,IAAI,CAAC,IAAI;QACT,CAAC,MAAM,YAAY,CACjB,OAAO,EACP;YACE,EAAE,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,UAAU,EAAE;YACvC,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE;YAC7B,EAAE,IAAI,EAAE,YAAY,EAAE,KAAK,EAAE,YAAY,EAAE;SAC5C,EACD,EAAE,OAAO,EAAE,UAAU,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,CACzC,CAAC,CAAC;IACL,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI;QACvB,CAAC,CAAC,IAAI;QACN,CAAC,CAAC,GAAG,CAAC,EAAE,IAAI,EAAE,oBAAoB,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC,KAAK,EAAE,CAAC;IAC/D,IAAI,GAQH,CAAC;IACF,IAAI,CAAC;QACH,GAAG,GAAG,MAAM,UAAU,CAAC,wBAAwB,EAAE;YAC/C,MAAM,EAAE,MAAM;YACd,KAAK;YACL,IAAI,EAAE;gBACJ,SAAS,EAAE,OAAO;gBAClB,UAAU,EAAE,QAAQ;gBACpB,aAAa,EAAE,GAAG;gBAClB,YAAY,EAAE,IAAI;gBAClB,IAAI,EAAE,IAAI,CAAC,IAAI;aAChB;SACF,CAAC,CAAC;QACH,OAAO,EAAE,IAAI,EAAE,CAAC;IAClB,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,EAAE,IAAI,CAAC,2BAA2B,CAAC,CAAC;QAC3C,cAAc,CAAC,KAAK,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;IACnC,CAAC;IACD,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;QACd,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC;QACjC,OAAO;IACT,CAAC;IACD,GAAG,CAAC,OAAO,CAAC,qBAAqB,GAAG,CAAC,EAAE,EAAE,CAAC,CAAC;IAC3C,GAAG,CAAC,GAAG,CAAC,YAAY,GAAG,CAAC,eAAe,cAAc,GAAG,CAAC,MAAM,EAAE,CAAC,CAAC;IACnE,GAAG,CAAC,IAAI,CAAC,gDAAgD,CAAC,CAAC;IAC3D,OAAO,CAAC,GAAG,CAAC,eAAe,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,aAAa,CAAC,EAAE,CAAC,CAAC;IAC5D,OAAO,CAAC,GAAG,CAAC,eAAe,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,iBAAiB,CAAC,EAAE,CAAC,CAAC;AACpE,CAAC;AAQD,MAAM,CAAC,KAAK,UAAU,oBAAoB,CACxC,EAAsB,EACtB,IAA8B;IAE9B,MAAM,KAAK,GAAG,MAAM,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC5C,MAAM,WAAW,GAAG,MAAM,aAAa,CAAC,KAAK,EAAE;QAC7C,QAAQ,EAAE,EAAE;QACZ,IAAI,EAAE,IAAI,CAAC,IAAI;QACf,OAAO,EAAE,uBAAuB;KACjC,CAAC,CAAC;IACH,MAAM,OAAO,GAAG,MAAM,eAAe,CAAC,KAAK,EAAE;QAC3C,QAAQ,EAAE,IAAI,CAAC,OAAO;QACtB,IAAI,EAAE,IAAI,CAAC,IAAI;QACf,OAAO,EAAE,oBAAoB;KAC9B,CAAC,CAAC;IACH,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,IAAI,CAAC,MAAM,UAAU,CAAC,mBAAmB,EAAE,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;IAC7F,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI;QACvB,CAAC,CAAC,IAAI;QACN,CAAC,CAAC,GAAG,CAAC,EAAE,IAAI,EAAE,cAAc,OAAO,IAAI,OAAO,iBAAiB,WAAW,GAAG,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC,KAAK,EAAE,CAAC;IAC1G,IAAI,GAMH,CAAC;IACF,IAAI,CAAC;QACH,GAAG,GAAG,MAAM,UAAU,CACpB,0BAA0B,kBAAkB,CAAC,WAAW,CAAC,UAAU,EACnE;YACE,MAAM,EAAE,MAAM;YACd,KAAK;YACL,IAAI,EAAE,EAAE,WAAW,EAAE,OAAO,EAAE,OAAO,EAAE;SACxC,CACF,CAAC;QACF,OAAO,EAAE,IAAI,EAAE,CAAC;IAClB,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,EAAE,IAAI,CAAC,6BAA6B,CAAC,CAAC;QAC7C,cAAc,CAAC,KAAK,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;IACnC,CAAC;IACD,gBAAgB,CACd,EAAE,QAAQ,EAAE,GAAG,CAAC,QAAQ,EAAE,OAAO,EAAE,GAAG,CAAC,OAAO,EAAE,aAAa,EAAE,GAAG,CAAC,aAAa,EAAE,EAClF,aAAa,GAAG,CAAC,QAAQ,MAAM,GAAG,CAAC,OAAO,KAAK,GAAG,CAAC,aAAa,GAAG,EACnE,IAAI,CAAC,IAAI,CACV,CAAC;AACJ,CAAC;AA+BD,SAAS,WAAW,CAAC,CAA4B;IAC/C,IAAI,CAAC,CAAC;QAAE,OAAO,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IAC9B,IAAI,CAAC,KAAK,QAAQ,IAAI,CAAC,KAAK,OAAO,IAAI,CAAC,KAAK,SAAS;QAAE,OAAO,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IAC9E,IAAI,CAAC,KAAK,QAAQ,IAAI,CAAC,KAAK,WAAW;QAAE,OAAO,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;IAChE,IAAI,CAAC,KAAK,cAAc,IAAI,CAAC,KAAK,SAAS;QAAE,OAAO,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClE,IAAI,CAAC,KAAK,QAAQ,IAAI,CAAC,KAAK,OAAO;QAAE,OAAO,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;IACzD,OAAO,CAAC,CAAC;AACX,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,iBAAiB,CACrC,IAA2B;IAE3B,MAAM,KAAK,GAAG,MAAM,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAE5C,MAAM,MAAM,GAAG,IAAI,eAAe,EAAE,CAAC;IACrC,IAAI,IAAI,CAAC,OAAO;QAAE,MAAM,CAAC,GAAG,CAAC,SAAS,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;IACtD,IAAI,IAAI,CAAC,MAAM;QAAE,MAAM,CAAC,GAAG,CAAC,QAAQ,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;IACnD,MAAM,EAAE,GAAG,MAAM,CAAC,QAAQ,EAAE,CAAC;IAE7B,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI;QACvB,CAAC,CAAC,IAAI;QACN,CAAC,CAAC,GAAG,CAAC,EAAE,IAAI,EAAE,sBAAsB,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC,KAAK,EAAE,CAAC;IACjE,IAAI,GAA2B,CAAC;IAChC,IAAI,IAAoB,CAAC;IACzB,IAAI,CAAC;QACH,GAAG,GAAG,MAAM,UAAU,CACpB,sBAAsB,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,EAC1C,EAAE,KAAK,EAAE,CACV,CAAC;QACF,IAAI,GAAG,GAAG,CAAC,UAAU,IAAI,GAAG,CAAC,OAAO,IAAI,EAAE,CAAC;QAC3C,IAAI,IAAI,CAAC,GAAG,EAAE,CAAC;YACb,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,aAAa,CAAC,KAAK,IAAI,CAAC,GAAG,CAAC,CAAC;QACrE,CAAC;QACD,OAAO,EAAE,IAAI,EAAE,CAAC;IAClB,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,EAAE,IAAI,CAAC,6BAA6B,CAAC,CAAC;QAC7C,cAAc,CAAC,KAAK,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;IACnC,CAAC;IAED,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;QACd,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,KAAK,EAAE,IAAI,CAAC,MAAM,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;QAClF,OAAO;IACT,CAAC;IAED,GAAG,CAAC,OAAO,CAAC,eAAe,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC;IAC3C,WAAW,CACT;QACE,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,WAAW,IAAI,GAAG,EAAE,QAAQ,EAAE,EAAE,EAAE;QAC1E,EAAE,MAAM,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,WAAW,IAAI,CAAC,CAAC,SAAS,IAAI,GAAG,EAAE,QAAQ,EAAE,EAAE,EAAE;QACtF,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,aAAa,IAAI,GAAG,EAAE,QAAQ,EAAE,EAAE,EAAE;QAC9E,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,YAAY,IAAI,GAAG,EAAE,QAAQ,EAAE,EAAE,EAAE;QAC/E,EAAE,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,WAAW,CAAC,CAAC,CAAC,MAAM,CAAC,EAAE,QAAQ,EAAE,EAAE,EAAE;QACvE,EAAE,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,YAAY,CAAC,CAAC,CAAC,SAAS,CAAC,EAAE;KAC9D,EACD,IAAI,CACL,CAAC;IACF,OAAO,CAAC,GAAG,EAAE,CAAC;AAChB,CAAC;AAkCD,MAAM,CAAC,KAAK,UAAU,gBAAgB,CACpC,EAAsB,EACtB,IAA0B;IAE1B,MAAM,KAAK,GAAG,MAAM,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC5C,MAAM,WAAW,GAAG,MAAM,aAAa,CAAC,KAAK,EAAE;QAC7C,QAAQ,EAAE,EAAE;QACZ,IAAI,EAAE,IAAI,CAAC,IAAI;QACf,OAAO,EAAE,YAAY;KACtB,CAAC,CAAC;IACH,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI;QACvB,CAAC,CAAC,IAAI;QACN,CAAC,CAAC,GAAG,CAAC,EAAE,IAAI,EAAE,sBAAsB,WAAW,GAAG,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC,KAAK,EAAE,CAAC;IAC/E,IAAI,GAA4B,CAAC;IACjC,IAAI,CAAC;QACH,GAAG,GAAG,MAAM,UAAU,CACpB,uBAAuB,kBAAkB,CAAC,WAAW,CAAC,EAAE,EACxD,EAAE,KAAK,EAAE,CACV,CAAC;QACF,OAAO,EAAE,IAAI,EAAE,CAAC;IAClB,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,EAAE,IAAI,CAAC,4BAA4B,CAAC,CAAC;QAC5C,cAAc,CAAC,KAAK,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;IACnC,CAAC;IAED,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;QACd,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC;QACjC,OAAO;IACT,CAAC;IAED,MAAM,CAAC,GAAG,GAAG,CAAC,SAAS,IAAI,GAAG,CAAC,MAAM,IAAK,EAAsB,CAAC;IACjE,MAAM,SAAS,GAAG,CAAC,CAAC,CAAC,SAAS,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,GAAG,IAAI,GAAG,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IAChF,MAAM,OAAO,GAAG,CAAC,CAAC,CAAC,aAAa,EAAE,CAAC,CAAC,eAAe,CAAC,CAAC,MAAM,CAAC,OAAO,CAAa,CAAC;IAEjF,GAAG,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,WAAW,IAAI,WAAW,EAAE,CAAC,CAAC;IACjE,WAAW,CACT;QACE,EAAE,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,EAAE,EAAE;QACpD,EAAE,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,EAAE,EAAE;KACrD,EACD;QACE,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,WAAW,IAAI,WAAW,EAAE;QACpD,EAAE,CAAC,EAAE,SAAS,EAAE,CAAC,EAAE,CAAC,CAAC,WAAW,IAAI,CAAC,CAAC,SAAS,IAAI,GAAG,EAAE;QACxD,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,aAAa,IAAI,GAAG,EAAE;QAChD,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,YAAY,IAAI,GAAG,EAAE;QACjD,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC,EAAE,WAAW,CAAC,CAAC,CAAC,MAAM,CAAC,EAAE;QACzC,EAAE,CAAC,EAAE,UAAU,EAAE,CAAC,EAAE,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE;QACnE,EAAE,CAAC,EAAE,WAAW,EAAE,CAAC,EAAE,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE;QACxE,EAAE,CAAC,EAAE,gBAAgB,EAAE,CAAC,EAAE,YAAY,CAAC,CAAC,CAAC,cAAc,CAAC,EAAE;QAC1D,EAAE,CAAC,EAAE,cAAc,EAAE,CAAC,EAAE,CAAC,CAAC,YAAY,IAAI,GAAG,EAAE;QAC/C,EAAE,CAAC,EAAE,eAAe,EAAE,CAAC,EAAE,CAAC,CAAC,aAAa,IAAI,GAAG,EAAE;QACjD;YACE,CAAC,EAAE,SAAS;YACZ,CAAC,EACC,CAAC,CAAC,WAAW,IAAI,CAAC,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC;gBACvC,CAAC,CAAC,GAAG,CAAC,CAAC,WAAW,CAAC,MAAM,YAAY,CAAC,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,KAAK,CAAC,GAAG,CAAC,kCAAkC,CAAC,EAAE;gBAChH,CAAC,CAAC,GAAG;SACV;QACD,EAAE,CAAC,EAAE,WAAW,EAAE,CAAC,EAAE,YAAY,CAAC,CAAC,CAAC,SAAS,CAAC,EAAE;KACjD,CACF,CAAC;IACF,OAAO,CAAC,GAAG,EAAE,CAAC;AAChB,CAAC;AASD,MAAM,UAAU,0BAA0B,CAAC,EAAU;IACnD,MAAM,OAAO,GAAG,MAAM,CACpB,MAAM,CAAC,GAAG,CAAC,eAAe,CAAC,IAAI,yBAAyB,CACzD,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;IACtB,OAAO,GAAG,OAAO,eAAe,kBAAkB,CAAC,EAAE,CAAC,EAAE,CAAC;AAC3D,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,WAAW,CAAC,GAAW;IACrC,IAAI,CAAC;QACH,IAAI,OAAO,CAAC,QAAQ,KAAK,OAAO,EAAE,CAAC;YACjC,KAAK,CAAC,KAAK,EAAE,CAAC,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,GAAG,CAAC,EAAE;gBACvC,QAAQ,EAAE,IAAI;gBACd,KAAK,EAAE,QAAQ;gBACf,WAAW,EAAE,IAAI;aAClB,CAAC,CAAC,KAAK,EAAE,CAAC;YACX,OAAO;QACT,CAAC;QACD,IAAI,OAAO,CAAC,QAAQ,KAAK,QAAQ,EAAE,CAAC;YAClC,KAAK,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,CAAC,KAAK,EAAE,CAAC;YAClE,OAAO;QACT,CAAC;QACD,KAAK,CAAC,UAAU,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,CAAC,KAAK,EAAE,CAAC;IACxE,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACX,GAAG,CAAC,IAAI,CAAC,mDAAmD,GAAG,EAAE,CAAC,CAAC;IACrE,CAAC;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,iBAAiB,CACrC,EAAsB,EACtB,OAA8B,EAAE;IAEhC,IAAI,WAAW,GAAG,EAAE,CAAC;IACrB,IAAI,CAAC,WAAW,EAAE,CAAC;QACjB,IAAI,CAAC,aAAa,EAAE,EAAE,CAAC;YACrB,GAAG,CAAC,KAAK,CAAC,2CAA2C,CAAC,CAAC;YACvD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QACD,MAAM,KAAK,GAAG,MAAM,YAAY,CAAC,KAAK,CAAC,CAAC;QACxC,WAAW,GAAG,MAAM,aAAa,CAAC,KAAK,EAAE,EAAE,OAAO,EAAE,uBAAuB,EAAE,CAAC,CAAC;IACjF,CAAC;IACD,MAAM,GAAG,GAAG,0BAA0B,CAAC,WAAW,CAAC,CAAC;IACpD,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,WAAW,GAAG,GAAG,CAAC,CAAC,CAAC;IAC1C,IAAI,CAAC,IAAI,CAAC,SAAS;QAAE,WAAW,CAAC,GAAG,CAAC,CAAC;AACxC,CAAC"}
1
+ {"version":3,"file":"workspaces.js","sourceRoot":"","sources":["../../src/commands/workspaces.ts"],"names":[],"mappings":"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"}
package/dist/index.js CHANGED
@@ -2,6 +2,16 @@
2
2
  import { Command } from 'commander';
3
3
  import { log } from './utils/logger.js';
4
4
  import { CLI_VERSION } from './version.js';
5
+ // pdv #6 fix: fecha stdin antes de qualquer process.exit() para evitar a
6
+ // asserção libuv "!(handle->flags & UV_HANDLE_CLOSING)" no Windows.
7
+ // stdin fica aberto como handle libuv quando inquirer/ora o pegam; destruir
8
+ // antes do exit garante que o loop de eventos drene limpo.
9
+ process.on('exit', () => {
10
+ try {
11
+ process.stdin.destroy();
12
+ }
13
+ catch { /* silencioso — handle pode já estar fechado */ }
14
+ });
5
15
  const program = new Command();
6
16
  program
7
17
  .name('neetru')
@@ -239,6 +249,47 @@ program
239
249
  const { runSurfaceStatus } = await import('./commands/surface-status.js');
240
250
  await runSurfaceStatus({ clientId: opts.clientId, json: !!opts.json });
241
251
  });
252
+ // ── neetru customers ──────────────────────────────────────────────────
253
+ // pdv #2 fix: operadores podem criar customers pelo CLI sem abrir o painel.
254
+ // Customer = empresa/PJ que paga (CRM comercial).
255
+ // Tenant = instância do produto para esse customer.
256
+ const customersCmd = program
257
+ .command('customers')
258
+ .description('Gerenciar customers (empresa/PJ que paga o serviço Neetru)');
259
+ customersCmd
260
+ .command('list')
261
+ .description('Listar customers')
262
+ .option('--status <status>', 'ativo | em prospecção | suspenso | arquivado')
263
+ .option('--search <texto>', 'busca por nome, email ou CNPJ')
264
+ .option('--json', 'saída em JSON')
265
+ .action(async (opts) => {
266
+ const { runCustomersList } = await import('./commands/customers.js');
267
+ await runCustomersList({ status: opts.status, search: opts.search, json: !!opts.json });
268
+ });
269
+ customersCmd
270
+ .command('get <id>')
271
+ .description('Mostrar detalhes de um customer')
272
+ .option('--json', 'saída em JSON')
273
+ .action(async (id, opts) => {
274
+ const { runCustomersGet } = await import('./commands/customers.js');
275
+ await runCustomersGet(id, { json: !!opts.json });
276
+ });
277
+ customersCmd
278
+ .command('create')
279
+ .description('Criar customer (empresa/PJ) — necessário antes de criar workspace')
280
+ .option('--name <nome>', 'nome do customer (razão social ou nome comercial)')
281
+ .option('--email <email>', 'email de contato')
282
+ .option('--tax-id <cnpj>', 'CNPJ ou CPF (opcional)')
283
+ .option('--json', 'saída em JSON')
284
+ .action(async (opts) => {
285
+ const { runCustomersCreate } = await import('./commands/customers.js');
286
+ await runCustomersCreate({
287
+ name: opts.name,
288
+ email: opts.email,
289
+ taxId: opts.taxId,
290
+ json: !!opts.json,
291
+ });
292
+ });
242
293
  // ── neetru tenants ────────────────────────────────────────────────────
243
294
  const tenantsCmd = program
244
295
  .command('tenants')
@@ -269,7 +320,10 @@ tenantsCmd
269
320
  });
270
321
  tenantsCmd
271
322
  .command('create')
272
- .description('Criar tenant (status inicial: em provisionamento)')
323
+ .description('[STAFF-ONLY] Criar tenant sem OAuth client/secret.\n' +
324
+ 'DEPRECATED: para uso normal (ambiente completo com OAuth), use:\n' +
325
+ ' neetru workspaces create\n' +
326
+ 'Este comando permanece para casos staff-only (registro de tenant pré-existente).')
273
327
  .option('--name <name>', 'nome do tenant')
274
328
  .option('--slug <slug>', 'slug do tenant')
275
329
  .option('--customer <customerId>', 'id do customer')
@@ -450,6 +504,8 @@ workspacesCmd
450
504
  .option('--env <env>', 'dev | staging | prod (default: dev)')
451
505
  .option('--tier <tier>', 'dev | standard | enterprise (default: standard)')
452
506
  .option('--name <name>', 'label do workspace')
507
+ .option('--bind-config', 'grava tenantId retornado no neetru.config.json do cwd')
508
+ .option('--force-duplicate', 'cria mesmo que já exista ambiente ativo para produto+env')
453
509
  .option('--json', 'saída em JSON')
454
510
  .action(async (opts) => {
455
511
  const { runWorkspacesCreate } = await import('./commands/workspaces.js');
@@ -459,6 +515,8 @@ workspacesCmd
459
515
  env: opts.env,
460
516
  tier: opts.tier,
461
517
  name: opts.name,
518
+ bindConfig: !!opts.bindConfig,
519
+ forceDuplicate: !!opts.forceDuplicate,
462
520
  json: !!opts.json,
463
521
  });
464
522
  });
@@ -811,6 +869,15 @@ adminDatabaseCmd
811
869
  const { runDbGet } = await import('./commands/products-db.js');
812
870
  await runDbGet(id, { json: !!opts.json });
813
871
  });
872
+ // gestovendas #12 fix: alias `status` → `get` (skill /neetru documenta como `status`).
873
+ adminDatabaseCmd
874
+ .command('status [id]')
875
+ .description('[Staff] Alias de `get` — mostrar detalhes e status de um banco')
876
+ .option('--json')
877
+ .action(async (id, opts) => {
878
+ const { runDbGet } = await import('./commands/products-db.js');
879
+ await runDbGet(id, { json: !!opts.json });
880
+ });
814
881
  // D-2: `set-status` é ESCRITA explícita. `status` era ambíguo com o READ em `neetru db status`.
815
882
  adminDatabaseCmd
816
883
  .command('set-status [id] [status]')
@@ -855,16 +922,27 @@ const productsDbCmd = productsCmd
855
922
  process.stderr.write('\nAviso: `neetru products db` foi renomeado para `neetru admin database`.\n' +
856
923
  'Por favor, atualize seus scripts. Este alias será removido em breve.\n\n');
857
924
  });
925
+ // gestovendas #2 / pdv #5 fix: alias `list` aceita --product (slug legado) OU
926
+ // --product-id (novo). Se slug recebido, passa como productId para o Core.
927
+ // O Core tenta resolver slug → id server-side (fallback); se o Core não suportar,
928
+ // o operador vê mensagem específica do servidor e não um erro de sintaxe.
858
929
  productsDbCmd
859
930
  .command('list')
860
931
  .description('[RENOMEADO — use: neetru admin database list]')
861
- .option('--product-id <id>')
932
+ .option('--product-id <id>', 'ID do produto (novo)')
933
+ .option('--product <slugOrId>', 'slug ou ID do produto (legado — use --product-id)')
862
934
  .option('--engine <engine>')
863
935
  .option('--status <status>')
864
936
  .option('--json')
865
937
  .action(async (opts) => {
938
+ // Tradução de flag: --product (legado) → productId (novo).
939
+ const productId = opts.productId ?? opts.product;
940
+ if (opts.product && !opts.productId) {
941
+ process.stderr.write(`[DEPRECATED] Use --product-id em vez de --product.\n` +
942
+ ` Próxima major remove o suporte a --product neste alias.\n`);
943
+ }
866
944
  const { runDbList } = await import('./commands/products-db.js');
867
- await runDbList({ productId: opts.productId, engine: opts.engine, status: opts.status, json: !!opts.json });
945
+ await runDbList({ productId, engine: opts.engine, status: opts.status, json: !!opts.json });
868
946
  });
869
947
  productsDbCmd
870
948
  .command('engines')
@@ -1025,6 +1103,74 @@ program
1025
1103
  ctaLabel: opts.ctaLabel,
1026
1104
  });
1027
1105
  });
1106
+ // ── neetru marketplace ────────────────────────────────────────────────
1107
+ const marketplaceCmd = program
1108
+ .command('marketplace')
1109
+ .description('Central de artefatos do ecossistema Neetru (skills, SDK, templates)');
1110
+ const marketplaceSkillsCmd = marketplaceCmd
1111
+ .command('skills')
1112
+ .description('Gerenciar Skills do Claude Code');
1113
+ marketplaceSkillsCmd
1114
+ .command('install')
1115
+ .description('Clonar neetru-libs e instalar skills em ~/.claude/skills/')
1116
+ .action(async () => {
1117
+ const { runSkillsInstall } = await import('./commands/marketplace.js');
1118
+ await runSkillsInstall();
1119
+ });
1120
+ marketplaceSkillsCmd
1121
+ .command('update')
1122
+ .description('Atualizar cache neetru-libs (git pull) e re-copiar skills instaladas')
1123
+ .action(async () => {
1124
+ const { runSkillsUpdate } = await import('./commands/marketplace.js');
1125
+ await runSkillsUpdate();
1126
+ });
1127
+ marketplaceSkillsCmd
1128
+ .command('list')
1129
+ .description('Listar skills disponíveis no cache local')
1130
+ .action(async () => {
1131
+ const { runSkillsList } = await import('./commands/marketplace.js');
1132
+ await runSkillsList();
1133
+ });
1134
+ marketplaceSkillsCmd
1135
+ .command('uninstall')
1136
+ .description('Remover skills de ~/.claude/skills/ (pede confirmação)')
1137
+ .option('--yes', 'pular confirmação interativa')
1138
+ .action(async (opts) => {
1139
+ const { runSkillsUninstall } = await import('./commands/marketplace.js');
1140
+ await runSkillsUninstall({ yes: !!opts.yes });
1141
+ });
1142
+ const marketplaceSdkCmd = marketplaceCmd
1143
+ .command('sdk')
1144
+ .description('Gerenciar @neetru/sdk no projeto atual');
1145
+ marketplaceSdkCmd
1146
+ .command('init')
1147
+ .description('Adicionar @neetru/sdk ao package.json e criar src/neetru.ts')
1148
+ .action(async () => {
1149
+ const { runSdkInit } = await import('./commands/marketplace.js');
1150
+ await runSdkInit();
1151
+ });
1152
+ marketplaceSdkCmd
1153
+ .command('templates')
1154
+ .description('Listar templates de feature disponíveis (auth, billing, usage…)')
1155
+ .action(async () => {
1156
+ const { runSdkTemplates } = await import('./commands/marketplace.js');
1157
+ await runSdkTemplates();
1158
+ });
1159
+ marketplaceSdkCmd
1160
+ .command('add <template>')
1161
+ .description('Copiar template de feature pra src/ do projeto atual')
1162
+ .option('--force', 'sobrescrever arquivos existentes')
1163
+ .action(async (template, opts) => {
1164
+ const { runSdkAddTemplate } = await import('./commands/marketplace.js');
1165
+ await runSdkAddTemplate(template, { force: !!opts.force });
1166
+ });
1167
+ marketplaceCmd
1168
+ .command('browse')
1169
+ .description('Abrir https://github.com/Neetru/neetru-libs no browser')
1170
+ .action(async () => {
1171
+ const { runMarketplaceBrowse } = await import('./commands/marketplace.js');
1172
+ await runMarketplaceBrowse();
1173
+ });
1028
1174
  // ── neetru add ────────────────────────────────────────────────────────
1029
1175
  program
1030
1176
  .command('add <feature>')
@@ -1124,6 +1270,7 @@ dbCmd
1124
1270
  .option('--env <env>', 'ambiente: dev-local (padrão) | staging | production')
1125
1271
  .option('--product-id <id>', 'override do productId (default: slug do neetru.config.json)')
1126
1272
  .option('-y, --yes', 'modo não-interativo (usa defaults)')
1273
+ .option('--json', 'saída em JSON estruturado')
1127
1274
  .action(async (opts) => {
1128
1275
  const { runDbInit } = await import('./commands/db.js');
1129
1276
  await runDbInit({
@@ -1132,6 +1279,7 @@ dbCmd
1132
1279
  env: opts.env,
1133
1280
  productId: opts.productId,
1134
1281
  yes: !!opts.yes,
1282
+ json: !!opts.json,
1135
1283
  });
1136
1284
  });
1137
1285
  // ── neetru db apply ───────────────────────────────────────────────────
@@ -1144,6 +1292,7 @@ dbCmd
1144
1292
  .option('--schema <path>', 'caminho do schema (default: db/schema.ts)')
1145
1293
  .option('--dry-run', 'calcula o diff mas NÃO envia ao Core')
1146
1294
  .option('-y, --yes', 'pula a confirmação interativa')
1295
+ .option('--json', 'saída em JSON estruturado')
1147
1296
  .action(async (opts) => {
1148
1297
  const { runDbApply } = await import('./commands/db.js');
1149
1298
  await runDbApply({
@@ -1152,6 +1301,7 @@ dbCmd
1152
1301
  schemaPath: opts.schema,
1153
1302
  dryRun: !!opts.dryRun,
1154
1303
  yes: !!opts.yes,
1304
+ json: !!opts.json,
1155
1305
  });
1156
1306
  });
1157
1307
  // ── neetru db migrations ──────────────────────────────────────────────
@@ -1436,6 +1586,117 @@ supportTicketsCmd
1436
1586
  const { runSupportTicketsStatus } = await import('./commands/support.js');
1437
1587
  await runSupportTicketsStatus(id, { to: opts.to, json: !!opts.json });
1438
1588
  });
1589
+ // ── neetru bug ───────────────────────────────────────────────────────
1590
+ /**
1591
+ * neetru bug — bugs e ocorrências reportados pela CLI, agentes Claude e staff.
1592
+ *
1593
+ * Subcomandos:
1594
+ * report — reportar novo bug (interativo ou one-shot via flags)
1595
+ * list — listar bugs abertos (ou com filtros)
1596
+ * show <id> — detalhe completo
1597
+ * claim <id> — assumir investigação
1598
+ * resolve <id> — encerrar (resolved/wont_fix/duplicate)
1599
+ * comment <id> — adicionar comentário na thread
1600
+ *
1601
+ * Exemplo rápido (agentes Claude):
1602
+ * neetru bug report --title "X trava" --body "Stack trace…" --category cli --severity high --actor-type agent_claude --json
1603
+ * neetru bug list --status open --json
1604
+ */
1605
+ const bugCmd = program
1606
+ .command('bug')
1607
+ .description('Reportar, listar e resolver bugs e ocorrências da plataforma');
1608
+ bugCmd
1609
+ .command('report')
1610
+ .description('Reportar novo bug (interativo ou flags --title/--body para agentes)')
1611
+ .option('--title <text>', 'título curto do bug')
1612
+ .option('--body <text>', 'descrição detalhada')
1613
+ .option('--category <cat>', 'cli | sdk | core | agent | libs | docs | infra | other', 'other')
1614
+ .option('--severity <sev>', 'critical | high | medium | low', 'medium')
1615
+ .option('--product <id>', 'productId afetado (opcional)')
1616
+ .option('--steps <text>', 'passos para reproduzir (opcional)')
1617
+ .option('--expected <text>', 'comportamento esperado (opcional)')
1618
+ .option('--actual <text>', 'comportamento atual (opcional)')
1619
+ .option('--actor-type <type>', 'cli_principal | agent_claude | staff_session', 'cli_principal')
1620
+ .option('--json', 'saída em JSON (modo não-interativo)')
1621
+ .action(async (opts) => {
1622
+ const { runBugReport } = await import('./commands/bug.js');
1623
+ await runBugReport({
1624
+ title: opts.title,
1625
+ body: opts.body,
1626
+ category: opts.category,
1627
+ severity: opts.severity,
1628
+ product: opts.product,
1629
+ steps: opts.steps,
1630
+ expected: opts.expected,
1631
+ actual: opts.actual,
1632
+ actorType: opts.actorType,
1633
+ json: !!opts.json,
1634
+ });
1635
+ });
1636
+ bugCmd
1637
+ .command('list')
1638
+ .description('Listar bugs e ocorrências')
1639
+ .option('--status <s>', 'open | triaged | in_progress | resolved | wont_fix | duplicate')
1640
+ .option('--category <cat>', 'cli | sdk | core | agent | libs | docs | infra | other')
1641
+ .option('--assigned-to <uid>', 'filtrar por responsável (uid ou session id)')
1642
+ .option('--product <id>', 'filtrar por productId')
1643
+ .option('--limit <n>', 'máximo de resultados (default 20, max 200)')
1644
+ .option('--json', 'saída em JSON')
1645
+ .action(async (opts) => {
1646
+ const { runBugList } = await import('./commands/bug.js');
1647
+ await runBugList({
1648
+ status: opts.status,
1649
+ category: opts.category,
1650
+ assignedTo: opts.assignedTo,
1651
+ product: opts.product,
1652
+ limit: opts.limit,
1653
+ json: !!opts.json,
1654
+ });
1655
+ });
1656
+ bugCmd
1657
+ .command('show <id>')
1658
+ .description('Mostrar detalhe completo de um bug')
1659
+ .option('--json', 'saída em JSON')
1660
+ .action(async (id, opts) => {
1661
+ const { runBugShow } = await import('./commands/bug.js');
1662
+ await runBugShow(id, { json: !!opts.json });
1663
+ });
1664
+ bugCmd
1665
+ .command('claim <id>')
1666
+ .description('Assumir investigação de um bug')
1667
+ .option('--assigned-to <uid>', 'uid ou session id (default: caller)')
1668
+ .option('--json', 'saída em JSON')
1669
+ .action(async (id, opts) => {
1670
+ const { runBugClaim } = await import('./commands/bug.js');
1671
+ await runBugClaim(id, { assignedTo: opts.assignedTo, json: !!opts.json });
1672
+ });
1673
+ bugCmd
1674
+ .command('resolve <id>')
1675
+ .description('Encerrar um bug como resolvido, wont_fix ou duplicate')
1676
+ .option('--summary <text>', 'resumo do que foi feito / por que não corrigir')
1677
+ .option('--commit <sha>', 'commit SHA que corrige o bug (opcional)')
1678
+ .option('--status <s>', 'resolved | wont_fix | duplicate (default: resolved)', 'resolved')
1679
+ .option('--duplicate-of <id>', 'ID do bug original (obrigatório quando --status duplicate)')
1680
+ .option('--json', 'saída em JSON (modo não-interativo)')
1681
+ .action(async (id, opts) => {
1682
+ const { runBugResolve } = await import('./commands/bug.js');
1683
+ await runBugResolve(id, {
1684
+ summary: opts.summary,
1685
+ commit: opts.commit,
1686
+ status: opts.status,
1687
+ duplicateOf: opts.duplicateOf,
1688
+ json: !!opts.json,
1689
+ });
1690
+ });
1691
+ bugCmd
1692
+ .command('comment <id>')
1693
+ .description('Adicionar comentário na thread de um bug')
1694
+ .option('--body <text>', 'corpo do comentário')
1695
+ .option('--json', 'saída em JSON (modo não-interativo)')
1696
+ .action(async (id, opts) => {
1697
+ const { runBugComment } = await import('./commands/bug.js');
1698
+ await runBugComment(id, { body: opts.body, json: !!opts.json });
1699
+ });
1439
1700
  // ── neetru dns ───────────────────────────────────────────────────────
1440
1701
  const dnsCmd = program
1441
1702
  .command('dns')
@@ -1572,9 +1833,20 @@ drCmd
1572
1833
  // Frente B — docs em GCS + Firestore registry. Desacopla conteúdo de docs
1573
1834
  // do deploy do Core (owner edita markdown direto pelo bucket OU via CLI,
1574
1835
  // sem rebuild).
1836
+ //
1837
+ // `neetru docs open [topic]` abre documentação no browser. É o ponto de
1838
+ // entrada pra quem quer LER docs, não publicar.
1575
1839
  const docsCmd = program
1576
1840
  .command('docs')
1577
- .description('Gerenciar registry de docs publicados em gs://neetru-docs');
1841
+ .description('Documentação + registry de docs publicados em gs://neetru-docs');
1842
+ docsCmd
1843
+ .command('open [topic]')
1844
+ .description('Abrir documentação no browser (ex: sdk, cli, db, webhooks, auth)')
1845
+ .option('--json', 'saída em JSON (imprime URL sem abrir browser)')
1846
+ .action(async (topic, opts) => {
1847
+ const { runDocsOpen } = await import('./commands/docs.js');
1848
+ await runDocsOpen(topic, { json: !!opts.json });
1849
+ });
1578
1850
  docsCmd
1579
1851
  .command('publish <file>')
1580
1852
  .description('Publicar arquivo markdown (sobe pro GCS + registry Firestore)')