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,30 +1,14 @@
1
- import fs from 'node:fs';
2
1
  import path from 'node:path';
3
2
  import { AgentRelay } from '@agent-relay/sdk';
4
- import { defineDefaultLocalNode, invokeNodeHandler, nodeInfo, nodeManifest, triggerSyncInputs, } from '@agent-relay/fleet';
5
- import { PROTOCOL_VERSION, } from '@agent-relay/harness-driver/protocol';
6
- import WebSocket from 'ws';
7
- const RECONNECT_BASE_DELAY_MS = 500;
8
- const RECONNECT_MAX_DELAY_MS = 5_000;
3
+ import { defineDefaultLocalNode } from '@agent-relay/fleet';
4
+ /** Absolute path to the diagnostic status file a served node writes. */
9
5
  export function fleetStatusPath(paths) {
10
6
  return path.join(paths.dataDir, 'fleet-node.json');
11
7
  }
12
- export function readFleetSidecarStatus(statusPath) {
13
- try {
14
- const parsed = JSON.parse(fs.readFileSync(statusPath, 'utf-8'));
15
- if (typeof parsed.node === 'string' &&
16
- typeof parsed.pid === 'number' &&
17
- typeof parsed.brokerUrl === 'string' &&
18
- typeof parsed.connected === 'boolean' &&
19
- Array.isArray(parsed.handlers)) {
20
- return parsed;
21
- }
22
- }
23
- catch {
24
- // Missing or malformed status files are treated as no sidecar.
25
- }
26
- return null;
27
- }
8
+ /**
9
+ * Build the implicit local fleet node definition that `relay node up` serves
10
+ * alongside the broker when no explicit config file is discovered.
11
+ */
28
12
  export function createImplicitLocalFleetNode(input) {
29
13
  return defineDefaultLocalNode({
30
14
  name: input.name ?? (path.basename(input.paths.projectRoot) || 'local-node'),
@@ -32,365 +16,19 @@ export function createImplicitLocalFleetNode(input) {
32
16
  teams: input.teamsConfig ?? null,
33
17
  });
34
18
  }
35
- export function startFleetSidecar(options) {
36
- const controller = new AbortController();
37
- const signal = anySignal([controller.signal, options.signal].filter(Boolean));
38
- const done = serveFleetSidecar({ ...options, signal }).catch((error) => {
39
- if (!signal.aborted) {
40
- throw error;
41
- }
42
- });
19
+ /**
20
+ * Adapt the relay SDK triggers API to the fleet {@link FleetTriggerSyncClient}
21
+ * contract so a served node can reconcile its declared triggers. The fleet
22
+ * package never constructs a relay client itself (avoids a circular dependency),
23
+ * so the CLI supplies this near-passthrough adapter.
24
+ */
25
+ export function createTriggerSyncClient({ workspaceKey, baseUrl, }) {
26
+ const relay = new AgentRelay({ workspaceKey, ...(baseUrl ? { baseUrl } : {}) });
43
27
  return {
44
- stop: async () => {
45
- controller.abort();
46
- await done;
47
- },
48
- done,
28
+ list: () => relay.triggers.list(),
29
+ create: (input) => relay.triggers.create(input),
30
+ update: (id, input) => relay.triggers.update(id, input),
31
+ delete: (id) => relay.triggers.delete(id),
49
32
  };
50
33
  }
51
- export async function serveFleetSidecar(options) {
52
- const reconnect = options.reconnect ?? true;
53
- let attempt = 0;
54
- while (!options.signal?.aborted) {
55
- try {
56
- await runFleetSidecarConnection(options);
57
- attempt = 0;
58
- if (!reconnect) {
59
- return;
60
- }
61
- }
62
- catch (error) {
63
- writeStatus(options, false);
64
- if (!reconnect || options.signal?.aborted) {
65
- throw error;
66
- }
67
- options.warn?.(`Fleet sidecar disconnected: ${errorMessage(error)}; reconnecting`);
68
- }
69
- attempt += 1;
70
- await delay(Math.min(RECONNECT_MAX_DELAY_MS, RECONNECT_BASE_DELAY_MS * 2 ** (attempt - 1)), options.signal);
71
- }
72
- }
73
- export function buildNodeSupervision(input) {
74
- return {
75
- argv: [...input.argv],
76
- cwd: input.cwd,
77
- env: supervisionEnv(input.env),
78
- };
79
- }
80
- function runFleetSidecarConnection(options) {
81
- return new Promise((resolve, reject) => {
82
- const url = fleetWsUrl(options.connection.url);
83
- const headers = {};
84
- if (options.connection.apiKey) {
85
- headers['X-API-Key'] = options.connection.apiKey;
86
- }
87
- const ws = new WebSocket(url, { headers });
88
- const pending = new Map();
89
- let requestSeq = 0;
90
- let settled = false;
91
- let nodeRegistered = false;
92
- const settle = (fn, value) => {
93
- if (settled)
94
- return;
95
- settled = true;
96
- for (const pendingRequest of pending.values()) {
97
- pendingRequest.reject(new Error('fleet sidecar connection closed'));
98
- }
99
- pending.clear();
100
- writeStatus(options, false);
101
- fn(value);
102
- };
103
- const sendRequest = (type, payload) => {
104
- if (ws.readyState !== WebSocket.OPEN) {
105
- return Promise.reject(new Error('fleet sidecar websocket is not open'));
106
- }
107
- const requestId = `fleet_${Date.now()}_${++requestSeq}`;
108
- const frame = {
109
- v: PROTOCOL_VERSION,
110
- type,
111
- request_id: requestId,
112
- payload,
113
- };
114
- return new Promise((requestResolve, requestReject) => {
115
- pending.set(requestId, { resolve: requestResolve, reject: requestReject });
116
- ws.send(JSON.stringify(frame), (error) => {
117
- if (!error)
118
- return;
119
- pending.delete(requestId);
120
- requestReject(error);
121
- });
122
- });
123
- };
124
- const sendHandlerResult = async (invocationId, output, error) => {
125
- const payload = error
126
- ? { invocation_id: invocationId, error: errorMessage(error) }
127
- : { invocation_id: invocationId, output: (output ?? null) };
128
- await sendRequest('handler_result', payload);
129
- };
130
- const handleInvoke = async (payload) => {
131
- const ctx = createActionContext(options, sendRequest, payload.invocation_id);
132
- try {
133
- const output = await invokeNodeHandler(options.definition, payload.name, payload.input, ctx);
134
- await sendHandlerResult(payload.invocation_id, output);
135
- }
136
- catch (error) {
137
- await sendHandlerResult(payload.invocation_id, undefined, error);
138
- }
139
- };
140
- const close = async () => {
141
- if (ws.readyState === WebSocket.OPEN && nodeRegistered) {
142
- await sendRequest('deregister_node', {}).catch(() => undefined);
143
- }
144
- if (ws.readyState === WebSocket.OPEN || ws.readyState === WebSocket.CONNECTING) {
145
- ws.close();
146
- }
147
- };
148
- const abort = () => {
149
- close().finally(() => settle(resolve));
150
- };
151
- options.signal?.addEventListener('abort', abort, { once: true });
152
- ws.on('open', () => {
153
- void (async () => {
154
- const manifest = nodeManifest(options.definition, {
155
- name: options.nameOverride,
156
- maxAgents: options.maxAgentsOverride,
157
- });
158
- await sendRequest('hello', {
159
- client_name: '@agent-relay/fleet',
160
- client_version: '8.6.0',
161
- });
162
- await sendRequest('register_node', {
163
- manifest,
164
- ...(options.supervision ? { supervision: options.supervision } : {}),
165
- });
166
- nodeRegistered = true;
167
- await sendRequest('register_handlers', { names: Object.keys(options.definition.capabilities) });
168
- writeStatus(options, true);
169
- options.onRegistered?.(manifest);
170
- await syncTriggers(options);
171
- options.log?.(`Fleet node "${manifest.name}" registered with ${manifest.capabilities.length} capabilities.`);
172
- })().catch((error) => {
173
- close().finally(() => settle(reject, error));
174
- });
175
- });
176
- ws.on('message', (data) => {
177
- const frame = parseBrokerFrame(data);
178
- if (!frame)
179
- return;
180
- if (frame.request_id && pending.has(frame.request_id)) {
181
- const pendingRequest = pending.get(frame.request_id);
182
- pending.delete(frame.request_id);
183
- if (!pendingRequest)
184
- return;
185
- if (frame.type === 'error') {
186
- pendingRequest.reject(frameError(frame.payload));
187
- }
188
- else {
189
- pendingRequest.resolve(readOkResult(frame.payload));
190
- }
191
- return;
192
- }
193
- if (frame.type === 'invoke_handler') {
194
- void handleInvoke(frame.payload).catch((error) => options.warn?.(errorMessage(error)));
195
- }
196
- });
197
- ws.on('close', () => {
198
- options.signal?.removeEventListener('abort', abort);
199
- settle(resolve);
200
- });
201
- ws.on('error', (error) => {
202
- options.signal?.removeEventListener('abort', abort);
203
- settle(reject, error);
204
- });
205
- });
206
- }
207
- function createActionContext(options, sendRequest, invocationId) {
208
- const info = nodeInfo(options.definition);
209
- return {
210
- node: {
211
- ...info,
212
- ...(options.nameOverride ? { name: options.nameOverride } : {}),
213
- ...(options.maxAgentsOverride !== undefined ? { maxAgents: options.maxAgentsOverride } : {}),
214
- },
215
- invocationId,
216
- relay: {
217
- sendMessage: (input) => sendRequest('send_message', {
218
- to: input.to,
219
- text: input.text,
220
- from: input.from ?? options.nameOverride ?? options.definition.name,
221
- ...(input.threadId ? { thread_id: input.threadId } : {}),
222
- ...(input.workspaceId ? { workspace_id: input.workspaceId } : {}),
223
- ...(input.workspaceAlias ? { workspace_alias: input.workspaceAlias } : {}),
224
- ...(input.mode ? { mode: input.mode } : {}),
225
- ...(input.data ? { data: input.data } : {}),
226
- }),
227
- },
228
- spawnAgent: (input) => sendRequest('spawn_agent', {
229
- agent: input.agent,
230
- ...(input.initialTask !== undefined ? { initial_task: input.initialTask } : {}),
231
- skip_relay_prompt: input.skipRelayPrompt ?? false,
232
- ...((input.invocationId ?? invocationId)
233
- ? { invocation_id: input.invocationId ?? invocationId }
234
- : {}),
235
- }),
236
- };
237
- }
238
- async function syncTriggers(options) {
239
- const triggers = triggerSyncInputs(options.definition);
240
- if (triggers.length === 0 || !options.workspaceKey) {
241
- return;
242
- }
243
- try {
244
- const relay = new AgentRelay({ workspaceKey: options.workspaceKey, baseUrl: options.baseUrl });
245
- const existing = await relay.triggers.list();
246
- const existingByKey = new Map();
247
- for (const trigger of existing) {
248
- const key = triggerSyncKey(trigger);
249
- const entries = existingByKey.get(key) ?? [];
250
- entries.push(trigger);
251
- existingByKey.set(key, entries);
252
- }
253
- await Promise.all(triggers.map(async (trigger) => {
254
- const key = triggerSyncKey(trigger);
255
- const matches = existingByKey.get(key) ?? [];
256
- if (matches.length === 0) {
257
- await relay.triggers.create({
258
- channel: trigger.channel,
259
- pattern: trigger.pattern,
260
- mention: trigger.mention,
261
- actionName: trigger.actionName,
262
- enabled: trigger.enabled,
263
- });
264
- return;
265
- }
266
- existingByKey.delete(key);
267
- const [primary, ...duplicates] = matches;
268
- if (!triggerEquals(primary, trigger) && primary.id) {
269
- await relay.triggers.update(primary.id, {
270
- channel: trigger.channel,
271
- pattern: trigger.pattern,
272
- mention: trigger.mention,
273
- actionName: trigger.actionName,
274
- enabled: trigger.enabled,
275
- });
276
- }
277
- await Promise.all(duplicates
278
- .filter((duplicate) => duplicate.id)
279
- .map((duplicate) => relay.triggers.delete(duplicate.id)));
280
- }));
281
- }
282
- catch (error) {
283
- options.warn?.(`Fleet trigger sync skipped: ${errorMessage(error)}`);
284
- }
285
- }
286
- function triggerSyncKey(trigger) {
287
- return [
288
- trigger.actionName,
289
- trigger.channel ?? '',
290
- trigger.pattern ?? '',
291
- String(trigger.mention ?? ''),
292
- ].join('\u001f');
293
- }
294
- function triggerEquals(left, right) {
295
- return (left.actionName === right.actionName &&
296
- left.channel === right.channel &&
297
- left.pattern === right.pattern &&
298
- left.mention === right.mention &&
299
- left.enabled === right.enabled);
300
- }
301
- function parseBrokerFrame(data) {
302
- try {
303
- const text = Array.isArray(data) ? Buffer.concat(data).toString('utf8') : data.toString();
304
- return JSON.parse(text);
305
- }
306
- catch {
307
- return null;
308
- }
309
- }
310
- function readOkResult(payload) {
311
- return payload && typeof payload === 'object' && 'result' in payload
312
- ? payload.result
313
- : payload;
314
- }
315
- function frameError(payload) {
316
- if (payload && typeof payload === 'object') {
317
- const record = payload;
318
- const message = typeof record.message === 'string' ? record.message : 'fleet sidecar request failed';
319
- const error = new Error(message);
320
- error.name = typeof record.code === 'string' ? record.code : 'FleetSidecarError';
321
- return error;
322
- }
323
- return new Error('fleet sidecar request failed');
324
- }
325
- function fleetWsUrl(baseUrl) {
326
- return `${baseUrl.replace(/\/+$/, '').replace(/^http/, 'ws')}/api/fleet/ws`;
327
- }
328
- function writeStatus(options, connected) {
329
- if (!options.statusPath) {
330
- return;
331
- }
332
- const status = {
333
- node: options.nameOverride ?? options.definition.name,
334
- pid: process.pid,
335
- brokerUrl: options.connection.url,
336
- connected,
337
- handlers: Object.keys(options.definition.capabilities),
338
- updatedAt: new Date().toISOString(),
339
- };
340
- try {
341
- fs.mkdirSync(path.dirname(options.statusPath), { recursive: true });
342
- fs.writeFileSync(options.statusPath, JSON.stringify(status, null, 2));
343
- }
344
- catch {
345
- // Status is diagnostic only.
346
- }
347
- }
348
- function supervisionEnv(env) {
349
- const keys = [
350
- 'AGENT_RELAY_DATA_DIR',
351
- 'AGENT_RELAY_STATE_DIR',
352
- 'AGENT_RELAY_HOME',
353
- 'RELAY_WORKSPACE_KEY',
354
- 'RELAY_API_KEY',
355
- 'RELAY_BASE_URL',
356
- 'RELAY_NODE_TOKEN',
357
- 'PATH',
358
- 'HOME',
359
- 'SHELL',
360
- ];
361
- return Object.fromEntries(keys.flatMap((key) => {
362
- const value = env[key];
363
- return value ? [[key, value]] : [];
364
- }));
365
- }
366
- function anySignal(signals) {
367
- if (signals.length === 1) {
368
- return signals[0];
369
- }
370
- const controller = new AbortController();
371
- const abort = () => controller.abort();
372
- for (const signal of signals) {
373
- if (signal.aborted) {
374
- controller.abort();
375
- break;
376
- }
377
- signal.addEventListener('abort', abort, { once: true });
378
- }
379
- return controller.signal;
380
- }
381
- function delay(ms, signal) {
382
- if (signal?.aborted) {
383
- return Promise.resolve();
384
- }
385
- return new Promise((resolve) => {
386
- const timer = setTimeout(resolve, ms);
387
- signal?.addEventListener('abort', () => {
388
- clearTimeout(timer);
389
- resolve();
390
- }, { once: true });
391
- });
392
- }
393
- function errorMessage(error) {
394
- return error instanceof Error ? error.message : String(error);
395
- }
396
34
  //# sourceMappingURL=fleet-sidecar.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"fleet-sidecar.js","sourceRoot":"","sources":["../../../src/cli/lib/fleet-sidecar.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"fleet-sidecar.js","sourceRoot":"","sources":["../../../src/cli/lib/fleet-sidecar.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,WAAW,CAAC;AAE7B,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAE9C,OAAO,EAAE,sBAAsB,EAAE,MAAM,oBAAoB,CAAC;AAI5D,wEAAwE;AACxE,MAAM,UAAU,eAAe,CAAC,KAAuB;IACrD,OAAO,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,iBAAiB,CAAC,CAAC;AACrD,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,4BAA4B,CAAC,KAK5C;IACC,OAAO,sBAAsB,CAAC;QAC5B,IAAI,EAAE,KAAK,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC,WAAW,CAAC,IAAI,YAAY,CAAC;QAC5E,GAAG,CAAC,KAAK,CAAC,SAAS,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,KAAK,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACxE,KAAK,EAAE,KAAK,CAAC,WAAW,IAAI,IAAI;KACjC,CAAC,CAAC;AACL,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,uBAAuB,CAAC,EACtC,YAAY,EACZ,OAAO,GAIR;IACC,MAAM,KAAK,GAAG,IAAI,UAAU,CAAC,EAAE,YAAY,EAAE,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;IAChF,OAAO;QACL,IAAI,EAAE,GAAG,EAAE,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,EAAE;QACjC,MAAM,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC;QAC/C,MAAM,EAAE,CAAC,EAAE,EAAE,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,EAAE,KAAK,CAAC;QACvD,MAAM,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;KAC1C,CAAC;AACJ,CAAC"}
@@ -0,0 +1,17 @@
1
+ import type { FleetNodeDefinition } from '@agent-relay/fleet';
2
+ /**
3
+ * Resolve the node definition config file for `relay node up`.
4
+ *
5
+ * @param cwd - Working directory to search for an implicit config file.
6
+ * @param explicit - Optional explicit path from `--config`; when present it must
7
+ * exist or a clear error is thrown.
8
+ * @returns The resolved absolute config path, or `undefined` when no implicit
9
+ * file is found and no explicit path was given.
10
+ */
11
+ export declare function discoverNodeConfigPath(cwd: string, explicit?: string): string | undefined;
12
+ /**
13
+ * Load and validate a fleet node definition from a TS/JS file.
14
+ * @param file - Path to a node definition file default-exporting `defineNode(...)`.
15
+ */
16
+ export declare function loadNodeDefinition(file: string): Promise<FleetNodeDefinition>;
17
+ //# sourceMappingURL=node-definition-loader.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"node-definition-loader.d.ts","sourceRoot":"","sources":["../../../src/cli/lib/node-definition-loader.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AAmB9D;;;;;;;;GAQG;AACH,wBAAgB,sBAAsB,CAAC,GAAG,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAiBzF;AAUD;;;GAGG;AACH,wBAAsB,kBAAkB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,mBAAmB,CAAC,CAQnF"}
@@ -0,0 +1,124 @@
1
+ import fs from 'node:fs';
2
+ import path from 'node:path';
3
+ import { pathToFileURL } from 'node:url';
4
+ const JITI_NODE_DEFINITION_EXTENSIONS = new Set(['.ts', '.tsx', '.mts', '.cts']);
5
+ /**
6
+ * Deterministic order in which `discoverNodeConfigPath` looks for an implicit
7
+ * node definition file in the working directory. TypeScript variants are
8
+ * preferred over compiled JS.
9
+ */
10
+ const NODE_CONFIG_BASENAMES = [
11
+ 'agent-relay.ts',
12
+ 'agent-relay.tsx',
13
+ 'agent-relay.mts',
14
+ 'agent-relay.cts',
15
+ 'agent-relay.js',
16
+ 'agent-relay.mjs',
17
+ 'agent-relay.cjs',
18
+ ];
19
+ /**
20
+ * Resolve the node definition config file for `relay node up`.
21
+ *
22
+ * @param cwd - Working directory to search for an implicit config file.
23
+ * @param explicit - Optional explicit path from `--config`; when present it must
24
+ * exist or a clear error is thrown.
25
+ * @returns The resolved absolute config path, or `undefined` when no implicit
26
+ * file is found and no explicit path was given.
27
+ */
28
+ export function discoverNodeConfigPath(cwd, explicit) {
29
+ const explicitPath = explicit?.trim();
30
+ if (explicitPath) {
31
+ const resolved = path.resolve(cwd, explicitPath);
32
+ if (!isFile(resolved)) {
33
+ throw new Error(`Node config file not found: ${explicitPath}`);
34
+ }
35
+ return resolved;
36
+ }
37
+ for (const basename of NODE_CONFIG_BASENAMES) {
38
+ const candidate = path.join(cwd, basename);
39
+ if (isFile(candidate)) {
40
+ return candidate;
41
+ }
42
+ }
43
+ return undefined;
44
+ }
45
+ function isFile(candidate) {
46
+ try {
47
+ return fs.statSync(candidate).isFile();
48
+ }
49
+ catch {
50
+ return false;
51
+ }
52
+ }
53
+ /**
54
+ * Load and validate a fleet node definition from a TS/JS file.
55
+ * @param file - Path to a node definition file default-exporting `defineNode(...)`.
56
+ */
57
+ export async function loadNodeDefinition(file) {
58
+ const absolutePath = path.resolve(file);
59
+ const loaded = await importNodeDefinition(absolutePath);
60
+ const definition = unwrapNodeDefinitionExport(loaded);
61
+ if (!isFleetNodeDefinitionLike(definition)) {
62
+ throw new Error(`Fleet node file ${absolutePath} must default-export defineNode(...)`);
63
+ }
64
+ return definition;
65
+ }
66
+ function unwrapNodeDefinitionExport(loaded) {
67
+ let candidate = loaded;
68
+ for (let depth = 0; depth < 3; depth += 1) {
69
+ if (isFleetNodeDefinitionLike(candidate)) {
70
+ return candidate;
71
+ }
72
+ if (!candidate || typeof candidate !== 'object' || !('default' in candidate)) {
73
+ return candidate;
74
+ }
75
+ candidate = candidate.default;
76
+ }
77
+ return candidate;
78
+ }
79
+ function isFleetNodeDefinitionLike(value) {
80
+ return Boolean(value &&
81
+ typeof value === 'object' &&
82
+ value.__agentRelayFleetNode === true);
83
+ }
84
+ async function importNodeDefinition(absolutePath) {
85
+ if (!JITI_NODE_DEFINITION_EXTENSIONS.has(path.extname(absolutePath).toLowerCase())) {
86
+ try {
87
+ return (await import(pathToFileURL(absolutePath).href));
88
+ }
89
+ catch (error) {
90
+ if (!shouldFallbackToJiti(error)) {
91
+ throw error;
92
+ }
93
+ try {
94
+ return await importNodeDefinitionWithJiti(absolutePath);
95
+ }
96
+ catch {
97
+ throw error;
98
+ }
99
+ }
100
+ }
101
+ return importNodeDefinitionWithJiti(absolutePath);
102
+ }
103
+ function shouldFallbackToJiti(error) {
104
+ if (isBunRuntime()) {
105
+ return false;
106
+ }
107
+ return error instanceof SyntaxError && getErrorCode(error) !== 'ERR_MODULE_NOT_FOUND';
108
+ }
109
+ function isBunRuntime() {
110
+ return typeof process.versions.bun === 'string';
111
+ }
112
+ function getErrorCode(error) {
113
+ return error && typeof error === 'object' && 'code' in error
114
+ ? String(error.code)
115
+ : undefined;
116
+ }
117
+ async function importNodeDefinitionWithJiti(absolutePath) {
118
+ const { createJiti } = await import('jiti');
119
+ const jiti = createJiti(pathToFileURL(process.cwd()).href, {
120
+ interopDefault: true,
121
+ });
122
+ return jiti.import(absolutePath, { default: true });
123
+ }
124
+ //# sourceMappingURL=node-definition-loader.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"node-definition-loader.js","sourceRoot":"","sources":["../../../src/cli/lib/node-definition-loader.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,41 @@
1
+ export interface ReflexPushResult {
2
+ sent: number;
3
+ accepted: number;
4
+ }
5
+ export interface ReflexCaptureDeps {
6
+ /** Whether Reflex is enabled (checked once at start). */
7
+ isEnabled: () => boolean;
8
+ /** Perform one push; resolves `null` when not authed / addon unavailable. */
9
+ push: () => Promise<ReflexPushResult | null>;
10
+ /** Diagnostic logger. */
11
+ log: (message: string) => void;
12
+ /** Milliseconds between pushes. */
13
+ intervalMs: number;
14
+ /** Delay before the first push so startup isn't blocked. */
15
+ initialDelayMs: number;
16
+ }
17
+ export interface RunningReflexCapture {
18
+ /** Stop the timer and flush a final batch (best-effort). */
19
+ stop: () => Promise<void>;
20
+ }
21
+ /** The native addon surface we depend on. */
22
+ export interface NativeAiHist {
23
+ syncAndPush: () => Promise<{
24
+ sent: number;
25
+ accepted: number;
26
+ authenticated: boolean;
27
+ }>;
28
+ }
29
+ export interface ReflexPushOptions {
30
+ /** Injectable native addon (tests); defaults to lazy-loading `ai-hist-native`. */
31
+ native?: NativeAiHist | null;
32
+ }
33
+ /**
34
+ * Sync local agent history into the ai-hist DB and push new records to
35
+ * relayhistory-cloud, **in-process** via the native addon — no subprocess. This
36
+ * is what makes `reflex on` "just work": no separate ai-hist install, no CLI.
37
+ * Resolves null when the addon is unavailable or the user isn't authenticated.
38
+ */
39
+ export declare function reflexSyncAndPush(opts?: ReflexPushOptions): Promise<ReflexPushResult | null>;
40
+ export declare function startReflexCapture(overrides?: Partial<ReflexCaptureDeps>): RunningReflexCapture;
41
+ //# sourceMappingURL=reflex-capture.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"reflex-capture.d.ts","sourceRoot":"","sources":["../../../src/cli/lib/reflex-capture.ts"],"names":[],"mappings":"AAiBA,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,iBAAiB;IAChC,yDAAyD;IACzD,SAAS,EAAE,MAAM,OAAO,CAAC;IACzB,6EAA6E;IAC7E,IAAI,EAAE,MAAM,OAAO,CAAC,gBAAgB,GAAG,IAAI,CAAC,CAAC;IAC7C,yBAAyB;IACzB,GAAG,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;IAC/B,mCAAmC;IACnC,UAAU,EAAE,MAAM,CAAC;IACnB,4DAA4D;IAC5D,cAAc,EAAE,MAAM,CAAC;CACxB;AAED,MAAM,WAAW,oBAAoB;IACnC,4DAA4D;IAC5D,IAAI,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;CAC3B;AAKD,6CAA6C;AAC7C,MAAM,WAAW,YAAY;IAC3B,WAAW,EAAE,MAAM,OAAO,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAC;QAAC,aAAa,EAAE,OAAO,CAAA;KAAE,CAAC,CAAC;CACxF;AAwBD,MAAM,WAAW,iBAAiB;IAChC,kFAAkF;IAClF,MAAM,CAAC,EAAE,YAAY,GAAG,IAAI,CAAC;CAC9B;AAED;;;;;GAKG;AACH,wBAAsB,iBAAiB,CAAC,IAAI,GAAE,iBAAsB,GAAG,OAAO,CAAC,gBAAgB,GAAG,IAAI,CAAC,CAMtG;AAaD,wBAAgB,kBAAkB,CAAC,SAAS,GAAE,OAAO,CAAC,iBAAiB,CAAM,GAAG,oBAAoB,CAyDnG"}