agent-relay 9.2.1 → 9.2.3

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 (49) hide show
  1. package/README.md +26 -15
  2. package/dist/cli/bootstrap.d.ts.map +1 -1
  3. package/dist/cli/bootstrap.js +16 -2
  4. package/dist/cli/bootstrap.js.map +1 -1
  5. package/dist/cli/commands/cloud.d.ts +9 -0
  6. package/dist/cli/commands/cloud.d.ts.map +1 -1
  7. package/dist/cli/commands/cloud.js +71 -1
  8. package/dist/cli/commands/cloud.js.map +1 -1
  9. package/dist/cli/commands/core.d.ts +18 -1
  10. package/dist/cli/commands/core.d.ts.map +1 -1
  11. package/dist/cli/commands/core.js +15 -9
  12. package/dist/cli/commands/core.js.map +1 -1
  13. package/dist/cli/commands/fleet.d.ts +0 -12
  14. package/dist/cli/commands/fleet.d.ts.map +1 -1
  15. package/dist/cli/commands/fleet.js +17 -261
  16. package/dist/cli/commands/fleet.js.map +1 -1
  17. package/dist/cli/commands/integration.d.ts +10 -0
  18. package/dist/cli/commands/integration.d.ts.map +1 -1
  19. package/dist/cli/commands/integration.js +89 -0
  20. package/dist/cli/commands/integration.js.map +1 -1
  21. package/dist/cli/commands/local-workflow.d.ts.map +1 -1
  22. package/dist/cli/commands/local-workflow.js +15 -2
  23. package/dist/cli/commands/local-workflow.js.map +1 -1
  24. package/dist/cli/commands/node.d.ts +19 -0
  25. package/dist/cli/commands/node.d.ts.map +1 -0
  26. package/dist/cli/commands/node.js +86 -0
  27. package/dist/cli/commands/node.js.map +1 -0
  28. package/dist/cli/commands/reflex.d.ts +0 -2
  29. package/dist/cli/commands/reflex.d.ts.map +1 -1
  30. package/dist/cli/commands/reflex.js +25 -36
  31. package/dist/cli/commands/reflex.js.map +1 -1
  32. package/dist/cli/lib/broker-lifecycle.d.ts +10 -0
  33. package/dist/cli/lib/broker-lifecycle.d.ts.map +1 -1
  34. package/dist/cli/lib/broker-lifecycle.js +65 -10
  35. package/dist/cli/lib/broker-lifecycle.js.map +1 -1
  36. package/dist/cli/lib/fleet-sidecar.d.ts +16 -42
  37. package/dist/cli/lib/fleet-sidecar.d.ts.map +1 -1
  38. package/dist/cli/lib/fleet-sidecar.js +18 -380
  39. package/dist/cli/lib/fleet-sidecar.js.map +1 -1
  40. package/dist/cli/lib/node-definition-loader.d.ts +17 -0
  41. package/dist/cli/lib/node-definition-loader.d.ts.map +1 -0
  42. package/dist/cli/lib/node-definition-loader.js +124 -0
  43. package/dist/cli/lib/node-definition-loader.js.map +1 -0
  44. package/dist/cli/lib/reflex-capture.d.ts +41 -0
  45. package/dist/cli/lib/reflex-capture.d.ts.map +1 -0
  46. package/dist/cli/lib/reflex-capture.js +128 -0
  47. package/dist/cli/lib/reflex-capture.js.map +1 -0
  48. package/dist/index.cjs +73 -267
  49. package/package.json +11 -8
@@ -1,20 +1,17 @@
1
- import path from 'node:path';
2
- import { pathToFileURL } from 'node:url';
3
1
  import { HarnessDriverClient } from '@agent-relay/harness-driver';
4
- import { enrollFleetNode } from '@agent-relay/cloud';
2
+ import { readFleetSidecarStatus } from '@agent-relay/fleet';
5
3
  import { withDefaults } from './core.js';
