agent-relay 11.0.2 → 11.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.
Files changed (61) hide show
  1. package/README.md +111 -0
  2. package/dist/cli/agent-relay-mcp.d.ts.map +1 -1
  3. package/dist/cli/agent-relay-mcp.js +69 -15
  4. package/dist/cli/agent-relay-mcp.js.map +1 -1
  5. package/dist/cli/commands/agent.d.ts.map +1 -1
  6. package/dist/cli/commands/agent.js +12 -0
  7. package/dist/cli/commands/agent.js.map +1 -1
  8. package/dist/cli/commands/cloud-integration.d.ts +6 -0
  9. package/dist/cli/commands/cloud-integration.d.ts.map +1 -0
  10. package/dist/cli/commands/cloud-integration.js +282 -0
  11. package/dist/cli/commands/cloud-integration.js.map +1 -0
  12. package/dist/cli/commands/cloud-room.d.ts +11 -0
  13. package/dist/cli/commands/cloud-room.d.ts.map +1 -0
  14. package/dist/cli/commands/cloud-room.js +569 -0
  15. package/dist/cli/commands/cloud-room.js.map +1 -0
  16. package/dist/cli/commands/cloud.d.ts.map +1 -1
  17. package/dist/cli/commands/cloud.js +4 -0
  18. package/dist/cli/commands/cloud.js.map +1 -1
  19. package/dist/cli/commands/core.d.ts +2 -0
  20. package/dist/cli/commands/core.d.ts.map +1 -1
  21. package/dist/cli/commands/core.js +11 -5
  22. package/dist/cli/commands/core.js.map +1 -1
  23. package/dist/cli/commands/fleet.d.ts +4 -1
  24. package/dist/cli/commands/fleet.d.ts.map +1 -1
  25. package/dist/cli/commands/fleet.js +132 -15
  26. package/dist/cli/commands/fleet.js.map +1 -1
  27. package/dist/cli/commands/local-agent.d.ts +4 -0
  28. package/dist/cli/commands/local-agent.d.ts.map +1 -1
  29. package/dist/cli/commands/local-agent.js +66 -2
  30. package/dist/cli/commands/local-agent.js.map +1 -1
  31. package/dist/cli/commands/message.d.ts.map +1 -1
  32. package/dist/cli/commands/message.js +13 -2
  33. package/dist/cli/commands/message.js.map +1 -1
  34. package/dist/cli/commands/node.d.ts +2 -0
  35. package/dist/cli/commands/node.d.ts.map +1 -1
  36. package/dist/cli/commands/node.js +74 -17
  37. package/dist/cli/commands/node.js.map +1 -1
  38. package/dist/cli/commands/workspace.d.ts.map +1 -1
  39. package/dist/cli/commands/workspace.js +13 -7
  40. package/dist/cli/commands/workspace.js.map +1 -1
  41. package/dist/cli/lib/broker-lifecycle.d.ts +3 -2
  42. package/dist/cli/lib/broker-lifecycle.d.ts.map +1 -1
  43. package/dist/cli/lib/broker-lifecycle.js +77 -6
  44. package/dist/cli/lib/broker-lifecycle.js.map +1 -1
  45. package/dist/cli/lib/project-workspace-key.d.ts +1 -1
  46. package/dist/cli/lib/project-workspace-key.d.ts.map +1 -1
  47. package/dist/cli/lib/project-workspace-key.js +1 -1
  48. package/dist/cli/lib/project-workspace-key.js.map +1 -1
  49. package/dist/cli/lib/sdk-client.d.ts.map +1 -1
  50. package/dist/cli/lib/sdk-client.js +10 -1
  51. package/dist/cli/lib/sdk-client.js.map +1 -1
  52. package/dist/cli/lib/workspace-env.d.ts +8 -0
  53. package/dist/cli/lib/workspace-env.d.ts.map +1 -0
  54. package/dist/cli/lib/workspace-env.js +16 -0
  55. package/dist/cli/lib/workspace-env.js.map +1 -0
  56. package/dist/cli/lib/workspace-session.d.ts +24 -0
  57. package/dist/cli/lib/workspace-session.d.ts.map +1 -0
  58. package/dist/cli/lib/workspace-session.js +34 -0
  59. package/dist/cli/lib/workspace-session.js.map +1 -0
  60. package/dist/index.cjs +18 -4
  61. package/package.json +8 -8
