agent-relay 8.7.2 → 8.8.1

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 (47) 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 +454 -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 +670 -610
  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/core.d.ts +1 -0
  25. package/dist/cli/commands/core.d.ts.map +1 -1
  26. package/dist/cli/commands/core.js +1 -1
  27. package/dist/cli/commands/core.js.map +1 -1
  28. package/dist/cli/commands/fleet.d.ts +16 -0
  29. package/dist/cli/commands/fleet.d.ts.map +1 -0
  30. package/dist/cli/commands/fleet.js +188 -0
  31. package/dist/cli/commands/fleet.js.map +1 -0
  32. package/dist/cli/commands/local-agent.d.ts.map +1 -1
  33. package/dist/cli/commands/local-agent.js +71 -13
  34. package/dist/cli/commands/local-agent.js.map +1 -1
  35. package/dist/cli/lib/broker-lifecycle.d.ts +5 -1
  36. package/dist/cli/lib/broker-lifecycle.d.ts.map +1 -1
  37. package/dist/cli/lib/broker-lifecycle.js +32 -2
  38. package/dist/cli/lib/broker-lifecycle.js.map +1 -1
  39. package/dist/cli/lib/client-factory.d.ts +2 -0
  40. package/dist/cli/lib/client-factory.d.ts.map +1 -1
  41. package/dist/cli/lib/client-factory.js.map +1 -1
  42. package/dist/cli/lib/fleet-sidecar.d.ts +53 -0
  43. package/dist/cli/lib/fleet-sidecar.d.ts.map +1 -0
  44. package/dist/cli/lib/fleet-sidecar.js +400 -0
  45. package/dist/cli/lib/fleet-sidecar.js.map +1 -0
  46. package/dist/index.cjs +2545 -16773
  47. package/package.json +10 -8
@@ -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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"}