6
- import { readBrokerConnection, resolveBrokerBasePort, startBrokerWithPortFallback, } from '../lib/broker-lifecycle.js';
7
- import { buildNodeSupervision, createImplicitLocalFleetNode, fleetStatusPath, readFleetSidecarStatus, serveFleetSidecar, } from '../lib/fleet-sidecar.js';
4
+ import { readBrokerConnection } from '../lib/broker-lifecycle.js';
5
+ import { fleetStatusPath } from '../lib/fleet-sidecar.js';
8
6
  import { addSdkOptions, printJson, runSdk, sdkOptionsFromOpts, withSdkDefaults, } from '../lib/sdk-command.js';
9
- const JITI_NODE_DEFINITION_EXTENSIONS = new Set(['.ts', '.tsx', '.mts', '.cts']);
7
+ const SERVE_REPLACEMENT_MESSAGE = "'fleet serve' has been replaced. Run 'relay node up' (with an optional --config <file>); " +
8
+ "for Cloud-managed nodes run 'relay cloud enroll --token <token>' first.";
10
9
  function withFleetDefaults(overrides = {}) {
11
10
  const core = overrides.core ?? withDefaults();
12
11
  const sdk = overrides.sdk ?? withSdkDefaults();
13
12
  return {
14
13
  core,
15
14
  sdk,
16
- loadNodeDefinition,
17
- enrollFleetNode,
18
15
  log: (...args) => console.log(...args),
19
16
  warn: (...args) => console.warn(...args),
20
17
  error: (...args) => console.error(...args),
@@ -24,25 +21,18 @@ function withFleetDefaults(overrides = {}) {
24
21
  }
25
22
  export function registerFleetCommands(program, overrides = {}) {
26
23
  const deps = withFleetDefaults(overrides);
27
- const group = program.command('fleet').description('Serve and inspect Agent Relay fleet nodes');
24
+ const group = program.command('fleet').description('Inspect and manage Agent Relay fleet nodes');
25
+ // `fleet serve` has moved to `relay node up`. Keep a hidden stub so existing
26
+ // invocations fail loudly with migration guidance instead of an "unknown
27
+ // command" error. `allowUnknownOption` lets it swallow the old serve flags.
28
28
  group
29
- .command('serve')
30
- .description('Serve a fleet node definition')
31
- .argument('[file]', 'TS/JS node definition file (optional when --enrollment-token is provided)')
32
- .option('--name <name>', 'Override node name')
33
- .option('--workspace <key>', 'Workspace key for broker registration and trigger sync')
34
- .option('--max-agents <count>', 'Override maximum managed agents for this node')
35
- .option('--base-url <url>', 'Override Relaycast API base URL')
36
- .option('--enrollment-token <token>', 'One-time Cloud enrollment token (ocl_node_enr_...) to register this node')
37
- .option('--enrollment-url <url>', 'Cloud enrollment endpoint that redeems the token (e.g. https://agentrelay.com/api/v1/fleet/register)')
38
- .action(async (file, options) => {
39
- try {
40
- await runFleetServe(file, options, deps);
41
- }
42
- catch (error) {
43
- deps.error(error instanceof Error ? error.message : String(error));
44
- deps.exit(1);
45
- }
29
+ .command('serve', { hidden: true })
30
+ .argument('[file]')
31
+ .allowUnknownOption(true)
32
+ .allowExcessArguments(true)
33
+ .action(() => {
34
+ deps.error(SERVE_REPLACEMENT_MESSAGE);
35
+ deps.exit(1);
46
36
  });
47
37
  addSdkOptions(group
48
38
  .command('nodes')
@@ -85,7 +75,7 @@ export function registerFleetCommands(program, overrides = {}) {
85
75
  });
86
76
  group
87
77
  .command('status')
88
- .description('Show local fleet broker and sidecar status')
78
+ .description('Show local fleet broker and node status')
89
79
  .action(async () => {
90
80
  try {
91
81
  await runFleetStatus(deps);
@@ -96,197 +86,6 @@ export function registerFleetCommands(program, overrides = {}) {
96
86
  }
97
87
  });
98
88
  }
99
- export async function loadNodeDefinition(file) {
100
- const absolutePath = path.resolve(file);
101
- const loaded = await importNodeDefinition(absolutePath);
102
- const definition = unwrapNodeDefinitionExport(loaded);
103
- if (!isFleetNodeDefinitionLike(definition)) {
104
- throw new Error(`Fleet node file ${absolutePath} must default-export defineNode(...)`);
105
- }
106
- return definition;
107
- }
108
- function unwrapNodeDefinitionExport(loaded) {
109
- let candidate = loaded;
110
- for (let depth = 0; depth < 3; depth += 1) {
111
- if (isFleetNodeDefinitionLike(candidate)) {
112
- return candidate;
113
- }
114
- if (!candidate || typeof candidate !== 'object' || !('default' in candidate)) {
115
- return candidate;
116
- }
117
- candidate = candidate.default;
118
- }
119
- return candidate;
120
- }
121
- function isFleetNodeDefinitionLike(value) {
122
- return Boolean(value &&
123
- typeof value === 'object' &&
124
- value.__agentRelayFleetNode === true);
125
- }
126
- async function importNodeDefinition(absolutePath) {
127
- if (!JITI_NODE_DEFINITION_EXTENSIONS.has(path.extname(absolutePath).toLowerCase())) {
128
- try {
129
- return (await import(pathToFileURL(absolutePath).href));
130
- }
131
- catch (error) {
132
- if (!shouldFallbackToJiti(error)) {
133
- throw error;
134
- }
135
- try {
136
- return await importNodeDefinitionWithJiti(absolutePath);
137
- }
138
- catch {
139
- throw error;
140
- }
141
- }
142
- }
143
- return importNodeDefinitionWithJiti(absolutePath);
144
- }
145
- function shouldFallbackToJiti(error) {
146
- if (isBunRuntime()) {
147
- return false;
148
- }
149
- return error instanceof SyntaxError && getErrorCode(error) !== 'ERR_MODULE_NOT_FOUND';
150
- }
151
- function isBunRuntime() {
152
- return typeof process.versions.bun === 'string';
153
- }
154
- function getErrorCode(error) {
155
- return error && typeof error === 'object' && 'code' in error
156
- ? String(error.code)
157
- : undefined;
158
- }
159
- async function importNodeDefinitionWithJiti(absolutePath) {
160
- const { createJiti } = await import('jiti');
161
- const jiti = createJiti(pathToFileURL(process.cwd()).href, {
162
- interopDefault: true,
163
- });
164
- return jiti.import(absolutePath, { default: true });
165
- }
166
- /**
167
- * In enrollment mode the one-time token is exchanged for durable node
168
- * credentials BEFORE the broker boots. The returned credentials populate the env
169
- * the broker reads to bind itself to the Cloud workspace's fleet roster
170
- * (RELAY_NODE_TOKEN over the fleet WS, RELAY_BASE_URL as the Relaycast origin).
171
- * Returns the enrollment record, or undefined when not in enrollment mode.
172
- */
173
- async function maybeEnrollFleetNode(options, nameOption, maxAgentsOverride, deps) {
174
- const enrollmentToken = typeof options.enrollmentToken === 'string' ? options.enrollmentToken.trim() : '';
175
- const enrollmentUrl = typeof options.enrollmentUrl === 'string' ? options.enrollmentUrl.trim() : '';
176
- if (enrollmentUrl && !enrollmentToken) {
177
- throw new Error('--enrollment-url requires --enrollment-token.');
178
- }
179
- if (!enrollmentToken) {
180
- return undefined;
181
- }
182
- const enrollment = await deps.enrollFleetNode({
183
- enrollmentToken,
184
- enrollmentUrl,
185
- ...(nameOption ? { name: nameOption } : {}),
186
- ...(maxAgentsOverride !== undefined ? { maxAgents: maxAgentsOverride } : {}),
187
- });
188
- deps.core.env.RELAY_NODE_TOKEN = enrollment.nodeToken;
189
- deps.core.env.RELAY_BASE_URL = enrollment.relaycastUrl;
190
- deps.log(`Enrolled fleet node "${enrollment.nodeName}"${enrollment.nodeId ? ` (${enrollment.nodeId})` : ''} in workspace ${enrollment.relayWorkspaceId}.`);
191
- return enrollment;
192
- }
193
- /**
194
- * Wires the explicit `--workspace`/`--base-url` overrides into the broker env so
195
- * `startBrokerWithPortFallback` binds the node to the right workspace and origin.
196
- * Returns the resolved values for downstream sidecar wiring.
197
- *
198
- * Precedence for the Relaycast origin: enrollment is the source of truth (it
199
- * already wrote RELAY_BASE_URL during the exchange) and an explicit `--base-url`
200
- * is the only thing that overrides it; the override must reach the broker via
201
- * RELAY_BASE_URL, not just `serveFleetSidecar`.
202
- */
203
- function applyServeEnvOverrides(options, deps) {
204
- const workspaceKey = typeof options.workspace === 'string' ? options.workspace.trim() : '';
205
- if (workspaceKey) {
206
- deps.core.env.RELAY_WORKSPACE_KEY = workspaceKey;
207
- deps.core.env.RELAY_API_KEY = workspaceKey;
208
- }
209
- const baseUrlOverride = typeof options.baseUrl === 'string' ? options.baseUrl.trim() : '';
210
- if (baseUrlOverride) {
211
- deps.core.env.RELAY_BASE_URL = baseUrlOverride;
212
- }
213
- return { workspaceKey, baseUrlOverride };
214
- }
215
- function createImplicitServeNodeDefinition(input) {
216
- return createImplicitLocalFleetNode({
217
- paths: input.paths,
218
- teamsConfig: input.deps.core.loadTeamsConfig(input.paths.projectRoot),
219
- // Name precedence (kept identical to nameOverride in runFleetServe so the
220
- // implicit node definition and the sidecar registration always agree):
221
- // --name > enrollment record's nodeName > createImplicitLocalFleetNode's
222
- // projectRoot-basename default.
223
- name: input.nameOption ?? input.enrollment?.nodeName,
224
- ...(input.maxAgentsOverride !== undefined ? { maxAgents: input.maxAgentsOverride } : {}),
225
- });
226
- }
227
- async function runFleetServe(file, options, deps) {
228
- const maxAgentsOverride = parsePositiveIntegerOption(options.maxAgents, '--max-agents');
229
- const nameOption = typeof options.name === 'string' ? options.name : undefined;
230
- const paths = deps.core.getProjectPaths();
231
- deps.core.fs.mkdirSync(paths.dataDir, { recursive: true });
232
- // The `<file>` node-def is OPTIONAL in enrollment mode — identity/name/
233
- // capabilities come from the enrollment record; a `<file>`, when present,
234
- // overrides/augments it.
235
- //
236
- // Load + validate the `<file>` BEFORE redeeming the one-time enrollment token:
237
- // the token is single-use, so a missing/invalid file must fail fast rather than
238
- // burn the token on a run that can't succeed (the durable creds returned by the
239
- // exchange would never be persisted, forcing the operator to mint a fresh token
240
- // just to fix a local file error).
241
- const fileDefinition = file ? await deps.loadNodeDefinition(file) : undefined;
242
- const enrollment = await maybeEnrollFleetNode(options, nameOption, maxAgentsOverride, deps);
243
- if (!enrollment && !file) {
244
- throw new Error('A node definition <file> is required unless --enrollment-token is provided.');
245
- }
246
- const nodeDefinition = fileDefinition ??
247
- createImplicitServeNodeDefinition({
248
- paths,
249
- enrollment,
250
- nameOption,
251
- maxAgentsOverride,
252
- deps,
253
- });
254
- const { workspaceKey, baseUrlOverride } = applyServeEnvOverrides(options, deps);
255
- // An enrolled node prefers the name from the enrollment record; a --name flag
256
- // (already forwarded to the exchange) still wins through nameOption.
257
- const nameOverride = nameOption ?? enrollment?.nodeName ?? undefined;
258
- const baseUrl = baseUrlOverride || enrollment?.relaycastUrl || undefined;
259
- const basePort = resolveBrokerBasePort(deps.core);
260
- const started = await startBrokerWithPortFallback(paths, basePort, deps.core);
261
- const connection = connectionFromFile(paths.dataDir);
262
- const controller = new AbortController();
263
- const stop = () => controller.abort();
264
- deps.core.onSignal('SIGINT', stop);
265
- deps.core.onSignal('SIGTERM', stop);
266
- await serveFleetSidecar({
267
- definition: nodeDefinition,
268
- connection,
269
- workspaceKey: workspaceKey || started.relay.workspaceKey,
270
- baseUrl,
271
- nameOverride,
272
- maxAgentsOverride,
273
- supervision: buildNodeSupervision({
274
- // Strip the one-time --enrollment-token/--enrollment-url flags from the
275
- // supervised argv. The broker restarts supervised sidecars by re-executing
276
- // this argv; replaying a consumed enrollment token would fail the exchange
277
- // and the node would never come back. The durable credentials minted by the
278
- // first exchange live in the supervision env (RELAY_NODE_TOKEN /
279
- // RELAY_BASE_URL), so restarts take the durable path with no flags to redeem.
280
- argv: stripEnrollmentFlags(deps.core.argv),
281
- cwd: process.cwd(),
282
- env: deps.core.env,
283
- }),
284
- statusPath: fleetStatusPath(paths),
285
- signal: controller.signal,
286
- log: (message) => deps.log(message),
287
- warn: (message) => deps.warn(message),
288
- });
289
- }
290
89
  async function runFleetStatus(deps) {
291
90
  const paths = deps.core.getProjectPaths();
292
91
  const conn = readBrokerConnection(paths.dataDir);
@@ -325,49 +124,6 @@ async function runFleetStatus(deps) {
325
124
  sidecar: sidecar ? { ...sidecar, alive: isPidAlive(sidecar.pid) } : null,
326
125
  }, null, 2));
327
126
  }
328
- function connectionFromFile(dataDir) {
329
- const conn = readBrokerConnection(dataDir);
330
- if (!conn) {
331
- throw new Error(`Broker connection file was not written in ${dataDir}`);
332
- }
333
- return { url: conn.url, apiKey: conn.api_key };
334
- }
335
- /**
336
- * Removes the one-time enrollment flags (and their values) from a captured argv
337
- * so the broker's supervised-restart replay never re-redeems a consumed token.
338
- * Handles both `--flag value` and `--flag=value` forms. The durable credentials
339
- * minted by the first exchange are carried in the supervision env instead.
340
- */
341
- export function stripEnrollmentFlags(argv) {
342
- const oneTimeFlags = new Set(['--enrollment-token', '--enrollment-url']);
343
- const result = [];
344
- for (let i = 0; i < argv.length; i += 1) {
345
- const arg = argv[i];
346
- const eqIndex = arg.indexOf('=');
347
- const flagName = eqIndex === -1 ? arg : arg.slice(0, eqIndex);
348
- if (oneTimeFlags.has(flagName)) {
349
- // `--flag=value` carries its value inline; `--flag value` consumes the next
350
- // token. Skip the following token only when this flag had no inline `=value`
351
- // and a value token actually follows.
352
- if (eqIndex === -1 && i + 1 < argv.length) {
353
- i += 1;
354
- }
355
- continue;
356
- }
357
- result.push(arg);
358
- }
359
- return result;
360
- }
361
- function parsePositiveIntegerOption(value, label) {
362
- if (value === undefined) {
363
- return undefined;
364
- }
365
- const parsed = Number.parseInt(String(value), 10);
366
- if (!Number.isInteger(parsed) || parsed <= 0) {
367
- throw new Error(`${label} must be a positive integer`);
368
- }
369
- return parsed;
370
- }
371
127
  function isPidAlive(pid) {
372
128
  try {
373
129
  process.kill(pid, 0);
@@ -1 +1 @@
1
- {"version":3,"file":"fleet.js","sourceRoot":"","sources":["../../../src/cli/commands/fleet.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"fleet.js","sourceRoot":"","sources":["../../../src/cli/commands/fleet.ts"],"names":[],"mappings":"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"}
@@ -25,6 +25,10 @@ export interface RelayfileWritebackBinding {
25
25
  /** Per-channel HMAC secret the subscription signs deliveries with. */
26
26
  secret: string;
27
27
  }
28
+ export interface RelayfileWebhookSubscription {
29
+ subscriptionId: string;
30
+ secret?: string;
31
+ }
28
32
  export interface RelayfileBridge {
29
33
  isConnected(provider: string): Promise<boolean>;
30
34
  connect(provider: string): Promise<void>;
@@ -61,6 +65,12 @@ export interface RelayfileBridge {
61
65
  * subscription and the ingress agree on it without any static shared secret.
62
66
  */
63
67
  resolveWritebackBinding(channel: string): Promise<RelayfileWritebackBinding | undefined>;
68
+ createWebhookSubscription(input: {
69
+ url: string;
70
+ pathGlobs: string[];
71
+ secret: string;
72
+ }): Promise<RelayfileWebhookSubscription>;
73
+ deleteWebhookSubscription(subscriptionId: string): Promise<void>;
64
74
  }
65
75
  export type IntegrationCommandDependencies = SdkCommandDeps & {
66
76
  resolveLocalRelayOptions: () => Promise<LocalRelayOptions | undefined>;
@@ -1 +1 @@
1
- {"version":3,"file":"integration.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/integration.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAKzC,OAAO,EAML,KAAK,cAAc,EACpB,MAAM,uBAAuB,CAAC;AAG/B,OAAO,EACL,qBAAqB,EAGrB,sBAAsB,EACtB,KAAK,sBAAsB,EAC5B,MAAM,mBAAmB,CAAC;AAI3B,OAAO,EAAE,qBAAqB,EAAE,sBAAsB,EAAE,CAAC;AAEzD,MAAM,WAAW,iBAAiB;IAChC,YAAY,EAAE,MAAM,CAAC;IACrB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,cAAc,EAAE,MAAM,CAAC;CACxB;AAED,MAAM,WAAW,yBAAyB;IACxC,oFAAoF;IACpF,QAAQ,EAAE,MAAM,CAAC;IACjB,2FAA2F;IAC3F,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,yBAAyB;IACxC,0EAA0E;IAC1E,GAAG,EAAE,MAAM,CAAC;IACZ,sEAAsE;IACtE,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,eAAe;IAC9B,WAAW,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IAChD,OAAO,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACzC,IAAI,CAAC,KAAK,EAAE;QACV,QAAQ,EAAE,MAAM,CAAC;QACjB,QAAQ,EAAE,MAAM,CAAC;QACjB,OAAO,EAAE,MAAM,CAAC;QAChB,SAAS,EAAE,MAAM,CAAC;QAClB,YAAY,EAAE,MAAM,CAAC;QACrB,cAAc,EAAE,MAAM,CAAC;KACxB,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAClB,YAAY,IAAI,OAAO,CAAC,gBAAgB,EAAE,CAAC,CAAC;IAC5C,MAAM,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC1D;;;;;;;OAOG;IACH,mBAAmB,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,yBAAyB,CAAC,CAAC;IAC5F;;;;OAIG;IACH,gBAAgB,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IAClC;;;;;;OAMG;IACH,uBAAuB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,yBAAyB,GAAG,SAAS,CAAC,CAAC;CAC1F;AAED,MAAM,MAAM,8BAA8B,GAAG,cAAc,GAAG;IAC5D,wBAAwB,EAAE,MAAM,OAAO,CAAC,iBAAiB,GAAG,SAAS,CAAC,CAAC;IACvE,SAAS,EAAE,eAAe,CAAC;IAC3B,aAAa,EAAE,MAAM,OAAO,CAAC;IAC7B,MAAM,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC;CAC/C,CAAC;AAsDF;;;;;;GAMG;AACH,wBAAgB,sBAAsB,CAAC,OAAO,CAAC,EAAE,sBAAsB,GAAG,eAAe,CA6ExF;AAgfD,wBAAgB,2BAA2B,CACzC,OAAO,EAAE,OAAO,EAChB,SAAS,GAAE,OAAO,CAAC,8BAA8B,CAAM,GACtD,IAAI,CA8LN"}
1
+ {"version":3,"file":"integration.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/integration.ts"],"names":[],"mappings":"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"}
@@ -3,6 +3,7 @@ import { getProjectPaths } from '@agent-relay/config';
3
3
  import { addSdkOptions, printJson, runSdk, sdkOptionsFromOpts, withSdkDefaults, } from '../lib/sdk-command.js';
4
4
  import { connectProjectBrokerClient } from '../lib/project-broker-client.js';
5
5
  import { MIN_RELAYFILE_VERSION, RelayfileControlPlaneClient, RelayfileControlPlaneError, assertRelayfileVersion, } from '@relayfile/client';
6
+ import { resolveBaseUrl, resolveWorkspaceKey } from '../lib/sdk-client.js';
6
7
  // Re-export the version gate so existing tests importing it from this module
7
8
  // (and any callers) keep working after it moved to the published client package.
8
9
  export { MIN_RELAYFILE_VERSION, assertRelayfileVersion };
@@ -137,6 +138,12 @@ export function defaultRelayfileBridge(options) {
137
138
  return undefined;
138
139
  }
139
140
  },
141
+ async createWebhookSubscription(input) {
142
+ return client.createWebhookSubscription(input);
143
+ },
144
+ async deleteWebhookSubscription(subscriptionId) {
145
+ await client.deleteWebhookSubscription(subscriptionId);
146
+ },
140
147
  };
141
148
  }
142
149
  async function promptLine(question) {
@@ -185,6 +192,9 @@ function withIntegrationDefaults(overrides = {}) {
185
192
  function explicitWorkspaceKey(opts) {
186
193
  return typeof opts.workspaceKey === 'string' && opts.workspaceKey.trim() !== '';
187
194
  }
195
+ function isRecord(value) {
196
+ return Boolean(value) && typeof value === 'object' && !Array.isArray(value);
197
+ }
188
198
  function shouldRetryWithLocalWorkspaceKey(error) {
189
199
  const message = error instanceof Error ? error.message : String(error);
190
200
  return (/invalid (api|workspace) key/i.test(message) ||
@@ -244,6 +254,68 @@ async function resolveWriteback(deps, commandOpts, channel) {
244
254
  }
245
255
  return { url: binding.url, secret: binding.secret };
246
256
  }
257
+ async function createRelayfileInboundTarget(commandOpts, local, input) {
258
+ const options = sdkOptionsFromOpts(commandOpts);
259
+ const authOptions = local && !explicitWorkspaceKey(commandOpts) ? localRetryOptions(options, local) : options;
260
+ const workspaceKey = resolveWorkspaceKey(authOptions);
261
+ const baseUrl = resolveInboundTargetBaseUrl(options);
262
+ const response = await fetch(new URL('/v1/integrations/relayfile/inbound-target', baseUrl), {
263
+ method: 'POST',
264
+ headers: {
265
+ Authorization: `Bearer ${workspaceKey}`,
266
+ 'Content-Type': 'application/json',
267
+ },
268
+ body: JSON.stringify({
269
+ channel: input.channel,
270
+ provider: input.provider,
271
+ pathGlob: input.pathGlob,
272
+ }),
273
+ });
274
+ let body;
275
+ try {
276
+ body = await response.json();
277
+ }
278
+ catch {
279
+ body = undefined;
280
+ }
281
+ if (!response.ok) {
282
+ const message = isRecord(body) && typeof body.message === 'string'
283
+ ? body.message
284
+ : `relaycast returned ${response.status}`;
285
+ throw new Error(`Could not create relayfile inbound target: ${message}`);
286
+ }
287
+ return parseRelayfileInboundTargetResponse(body);
288
+ }
289
+ function parseRelayfileInboundTargetResponse(body) {
290
+ const data = isRecord(body) && isRecord(body.data) ? body.data : body;
291
+ if (!isRecord(data) || typeof data.url !== 'string' || typeof data.secret !== 'string') {
292
+ throw new Error('relaycast returned an invalid relayfile inbound target response');
293
+ }
294
+ const url = data.url.trim();
295
+ const secret = data.secret.trim();
296
+ if (!url || !secret) {
297
+ throw new Error('relaycast returned an invalid relayfile inbound target response');
298
+ }
299
+ let parsedUrl;
300
+ try {
301
+ parsedUrl = new URL(url);
302
+ }
303
+ catch {
304
+ throw new Error('relaycast returned an invalid relayfile inbound target URL');
305
+ }
306
+ if (parsedUrl.protocol !== 'https:') {
307
+ throw new Error('relaycast returned a non-https relayfile inbound target URL');
308
+ }
309
+ return { url: parsedUrl.toString(), secret };
310
+ }
311
+ function resolveInboundTargetBaseUrl(options) {
312
+ const baseUrl = resolveBaseUrl(options) ?? 'https://cast.agentrelay.com';
313
+ const parsed = new URL(baseUrl);
314
+ if (parsed.protocol !== 'https:') {
315
+ throw new Error('Inbound relayfile target provisioning requires an https Relaycast base URL.');
316
+ }
317
+ return parsed.toString();
318
+ }
247
319
  function targetChannel(target) {
248
320
  const trimmed = target.trim();
249
321
  // Strip the leading sigil so the channel id is canonical (`general`, not
@@ -436,6 +508,11 @@ async function runSubscribe(deps, providerArg, opts) {
436
508
  const channel = targetChannel(to);
437
509
  const events = commaList(opts.events);
438
510
  const writeback = await resolveWriteback(deps, opts, channel);
511
+ const inboundTarget = await createRelayfileInboundTarget(opts, local, {
512
+ channel,
513
+ provider,
514
+ pathGlob,
515
+ });
439
516
  const prefix = webhookNamePrefix(provider, pathGlob);
440
517
  const name = inboundWebhookName(prefix);
441
518
  // Capture the binding we're about to replace *before* touching anything, so we
@@ -445,8 +522,14 @@ async function runSubscribe(deps, providerArg, opts) {
445
522
  const priorBinding = await findExistingBinding(deps, provider, pathGlob);
446
523
  let webhook;
447
524
  let subscription;
525
+ let relayfileWebhook;
448
526
  try {
449
527
  webhook = await relay.webhooks.createInbound({ channel, name });
528
+ relayfileWebhook = await deps.relayfile.createWebhookSubscription({
529
+ url: inboundTarget.url,
530
+ pathGlobs: [pathGlob],
531
+ secret: inboundTarget.secret,
532
+ });
450
533
  subscription = await relay.integrations.subscriptions.create({
451
534
  event: events.length === 1 ? events[0] : 'message.created',
452
535
  events: events.length ? events : ['message.created', 'thread.reply'],
@@ -476,6 +559,11 @@ async function runSubscribe(deps, providerArg, opts) {
476
559
  .delete(webhook.webhookId)
477
560
  .catch((cleanupErr) => warnCleanup(deps, 'webhook', webhook.webhookId, cleanupErr));
478
561
  }
562
+ if (relayfileWebhook) {
563
+ await deps.relayfile
564
+ .deleteWebhookSubscription(relayfileWebhook.subscriptionId)
565
+ .catch((cleanupErr) => warnCleanup(deps, 'relayfile webhook subscription', relayfileWebhook.subscriptionId, cleanupErr));
566
+ }
479
567
  throw err;
480
568
  }
481
569
  // New binding is live (relayfile.bind upserts on (provider, pathGlob)). Now
@@ -489,6 +577,7 @@ async function runSubscribe(deps, providerArg, opts) {
489
577
  // Show the native resource the user typed, plus the resolved glob when they differ.
490
578
  const boundLabel = pathGlob === resource ? resource : `${resource} (${pathGlob})`;
491
579
  deps.log(`✓ ${provider} ${boundLabel} bound -> ${to}`);
580
+ deps.log(`✓ Server-side inbound webhook subscription: ${relayfileWebhook.subscriptionId}`);
492
581
  deps.log('✓ Listening. Replies will post back in-thread.');
493
582
  }
494
583
  async function runUnsubscribe(deps, provider, opts) {