@neetru/cli 2.28.7 → 2.28.10

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 (108) hide show
  1. package/CHANGELOG.md +78 -0
  2. package/README.md +25 -1
  3. package/dist/commands/admin/oidc-login.d.ts +18 -0
  4. package/dist/commands/admin/oidc-login.js +68 -3
  5. package/dist/commands/admin/oidc-login.js.map +1 -1
  6. package/dist/commands/admin/sdk-credential.js +11 -6
  7. package/dist/commands/admin/sdk-credential.js.map +1 -1
  8. package/dist/commands/agent-release.d.ts +2 -0
  9. package/dist/commands/agent-release.js +41 -29
  10. package/dist/commands/agent-release.js.map +1 -1
  11. package/dist/commands/agent-write.d.ts +1 -0
  12. package/dist/commands/agent-write.js +4 -0
  13. package/dist/commands/agent-write.js.map +1 -1
  14. package/dist/commands/ai-models.js +9 -4
  15. package/dist/commands/ai-models.js.map +1 -1
  16. package/dist/commands/archive.js +9 -2
  17. package/dist/commands/archive.js.map +1 -1
  18. package/dist/commands/auth.js +17 -2
  19. package/dist/commands/auth.js.map +1 -1
  20. package/dist/commands/autocomplete.d.ts +1 -1
  21. package/dist/commands/autocomplete.js +2 -0
  22. package/dist/commands/autocomplete.js.map +1 -1
  23. package/dist/commands/chat-menu.js +20 -6
  24. package/dist/commands/chat-menu.js.map +1 -1
  25. package/dist/commands/chat.d.ts +14 -0
  26. package/dist/commands/chat.js +32 -4
  27. package/dist/commands/chat.js.map +1 -1
  28. package/dist/commands/config.js +7 -0
  29. package/dist/commands/config.js.map +1 -1
  30. package/dist/commands/db-move.d.ts +204 -0
  31. package/dist/commands/db-move.js +890 -0
  32. package/dist/commands/db-move.js.map +1 -0
  33. package/dist/commands/db.d.ts +14 -3
  34. package/dist/commands/db.js +102 -67
  35. package/dist/commands/db.js.map +1 -1
  36. package/dist/commands/deploy.d.ts +15 -0
  37. package/dist/commands/deploy.js +42 -1
  38. package/dist/commands/deploy.js.map +1 -1
  39. package/dist/commands/dev-up.d.ts +5 -0
  40. package/dist/commands/dev-up.js +29 -4
  41. package/dist/commands/dev-up.js.map +1 -1
  42. package/dist/commands/doctor.js +12 -6
  43. package/dist/commands/doctor.js.map +1 -1
  44. package/dist/commands/domains.js +48 -36
  45. package/dist/commands/domains.js.map +1 -1
  46. package/dist/commands/init.d.ts +0 -8
  47. package/dist/commands/init.js +14 -3
  48. package/dist/commands/init.js.map +1 -1
  49. package/dist/commands/logs.js +18 -21
  50. package/dist/commands/logs.js.map +1 -1
  51. package/dist/commands/mobile.d.ts +26 -0
  52. package/dist/commands/mobile.js +344 -0
  53. package/dist/commands/mobile.js.map +1 -0
  54. package/dist/commands/ops.d.ts +20 -0
  55. package/dist/commands/ops.js +70 -17
  56. package/dist/commands/ops.js.map +1 -1
  57. package/dist/commands/products-db.d.ts +1 -0
  58. package/dist/commands/products-db.js +15 -15
  59. package/dist/commands/products-db.js.map +1 -1
  60. package/dist/commands/promote.js +13 -32
  61. package/dist/commands/promote.js.map +1 -1
  62. package/dist/commands/schema.d.ts +4 -0
  63. package/dist/commands/schema.js +25 -16
  64. package/dist/commands/schema.js.map +1 -1
  65. package/dist/commands/servers.d.ts +2 -3
  66. package/dist/commands/servers.js +4 -7
  67. package/dist/commands/servers.js.map +1 -1
  68. package/dist/commands/smoke.d.ts +123 -0
  69. package/dist/commands/smoke.js +529 -0
  70. package/dist/commands/smoke.js.map +1 -0
  71. package/dist/commands/vm-memory.d.ts +53 -0
  72. package/dist/commands/vm-memory.js +307 -0
  73. package/dist/commands/vm-memory.js.map +1 -0
  74. package/dist/commands/vm.d.ts +2 -0
  75. package/dist/commands/vm.js +8 -0
  76. package/dist/commands/vm.js.map +1 -1
  77. package/dist/commands/webhooks.d.ts +2 -0
  78. package/dist/commands/webhooks.js +7 -0
  79. package/dist/commands/webhooks.js.map +1 -1
  80. package/dist/index.js +403 -21
  81. package/dist/index.js.map +1 -1
  82. package/dist/lib/agent-artifact-url.d.ts +19 -0
  83. package/dist/lib/agent-artifact-url.js +48 -0
  84. package/dist/lib/agent-artifact-url.js.map +1 -0
  85. package/dist/lib/api-client.d.ts +11 -3
  86. package/dist/lib/api-client.js +55 -24
  87. package/dist/lib/api-client.js.map +1 -1
  88. package/dist/lib/api-error.js +32 -1
  89. package/dist/lib/api-error.js.map +1 -1
  90. package/dist/lib/auth.d.ts +2 -9
  91. package/dist/lib/auth.js +34 -18
  92. package/dist/lib/auth.js.map +1 -1
  93. package/dist/lib/cli-write.d.ts +31 -0
  94. package/dist/lib/cli-write.js +51 -2
  95. package/dist/lib/cli-write.js.map +1 -1
  96. package/dist/lib/mobile-local/index.d.ts +7 -0
  97. package/dist/lib/mobile-local/index.js +7 -0
  98. package/dist/lib/mobile-local/index.js.map +1 -0
  99. package/dist/lib/mobile-local/mobile-json.d.ts +57 -0
  100. package/dist/lib/mobile-local/mobile-json.js +169 -0
  101. package/dist/lib/mobile-local/mobile-json.js.map +1 -0
  102. package/dist/lib/product-config.d.ts +5 -0
  103. package/dist/lib/product-config.js +37 -0
  104. package/dist/lib/product-config.js.map +1 -0
  105. package/dist/lib/telemetry.d.ts +7 -0
  106. package/dist/lib/telemetry.js +9 -0
  107. package/dist/lib/telemetry.js.map +1 -1
  108. package/package.json +1 -1
