@neetru/cli 1.0.1 → 2.1.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 (192) hide show
  1. package/CHANGELOG.md +136 -0
  2. package/README.md +109 -152
  3. package/dist/commands/add.d.ts +8 -3
  4. package/dist/commands/add.js +70 -143
  5. package/dist/commands/add.js.map +1 -1
  6. package/dist/commands/agent-release.d.ts +13 -0
  7. package/dist/commands/agent-release.js +204 -0
  8. package/dist/commands/agent-release.js.map +1 -0
  9. package/dist/commands/agent-write.d.ts +12 -0
  10. package/dist/commands/agent-write.js +94 -0
  11. package/dist/commands/agent-write.js.map +1 -0
  12. package/dist/commands/ai.d.ts +4 -0
  13. package/dist/commands/ai.js +88 -0
  14. package/dist/commands/ai.js.map +1 -0
  15. package/dist/commands/api-catalog.d.ts +20 -0
  16. package/dist/commands/api-catalog.js +126 -0
  17. package/dist/commands/api-catalog.js.map +1 -0
  18. package/dist/commands/audit.d.ts +8 -0
  19. package/dist/commands/audit.js +69 -0
  20. package/dist/commands/audit.js.map +1 -0
  21. package/dist/commands/autocomplete.d.ts +7 -0
  22. package/dist/commands/autocomplete.js +107 -0
  23. package/dist/commands/autocomplete.js.map +1 -0
  24. package/dist/commands/billing.d.ts +6 -0
  25. package/dist/commands/billing.js +69 -0
  26. package/dist/commands/billing.js.map +1 -0
  27. package/dist/commands/build.d.ts +18 -0
  28. package/dist/commands/build.js +295 -0
  29. package/dist/commands/build.js.map +1 -0
  30. package/dist/commands/cloud-run.d.ts +11 -0
  31. package/dist/commands/cloud-run.js +87 -0
  32. package/dist/commands/cloud-run.js.map +1 -0
  33. package/dist/commands/config.d.ts +3 -0
  34. package/dist/commands/config.js +70 -0
  35. package/dist/commands/config.js.map +1 -0
  36. package/dist/commands/db.d.ts +14 -0
  37. package/dist/commands/db.js +187 -0
  38. package/dist/commands/db.js.map +1 -0
  39. package/dist/commands/deploy.d.ts +23 -3
  40. package/dist/commands/deploy.js +530 -177
  41. package/dist/commands/deploy.js.map +1 -1
  42. package/dist/commands/deployments.d.ts +11 -0
  43. package/dist/commands/deployments.js +69 -0
  44. package/dist/commands/deployments.js.map +1 -0
  45. package/dist/commands/doctor.d.ts +27 -0
  46. package/dist/commands/doctor.js +211 -0
  47. package/dist/commands/doctor.js.map +1 -0
  48. package/dist/commands/dr.d.ts +11 -0
  49. package/dist/commands/dr.js +79 -0
  50. package/dist/commands/dr.js.map +1 -0
  51. package/dist/commands/env.d.ts +15 -0
  52. package/dist/commands/env.js +56 -0
  53. package/dist/commands/env.js.map +1 -0
  54. package/dist/commands/fn.d.ts +6 -0
  55. package/dist/commands/fn.js +87 -0
  56. package/dist/commands/fn.js.map +1 -0
  57. package/dist/commands/infra-read.d.ts +9 -0
  58. package/dist/commands/infra-read.js +113 -0
  59. package/dist/commands/infra-read.js.map +1 -0
  60. package/dist/commands/init.d.ts +10 -3
  61. package/dist/commands/init.js +275 -142
  62. package/dist/commands/init.js.map +1 -1
  63. package/dist/commands/login.d.ts +6 -3
  64. package/dist/commands/login.js +222 -92
  65. package/dist/commands/login.js.map +1 -1
  66. package/dist/commands/logout.d.ts +1 -0
  67. package/dist/commands/logout.js +28 -0
  68. package/dist/commands/logout.js.map +1 -0
  69. package/dist/commands/logs.d.ts +14 -3
  70. package/dist/commands/logs.js +132 -106
  71. package/dist/commands/logs.js.map +1 -1
  72. package/dist/commands/mocks.d.ts +5 -0
  73. package/dist/commands/mocks.js +23 -0
  74. package/dist/commands/mocks.js.map +1 -0
  75. package/dist/commands/open.d.ts +4 -3
  76. package/dist/commands/open.js +53 -85
  77. package/dist/commands/open.js.map +1 -1
  78. package/dist/commands/products-db.d.ts +37 -0
  79. package/dist/commands/products-db.js +230 -0
  80. package/dist/commands/products-db.js.map +1 -0
  81. package/dist/commands/products.d.ts +12 -0
  82. package/dist/commands/products.js +97 -0
  83. package/dist/commands/products.js.map +1 -0
  84. package/dist/commands/promote.d.ts +9 -0
  85. package/dist/commands/promote.js +114 -0
  86. package/dist/commands/promote.js.map +1 -0
  87. package/dist/commands/publish.d.ts +14 -0
  88. package/dist/commands/publish.js +180 -0
  89. package/dist/commands/publish.js.map +1 -0
  90. package/dist/commands/servers.d.ts +23 -0
  91. package/dist/commands/servers.js +166 -0
  92. package/dist/commands/servers.js.map +1 -0
  93. package/dist/commands/status.d.ts +5 -3
  94. package/dist/commands/status.js +91 -93
  95. package/dist/commands/status.js.map +1 -1
  96. package/dist/commands/support.d.ts +25 -0
  97. package/dist/commands/support.js +184 -0
  98. package/dist/commands/support.js.map +1 -0
  99. package/dist/commands/surface-status.d.ts +5 -0
  100. package/dist/commands/surface-status.js +63 -0
  101. package/dist/commands/surface-status.js.map +1 -0
  102. package/dist/commands/tenants.d.ts +34 -0
  103. package/dist/commands/tenants.js +179 -0
  104. package/dist/commands/tenants.js.map +1 -0
  105. package/dist/commands/upgrade.d.ts +12 -0
  106. package/dist/commands/upgrade.js +77 -0
  107. package/dist/commands/upgrade.js.map +1 -0
  108. package/dist/commands/validate.d.ts +1 -3
  109. package/dist/commands/validate.js +83 -91
  110. package/dist/commands/validate.js.map +1 -1
  111. package/dist/commands/whoami.d.ts +5 -3
  112. package/dist/commands/whoami.js +76 -28
  113. package/dist/commands/whoami.js.map +1 -1
  114. package/dist/commands/workspaces.d.ts +15 -0
  115. package/dist/commands/workspaces.js +72 -0
  116. package/dist/commands/workspaces.js.map +1 -0
  117. package/dist/index.d.ts +0 -1
  118. package/dist/index.js +1094 -36
  119. package/dist/index.js.map +1 -1
  120. package/dist/lib/ai/context.d.ts +11 -0
  121. package/dist/lib/ai/context.js +112 -0
  122. package/dist/lib/ai/context.js.map +1 -0
  123. package/dist/lib/ai/orchestrator.d.ts +10 -0
  124. package/dist/lib/ai/orchestrator.js +92 -0
  125. package/dist/lib/ai/orchestrator.js.map +1 -0
  126. package/dist/lib/api-client.d.ts +39 -0
  127. package/dist/lib/api-client.js +185 -0
  128. package/dist/lib/api-client.js.map +1 -0
  129. package/dist/lib/auth.d.ts +15 -0
  130. package/dist/lib/auth.js +98 -0
  131. package/dist/lib/auth.js.map +1 -0
  132. package/dist/lib/cli-read.d.ts +13 -0
  133. package/dist/lib/cli-read.js +103 -0
  134. package/dist/lib/cli-read.js.map +1 -0
  135. package/dist/lib/cli-write.d.ts +47 -0
  136. package/dist/lib/cli-write.js +137 -0
  137. package/dist/lib/cli-write.js.map +1 -0
  138. package/dist/lib/config-schema.d.ts +165 -0
  139. package/dist/lib/config-schema.js +57 -0
  140. package/dist/lib/config-schema.js.map +1 -0
  141. package/dist/lib/config.d.ts +15 -0
  142. package/dist/lib/config.js +33 -0
  143. package/dist/lib/config.js.map +1 -0
  144. package/dist/lib/render.d.ts +16 -0
  145. package/dist/lib/render.js +74 -0
  146. package/dist/lib/render.js.map +1 -0
  147. package/dist/utils/logger.d.ts +13 -0
  148. package/dist/utils/logger.js +27 -0
  149. package/dist/utils/logger.js.map +1 -0
  150. package/package.json +35 -33
  151. package/templates/auth/callback.ts +22 -0
  152. package/templates/auth/sign-in.tsx +41 -0
  153. package/templates/billing/checkout.ts +22 -0
  154. package/templates/billing/page.tsx +43 -0
  155. package/templates/support/ticket-form.tsx +68 -0
  156. package/templates/usage/track.ts +30 -0
  157. package/templates/users/profile.tsx +43 -0
  158. package/LICENSE +0 -21
  159. package/dist/commands/add.d.ts.map +0 -1
  160. package/dist/commands/deploy.d.ts.map +0 -1
  161. package/dist/commands/generate-types.d.ts +0 -3
  162. package/dist/commands/generate-types.d.ts.map +0 -1
  163. package/dist/commands/generate-types.js +0 -150
  164. package/dist/commands/generate-types.js.map +0 -1
  165. package/dist/commands/init.d.ts.map +0 -1
  166. package/dist/commands/login.d.ts.map +0 -1
  167. package/dist/commands/logs.d.ts.map +0 -1
  168. package/dist/commands/open.d.ts.map +0 -1
  169. package/dist/commands/status.d.ts.map +0 -1
  170. package/dist/commands/validate.d.ts.map +0 -1
  171. package/dist/commands/whoami.d.ts.map +0 -1
  172. package/dist/config.d.ts +0 -14
  173. package/dist/config.d.ts.map +0 -1
  174. package/dist/config.js +0 -83
  175. package/dist/config.js.map +0 -1
  176. package/dist/index.d.ts.map +0 -1
  177. package/dist/scaffold/auth.d.ts +0 -3
  178. package/dist/scaffold/auth.d.ts.map +0 -1
  179. package/dist/scaffold/auth.js +0 -228
  180. package/dist/scaffold/auth.js.map +0 -1
  181. package/dist/scaffold/billing.d.ts +0 -3
  182. package/dist/scaffold/billing.d.ts.map +0 -1
  183. package/dist/scaffold/billing.js +0 -184
  184. package/dist/scaffold/billing.js.map +0 -1
  185. package/dist/scaffold/usage.d.ts +0 -3
  186. package/dist/scaffold/usage.d.ts.map +0 -1
  187. package/dist/scaffold/usage.js +0 -173
  188. package/dist/scaffold/usage.js.map +0 -1
  189. package/dist/scaffold/users.d.ts +0 -3
  190. package/dist/scaffold/users.d.ts.map +0 -1
  191. package/dist/scaffold/users.js +0 -135
  192. package/dist/scaffold/users.js.map +0 -1
