agent-relay 8.7.1 → 8.8.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 (51) hide show
  1. package/dist/auto/classifier.d.ts +29 -0
  2. package/dist/auto/classifier.d.ts.map +1 -0
  3. package/dist/auto/classifier.js +126 -0
  4. package/dist/auto/classifier.js.map +1 -0
  5. package/dist/auto/composer.d.ts +105 -0
  6. package/dist/auto/composer.d.ts.map +1 -0
  7. package/dist/auto/composer.js +439 -0
  8. package/dist/auto/composer.js.map +1 -0
  9. package/dist/auto/director-prompt.d.ts +25 -0
  10. package/dist/auto/director-prompt.d.ts.map +1 -0
  11. package/dist/auto/director-prompt.js +53 -0
  12. package/dist/auto/director-prompt.js.map +1 -0
  13. package/dist/auto/index.d.ts +15 -0
  14. package/dist/auto/index.d.ts.map +1 -0
  15. package/dist/auto/index.js +13 -0
  16. package/dist/auto/index.js.map +1 -0
  17. package/dist/cli/agent-relay-mcp.d.ts +1 -1
  18. package/dist/cli/agent-relay-mcp.d.ts.map +1 -1
  19. package/dist/cli/agent-relay-mcp.js +428 -518
  20. package/dist/cli/agent-relay-mcp.js.map +1 -1
  21. package/dist/cli/bootstrap.d.ts.map +1 -1
  22. package/dist/cli/bootstrap.js +2 -0
  23. package/dist/cli/bootstrap.js.map +1 -1
  24. package/dist/cli/commands/cloud-worker.d.ts +19 -0
  25. package/dist/cli/commands/cloud-worker.d.ts.map +1 -0
  26. package/dist/cli/commands/cloud-worker.js +376 -0
  27. package/dist/cli/commands/cloud-worker.js.map +1 -0
  28. package/dist/cli/commands/cloud.d.ts.map +1 -1
  29. package/dist/cli/commands/cloud.js +2 -0
  30. package/dist/cli/commands/cloud.js.map +1 -1
  31. package/dist/cli/commands/core.d.ts +1 -0
  32. package/dist/cli/commands/core.d.ts.map +1 -1
  33. package/dist/cli/commands/core.js +1 -1
  34. package/dist/cli/commands/core.js.map +1 -1
  35. package/dist/cli/commands/fleet.d.ts +16 -0
  36. package/dist/cli/commands/fleet.d.ts.map +1 -0
  37. package/dist/cli/commands/fleet.js +188 -0
  38. package/dist/cli/commands/fleet.js.map +1 -0
  39. package/dist/cli/commands/local-agent.d.ts.map +1 -1
  40. package/dist/cli/commands/local-agent.js +43 -11
  41. package/dist/cli/commands/local-agent.js.map +1 -1
  42. package/dist/cli/lib/broker-lifecycle.d.ts +5 -1
  43. package/dist/cli/lib/broker-lifecycle.d.ts.map +1 -1
  44. package/dist/cli/lib/broker-lifecycle.js +32 -2
  45. package/dist/cli/lib/broker-lifecycle.js.map +1 -1
  46. package/dist/cli/lib/fleet-sidecar.d.ts +53 -0
  47. package/dist/cli/lib/fleet-sidecar.d.ts.map +1 -0
  48. package/dist/cli/lib/fleet-sidecar.js +400 -0
  49. package/dist/cli/lib/fleet-sidecar.js.map +1 -0
  50. package/dist/index.cjs +2545 -16773
  51. package/package.json +10 -7