@@ -0,0 +1,169 @@
1
+ /**
2
+ * `@neetru/mobile-local` — contrato do registry local `.neetru/mobile.json`.
3
+ *
4
+ * Espelha `../db-local/db-json.ts`: registry per-repo que guarda os apps
5
+ * mobile (iOS/Android) registrados no Core via `neetru mobile init`. Mesmo
6
+ * formato — versionado, migração defensiva, escrita ATÔMICA via temp-file +
7
+ * rename no MESMO diretório.
8
+ *
9
+ * Sem dependências externas — só builtins do Node.
10
+ */
11
+ import * as fs from 'node:fs';
12
+ import * as path from 'node:path';
13
+ import { randomBytes } from 'node:crypto';
14
+ /** Registry v1 vazio — usado quando o arquivo ainda não existe. */
15
+ function emptyMobileJson() {
16
+ return { version: 1, apps: [] };
17
+ }
18
+ // ---------------------------------------------------------------------------
19
+ // migrateMobileJson — qualquer entrada → v1 canônico
20
+ // ---------------------------------------------------------------------------
21
+ function isPlainObject(value) {
22
+ return typeof value === 'object' && value !== null && !Array.isArray(value);
23
+ }
24
+ /** Coerção defensiva: extrai um array de fingerprints string do `raw`. */
25
+ function coerceFingerprints(raw) {
26
+ if (!Array.isArray(raw))
27
+ return undefined;
28
+ const out = raw.filter((v) => typeof v === 'string');
29
+ return out.length > 0 ? out : undefined;
30
+ }
31
+ /**
32
+ * Coerce uma entrada de app arbitrária para `MobileJsonApp`.
33
+ * Retorna `null` quando a entrada não tem os campos mínimos válidos
34
+ * (descartável — não trava o registry inteiro por uma entrada corrompida).
35
+ */
36
+ function coerceApp(raw) {
37
+ if (!isPlainObject(raw))
38
+ return null;
39
+ const { id, platform, redirectUri, oidcClientId } = raw;
40
+ if (typeof id !== 'string' || !id)
41
+ return null;
42
+ if (platform !== 'ios' && platform !== 'android')
43
+ return null;
44
+ if (typeof redirectUri !== 'string' || !redirectUri)
45
+ return null;
46
+ if (typeof oidcClientId !== 'string' || !oidcClientId)
47
+ return null;
48
+ const entry = {
49
+ id,
50
+ platform,
51
+ redirectUri,
52
+ oidcClientId,
53
+ status: typeof raw.status === 'string' && raw.status ? raw.status : 'active',
54
+ };
55
+ if (typeof raw.name === 'string')
56
+ entry.name = raw.name;
57
+ if (typeof raw.bundleId === 'string')
58
+ entry.bundleId = raw.bundleId;
59
+ if (typeof raw.teamId === 'string')
60
+ entry.teamId = raw.teamId;
61
+ if (typeof raw.packageName === 'string')
62
+ entry.packageName = raw.packageName;
63
+ const fingerprints = coerceFingerprints(raw.shaCertFingerprints);
64
+ if (fingerprints)
65
+ entry.shaCertFingerprints = fingerprints;
66
+ return entry;
67
+ }
68
+ /** Reduz um array arbitrário a entradas de app válidas. */
69
+ function coerceAppArray(raw) {
70
+ if (!Array.isArray(raw))
71
+ return [];
72
+ const out = [];
73
+ for (const entry of raw) {
74
+ const app = coerceApp(entry);
75
+ if (app)
76
+ out.push(app);
77
+ }
78
+ return out;
79
+ }
80
+ /**
81
+ * Migra qualquer entrada para um `MobileJson` v1 estruturalmente válido.
82
+ *
83
+ * - v1 válido → normalizado (entradas malformadas reparadas ou descartadas).
84
+ * - objeto sem `version` → upgrade best-effort (trata como v1).
85
+ * - `null` / não-objeto / array / garbage → lança.
86
+ *
87
+ * NUNCA retorna algo que não seja um `MobileJson` v1 válido.
88
+ */
89
+ export function migrateMobileJson(raw) {
90
+ if (!isPlainObject(raw)) {
91
+ throw new Error(`migrateMobileJson: conteúdo inválido — esperava um objeto, recebeu ` +
92
+ `${raw === null ? 'null' : Array.isArray(raw) ? 'array' : typeof raw}.`);
93
+ }
94
+ const version = raw.version;
95
+ if (version === 1 || version === undefined) {
96
+ return { version: 1, apps: coerceAppArray(raw.apps) };
97
+ }
98
+ throw new Error(`migrateMobileJson: versão de registry não suportada (${JSON.stringify(version)}). ` +
99
+ `Versões aceitas: 1 ou ausente.`);
100
+ }
101
+ // ---------------------------------------------------------------------------
102
+ // readMobileJson / writeMobileJson
103
+ // ---------------------------------------------------------------------------
104
+ /**
105
+ * Lê + parseia + migra um `.neetru/mobile.json`.
106
+ *
107
+ * Arquivo ausente → registry v1 vazio (não é erro — é um registry novo).
108
+ * JSON inválido → lança um `Error` nomeando o path.
109
+ */
110
+ export function readMobileJson(filePath) {
111
+ let raw;
112
+ try {
113
+ raw = fs.readFileSync(filePath, 'utf8');
114
+ }
115
+ catch (err) {
116
+ if (err.code === 'ENOENT') {
117
+ return emptyMobileJson();
118
+ }
119
+ throw err;
120
+ }
121
+ let parsed;
122
+ try {
123
+ parsed = JSON.parse(raw);
124
+ }
125
+ catch (err) {
126
+ throw new Error(`readMobileJson: JSON inválido em ${filePath} — ${err.message}`);
127
+ }
128
+ return migrateMobileJson(parsed);
129
+ }
130
+ /**
131
+ * Escreve um `MobileJson` de forma ATÔMICA.
132
+ *
133
+ * Estratégia: escreve num arquivo temporário no MESMO diretório do destino
134
+ * (rename só é atômico dentro do mesmo filesystem) e faz `renameSync` —
135
+ * que sobrescreve o arquivo existente tanto no Windows quanto no POSIX.
136
+ *
137
+ * Cria o diretório pai se ausente. Se algo falhar depois do temp ser criado,
138
+ * tenta remover o temp (best-effort) pra não deixar lixo `.tmp-*`.
139
+ */
140
+ export function writeMobileJson(filePath, data) {
141
+ const dir = path.dirname(filePath);
142
+ fs.mkdirSync(dir, { recursive: true });
143
+ const tmpPath = path.join(dir, `${path.basename(filePath)}.tmp-${process.pid}-${randomBytes(6).toString('hex')}`);
144
+ const payload = JSON.stringify(data, null, 2) + '\n';
145
+ try {
146
+ fs.writeFileSync(tmpPath, payload, 'utf8');
147
+ fs.renameSync(tmpPath, filePath);
148
+ }
149
+ catch (err) {
150
+ // Best-effort: remove o temp pra não deixar lixo se algo falhou.
151
+ try {
152
+ fs.rmSync(tmpPath, { force: true });
153
+ }
154
+ catch {
155
+ /* ignora — limpeza best-effort */
156
+ }
157
+ throw err;
158
+ }
159
+ }
160
+ /** Adiciona (ou substitui por `id`) uma entrada e retorna o `MobileJson` atualizado. */
161
+ export function upsertMobileApp(mobileJson, app) {
162
+ const withoutExisting = mobileJson.apps.filter((a) => a.id !== app.id);
163
+ return { version: 1, apps: [...withoutExisting, app] };
164
+ }
165
+ /** Remove uma entrada por `id` e retorna o `MobileJson` atualizado. */
166
+ export function removeMobileApp(mobileJson, id) {
167
+ return { version: 1, apps: mobileJson.apps.filter((a) => a.id !== id) };
168
+ }
169
+ //# sourceMappingURL=mobile-json.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mobile-json.js","sourceRoot":"","sources":["../../../src/lib/mobile-local/mobile-json.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ export interface NeetruConfig {
2
+ slug: string;
3
+ schemaVersion?: number;
4
+ }
5
+ export declare function loadProductConfig(): Promise<NeetruConfig | null>;
@@ -0,0 +1,37 @@
1
+ /**
2
+ * `loadProductConfig` — lê `neetru.config.json` (ou o legado `.neetru.json`)
3
+ * do cwd e retorna a config do produto atual (pelo menos `slug`).
4
+ *
5
+ * Extraído (2026-09, feature `neetru mobile`) de `commands/db.ts` — o repo
6
+ * tinha 3 cópias quase-idênticas espalhadas (`db.ts:247`, `dev.ts:151`,
7
+ * `promote.ts:42`). Esta é a versão canônica (a mais estrita: valida
8
+ * `slug` como string não-vazia antes de retornar). Comandos novos que
9
+ * precisam do slug do produto atual devem importar DAQUI — não duplicar
10
+ * mais uma cópia.
11
+ *
12
+ * `db.ts` foi migrado para reusar este módulo; `dev.ts`/`promote.ts`
13
+ * mantêm suas cópias locais por ora (fora do escopo desta mudança).
14
+ */
15
+ import * as fs from 'node:fs/promises';
16
+ import * as fsSync from 'node:fs';
17
+ import * as path from 'node:path';
18
+ const CONFIG_FILES = ['neetru.config.json', '.neetru.json'];
19
+ export async function loadProductConfig() {
20
+ for (const name of CONFIG_FILES) {
21
+ const filePath = path.resolve(process.cwd(), name);
22
+ if (!fsSync.existsSync(filePath))
23
+ continue;
24
+ try {
25
+ const raw = await fs.readFile(filePath, 'utf8');
26
+ const parsed = JSON.parse(raw);
27
+ if (typeof parsed.slug !== 'string' || !parsed.slug)
28
+ return null;
29
+ return parsed;
30
+ }
31
+ catch {
32
+ return null;
33
+ }
34
+ }
35
+ return null;
36
+ }
37
+ //# sourceMappingURL=product-config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"product-config.js","sourceRoot":"","sources":["../../src/lib/product-config.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AACH,OAAO,KAAK,EAAE,MAAM,kBAAkB,CAAC;AACvC,OAAO,KAAK,MAAM,MAAM,SAAS,CAAC;AAClC,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAElC,MAAM,YAAY,GAAG,CAAC,oBAAoB,EAAE,cAAc,CAAU,CAAC;AAOrE,MAAM,CAAC,KAAK,UAAU,iBAAiB;IACrC,KAAK,MAAM,IAAI,IAAI,YAAY,EAAE,CAAC;QAChC,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,IAAI,CAAC,CAAC;QACnD,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,QAAQ,CAAC;YAAE,SAAS;QAC3C,IAAI,CAAC;YACH,MAAM,GAAG,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;YAChD,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAiB,CAAC;YAC/C,IAAI,OAAO,MAAM,CAAC,IAAI,KAAK,QAAQ,IAAI,CAAC,MAAM,CAAC,IAAI;gBAAE,OAAO,IAAI,CAAC;YACjE,OAAO,MAAM,CAAC;QAChB,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,IAAI,CAAC;QACd,CAAC;IACH,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC"}
@@ -39,6 +39,13 @@ export declare function flushTelemetry(): Promise<void>;
39
39
  export declare function installTelemetryFlushHook(): void;