@@ -0,0 +1,282 @@
1
+ import { InvalidArgumentError } from 'commander';
2
+ import { defaultApiUrl } from '@agent-relay/cloud';
3
+ import { stripAnsiFast } from '@agent-relay/utils';
4
+ const WORKSPACE_UUID = /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i;
5
+ const RELAY_WORKSPACE = /^rw_[a-z0-9]{8}$/;
6
+ const PROVIDER_ID = /^[a-z0-9][a-z0-9_-]{0,127}$/;
7
+ function isObject(value) {
8
+ return value !== null && typeof value === 'object' && !Array.isArray(value);
9
+ }
10
+ function object(value, label) {
11
+ if (!isObject(value))
12
+ throw new Error(`Cloud returned an invalid ${label} response.`);
13
+ return value;
14
+ }
15
+ function string(value, label) {
16
+ if (typeof value !== 'string' || !value.trim()) {
17
+ throw new Error(`Cloud returned an invalid ${label} response.`);
18
+ }
19
+ return value.trim();
20
+ }
21
+ function connectionProviderIds(value) {
22
+ if (!Array.isArray(value)) {
23
+ throw new Error('Cloud returned an invalid integration connection response.');
24
+ }
25
+ return value.map((entry) => {
26
+ if (typeof entry === 'string')
27
+ return string(entry, 'integration connection');
28
+ return string(object(entry, 'integration connection provider').id, 'integration connection');
29
+ });
30
+ }
31
+ function workspaceId(value) {
32
+ const normalized = value.trim();
33
+ if (!WORKSPACE_UUID.test(normalized) && !RELAY_WORKSPACE.test(normalized)) {
34
+ throw new Error('Unsupported Cloud workspace identifier. Use a Cloud workspace UUID or unified rw_ workspace ID.');
35
+ }
36
+ return normalized;
37
+ }
38
+ function providerId(value) {
39
+ const normalized = value.trim().toLowerCase();
40
+ if (!PROVIDER_ID.test(normalized))
41
+ throw new Error('Invalid integration provider ID.');
42
+ return normalized;
43
+ }
44
+ function backend(value) {
45
+ if (value === 'nango' || value === 'composio')
46
+ return value;
47
+ throw new InvalidArgumentError('Expected backend to be one of: nango, composio');
48
+ }
49
+ function canonicalApiUrl(value) {
50
+ let url;
51
+ try {
52
+ url = new URL(value);
53
+ }
54
+ catch {
55
+ throw new Error('Invalid Cloud API URL.');
56
+ }
57
+ const loopback = url.hostname === 'localhost' || url.hostname === '127.0.0.1' || url.hostname === '[::1]';
58
+ if ((url.protocol !== 'https:' && !(url.protocol === 'http:' && loopback)) ||
59
+ url.username ||
60
+ url.password ||
61
+ url.search ||
62
+ url.hash) {
63
+ throw new Error('Invalid Cloud API URL.');
64
+ }
65
+ return url.toString().replace(/\/+$/, '');
66
+ }
67
+ function cloudError(response) {
68
+ if (response.status === 401) {
69
+ return new Error('Cloud login required. Run `agent-relay cloud login` and retry.');
70
+ }
71
+ if (response.status === 403) {
72
+ return new Error('You do not have permission to perform that integration operation.');
73
+ }
74
+ if (response.status === 404) {
75
+ return new Error('The integration resource was not found or is no longer available.');
76
+ }
77
+ if (response.status === 409) {
78
+ return new Error('The integration operation conflicts with its current lifecycle state.');
79
+ }
80
+ if (response.status === 429) {
81
+ return new Error('Cloud integration rate limit exceeded. Wait and retry.');
82
+ }
83
+ return new Error(`Cloud integration request failed (${response.status}).`);
84
+ }
85
+ async function requestWithAuth(deps, path, init, apiUrl, priorAuth) {
86
+ const requested = apiUrl ?? defaultApiUrl();
87
+ const auth = priorAuth ??
88
+ (await deps.ensureCloudSession({
89
+ apiUrl: requested,
90
+ interactive: false,
91
+ })).auth;
92
+ if (apiUrl && canonicalApiUrl(auth.apiUrl) !== canonicalApiUrl(requested)) {
93
+ throw new Error(`Cloud login is bound to ${canonicalApiUrl(auth.apiUrl)}. Run \`agent-relay cloud login --api-url ${canonicalApiUrl(requested)} --force\` before using this host.`);
94
+ }
95
+ const result = await deps.authorizedApiFetch(auth, path, init, {
96
+ interactive: false,
97
+ });
98
+ const payload = (await result.response.json().catch(() => null));
99
+ if (!result.response.ok)
100
+ throw cloudError(result.response);
101
+ return { payload, auth: result.auth };
102
+ }
103
+ async function request(deps, path, init, apiUrl) {
104
+ return (await requestWithAuth(deps, path, init, apiUrl)).payload;
105
+ }
106
+ async function action(deps, fn) {
107
+ try {
108
+ await fn();
109
+ }
110
+ catch (error) {
111
+ deps.error(error instanceof Error ? error.message : String(error));
112
+ deps.exit(1);
113
+ }
114
+ }
115
+ function terminal(value) {
116
+ return (stripAnsiFast(value)
117
+ // eslint-disable-next-line no-control-regex
118
+ .replace(/[\u0000-\u001f\u007f-\u009f\u202a-\u202e\u2066-\u2069]/g, '�')
119
+ .trim());
120
+ }
121
+ function secretField(key) {
122
+ return /(?:token|secret|password|authorization|credential|api[_-]?key)/i.test(key);
123
+ }
124
+ function sanitize(value) {
125
+ if (Array.isArray(value))
126
+ return value.map(sanitize);
127
+ if (!isObject(value))
128
+ return typeof value === 'string' ? terminal(value) : value;
129
+ return Object.fromEntries(Object.entries(value)
130
+ .filter(([key]) => !secretField(key))
131
+ .map(([key, nested]) => [key, sanitize(nested)]));
132
+ }
133
+ function json(deps, payload) {
134
+ deps.log(JSON.stringify(payload, null, 2));
135
+ }
136
+ function normalizeCatalog(payload) {
137
+ const response = object(payload, 'integration catalog');
138
+ if (!Array.isArray(response.providers)) {
139
+ throw new Error('Cloud returned an invalid integration catalog response.');
140
+ }
141
+ return {
142
+ providers: response.providers.map((entry) => {
143
+ const provider = object(entry, 'integration provider');
144
+ string(provider.id, 'integration provider');
145
+ return sanitize(provider);
146
+ }),
147
+ version: string(response.version, 'integration catalog'),
148
+ };
149
+ }
150
+ function renderProviders(catalog, deps) {
151
+ for (const provider of catalog.providers) {
152
+ const backends = Array.isArray(provider.backends)
153
+ ? provider.backends.map(String)
154
+ : [provider.backend].filter(Boolean).map(String);
155
+ deps.log([
156
+ terminal(String(provider.id ?? 'unknown')),
157
+ backends.length > 0 ? backends.join(',') : 'backend-unspecified',
158
+ ].join(' '));
159
+ }
160
+ }
161
+ function renderConnections(payload, deps) {
162
+ if (!Array.isArray(payload)) {
163
+ throw new Error('Cloud returned an invalid integration connection list.');
164
+ }
165
+ if (payload.length === 0) {
166
+ deps.log('No connected workspace integrations.');
167
+ return;
168
+ }
169
+ for (const entry of payload) {
170
+ const connection = object(entry, 'integration connection');
171
+ const id = [connection.id, connection.provider, connection.providerId].find((value) => typeof value === 'string' && value.trim());
172
+ if (typeof id !== 'string') {
173
+ throw new Error('Cloud returned an invalid integration connection list.');
174
+ }
175
+ const status = typeof connection.status === 'string' && connection.status.trim()
176
+ ? terminal(connection.status)
177
+ : undefined;
178
+ deps.log([terminal(id), status].filter(Boolean).join(' '));
179
+ }
180
+ }
181
+ export function registerCloudIntegrationCommands(cloudCommand, deps) {
182
+ const integration = cloudCommand
183
+ .command('integration')
184
+ .description('Manage Agent Relay Cloud integration connections');
185
+ integration
186
+ .command('catalog')
187
+ .description('Discover static and dynamic Cloud integrations')
188
+ .option('--api-url <url>', 'Cloud API base URL')
189
+ .option('--static', 'Exclude dynamic Nango and Composio catalog entries')
190
+ .option('--search <query>', 'Filter providers by ID or display name')
191
+ .option('--backend <backend>', 'Filter providers by nango or composio', backend)
192
+ .option('--json', 'Output the integration catalog as JSON')
193
+ .action(async (options) => {
194
+ await action(deps, async () => {
195
+ const catalog = normalizeCatalog(await request(deps, `/api/v1/integrations/catalog?dynamic=${options.static ? 'false' : 'true'}`, { method: 'GET' }, options.apiUrl));
196
+ const query = options.search?.trim().toLowerCase();
197
+ const payload = {
198
+ ...catalog,
199
+ providers: catalog.providers.filter((provider) => {
200
+ const haystack = `${String(provider.id ?? '')} ${String(provider.displayName ?? '')}`.toLowerCase();
201
+ const backends = Array.isArray(provider.backends)
202
+ ? provider.backends
203
+ : [provider.backend].filter(Boolean);
204
+ return ((!query || haystack.includes(query)) &&
205
+ (!options.backend || backends.includes(options.backend)));
206
+ }),
207
+ };
208
+ if (options.json)
209
+ json(deps, payload);
210
+ else
211
+ renderProviders(payload, deps);
212
+ });
213
+ });
214
+ integration
215
+ .command('connections')
216
+ .description('List connected workspace integrations')
217
+ .requiredOption('--workspace <workspace>', 'Cloud UUID or unified rw_ workspace ID')
218
+ .option('--api-url <url>', 'Cloud API base URL')
219
+ .option('--json', 'Output connections as JSON')
220
+ .action(async (options) => {
221
+ await action(deps, async () => {
222
+ const id = workspaceId(options.workspace);
223
+ const payload = sanitize(await request(deps, `/api/v1/workspaces/${encodeURIComponent(id)}/integrations`, { method: 'GET' }, options.apiUrl));
224
+ if (options.json)
225
+ json(deps, payload);
226
+ else
227
+ renderConnections(payload, deps);
228
+ });
229
+ });
230
+ integration
231
+ .command('connect')
232
+ .description('Create a Cloud connection session for a provider')
233
+ .argument('<provider>', 'Provider ID from the catalog')
234
+ .requiredOption('--workspace <workspace>', 'Cloud UUID or unified rw_ workspace ID')
235
+ .option('--backend <backend>', 'Connection backend: nango or composio', backend)
236
+ .option('--api-url <url>', 'Cloud API base URL')
237
+ .option('--json', 'Output safe connection-session details as JSON')
238
+ .action(async (providerInput, options) => {
239
+ await action(deps, async () => {
240
+ const id = workspaceId(options.workspace);
241
+ const provider = providerId(providerInput);
242
+ const response = object(await request(deps, `/api/v1/workspaces/${encodeURIComponent(id)}/integrations/connect-session`, {
243
+ method: 'POST',
244
+ body: JSON.stringify({
245
+ allowedIntegrations: [provider],
246
+ ...(options.backend ? { requestedBackend: options.backend } : {}),
247
+ }),
248
+ }, options.apiUrl), 'integration connection');
249
+ const payload = {
250
+ connectLink: string(response.connectLink, 'integration connection'),
251
+ workspaceId: string(response.workspaceId, 'integration connection'),
252
+ relayWorkspaceId: string(response.relayWorkspaceId, 'integration connection'),
253
+ backend: string(response.backend, 'integration connection'),
254
+ providers: connectionProviderIds(response.providers),
255
+ ...(typeof response.expiresAt === 'string' ? { expiresAt: response.expiresAt } : {}),
256
+ };
257
+ if (options.json)
258
+ json(deps, payload);
259
+ else
260
+ deps.log(payload.connectLink);
261
+ });
262
+ });
263
+ integration
264
+ .command('disconnect')
265
+ .description('Disconnect a provider from the workspace')
266
+ .argument('<provider>', 'Provider ID')
267
+ .requiredOption('--workspace <workspace>', 'Cloud UUID or unified rw_ workspace ID')
268
+ .option('--api-url <url>', 'Cloud API base URL')
269
+ .option('--json', 'Output the disconnection result as JSON')
270
+ .action(async (providerInput, options) => {
271
+ await action(deps, async () => {
272
+ const id = workspaceId(options.workspace);
273
+ const provider = providerId(providerInput);
274
+ await request(deps, `/api/v1/workspaces/${encodeURIComponent(id)}/integrations/${encodeURIComponent(provider)}/status`, { method: 'DELETE' }, options.apiUrl);
275
+ if (options.json)
276
+ json(deps, { success: true });
277
+ else
278
+ deps.log(`Disconnected ${terminal(provider)}.`);
279
+ });
280
+ });
281
+ }
282
+ //# sourceMappingURL=cloud-integration.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cloud-integration.js","sourceRoot":"","sources":["../../../src/cli/commands/cloud-integration.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ import { Command } from 'commander';
2
+ import type { CloudDependencies } from './cloud.js';
3
+ type CloudRoomDependencies = Pick<CloudDependencies, 'log' | 'error' | 'exit' | 'ensureCloudSession' | 'authorizedApiFetch'>;
4
+ interface CloudRoomIo {
5
+ readStdin: () => Promise<string>;
6
+ readSecretFile: (filePath: string) => Promise<string>;
7
+ writeSecretFile: (filePath: string, value: string) => Promise<void>;
8
+ }
9
+ export declare function registerCloudRoomCommands(cloudCommand: Command, deps: CloudRoomDependencies, ioOverrides?: Partial<CloudRoomIo>): void;
10
+ export {};
11
+ //# sourceMappingURL=cloud-room.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cloud-room.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/cloud-room.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,OAAO,EAAwB,MAAM,WAAW,CAAC;AAK1D,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAEpD,KAAK,qBAAqB,GAAG,IAAI,CAC/B,iBAAiB,EACjB,KAAK,GAAG,OAAO,GAAG,MAAM,GAAG,oBAAoB,GAAG,oBAAoB,CACvE,CAAC;AAcF,UAAU,WAAW;IACnB,SAAS,EAAE,MAAM,OAAO,CAAC,MAAM,CAAC,CAAC;IACjC,cAAc,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC;IACtD,eAAe,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;CACrE;AA6cD,wBAAgB,yBAAyB,CACvC,YAAY,EAAE,OAAO,EACrB,IAAI,EAAE,qBAAqB,EAC3B,WAAW,GAAE,OAAO,CAAC,WAAW,CAAM,GACrC,IAAI,CAySN"}