agent-relay 6.0.17 → 6.0.19

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 (63) hide show
  1. package/dist/index.cjs +105 -31
  2. package/dist/packages/cloud/src/api-client.d.ts +33 -0
  3. package/dist/packages/cloud/src/api-client.d.ts.map +1 -0
  4. package/dist/packages/cloud/src/api-client.js +123 -0
  5. package/dist/packages/cloud/src/api-client.js.map +1 -0
  6. package/dist/packages/cloud/src/auth.d.ts +13 -0
  7. package/dist/packages/cloud/src/auth.d.ts.map +1 -0
  8. package/dist/packages/cloud/src/auth.js +299 -0
  9. package/dist/packages/cloud/src/auth.js.map +1 -0
  10. package/dist/packages/cloud/src/connect.d.ts +45 -0
  11. package/dist/packages/cloud/src/connect.d.ts.map +1 -0
  12. package/dist/packages/cloud/src/connect.js +166 -0
  13. package/dist/packages/cloud/src/connect.js.map +1 -0
  14. package/dist/packages/cloud/src/index.d.ts +10 -0
  15. package/dist/packages/cloud/src/index.d.ts.map +1 -0
  16. package/dist/packages/cloud/src/index.js +10 -0
  17. package/dist/packages/cloud/src/index.js.map +1 -0
  18. package/dist/packages/cloud/src/lib/ssh-interactive.d.ts +70 -0
  19. package/dist/packages/cloud/src/lib/ssh-interactive.d.ts.map +1 -0
  20. package/dist/packages/cloud/src/lib/ssh-interactive.js +440 -0
  21. package/dist/packages/cloud/src/lib/ssh-interactive.js.map +1 -0
  22. package/dist/packages/cloud/src/lib/ssh-runtime.d.ts +35 -0
  23. package/dist/packages/cloud/src/lib/ssh-runtime.d.ts.map +1 -0
  24. package/dist/packages/cloud/src/lib/ssh-runtime.js +52 -0
  25. package/dist/packages/cloud/src/lib/ssh-runtime.js.map +1 -0
  26. package/dist/packages/cloud/src/proactive-runtime.d.ts +24 -0
  27. package/dist/packages/cloud/src/proactive-runtime.d.ts.map +1 -0
  28. package/dist/packages/cloud/src/proactive-runtime.js +315 -0
  29. package/dist/packages/cloud/src/proactive-runtime.js.map +1 -0
  30. package/dist/packages/cloud/src/types.d.ts +200 -0
  31. package/dist/packages/cloud/src/types.d.ts.map +1 -0
  32. package/dist/packages/cloud/src/types.js +12 -0
  33. package/dist/packages/cloud/src/types.js.map +1 -0
  34. package/dist/packages/cloud/src/workflows.d.ts +65 -0
  35. package/dist/packages/cloud/src/workflows.d.ts.map +1 -0
  36. package/dist/packages/cloud/src/workflows.js +892 -0
  37. package/dist/packages/cloud/src/workflows.js.map +1 -0
  38. package/dist/packages/cloud/src/workspaces.d.ts +11 -0
  39. package/dist/packages/cloud/src/workspaces.d.ts.map +1 -0
  40. package/dist/packages/cloud/src/workspaces.js +146 -0
  41. package/dist/packages/cloud/src/workspaces.js.map +1 -0
  42. package/dist/src/cli/bootstrap.d.ts +3 -1
  43. package/dist/src/cli/bootstrap.d.ts.map +1 -1
  44. package/dist/src/cli/bootstrap.js +17 -3
  45. package/dist/src/cli/bootstrap.js.map +1 -1
  46. package/dist/src/cli/commands/cloud.js +1 -1
  47. package/dist/src/cli/commands/cloud.js.map +1 -1
  48. package/dist/src/cli/commands/dlq.d.ts +20 -0
  49. package/dist/src/cli/commands/dlq.d.ts.map +1 -0
  50. package/dist/src/cli/commands/dlq.js +456 -0
  51. package/dist/src/cli/commands/dlq.js.map +1 -0
  52. package/dist/src/cli/commands/proactive-bootstrap.d.ts +10 -0
  53. package/dist/src/cli/commands/proactive-bootstrap.d.ts.map +1 -0
  54. package/dist/src/cli/commands/proactive-bootstrap.js +133 -0
  55. package/dist/src/cli/commands/proactive-bootstrap.js.map +1 -0
  56. package/dist/src/cli/commands/relay-runtime.d.ts +58 -0
  57. package/dist/src/cli/commands/relay-runtime.d.ts.map +1 -0
  58. package/dist/src/cli/commands/relay-runtime.js +484 -0
  59. package/dist/src/cli/commands/relay-runtime.js.map +1 -0
  60. package/dist/src/cli/commands/setup.d.ts.map +1 -1
  61. package/dist/src/cli/commands/setup.js +11 -9
  62. package/dist/src/cli/commands/setup.js.map +1 -1
  63. package/package.json +11 -10
