agent-relay 6.0.21 → 6.2.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/index.cjs +360 -61
- package/dist/src/cli/bootstrap.d.ts.map +1 -1
- package/dist/src/cli/bootstrap.js +62 -0
- package/dist/src/cli/bootstrap.js.map +1 -1
- package/dist/src/cli/commands/agent-management.d.ts +9 -0
- package/dist/src/cli/commands/agent-management.d.ts.map +1 -1
- package/dist/src/cli/commands/agent-management.js +80 -6
- package/dist/src/cli/commands/agent-management.js.map +1 -1
- package/dist/src/cli/commands/core.d.ts.map +1 -1
- package/dist/src/cli/commands/core.js +2 -0
- package/dist/src/cli/commands/core.js.map +1 -1
- package/dist/src/cli/commands/drive.d.ts +222 -0
- package/dist/src/cli/commands/drive.d.ts.map +1 -0
- package/dist/src/cli/commands/drive.js +565 -0
- package/dist/src/cli/commands/drive.js.map +1 -0
- package/dist/src/cli/commands/messaging.d.ts +25 -0
- package/dist/src/cli/commands/messaging.d.ts.map +1 -1
- package/dist/src/cli/commands/messaging.js +702 -138
- package/dist/src/cli/commands/messaging.js.map +1 -1
- package/dist/src/cli/commands/new.d.ts +112 -0
- package/dist/src/cli/commands/new.d.ts.map +1 -0
- package/dist/src/cli/commands/new.js +189 -0
- package/dist/src/cli/commands/new.js.map +1 -0
- package/dist/src/cli/commands/on/provision.d.ts +1 -1
- package/dist/src/cli/commands/on/provision.d.ts.map +1 -1
- package/dist/src/cli/commands/on/provision.js +1 -1
- package/dist/src/cli/commands/on/provision.js.map +1 -1
- package/dist/src/cli/commands/on/start.d.ts +1 -1
- package/dist/src/cli/commands/on/start.d.ts.map +1 -1
- package/dist/src/cli/commands/on/start.js +2 -2
- package/dist/src/cli/commands/on/start.js.map +1 -1
- package/dist/src/cli/commands/passthrough.d.ts +142 -0
- package/dist/src/cli/commands/passthrough.d.ts.map +1 -0
- package/dist/src/cli/commands/passthrough.js +398 -0
- package/dist/src/cli/commands/passthrough.js.map +1 -0
- package/dist/src/cli/commands/rm.d.ts +52 -0
- package/dist/src/cli/commands/rm.d.ts.map +1 -0
- package/dist/src/cli/commands/rm.js +96 -0
- package/dist/src/cli/commands/rm.js.map +1 -0
- package/dist/src/cli/commands/view.d.ts +98 -0
- package/dist/src/cli/commands/view.d.ts.map +1 -0
- package/dist/src/cli/commands/view.js +238 -0
- package/dist/src/cli/commands/view.js.map +1 -0
- package/dist/src/cli/lib/agent-management-listing.d.ts +35 -7
- package/dist/src/cli/lib/agent-management-listing.d.ts.map +1 -1
- package/dist/src/cli/lib/agent-management-listing.js +188 -40
- package/dist/src/cli/lib/agent-management-listing.js.map +1 -1
- package/dist/src/cli/lib/attach.d.ts +56 -0
- package/dist/src/cli/lib/attach.d.ts.map +1 -0
- package/dist/src/cli/lib/attach.js +73 -0
- package/dist/src/cli/lib/attach.js.map +1 -0
- package/dist/src/cli/lib/broker-connection.d.ts +40 -0
- package/dist/src/cli/lib/broker-connection.d.ts.map +1 -0
- package/dist/src/cli/lib/broker-connection.js +82 -0
- package/dist/src/cli/lib/broker-connection.js.map +1 -0
- package/dist/src/cli/lib/broker-lifecycle.d.ts +2 -0
- package/dist/src/cli/lib/broker-lifecycle.d.ts.map +1 -1
- package/dist/src/cli/lib/broker-lifecycle.js +263 -69
- package/dist/src/cli/lib/broker-lifecycle.js.map +1 -1
- package/dist/src/cli/lib/formatting.d.ts +4 -0
- package/dist/src/cli/lib/formatting.d.ts.map +1 -1
- package/dist/src/cli/lib/formatting.js +31 -1
- package/dist/src/cli/lib/formatting.js.map +1 -1
- package/dist/src/cli/lib/sdk-client.d.ts +9 -0
- package/dist/src/cli/lib/sdk-client.d.ts.map +1 -0
- package/dist/src/cli/lib/sdk-client.js +28 -0
- package/dist/src/cli/lib/sdk-client.js.map +1 -0
- package/dist/src/cli/lib/spawn-and-attach.d.ts +132 -0
- package/dist/src/cli/lib/spawn-and-attach.d.ts.map +1 -0
- package/dist/src/cli/lib/spawn-and-attach.js +334 -0
- package/dist/src/cli/lib/spawn-and-attach.js.map +1 -0
- package/dist/src/cost/pricing.d.ts.map +1 -1
- package/dist/src/cost/pricing.js +5 -3
- package/dist/src/cost/pricing.js.map +1 -1
- package/package.json +12 -10
- package/dist/packages/cloud/src/api-client.d.ts +0 -33
- package/dist/packages/cloud/src/api-client.d.ts.map +0 -1
- package/dist/packages/cloud/src/api-client.js +0 -123
- package/dist/packages/cloud/src/api-client.js.map +0 -1
- package/dist/packages/cloud/src/auth.d.ts +0 -13
- package/dist/packages/cloud/src/auth.d.ts.map +0 -1
- package/dist/packages/cloud/src/auth.js +0 -299
- package/dist/packages/cloud/src/auth.js.map +0 -1
- package/dist/packages/cloud/src/connect.d.ts +0 -45
- package/dist/packages/cloud/src/connect.d.ts.map +0 -1
- package/dist/packages/cloud/src/connect.js +0 -166
- package/dist/packages/cloud/src/connect.js.map +0 -1
- package/dist/packages/cloud/src/index.d.ts +0 -10
- package/dist/packages/cloud/src/index.d.ts.map +0 -1
- package/dist/packages/cloud/src/index.js +0 -10
- package/dist/packages/cloud/src/index.js.map +0 -1
- package/dist/packages/cloud/src/lib/ssh-interactive.d.ts +0 -70
- package/dist/packages/cloud/src/lib/ssh-interactive.d.ts.map +0 -1
- package/dist/packages/cloud/src/lib/ssh-interactive.js +0 -440
- package/dist/packages/cloud/src/lib/ssh-interactive.js.map +0 -1
- package/dist/packages/cloud/src/lib/ssh-runtime.d.ts +0 -35
- package/dist/packages/cloud/src/lib/ssh-runtime.d.ts.map +0 -1
- package/dist/packages/cloud/src/lib/ssh-runtime.js +0 -52
- package/dist/packages/cloud/src/lib/ssh-runtime.js.map +0 -1
- package/dist/packages/cloud/src/proactive-runtime.d.ts +0 -24
- package/dist/packages/cloud/src/proactive-runtime.d.ts.map +0 -1
- package/dist/packages/cloud/src/proactive-runtime.js +0 -315
- package/dist/packages/cloud/src/proactive-runtime.js.map +0 -1
- package/dist/packages/cloud/src/types.d.ts +0 -200
- package/dist/packages/cloud/src/types.d.ts.map +0 -1
- package/dist/packages/cloud/src/types.js +0 -12
- package/dist/packages/cloud/src/types.js.map +0 -1
- package/dist/packages/cloud/src/workflows.d.ts +0 -65
- package/dist/packages/cloud/src/workflows.d.ts.map +0 -1
- package/dist/packages/cloud/src/workflows.js +0 -892
- package/dist/packages/cloud/src/workflows.js.map +0 -1
- package/dist/packages/cloud/src/workspaces.d.ts +0 -11
- package/dist/packages/cloud/src/workspaces.d.ts.map +0 -1
- package/dist/packages/cloud/src/workspaces.js +0 -146
- package/dist/packages/cloud/src/workspaces.js.map +0 -1
- package/dist/packages/sdk/src/provisioner/local-jwks.d.ts +0 -25
- package/dist/packages/sdk/src/provisioner/local-jwks.d.ts.map +0 -1
- package/dist/packages/sdk/src/provisioner/local-jwks.js +0 -70
- package/dist/packages/sdk/src/provisioner/local-jwks.js.map +0 -1
- package/dist/packages/sdk/src/provisioner/seeder.d.ts +0 -17
- package/dist/packages/sdk/src/provisioner/seeder.d.ts.map +0 -1
- package/dist/packages/sdk/src/provisioner/seeder.js +0 -419
- package/dist/packages/sdk/src/provisioner/seeder.js.map +0 -1
- package/dist/packages/sdk/src/provisioner/token.d.ts +0 -41
- package/dist/packages/sdk/src/provisioner/token.d.ts.map +0 -1
- package/dist/packages/sdk/src/provisioner/token.js +0 -77
- package/dist/packages/sdk/src/provisioner/token.js.map +0 -1
|
@@ -1,7 +1,14 @@
|
|
|
1
1
|
import path from 'node:path';
|
|
2
|
-
import {
|
|
2
|
+
import { formatTableRow, formatUptimeSecs, sanitizeForTerminal, sanitizeForTerminalLine, } from './formatting.js';
|
|
3
3
|
import { getWorkerLogsDir } from './paths.js';
|
|
4
4
|
const HIDDEN_LOCAL_AGENT_NAMES = new Set(['Dashboard', 'zed-bridge']);
|
|
5
|
+
const MAX_LOG_LINES = 5000;
|
|
6
|
+
const MIN_LOG_TAIL_BYTES = 64 * 1024;
|
|
7
|
+
const MAX_LOG_TAIL_BYTES = 4 * 1024 * 1024;
|
|
8
|
+
const MAX_LOG_FOLLOW_BYTES = 1024 * 1024;
|
|
9
|
+
function tableCell(value, fallback = '-') {
|
|
10
|
+
return sanitizeForTerminalLine(value ?? fallback);
|
|
11
|
+
}
|
|
5
12
|
function shouldHideLocalAgentByDefault(name) {
|
|
6
13
|
if (!name)
|
|
7
14
|
return true;
|
|
@@ -14,6 +21,58 @@ function getWorkerLogsDirCandidates(projectRoot) {
|
|
|
14
21
|
const legacyDir = getWorkerLogsDir(projectRoot);
|
|
15
22
|
return preferredDir === legacyDir ? [preferredDir] : [preferredDir, legacyDir];
|
|
16
23
|
}
|
|
24
|
+
function isSafeLogAgentName(name) {
|
|
25
|
+
const trimmed = name.trim();
|
|
26
|
+
if (!trimmed || path.isAbsolute(trimmed) || path.win32.isAbsolute(trimmed)) {
|
|
27
|
+
return false;
|
|
28
|
+
}
|
|
29
|
+
return !trimmed.split(/[\\/]+/).some((segment) => segment === '' || segment === '.' || segment === '..');
|
|
30
|
+
}
|
|
31
|
+
function resolveLogFileCandidate(logsDir, name) {
|
|
32
|
+
const base = path.resolve(logsDir);
|
|
33
|
+
const candidate = path.resolve(base, `${name}.log`);
|
|
34
|
+
const relative = path.relative(base, candidate);
|
|
35
|
+
if (relative.startsWith('..') || path.isAbsolute(relative)) {
|
|
36
|
+
return undefined;
|
|
37
|
+
}
|
|
38
|
+
return candidate;
|
|
39
|
+
}
|
|
40
|
+
function parseLogLineCount(value) {
|
|
41
|
+
const raw = value ?? '50';
|
|
42
|
+
if (!/^\d+$/.test(raw.trim())) {
|
|
43
|
+
throw new Error(`Invalid --lines value: ${raw}`);
|
|
44
|
+
}
|
|
45
|
+
const parsed = Number(raw);
|
|
46
|
+
if (!Number.isSafeInteger(parsed) || parsed < 1 || parsed > MAX_LOG_LINES) {
|
|
47
|
+
throw new Error(`Invalid --lines value: ${raw} (must be 1-${MAX_LOG_LINES})`);
|
|
48
|
+
}
|
|
49
|
+
return parsed;
|
|
50
|
+
}
|
|
51
|
+
function getTailByteLimit(lineCount) {
|
|
52
|
+
return Math.min(MAX_LOG_TAIL_BYTES, Math.max(MIN_LOG_TAIL_BYTES, lineCount * 4096));
|
|
53
|
+
}
|
|
54
|
+
function tailLinesFromText(text, lineCount) {
|
|
55
|
+
const lines = text.length > 0 ? text.split('\n') : [];
|
|
56
|
+
if (lines.length > 0 && lines[lines.length - 1] === '') {
|
|
57
|
+
lines.pop();
|
|
58
|
+
}
|
|
59
|
+
return lines.slice(-lineCount);
|
|
60
|
+
}
|
|
61
|
+
function readLogTail(deps, filePath, lineCount) {
|
|
62
|
+
const maxBytes = getTailByteLimit(lineCount);
|
|
63
|
+
if (deps.readFileTail) {
|
|
64
|
+
return deps.readFileTail(filePath, maxBytes, 'utf-8');
|
|
65
|
+
}
|
|
66
|
+
const text = deps.readFile(filePath, 'utf-8');
|
|
67
|
+
return { text, size: Buffer.byteLength(text, 'utf-8') };
|
|
68
|
+
}
|
|
69
|
+
function readLogFrom(deps, filePath, offset) {
|
|
70
|
+
if (deps.readFileFrom) {
|
|
71
|
+
return deps.readFileFrom(filePath, offset, MAX_LOG_FOLLOW_BYTES, 'utf-8');
|
|
72
|
+
}
|
|
73
|
+
const text = deps.readFile(filePath, 'utf-8');
|
|
74
|
+
return { text: text.slice(offset), size: text.length };
|
|
75
|
+
}
|
|
17
76
|
function readCloudConfig(deps) {
|
|
18
77
|
const configPath = path.join(deps.getDataDir(), 'cloud-config.json');
|
|
19
78
|
if (!deps.fileExists(configPath)) {
|
|
@@ -125,10 +184,10 @@ export async function runAgentsCommand(options, deps) {
|
|
|
125
184
|
deps.log('─'.repeat(55));
|
|
126
185
|
combined.forEach((agent) => {
|
|
127
186
|
deps.log(formatTableRow([
|
|
128
|
-
{ value: agent.name, width: 15 },
|
|
129
|
-
{ value: agent.status, width: 8 },
|
|
130
|
-
{ value: agent.cli, width: 9 },
|
|
131
|
-
{ value: agent.location
|
|
187
|
+
{ value: tableCell(agent.name, 'unknown'), width: 15 },
|
|
188
|
+
{ value: tableCell(agent.status), width: 8 },
|
|
189
|
+
{ value: tableCell(agent.cli), width: 9 },
|
|
190
|
+
{ value: tableCell(agent.location, 'local') },
|
|
132
191
|
]));
|
|
133
192
|
});
|
|
134
193
|
}
|
|
@@ -137,11 +196,11 @@ export async function runAgentsCommand(options, deps) {
|
|
|
137
196
|
deps.log('─'.repeat(65));
|
|
138
197
|
combined.forEach((agent) => {
|
|
139
198
|
deps.log(formatTableRow([
|
|
140
|
-
{ value: agent.name, width: 15 },
|
|
141
|
-
{ value: agent.status, width: 8 },
|
|
142
|
-
{ value: agent.cli, width: 9 },
|
|
143
|
-
{ value: agent.model
|
|
144
|
-
{ value: agent.team
|
|
199
|
+
{ value: tableCell(agent.name, 'unknown'), width: 15 },
|
|
200
|
+
{ value: tableCell(agent.status), width: 8 },
|
|
201
|
+
{ value: tableCell(agent.cli), width: 9 },
|
|
202
|
+
{ value: tableCell(agent.model), width: 14 },
|
|
203
|
+
{ value: tableCell(agent.team) },
|
|
145
204
|
]));
|
|
146
205
|
});
|
|
147
206
|
}
|
|
@@ -171,16 +230,44 @@ export async function runWhoCommand(options, deps) {
|
|
|
171
230
|
}
|
|
172
231
|
return;
|
|
173
232
|
}
|
|
233
|
+
// Real per-agent metrics from the broker (pid / memory / uptime). This
|
|
234
|
+
// replaces the previous fabricated `status: 'ONLINE'` + `lastSeen: now()`
|
|
235
|
+
// placeholders so an orchestrator can poll a machine-readable lifecycle
|
|
236
|
+
// signal instead of scraping the agent TTY.
|
|
237
|
+
let metricsByName = new Map();
|
|
238
|
+
if (typeof client.getMetrics === 'function') {
|
|
239
|
+
try {
|
|
240
|
+
const raw = (await client.getMetrics());
|
|
241
|
+
for (const m of raw?.agents ?? []) {
|
|
242
|
+
if (m && typeof m.name === 'string') {
|
|
243
|
+
metricsByName.set(m.name, m);
|
|
244
|
+
}
|
|
245
|
+
}
|
|
246
|
+
}
|
|
247
|
+
catch {
|
|
248
|
+
// Metrics are best-effort enrichment — fall back to list-only data.
|
|
249
|
+
metricsByName = new Map();
|
|
250
|
+
}
|
|
251
|
+
}
|
|
174
252
|
const onlineAgents = await client
|
|
175
253
|
.listAgents()
|
|
176
254
|
.then((list) => list
|
|
177
255
|
.filter((agent) => (options.all ? true : !shouldHideLocalAgentByDefault(agent.name)))
|
|
178
|
-
.map((agent) =>
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
256
|
+
.map((agent) => {
|
|
257
|
+
const m = metricsByName.get(agent.name);
|
|
258
|
+
return {
|
|
259
|
+
name: agent.name,
|
|
260
|
+
cli: agent.cli || agent.runtime || null,
|
|
261
|
+
// An agent present in the broker's live list is connected. We
|
|
262
|
+
// do not synthesize idle/exited here — that requires broker
|
|
263
|
+
// lifecycle state the CLI cannot observe without a follow-up
|
|
264
|
+
// broker change.
|
|
265
|
+
status: 'online',
|
|
266
|
+
pid: m?.pid ?? agent.pid ?? null,
|
|
267
|
+
uptimeSecs: typeof m?.uptime_secs === 'number' ? m.uptime_secs : null,
|
|
268
|
+
memoryBytes: typeof m?.memory_bytes === 'number' ? m.memory_bytes : null,
|
|
269
|
+
};
|
|
270
|
+
}))
|
|
184
271
|
.catch(() => []);
|
|
185
272
|
await client.shutdown().catch(() => undefined);
|
|
186
273
|
if (options.json) {
|
|
@@ -192,20 +279,54 @@ export async function runWhoCommand(options, deps) {
|
|
|
192
279
|
deps.log(`No active agents found${hint}.`);
|
|
193
280
|
return;
|
|
194
281
|
}
|
|
195
|
-
deps.log('NAME STATUS CLI
|
|
196
|
-
deps.log('
|
|
282
|
+
deps.log('NAME STATUS CLI PID UPTIME');
|
|
283
|
+
deps.log('-----------------------------------------------------');
|
|
197
284
|
onlineAgents.forEach((agent) => {
|
|
198
285
|
deps.log(formatTableRow([
|
|
199
|
-
{ value: agent.name
|
|
200
|
-
{ value: agent.status, width: 8 },
|
|
201
|
-
{ value: agent.cli
|
|
202
|
-
{ value:
|
|
286
|
+
{ value: tableCell(agent.name, 'unknown'), width: 15 },
|
|
287
|
+
{ value: tableCell(agent.status), width: 8 },
|
|
288
|
+
{ value: tableCell(agent.cli), width: 8 },
|
|
289
|
+
{ value: agent.pid != null ? String(agent.pid) : '-', width: 8 },
|
|
290
|
+
{ value: agent.uptimeSecs != null ? formatUptimeSecs(agent.uptimeSecs) : '-' },
|
|
203
291
|
]));
|
|
204
292
|
});
|
|
205
293
|
}
|
|
294
|
+
/**
|
|
295
|
+
* Convert a raw PTY/TTY log capture into greppable, line-oriented plain text:
|
|
296
|
+
* strip ANSI/cursor/control escapes, drop lines that were pure escape noise,
|
|
297
|
+
* and collapse consecutive identical lines (spinner/redraw frames like
|
|
298
|
+
* `⠙ Working(18m 07s)` re-printed every tick).
|
|
299
|
+
*/
|
|
300
|
+
export function toPlainLogLines(raw) {
|
|
301
|
+
const out = [];
|
|
302
|
+
let prev;
|
|
303
|
+
// Drop the single file-terminating newline (its trailing '' element) so a
|
|
304
|
+
// normal log file doesn't yield a spurious blank last line — same trim the
|
|
305
|
+
// default view does. Interior blank lines are preserved.
|
|
306
|
+
const body = raw.endsWith('\n') ? raw.slice(0, -1) : raw;
|
|
307
|
+
for (const rawLine of body.split('\n')) {
|
|
308
|
+
const clean = sanitizeForTerminal(rawLine).replace(/\s+$/, '');
|
|
309
|
+
// A non-empty source line that sanitizes to nothing was pure escape
|
|
310
|
+
// noise (cursor moves, color resets) — drop it entirely.
|
|
311
|
+
if (clean === '' && rawLine.trim() !== '')
|
|
312
|
+
continue;
|
|
313
|
+
// Collapse consecutive identical lines (redraw frames / repeated blanks).
|
|
314
|
+
if (clean === prev)
|
|
315
|
+
continue;
|
|
316
|
+
out.push(clean);
|
|
317
|
+
prev = clean;
|
|
318
|
+
}
|
|
319
|
+
return out;
|
|
320
|
+
}
|
|
206
321
|
export async function runAgentsLogsCommand(name, options, deps) {
|
|
322
|
+
if (!isSafeLogAgentName(name)) {
|
|
323
|
+
deps.error(`Invalid agent name for log lookup: "${sanitizeForTerminalLine(name)}"`);
|
|
324
|
+
deps.exit(1);
|
|
325
|
+
return;
|
|
326
|
+
}
|
|
207
327
|
const logFileCandidates = getWorkerLogsDirCandidates(deps.getProjectRoot())
|
|
208
|
-
.map((logsDir) =>
|
|
328
|
+
.map((logsDir) => resolveLogFileCandidate(logsDir, name))
|
|
329
|
+
.filter((candidate) => Boolean(candidate));
|
|
209
330
|
const logFile = logFileCandidates.find((candidate) => deps.fileExists(candidate));
|
|
210
331
|
if (!logFile) {
|
|
211
332
|
deps.error(`No logs found for agent "${name}"`);
|
|
@@ -218,19 +339,34 @@ export async function runAgentsLogsCommand(name, options, deps) {
|
|
|
218
339
|
return;
|
|
219
340
|
}
|
|
220
341
|
try {
|
|
221
|
-
const lineCount =
|
|
222
|
-
const
|
|
223
|
-
const
|
|
224
|
-
|
|
225
|
-
|
|
342
|
+
const lineCount = parseLogLineCount(options.lines);
|
|
343
|
+
const snapshot = readLogTail(deps, logFile, lineCount);
|
|
344
|
+
const text = snapshot.text;
|
|
345
|
+
// --json: machine-readable snapshot of sanitized, line-oriented output.
|
|
346
|
+
// (Snapshot only — combine with the SDK event stream for live tailing.)
|
|
347
|
+
if (options.json) {
|
|
348
|
+
const plainLines = toPlainLogLines(text).slice(-lineCount);
|
|
349
|
+
deps.log(JSON.stringify({ agent: name, file: logFile, lines: plainLines }, null, 2));
|
|
350
|
+
return;
|
|
351
|
+
}
|
|
352
|
+
// --plain: ANSI-stripped, deduped, greppable. No decorative header so the
|
|
353
|
+
// output is pure log content for piping into grep/awk.
|
|
354
|
+
if (options.plain) {
|
|
355
|
+
const plainLines = toPlainLogLines(text).slice(-lineCount);
|
|
356
|
+
deps.log(plainLines.join('\n'));
|
|
357
|
+
}
|
|
358
|
+
else {
|
|
359
|
+
const tail = tailLinesFromText(text, lineCount).map(sanitizeForTerminal).join('\n');
|
|
360
|
+
deps.log(`Logs for ${sanitizeForTerminalLine(name)} (last ${lineCount} lines):`);
|
|
361
|
+
deps.log('─'.repeat(50));
|
|
362
|
+
deps.log(tail || '(empty)');
|
|
226
363
|
}
|
|
227
|
-
const tail = lines.slice(-lineCount).join('\n');
|
|
228
|
-
deps.log(`Logs for ${name} (last ${lineCount} lines):`);
|
|
229
|
-
deps.log('─'.repeat(50));
|
|
230
|
-
deps.log(tail || '(empty)');
|
|
231
364
|
if (options.follow) {
|
|
232
|
-
let lastSize =
|
|
365
|
+
let lastSize = snapshot.size;
|
|
233
366
|
let remainder = '';
|
|
367
|
+
let prevStreamLine = options.plain
|
|
368
|
+
? toPlainLogLines(text).slice(-lineCount).at(-1)
|
|
369
|
+
: undefined;
|
|
234
370
|
// Poll the log file for new content every 500ms
|
|
235
371
|
await new Promise(() => {
|
|
236
372
|
const interval = setInterval(() => {
|
|
@@ -238,21 +374,33 @@ export async function runAgentsLogsCommand(name, options, deps) {
|
|
|
238
374
|
if (!deps.fileExists(logFile)) {
|
|
239
375
|
return;
|
|
240
376
|
}
|
|
241
|
-
const
|
|
242
|
-
if (
|
|
243
|
-
const newContent = remainder +
|
|
244
|
-
lastSize =
|
|
377
|
+
const current = readLogFrom(deps, logFile, lastSize);
|
|
378
|
+
if (current.size > lastSize) {
|
|
379
|
+
const newContent = remainder + current.text;
|
|
380
|
+
lastSize = current.size;
|
|
245
381
|
const newLines = newContent.split('\n');
|
|
246
382
|
// Keep the last element as remainder (may be incomplete line)
|
|
247
383
|
remainder = newLines.pop() ?? '';
|
|
248
384
|
for (const line of newLines) {
|
|
249
|
-
|
|
385
|
+
if (options.plain) {
|
|
386
|
+
const clean = sanitizeForTerminal(line).replace(/\s+$/, '');
|
|
387
|
+
if (clean === '' && line.trim() !== '')
|
|
388
|
+
continue;
|
|
389
|
+
if (clean === prevStreamLine)
|
|
390
|
+
continue;
|
|
391
|
+
prevStreamLine = clean;
|
|
392
|
+
deps.log(clean);
|
|
393
|
+
}
|
|
394
|
+
else {
|
|
395
|
+
deps.log(sanitizeForTerminal(line));
|
|
396
|
+
}
|
|
250
397
|
}
|
|
251
398
|
}
|
|
252
|
-
else if (
|
|
399
|
+
else if (current.size < lastSize) {
|
|
253
400
|
// File was truncated/rotated, reset
|
|
254
401
|
lastSize = 0;
|
|
255
402
|
remainder = '';
|
|
403
|
+
prevStreamLine = undefined;
|
|
256
404
|
}
|
|
257
405
|
}
|
|
258
406
|
catch {
|
|
@@ -270,7 +418,7 @@ export async function runAgentsLogsCommand(name, options, deps) {
|
|
|
270
418
|
}
|
|
271
419
|
}
|
|
272
420
|
catch (err) {
|
|
273
|
-
const message = err instanceof Error ? err.message : String(err);
|
|
421
|
+
const message = sanitizeForTerminalLine(err instanceof Error ? err.message : String(err));
|
|
274
422
|
deps.error(`Failed to read logs: ${message}`);
|
|
275
423
|
deps.exit(1);
|
|
276
424
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"agent-management-listing.js","sourceRoot":"","sources":["../../../../src/cli/lib/agent-management-listing.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"agent-management-listing.js","sourceRoot":"","sources":["../../../../src/cli/lib/agent-management-listing.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Shared helpers for attach-style CLI commands.
|
|
3
|
+
*
|
|
4
|
+
* Every attach verb (`view`, `drive`, `relay`) needs to render the agent's
|
|
5
|
+
* *current* visible screen before it starts streaming live updates —
|
|
6
|
+
* otherwise the user attaches to a quiet agent and stares at a blank
|
|
7
|
+
* terminal until the agent happens to produce more output. This module
|
|
8
|
+
* wraps the broker's snapshot endpoint so each verb gets that for one line
|
|
9
|
+
* of code.
|
|
10
|
+
*/
|
|
11
|
+
/** Connection metadata used to call the broker's snapshot endpoint. */
|
|
12
|
+
export interface AttachSnapshotConnection {
|
|
13
|
+
/** Broker base URL (no trailing slash). */
|
|
14
|
+
url: string;
|
|
15
|
+
/** Optional API key — added as an `X-API-Key` header if present. */
|
|
16
|
+
apiKey?: string;
|
|
17
|
+
}
|
|
18
|
+
/** Dependencies for `captureAndRenderSnapshot` — injected so tests don't hit
|
|
19
|
+
* the network. */
|
|
20
|
+
export interface AttachSnapshotDeps {
|
|
21
|
+
/** Native `fetch` by default; swapped out by tests. */
|
|
22
|
+
fetch: typeof globalThis.fetch;
|
|
23
|
+
/** Where the ANSI bytes get written. Typically `process.stdout.write`. */
|
|
24
|
+
writeChunk: (chunk: string) => void;
|
|
25
|
+
}
|
|
26
|
+
/** Outcome of a snapshot capture. Callers decide whether to bail or continue
|
|
27
|
+
* on each variant — `view` aborts on `not_found` / `no_pty`, warns and
|
|
28
|
+
* continues on `unavailable` / `transport_error`. */
|
|
29
|
+
export interface AttachSnapshotResult {
|
|
30
|
+
status: 'ok' | 'not_found' | 'no_pty' | 'unavailable' | 'transport_error';
|
|
31
|
+
/** Grid dimensions as reported by the broker, if the call succeeded. */
|
|
32
|
+
rows?: number;
|
|
33
|
+
cols?: number;
|
|
34
|
+
/** Cursor position `[row, col]`, 1-indexed, if the call succeeded. */
|
|
35
|
+
cursor?: [number, number];
|
|
36
|
+
/** Human-readable detail for error variants. */
|
|
37
|
+
message?: string;
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* Fetch a worker's current visible screen as ANSI reproduction bytes and
|
|
41
|
+
* write them to the caller's output. Callers should invoke this BEFORE
|
|
42
|
+
* subscribing to the WebSocket event stream so the user sees the agent's
|
|
43
|
+
* current state before live deltas start arriving.
|
|
44
|
+
*
|
|
45
|
+
* There is a tiny window between the snapshot capture and the live stream
|
|
46
|
+
* starting in which the agent's output could be missed (≤10ms in practice).
|
|
47
|
+
* Most TUI agents repaint heavily so the next update overwrites anything
|
|
48
|
+
* lost; subscribe-first + buffer + drain would close the gap at the cost
|
|
49
|
+
* of risking double-application of bytes that arrive in both the snapshot
|
|
50
|
+
* and the buffered stream, which is the worse failure mode for TUIs.
|
|
51
|
+
*
|
|
52
|
+
* @returns A status describing the outcome. `ok` means the screen was
|
|
53
|
+
* rendered; other variants carry a message the caller can surface.
|
|
54
|
+
*/
|
|
55
|
+
export declare function captureAndRenderSnapshot(connection: AttachSnapshotConnection, agentName: string, deps: AttachSnapshotDeps): Promise<AttachSnapshotResult>;
|
|
56
|
+
//# sourceMappingURL=attach.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"attach.d.ts","sourceRoot":"","sources":["../../../../src/cli/lib/attach.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAIH,uEAAuE;AACvE,MAAM,WAAW,wBAAwB;IACvC,2CAA2C;IAC3C,GAAG,EAAE,MAAM,CAAC;IACZ,oEAAoE;IACpE,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED;mBACmB;AACnB,MAAM,WAAW,kBAAkB;IACjC,uDAAuD;IACvD,KAAK,EAAE,OAAO,UAAU,CAAC,KAAK,CAAC;IAC/B,0EAA0E;IAC1E,UAAU,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;CACrC;AAED;;sDAEsD;AACtD,MAAM,WAAW,oBAAoB;IACnC,MAAM,EAAE,IAAI,GAAG,WAAW,GAAG,QAAQ,GAAG,aAAa,GAAG,iBAAiB,CAAC;IAC1E,wEAAwE;IACxE,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,sEAAsE;IACtE,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC1B,gDAAgD;IAChD,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED;;;;;;;;;;;;;;;GAeG;AACH,wBAAsB,wBAAwB,CAC5C,UAAU,EAAE,wBAAwB,EACpC,SAAS,EAAE,MAAM,EACjB,IAAI,EAAE,kBAAkB,GACvB,OAAO,CAAC,oBAAoB,CAAC,CAgD/B"}
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Shared helpers for attach-style CLI commands.
|
|
3
|
+
*
|
|
4
|
+
* Every attach verb (`view`, `drive`, `relay`) needs to render the agent's
|
|
5
|
+
* *current* visible screen before it starts streaming live updates —
|
|
6
|
+
* otherwise the user attaches to a quiet agent and stares at a blank
|
|
7
|
+
* terminal until the agent happens to produce more output. This module
|
|
8
|
+
* wraps the broker's snapshot endpoint so each verb gets that for one line
|
|
9
|
+
* of code.
|
|
10
|
+
*/
|
|
11
|
+
import { createBrokerClient, mapBrokerSdkFailure } from './sdk-client.js';
|
|
12
|
+
/**
|
|
13
|
+
* Fetch a worker's current visible screen as ANSI reproduction bytes and
|
|
14
|
+
* write them to the caller's output. Callers should invoke this BEFORE
|
|
15
|
+
* subscribing to the WebSocket event stream so the user sees the agent's
|
|
16
|
+
* current state before live deltas start arriving.
|
|
17
|
+
*
|
|
18
|
+
* There is a tiny window between the snapshot capture and the live stream
|
|
19
|
+
* starting in which the agent's output could be missed (≤10ms in practice).
|
|
20
|
+
* Most TUI agents repaint heavily so the next update overwrites anything
|
|
21
|
+
* lost; subscribe-first + buffer + drain would close the gap at the cost
|
|
22
|
+
* of risking double-application of bytes that arrive in both the snapshot
|
|
23
|
+
* and the buffered stream, which is the worse failure mode for TUIs.
|
|
24
|
+
*
|
|
25
|
+
* @returns A status describing the outcome. `ok` means the screen was
|
|
26
|
+
* rendered; other variants carry a message the caller can surface.
|
|
27
|
+
*/
|
|
28
|
+
export async function captureAndRenderSnapshot(connection, agentName, deps) {
|
|
29
|
+
let body;
|
|
30
|
+
try {
|
|
31
|
+
body = await createBrokerClient(connection, deps.fetch).snapshot(agentName, 'ansi');
|
|
32
|
+
}
|
|
33
|
+
catch (err) {
|
|
34
|
+
const failure = mapBrokerSdkFailure(err);
|
|
35
|
+
if (failure.status === 404) {
|
|
36
|
+
return { status: 'not_found', message: `no agent named '${agentName}'` };
|
|
37
|
+
}
|
|
38
|
+
if (failure.status === 409) {
|
|
39
|
+
return {
|
|
40
|
+
status: 'no_pty',
|
|
41
|
+
message: `agent '${agentName}' has no PTY (headless worker — nothing to view)`,
|
|
42
|
+
};
|
|
43
|
+
}
|
|
44
|
+
if (failure.status === 0 || failure.status === 200) {
|
|
45
|
+
return { status: 'transport_error', message: failure.message };
|
|
46
|
+
}
|
|
47
|
+
return { status: 'unavailable', message: `snapshot returned HTTP ${failure.status}` };
|
|
48
|
+
}
|
|
49
|
+
if (typeof body !== 'object' || body === null) {
|
|
50
|
+
return { status: 'transport_error', message: 'snapshot response was not an object' };
|
|
51
|
+
}
|
|
52
|
+
const obj = body;
|
|
53
|
+
const screen = obj.screen;
|
|
54
|
+
if (typeof screen !== 'string') {
|
|
55
|
+
return { status: 'transport_error', message: "snapshot response missing 'screen' field" };
|
|
56
|
+
}
|
|
57
|
+
// Snapshot bytes are mostly ASCII (escape sequences) plus the cell
|
|
58
|
+
// characters which are valid Unicode codepoints (alacritty stores
|
|
59
|
+
// chars, not bytes). UTF-8 round-trips cleanly.
|
|
60
|
+
const decoded = Buffer.from(screen, 'base64').toString('utf-8');
|
|
61
|
+
deps.writeChunk(decoded);
|
|
62
|
+
const rows = typeof obj.rows === 'number' ? obj.rows : undefined;
|
|
63
|
+
const cols = typeof obj.cols === 'number' ? obj.cols : undefined;
|
|
64
|
+
const cursorRaw = Array.isArray(obj.cursor) ? obj.cursor : undefined;
|
|
65
|
+
const cursor = cursorRaw &&
|
|
66
|
+
cursorRaw.length === 2 &&
|
|
67
|
+
typeof cursorRaw[0] === 'number' &&
|
|
68
|
+
typeof cursorRaw[1] === 'number'
|
|
69
|
+
? [cursorRaw[0], cursorRaw[1]]
|
|
70
|
+
: undefined;
|
|
71
|
+
return { status: 'ok', rows, cols, cursor };
|
|
72
|
+
}
|
|
73
|
+
//# sourceMappingURL=attach.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"attach.js","sourceRoot":"","sources":["../../../../src/cli/lib/attach.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Shared broker-connection discovery for the attach-style CLI verbs
|
|
3
|
+
* (`view`, `drive`, `passthrough`).
|
|
4
|
+
*
|
|
5
|
+
* Resolution order matches `agent-relay-broker dump-pty` so users don't
|
|
6
|
+
* have to learn two patterns:
|
|
7
|
+
*
|
|
8
|
+
* 1. `--broker-url` / `--api-key` CLI flags
|
|
9
|
+
* 2. `RELAY_BROKER_URL` / `RELAY_BROKER_API_KEY` environment variables
|
|
10
|
+
* 3. `<state-dir>/connection.json` (default `.agent-relay/connection.json`)
|
|
11
|
+
*/
|
|
12
|
+
/** Connection metadata discovered from `connection.json` or CLI/env overrides. */
|
|
13
|
+
export interface BrokerConnection {
|
|
14
|
+
url: string;
|
|
15
|
+
apiKey?: string;
|
|
16
|
+
}
|
|
17
|
+
/** Options the caller may have parsed from CLI flags. */
|
|
18
|
+
export interface BrokerConnectionOptions {
|
|
19
|
+
brokerUrl?: string;
|
|
20
|
+
apiKey?: string;
|
|
21
|
+
stateDir?: string;
|
|
22
|
+
}
|
|
23
|
+
/** Injectable bits — tests stub these out instead of touching disk / env. */
|
|
24
|
+
export interface BrokerConnectionDeps {
|
|
25
|
+
readConnectionFile: (stateDir: string) => unknown;
|
|
26
|
+
getDefaultStateDir: () => string;
|
|
27
|
+
env: NodeJS.ProcessEnv;
|
|
28
|
+
}
|
|
29
|
+
/** Read `<state-dir>/connection.json` from disk, returning the parsed JSON or `null`. */
|
|
30
|
+
export declare function readConnectionFileFromDisk(stateDir: string): unknown;
|
|
31
|
+
/** Default state-directory: `.agent-relay/` under the resolved project root. */
|
|
32
|
+
export declare function defaultStateDir(): string;
|
|
33
|
+
/**
|
|
34
|
+
* Resolve the broker connection in priority order. Returns `null` when no
|
|
35
|
+
* source provides a URL — the caller decides how to surface that.
|
|
36
|
+
*/
|
|
37
|
+
export declare function resolveBrokerConnection(options: BrokerConnectionOptions, deps: BrokerConnectionDeps): BrokerConnection | null;
|
|
38
|
+
/** Convert an `http(s)://host:port` base URL to the matching `ws(s)://…/ws`. */
|
|
39
|
+
export declare function toWsUrl(baseUrl: string): string;
|
|
40
|
+
//# sourceMappingURL=broker-connection.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"broker-connection.d.ts","sourceRoot":"","sources":["../../../../src/cli/lib/broker-connection.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAOH,kFAAkF;AAClF,MAAM,WAAW,gBAAgB;IAC/B,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,yDAAyD;AACzD,MAAM,WAAW,uBAAuB;IACtC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,6EAA6E;AAC7E,MAAM,WAAW,oBAAoB;IACnC,kBAAkB,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,OAAO,CAAC;IAClD,kBAAkB,EAAE,MAAM,MAAM,CAAC;IACjC,GAAG,EAAE,MAAM,CAAC,UAAU,CAAC;CACxB;AAED,yFAAyF;AACzF,wBAAgB,0BAA0B,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAQpE;AAED,gFAAgF;AAChF,wBAAgB,eAAe,IAAI,MAAM,CAGxC;AA2BD;;;GAGG;AACH,wBAAgB,uBAAuB,CACrC,OAAO,EAAE,uBAAuB,EAChC,IAAI,EAAE,oBAAoB,GACzB,gBAAgB,GAAG,IAAI,CAmBzB;AAED,gFAAgF;AAChF,wBAAgB,OAAO,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAE/C"}
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Shared broker-connection discovery for the attach-style CLI verbs
|
|
3
|
+
* (`view`, `drive`, `passthrough`).
|
|
4
|
+
*
|
|
5
|
+
* Resolution order matches `agent-relay-broker dump-pty` so users don't
|
|
6
|
+
* have to learn two patterns:
|
|
7
|
+
*
|
|
8
|
+
* 1. `--broker-url` / `--api-key` CLI flags
|
|
9
|
+
* 2. `RELAY_BROKER_URL` / `RELAY_BROKER_API_KEY` environment variables
|
|
10
|
+
* 3. `<state-dir>/connection.json` (default `.agent-relay/connection.json`)
|
|
11
|
+
*/
|
|
12
|
+
import fs from 'node:fs';
|
|
13
|
+
import path from 'node:path';
|
|
14
|
+
import { getProjectPaths } from '@agent-relay/config';
|
|
15
|
+
/** Read `<state-dir>/connection.json` from disk, returning the parsed JSON or `null`. */
|
|
16
|
+
export function readConnectionFileFromDisk(stateDir) {
|
|
17
|
+
const connPath = path.join(stateDir, 'connection.json');
|
|
18
|
+
try {
|
|
19
|
+
const raw = fs.readFileSync(connPath, 'utf-8');
|
|
20
|
+
return JSON.parse(raw);
|
|
21
|
+
}
|
|
22
|
+
catch {
|
|
23
|
+
return null;
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
/** Default state-directory: `.agent-relay/` under the resolved project root. */
|
|
27
|
+
export function defaultStateDir() {
|
|
28
|
+
const projectRoot = getProjectPaths().projectRoot;
|
|
29
|
+
return path.join(projectRoot, '.agent-relay');
|
|
30
|
+
}
|
|
31
|
+
function isStringObject(value) {
|
|
32
|
+
return typeof value === 'object' && value !== null && !Array.isArray(value);
|
|
33
|
+
}
|
|
34
|
+
function readString(obj, key) {
|
|
35
|
+
if (!isStringObject(obj))
|
|
36
|
+
return undefined;
|
|
37
|
+
const value = obj[key];
|
|
38
|
+
if (typeof value !== 'string')
|
|
39
|
+
return undefined;
|
|
40
|
+
const trimmed = value.trim();
|
|
41
|
+
return trimmed === '' ? undefined : trimmed;
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* Trim a possibly-undefined string and treat empty results as
|
|
45
|
+
* `undefined` so `??` chains correctly fall through to lower-priority
|
|
46
|
+
* sources. Plain `value?.trim()` would yield `""` for blank inputs,
|
|
47
|
+
* which is not nullish — that would let an empty `--broker-url` flag
|
|
48
|
+
* silently override a real `RELAY_BROKER_URL` env var, etc.
|
|
49
|
+
*/
|
|
50
|
+
function trimOrUndefined(value) {
|
|
51
|
+
if (typeof value !== 'string')
|
|
52
|
+
return undefined;
|
|
53
|
+
const trimmed = value.trim();
|
|
54
|
+
return trimmed === '' ? undefined : trimmed;
|
|
55
|
+
}
|
|
56
|
+
/**
|
|
57
|
+
* Resolve the broker connection in priority order. Returns `null` when no
|
|
58
|
+
* source provides a URL — the caller decides how to surface that.
|
|
59
|
+
*/
|
|
60
|
+
export function resolveBrokerConnection(options, deps) {
|
|
61
|
+
const explicitUrl = trimOrUndefined(options.brokerUrl);
|
|
62
|
+
const envUrl = trimOrUndefined(deps.env.RELAY_BROKER_URL);
|
|
63
|
+
const stateDir = options.stateDir ? path.resolve(options.stateDir) : deps.getDefaultStateDir();
|
|
64
|
+
const connectionFile = deps.readConnectionFile(stateDir);
|
|
65
|
+
const fileUrl = readString(connectionFile, 'url');
|
|
66
|
+
const url = explicitUrl ?? envUrl ?? fileUrl;
|
|
67
|
+
if (!url)
|
|
68
|
+
return null;
|
|
69
|
+
const explicitKey = trimOrUndefined(options.apiKey);
|
|
70
|
+
const envKey = trimOrUndefined(deps.env.RELAY_BROKER_API_KEY);
|
|
71
|
+
const fileKey = readString(connectionFile, 'api_key');
|
|
72
|
+
const apiKey = explicitKey ?? envKey ?? fileKey;
|
|
73
|
+
return {
|
|
74
|
+
url: url.replace(/\/+$/, ''),
|
|
75
|
+
apiKey,
|
|
76
|
+
};
|
|
77
|
+
}
|
|
78
|
+
/** Convert an `http(s)://host:port` base URL to the matching `ws(s)://…/ws`. */
|
|
79
|
+
export function toWsUrl(baseUrl) {
|
|
80
|
+
return `${baseUrl.replace(/^http/, 'ws')}/ws`;
|
|
81
|
+
}
|
|
82
|
+
//# sourceMappingURL=broker-connection.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"broker-connection.js","sourceRoot":"","sources":["../../../../src/cli/lib/broker-connection.ts"],"names":[],"mappings":"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"}
|