agent-relay 11.1.1 → 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.
- package/README.md +80 -0
- package/dist/cli/commands/agent.d.ts.map +1 -1
- package/dist/cli/commands/agent.js +12 -0
- package/dist/cli/commands/agent.js.map +1 -1
- package/dist/cli/commands/cloud-integration.d.ts +6 -0
- package/dist/cli/commands/cloud-integration.d.ts.map +1 -0
- package/dist/cli/commands/cloud-integration.js +282 -0
- package/dist/cli/commands/cloud-integration.js.map +1 -0
- package/dist/cli/commands/cloud-room.d.ts +11 -0
- package/dist/cli/commands/cloud-room.d.ts.map +1 -0
- package/dist/cli/commands/cloud-room.js +569 -0
- package/dist/cli/commands/cloud-room.js.map +1 -0
- package/dist/cli/commands/cloud.d.ts.map +1 -1
- package/dist/cli/commands/cloud.js +4 -0
- package/dist/cli/commands/cloud.js.map +1 -1
- package/dist/cli/commands/core.d.ts +2 -0
- package/dist/cli/commands/core.d.ts.map +1 -1
- package/dist/cli/commands/core.js +11 -5
- package/dist/cli/commands/core.js.map +1 -1
- package/dist/cli/commands/node.js +4 -0
- package/dist/cli/commands/node.js.map +1 -1
- package/dist/cli/lib/broker-lifecycle.d.ts +3 -2
- package/dist/cli/lib/broker-lifecycle.d.ts.map +1 -1
- package/dist/cli/lib/broker-lifecycle.js +37 -4
- package/dist/cli/lib/broker-lifecycle.js.map +1 -1
- package/dist/cli/lib/sdk-client.d.ts.map +1 -1
- package/dist/cli/lib/sdk-client.js +10 -1
- package/dist/cli/lib/sdk-client.js.map +1 -1
- package/dist/index.cjs +18 -4
- package/package.json +8 -8
package/README.md
CHANGED
|
@@ -62,6 +62,13 @@ agent-relay fleet spawn codex \
|
|
|
62
62
|
--task "Use https://agentrelay.com/skill, ACK over Relay, then wait for details." \
|
|
63
63
|
--node sf-mini
|
|
64
64
|
|
|
65
|
+
# Resume a known Claude/Codex CLI session on its origin node.
|
|
66
|
+
agent-relay fleet spawn codex \
|
|
67
|
+
--name api-worker \
|
|
68
|
+
--task "Resume over Relay and continue the prior task." \
|
|
69
|
+
--node sf-mini \
|
|
70
|
+
--session-ref <actual-codex-thread-id>
|
|
71
|
+
|
|
65
72
|
# Omit --node for automatic eligible-node placement.
|
|
66
73
|
agent-relay fleet spawn codex --name api-worker --task "Review the current diff."
|
|
67
74
|
|
|
@@ -78,6 +85,11 @@ set `RELAY_AGENT_TOKEN` to the token returned by
|
|
|
78
85
|
`agent-relay agent register <lead-name>`. Automatic placement and release need
|
|
79
86
|
only the workspace key.
|
|
80
87
|
|
|
88
|
+
`--session-ref` is a real CLI resume, not a logical collaboration label. Pass
|
|
89
|
+
the actual Claude session ID or Codex thread ID and target its origin node.
|
|
90
|
+
Omit it to start a new CLI session. The project’s Agent Relay workspace remains
|
|
91
|
+
pinned independently until you explicitly create or select another workspace.
|
|
92
|
+
|
|
81
93
|
To run as a Cloud-managed node, first redeem a one-time enrollment token, then start the node:
|
|
82
94
|
|
|
83
95
|
```bash
|
|
@@ -85,6 +97,74 @@ agent-relay cloud enroll --token ocl_node_enr_...
|
|
|
85
97
|
agent-relay node up
|
|
86
98
|
```
|
|
87
99
|
|
|
100
|
+
## Cloud multiplayer rooms
|
|
101
|
+
|
|
102
|
+
Cloud room membership is scoped to one Relay workspace. Every v1 invite creates
|
|
103
|
+
a trusted full room participant: they receive their own revocable Relaycast
|
|
104
|
+
human credential and may use all ordinary agent-level collaboration actions.
|
|
105
|
+
The workspace key itself is never shared, so owner-key administration and Agent
|
|
106
|
+
Relay Cloud organization administration remain owner-only.
|
|
107
|
+
|
|
108
|
+
```bash
|
|
109
|
+
# Owner: invite and manage people in this workspace.
|
|
110
|
+
agent-relay cloud room invite \
|
|
111
|
+
--workspace rw_7ccfea89 \
|
|
112
|
+
--email teammate@example.com \
|
|
113
|
+
--token-file ./teammate.room-invite
|
|
114
|
+
agent-relay cloud room invites --workspace rw_7ccfea89
|
|
115
|
+
agent-relay cloud room members --workspace rw_7ccfea89
|
|
116
|
+
|
|
117
|
+
# Share the owner-only token file over a secure channel. The invitee keeps the
|
|
118
|
+
# token out of shell history and process arguments.
|
|
119
|
+
# Tokens use the consumer-neutral relay_room_inv_ prefix followed by exactly
|
|
120
|
+
# 43 URL-safe characters.
|
|
121
|
+
read -rs ROOM_INVITATION_TOKEN
|
|
122
|
+
printf '%s' "$ROOM_INVITATION_TOKEN" |
|
|
123
|
+
agent-relay cloud room accept --token-stdin
|
|
124
|
+
unset ROOM_INVITATION_TOKEN
|
|
125
|
+
|
|
126
|
+
# Trusted clients establish one stable session per device.
|
|
127
|
+
# --json intentionally includes the participant credential; capture it in
|
|
128
|
+
# memory and do not log or persist it.
|
|
129
|
+
agent-relay cloud room session \
|
|
130
|
+
--workspace rw_7ccfea89 \
|
|
131
|
+
--device-id client-macbook \
|
|
132
|
+
--json
|
|
133
|
+
|
|
134
|
+
# Explicitly ending or replacing the device session revokes the old scoped token.
|
|
135
|
+
agent-relay cloud room revoke-session \
|
|
136
|
+
--workspace rw_7ccfea89 \
|
|
137
|
+
--device-id client-macbook
|
|
138
|
+
|
|
139
|
+
# Participants use their scoped token for agent-level Relaycast operations; an
|
|
140
|
+
# ambient owner workspace key is never consulted when --token is present.
|
|
141
|
+
agent-relay agent presence \
|
|
142
|
+
--token at_live_... \
|
|
143
|
+
--base-url https://cast.agentrelay.com
|
|
144
|
+
|
|
145
|
+
# Owner: revoke access and active room sessions.
|
|
146
|
+
agent-relay cloud room remove-member <membership-id> --workspace rw_7ccfea89
|
|
147
|
+
```
|
|
148
|
+
|
|
149
|
+
There is no room-specific integration grant or credential service. Connect the
|
|
150
|
+
workspace provider through the existing Cloud integration API, then use the
|
|
151
|
+
normal Relayfile workflow for setup, mounts, reads, and writebacks:
|
|
152
|
+
|
|
153
|
+
```bash
|
|
154
|
+
# Owner: discover or connect a provider through Cloud.
|
|
155
|
+
agent-relay cloud integration catalog
|
|
156
|
+
agent-relay cloud integration connect linear --workspace rw_7ccfea89
|
|
157
|
+
agent-relay cloud integration connections --workspace rw_7ccfea89
|
|
158
|
+
|
|
159
|
+
# Member clients use Relayfile directly, including its OAuth/backend selection
|
|
160
|
+
# and durable writeback queue.
|
|
161
|
+
relayfile integration available
|
|
162
|
+
relayfile integration connect linear
|
|
163
|
+
RELAYFILE_LOCAL_DIR="$PWD/.integrations" relayfile setup
|
|
164
|
+
RELAYFILE_LOCAL_DIR="$PWD/.integrations" relayfile status
|
|
165
|
+
RELAYFILE_LOCAL_DIR="$PWD/.integrations" relayfile writeback status
|
|
166
|
+
```
|
|
167
|
+
|
|
88
168
|
`local` remains as a deprecated hidden alias of `node` (it prints a one-time warning).
|
|
89
169
|
|
|
90
170
|
Node workflow runs use Relayflows for YAML, TypeScript, and Python workflow files.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"agent.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/agent.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEzC,OAAO,EAML,KAAK,cAAc,EACpB,MAAM,uBAAuB,CAAC;AAE/B,MAAM,MAAM,wBAAwB,GAAG,cAAc,CAAC;AAStD,wBAAgB,qBAAqB,CACnC,OAAO,EAAE,OAAO,EAChB,SAAS,GAAE,OAAO,CAAC,wBAAwB,CAAM,GAChD,IAAI,
|
|
1
|
+
{"version":3,"file":"agent.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/agent.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEzC,OAAO,EAML,KAAK,cAAc,EACpB,MAAM,uBAAuB,CAAC;AAE/B,MAAM,MAAM,wBAAwB,GAAG,cAAc,CAAC;AAStD,wBAAgB,qBAAqB,CACnC,OAAO,EAAE,OAAO,EAChB,SAAS,GAAE,OAAO,CAAC,wBAAwB,CAAM,GAChD,IAAI,CA2EN"}
|
|
@@ -30,6 +30,18 @@ export function registerAgentCommands(program, overrides = {}) {
|
|
|
30
30
|
printJson(deps, await relay.agents.list({ status: opts.status }));
|
|
31
31
|
});
|
|
32
32
|
});
|
|
33
|
+
addSdkOptions(group.command('me').description('Show the current agent identity')).action(async (opts) => {
|
|
34
|
+
await runSdk(deps, async () => {
|
|
35
|
+
const relay = deps.createAgentRelay(sdkOptionsFromOpts(opts));
|
|
36
|
+
printJson(deps, await relay.agents.me());
|
|
37
|
+
});
|
|
38
|
+
});
|
|
39
|
+
addSdkOptions(group.command('presence').description('List visible agent presence')).action(async (opts) => {
|
|
40
|
+
await runSdk(deps, async () => {
|
|
41
|
+
const relay = deps.createAgentRelay(sdkOptionsFromOpts(opts));
|
|
42
|
+
printJson(deps, await relay.agents.presence());
|
|
43
|
+
});
|
|
44
|
+
});
|
|
33
45
|
addSdkOptions(group
|
|
34
46
|
.command('add')
|
|
35
47
|
.description('Add an agent to the workspace')
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"agent.js","sourceRoot":"","sources":["../../../src/cli/commands/agent.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"agent.js","sourceRoot":"","sources":["../../../src/cli/commands/agent.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { Command } from 'commander';
|
|
2
|
+
import type { CloudDependencies } from './cloud.js';
|
|
3
|
+
type Dependencies = Pick<CloudDependencies, 'log' | 'error' | 'exit' | 'ensureCloudSession' | 'authorizedApiFetch'>;
|
|
4
|
+
export declare function registerCloudIntegrationCommands(cloudCommand: Command, deps: Dependencies): void;
|
|
5
|
+
export {};
|
|
6
|
+
//# sourceMappingURL=cloud-integration.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cloud-integration.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/cloud-integration.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAwB,MAAM,WAAW,CAAC;AAK1D,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAEpD,KAAK,YAAY,GAAG,IAAI,CACtB,iBAAiB,EACjB,KAAK,GAAG,OAAO,GAAG,MAAM,GAAG,oBAAoB,GAAG,oBAAoB,CACvE,CAAC;AAmOF,wBAAgB,gCAAgC,CAAC,YAAY,EAAE,OAAO,EAAE,IAAI,EAAE,YAAY,GAAG,IAAI,CAqJhG"}
|
|
@@ -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"}
|