@neetru/cli 2.4.0 → 2.6.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.
@@ -2,7 +2,10 @@
2
2
  * `neetru logs` — visualiza logs do workspace.
3
3
  *
4
4
  * Endpoint: `GET /api/v1/cli/logs?clientId=<id>&limit=N&since=<ms>&level=<lvl>`.
5
- * Suporta tail contínuo (`-f`) com poll a cada 5s usando `after=<lastTs>`.
5
+ * Suporta tail contínuo (`-f`):
6
+ * - Modo SSE (Server-Sent Events): usa `/api/cli/v1/logs/stream` se disponível.
7
+ * - Modo polling NDJSON (fallback): poll a cada 5s com `after=<lastTs>`.
8
+ * Saída NDJSON (`--json`): imprime cada LogEntry como JSON line.
6
9
  */
7
10
  import chalk from 'chalk';
8
11
  import { apiRequest, CliApiError, CliNetworkError } from '../lib/api-client.js';
@@ -32,7 +35,11 @@ function colorLevel(level) {
32
35
  default: return chalk.blue;
33
36
  }
34
37
  }
35
- function printLog(entry) {
38
+ function printLog(entry, jsonMode) {
39
+ if (jsonMode) {
40
+ process.stdout.write(JSON.stringify(entry) + '\n');
41
+ return;
42
+ }
36
43
  const ts = new Date(entry.timestamp).toLocaleTimeString('pt-BR');
37
44
  const lvl = (entry.level ?? 'info').toUpperCase().padEnd(5);
38
45
  const color = colorLevel(entry.level);
@@ -59,6 +66,189 @@ async function fetchLogs(clientId, params) {
59
66
  const res = await apiRequest(`/api/v1/cli/logs?${qs.toString()}`);
60
67
  return res.logs ?? [];
61
68
  }
69
+ /**
70
+ * Modo SSE (Server-Sent Events) — mantém conexão aberta e recebe eventos
71
+ * em real-time via `/api/cli/v1/logs/stream`.
72
+ *
73
+ * Estratégia de reconexão: em erro de rede, tenta reconectar após 3s até
74
+ * 5 tentativas consecutivas, depois cai no polling NDJSON como fallback.
75
+ *
76
+ * @returns `true` se SSE foi encerrado por Ctrl+C, `false` se fallback necessário.
77
+ */
78
+ async function runSseFollow(clientId, opts, jsonMode) {
79
+ const apiKey = config.get('neetruApiKey');
80
+ const apiBase = config.get('apiBase') ?? 'https://api.neetru.com';
81
+ const qs = new URLSearchParams({ clientId });
82
+ if (opts.level)
83
+ qs.set('level', opts.level);
84
+ if (opts.product)
85
+ qs.set('product', opts.product);
86
+ if (opts.channel)
87
+ qs.set('channel', opts.channel);
88
+ if (opts.correlationId)
89
+ qs.set('correlationId', opts.correlationId);
90
+ const streamUrl = `${apiBase}/api/cli/v1/logs/stream?${qs.toString()}`;
91
+ let attempts = 0;
92
+ const MAX_RECONNECTS = 5;
93
+ let lastEventId;
94
+ // Graceful shutdown via Ctrl+C
95
+ let stopped = false;
96
+ const abortCtrl = new AbortController();
97
+ const onSigint = () => {
98
+ stopped = true;
99
+ abortCtrl.abort();
100
+ };
101
+ process.once('SIGINT', onSigint);
102
+ try {
103
+ while (!stopped && attempts <= MAX_RECONNECTS) {
104
+ try {
105
+ const headers = {
106
+ Authorization: `Bearer ${apiKey}`,
107
+ Accept: 'text/event-stream',
108
+ 'Cache-Control': 'no-cache',
109
+ };
110
+ if (lastEventId)
111
+ headers['Last-Event-ID'] = lastEventId;
112
+ const res = await fetch(streamUrl, {
113
+ headers,
114
+ signal: abortCtrl.signal,
115
+ });
116
+ if (res.status === 404 || res.status === 405) {
117
+ // Endpoint SSE não suportado — sinaliza fallback.
118
+ return false;
119
+ }
120
+ if (!res.ok) {
121
+ if (!jsonMode)
122
+ log.dim(` SSE: erro ${res.status} — retentando…`);
123
+ attempts++;
124
+ await new Promise((r) => setTimeout(r, 3000));
125
+ continue;
126
+ }
127
+ if (!res.body)
128
+ return false;
129
+ attempts = 0; // reset em conexão bem-sucedida
130
+ if (!jsonMode)
131
+ log.dim(' Conectado ao stream live… (Ctrl+C para sair)');
132
+ // Parse do protocolo SSE linha a linha.
133
+ const decoder = new TextDecoder();
134
+ let buffer = '';
135
+ const reader = res.body.getReader();
136
+ while (!stopped) {
137
+ const { done, value } = await reader.read();
138
+ if (done)
139
+ break;
140
+ buffer += decoder.decode(value, { stream: true });
141
+ const lines = buffer.split('\n');
142
+ buffer = lines.pop() ?? '';
143
+ let dataLines = [];
144
+ let eventId;
145
+ for (const line of lines) {
146
+ if (line.startsWith('id:')) {
147
+ eventId = line.slice(3).trim();
148
+ }
149
+ else if (line.startsWith('data:')) {
150
+ dataLines.push(line.slice(5).trim());
151
+ }
152
+ else if (line === '') {
153
+ // Dispatch do evento SSE completo.
154
+ if (dataLines.length > 0) {
155
+ const raw = dataLines.join('\n');
156
+ if (raw === '[DONE]') {
157
+ stopped = true;
158
+ break;
159
+ }
160
+ try {
161
+ const entry = JSON.parse(raw);
162
+ printLog(entry, jsonMode);
163
+ if (eventId)
164
+ lastEventId = eventId;
165
+ }
166
+ catch {
167
+ // Evento não-JSON (ping/keepalive) — ignorar silenciosamente.
168
+ }
169
+ }
170
+ dataLines = [];
171
+ eventId = undefined;
172
+ }
173
+ }
174
+ }
175
+ if (!stopped) {
176
+ // Conexão encerrada pelo servidor — reconectar.
177
+ attempts++;
178
+ if (!jsonMode)
179
+ log.dim(' Stream encerrado pelo servidor. Reconectando…');
180
+ await new Promise((r) => setTimeout(r, 2000));
181
+ }
182
+ }
183
+ catch (err) {
184
+ if (stopped)
185
+ break;
186
+ if (err instanceof Error && err.name === 'AbortError')
187
+ break;
188
+ attempts++;
189
+ if (attempts > MAX_RECONNECTS)
190
+ return false; // sinaliza fallback
191
+ if (!jsonMode)
192
+ log.dim(` Erro de rede no stream (tentativa ${attempts}/${MAX_RECONNECTS})…`);
193
+ await new Promise((r) => setTimeout(r, 3000));
194
+ }
195
+ }
196
+ }
197
+ finally {
198
+ process.removeListener('SIGINT', onSigint);
199
+ }
200
+ if (!jsonMode && stopped) {
201
+ process.stdout.write('\n');
202
+ log.dim(' stream encerrado.');
203
+ }
204
+ return true; // encerrado normalmente (Ctrl+C ou MAX_RECONNECTS esgotado com retorno)
205
+ }
206
+ /**
207
+ * Modo polling NDJSON — fallback quando SSE não está disponível.
208
+ * Poll a cada 5s usando `after=<lastTs>`.
209
+ */
210
+ async function runPollingFollow(clientId, lastTs, lines, opts, jsonMode) {
211
+ if (!jsonMode)
212
+ log.dim(' Aguardando novos logs… (Ctrl+C para sair)');
213
+ let currentLastTs = lastTs;
214
+ let stopped = false;
215
+ const onSigint = () => { stopped = true; };
216
+ process.once('SIGINT', onSigint);
217
+ try {
218
+ while (!stopped) {
219
+ await new Promise((r) => setTimeout(r, 5000));
220
+ if (stopped)
221
+ break;
222
+ try {
223
+ const next = await fetchLogs(clientId, {
224
+ limit: lines,
225
+ after: currentLastTs,
226
+ level: opts.level,
227
+ product: opts.product,
228
+ channel: opts.channel,
229
+ correlationId: opts.correlationId,
230
+ });
231
+ for (const e of next) {
232
+ printLog(e, jsonMode);
233
+ currentLastTs = e.timestamp;
234
+ }
235
+ }
236
+ catch (error) {
237
+ // Erros transientes no follow não derrubam o tail.
238
+ if (error instanceof CliNetworkError)
239
+ continue;
240
+ throw error;
241
+ }
242
+ }
243
+ }
244
+ finally {
245
+ process.removeListener('SIGINT', onSigint);
246
+ }
247
+ if (!jsonMode) {
248
+ process.stdout.write('\n');
249
+ log.dim(' stream encerrado.');
250
+ }
251
+ }
62
252
  export async function runLogs(opts) {
63
253
  if (!opts.clientId) {
64
254
  log.error('--client-id <oauthClientId> obrigatório.');
@@ -68,6 +258,7 @@ export async function runLogs(opts) {
68
258
  log.error('Não autenticado. Execute: neetru login');
69
259
  process.exit(2);
70
260
  }
261
+ const jsonMode = opts.json ?? false;
71
262
  const lines = Math.max(1, Math.min(1000, Number.parseInt(opts.lines ?? '50', 10) || 50));
72
263
  const sinceMs = parseDuration(opts.since ?? '15m');
73
264
  const since = Date.now() - sinceMs;
@@ -103,38 +294,20 @@ export async function runLogs(opts) {
103
294
  process.exit(4);
104
295
  }
105
296
  if (entries.length === 0) {
106
- log.dim(' Nenhum log encontrado no intervalo.');
297
+ if (!jsonMode)
298
+ log.dim(' Nenhum log encontrado no intervalo.');
107
299
  }
108
300
  else {
109
301
  for (const e of entries)
110
- printLog(e);
302
+ printLog(e, jsonMode);
111
303
  }
112
304
  if (!opts.follow)
113
305
  return;
114
- let lastTs = entries.length > 0 ? entries[entries.length - 1].timestamp : new Date().toISOString();
115
- log.dim(' Aguardando novos logs… (Ctrl+C para sair)');
116
- while (true) {
117
- await new Promise((r) => setTimeout(r, 5000));
118
- try {
119
- const next = await fetchLogs(opts.clientId, {
120
- limit: lines,
121
- after: lastTs,
122
- level: opts.level,
123
- product: opts.product,
124
- channel: opts.channel,
125
- correlationId: opts.correlationId,
126
- });
127
- for (const e of next) {
128
- printLog(e);
129
- lastTs = e.timestamp;
130
- }
131
- }
132
- catch (error) {
133
- // Transient errors no follow não derrubam o tail
134
- if (error instanceof CliNetworkError)
135
- continue;
136
- throw error;
137
- }
306
+ const lastTs = entries.length > 0 ? entries[entries.length - 1].timestamp : new Date().toISOString();
307
+ // Tenta SSE primeiro; cai no polling se endpoint não suportado.
308
+ const sseHandled = await runSseFollow(opts.clientId, opts, jsonMode);
309
+ if (!sseHandled) {
310
+ await runPollingFollow(opts.clientId, lastTs, lines, opts, jsonMode);
138
311
  }
139
312
  }
140
313
  //# sourceMappingURL=logs.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"logs.js","sourceRoot":"","sources":["../../src/commands/logs.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"logs.js","sourceRoot":"","sources":["../../src/commands/logs.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,58 @@
1
+ /**
2
+ * `neetru ops` — comandos de operação interna do Neetru Core.
3
+ *
4
+ * Substitui os scripts ad-hoc em scripts/ com interface consistente, autenticação
5
+ * via Bearer token e flags --dry-run onde há mutação.
6
+ *
7
+ * Namespace ops:
8
+ * neetru ops heartbeat — checar heartbeat do agente em um server
9
+ * neetru ops smoke notification — dispara notification de smoke end-to-end
10
+ * neetru ops smoke observability — smoke test do pipeline de observability
11
+ * neetru ops reg-token <serverId> — gerar registration token para um server
12
+ * neetru ops resolve-errors — resolver erros abertos em lote
13
+ * neetru ops openapi-diff — detectar breaking changes na spec OpenAPI
14
+ *
15
+ * TODO (próximo sprint): bootstrap-admin, backfill incidents-source, backfill workspaces,
16
+ * seed api-catalog, rehash-sdk-secrets, migrate cli-keys.
17
+ */
18
+ import { Command } from 'commander';
19
+ declare function deprecationBanner(scriptName: string, command: string): void;
20
+ export interface OpsHeartbeatOptions {
21
+ serverId?: string;
22
+ json?: boolean;
23
+ }
24
+ export declare function runOpsHeartbeat(opts: OpsHeartbeatOptions): Promise<void>;
25
+ export interface OpsSmokeNotificationOptions {
26
+ recipientRole?: string;
27
+ recipientUid?: string;
28
+ kind?: string;
29
+ title?: string;
30
+ link?: string;
31
+ json?: boolean;
32
+ }
33
+ export declare function runOpsSmokeNotification(opts: OpsSmokeNotificationOptions): Promise<void>;
34
+ export interface OpsSmokeObservabilityOptions {
35
+ baseUrl?: string;
36
+ bearer?: string;
37
+ waitSec?: number;
38
+ json?: boolean;
39
+ }
40
+ export declare function runOpsSmokeObservability(opts: OpsSmokeObservabilityOptions): Promise<void>;
41
+ export interface OpsRegTokenOptions {
42
+ expiresMin?: number;
43
+ json?: boolean;
44
+ }
45
+ export declare function runOpsRegToken(serverId: string, opts: OpsRegTokenOptions): Promise<void>;
46
+ export interface OpsResolveErrorsOptions {
47
+ dryRun?: boolean;
48
+ resolvedBy?: string;
49
+ json?: boolean;
50
+ }
51
+ export declare function runOpsResolveErrors(opts: OpsResolveErrorsOptions): Promise<void>;
52
+ export interface OpsOpenapiDiffOptions {
53
+ update?: boolean;
54
+ json?: boolean;
55
+ }
56
+ export declare function runOpsOpenapiDiff(opts: OpsOpenapiDiffOptions): Promise<void>;
57
+ export declare function registerOpsCommand(program: Command): void;
58
+ export { deprecationBanner };