@@ -0,0 +1,295 @@
1
+ /**
2
+ * `neetru build` — empacota o produto no diretório atual num tarball pronto
3
+ * pra `neetru deploy`.
4
+ *
5
+ * Detecção de stack:
6
+ * 1. `--stack` flag explícita
7
+ * 2. `product_config/{slug}.stack` (via `/api/v1/cli/catalog`/Firestore — só se
8
+ * neetru.config.json tem slug; opcional)
9
+ * 3. `Dockerfile` → `docker`
10
+ * 4. `package.json` com next/react/etc → `node`
11
+ * 5. `composer.json` → `php-apache`
12
+ * 6. `index.html` sem deps → `static`
13
+ *
14
+ * Saída:
15
+ * `.neetru-build/{slug}-{version}.tar.gz`
16
+ * `.neetru-build/manifest.json`
17
+ *
18
+ * NÃO faz upload — apenas empacota. `neetru deploy` chama isso e depois
19
+ * envia pra GCS.
20
+ */
21
+ import * as fs from 'node:fs';
22
+ import { promises as fsp } from 'node:fs';
23
+ import * as path from 'node:path';
24
+ import { spawn } from 'node:child_process';
25
+ import { createHash } from 'node:crypto';
26
+ import chalk from 'chalk';
27
+ import ora from 'ora';
28
+ import { log } from '../utils/logger.js';
29
+ const CONFIG_FILENAMES = ['neetru.config.json', '.neetru.json'];
30
+ function fileExists(p) {
31
+ try {
32
+ fs.statSync(p);
33
+ return true;
34
+ }
35
+ catch {
36
+ return false;
37
+ }
38
+ }
39
+ async function loadLocalConfig(cwd) {
40
+ for (const filename of CONFIG_FILENAMES) {
41
+ const full = path.join(cwd, filename);
42
+ if (!fileExists(full))
43
+ continue;
44
+ try {
45
+ const raw = await fsp.readFile(full, 'utf8');
46
+ const parsed = JSON.parse(raw);
47
+ return parsed;
48
+ }
49
+ catch {
50
+ return null;
51
+ }
52
+ }
53
+ return null;
54
+ }
55
+ function detectStack(cwd) {
56
+ if (fileExists(path.join(cwd, 'Dockerfile')))
57
+ return 'docker';
58
+ if (fileExists(path.join(cwd, 'package.json'))) {
59
+ try {
60
+ const pkg = JSON.parse(fs.readFileSync(path.join(cwd, 'package.json'), 'utf8'));
61
+ const deps = { ...(pkg.dependencies ?? {}), ...(pkg.devDependencies ?? {}) };
62
+ if (deps.next || deps.react || deps.express || deps.fastify || deps.koa)
63
+ return 'node';
64
+ // package.json sem deps web → assume node mesmo assim
65
+ return 'node';
66
+ }
67
+ catch {
68
+ return 'node';
69
+ }
70
+ }
71
+ if (fileExists(path.join(cwd, 'composer.json')))
72
+ return 'php-apache';
73
+ if (fileExists(path.join(cwd, 'index.html')))
74
+ return 'static';
75
+ // Fallback: static (raiz como www).
76
+ return 'static';
77
+ }
78
+ function detectVersion(cwd, override) {
79
+ if (override)
80
+ return override;
81
+ const pkgPath = path.join(cwd, 'package.json');
82
+ if (fileExists(pkgPath)) {
83
+ try {
84
+ const pkg = JSON.parse(fs.readFileSync(pkgPath, 'utf8'));
85
+ if (pkg.version)
86
+ return pkg.version;
87
+ }
88
+ catch {
89
+ /* fall through */
90
+ }
91
+ }
92
+ // Default: timestamp ISO compactado.
93
+ return new Date().toISOString().replace(/[-:.]/g, '').slice(0, 14);
94
+ }
95
+ function runCmd(cmd, args, cwd) {
96
+ return new Promise((resolve, reject) => {
97
+ const child = spawn(cmd, args, {
98
+ cwd,
99
+ stdio: 'inherit',
100
+ shell: process.platform === 'win32',
101
+ });
102
+ child.on('error', reject);
103
+ child.on('close', (code) => {
104
+ if (code === 0)
105
+ resolve();
106
+ else
107
+ reject(new Error(`${cmd} ${args.join(' ')} exit code ${code}`));
108
+ });
109
+ });
110
+ }
111
+ async function ensureDir(p) {
112
+ await fsp.mkdir(p, { recursive: true });
113
+ }
114
+ async function sha256File(p) {
115
+ const hash = createHash('sha256');
116
+ const stream = fs.createReadStream(p);
117
+ for await (const chunk of stream)
118
+ hash.update(chunk);
119
+ return hash.digest('hex');
120
+ }
121
+ async function tarDirectory(srcDir, dest, exclude = []) {
122
+ // Usa `tar` nativo. Em Windows 11 já vem `bsdtar`. Fallback: erro claro.
123
+ const args = ['-czf', dest];
124
+ for (const ex of exclude) {
125
+ args.push('--exclude', ex);
126
+ }
127
+ args.push('-C', srcDir, '.');
128
+ try {
129
+ await runCmd('tar', args, process.cwd());
130
+ }
131
+ catch (err) {
132
+ throw new Error(`Falha ao empacotar com tar: ${err.message}\n` +
133
+ ' Em Windows, use o tar embarcado (já presente no Windows 10+).');
134
+ }
135
+ }
136
+ async function buildNode(cwd, noCache) {
137
+ const pkgPath = path.join(cwd, 'package.json');
138
+ if (!fileExists(pkgPath))
139
+ throw new Error('Stack node sem package.json.');
140
+ const pkg = JSON.parse(await fsp.readFile(pkgPath, 'utf8'));
141
+ // npm ci + (npm run build se existir).
142
+ if (noCache) {
143
+ // BUG-016 fix (2026-05-13): não apagar package-lock.json do usuário.
144
+ // Apagar o lockfile quebra reprodutibilidade e altera o repositório local.
145
+ // Em vez disso, limpamos o cache do npm global se `--no-cache` for exigido.
146
+ log.info('Limpando cache do npm (--no-cache)…');
147
+ try {
148
+ await runCmd('npm', ['cache', 'clean', '--force'], cwd);
149
+ }
150
+ catch {
151
+ // Ignora falha de cache clean e prossegue
152
+ }
153
+ }
154
+ log.info('npm ci…');
155
+ await runCmd('npm', ['ci'], cwd);
156
+ if (pkg.scripts?.build) {
157
+ log.info('npm run build…');
158
+ await runCmd('npm', ['run', 'build'], cwd);
159
+ }
160
+ return { entrypoint: pkg.main ?? 'index.js' };
161
+ }
162
+ async function buildDocker(cwd, slug, version, outputDir, noCache) {
163
+ const image = `neetru/${slug}:${version}`;
164
+ const buildArgs = ['build', '-t', image];
165
+ if (noCache)
166
+ buildArgs.push('--no-cache');
167
+ buildArgs.push('.');
168
+ log.info(`docker ${buildArgs.join(' ')}…`);
169
+ await runCmd('docker', buildArgs, cwd);
170
+ // docker save → tarball
171
+ const imgTar = path.join(outputDir, `${slug}-${version}-image.tar`);
172
+ log.info(`docker save → ${imgTar}…`);
173
+ await runCmd('docker', ['save', '-o', imgTar, image], cwd);
174
+ // Empacota a image.tar em tar.gz uniforme com o resto do pipeline.
175
+ const finalTar = path.join(outputDir, `${slug}-${version}.tar.gz`);
176
+ // tar -czf finalTar -C outputDir <image basename>
177
+ await runCmd('tar', ['-czf', finalTar, '-C', outputDir, path.basename(imgTar)], cwd);
178
+ await fsp.rm(imgTar, { force: true });
179
+ return { tarballPath: finalTar, entrypoint: image };
180
+ }
181
+ async function buildPhp(cwd) {
182
+ const composer = path.join(cwd, 'composer.json');
183
+ if (fileExists(composer)) {
184
+ log.info('composer install --no-dev --optimize-autoloader…');
185
+ try {
186
+ await runCmd('composer', ['install', '--no-dev', '--optimize-autoloader'], cwd);
187
+ }
188
+ catch (err) {
189
+ log.warn(`composer falhou: ${err.message}. Empacotando mesmo assim.`);
190
+ }
191
+ }
192
+ return { entrypoint: 'index.php' };
193
+ }
194
+ async function buildStatic(cwd) {
195
+ const pkgPath = path.join(cwd, 'package.json');
196
+ if (fileExists(pkgPath)) {
197
+ try {
198
+ const pkg = JSON.parse(await fsp.readFile(pkgPath, 'utf8'));
199
+ if (pkg.scripts?.build) {
200
+ log.info('npm ci…');
201
+ await runCmd('npm', ['ci'], cwd);
202
+ log.info('npm run build…');
203
+ await runCmd('npm', ['run', 'build'], cwd);
204
+ }
205
+ }
206
+ catch {
207
+ // ignore — se falhar, empacota o que tem.
208
+ }
209
+ }
210
+ for (const candidate of ['dist', 'build', 'out', 'public']) {
211
+ if (fileExists(path.join(cwd, candidate))) {
212
+ return { root: path.join(cwd, candidate), entrypoint: 'index.html' };
213
+ }
214
+ }
215
+ return { root: cwd, entrypoint: 'index.html' };
216
+ }
217
+ export async function runBuild(opts = {}) {
218
+ log.banner();
219
+ const cwd = process.cwd();
220
+ const localCfg = await loadLocalConfig(cwd);
221
+ const slug = opts.product ?? localCfg?.slug;
222
+ if (!slug) {
223
+ log.error('--product <slug> é obrigatório (ou rode em diretório com neetru.config.json).');
224
+ process.exit(1);
225
+ }
226
+ const version = detectVersion(cwd, opts.version);
227
+ const stack = opts.stack ?? detectStack(cwd);
228
+ log.heading(`neetru build`);
229
+ log.dim(` slug=${slug} version=${version} stack=${stack}`);
230
+ const outputDir = path.resolve(cwd, opts.output ?? '.neetru-build');
231
+ await ensureDir(outputDir);
232
+ const tarballName = `${slug}-${version}.tar.gz`;
233
+ let tarballPath = path.join(outputDir, tarballName);
234
+ let entrypoint;
235
+ const spinner = ora({ text: `Construindo ${stack}…`, color: 'blue' }).start();
236
+ try {
237
+ if (stack === 'node') {
238
+ const r = await buildNode(cwd, !!opts.noCache);
239
+ entrypoint = r.entrypoint;
240
+ // Empacota o cwd inteiro excluindo dirs grandes.
241
+ await tarDirectory(cwd, tarballPath, [
242
+ '.git',
243
+ '.neetru-build',
244
+ '.next/cache',
245
+ 'node_modules/.cache',
246
+ 'tmp',
247
+ '*.log',
248
+ ]);
249
+ }
250
+ else if (stack === 'docker') {
251
+ const r = await buildDocker(cwd, slug, version, outputDir, !!opts.noCache);
252
+ tarballPath = r.tarballPath;
253
+ entrypoint = r.entrypoint;
254
+ }
255
+ else if (stack === 'php-apache') {
256
+ const r = await buildPhp(cwd);
257
+ entrypoint = r.entrypoint;
258
+ await tarDirectory(cwd, tarballPath, ['.git', '.neetru-build', 'node_modules', 'tmp', '*.log']);
259
+ }
260
+ else if (stack === 'static') {
261
+ const r = await buildStatic(cwd);
262
+ entrypoint = r.entrypoint;
263
+ await tarDirectory(r.root, tarballPath, ['.git', '.neetru-build']);
264
+ }
265
+ else {
266
+ throw new Error(`Stack desconhecida: ${stack}`);
267
+ }
268
+ spinner.succeed(`Empacotado: ${chalk.bold(path.relative(cwd, tarballPath))}`);
269
+ }
270
+ catch (err) {
271
+ spinner.fail(`Falha no build: ${err.message}`);
272
+ process.exit(1);
273
+ }
274
+ // Manifest
275
+ const sizeBytes = (await fsp.stat(tarballPath)).size;
276
+ const sha256 = await sha256File(tarballPath);
277
+ const manifest = {
278
+ slug,
279
+ version,
280
+ stack,
281
+ tarball: path.relative(cwd, tarballPath),
282
+ sha256,
283
+ sizeBytes,
284
+ entrypoint,
285
+ builtAt: new Date().toISOString(),
286
+ };
287
+ const manifestPath = path.join(outputDir, 'manifest.json');
288
+ await fsp.writeFile(manifestPath, JSON.stringify(manifest, null, 2), 'utf8');
289
+ log.dim(` sha256=${sha256.slice(0, 16)}…`);
290
+ log.dim(` size=${(sizeBytes / 1024 / 1024).toFixed(2)} MB`);
291
+ log.dim(` manifest=${path.relative(cwd, manifestPath)}`);
292
+ log.success(`Build pronto. Use: ${chalk.bold('neetru deploy --product=' + slug)}`);
293
+ return manifest;
294
+ }
295
+ //# sourceMappingURL=build.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"build.js","sourceRoot":"","sources":["../../src/commands/build.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ import { type StepUpOptions } from '../lib/cli-write.js';
2
+ export declare function runCloudRunPause(service: string, opts: {
3
+ json?: boolean;
4
+ }): Promise<void>;
5
+ export interface CloudRunResumeOptions {
6
+ minInstances?: string;
7
+ maxInstances?: string;
8
+ json?: boolean;
9
+ }
10
+ export declare function runCloudRunResume(service: string, opts: CloudRunResumeOptions): Promise<void>;
11
+ export declare function runCloudRunDelete(service: string, opts: StepUpOptions): Promise<void>;
@@ -0,0 +1,87 @@
1
+ /**
2
+ * `neetru cloud-run pause|resume|delete` — control plane de serviços Cloud Run.
3
+ *
4
+ * Endpoints:
5
+ * POST /api/cli/v1/cloud-run/{service}?action=pause
6
+ * POST /api/cli/v1/cloud-run/{service}?action=resume
7
+ * DELETE /api/cli/v1/cloud-run/{service} (destrutivo)
8
+ *
9
+ * `delete` é destrutivo top-tier → confirmação interativa obrigatória.
10
+ * O serviço `neetru-core` é protegido contra exclusão server-side.
11
+ */
12
+ import ora from 'ora';
13
+ import { apiRequest } from '../lib/api-client.js';
14
+ import { requireToken, handleApiError, confirmDestructive, printWriteResult, resolveStepUp, } from '../lib/cli-write.js';
15
+ import { log } from '../utils/logger.js';
16
+ export async function runCloudRunPause(service, opts) {
17
+ if (!service) {
18
+ log.error('Uso: neetru cloud-run pause <service>');
19
+ process.exit(1);
20
+ }
21
+ const token = await requireToken(opts.json);
22
+ const spinner = opts.json
23
+ ? null
24
+ : ora({ text: `Pausando ${service}…`, color: 'blue' }).start();
25
+ let res;
26
+ try {
27
+ res = await apiRequest(`/api/cli/v1/cloud-run/${encodeURIComponent(service)}?action=pause`, { method: 'POST', token });
28
+ spinner?.stop();
29
+ }
30
+ catch (error) {
31
+ spinner?.fail('Falha ao pausar serviço.');
32
+ handleApiError(error, opts.json);
33
+ }
34
+ printWriteResult({ service: res.service }, `Serviço ${res.service} pausado (scale-to-zero).`, opts.json);
35
+ }
36
+ export async function runCloudRunResume(service, opts) {
37
+ if (!service) {
38
+ log.error('Uso: neetru cloud-run resume <service>');
39
+ process.exit(1);
40
+ }
41
+ const token = await requireToken(opts.json);
42
+ const body = {};
43
+ if (opts.minInstances !== undefined) {
44
+ body.minInstances = Number.parseInt(opts.minInstances, 10);
45
+ }
46
+ if (opts.maxInstances !== undefined) {
47
+ body.maxInstances = Number.parseInt(opts.maxInstances, 10);
48
+ }
49
+ const spinner = opts.json
50
+ ? null
51
+ : ora({ text: `Retomando ${service}…`, color: 'blue' }).start();
52
+ let res;
53
+ try {
54
+ res = await apiRequest(`/api/cli/v1/cloud-run/${encodeURIComponent(service)}?action=resume`, { method: 'POST', token, body });
55
+ spinner?.stop();
56
+ }
57
+ catch (error) {
58
+ spinner?.fail('Falha ao retomar serviço.');
59
+ handleApiError(error, opts.json);
60
+ }
61
+ printWriteResult({ service: res.service }, `Serviço ${res.service} retomado.`, opts.json);
62
+ }
63
+ export async function runCloudRunDelete(service, opts) {
64
+ if (!service) {
65
+ log.error('Uso: neetru cloud-run delete <service>');
66
+ process.exit(1);
67
+ }
68
+ const token = await requireToken(opts.json);
69
+ await confirmDestructive(`Excluir o serviço Cloud Run "${service}"? Esta ação é IRREVERSÍVEL.`, opts);
70
+ // Destrutivo top-tier: step-up MFA (ou dry-run).
71
+ const { headers } = await resolveStepUp(opts);
72
+ const path = `/api/cli/v1/cloud-run/${encodeURIComponent(service)}${opts.dryRun ? '?dryRun=true' : ''}`;
73
+ const spinner = opts.json
74
+ ? null
75
+ : ora({ text: `Excluindo ${service}…`, color: 'blue' }).start();
76
+ let res;
77
+ try {
78
+ res = await apiRequest(path, { method: 'DELETE', token, headers });
79
+ spinner?.stop();
80
+ }
81
+ catch (error) {
82
+ spinner?.fail('Falha ao excluir serviço.');
83
+ handleApiError(error, opts.json);
84
+ }
85
+ printWriteResult(res.dryRun ? res : { service: res.service, deleted: res.deleted }, `Serviço ${res.service} excluído.`, opts.json);
86
+ }
87
+ //# sourceMappingURL=cloud-run.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cloud-run.js","sourceRoot":"","sources":["../../src/commands/cloud-run.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ export declare function configSet(key: string, value: string): void;
2
+ export declare function configGet(key?: string): void;
3
+ export declare function configPath(): void;
@@ -0,0 +1,70 @@
1
+ import { config } from '../lib/config.js';
2
+ import { log } from '../utils/logger.js';
3
+ const SETTABLE_KEYS = [
4
+ 'anthropicApiKey',
5
+ 'openaiApiKey',
6
+ 'geminiApiKey',
7
+ 'neetruApiKey',
8
+ 'neetruApiUrl',
9
+ 'defaultModel',
10
+ // v2.0 — telemetry opt-in (boolean).
11
+ 'telemetry.enabled',
12
+ ];
13
+ export function configSet(key, value) {
14
+ if (!SETTABLE_KEYS.includes(key)) {
15
+ log.error(`Chave inválida: "${key}". Chaves disponíveis: ${SETTABLE_KEYS.join(', ')}`);
16
+ process.exit(1);
17
+ }
18
+ // Booleans (telemetry.enabled) são guardados como boolean real.
19
+ let coerced = value;
20
+ if (key === 'telemetry.enabled') {
21
+ if (value === 'true' || value === '1' || value === 'on' || value === 'yes') {
22
+ coerced = true;
23
+ }
24
+ else if (value === 'false' || value === '0' || value === 'off' || value === 'no') {
25
+ coerced = false;
26
+ }
27
+ else {
28
+ log.error(`Valor inválido para ${key}: use true|false`);
29
+ process.exit(1);
30
+ }
31
+ }
32
+ config.set(key, coerced);
33
+ // Ofusca chaves de API no log
34
+ const display = key.toLowerCase().includes('key') && typeof coerced === 'string'
35
+ ? coerced.slice(0, 8) + '...' + coerced.slice(-4)
36
+ : String(coerced);
37
+ log.success(`${key} = ${display}`);
38
+ }
39
+ export function configGet(key) {
40
+ if (key) {
41
+ const val = config.get(key);
42
+ if (val === undefined) {
43
+ log.warn(`"${key}" não configurada.`);
44
+ }
45
+ else {
46
+ const display = key.toLowerCase().includes('key') && typeof val === 'string'
47
+ ? val.slice(0, 8) + '...' + val.slice(-4)
48
+ : val;
49
+ console.log(` ${key}: ${display}`);
50
+ }
51
+ return;
52
+ }
53
+ log.heading('Configuração atual:');
54
+ for (const k of SETTABLE_KEYS) {
55
+ const val = config.get(k);
56
+ if (val === undefined) {
57
+ log.dim(` ${k}: não configurado`);
58
+ }
59
+ else {
60
+ const display = k.toLowerCase().includes('key') && typeof val === 'string'
61
+ ? val.slice(0, 8) + '...' + val.slice(-4)
62
+ : val;
63
+ log.info(`${k}: ${display}`);
64
+ }
65
+ }
66
+ }
67
+ export function configPath() {
68
+ console.log(` ${config.path}`);
69
+ }
70
+ //# sourceMappingURL=config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/commands/config.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,14 @@
1
+ export interface DbInitOptions {
2
+ out?: string;
3
+ force?: boolean;
4
+ }
5
+ export declare function runDbInit(opts?: DbInitOptions): Promise<void>;
6
+ export interface DbMigrateOptions {
7
+ toVersion: string;
8
+ fromVersion?: string;
9
+ }
10
+ export declare function runDbMigrate(opts: DbMigrateOptions): Promise<void>;
11
+ export interface DbSeedOptions {
12
+ script?: string;
13
+ }
14
+ export declare function runDbSeed(opts?: DbSeedOptions): Promise<void>;