40
40
  export declare function markCommandStart(commandName: string): void;
41
41
  export declare function markCommandEnd(exitCode: number): void;
42
+ /**
43
+ * Nome (lineage) do comando em execução — ex.: `db.apply`. LABS #5 (2026-09-28):
44
+ * o api-client carimba isso no header `x-neetru-cli-command` pra o Core casar
45
+ * erro de campo com o comando que o disparou. null fora de um comando (help/
46
+ * version no root). NUNCA inclui args/valores — só o nome — pra não vazar PII.
47
+ */
48
+ export declare function getCurrentCommandName(): string | null;
42
49
  /** Para tests — esvazia o estado de comando atual. */
43
50
  export declare function _resetCurrentCommandForTests(): void;
44
51
  /** Para tests — esvazia o buffer e o flag de flush. */
@@ -185,6 +185,15 @@ export function markCommandEnd(exitCode) {
185
185
  });
186
186
  currentCommand = null;
187
187
  }
188
+ /**
189
+ * Nome (lineage) do comando em execução — ex.: `db.apply`. LABS #5 (2026-09-28):
190
+ * o api-client carimba isso no header `x-neetru-cli-command` pra o Core casar
191
+ * erro de campo com o comando que o disparou. null fora de um comando (help/
192
+ * version no root). NUNCA inclui args/valores — só o nome — pra não vazar PII.
193
+ */
194
+ export function getCurrentCommandName() {
195
+ return currentCommand?.name ?? null;
196
+ }
188
197
  /** Para tests — esvazia o estado de comando atual. */
189
198
  export function _resetCurrentCommandForTests() {
190
199
  currentCommand = null;
@@ -1 +1 @@
1
- {"version":3,"file":"telemetry.js","sourceRoot":"","sources":["../../src/lib/telemetry.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"telemetry.js","sourceRoot":"","sources":["../../src/lib/telemetry.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@neetru/cli",
3
- "version": "2.28.7",
3
+ "version": "2.28.10",
4
4
  "type": "module",
5
5
  "description": "Neetru Developer Kit — scaffold, AI assistant, publish, build e deploy de produtos SaaS Neetru via Core (VM-based agents)",
6
6
  "keywords": [