@@ -0,0 +1,400 @@
1
+ import fs from 'node:fs';
2
+ import path from 'node:path';
3
+ import { AgentRelay } from '@agent-relay/sdk';
4
+ // bun's standalone `--compile` bundler mis-validates named value imports from
5
+ // this workspace package against its generated .d.ts ("No matching export").
6
+ // A namespace import + destructure sidesteps it while keeping call sites unchanged.
7
+ import * as fleetSdk from '@agent-relay/fleet';
8
+ const { defineDefaultLocalNode, invokeNodeHandler, nodeInfo, nodeManifest, triggerSyncInputs } = fleetSdk;
9
+ import { PROTOCOL_VERSION, } from '@agent-relay/harness-driver/protocol';
10
+ import WebSocket from 'ws';
11
+ const RECONNECT_BASE_DELAY_MS = 500;
12
+ const RECONNECT_MAX_DELAY_MS = 5_000;
13
+ export function fleetStatusPath(paths) {
14
+ return path.join(paths.dataDir, 'fleet-node.json');
15
+ }
16
+ export function readFleetSidecarStatus(statusPath) {
17
+ try {
18
+ const parsed = JSON.parse(fs.readFileSync(statusPath, 'utf-8'));
19
+ if (typeof parsed.node === 'string' &&
20
+ typeof parsed.pid === 'number' &&
21
+ typeof parsed.brokerUrl === 'string' &&
22
+ typeof parsed.connected === 'boolean' &&
23
+ Array.isArray(parsed.handlers)) {
24
+ return parsed;
25
+ }
26
+ }
27
+ catch {
28
+ // Missing or malformed status files are treated as no sidecar.
29
+ }
30
+ return null;
31
+ }
32
+ export function createImplicitLocalFleetNode(input) {
33
+ return defineDefaultLocalNode({
34
+ name: input.name ?? (path.basename(input.paths.projectRoot) || 'local-node'),
35
+ ...(input.maxAgents !== undefined ? { maxAgents: input.maxAgents } : {}),
36
+ teams: input.teamsConfig ?? null,
37
+ });
38
+ }
39
+ export function startFleetSidecar(options) {
40
+ const controller = new AbortController();
41
+ const signal = anySignal([controller.signal, options.signal].filter(Boolean));
42
+ const done = serveFleetSidecar({ ...options, signal }).catch((error) => {
43
+ if (!signal.aborted) {
44
+ throw error;
45
+ }
46
+ });
47
+ return {
48
+ stop: async () => {
49
+ controller.abort();
50
+ await done;
51
+ },
52
+ done,
53
+ };
54
+ }
55
+ export async function serveFleetSidecar(options) {
56
+ const reconnect = options.reconnect ?? true;
57
+ let attempt = 0;
58
+ while (!options.signal?.aborted) {
59
+ try {
60
+ await runFleetSidecarConnection(options);
61
+ attempt = 0;
62
+ if (!reconnect) {
63
+ return;
64
+ }
65
+ }
66
+ catch (error) {
67
+ writeStatus(options, false);
68
+ if (!reconnect || options.signal?.aborted) {
69
+ throw error;
70
+ }
71
+ options.warn?.(`Fleet sidecar disconnected: ${errorMessage(error)}; reconnecting`);
72
+ }
73
+ attempt += 1;
74
+ await delay(Math.min(RECONNECT_MAX_DELAY_MS, RECONNECT_BASE_DELAY_MS * 2 ** (attempt - 1)), options.signal);
75
+ }
76
+ }
77
+ export function buildNodeSupervision(input) {
78
+ return {
79
+ argv: [...input.argv],
80
+ cwd: input.cwd,
81
+ env: supervisionEnv(input.env),
82
+ };
83
+ }
84
+ function runFleetSidecarConnection(options) {
85
+ return new Promise((resolve, reject) => {
86
+ const url = fleetWsUrl(options.connection.url);
87
+ const headers = {};
88
+ if (options.connection.apiKey) {
89
+ headers['X-API-Key'] = options.connection.apiKey;
90
+ }
91
+ const ws = new WebSocket(url, { headers });
92
+ const pending = new Map();
93
+ let requestSeq = 0;
94
+ let settled = false;
95
+ let nodeRegistered = false;
96
+ const settle = (fn, value) => {
97
+ if (settled)
98
+ return;
99
+ settled = true;
100
+ for (const pendingRequest of pending.values()) {
101
+ pendingRequest.reject(new Error('fleet sidecar connection closed'));
102
+ }
103
+ pending.clear();
104
+ writeStatus(options, false);
105
+ fn(value);
106
+ };
107
+ const sendRequest = (type, payload) => {
108
+ if (ws.readyState !== WebSocket.OPEN) {
109
+ return Promise.reject(new Error('fleet sidecar websocket is not open'));
110
+ }
111
+ const requestId = `fleet_${Date.now()}_${++requestSeq}`;
112
+ const frame = {
113
+ v: PROTOCOL_VERSION,
114
+ type,
115
+ request_id: requestId,
116
+ payload,
117
+ };
118
+ return new Promise((requestResolve, requestReject) => {
119
+ pending.set(requestId, { resolve: requestResolve, reject: requestReject });
120
+ ws.send(JSON.stringify(frame), (error) => {
121
+ if (!error)
122
+ return;
123
+ pending.delete(requestId);
124
+ requestReject(error);
125
+ });
126
+ });
127
+ };
128
+ const sendHandlerResult = async (invocationId, output, error) => {
129
+ const payload = error
130
+ ? { invocation_id: invocationId, error: errorMessage(error) }
131
+ : { invocation_id: invocationId, output: (output ?? null) };
132
+ await sendRequest('handler_result', payload);
133
+ };
134
+ const handleInvoke = async (payload) => {
135
+ const ctx = createActionContext(options, sendRequest, payload.invocation_id);
136
+ try {
137
+ const output = await invokeNodeHandler(options.definition, payload.name, payload.input, ctx);
138
+ await sendHandlerResult(payload.invocation_id, output);
139
+ }
140
+ catch (error) {
141
+ await sendHandlerResult(payload.invocation_id, undefined, error);
142
+ }
143
+ };
144
+ const close = async () => {
145
+ if (ws.readyState === WebSocket.OPEN && nodeRegistered) {
146
+ await sendRequest('deregister_node', {}).catch(() => undefined);
147
+ }
148
+ if (ws.readyState === WebSocket.OPEN || ws.readyState === WebSocket.CONNECTING) {
149
+ ws.close();
150
+ }
151
+ };
152
+ const abort = () => {
153
+ close().finally(() => settle(resolve));
154
+ };
155
+ options.signal?.addEventListener('abort', abort, { once: true });
156
+ ws.on('open', () => {
157
+ void (async () => {
158
+ const manifest = nodeManifest(options.definition, {
159
+ name: options.nameOverride,
160
+ maxAgents: options.maxAgentsOverride,
161
+ });
162
+ await sendRequest('hello', {
163
+ client_name: '@agent-relay/fleet',
164
+ client_version: '8.6.0',
165
+ });
166
+ await sendRequest('register_node', {
167
+ manifest,
168
+ ...(options.supervision ? { supervision: options.supervision } : {}),
169
+ });
170
+ nodeRegistered = true;
171
+ await sendRequest('register_handlers', { names: Object.keys(options.definition.capabilities) });
172
+ writeStatus(options, true);
173
+ options.onRegistered?.(manifest);
174
+ await syncTriggers(options);
175
+ options.log?.(`Fleet node "${manifest.name}" registered with ${manifest.capabilities.length} capabilities.`);
176
+ })().catch((error) => {
177
+ close().finally(() => settle(reject, error));
178
+ });
179
+ });
180
+ ws.on('message', (data) => {
181
+ const frame = parseBrokerFrame(data);
182
+ if (!frame)
183
+ return;
184
+ if (frame.request_id && pending.has(frame.request_id)) {
185
+ const pendingRequest = pending.get(frame.request_id);
186
+ pending.delete(frame.request_id);
187
+ if (!pendingRequest)
188
+ return;
189
+ if (frame.type === 'error') {
190
+ pendingRequest.reject(frameError(frame.payload));
191
+ }
192
+ else {
193
+ pendingRequest.resolve(readOkResult(frame.payload));
194
+ }
195
+ return;
196
+ }
197
+ if (frame.type === 'invoke_handler') {
198
+ void handleInvoke(frame.payload).catch((error) => options.warn?.(errorMessage(error)));
199
+ }
200
+ });
201
+ ws.on('close', () => {
202
+ options.signal?.removeEventListener('abort', abort);
203
+ settle(resolve);
204
+ });
205
+ ws.on('error', (error) => {
206
+ options.signal?.removeEventListener('abort', abort);
207
+ settle(reject, error);
208
+ });
209
+ });
210
+ }
211
+ function createActionContext(options, sendRequest, invocationId) {
212
+ const info = nodeInfo(options.definition);
213
+ return {
214
+ node: {
215
+ ...info,
216
+ ...(options.nameOverride ? { name: options.nameOverride } : {}),
217
+ ...(options.maxAgentsOverride !== undefined ? { maxAgents: options.maxAgentsOverride } : {}),
218
+ },
219
+ invocationId,
220
+ relay: {
221
+ sendMessage: (input) => sendRequest('send_message', {
222
+ to: input.to,
223
+ text: input.text,
224
+ from: input.from ?? options.nameOverride ?? options.definition.name,
225
+ ...(input.threadId ? { thread_id: input.threadId } : {}),
226
+ ...(input.workspaceId ? { workspace_id: input.workspaceId } : {}),
227
+ ...(input.workspaceAlias ? { workspace_alias: input.workspaceAlias } : {}),
228
+ ...(input.mode ? { mode: input.mode } : {}),
229
+ ...(input.data ? { data: input.data } : {}),
230
+ }),
231
+ },
232
+ spawnAgent: (input) => sendRequest('spawn_agent', {
233
+ agent: input.agent,
234
+ ...(input.initialTask !== undefined ? { initial_task: input.initialTask } : {}),
235
+ skip_relay_prompt: input.skipRelayPrompt ?? false,
236
+ ...((input.invocationId ?? invocationId)
237
+ ? { invocation_id: input.invocationId ?? invocationId }
238
+ : {}),
239
+ }),
240
+ };
241
+ }
242
+ async function syncTriggers(options) {
243
+ const triggers = triggerSyncInputs(options.definition);
244
+ if (triggers.length === 0 || !options.workspaceKey) {
245
+ return;
246
+ }
247
+ try {
248
+ const relay = new AgentRelay({ workspaceKey: options.workspaceKey, baseUrl: options.baseUrl });
249
+ const existing = await relay.triggers.list();
250
+ const existingByKey = new Map();
251
+ for (const trigger of existing) {
252
+ const key = triggerSyncKey(trigger);
253
+ const entries = existingByKey.get(key) ?? [];
254
+ entries.push(trigger);
255
+ existingByKey.set(key, entries);
256
+ }
257
+ await Promise.all(triggers.map(async (trigger) => {
258
+ const key = triggerSyncKey(trigger);
259
+ const matches = existingByKey.get(key) ?? [];
260
+ if (matches.length === 0) {
261
+ await relay.triggers.create({
262
+ channel: trigger.channel,
263
+ pattern: trigger.pattern,
264
+ mention: trigger.mention,
265
+ actionName: trigger.actionName,
266
+ enabled: trigger.enabled,
267
+ });
268
+ return;
269
+ }
270
+ existingByKey.delete(key);
271
+ const [primary, ...duplicates] = matches;
272
+ if (!triggerEquals(primary, trigger) && primary.id) {
273
+ await relay.triggers.update(primary.id, {
274
+ channel: trigger.channel,
275
+ pattern: trigger.pattern,
276
+ mention: trigger.mention,
277
+ actionName: trigger.actionName,
278
+ enabled: trigger.enabled,
279
+ });
280
+ }
281
+ await Promise.all(duplicates
282
+ .filter((duplicate) => duplicate.id)
283
+ .map((duplicate) => relay.triggers.delete(duplicate.id)));
284
+ }));
285
+ }
286
+ catch (error) {
287
+ options.warn?.(`Fleet trigger sync skipped: ${errorMessage(error)}`);
288
+ }
289
+ }
290
+ function triggerSyncKey(trigger) {
291
+ return [
292
+ trigger.actionName,
293
+ trigger.channel ?? '',
294
+ trigger.pattern ?? '',
295
+ String(trigger.mention ?? ''),
296
+ ].join('\u001f');
297
+ }
298
+ function triggerEquals(left, right) {
299
+ return (left.actionName === right.actionName &&
300
+ left.channel === right.channel &&
301
+ left.pattern === right.pattern &&
302
+ left.mention === right.mention &&
303
+ left.enabled === right.enabled);
304
+ }
305
+ function parseBrokerFrame(data) {
306
+ try {
307
+ const text = Array.isArray(data) ? Buffer.concat(data).toString('utf8') : data.toString();
308
+ return JSON.parse(text);
309
+ }
310
+ catch {
311
+ return null;
312
+ }
313
+ }
314
+ function readOkResult(payload) {
315
+ return payload && typeof payload === 'object' && 'result' in payload
316
+ ? payload.result
317
+ : payload;
318
+ }
319
+ function frameError(payload) {
320
+ if (payload && typeof payload === 'object') {
321
+ const record = payload;
322
+ const message = typeof record.message === 'string' ? record.message : 'fleet sidecar request failed';
323
+ const error = new Error(message);
324
+ error.name = typeof record.code === 'string' ? record.code : 'FleetSidecarError';
325
+ return error;
326
+ }
327
+ return new Error('fleet sidecar request failed');
328
+ }
329
+ function fleetWsUrl(baseUrl) {
330
+ return `${baseUrl.replace(/\/+$/, '').replace(/^http/, 'ws')}/api/fleet/ws`;
331
+ }
332
+ function writeStatus(options, connected) {
333
+ if (!options.statusPath) {
334
+ return;
335
+ }
336
+ const status = {
337
+ node: options.nameOverride ?? options.definition.name,
338
+ pid: process.pid,
339
+ brokerUrl: options.connection.url,
340
+ connected,
341
+ handlers: Object.keys(options.definition.capabilities),
342
+ updatedAt: new Date().toISOString(),
343
+ };
344
+ try {
345
+ fs.mkdirSync(path.dirname(options.statusPath), { recursive: true });
346
+ fs.writeFileSync(options.statusPath, JSON.stringify(status, null, 2));
347
+ }
348
+ catch {
349
+ // Status is diagnostic only.
350
+ }
351
+ }
352
+ function supervisionEnv(env) {
353
+ const keys = [
354
+ 'AGENT_RELAY_DATA_DIR',
355
+ 'AGENT_RELAY_STATE_DIR',
356
+ 'AGENT_RELAY_HOME',
357
+ 'RELAY_WORKSPACE_KEY',
358
+ 'RELAY_API_KEY',
359
+ 'RELAY_BASE_URL',
360
+ 'RELAY_NODE_TOKEN',
361
+ 'PATH',
362
+ 'HOME',
363
+ 'SHELL',
364
+ ];
365
+ return Object.fromEntries(keys.flatMap((key) => {
366
+ const value = env[key];
367
+ return value ? [[key, value]] : [];
368
+ }));
369
+ }
370
+ function anySignal(signals) {
371
+ if (signals.length === 1) {
372
+ return signals[0];
373
+ }
374
+ const controller = new AbortController();
375
+ const abort = () => controller.abort();
376
+ for (const signal of signals) {
377
+ if (signal.aborted) {
378
+ controller.abort();
379
+ break;
380
+ }
381
+ signal.addEventListener('abort', abort, { once: true });
382
+ }
383
+ return controller.signal;
384
+ }
385
+ function delay(ms, signal) {
386
+ if (signal?.aborted) {
387
+ return Promise.resolve();
388
+ }
389
+ return new Promise((resolve) => {
390
+ const timer = setTimeout(resolve, ms);
391
+ signal?.addEventListener('abort', () => {
392
+ clearTimeout(timer);
393
+ resolve();
394
+ }, { once: true });
395
+ });
396
+ }
397
+ function errorMessage(error) {
398
+ return error instanceof Error ? error.message : String(error);
399
+ }
400
+ //# sourceMappingURL=fleet-sidecar.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fleet-sidecar.js","sourceRoot":"","sources":["../../../src/cli/lib/fleet-sidecar.ts"],"names":[],"mappings":"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"}