@neetru/cli 2.2.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.
- package/dist/commands/ai.js +82 -10
- package/dist/commands/ai.js.map +1 -1
- package/dist/commands/auth.d.ts +19 -0
- package/dist/commands/auth.js +203 -0
- package/dist/commands/auth.js.map +1 -0
- package/dist/commands/deploy.js +8 -8
- package/dist/commands/deployments.d.ts +5 -5
- package/dist/commands/deployments.js +32 -6
- package/dist/commands/deployments.js.map +1 -1
- package/dist/commands/products-db.d.ts +9 -9
- package/dist/commands/products-db.js +84 -19
- package/dist/commands/products-db.js.map +1 -1
- package/dist/commands/products.d.ts +2 -2
- package/dist/commands/products.js +8 -6
- package/dist/commands/products.js.map +1 -1
- package/dist/commands/schema.d.ts +25 -0
- package/dist/commands/schema.js +321 -0
- package/dist/commands/schema.js.map +1 -0
- package/dist/commands/servers.d.ts +5 -5
- package/dist/commands/servers.js +25 -17
- package/dist/commands/servers.js.map +1 -1
- package/dist/commands/status.js +3 -2
- package/dist/commands/status.js.map +1 -1
- package/dist/commands/tenants.d.ts +14 -14
- package/dist/commands/tenants.js +62 -30
- package/dist/commands/tenants.js.map +1 -1
- package/dist/commands/ui.d.ts +1 -0
- package/dist/commands/ui.js +454 -0
- package/dist/commands/ui.js.map +1 -0
- package/dist/commands/workspaces.d.ts +9 -9
- package/dist/commands/workspaces.js +66 -31
- package/dist/commands/workspaces.js.map +1 -1
- package/dist/index.js +226 -165
- package/dist/index.js.map +1 -1
- package/dist/lib/ai/auth-discovery.d.ts +26 -0
- package/dist/lib/ai/auth-discovery.js +256 -0
- package/dist/lib/ai/auth-discovery.js.map +1 -0
- package/dist/lib/ai/orchestrator.d.ts +25 -0
- package/dist/lib/ai/orchestrator.js +190 -28
- package/dist/lib/ai/orchestrator.js.map +1 -1
- package/dist/lib/config-schema.d.ts +18 -18
- package/dist/lib/pickers.d.ts +123 -0
- package/dist/lib/pickers.js +336 -0
- package/dist/lib/pickers.js.map +1 -0
- package/dist/lib/schema-cache.d.ts +87 -0
- package/dist/lib/schema-cache.js +134 -0
- package/dist/lib/schema-cache.js.map +1 -0
- package/package.json +1 -1
|
@@ -2,34 +2,80 @@ import Anthropic from '@anthropic-ai/sdk';
|
|
|
2
2
|
import OpenAI from 'openai';
|
|
3
3
|
import { config } from '../config.js';
|
|
4
4
|
import { NEETRU_SYSTEM_CONTEXT, loadProjectContext } from './context.js';
|
|
5
|
+
import { discoveredKeys } from './auth-discovery.js';
|
|
5
6
|
import { log } from '../../utils/logger.js';
|
|
7
|
+
/**
|
|
8
|
+
* Resolve a apiKey efetiva pra um provider. Prioridade:
|
|
9
|
+
* 1. Config local do Neetru (set via `neetru config set`).
|
|
10
|
+
* 2. Cred descoberta de Claude Code / Codex / Gemini CLIs concorrentes
|
|
11
|
+
* (auth-discovery).
|
|
12
|
+
*
|
|
13
|
+
* Não faz lookup repetido — caller pode chamar várias vezes sem custo
|
|
14
|
+
* (discovery é cacheada via module-level evaluation no detect call mas
|
|
15
|
+
* aqui rechamamos pra refletir mudanças em runtime).
|
|
16
|
+
*/
|
|
17
|
+
function resolveKey(provider) {
|
|
18
|
+
const configKey = provider === 'anthropic'
|
|
19
|
+
? 'anthropicApiKey'
|
|
20
|
+
: provider === 'openai'
|
|
21
|
+
? 'openaiApiKey'
|
|
22
|
+
: 'geminiApiKey';
|
|
23
|
+
const localKey = config.get(configKey);
|
|
24
|
+
if (localKey)
|
|
25
|
+
return localKey;
|
|
26
|
+
return discoveredKeys()[provider];
|
|
27
|
+
}
|
|
6
28
|
/**
|
|
7
29
|
* Escolhe o modelo mais adequado para um dado tipo de tarefa.
|
|
8
|
-
*
|
|
9
|
-
*
|
|
30
|
+
*
|
|
31
|
+
* Heurísticas (em ordem):
|
|
32
|
+
* 1. Se user forçou um modelo (!= auto), respeita — desde que tenha cred.
|
|
33
|
+
* 2. Code generation pesado → OpenAI (gpt-4o codex-trained) se tiver.
|
|
34
|
+
* 3. Análise/arquitetura/raciocínio longo → Claude (sonnet 4.6).
|
|
35
|
+
* 4. Sumarização rápida / Q&A factual → Gemini (mais barato) se tiver.
|
|
36
|
+
* 5. Fallback: o primeiro provider com cred (claude > openai > gemini).
|
|
10
37
|
*/
|
|
11
|
-
function routeModel(input, preferred) {
|
|
12
|
-
|
|
13
|
-
|
|
38
|
+
export function routeModel(input, preferred) {
|
|
39
|
+
// Provedores efetivamente disponíveis (config OU discovery).
|
|
40
|
+
const available = {
|
|
41
|
+
claude: !!resolveKey('anthropic'),
|
|
42
|
+
openai: !!resolveKey('openai'),
|
|
43
|
+
gemini: !!resolveKey('gemini'),
|
|
44
|
+
};
|
|
45
|
+
if (preferred !== 'auto') {
|
|
46
|
+
if (preferred === 'claude' && available.claude)
|
|
47
|
+
return 'claude';
|
|
48
|
+
if (preferred === 'openai' && available.openai)
|
|
49
|
+
return 'openai';
|
|
50
|
+
if (preferred === 'gemini' && available.gemini)
|
|
51
|
+
return 'gemini';
|
|
52
|
+
// Pediu mas não tem cred — cai pra auto.
|
|
53
|
+
}
|
|
14
54
|
const lower = input.toLowerCase();
|
|
15
|
-
//
|
|
16
|
-
const isCodeGen =
|
|
17
|
-
|
|
18
|
-
lower.includes('escreva a função') ||
|
|
19
|
-
lower.includes('implemente');
|
|
20
|
-
const hasOpenAI = !!config.get('openaiApiKey');
|
|
21
|
-
if (isCodeGen && hasOpenAI)
|
|
55
|
+
// Code generation pesado → OpenAI
|
|
56
|
+
const isCodeGen = /\b(crie|gere|escreva|implemente|escreve|gera|cria)\s+(um|uma|o|a|essa|esse|esta|este)?\s*(componente|função|funcao|classe|módulo|modulo|arquivo|test|teste|endpoint|rota|hook|serviço|servico|api)\b/i.test(lower) || /^```|^class\s|^function\s|^const\s+\w+\s*=\s*\(/m.test(input);
|
|
57
|
+
if (isCodeGen && available.openai)
|
|
22
58
|
return 'openai';
|
|
23
|
-
|
|
59
|
+
// Sumarização rápida / Q&A factual → Gemini
|
|
60
|
+
const isQuickQa = /\b(o que é|o que e|defina|defina o|defina a|resuma|resume|sumariza|sumarize|que faz|para que serve)\b/i.test(lower) && input.length < 240;
|
|
61
|
+
if (isQuickQa && available.gemini)
|
|
62
|
+
return 'gemini';
|
|
63
|
+
// Default: Claude (arquitetura, análise, raciocínio).
|
|
64
|
+
if (available.claude)
|
|
65
|
+
return 'claude';
|
|
66
|
+
if (available.openai)
|
|
67
|
+
return 'openai';
|
|
68
|
+
if (available.gemini)
|
|
69
|
+
return 'gemini';
|
|
70
|
+
// Sem creds em lugar nenhum — joga erro descritivo. Caller pode oferecer
|
|
71
|
+
// `neetru auth setup` antes de tentar.
|
|
72
|
+
throw new Error('Nenhum provedor de IA configurado. Rode: neetru auth setup');
|
|
24
73
|
}
|
|
25
|
-
/**
|
|
26
|
-
* Stream de resposta via Claude (claude-sonnet-4-5 ou superior).
|
|
27
|
-
* Retorna o texto completo ao final.
|
|
28
|
-
*/
|
|
29
74
|
async function streamClaude(messages, systemExtra, onChunk) {
|
|
30
|
-
const apiKey =
|
|
31
|
-
if (!apiKey)
|
|
32
|
-
throw new Error('
|
|
75
|
+
const apiKey = resolveKey('anthropic');
|
|
76
|
+
if (!apiKey) {
|
|
77
|
+
throw new Error('Cred Claude/Anthropic ausente. Rode `neetru auth setup` ou `neetru config set anthropicApiKey <sk-ant-...>`');
|
|
78
|
+
}
|
|
33
79
|
const client = new Anthropic({ apiKey });
|
|
34
80
|
const system = [NEETRU_SYSTEM_CONTEXT, systemExtra].filter(Boolean).join('\n\n');
|
|
35
81
|
let full = '';
|
|
@@ -48,13 +94,11 @@ async function streamClaude(messages, systemExtra, onChunk) {
|
|
|
48
94
|
}
|
|
49
95
|
return full;
|
|
50
96
|
}
|
|
51
|
-
/**
|
|
52
|
-
* Stream de resposta via OpenAI (gpt-4o).
|
|
53
|
-
*/
|
|
54
97
|
async function streamOpenAI(messages, systemExtra, onChunk) {
|
|
55
|
-
const apiKey =
|
|
56
|
-
if (!apiKey)
|
|
57
|
-
throw new Error('
|
|
98
|
+
const apiKey = resolveKey('openai');
|
|
99
|
+
if (!apiKey) {
|
|
100
|
+
throw new Error('Cred OpenAI ausente. Rode `neetru auth setup` ou `neetru config set openaiApiKey <sk-...>`');
|
|
101
|
+
}
|
|
58
102
|
const client = new OpenAI({ apiKey });
|
|
59
103
|
const systemContent = [NEETRU_SYSTEM_CONTEXT, systemExtra].filter(Boolean).join('\n\n');
|
|
60
104
|
let full = '';
|
|
@@ -75,6 +119,88 @@ async function streamOpenAI(messages, systemExtra, onChunk) {
|
|
|
75
119
|
}
|
|
76
120
|
return full;
|
|
77
121
|
}
|
|
122
|
+
/**
|
|
123
|
+
* Stream via Gemini. Usa a REST API REST `streamGenerateContent` direto
|
|
124
|
+
* (sem dependência extra). Modelo: gemini-1.5-flash (rápido + barato).
|
|
125
|
+
*
|
|
126
|
+
* Cleanup: reader.cancel() + AbortController em finally — sem isso o body
|
|
127
|
+
* fica dangling em erros/cancellation (Codex MEDIUM 2026-05-16).
|
|
128
|
+
*/
|
|
129
|
+
async function streamGemini(messages, systemExtra, onChunk, signal) {
|
|
130
|
+
const apiKey = resolveKey('gemini');
|
|
131
|
+
if (!apiKey) {
|
|
132
|
+
throw new Error('Cred Gemini ausente. Rode `neetru auth setup` ou `neetru config set geminiApiKey <key>`');
|
|
133
|
+
}
|
|
134
|
+
const systemContent = [NEETRU_SYSTEM_CONTEXT, systemExtra].filter(Boolean).join('\n\n');
|
|
135
|
+
// Gemini API expects user/model roles (não assistant). Converte.
|
|
136
|
+
const contents = messages.map((m) => ({
|
|
137
|
+
role: m.role === 'assistant' ? 'model' : 'user',
|
|
138
|
+
parts: [{ text: m.content }],
|
|
139
|
+
}));
|
|
140
|
+
const url = `https://generativelanguage.googleapis.com/v1beta/models/gemini-1.5-flash:streamGenerateContent?alt=sse&key=${encodeURIComponent(apiKey)}`;
|
|
141
|
+
const ctrl = new AbortController();
|
|
142
|
+
// Encadeia signal externo (se fornecido) com o local.
|
|
143
|
+
if (signal) {
|
|
144
|
+
if (signal.aborted)
|
|
145
|
+
ctrl.abort();
|
|
146
|
+
else
|
|
147
|
+
signal.addEventListener('abort', () => ctrl.abort(), { once: true });
|
|
148
|
+
}
|
|
149
|
+
const resp = await fetch(url, {
|
|
150
|
+
method: 'POST',
|
|
151
|
+
headers: { 'content-type': 'application/json' },
|
|
152
|
+
body: JSON.stringify({
|
|
153
|
+
systemInstruction: { parts: [{ text: systemContent }] },
|
|
154
|
+
contents,
|
|
155
|
+
}),
|
|
156
|
+
signal: ctrl.signal,
|
|
157
|
+
});
|
|
158
|
+
if (!resp.ok || !resp.body) {
|
|
159
|
+
const txt = await resp.text().catch(() => '');
|
|
160
|
+
throw new Error(`Gemini API erro ${resp.status}: ${txt.slice(0, 200)}`);
|
|
161
|
+
}
|
|
162
|
+
const reader = resp.body.getReader();
|
|
163
|
+
const dec = new TextDecoder();
|
|
164
|
+
let buf = '';
|
|
165
|
+
let full = '';
|
|
166
|
+
try {
|
|
167
|
+
while (true) {
|
|
168
|
+
const { value, done } = await reader.read();
|
|
169
|
+
if (done)
|
|
170
|
+
break;
|
|
171
|
+
buf += dec.decode(value, { stream: true });
|
|
172
|
+
// SSE: linhas começando com "data: "
|
|
173
|
+
const lines = buf.split('\n');
|
|
174
|
+
buf = lines.pop() ?? '';
|
|
175
|
+
for (const line of lines) {
|
|
176
|
+
const m = line.match(/^data:\s*(.*)$/);
|
|
177
|
+
if (!m)
|
|
178
|
+
continue;
|
|
179
|
+
try {
|
|
180
|
+
const obj = JSON.parse(m[1]);
|
|
181
|
+
const txt = obj?.candidates?.[0]?.content?.parts?.[0]?.text;
|
|
182
|
+
if (typeof txt === 'string' && txt) {
|
|
183
|
+
onChunk(txt);
|
|
184
|
+
full += txt;
|
|
185
|
+
}
|
|
186
|
+
}
|
|
187
|
+
catch {
|
|
188
|
+
// ignora linha de keep-alive
|
|
189
|
+
}
|
|
190
|
+
}
|
|
191
|
+
}
|
|
192
|
+
}
|
|
193
|
+
finally {
|
|
194
|
+
// Libera o reader; idempotente — safe em erro, completion ou abort.
|
|
195
|
+
try {
|
|
196
|
+
await reader.cancel();
|
|
197
|
+
}
|
|
198
|
+
catch {
|
|
199
|
+
// reader já fechado, ignora.
|
|
200
|
+
}
|
|
201
|
+
}
|
|
202
|
+
return full;
|
|
203
|
+
}
|
|
78
204
|
/**
|
|
79
205
|
* Orquestrador principal: decide o modelo, injeta contexto Neetru,
|
|
80
206
|
* faz stream da resposta e retorna o texto completo.
|
|
@@ -84,9 +210,45 @@ export async function chat(messages, onChunk, preferred) {
|
|
|
84
210
|
const model = routeModel(lastUserMsg, preferred ?? config.get('defaultModel') ?? 'auto');
|
|
85
211
|
const projectCtx = await loadProjectContext();
|
|
86
212
|
log.dim(`modelo: ${model}`);
|
|
87
|
-
if (model === 'openai')
|
|
213
|
+
if (model === 'openai')
|
|
88
214
|
return streamOpenAI(messages, projectCtx, onChunk);
|
|
89
|
-
|
|
215
|
+
if (model === 'gemini')
|
|
216
|
+
return streamGemini(messages, projectCtx, onChunk);
|
|
90
217
|
return streamClaude(messages, projectCtx, onChunk);
|
|
91
218
|
}
|
|
219
|
+
/**
|
|
220
|
+
* Spawn N agents concorrentes pra mesma pergunta. Útil pra "team mode":
|
|
221
|
+
* pega N opiniões e o caller decide o que fazer. Retorna array com
|
|
222
|
+
* {model, response} pra cada um.
|
|
223
|
+
*
|
|
224
|
+
* Limite: spawn só até a quantidade de providers com cred. Se pedir 5 mas
|
|
225
|
+
* só tem 2 providers configurados, roda 2.
|
|
226
|
+
*/
|
|
227
|
+
export async function chatParallel(prompt, systemExtra) {
|
|
228
|
+
const targets = [];
|
|
229
|
+
if (resolveKey('anthropic'))
|
|
230
|
+
targets.push('claude');
|
|
231
|
+
if (resolveKey('openai'))
|
|
232
|
+
targets.push('openai');
|
|
233
|
+
if (resolveKey('gemini'))
|
|
234
|
+
targets.push('gemini');
|
|
235
|
+
if (targets.length === 0) {
|
|
236
|
+
throw new Error('Nenhum provedor configurado. Rode: neetru auth setup');
|
|
237
|
+
}
|
|
238
|
+
const messages = [{ role: 'user', content: prompt }];
|
|
239
|
+
const noop = () => { };
|
|
240
|
+
const results = await Promise.allSettled(targets.map(async (m) => {
|
|
241
|
+
let response = '';
|
|
242
|
+
if (m === 'claude')
|
|
243
|
+
response = await streamClaude(messages, systemExtra, noop);
|
|
244
|
+
else if (m === 'openai')
|
|
245
|
+
response = await streamOpenAI(messages, systemExtra, noop);
|
|
246
|
+
else
|
|
247
|
+
response = await streamGemini(messages, systemExtra, noop);
|
|
248
|
+
return { model: m, response };
|
|
249
|
+
}));
|
|
250
|
+
return results.map((r, i) => r.status === 'fulfilled'
|
|
251
|
+
? { model: targets[i], response: r.value.response, ok: true }
|
|
252
|
+
: { model: targets[i], response: '', ok: false, error: String(r.reason?.message ?? r.reason) });
|
|
253
|
+
}
|
|
92
254
|
//# sourceMappingURL=orchestrator.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"orchestrator.js","sourceRoot":"","sources":["../../../src/lib/ai/orchestrator.ts"],"names":[],"mappings":"AAAA,OAAO,SAAS,MAAM,mBAAmB,CAAC;AAC1C,OAAO,MAAM,MAAM,QAAQ,CAAC;AAC5B,OAAO,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AACtC,OAAO,EAAE,qBAAqB,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC;AACzE,OAAO,EAAE,GAAG,EAAE,MAAM,uBAAuB,CAAC;AAS5C
|
|
1
|
+
{"version":3,"file":"orchestrator.js","sourceRoot":"","sources":["../../../src/lib/ai/orchestrator.ts"],"names":[],"mappings":"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"}
|
|
@@ -13,17 +13,17 @@ export declare const publishBlockSchema: z.ZodObject<{
|
|
|
13
13
|
ctaLabel: z.ZodOptional<z.ZodString>;
|
|
14
14
|
}, "strip", z.ZodTypeAny, {
|
|
15
15
|
description: string;
|
|
16
|
-
status: "
|
|
16
|
+
status: "beta" | "soon" | "live";
|
|
17
17
|
tagline: string;
|
|
18
|
-
iconKey: "spark" | "
|
|
18
|
+
iconKey: "spark" | "activity" | "factory" | "chart" | "shield" | "target" | "trending";
|
|
19
19
|
order?: number | undefined;
|
|
20
20
|
ctaHref?: string | undefined;
|
|
21
21
|
ctaLabel?: string | undefined;
|
|
22
22
|
}, {
|
|
23
23
|
description: string;
|
|
24
|
-
status: "
|
|
24
|
+
status: "beta" | "soon" | "live";
|
|
25
25
|
tagline: string;
|
|
26
|
-
iconKey: "spark" | "
|
|
26
|
+
iconKey: "spark" | "activity" | "factory" | "chart" | "shield" | "target" | "trending";
|
|
27
27
|
order?: number | undefined;
|
|
28
28
|
ctaHref?: string | undefined;
|
|
29
29
|
ctaLabel?: string | undefined;
|
|
@@ -54,17 +54,17 @@ export declare const neetruConfigSchema: z.ZodObject<{
|
|
|
54
54
|
ctaLabel: z.ZodOptional<z.ZodString>;
|
|
55
55
|
}, "strip", z.ZodTypeAny, {
|
|
56
56
|
description: string;
|
|
57
|
-
status: "
|
|
57
|
+
status: "beta" | "soon" | "live";
|
|
58
58
|
tagline: string;
|
|
59
|
-
iconKey: "spark" | "
|
|
59
|
+
iconKey: "spark" | "activity" | "factory" | "chart" | "shield" | "target" | "trending";
|
|
60
60
|
order?: number | undefined;
|
|
61
61
|
ctaHref?: string | undefined;
|
|
62
62
|
ctaLabel?: string | undefined;
|
|
63
63
|
}, {
|
|
64
64
|
description: string;
|
|
65
|
-
status: "
|
|
65
|
+
status: "beta" | "soon" | "live";
|
|
66
66
|
tagline: string;
|
|
67
|
-
iconKey: "spark" | "
|
|
67
|
+
iconKey: "spark" | "activity" | "factory" | "chart" | "shield" | "target" | "trending";
|
|
68
68
|
order?: number | undefined;
|
|
69
69
|
ctaHref?: string | undefined;
|
|
70
70
|
ctaLabel?: string | undefined;
|
|
@@ -84,16 +84,16 @@ export declare const neetruConfigSchema: z.ZodObject<{
|
|
|
84
84
|
slug: string;
|
|
85
85
|
runtime: "nextjs" | "node-api";
|
|
86
86
|
$schema?: string | undefined;
|
|
87
|
+
tenantId?: string | undefined;
|
|
87
88
|
publish?: {
|
|
88
89
|
description: string;
|
|
89
|
-
status: "
|
|
90
|
+
status: "beta" | "soon" | "live";
|
|
90
91
|
tagline: string;
|
|
91
|
-
iconKey: "spark" | "
|
|
92
|
+
iconKey: "spark" | "activity" | "factory" | "chart" | "shield" | "target" | "trending";
|
|
92
93
|
order?: number | undefined;
|
|
93
94
|
ctaHref?: string | undefined;
|
|
94
95
|
ctaLabel?: string | undefined;
|
|
95
96
|
} | undefined;
|
|
96
|
-
tenantId?: string | undefined;
|
|
97
97
|
deploy?: z.objectOutputType<{
|
|
98
98
|
region: z.ZodOptional<z.ZodString>;
|
|
99
99
|
serviceName: z.ZodOptional<z.ZodString>;
|
|
@@ -103,16 +103,16 @@ export declare const neetruConfigSchema: z.ZodObject<{
|
|
|
103
103
|
slug: string;
|
|
104
104
|
runtime: "nextjs" | "node-api";
|
|
105
105
|
$schema?: string | undefined;
|
|
106
|
+
tenantId?: string | undefined;
|
|
106
107
|
publish?: {
|
|
107
108
|
description: string;
|
|
108
|
-
status: "
|
|
109
|
+
status: "beta" | "soon" | "live";
|
|
109
110
|
tagline: string;
|
|
110
|
-
iconKey: "spark" | "
|
|
111
|
+
iconKey: "spark" | "activity" | "factory" | "chart" | "shield" | "target" | "trending";
|
|
111
112
|
order?: number | undefined;
|
|
112
113
|
ctaHref?: string | undefined;
|
|
113
114
|
ctaLabel?: string | undefined;
|
|
114
115
|
} | undefined;
|
|
115
|
-
tenantId?: string | undefined;
|
|
116
116
|
deploy?: z.objectInputType<{
|
|
117
117
|
region: z.ZodOptional<z.ZodString>;
|
|
118
118
|
serviceName: z.ZodOptional<z.ZodString>;
|
|
@@ -134,22 +134,22 @@ export declare const catalogUpsertPayloadSchema: z.ZodObject<{
|
|
|
134
134
|
}, "strip", z.ZodTypeAny, {
|
|
135
135
|
description: string;
|
|
136
136
|
name: string;
|
|
137
|
-
status: "
|
|
137
|
+
status: "beta" | "soon" | "live";
|
|
138
138
|
slug: string;
|
|
139
139
|
published: boolean;
|
|
140
140
|
tagline: string;
|
|
141
|
-
iconKey: "spark" | "
|
|
141
|
+
iconKey: "spark" | "activity" | "factory" | "chart" | "shield" | "target" | "trending";
|
|
142
142
|
order: number;
|
|
143
143
|
ctaHref?: string | undefined;
|
|
144
144
|
ctaLabel?: string | undefined;
|
|
145
145
|
}, {
|
|
146
146
|
description: string;
|
|
147
147
|
name: string;
|
|
148
|
-
status: "
|
|
148
|
+
status: "beta" | "soon" | "live";
|
|
149
149
|
slug: string;
|
|
150
150
|
published: boolean;
|
|
151
151
|
tagline: string;
|
|
152
|
-
iconKey: "spark" | "
|
|
152
|
+
iconKey: "spark" | "activity" | "factory" | "chart" | "shield" | "target" | "trending";
|
|
153
153
|
order: number;
|
|
154
154
|
ctaHref?: string | undefined;
|
|
155
155
|
ctaLabel?: string | undefined;
|
|
@@ -0,0 +1,123 @@
|
|
|
1
|
+
export interface InteractivityOptions {
|
|
2
|
+
json?: boolean;
|
|
3
|
+
nonInteractive?: boolean;
|
|
4
|
+
}
|
|
5
|
+
export declare function isInteractive(opts?: InteractivityOptions): boolean;
|
|
6
|
+
interface ResolveOptions<T> extends InteractivityOptions {
|
|
7
|
+
fromFlag?: string;
|
|
8
|
+
fetcher: () => Promise<T[]>;
|
|
9
|
+
format: (item: T) => string;
|
|
10
|
+
getId: (item: T) => string;
|
|
11
|
+
message: string;
|
|
12
|
+
emptyError: string;
|
|
13
|
+
flagName: string;
|
|
14
|
+
allowManual?: boolean;
|
|
15
|
+
}
|
|
16
|
+
export declare function resolveOrPick<T>(opts: ResolveOptions<T>): Promise<string>;
|
|
17
|
+
export declare function promptText(message: string, opts?: InteractivityOptions & {
|
|
18
|
+
default?: string;
|
|
19
|
+
required?: boolean;
|
|
20
|
+
validate?: (value: string) => true | string;
|
|
21
|
+
}): Promise<string>;
|
|
22
|
+
export declare function promptChoice<T extends string>(message: string, choices: Array<{
|
|
23
|
+
name: string;
|
|
24
|
+
value: T;
|
|
25
|
+
}>, opts?: InteractivityOptions & {
|
|
26
|
+
default?: T;
|
|
27
|
+
}): Promise<T>;
|
|
28
|
+
export declare function resolveCustomer(opts?: InteractivityOptions & {
|
|
29
|
+
fromFlag?: string;
|
|
30
|
+
}): Promise<string>;
|
|
31
|
+
export interface ProductSummary {
|
|
32
|
+
id: string;
|
|
33
|
+
slug?: string | null;
|
|
34
|
+
name?: string | null;
|
|
35
|
+
status?: string | null;
|
|
36
|
+
ownerTeam?: string | null;
|
|
37
|
+
}
|
|
38
|
+
export declare function listProducts(token: string): Promise<ProductSummary[]>;
|
|
39
|
+
export interface TenantSummary {
|
|
40
|
+
id: string;
|
|
41
|
+
name?: string | null;
|
|
42
|
+
slug?: string | null;
|
|
43
|
+
status?: string | null;
|
|
44
|
+
customerId?: string | null;
|
|
45
|
+
productId?: string | null;
|
|
46
|
+
environmentId?: string | null;
|
|
47
|
+
primaryDomain?: string | null;
|
|
48
|
+
}
|
|
49
|
+
export declare function listTenants(token: string, filters?: {
|
|
50
|
+
product?: string;
|
|
51
|
+
status?: string;
|
|
52
|
+
}): Promise<TenantSummary[]>;
|
|
53
|
+
export type WorkspaceSummary = TenantSummary & {
|
|
54
|
+
temporaryDomain?: string | null;
|
|
55
|
+
};
|
|
56
|
+
export declare function listWorkspaces(token: string, filters?: {
|
|
57
|
+
product?: string;
|
|
58
|
+
status?: string;
|
|
59
|
+
}): Promise<WorkspaceSummary[]>;
|
|
60
|
+
export interface ServerSummary {
|
|
61
|
+
id: string;
|
|
62
|
+
name?: string | null;
|
|
63
|
+
provider?: string | null;
|
|
64
|
+
region?: string | null;
|
|
65
|
+
status?: string | null;
|
|
66
|
+
ipAddress?: string | null;
|
|
67
|
+
ip?: string | null;
|
|
68
|
+
availableRamMb?: number | null;
|
|
69
|
+
totalRamMb?: number | null;
|
|
70
|
+
}
|
|
71
|
+
export declare function listServers(token: string, filters?: {
|
|
72
|
+
status?: string;
|
|
73
|
+
capacity?: boolean;
|
|
74
|
+
}): Promise<ServerSummary[]>;
|
|
75
|
+
export interface ProductDatabaseSummary {
|
|
76
|
+
id: string;
|
|
77
|
+
productId: string;
|
|
78
|
+
label?: string;
|
|
79
|
+
engine?: string;
|
|
80
|
+
environment?: string;
|
|
81
|
+
status?: string;
|
|
82
|
+
serverId?: string | null;
|
|
83
|
+
}
|
|
84
|
+
export declare function listProductDatabases(token: string, filters?: {
|
|
85
|
+
productId?: string;
|
|
86
|
+
engine?: string;
|
|
87
|
+
status?: string;
|
|
88
|
+
}): Promise<ProductDatabaseSummary[]>;
|
|
89
|
+
export declare function productLabel(product: ProductSummary): string;
|
|
90
|
+
export declare function pickProductId(token: string, opts?: InteractivityOptions & {
|
|
91
|
+
fromFlag?: string;
|
|
92
|
+
message?: string;
|
|
93
|
+
}): Promise<string>;
|
|
94
|
+
export declare function pickProductSlug(token: string, opts?: InteractivityOptions & {
|
|
95
|
+
fromFlag?: string;
|
|
96
|
+
message?: string;
|
|
97
|
+
}): Promise<string>;
|
|
98
|
+
export declare function pickTenant(token: string, opts?: InteractivityOptions & {
|
|
99
|
+
fromFlag?: string;
|
|
100
|
+
product?: string;
|
|
101
|
+
status?: string;
|
|
102
|
+
message?: string;
|
|
103
|
+
}): Promise<string>;
|
|
104
|
+
export declare function pickWorkspace(token: string, opts?: InteractivityOptions & {
|
|
105
|
+
fromFlag?: string;
|
|
106
|
+
product?: string;
|
|
107
|
+
status?: string;
|
|
108
|
+
message?: string;
|
|
109
|
+
}): Promise<string>;
|
|
110
|
+
export declare function pickServer(token: string, opts?: InteractivityOptions & {
|
|
111
|
+
fromFlag?: string;
|
|
112
|
+
status?: string;
|
|
113
|
+
capacity?: boolean;
|
|
114
|
+
message?: string;
|
|
115
|
+
}): Promise<string>;
|
|
116
|
+
export declare function pickDatabase(token: string, opts?: InteractivityOptions & {
|
|
117
|
+
fromFlag?: string;
|
|
118
|
+
productId?: string;
|
|
119
|
+
engine?: string;
|
|
120
|
+
status?: string;
|
|
121
|
+
message?: string;
|
|
122
|
+
}): Promise<string>;
|
|
123
|
+
export {};
|