agent-relay 6.0.17 → 6.0.18

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,58 @@
1
+ import { Command } from 'commander';
2
+ import { authorizedApiFetch, type ProactiveAgentRecord, type ProactiveDeploymentResponse, type StoredAuth, type WorkspaceSecretRecord } from '@agent-relay/cloud';
3
+ type ExitFn = (code: number) => never;
4
+ type WebSocketFactory = (url: string, options?: {
5
+ headers?: Record<string, string>;
6
+ }) => {
7
+ on(event: string, listener: (...args: any[]) => void): unknown;
8
+ close(): void;
9
+ };
10
+ export interface RelayRuntimeDependencies {
11
+ cwd: () => string;
12
+ fileExists: (filePath: string) => boolean;
13
+ readFile: (filePath: string, encoding?: BufferEncoding) => string;
14
+ mkdir: (dirPath: string) => Promise<void>;
15
+ writeFile: (filePath: string, contents: string) => Promise<void>;
16
+ readSecretFromStdin: () => Promise<string | undefined>;
17
+ deploy: (input: {
18
+ entrypoint: string;
19
+ source: string;
20
+ }, options?: {
21
+ apiUrl?: string;
22
+ name?: string;
23
+ watch?: boolean;
24
+ }) => Promise<ProactiveDeploymentResponse>;
25
+ listAgents: (options?: {
26
+ apiUrl?: string;
27
+ }) => Promise<ProactiveAgentRecord[]>;
28
+ inspectAgent: (agentId: string, options?: {
29
+ apiUrl?: string;
30
+ }) => Promise<ProactiveAgentRecord>;
31
+ undeployAgent: (agentId: string, options?: {
32
+ apiUrl?: string;
33
+ }) => Promise<ProactiveAgentRecord>;
34
+ createSecret: (name: string, value: string, options: {
35
+ apiUrl?: string;
36
+ workspace: string;
37
+ }) => Promise<WorkspaceSecretRecord>;
38
+ getSecret: (name: string, options: {
39
+ apiUrl?: string;
40
+ workspace: string;
41
+ }) => Promise<WorkspaceSecretRecord>;
42
+ deleteSecret: (name: string, options: {
43
+ apiUrl?: string;
44
+ workspace: string;
45
+ }) => Promise<WorkspaceSecretRecord>;
46
+ ensureAuthenticated: (apiUrl: string, options?: {
47
+ force?: boolean;
48
+ }) => Promise<StoredAuth>;
49
+ authorizedApiFetch: typeof authorizedApiFetch;
50
+ createWebSocket: WebSocketFactory;
51
+ defaultCloudUrl: string;
52
+ log: (...args: unknown[]) => void;
53
+ error: (...args: unknown[]) => void;
54
+ exit: ExitFn;
55
+ }
56
+ export declare function registerRelayRuntimeCommands(program: Command, overrides?: Partial<RelayRuntimeDependencies>): void;
57
+ export {};
58
+ //# sourceMappingURL=relay-runtime.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"relay-runtime.d.ts","sourceRoot":"","sources":["../../../../src/cli/commands/relay-runtime.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,484 @@
1
+ import fs from 'node:fs';
2
+ import fsp from 'node:fs/promises';
3
+ import path from 'node:path';
4
+ import WebSocket from 'ws';
5
+ import { authorizedApiFetch, createWorkspaceSecret, defaultApiUrl, deleteWorkspaceSecret, deployProactiveAgent, ensureAuthenticated, getWorkspaceSecret, inspectProactiveAgent, listProactiveAgents, undeployProactiveAgent, } from '@agent-relay/cloud';
6
+ import { defaultExit } from '../lib/exit.js';
7
+ function withDefaults(overrides = {}) {
8
+ return {
9
+ cwd: () => process.cwd(),
10
+ fileExists: fs.existsSync,
11
+ readFile: (filePath, encoding = 'utf-8') => fs.readFileSync(filePath, encoding),
12
+ mkdir: async (dirPath) => {
13
+ await fsp.mkdir(dirPath, { recursive: true });
14
+ },
15
+ writeFile: (filePath, contents) => fsp.writeFile(filePath, contents, 'utf-8'),
16
+ readSecretFromStdin: async () => {
17
+ if (process.stdin.isTTY)
18
+ return undefined;
19
+ const chunks = [];
20
+ for await (const chunk of process.stdin) {
21
+ chunks.push(Buffer.isBuffer(chunk) ? chunk : Buffer.from(chunk));
22
+ }
23
+ const value = Buffer.concat(chunks).toString('utf-8').trim();
24
+ return value.length > 0 ? value : undefined;
25
+ },
26
+ deploy: (input, options) => deployProactiveAgent(input, options),
27
+ listAgents: (options) => listProactiveAgents(options),
28
+ inspectAgent: (agentId, options) => inspectProactiveAgent(agentId, options),
29
+ undeployAgent: (agentId, options) => undeployProactiveAgent(agentId, options),
30
+ createSecret: (name, value, options) => createWorkspaceSecret(name, value, options),
31
+ getSecret: (name, options) => getWorkspaceSecret(name, options),
32
+ deleteSecret: (name, options) => deleteWorkspaceSecret(name, options),
33
+ ensureAuthenticated,
34
+ authorizedApiFetch,
35
+ createWebSocket: (url, options) => new WebSocket(url, options),
36
+ defaultCloudUrl: overrides.defaultCloudUrl ?? defaultApiUrl(),
37
+ log: (...args) => console.log(...args),
38
+ error: (...args) => console.error(...args),
39
+ exit: defaultExit,
40
+ ...overrides,
41
+ };
42
+ }
43
+ function isObject(value) {
44
+ return value !== null && typeof value === 'object' && !Array.isArray(value);
45
+ }
46
+ function readString(payload, key) {
47
+ const value = payload[key];
48
+ return typeof value === 'string' && value.trim().length > 0 ? value.trim() : undefined;
49
+ }
50
+ function extractLogLine(payload) {
51
+ if (typeof payload === 'string') {
52
+ return payload;
53
+ }
54
+ if (!isObject(payload)) {
55
+ return null;
56
+ }
57
+ return (readString(payload, 'message') ??
58
+ readString(payload, 'content') ??
59
+ readString(payload, 'line') ??
60
+ readString(payload, 'text') ??
61
+ (payload.event && typeof payload.event === 'string' ? payload.event : null) ??
62
+ JSON.stringify(payload));
63
+ }
64
+ function renderAgentSummary(agent) {
65
+ const label = agent.displayName ?? agent.name ?? agent.id;
66
+ const status = agent.status ?? 'unknown';
67
+ const harness = agent.harness ?? '-';
68
+ const model = agent.defaultModel ?? '-';
69
+ return `${label} ${status} ${harness} ${model} ${agent.id}`;
70
+ }
71
+ function normalizeProjectName(name) {
72
+ return (name
73
+ .trim()
74
+ .toLowerCase()
75
+ .replace(/[^a-z0-9._-]+/g, '-')
76
+ .replace(/^-+|-+$/g, '') || 'relay-agent');
77
+ }
78
+ function buildPackageJson(projectName) {
79
+ return (JSON.stringify({
80
+ name: normalizeProjectName(projectName),
81
+ private: true,
82
+ type: 'module',
83
+ scripts: {
84
+ deploy: 'relay deploy src/agent.ts',
85
+ },
86
+ dependencies: {
87
+ '@agent-relay/agent': 'latest',
88
+ },
89
+ }, null, 2) + '\n');
90
+ }
91
+ function buildAgentSource(projectName) {
92
+ return `import { agent } from "@agent-relay/agent";
93
+
94
+ await agent({
95
+ workspace: process.env.RELAY_WORKSPACE ?? "${normalizeProjectName(projectName)}",
96
+ schedule: "0 * * * *",
97
+ onEvent: async (_ctx, event) => {
98
+ console.log("received event", event.type);
99
+ },
100
+ });
101
+ `;
102
+ }
103
+ function buildEnvTemplate(projectName) {
104
+ return `# Set this to the workspace you want the agent to join.
105
+ RELAY_WORKSPACE=${normalizeProjectName(projectName)}
106
+ `;
107
+ }
108
+ function buildReadme(projectName) {
109
+ return `# ${projectName}
110
+
111
+ Minimal proactive agent scaffold for \`relay deploy\`.
112
+
113
+ ## Files
114
+
115
+ - \`src/agent.ts\` is the entrypoint deployed by the relay CLI.
116
+ - \`.env.example\` shows the workspace variable the agent reads at runtime.
117
+
118
+ ## Next steps
119
+
120
+ 1. Run \`npm install\`.
121
+ 2. Run \`relay login\` if you have not linked this machine yet.
122
+ 3. Create or choose a workspace, then update \`RELAY_WORKSPACE\`.
123
+ 4. Deploy with \`relay deploy src/agent.ts --name ${normalizeProjectName(projectName)}\`.
124
+ `;
125
+ }
126
+ async function streamEventSource(response, follow, deps) {
127
+ if (!response.body) {
128
+ deps.error('Log stream response did not include a body.');
129
+ deps.exit(1);
130
+ return;
131
+ }
132
+ const reader = response.body.getReader();
133
+ const decoder = new TextDecoder();
134
+ let buffer = '';
135
+ let printed = false;
136
+ try {
137
+ while (true) {
138
+ const { done, value } = await reader.read();
139
+ if (done)
140
+ break;
141
+ buffer += decoder.decode(value, { stream: true });
142
+ const chunks = buffer.split('\n\n');
143
+ buffer = chunks.pop() ?? '';
144
+ for (const chunk of chunks) {
145
+ const lines = chunk
146
+ .split('\n')
147
+ .map((line) => line.trim())
148
+ .filter((line) => line.startsWith('data:'))
149
+ .map((line) => line.slice('data:'.length).trim())
150
+ .filter(Boolean);
151
+ for (const line of lines) {
152
+ try {
153
+ const parsed = JSON.parse(line);
154
+ const rendered = extractLogLine(parsed);
155
+ if (rendered)
156
+ deps.log(rendered);
157
+ }
158
+ catch {
159
+ deps.log(line);
160
+ }
161
+ printed = true;
162
+ if (!follow) {
163
+ return;
164
+ }
165
+ }
166
+ }
167
+ }
168
+ if (!printed && buffer.trim()) {
169
+ deps.log(buffer.trim());
170
+ }
171
+ }
172
+ catch (error) {
173
+ deps.error(error instanceof Error ? error.message : String(error));
174
+ deps.exit(1);
175
+ }
176
+ finally {
177
+ try {
178
+ reader.releaseLock();
179
+ }
180
+ catch {
181
+ // ignore cleanup errors
182
+ }
183
+ }
184
+ }
185
+ async function streamWebSocketLogs(wsUrl, auth, follow, deps) {
186
+ await new Promise((resolve, reject) => {
187
+ const socket = deps.createWebSocket(wsUrl, {
188
+ headers: {
189
+ authorization: `Bearer ${auth.accessToken}`,
190
+ },
191
+ });
192
+ let settled = false;
193
+ let printed = false;
194
+ const finish = (error) => {
195
+ if (settled)
196
+ return;
197
+ settled = true;
198
+ socket.close();
199
+ if (error) {
200
+ reject(error);
201
+ }
202
+ else {
203
+ resolve();
204
+ }
205
+ };
206
+ socket.on('message', (raw) => {
207
+ const text = Buffer.isBuffer(raw) ? raw.toString('utf-8') : String(raw);
208
+ try {
209
+ const parsed = JSON.parse(text);
210
+ const line = extractLogLine(parsed);
211
+ if (line)
212
+ deps.log(line);
213
+ }
214
+ catch {
215
+ deps.log(text);
216
+ }
217
+ printed = true;
218
+ if (!follow) {
219
+ finish();
220
+ }
221
+ });
222
+ socket.on('error', (error) => {
223
+ finish(error instanceof Error ? error : new Error(String(error)));
224
+ });
225
+ socket.on('close', () => {
226
+ if (!printed && !follow) {
227
+ deps.log('(no log events received)');
228
+ }
229
+ finish();
230
+ });
231
+ });
232
+ }
233
+ function buildLogStreamCandidates(workspace, agent) {
234
+ const encodedWorkspace = encodeURIComponent(workspace);
235
+ const search = agent ? `?agent=${encodeURIComponent(agent)}` : '';
236
+ return [
237
+ `/api/v1/workspaces/${encodedWorkspace}/logs/stream${search}`,
238
+ `/api/v1/workspaces/${encodedWorkspace}/events/stream${search}`,
239
+ `/api/v1/proactive/workspaces/${encodedWorkspace}/logs${search}`,
240
+ ];
241
+ }
242
+ async function runLogsCommand(options, deps) {
243
+ const apiUrl = options.apiUrl || deps.defaultCloudUrl;
244
+ let auth = await deps.ensureAuthenticated(apiUrl);
245
+ for (const endpoint of buildLogStreamCandidates(options.workspace, options.agent)) {
246
+ const { response, auth: nextAuth } = await deps.authorizedApiFetch(auth, endpoint, { method: 'GET' });
247
+ auth = nextAuth;
248
+ if ([404, 405, 501].includes(response.status)) {
249
+ continue;
250
+ }
251
+ if (!response.ok) {
252
+ let detail = response.statusText;
253
+ try {
254
+ const payload = (await response.json());
255
+ detail =
256
+ (payload && (readString(payload, 'error') ?? readString(payload, 'message') ?? detail)) || detail;
257
+ }
258
+ catch {
259
+ // ignore parse failure
260
+ }
261
+ throw new Error(`Logs stream failed at ${endpoint}: ${response.status} ${detail}`.trim());
262
+ }
263
+ const contentType = response.headers.get('content-type') ?? '';
264
+ if (contentType.includes('text/event-stream')) {
265
+ await streamEventSource(response, Boolean(options.follow), deps);
266
+ return;
267
+ }
268
+ if (contentType.includes('application/json')) {
269
+ const payload = (await response.json().catch(() => null));
270
+ if (payload) {
271
+ const wsUrl = readString(payload, 'wsUrl') ?? readString(payload, 'streamUrl') ?? readString(payload, 'url');
272
+ if (wsUrl) {
273
+ await streamWebSocketLogs(wsUrl, auth, Boolean(options.follow), deps);
274
+ return;
275
+ }
276
+ const directLine = extractLogLine(payload);
277
+ if (directLine) {
278
+ deps.log(directLine);
279
+ return;
280
+ }
281
+ }
282
+ }
283
+ const text = await response.text();
284
+ if (text.trim()) {
285
+ deps.log(text.trimEnd());
286
+ return;
287
+ }
288
+ }
289
+ throw new Error('Workspace log streaming is not supported by the configured cloud API.');
290
+ }
291
+ export function registerRelayRuntimeCommands(program, overrides = {}) {
292
+ if (program.name() !== 'relay') {
293
+ return;
294
+ }
295
+ const deps = withDefaults(overrides);
296
+ program
297
+ .command('init [name]')
298
+ .description('Scaffold a minimal proactive agent project')
299
+ .option('--force', 'Overwrite target files if they already exist')
300
+ .action(async (name, options) => {
301
+ const cwd = deps.cwd();
302
+ const projectName = (name?.trim() || path.basename(cwd)).trim() || 'relay-agent';
303
+ const targetDir = name?.trim() ? path.resolve(cwd, name.trim()) : cwd;
304
+ const srcDir = path.join(targetDir, 'src');
305
+ const files = [
306
+ path.join(targetDir, 'package.json'),
307
+ path.join(srcDir, 'agent.ts'),
308
+ path.join(targetDir, '.env.example'),
309
+ path.join(targetDir, 'README.md'),
310
+ ];
311
+ if (!options.force) {
312
+ const existing = files.filter((filePath) => deps.fileExists(filePath));
313
+ if (existing.length > 0) {
314
+ deps.error(`Refusing to overwrite existing files in ${targetDir}`);
315
+ existing.forEach((filePath) => deps.error(`- ${path.relative(cwd, filePath) || filePath}`));
316
+ deps.exit(1);
317
+ return;
318
+ }
319
+ }
320
+ await deps.mkdir(srcDir);
321
+ await deps.writeFile(path.join(targetDir, 'package.json'), buildPackageJson(projectName));
322
+ await deps.writeFile(path.join(srcDir, 'agent.ts'), buildAgentSource(projectName));
323
+ await deps.writeFile(path.join(targetDir, '.env.example'), buildEnvTemplate(projectName));
324
+ await deps.writeFile(path.join(targetDir, 'README.md'), buildReadme(projectName));
325
+ deps.log(`Scaffolded proactive agent project in ${targetDir}`);
326
+ });
327
+ program
328
+ .command('deploy <file>')
329
+ .description('Deploy a proactive agent entrypoint to the managed runtime')
330
+ .option('--name <name>', 'Deployment name override')
331
+ .option('--watch', 'Follow the workspace log stream after deploy')
332
+ .option('--api-url <url>', 'Cloud API base URL')
333
+ .action(async (filePath, options) => {
334
+ const resolvedPath = path.resolve(deps.cwd(), filePath);
335
+ if (!deps.fileExists(resolvedPath)) {
336
+ deps.error(`Entrypoint not found: ${resolvedPath}`);
337
+ deps.exit(1);
338
+ return;
339
+ }
340
+ const source = await Promise.resolve(deps.readFile(resolvedPath, 'utf-8'));
341
+ const result = await deps.deploy({ entrypoint: filePath, source }, { apiUrl: options.apiUrl, name: options.name, watch: options.watch });
342
+ deps.log(`Deployment status: ${result.status ?? 'accepted'}`);
343
+ if (result.deploymentId)
344
+ deps.log(`Deployment: ${result.deploymentId}`);
345
+ if (result.agentId)
346
+ deps.log(`Agent: ${result.agentId}`);
347
+ if (result.workspaceId)
348
+ deps.log(`Workspace: ${result.workspaceId}`);
349
+ if (result.dashboardUrl)
350
+ deps.log(`Dashboard: ${result.dashboardUrl}`);
351
+ if (options.watch) {
352
+ if (!result.workspaceId) {
353
+ deps.error('Watch requested but the deploy response did not include a workspace id.');
354
+ deps.exit(1);
355
+ return;
356
+ }
357
+ await runLogsCommand({
358
+ workspace: result.workspaceId,
359
+ agent: result.agentId,
360
+ follow: true,
361
+ apiUrl: options.apiUrl,
362
+ }, deps);
363
+ }
364
+ });
365
+ program
366
+ .command('logs')
367
+ .description('Tail the proactive runtime workspace log stream')
368
+ .requiredOption('--workspace <workspace>', 'Workspace id or slug')
369
+ .option('--agent <agent>', 'Filter logs to a specific agent')
370
+ .option('--follow', 'Keep streaming until interrupted')
371
+ .option('--api-url <url>', 'Cloud API base URL')
372
+ .action(async (options) => {
373
+ await runLogsCommand(options, deps);
374
+ });
375
+ const agentsCommand = program.commands.find((command) => command.name() === 'agents') ??
376
+ program.command('agents').description('Manage deployed proactive agents');
377
+ agentsCommand._hidden = false;
378
+ agentsCommand
379
+ .command('list')
380
+ .description('List deployed proactive agents')
381
+ .option('--json', 'Output raw JSON')
382
+ .option('--api-url <url>', 'Cloud API base URL')
383
+ .action(async (options) => {
384
+ const agents = await deps.listAgents({ apiUrl: options.apiUrl });
385
+ if (options.json) {
386
+ deps.log(JSON.stringify(agents, null, 2));
387
+ return;
388
+ }
389
+ if (agents.length === 0) {
390
+ deps.log('No deployed proactive agents found.');
391
+ return;
392
+ }
393
+ deps.log('NAME STATUS HARNESS MODEL ID');
394
+ agents.forEach((agent) => deps.log(renderAgentSummary(agent)));
395
+ });
396
+ agentsCommand
397
+ .command('inspect <agent>')
398
+ .description('Inspect a deployed proactive agent')
399
+ .option('--json', 'Output raw JSON')
400
+ .option('--api-url <url>', 'Cloud API base URL')
401
+ .action(async (agentId, options) => {
402
+ const agent = await deps.inspectAgent(agentId, { apiUrl: options.apiUrl });
403
+ if (options.json) {
404
+ deps.log(JSON.stringify(agent, null, 2));
405
+ return;
406
+ }
407
+ deps.log(`Agent: ${agent.displayName ?? agent.name ?? agent.id}`);
408
+ deps.log(`Id: ${agent.id}`);
409
+ deps.log(`Status: ${agent.status ?? 'unknown'}`);
410
+ deps.log(`Harness: ${agent.harness ?? '-'}`);
411
+ deps.log(`Model: ${agent.defaultModel ?? '-'}`);
412
+ if (agent.lastError)
413
+ deps.log(`Last error: ${agent.lastError}`);
414
+ });
415
+ agentsCommand
416
+ .command('undeploy <agent>')
417
+ .description('Undeploy a proactive agent')
418
+ .option('--json', 'Output raw JSON')
419
+ .option('--api-url <url>', 'Cloud API base URL')
420
+ .action(async (agentId, options) => {
421
+ const agent = await deps.undeployAgent(agentId, { apiUrl: options.apiUrl });
422
+ if (options.json) {
423
+ deps.log(JSON.stringify(agent, null, 2));
424
+ return;
425
+ }
426
+ deps.log(`Undeployed agent: ${agent.displayName ?? agent.name ?? agent.id}`);
427
+ });
428
+ const secrets = program.command('secrets').description('Manage proactive runtime workspace secrets');
429
+ secrets
430
+ .command('create <name>')
431
+ .description('Create or update a workspace secret')
432
+ .requiredOption('--workspace <workspace>', 'Workspace id or slug')
433
+ .option('--value <value>', 'Secret value (omit to read from stdin)')
434
+ .option('--api-url <url>', 'Cloud API base URL')
435
+ .action(async (name, options) => {
436
+ const value = options.value ?? (await deps.readSecretFromStdin());
437
+ if (!value) {
438
+ deps.error('Secret value required via --value or stdin.');
439
+ deps.exit(1);
440
+ return;
441
+ }
442
+ const secret = await deps.createSecret(name, value, {
443
+ workspace: options.workspace,
444
+ apiUrl: options.apiUrl,
445
+ });
446
+ deps.log(`Stored secret: ${secret.name}`);
447
+ if (secret.maskedValue)
448
+ deps.log(`Value: ${secret.maskedValue}`);
449
+ });
450
+ secrets
451
+ .command('get <name>')
452
+ .description('Read a workspace secret record')
453
+ .requiredOption('--workspace <workspace>', 'Workspace id or slug')
454
+ .option('--json', 'Output raw JSON')
455
+ .option('--api-url <url>', 'Cloud API base URL')
456
+ .action(async (name, options) => {
457
+ const secret = await deps.getSecret(name, {
458
+ workspace: options.workspace,
459
+ apiUrl: options.apiUrl,
460
+ });
461
+ if (options.json) {
462
+ deps.log(JSON.stringify(secret, null, 2));
463
+ return;
464
+ }
465
+ deps.log(`Secret: ${secret.name}`);
466
+ if (secret.value)
467
+ deps.log(`Value: ${secret.value}`);
468
+ if (secret.maskedValue)
469
+ deps.log(`Masked: ${secret.maskedValue}`);
470
+ });
471
+ secrets
472
+ .command('delete <name>')
473
+ .description('Delete a workspace secret')
474
+ .requiredOption('--workspace <workspace>', 'Workspace id or slug')
475
+ .option('--api-url <url>', 'Cloud API base URL')
476
+ .action(async (name, options) => {
477
+ const secret = await deps.deleteSecret(name, {
478
+ workspace: options.workspace,
479
+ apiUrl: options.apiUrl,
480
+ });
481
+ deps.log(`Deleted secret: ${secret.name}`);
482
+ });
483
+ }
484
+ //# sourceMappingURL=relay-runtime.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"relay-runtime.js","sourceRoot":"","sources":["../../../../src/cli/commands/relay-runtime.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"setup.d.ts","sourceRoot":"","sources":["../../../../src/cli/commands/setup.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAWpC,OAAO,EAGL,6BAA6B,EAC7B,qBAAqB,EACrB,cAAc,EACd,wBAAwB,EACxB,KAAK,mBAAmB,EACzB,MAAM,4BAA4B,CAAC;AACpC,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAIhE,OAAO,EACL,6BAA6B,EAC7B,qBAAqB,EACrB,cAAc,EACd,wBAAwB,EACxB,KAAK,mBAAmB,GACzB,CAAC;AAEF,KAAK,MAAM,GAAG,CAAC,IAAI,EAAE,MAAM,KAAK,KAAK,CAAC;AACtC,KAAK,cAAc,GAAG;IACpB,GAAG,CAAC,EAAE,OAAO,CAAC;IACd,UAAU,CAAC,EAAE,OAAO,CAAC;CACtB,CAAC;AAQF,KAAK,iBAAiB,GAAG;IACvB,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,CAAC;AAEF,MAAM,WAAW,iBAAiB;IAChC,OAAO,EAAE,CAAC,OAAO,EAAE,cAAc,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IACpD,YAAY,EAAE,CAAC,MAAM,CAAC,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;IACxD,eAAe,EAAE,CACf,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE;QACP,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,MAAM,CAAC,EAAE,OAAO,CAAC;QACjB,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,aAAa,CAAC,EAAE,MAAM,CAAC;QACvB,OAAO,EAAE,CAAC,KAAK,EAAE,aAAa,KAAK,IAAI,CAAC;KACzC,KACE,OAAO,CAAC,iBAAiB,CAAC,CAAC;IAChC,iBAAiB,EAAE,CACjB,QAAQ,EAAE,MAAM,EAChB,OAAO,CAAC,EAAE;QAAE,MAAM,CAAC,EAAE,OAAO,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAC;QAAC,SAAS,CAAC,EAAE,MAAM,CAAC;QAAC,aAAa,CAAC,EAAE,MAAM,CAAA;KAAE,KACxF,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC1B,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;AA2MD,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,OAAO,EAAE,SAAS,GAAE,OAAO,CAAC,iBAAiB,CAAM,GAAG,IAAI,CA+JxG"}
1
+ {"version":3,"file":"setup.d.ts","sourceRoot":"","sources":["../../../../src/cli/commands/setup.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAWpC,OAAO,EAGL,6BAA6B,EAC7B,qBAAqB,EACrB,cAAc,EACd,wBAAwB,EACxB,KAAK,mBAAmB,EACzB,MAAM,4BAA4B,CAAC;AACpC,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAIhE,OAAO,EACL,6BAA6B,EAC7B,qBAAqB,EACrB,cAAc,EACd,wBAAwB,EACxB,KAAK,mBAAmB,GACzB,CAAC;AAEF,KAAK,MAAM,GAAG,CAAC,IAAI,EAAE,MAAM,KAAK,KAAK,CAAC;AACtC,KAAK,cAAc,GAAG;IACpB,GAAG,CAAC,EAAE,OAAO,CAAC;IACd,UAAU,CAAC,EAAE,OAAO,CAAC;CACtB,CAAC;AAQF,KAAK,iBAAiB,GAAG;IACvB,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,CAAC;AAEF,MAAM,WAAW,iBAAiB;IAChC,OAAO,EAAE,CAAC,OAAO,EAAE,cAAc,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IACpD,YAAY,EAAE,CAAC,MAAM,CAAC,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;IACxD,eAAe,EAAE,CACf,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE;QACP,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,MAAM,CAAC,EAAE,OAAO,CAAC;QACjB,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,aAAa,CAAC,EAAE,MAAM,CAAC;QACvB,OAAO,EAAE,CAAC,KAAK,EAAE,aAAa,KAAK,IAAI,CAAC;KACzC,KACE,OAAO,CAAC,iBAAiB,CAAC,CAAC;IAChC,iBAAiB,EAAE,CACjB,QAAQ,EAAE,MAAM,EAChB,OAAO,CAAC,EAAE;QAAE,MAAM,CAAC,EAAE,OAAO,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAC;QAAC,SAAS,CAAC,EAAE,MAAM,CAAC;QAAC,aAAa,CAAC,EAAE,MAAM,CAAA;KAAE,KACxF,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC1B,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;AA2MD,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,OAAO,EAAE,SAAS,GAAE,OAAO,CAAC,iBAAiB,CAAM,GAAG,IAAI,CAiKxG"}
@@ -202,15 +202,17 @@ function runTelemetryDefault(action, io) {
202
202
  }
203
203
  export function registerSetupCommands(program, overrides = {}) {
204
204
  const deps = withDefaults(overrides);
205
- program
206
- .command('init', { hidden: true })
207
- .description('First-time setup wizard - start broker')
208
- .option('-y, --yes', 'Accept all defaults (non-interactive)')
209
- .option('--skip-broker', 'Skip broker startup prompt')
210
- .addHelpText('after', '\nBREAKING CHANGE: daemon options were removed. Use broker terminology only.')
211
- .action(async (options) => {
212
- await deps.runInit(options);
213
- });
205
+ if (program.name() !== 'relay' && !program.commands.some((command) => command.name() === 'init')) {
206
+ program
207
+ .command('init', { hidden: true })
208
+ .description('First-time setup wizard - start broker')
209
+ .option('-y, --yes', 'Accept all defaults (non-interactive)')
210
+ .option('--skip-broker', 'Skip broker startup prompt')
211
+ .addHelpText('after', '\nBREAKING CHANGE: daemon options were removed. Use broker terminology only.')
212
+ .action(async (options) => {
213
+ await deps.runInit(options);
214
+ });
215
+ }
214
216
  program
215
217
  .command('setup', { hidden: true })
216
218
  .description('Alias for "init" - first-time setup wizard')