@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.
Files changed (48) hide show
  1. package/dist/commands/ai.js +82 -10
  2. package/dist/commands/ai.js.map +1 -1
  3. package/dist/commands/auth.d.ts +19 -0
  4. package/dist/commands/auth.js +203 -0
  5. package/dist/commands/auth.js.map +1 -0
  6. package/dist/commands/deploy.js +8 -8
  7. package/dist/commands/deployments.d.ts +5 -5
  8. package/dist/commands/deployments.js +32 -6
  9. package/dist/commands/deployments.js.map +1 -1
  10. package/dist/commands/products-db.d.ts +9 -9
  11. package/dist/commands/products-db.js +84 -19
  12. package/dist/commands/products-db.js.map +1 -1
  13. package/dist/commands/products.d.ts +2 -2
  14. package/dist/commands/products.js +8 -6
  15. package/dist/commands/products.js.map +1 -1
  16. package/dist/commands/schema.d.ts +25 -0
  17. package/dist/commands/schema.js +321 -0
  18. package/dist/commands/schema.js.map +1 -0
  19. package/dist/commands/servers.d.ts +5 -5
  20. package/dist/commands/servers.js +25 -17
  21. package/dist/commands/servers.js.map +1 -1
  22. package/dist/commands/status.js +3 -2
  23. package/dist/commands/status.js.map +1 -1
  24. package/dist/commands/tenants.d.ts +14 -14
  25. package/dist/commands/tenants.js +62 -30
  26. package/dist/commands/tenants.js.map +1 -1
  27. package/dist/commands/ui.d.ts +1 -0
  28. package/dist/commands/ui.js +454 -0
  29. package/dist/commands/ui.js.map +1 -0
  30. package/dist/commands/workspaces.d.ts +9 -9
  31. package/dist/commands/workspaces.js +66 -31
  32. package/dist/commands/workspaces.js.map +1 -1
  33. package/dist/index.js +226 -165
  34. package/dist/index.js.map +1 -1
  35. package/dist/lib/ai/auth-discovery.d.ts +26 -0
  36. package/dist/lib/ai/auth-discovery.js +256 -0
  37. package/dist/lib/ai/auth-discovery.js.map +1 -0
  38. package/dist/lib/ai/orchestrator.d.ts +25 -0
  39. package/dist/lib/ai/orchestrator.js +190 -28
  40. package/dist/lib/ai/orchestrator.js.map +1 -1
  41. package/dist/lib/config-schema.d.ts +18 -18
  42. package/dist/lib/pickers.d.ts +123 -0
  43. package/dist/lib/pickers.js +336 -0
  44. package/dist/lib/pickers.js.map +1 -0
  45. package/dist/lib/schema-cache.d.ts +87 -0
  46. package/dist/lib/schema-cache.js +134 -0
  47. package/dist/lib/schema-cache.js.map +1 -0
  48. 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