@@ -0,0 +1,456 @@
1
+ import fs from 'node:fs';
2
+ import path from 'node:path';
3
+ import { InvalidArgumentError } from 'commander';
4
+ import { authorizedApiFetch, defaultApiUrl, ensureAuthenticated } from '@agent-relay/cloud';
5
+ import { getProjectPaths } from '@agent-relay/config';
6
+ import { defaultExit } from '../lib/exit.js';
7
+ function withDefaults(overrides = {}) {
8
+ return {
9
+ getProjectRoot: () => getProjectPaths().projectRoot,
10
+ fs,
11
+ fetch,
12
+ ensureAuthenticated,
13
+ authorizedApiFetch,
14
+ env: process.env,
15
+ defaultCloudUrl: defaultApiUrl(),
16
+ log: (...args) => console.log(...args),
17
+ error: (...args) => console.error(...args),
18
+ exit: defaultExit,
19
+ now: () => Date.now(),
20
+ ...overrides,
21
+ };
22
+ }
23
+ function isObject(value) {
24
+ return value !== null && typeof value === 'object' && !Array.isArray(value);
25
+ }
26
+ function readString(...values) {
27
+ for (const value of values) {
28
+ if (typeof value === 'string' && value.trim()) {
29
+ return value.trim();
30
+ }
31
+ }
32
+ return undefined;
33
+ }
34
+ function readNumber(...values) {
35
+ for (const value of values) {
36
+ if (typeof value === 'number' && Number.isFinite(value)) {
37
+ return value;
38
+ }
39
+ if (typeof value === 'string' && value.trim()) {
40
+ const parsed = Number(value);
41
+ if (Number.isFinite(parsed)) {
42
+ return parsed;
43
+ }
44
+ }
45
+ }
46
+ return undefined;
47
+ }
48
+ function normalizeTimestamp(...values) {
49
+ for (const value of values) {
50
+ if (typeof value !== 'string' || !value.trim())
51
+ continue;
52
+ const parsed = Date.parse(value);
53
+ if (!Number.isNaN(parsed)) {
54
+ return new Date(parsed).toISOString();
55
+ }
56
+ }
57
+ return undefined;
58
+ }
59
+ function readObject(...values) {
60
+ for (const value of values) {
61
+ if (isObject(value)) {
62
+ return value;
63
+ }
64
+ }
65
+ return undefined;
66
+ }
67
+ function parseDurationToMs(raw) {
68
+ const value = raw.trim().toLowerCase();
69
+ const match = value.match(/^(\d+(?:\.\d+)?)(ms|s|m|h|d|w)$/);
70
+ if (!match) {
71
+ throw new InvalidArgumentError('Expected duration like 30m, 12h, 7d, or 500ms.');
72
+ }
73
+ const amount = Number.parseFloat(match[1]);
74
+ const unit = match[2];
75
+ const multiplier = unit === 'ms'
76
+ ? 1
77
+ : unit === 's'
78
+ ? 1_000
79
+ : unit === 'm'
80
+ ? 60_000
81
+ : unit === 'h'
82
+ ? 3_600_000
83
+ : unit === 'd'
84
+ ? 86_400_000
85
+ : 604_800_000;
86
+ return Math.floor(amount * multiplier);
87
+ }
88
+ function assertWorkspaceName(workspace) {
89
+ const trimmed = workspace.trim();
90
+ if (!trimmed) {
91
+ throw new InvalidArgumentError('Workspace name is required.');
92
+ }
93
+ return trimmed;
94
+ }
95
+ function resolveWorkspaceDir(projectRoot, workspace) {
96
+ const baseDir = path.resolve(projectRoot, '_dlq');
97
+ const workspaceDir = path.resolve(baseDir, workspace);
98
+ if (workspaceDir !== baseDir && !workspaceDir.startsWith(`${baseDir}${path.sep}`)) {
99
+ throw new InvalidArgumentError('Workspace name must not escape the _dlq directory.');
100
+ }
101
+ return workspaceDir;
102
+ }
103
+ function summarizeDlqRecord(fileName, record) {
104
+ const event = readObject(record.event);
105
+ const fileStem = path.basename(fileName, path.extname(fileName));
106
+ const eventId = readString(record.eventId, record.event_id, event?.id, event?.eventId, event?.event_id, fileStem) ??
107
+ fileStem;
108
+ const type = readString(record.type, event?.type, record.eventType, record.event_type) ?? 'unknown';
109
+ const errorValue = readObject(record.error);
110
+ const error = readString(record.error, errorValue?.message, errorValue?.code, record.reason, record.lastError, record.last_error) ?? 'unknown';
111
+ const attempts = Math.max(1, Math.trunc(readNumber(record.attempts, record.attemptCount, record.attempt_count, readObject(record.delivery)?.attempts, readObject(record.delivery)?.attemptCount) ?? 1));
112
+ const firstSeen = normalizeTimestamp(record.firstSeenAt, record.first_seen_at, record.createdAt, record.created_at) ??
113
+ 'unknown';
114
+ const lastSeen = normalizeTimestamp(record.lastSeenAt, record.last_seen_at, record.updatedAt, record.updated_at, firstSeen) ?? firstSeen;
115
+ return { eventId, type, error, attempts, firstSeen, lastSeen };
116
+ }
117
+ function loadWorkspaceRecords(deps, workspace) {
118
+ const workspaceDir = resolveWorkspaceDir(deps.getProjectRoot(), assertWorkspaceName(workspace));
119
+ if (!deps.fs.existsSync(workspaceDir)) {
120
+ return { workspaceDir, records: [] };
121
+ }
122
+ const records = deps.fs
123
+ .readdirSync(workspaceDir)
124
+ .filter((name) => name.endsWith('.json'))
125
+ .sort()
126
+ .map((fileName) => {
127
+ const filePath = path.join(workspaceDir, fileName);
128
+ const raw = deps.fs.readFileSync(filePath, 'utf-8');
129
+ const parsed = JSON.parse(raw);
130
+ if (!isObject(parsed)) {
131
+ throw new Error(`DLQ record ${fileName} is not a JSON object.`);
132
+ }
133
+ return {
134
+ fileName,
135
+ filePath,
136
+ record: parsed,
137
+ summary: summarizeDlqRecord(fileName, parsed),
138
+ };
139
+ });
140
+ records.sort((left, right) => {
141
+ const leftTs = Date.parse(left.summary.lastSeen);
142
+ const rightTs = Date.parse(right.summary.lastSeen);
143
+ if (!Number.isNaN(leftTs) && !Number.isNaN(rightTs) && leftTs !== rightTs) {
144
+ return rightTs - leftTs;
145
+ }
146
+ return left.summary.eventId.localeCompare(right.summary.eventId);
147
+ });
148
+ return { workspaceDir, records };
149
+ }
150
+ function findMatchingRecords(records, eventId) {
151
+ const trimmed = eventId.trim();
152
+ return records.filter((entry) => entry.summary.eventId === trimmed ||
153
+ path.basename(entry.fileName, path.extname(entry.fileName)) === trimmed);
154
+ }
155
+ function isUnsupported(response) {
156
+ return response.status === 404 || response.status === 405 || response.status === 501;
157
+ }
158
+ async function requestCloudDlq(deps, path, options) {
159
+ const auth = await deps.ensureAuthenticated(options?.apiUrl || deps.defaultCloudUrl);
160
+ const result = await deps.authorizedApiFetch(auth, path, { method: options?.method ?? 'GET' });
161
+ let payload = null;
162
+ try {
163
+ payload = await result.response.json();
164
+ }
165
+ catch {
166
+ payload = null;
167
+ }
168
+ return { response: result.response, payload };
169
+ }
170
+ async function loadRemoteWorkspaceRecords(deps, workspace, apiUrl) {
171
+ const encodedWorkspace = encodeURIComponent(assertWorkspaceName(workspace));
172
+ const listing = await requestCloudDlq(deps, `/api/v1/workspaces/${encodedWorkspace}/dlq`, { apiUrl }).catch(() => null);
173
+ if (!listing || isUnsupported(listing.response)) {
174
+ return null;
175
+ }
176
+ if (!listing.response.ok) {
177
+ throw new Error(`Cloud DLQ list failed with HTTP ${listing.response.status}`);
178
+ }
179
+ const items = readObject(listing.payload?.data)?.items;
180
+ if (!Array.isArray(items)) {
181
+ return null;
182
+ }
183
+ const records = await Promise.all(items.map(async (entry, index) => {
184
+ const eventId = isObject(entry) ? readString(entry.eventId, entry.event_id) : undefined;
185
+ if (!eventId) {
186
+ throw new Error(`Cloud DLQ item ${index} is missing eventId`);
187
+ }
188
+ const detail = await requestCloudDlq(deps, `/api/v1/workspaces/${encodedWorkspace}/dlq/${encodeURIComponent(eventId)}`, { apiUrl });
189
+ const record = readObject(detail.payload?.data);
190
+ if (!detail.response.ok || !record) {
191
+ throw new Error(`Cloud DLQ inspect failed for ${eventId}`);
192
+ }
193
+ return {
194
+ fileName: `${eventId}.json`,
195
+ filePath: '',
196
+ record,
197
+ summary: summarizeDlqRecord(`${eventId}.json`, record),
198
+ };
199
+ }));
200
+ records.sort((left, right) => {
201
+ const leftTs = Date.parse(left.summary.lastSeen);
202
+ const rightTs = Date.parse(right.summary.lastSeen);
203
+ if (!Number.isNaN(leftTs) && !Number.isNaN(rightTs) && leftTs !== rightTs) {
204
+ return rightTs - leftTs;
205
+ }
206
+ return left.summary.eventId.localeCompare(right.summary.eventId);
207
+ });
208
+ return records;
209
+ }
210
+ async function replayRemoteRecord(deps, workspace, eventId, apiUrl) {
211
+ const encodedWorkspace = encodeURIComponent(assertWorkspaceName(workspace));
212
+ let response;
213
+ try {
214
+ response = await requestCloudDlq(deps, `/api/v1/workspaces/${encodedWorkspace}/dlq/${encodeURIComponent(eventId)}/replay`, { apiUrl, method: 'POST' });
215
+ }
216
+ catch (error) {
217
+ const candidate = error;
218
+ if (candidate.response && isUnsupported(candidate.response)) {
219
+ return false;
220
+ }
221
+ throw error;
222
+ }
223
+ if (isUnsupported(response.response)) {
224
+ return false;
225
+ }
226
+ if (!response.response.ok) {
227
+ throw new Error(`Cloud DLQ replay failed with HTTP ${response.response.status}`);
228
+ }
229
+ return true;
230
+ }
231
+ async function purgeRemoteWorkspace(deps, workspace, apiUrl) {
232
+ const encodedWorkspace = encodeURIComponent(assertWorkspaceName(workspace));
233
+ let response;
234
+ try {
235
+ response = await requestCloudDlq(deps, `/api/v1/workspaces/${encodedWorkspace}/dlq`, {
236
+ apiUrl,
237
+ method: 'DELETE',
238
+ });
239
+ }
240
+ catch (error) {
241
+ const candidate = error;
242
+ if (candidate.response && isUnsupported(candidate.response)) {
243
+ return false;
244
+ }
245
+ throw error;
246
+ }
247
+ if (isUnsupported(response.response)) {
248
+ return false;
249
+ }
250
+ if (!response.response.ok) {
251
+ throw new Error(`Cloud DLQ purge failed with HTTP ${response.response.status}`);
252
+ }
253
+ return true;
254
+ }
255
+ function resolveReplayRequest(record, env) {
256
+ const gateway = readObject(record.gateway);
257
+ const replay = readObject(record.replay, record.replay_request, gateway?.replay, gateway?.request, record.request);
258
+ const baseUrl = readString(env.RELAY_DLQ_GATEWAY_URL, env.RELAY_GATEWAY_URL, env.OPENCLAW_GATEWAY_URL, record.gatewayUrl, record.gateway_url);
259
+ const fullUrl = readString(replay?.url, record.replayUrl, record.replay_url);
260
+ const requestPath = readString(replay?.path, replay?.endpoint, record.replayPath, record.replay_path);
261
+ let url;
262
+ if (fullUrl) {
263
+ url = fullUrl;
264
+ }
265
+ else if (baseUrl && requestPath) {
266
+ url = new URL(requestPath, baseUrl.endsWith('/') ? baseUrl : `${baseUrl}/`).toString();
267
+ }
268
+ if (!url) {
269
+ throw new Error('DLQ record does not include replay URL metadata. Add `replay.url` or provide RELAY_DLQ_GATEWAY_URL plus `replay.path`.');
270
+ }
271
+ const method = readString(replay?.method, record.replayMethod, record.replay_method) ?? 'POST';
272
+ const headerObject = readObject(replay?.headers, record.replayHeaders, record.replay_headers) ?? {};
273
+ const headers = {};
274
+ for (const [key, value] of Object.entries(headerObject)) {
275
+ if (typeof value === 'string') {
276
+ headers[key] = value;
277
+ }
278
+ }
279
+ const rawBody = replay?.body ?? record.event ?? record;
280
+ let body;
281
+ if (method !== 'GET' && method !== 'HEAD') {
282
+ if (typeof rawBody === 'string') {
283
+ body = rawBody;
284
+ }
285
+ else {
286
+ body = JSON.stringify(rawBody);
287
+ if (!Object.keys(headers).some((key) => key.toLowerCase() === 'content-type')) {
288
+ headers['content-type'] = 'application/json';
289
+ }
290
+ }
291
+ }
292
+ return { url, method: method.toUpperCase(), headers, body };
293
+ }
294
+ async function replayRecord(deps, entry, workspace) {
295
+ const request = resolveReplayRequest({
296
+ workspace,
297
+ ...entry.record,
298
+ event: entry.record.event,
299
+ }, deps.env);
300
+ const controller = new AbortController();
301
+ const timeout = setTimeout(() => controller.abort(), 30_000);
302
+ let response;
303
+ try {
304
+ response = await deps.fetch(request.url, {
305
+ method: request.method,
306
+ headers: request.headers,
307
+ body: request.body,
308
+ signal: controller.signal,
309
+ });
310
+ }
311
+ catch (error) {
312
+ if (error instanceof Error && error.name === 'AbortError') {
313
+ throw new Error(`Replay timed out for ${entry.summary.eventId} after 30000ms`);
314
+ }
315
+ throw error;
316
+ }
317
+ finally {
318
+ clearTimeout(timeout);
319
+ }
320
+ if (!response.ok) {
321
+ const detail = await response.text().catch(() => response.statusText);
322
+ throw new Error(`Replay failed for ${entry.summary.eventId}: HTTP ${response.status}${detail ? ` ${detail}` : ''}`);
323
+ }
324
+ return { status: response.status, url: request.url };
325
+ }
326
+ export function registerDlqCommands(program, overrides = {}) {
327
+ const deps = withDefaults(overrides);
328
+ const dlq = program.command('dlq').description('Inspect and manage dead-letter queue records');
329
+ dlq
330
+ .command('list')
331
+ .description('List DLQ records for a workspace')
332
+ .requiredOption('--workspace <name>', 'Workspace name')
333
+ .option('--api-url <url>', 'Cloud API base URL')
334
+ .action(async (options) => {
335
+ try {
336
+ const records = (await loadRemoteWorkspaceRecords(deps, options.workspace, options.apiUrl).catch(() => null)) ??
337
+ loadWorkspaceRecords(deps, options.workspace).records;
338
+ if (records.length === 0) {
339
+ deps.log(`No DLQ records found for workspace "${options.workspace}".`);
340
+ return;
341
+ }
342
+ for (const entry of records) {
343
+ deps.log(`${entry.summary.eventId} | ${entry.summary.type} | attempts=${entry.summary.attempts} | first=${entry.summary.firstSeen} | last=${entry.summary.lastSeen} | error=${entry.summary.error}`);
344
+ }
345
+ }
346
+ catch (err) {
347
+ deps.error(`Failed to list DLQ records: ${err?.message || String(err)}`);
348
+ deps.exit(1);
349
+ }
350
+ });
351
+ dlq
352
+ .command('inspect')
353
+ .description('Print the full DLQ record for an event')
354
+ .requiredOption('--workspace <name>', 'Workspace name')
355
+ .option('--api-url <url>', 'Cloud API base URL')
356
+ .argument('<event-id>', 'Event id to inspect')
357
+ .action(async (eventId, options) => {
358
+ try {
359
+ const records = (await loadRemoteWorkspaceRecords(deps, options.workspace, options.apiUrl).catch(() => null)) ??
360
+ loadWorkspaceRecords(deps, options.workspace).records;
361
+ const matches = findMatchingRecords(records, eventId);
362
+ if (matches.length === 0) {
363
+ throw new Error(`No DLQ record found for event ${eventId}.`);
364
+ }
365
+ if (matches.length > 1) {
366
+ throw new Error(`Multiple DLQ records found for event ${eventId}; inspect the files under _dlq manually.`);
367
+ }
368
+ deps.log(JSON.stringify(matches[0].record, null, 2));
369
+ }
370
+ catch (err) {
371
+ deps.error(`Failed to inspect DLQ record: ${err?.message || String(err)}`);
372
+ deps.exit(1);
373
+ }
374
+ });
375
+ dlq
376
+ .command('replay')
377
+ .description('Replay one or more DLQ records into the gateway')
378
+ .requiredOption('--workspace <name>', 'Workspace name')
379
+ .option('--api-url <url>', 'Cloud API base URL')
380
+ .option('--all', 'Replay every DLQ record in the workspace')
381
+ .argument('[event-id]', 'Event id to replay')
382
+ .action(async (eventId, options) => {
383
+ try {
384
+ const remoteRecords = await loadRemoteWorkspaceRecords(deps, options.workspace, options.apiUrl).catch(() => null);
385
+ const records = remoteRecords ?? loadWorkspaceRecords(deps, options.workspace).records;
386
+ if (records.length === 0) {
387
+ deps.log(`No DLQ records found for workspace "${options.workspace}".`);
388
+ return;
389
+ }
390
+ let targets;
391
+ if (options.all) {
392
+ targets = records;
393
+ }
394
+ else if (eventId) {
395
+ targets = findMatchingRecords(records, eventId);
396
+ }
397
+ else {
398
+ throw new InvalidArgumentError('Provide <event-id> or pass --all.');
399
+ }
400
+ if (targets.length === 0) {
401
+ throw new Error(`No DLQ record found for event ${eventId}.`);
402
+ }
403
+ for (const entry of targets) {
404
+ if (remoteRecords &&
405
+ (await replayRemoteRecord(deps, options.workspace, entry.summary.eventId, options.apiUrl))) {
406
+ deps.log(`Replayed ${entry.summary.eventId} via cloud workspace API.`);
407
+ continue;
408
+ }
409
+ const result = await replayRecord(deps, entry, options.workspace);
410
+ deps.log(`Replayed ${entry.summary.eventId} -> ${result.url} (${result.status})`);
411
+ }
412
+ }
413
+ catch (err) {
414
+ deps.error(`Failed to replay DLQ record: ${err?.message || String(err)}`);
415
+ deps.exit(1);
416
+ }
417
+ });
418
+ dlq
419
+ .command('purge')
420
+ .description('Delete DLQ records for a workspace')
421
+ .requiredOption('--workspace <name>', 'Workspace name')
422
+ .option('--api-url <url>', 'Cloud API base URL')
423
+ .option('--older-than <duration>', 'Only purge records older than a duration', parseDurationToMs)
424
+ .action(async (options) => {
425
+ try {
426
+ if (options.olderThan === undefined) {
427
+ const purgedRemotely = await purgeRemoteWorkspace(deps, options.workspace, options.apiUrl).catch(() => false);
428
+ if (purgedRemotely) {
429
+ deps.log(`Purged DLQ records from workspace "${options.workspace}" via cloud workspace API.`);
430
+ return;
431
+ }
432
+ }
433
+ const { records } = loadWorkspaceRecords(deps, options.workspace);
434
+ if (records.length === 0) {
435
+ deps.log(`No DLQ records found for workspace "${options.workspace}".`);
436
+ return;
437
+ }
438
+ const cutoff = typeof options.olderThan === 'number' ? deps.now() - options.olderThan : undefined;
439
+ const targets = records.filter((entry) => {
440
+ if (cutoff === undefined)
441
+ return true;
442
+ const ts = Date.parse(entry.summary.lastSeen);
443
+ return !Number.isNaN(ts) && ts <= cutoff;
444
+ });
445
+ for (const entry of targets) {
446
+ deps.fs.unlinkSync(entry.filePath);
447
+ }
448
+ deps.log(`Purged ${targets.length} DLQ record(s) from workspace "${options.workspace}".`);
449
+ }
450
+ catch (err) {
451
+ deps.error(`Failed to purge DLQ records: ${err?.message || String(err)}`);
452
+ deps.exit(1);
453
+ }
454
+ });
455
+ }
456
+ //# sourceMappingURL=dlq.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dlq.js","sourceRoot":"","sources":["../../../../src/cli/commands/dlq.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ import { Command } from 'commander';
2
+ type ExitFn = (code: number) => never;
3
+ export interface ProactiveBootstrapDependencies {
4
+ log: (...args: unknown[]) => void;
5
+ error: (...args: unknown[]) => void;
6
+ exit: ExitFn;
7
+ }
8
+ export declare function registerProactiveBootstrapCommands(program: Command, overrides?: Partial<ProactiveBootstrapDependencies>): void;
9
+ export {};
10
+ //# sourceMappingURL=proactive-bootstrap.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"proactive-bootstrap.d.ts","sourceRoot":"","sources":["../../../../src/cli/commands/proactive-bootstrap.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAgBpC,KAAK,MAAM,GAAG,CAAC,IAAI,EAAE,MAAM,KAAK,KAAK,CAAC;AAEtC,MAAM,WAAW,8BAA8B;IAC7C,GAAG,EAAE,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,IAAI,CAAC;IAClC,KAAK,EAAE,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,IAAI,CAAC;IACpC,IAAI,EAAE,MAAM,CAAC;CACd;AA8CD,wBAAgB,kCAAkC,CAChD,OAAO,EAAE,OAAO,EAChB,SAAS,GAAE,OAAO,CAAC,8BAA8B,CAAM,GACtD,IAAI,CAmGN"}
@@ -0,0 +1,133 @@
1
+ import { track } from '@agent-relay/telemetry';
2
+ import { REFRESH_WINDOW_MS, createWorkspace, defaultApiUrl, ensureAuthenticated, issueWorkspaceToken, readStoredAuth, } from '@agent-relay/cloud';
3
+ import { defaultExit } from '../lib/exit.js';
4
+ import { errorClassName } from '../lib/telemetry-helpers.js';
5
+ function withDefaults(overrides = {}) {
6
+ return {
7
+ log: (...args) => console.log(...args),
8
+ error: (...args) => console.error(...args),
9
+ exit: defaultExit,
10
+ ...overrides,
11
+ };
12
+ }
13
+ function printWorkspaceCreateResult(result, log) {
14
+ log(`Workspace created: ${result.workspaceId}`);
15
+ if (result.name) {
16
+ log(`Name: ${result.name}`);
17
+ }
18
+ if (result.relayfileUrl) {
19
+ log(`Relayfile URL: ${result.relayfileUrl}`);
20
+ }
21
+ if (result.relaycronUrl) {
22
+ log(`Relaycron URL: ${result.relaycronUrl}`);
23
+ }
24
+ if (result.relaycastUrl) {
25
+ log(`Relaycast URL: ${result.relaycastUrl}`);
26
+ }
27
+ if (result.relayauthUrl) {
28
+ log(`Relayauth URL: ${result.relayauthUrl}`);
29
+ }
30
+ if (result.joinCommand) {
31
+ log(`Join command: ${result.joinCommand}`);
32
+ }
33
+ }
34
+ function printWorkspaceTokenResult(result, log) {
35
+ log(`RELAY_API_KEY=${result.key}`);
36
+ log('Export this value before starting SDK-backed proactive runtime commands.');
37
+ }
38
+ export function registerProactiveBootstrapCommands(program, overrides = {}) {
39
+ const deps = withDefaults(overrides);
40
+ const runWorkspaceCreate = async (name, options) => {
41
+ try {
42
+ const result = await createWorkspace(name, { apiUrl: options.apiUrl });
43
+ if (options.json) {
44
+ deps.log(JSON.stringify(result, null, 2));
45
+ }
46
+ else {
47
+ printWorkspaceCreateResult(result, deps.log);
48
+ }
49
+ }
50
+ catch (err) {
51
+ deps.error(err instanceof Error ? err.message : String(err));
52
+ deps.exit(1);
53
+ }
54
+ };
55
+ program
56
+ .command('login')
57
+ .description('Authenticate with Agent Relay Cloud via browser')
58
+ .option('--api-url <url>', 'Cloud API base URL')
59
+ .option('--force', 'Force re-authentication even if already logged in')
60
+ .action(async (options) => {
61
+ const started = Date.now();
62
+ let success = false;
63
+ let errorClass;
64
+ try {
65
+ const apiUrl = options.apiUrl || defaultApiUrl();
66
+ if (!options.force) {
67
+ const existing = await readStoredAuth();
68
+ if (existing && existing.apiUrl === apiUrl) {
69
+ const expiresAt = Date.parse(existing.accessTokenExpiresAt);
70
+ if (!Number.isNaN(expiresAt) && expiresAt - Date.now() > REFRESH_WINDOW_MS) {
71
+ deps.log(`Already logged in to ${existing.apiUrl}`);
72
+ success = true;
73
+ return;
74
+ }
75
+ }
76
+ }
77
+ await ensureAuthenticated(apiUrl, { force: options.force });
78
+ success = true;
79
+ }
80
+ catch (err) {
81
+ errorClass = errorClassName(err);
82
+ throw err;
83
+ }
84
+ finally {
85
+ track('cloud_auth', {
86
+ action: 'login',
87
+ success,
88
+ duration_ms: Date.now() - started,
89
+ ...(errorClass ? { error_class: errorClass } : {}),
90
+ });
91
+ }
92
+ });
93
+ program
94
+ .command('init <name>')
95
+ .description('Create a proactive-runtime workspace through the canonical bootstrap path')
96
+ .option('--api-url <url>', 'Cloud API base URL')
97
+ .option('--json', 'Print raw JSON response', false)
98
+ .action(async (name, options) => {
99
+ await runWorkspaceCreate(name, options);
100
+ });
101
+ const workspaces = program.command('workspaces').description('Manage proactive-runtime workspaces');
102
+ workspaces
103
+ .command('create <name>')
104
+ .description('Create a proactive-runtime workspace')
105
+ .option('--api-url <url>', 'Cloud API base URL')
106
+ .option('--json', 'Print raw JSON response', false)
107
+ .action(async (name, options) => {
108
+ await runWorkspaceCreate(name, options);
109
+ });
110
+ const tokens = program.command('tokens').description('Issue proactive-runtime workspace tokens');
111
+ tokens
112
+ .command('issue')
113
+ .description('Issue a workspace token for RELAY_API_KEY')
114
+ .requiredOption('--workspace <workspace>', 'Workspace name or ID')
115
+ .option('--api-url <url>', 'Cloud API base URL')
116
+ .option('--json', 'Print raw JSON response', false)
117
+ .action(async (options) => {
118
+ try {
119
+ const result = await issueWorkspaceToken(options.workspace, { apiUrl: options.apiUrl });
120
+ if (options.json) {
121
+ deps.log(JSON.stringify(result, null, 2));
122
+ }
123
+ else {
124
+ printWorkspaceTokenResult(result, deps.log);
125
+ }
126
+ }
127
+ catch (err) {
128
+ deps.error(err instanceof Error ? err.message : String(err));
129
+ deps.exit(1);
130
+ }
131
+ });
132
+ }
133
+ //# sourceMappingURL=proactive-bootstrap.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"proactive-bootstrap.js","sourceRoot":"","sources":["../../../../src/cli/commands/proactive-bootstrap.ts"],"names":[],"mappings":"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"}