- * "auto" usa Claude por padrão — mais adequado para raciocínio de
9
- * arquitetura e análise de código. Expande conforme as chaves configuradas.
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
- if (preferred !== 'auto')
13
- return preferred;
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
- // Tarefas de geração pura de código → OpenAI (se disponível)
16
- const isCodeGen = lower.includes('crie um componente') ||
17
- lower.includes('gere o código') ||
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
- return 'claude'; // padrão: Claude para arquitetura, análise, raciocínio
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 = config.get('anthropicApiKey');
31
- if (!apiKey)
32
- throw new Error('anthropicApiKey não configurada. Execute: neetru config set anthropicApiKey <sk-ant-...>');
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 = config.get('openaiApiKey');
56
- if (!apiKey)
57
- throw new Error('openaiApiKey não configurada. Execute: neetru config set openaiApiKey <sk-...>');
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":"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"}
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,cAAc,EAAiB,MAAM,qBAAqB,CAAC;AACpE,OAAO,EAAE,GAAG,EAAE,MAAM,uBAAuB,CAAC;AAS5C;;;;;;;;;GASG;AACH,SAAS,UAAU,CAAC,QAAkB;IACpC,MAAM,SAAS,GACb,QAAQ,KAAK,WAAW;QACtB,CAAC,CAAC,iBAAiB;QACnB,CAAC,CAAC,QAAQ,KAAK,QAAQ;YACrB,CAAC,CAAC,cAAc;YAChB,CAAC,CAAC,cAAc,CAAC;IACvB,MAAM,QAAQ,GAAG,MAAM,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;IACvC,IAAI,QAAQ;QAAE,OAAO,QAAQ,CAAC;IAC9B,OAAO,cAAc,EAAE,CAAC,QAAQ,CAAC,CAAC;AACpC,CAAC;AAED;;;;;;;;;GASG;AACH,MAAM,UAAU,UAAU,CAAC,KAAa,EAAE,SAAkB;IAC1D,6DAA6D;IAC7D,MAAM,SAAS,GAAoD;QACjE,MAAM,EAAE,CAAC,CAAC,UAAU,CAAC,WAAW,CAAC;QACjC,MAAM,EAAE,CAAC,CAAC,UAAU,CAAC,QAAQ,CAAC;QAC9B,MAAM,EAAE,CAAC,CAAC,UAAU,CAAC,QAAQ,CAAC;KAC/B,CAAC;IAEF,IAAI,SAAS,KAAK,MAAM,EAAE,CAAC;QACzB,IAAI,SAAS,KAAK,QAAQ,IAAI,SAAS,CAAC,MAAM;YAAE,OAAO,QAAQ,CAAC;QAChE,IAAI,SAAS,KAAK,QAAQ,IAAI,SAAS,CAAC,MAAM;YAAE,OAAO,QAAQ,CAAC;QAChE,IAAI,SAAS,KAAK,QAAQ,IAAI,SAAS,CAAC,MAAM;YAAE,OAAO,QAAQ,CAAC;QAChE,yCAAyC;IAC3C,CAAC;IAED,MAAM,KAAK,GAAG,KAAK,CAAC,WAAW,EAAE,CAAC;IAElC,kCAAkC;IAClC,MAAM,SAAS,GACb,uMAAuM,CAAC,IAAI,CAC1M,KAAK,CACN,IAAI,kDAAkD,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACtE,IAAI,SAAS,IAAI,SAAS,CAAC,MAAM;QAAE,OAAO,QAAQ,CAAC;IAEnD,4CAA4C;IAC5C,MAAM,SAAS,GACb,wGAAwG,CAAC,IAAI,CAC3G,KAAK,CACN,IAAI,KAAK,CAAC,MAAM,GAAG,GAAG,CAAC;IAC1B,IAAI,SAAS,IAAI,SAAS,CAAC,MAAM;QAAE,OAAO,QAAQ,CAAC;IAEnD,sDAAsD;IACtD,IAAI,SAAS,CAAC,MAAM;QAAE,OAAO,QAAQ,CAAC;IACtC,IAAI,SAAS,CAAC,MAAM;QAAE,OAAO,QAAQ,CAAC;IACtC,IAAI,SAAS,CAAC,MAAM;QAAE,OAAO,QAAQ,CAAC;IAEtC,yEAAyE;IACzE,uCAAuC;IACvC,MAAM,IAAI,KAAK,CACb,4DAA4D,CAC7D,CAAC;AACJ,CAAC;AAED,KAAK,UAAU,YAAY,CACzB,QAAmB,EACnB,WAAmB,EACnB,OAAgC;IAEhC,MAAM,MAAM,GAAG,UAAU,CAAC,WAAW,CAAC,CAAC;IACvC,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,MAAM,IAAI,KAAK,CACb,6GAA6G,CAC9G,CAAC;IACJ,CAAC;IAED,MAAM,MAAM,GAAG,IAAI,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC;IAEzC,MAAM,MAAM,GAAG,CAAC,qBAAqB,EAAE,WAAW,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IAEjF,IAAI,IAAI,GAAG,EAAE,CAAC;IACd,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC;QAC1C,KAAK,EAAE,mBAAmB;QAC1B,UAAU,EAAE,IAAI;QAChB,MAAM;QACN,QAAQ,EAAE,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC;KACtE,CAAC,CAAC;IAEH,IAAI,KAAK,EAAE,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;QACjC,IACE,KAAK,CAAC,IAAI,KAAK,qBAAqB;YACpC,KAAK,CAAC,KAAK,CAAC,IAAI,KAAK,YAAY,EACjC,CAAC;YACD,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YAC1B,IAAI,IAAI,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC;QAC3B,CAAC;IACH,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC;AAED,KAAK,UAAU,YAAY,CACzB,QAAmB,EACnB,WAAmB,EACnB,OAAgC;IAEhC,MAAM,MAAM,GAAG,UAAU,CAAC,QAAQ,CAAC,CAAC;IACpC,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,MAAM,IAAI,KAAK,CACb,4FAA4F,CAC7F,CAAC;IACJ,CAAC;IAED,MAAM,MAAM,GAAG,IAAI,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC;IAEtC,MAAM,aAAa,GAAG,CAAC,qBAAqB,EAAE,WAAW,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IAExF,IAAI,IAAI,GAAG,EAAE,CAAC;IACd,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC;QAClD,KAAK,EAAE,QAAQ;QACf,MAAM,EAAE,IAAI;QACZ,QAAQ,EAAE;YACR,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,aAAa,EAAE;YAC1C,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,IAA4B,EAAE,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC;SACvF;KACF,CAAC,CAAC;IAEH,IAAI,KAAK,EAAE,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;QACjC,MAAM,IAAI,GAAG,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,OAAO,IAAI,EAAE,CAAC;QACpD,IAAI,IAAI,EAAE,CAAC;YACT,OAAO,CAAC,IAAI,CAAC,CAAC;YACd,IAAI,IAAI,IAAI,CAAC;QACf,CAAC;IACH,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;;;;;GAMG;AACH,KAAK,UAAU,YAAY,CACzB,QAAmB,EACnB,WAAmB,EACnB,OAAgC,EAChC,MAAoB;IAEpB,MAAM,MAAM,GAAG,UAAU,CAAC,QAAQ,CAAC,CAAC;IACpC,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,MAAM,IAAI,KAAK,CACb,yFAAyF,CAC1F,CAAC;IACJ,CAAC;IAED,MAAM,aAAa,GAAG,CAAC,qBAAqB,EAAE,WAAW,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IAExF,iEAAiE;IACjE,MAAM,QAAQ,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QACpC,IAAI,EAAE,CAAC,CAAC,IAAI,KAAK,WAAW,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM;QAC/C,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC;KAC7B,CAAC,CAAC,CAAC;IAEJ,MAAM,GAAG,GAAG,8GAA8G,kBAAkB,CAAC,MAAM,CAAC,EAAE,CAAC;IACvJ,MAAM,IAAI,GAAG,IAAI,eAAe,EAAE,CAAC;IACnC,sDAAsD;IACtD,IAAI,MAAM,EAAE,CAAC;QACX,IAAI,MAAM,CAAC,OAAO;YAAE,IAAI,CAAC,KAAK,EAAE,CAAC;;YAC5B,MAAM,CAAC,gBAAgB,CAAC,OAAO,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,KAAK,EAAE,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;IAC5E,CAAC;IACD,MAAM,IAAI,GAAG,MAAM,KAAK,CAAC,GAAG,EAAE;QAC5B,MAAM,EAAE,MAAM;QACd,OAAO,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE;QAC/C,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC;YACnB,iBAAiB,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,aAAa,EAAE,CAAC,EAAE;YACvD,QAAQ;SACT,CAAC;QACF,MAAM,EAAE,IAAI,CAAC,MAAM;KACpB,CAAC,CAAC;IAEH,IAAI,CAAC,IAAI,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;QAC3B,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC;QAC9C,MAAM,IAAI,KAAK,CAAC,mBAAmB,IAAI,CAAC,MAAM,KAAK,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC;IAC1E,CAAC;IAED,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC;IACrC,MAAM,GAAG,GAAG,IAAI,WAAW,EAAE,CAAC;IAC9B,IAAI,GAAG,GAAG,EAAE,CAAC;IACb,IAAI,IAAI,GAAG,EAAE,CAAC;IACd,IAAI,CAAC;QACH,OAAO,IAAI,EAAE,CAAC;YACZ,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,MAAM,MAAM,CAAC,IAAI,EAAE,CAAC;YAC5C,IAAI,IAAI;gBAAE,MAAM;YAChB,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,KAAK,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC;YAC3C,qCAAqC;YACrC,MAAM,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YAC9B,GAAG,GAAG,KAAK,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC;YACxB,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;gBACzB,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,gBAAgB,CAAC,CAAC;gBACvC,IAAI,CAAC,CAAC;oBAAE,SAAS;gBACjB,IAAI,CAAC;oBACH,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;oBAC7B,MAAM,GAAG,GAAG,GAAG,EAAE,UAAU,EAAE,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC;oBAC5D,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAI,GAAG,EAAE,CAAC;wBACnC,OAAO,CAAC,GAAG,CAAC,CAAC;wBACb,IAAI,IAAI,GAAG,CAAC;oBACd,CAAC;gBACH,CAAC;gBAAC,MAAM,CAAC;oBACP,6BAA6B;gBAC/B,CAAC;YACH,CAAC;QACH,CAAC;IACH,CAAC;YAAS,CAAC;QACT,oEAAoE;QACpE,IAAI,CAAC;YACH,MAAM,MAAM,CAAC,MAAM,EAAE,CAAC;QACxB,CAAC;QAAC,MAAM,CAAC;YACP,6BAA6B;QAC/B,CAAC;IACH,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,IAAI,CACxB,QAAmB,EACnB,OAAgC,EAChC,SAAmB;IAEnB,MAAM,WAAW,GAAG,CAAC,GAAG,QAAQ,CAAC,CAAC,OAAO,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,MAAM,CAAC,EAAE,OAAO,IAAI,EAAE,CAAC;IAC1F,MAAM,KAAK,GAAG,UAAU,CAAC,WAAW,EAAE,SAAS,IAAI,MAAM,CAAC,GAAG,CAAC,cAAc,CAAC,IAAI,MAAM,CAAC,CAAC;IAEzF,MAAM,UAAU,GAAG,MAAM,kBAAkB,EAAE,CAAC;IAE9C,GAAG,CAAC,GAAG,CAAC,WAAW,KAAK,EAAE,CAAC,CAAC;IAE5B,IAAI,KAAK,KAAK,QAAQ;QAAE,OAAO,YAAY,CAAC,QAAQ,EAAE,UAAU,EAAE,OAAO,CAAC,CAAC;IAC3E,IAAI,KAAK,KAAK,QAAQ;QAAE,OAAO,YAAY,CAAC,QAAQ,EAAE,UAAU,EAAE,OAAO,CAAC,CAAC;IAC3E,OAAO,YAAY,CAAC,QAAQ,EAAE,UAAU,EAAE,OAAO,CAAC,CAAC;AACrD,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,CAAC,KAAK,UAAU,YAAY,CAChC,MAAc,EACd,WAAmB;IAEnB,MAAM,OAAO,GAA0C,EAAE,CAAC;IAC1D,IAAI,UAAU,CAAC,WAAW,CAAC;QAAE,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IACpD,IAAI,UAAU,CAAC,QAAQ,CAAC;QAAE,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IACjD,IAAI,UAAU,CAAC,QAAQ,CAAC;QAAE,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IAEjD,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACzB,MAAM,IAAI,KAAK,CAAC,sDAAsD,CAAC,CAAC;IAC1E,CAAC;IAED,MAAM,QAAQ,GAAc,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC,CAAC;IAChE,MAAM,IAAI,GAAG,GAAG,EAAE,GAAE,CAAC,CAAC;IAEtB,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,UAAU,CACtC,OAAO,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC,EAAE,EAAE;QACtB,IAAI,QAAQ,GAAG,EAAE,CAAC;QAClB,IAAI,CAAC,KAAK,QAAQ;YAAE,QAAQ,GAAG,MAAM,YAAY,CAAC,QAAQ,EAAE,WAAW,EAAE,IAAI,CAAC,CAAC;aAC1E,IAAI,CAAC,KAAK,QAAQ;YAAE,QAAQ,GAAG,MAAM,YAAY,CAAC,QAAQ,EAAE,WAAW,EAAE,IAAI,CAAC,CAAC;;YAC/E,QAAQ,GAAG,MAAM,YAAY,CAAC,QAAQ,EAAE,WAAW,EAAE,IAAI,CAAC,CAAC;QAChE,OAAO,EAAE,KAAK,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC;IAChC,CAAC,CAAC,CACH,CAAC;IAEF,OAAO,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAC1B,CAAC,CAAC,MAAM,KAAK,WAAW;QACtB,CAAC,CAAC,EAAE,KAAK,EAAE,OAAO,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC,KAAK,CAAC,QAAQ,EAAE,EAAE,EAAE,IAAI,EAAE;QAC7D,CAAC,CAAC,EAAE,KAAK,EAAE,OAAO,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,EAAE,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC,CAAC,MAAM,EAAE,OAAO,IAAI,CAAC,CAAC,MAAM,CAAC,EAAE,CACjG,CAAC;AACJ,CAAC"}
@@ -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: "soon" | "beta" | "live";
16
+ status: "beta" | "soon" | "live";
17
17
  tagline: string;
18
- iconKey: "spark" | "target" | "activity" | "factory" | "chart" | "shield" | "trending";
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: "soon" | "beta" | "live";
24
+ status: "beta" | "soon" | "live";
25
25
  tagline: string;
26
- iconKey: "spark" | "target" | "activity" | "factory" | "chart" | "shield" | "trending";
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: "soon" | "beta" | "live";
57
+ status: "beta" | "soon" | "live";
58
58
  tagline: string;
59
- iconKey: "spark" | "target" | "activity" | "factory" | "chart" | "shield" | "trending";
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: "soon" | "beta" | "live";
65
+ status: "beta" | "soon" | "live";
66
66
  tagline: string;
67
- iconKey: "spark" | "target" | "activity" | "factory" | "chart" | "shield" | "trending";
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: "soon" | "beta" | "live";
90
+ status: "beta" | "soon" | "live";
90
91
  tagline: string;
91
- iconKey: "spark" | "target" | "activity" | "factory" | "chart" | "shield" | "trending";
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: "soon" | "beta" | "live";
109
+ status: "beta" | "soon" | "live";
109
110
  tagline: string;
110
- iconKey: "spark" | "target" | "activity" | "factory" | "chart" | "shield" | "trending";
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: "soon" | "beta" | "live";
137
+ status: "beta" | "soon" | "live";
138
138
  slug: string;
139
139
  published: boolean;
140
140
  tagline: string;
141
- iconKey: "spark" | "target" | "activity" | "factory" | "chart" | "shield" | "trending";
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: "soon" | "beta" | "live";
148
+ status: "beta" | "soon" | "live";
149
149
  slug: string;
150
150
  published: boolean;
151
151
  tagline: string;
152
- iconKey: "spark" | "target" | "activity" | "factory" | "chart" | "shield" | "trending";
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 {};