agent-relay 10.6.7 → 11.0.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.
@@ -0,0 +1,266 @@
1
+ import { createInterface } from 'node:readline';
2
+ import { randomUUID } from 'node:crypto';
3
+ import { defaultStateDir, readConnectionFileFromDisk, resolveBrokerConnection, } from './broker-connection.js';
4
+ import { createBrokerClient } from './attach-broker.js';
5
+ export function renderAgentEvent(envelope, options = {}) {
6
+ if (envelope.event.kind.startsWith('reasoning.') && !options.reasoning)
7
+ return null;
8
+ if (options.json)
9
+ return `${JSON.stringify({ kind: 'agent_event', ...envelope })}\n`;
10
+ const event = envelope.event;
11
+ switch (event.kind) {
12
+ case 'text.delta':
13
+ return typeof event.delta === 'string' ? event.delta : null;
14
+ case 'text.finished':
15
+ return '\n';
16
+ case 'reasoning.delta':
17
+ return options.reasoning && typeof event.delta === 'string' ? event.delta : null;
18
+ case 'activity.changed': {
19
+ const reason = typeof event.reason === 'string' && event.reason ? ` (${event.reason})` : '';
20
+ return `\n[activity] ${String(event.activity ?? 'unknown')}${reason}\n`;
21
+ }
22
+ case 'tool.called':
23
+ return `\n[tool] ${String(event.tool ?? event.name ?? 'tool')} started\n`;
24
+ case 'tool.completed':
25
+ return `[tool] ${String(event.tool ?? event.name ?? 'tool')} finished\n`;
26
+ case 'tool.failed':
27
+ return `[tool] ${String(event.tool ?? event.name ?? 'tool')} failed: ${String(event.error ?? 'unknown error')}\n`;
28
+ case 'tool.approval.requested':
29
+ return `[waiting] approval required for ${String(event.tool ?? 'tool')} (${String(event.approvalId ?? '')})\n`;
30
+ case 'tool.approval.resolved':
31
+ return `[approval] ${event.approved === true ? 'approved' : 'rejected'}\n`;
32
+ case 'file.changed':
33
+ return `[file] ${String(event.operation ?? 'updated')} ${String(event.path ?? '')}\n`;
34
+ case 'usage.updated':
35
+ return `[usage] ${JSON.stringify(event.usage ?? {})}\n`;
36
+ case 'warning':
37
+ return `[warning] ${String(event.message ?? '')}\n`;
38
+ case 'error':
39
+ case 'session.failed':
40
+ return `[error] ${String(event.message ?? event.error ?? 'native harness failed')}\n`;
41
+ default:
42
+ if (event.kind.startsWith('session.'))
43
+ return `[session] ${event.kind.slice('session.'.length)}\n`;
44
+ if (event.kind === 'context.compacted')
45
+ return '[context] compacted\n';
46
+ return null;
47
+ }
48
+ }
49
+ export function renderNativeHarnessDiagnostic(envelope, options = {}) {
50
+ if (!options.diagnostics)
51
+ return null;
52
+ if (options.json)
53
+ return `${JSON.stringify({ kind: 'native_harness_diagnostic', ...envelope })}\n`;
54
+ return `[diagnostic:${envelope.diagnostic.level}] ${envelope.diagnostic.message}\n`;
55
+ }
56
+ function defaultDependencies(options) {
57
+ void options;
58
+ return {
59
+ connect: (resolved) => createBrokerClient(resolved),
60
+ output: {
61
+ stdout: (text) => process.stdout.write(text),
62
+ stderr: (text) => process.stderr.write(text),
63
+ },
64
+ createReadline: () => createInterface({
65
+ input: process.stdin,
66
+ output: process.stdout,
67
+ terminal: Boolean(process.stdin.isTTY),
68
+ }),
69
+ onSignal: (handler) => {
70
+ process.once('SIGINT', handler);
71
+ return () => process.off('SIGINT', handler);
72
+ },
73
+ };
74
+ }
75
+ export async function attachNative(name, mode, options, overrides = {}) {
76
+ if (mode === 'passthrough') {
77
+ (overrides.output?.stderr ?? ((text) => process.stderr.write(text)))('Error: native harnesses do not expose a terminal byte stream; use --mode view or --mode drive.\n');
78
+ return 1;
79
+ }
80
+ const connection = resolveBrokerConnection(options, {
81
+ readConnectionFile: readConnectionFileFromDisk,
82
+ getDefaultStateDir: defaultStateDir,
83
+ env: process.env,
84
+ });
85
+ if (!connection) {
86
+ (overrides.output?.stderr ?? ((text) => process.stderr.write(text)))('Error: could not locate broker connection.\n');
87
+ return 1;
88
+ }
89
+ const deps = { ...defaultDependencies(options), ...overrides };
90
+ const client = deps.connect(connection);
91
+ // Capture a global broker cursor before subscribing. The broker replays
92
+ // everything after this cursor while the agent-event history request runs,
93
+ // closing the history/live race even when the WebSocket opens slowly.
94
+ let brokerCursor;
95
+ try {
96
+ brokerCursor = await client.currentEventSeq();
97
+ }
98
+ catch (error) {
99
+ deps.output.stderr(`Error: ${error instanceof Error ? error.message : String(error)}\n`);
100
+ client.disconnect();
101
+ return 1;
102
+ }
103
+ const stream = client.subscribeAgentEvents(name, { sinceSequence: 0, sinceBrokerSeq: brokerCursor });
104
+ const iterator = stream[Symbol.asyncIterator]();
105
+ let highWater = 0;
106
+ let stopped = false;
107
+ let disconnected = false;
108
+ let iteratorClosed = false;
109
+ let resolveStop;
110
+ const stopSignal = new Promise((resolve) => {
111
+ resolveStop = resolve;
112
+ });
113
+ let readline;
114
+ const pendingCommands = new Set();
115
+ let commandChain = Promise.resolve();
116
+ const render = (event) => {
117
+ if (event.sequence <= highWater)
118
+ return;
119
+ highWater = event.sequence;
120
+ const text = renderAgentEvent(event, options);
121
+ if (text !== null)
122
+ deps.output.stdout(text);
123
+ };
124
+ const unsubscribeDiagnostics = client.onEvent((event) => {
125
+ if (event.kind !== 'native_harness_diagnostic' || event.name !== name)
126
+ return;
127
+ const text = renderNativeHarnessDiagnostic(event, options);
128
+ if (text !== null)
129
+ deps.output.stdout(text);
130
+ });
131
+ const disconnect = () => {
132
+ if (disconnected)
133
+ return;
134
+ disconnected = true;
135
+ client.disconnect();
136
+ };
137
+ const closeIterator = () => {
138
+ if (iteratorClosed)
139
+ return;
140
+ iteratorClosed = true;
141
+ void Promise.resolve(iterator.return?.()).catch(() => undefined);
142
+ };
143
+ const stop = () => {
144
+ if (stopped)
145
+ return;
146
+ stopped = true;
147
+ readline?.close();
148
+ // Close the broker before iterator cleanup and resolve our own stop signal.
149
+ // An idle adapter stream is not required to unblock iterator.next()/return().
150
+ disconnect();
151
+ closeIterator();
152
+ resolveStop();
153
+ };
154
+ const removeSignal = deps.onSignal(stop);
155
+ try {
156
+ const history = await client.getAgentEventHistory(name, 0);
157
+ if (history.gap) {
158
+ const gap = {
159
+ kind: 'agent_event_replay_gap',
160
+ name,
161
+ oldest_available_sequence: history.oldest_available_sequence,
162
+ };
163
+ if (options.json)
164
+ deps.output.stdout(`${JSON.stringify(gap)}\n`);
165
+ else
166
+ deps.output.stderr('[attach] agent-event history was truncated; showing retained events.\n');
167
+ }
168
+ for (const event of history.events)
169
+ render(event);
170
+ if (mode === 'drive') {
171
+ readline = deps.createReadline();
172
+ const showPrompt = () => {
173
+ if (stopped || options.json || !readline?.terminal)
174
+ return;
175
+ readline.setPrompt('> ');
176
+ readline.prompt();
177
+ };
178
+ readline.on('line', (line) => {
179
+ const text = line.trim();
180
+ if (!text)
181
+ return;
182
+ if (text === '/detach') {
183
+ stop();
184
+ return;
185
+ }
186
+ const approval = text.match(/^\/(approve|reject)\s+(.+)$/);
187
+ const kind = approval
188
+ ? approval[1] === 'approve'
189
+ ? 'approve_tool'
190
+ : 'reject_tool'
191
+ : text === '/interrupt'
192
+ ? 'interrupt'
193
+ : 'submit_user_message';
194
+ const commandText = kind === 'submit_user_message' ? line : undefined;
195
+ const approvalId = approval?.[2]?.trim();
196
+ const pendingCommand = commandChain
197
+ .then(() => client.sendNativeHarnessCommand(name, {
198
+ kind,
199
+ idempotency_key: randomUUID(),
200
+ ...(commandText === undefined ? {} : { text: commandText }),
201
+ ...(commandText === undefined ? {} : { mode: 'auto' }),
202
+ ...(approvalId ? { approval_id: approvalId } : {}),
203
+ }))
204
+ .then((ack) => {
205
+ if (!ack.accepted) {
206
+ deps.output.stderr(`Input rejected: ${ack.error?.message ?? 'native harness rejected input'}\n`);
207
+ }
208
+ else if (options.json) {
209
+ deps.output.stdout(`${JSON.stringify({ kind: 'native_harness_command_ack', name, ...ack })}\n`);
210
+ }
211
+ else {
212
+ deps.output.stderr(ack.duplicate ? '[input] already accepted\n' : '[input] accepted\n');
213
+ }
214
+ })
215
+ .catch((error) => {
216
+ deps.output.stderr(`Input failed: ${error instanceof Error ? error.message : String(error)}\n`);
217
+ })
218
+ .then(() => undefined);
219
+ commandChain = pendingCommand.catch(() => undefined);
220
+ pendingCommands.add(pendingCommand);
221
+ void pendingCommand.finally(() => {
222
+ pendingCommands.delete(pendingCommand);
223
+ showPrompt();
224
+ });
225
+ });
226
+ showPrompt();
227
+ }
228
+ while (!stopped) {
229
+ const next = await Promise.race([
230
+ iterator.next(),
231
+ stopSignal.then(() => ({ done: true, value: undefined })),
232
+ ]);
233
+ if (next.done)
234
+ break;
235
+ render(next.value);
236
+ }
237
+ await Promise.allSettled(pendingCommands);
238
+ return 0;
239
+ }
240
+ catch (error) {
241
+ deps.output.stderr(`Error: ${error instanceof Error ? error.message : String(error)}\n`);
242
+ return 1;
243
+ }
244
+ finally {
245
+ stopped = true;
246
+ removeSignal();
247
+ unsubscribeDiagnostics();
248
+ readline?.close();
249
+ disconnect();
250
+ closeIterator();
251
+ resolveStop();
252
+ }
253
+ }
254
+ export async function isNativeHarness(name, options, fetchFn = globalThis.fetch) {
255
+ const connection = resolveBrokerConnection(options, {
256
+ readConnectionFile: readConnectionFileFromDisk,
257
+ getDefaultStateDir: defaultStateDir,
258
+ env: process.env,
259
+ });
260
+ if (!connection)
261
+ return false;
262
+ const client = createBrokerClient(connection, fetchFn);
263
+ const agent = (await client.listAgents()).find((candidate) => candidate.name === name);
264
+ return agent?.runtime_kind === 'native';
265
+ }
266
+ //# sourceMappingURL=attach-native.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"attach-native.js","sourceRoot":"","sources":["../../../src/cli/lib/attach-native.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,5 @@
1
1
  import { HarnessDriverClient, type BrokerInitArgs } from '@agent-relay/harness-driver';
2
+ import { type HarnessRuntime, type SelectedHarnessRuntime } from '@agent-relay/harnesses';
2
3
  export interface CreateRuntimeClientOptions {
3
4
  cwd: string;
4
5
  channels?: string[];
@@ -25,7 +26,15 @@ export interface ClientSpawnOptions {
25
26
  shadowMode?: 'subagent' | 'process';
26
27
  spawnMode?: 'interactive' | 'task_exit' | 'task-exit' | 'single_shot' | 'single-shot';
27
28
  exitAfterTask?: boolean;
29
+ /** Harness execution runtime. `auto` preserves each adapter's rollout default. */
30
+ runtime?: HarnessRuntime;
28
31
  }
32
+ /** Bun standalone executables must re-enter the bundled CLI to run embedded sidecar code. */
33
+ export declare function nativeSidecarLaunch(argv?: readonly string[], execPath?: string): {
34
+ command: string;
35
+ args: string[];
36
+ } | undefined;
37
+ export declare function resolvedSpawnRuntime(options: Pick<ClientSpawnOptions, 'cli' | 'runtime'>): SelectedHarnessRuntime;
29
38
  export declare function createRuntimeClient(options: CreateRuntimeClientOptions): Promise<HarnessDriverClient>;
30
39
  export declare function spawnAgentWithClient(client: HarnessDriverClient, options: ClientSpawnOptions): Promise<void>;
31
40
  //# sourceMappingURL=client-factory.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"client-factory.d.ts","sourceRoot":"","sources":["../../../src/cli/lib/client-factory.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,KAAK,cAAc,EAAE,MAAM,6BAA6B,CAAC;AAEvF,MAAM,WAAW,0BAA0B;IACzC,GAAG,EAAE,MAAM,CAAC;IACZ,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;IACpB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,UAAU,CAAC,EAAE,cAAc,CAAC;IAC5B,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,GAAG,CAAC,EAAE,MAAM,CAAC,UAAU,CAAC;IACxB,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,2EAA2E;IAC3E,QAAQ,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IAClC,2FAA2F;IAC3F,MAAM,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;CACpC;AAED,MAAM,WAAW,kBAAkB;IACjC,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,MAAM,CAAC;IACZ,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,UAAU,CAAC,EAAE,UAAU,GAAG,SAAS,CAAC;IACpC,SAAS,CAAC,EAAE,aAAa,GAAG,WAAW,GAAG,WAAW,GAAG,aAAa,GAAG,aAAa,CAAC;IACtF,aAAa,CAAC,EAAE,OAAO,CAAC;CACzB;AAED,wBAAsB,mBAAmB,CAAC,OAAO,EAAE,0BAA0B,GAAG,OAAO,CAAC,mBAAmB,CAAC,CAiC3G;AAED,wBAAsB,oBAAoB,CACxC,MAAM,EAAE,mBAAmB,EAC3B,OAAO,EAAE,kBAAkB,GAC1B,OAAO,CAAC,IAAI,CAAC,CAEf"}
1
+ {"version":3,"file":"client-factory.d.ts","sourceRoot":"","sources":["../../../src/cli/lib/client-factory.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,KAAK,cAAc,EAAE,MAAM,6BAA6B,CAAC;AACvF,OAAO,EAGL,KAAK,cAAc,EACnB,KAAK,sBAAsB,EAC5B,MAAM,wBAAwB,CAAC;AAEhC,MAAM,WAAW,0BAA0B;IACzC,GAAG,EAAE,MAAM,CAAC;IACZ,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;IACpB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,UAAU,CAAC,EAAE,cAAc,CAAC;IAC5B,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,GAAG,CAAC,EAAE,MAAM,CAAC,UAAU,CAAC;IACxB,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,2EAA2E;IAC3E,QAAQ,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IAClC,2FAA2F;IAC3F,MAAM,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;CACpC;AAED,MAAM,WAAW,kBAAkB;IACjC,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,MAAM,CAAC;IACZ,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,UAAU,CAAC,EAAE,UAAU,GAAG,SAAS,CAAC;IACpC,SAAS,CAAC,EAAE,aAAa,GAAG,WAAW,GAAG,WAAW,GAAG,aAAa,GAAG,aAAa,CAAC;IACtF,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,kFAAkF;IAClF,OAAO,CAAC,EAAE,cAAc,CAAC;CAC1B;AAID,6FAA6F;AAC7F,wBAAgB,mBAAmB,CACjC,IAAI,GAAE,SAAS,MAAM,EAAiB,EACtC,QAAQ,SAAmB,GAC1B;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,EAAE,CAAA;CAAE,GAAG,SAAS,CAMjD;AAED,wBAAgB,oBAAoB,CAClC,OAAO,EAAE,IAAI,CAAC,kBAAkB,EAAE,KAAK,GAAG,SAAS,CAAC,GACnD,sBAAsB,CAExB;AAED,wBAAsB,mBAAmB,CAAC,OAAO,EAAE,0BAA0B,GAAG,OAAO,CAAC,mBAAmB,CAAC,CAiC3G;AAED,wBAAsB,oBAAoB,CACxC,MAAM,EAAE,mBAAmB,EAC3B,OAAO,EAAE,kBAAkB,GAC1B,OAAO,CAAC,IAAI,CAAC,CA6Bf"}
@@ -1,4 +1,17 @@
1
1
  import { HarnessDriverClient } from '@agent-relay/harness-driver';
2
+ import { createNativeHarnessLaunch, resolveHarnessRuntime, } from '@agent-relay/harnesses';
3
+ const NATIVE_SIDECAR_COMMAND = '__ai-sdk-sidecar';
4
+ /** Bun standalone executables must re-enter the bundled CLI to run embedded sidecar code. */
5
+ export function nativeSidecarLaunch(argv = process.argv, execPath = process.execPath) {
6
+ const bundledEntrypoint = argv[1] ?? '';
7
+ if (argv[0] === 'bun' && bundledEntrypoint.startsWith('/$bunfs/root/')) {
8
+ return { command: execPath, args: [NATIVE_SIDECAR_COMMAND] };
9
+ }
10
+ return undefined;
11
+ }
12
+ export function resolvedSpawnRuntime(options) {
13
+ return resolveHarnessRuntime(options.cli, options.runtime);
14
+ }
2
15
  export async function createRuntimeClient(options) {
3
16
  const { cwd, channels = ['general'], binaryPath = process.env.AGENT_RELAY_BIN, binaryArgs, brokerName, env = process.env, preferConnect = false, onStderr, onStep, } = options;
4
17
  if (preferConnect) {
@@ -23,6 +36,27 @@ export async function createRuntimeClient(options) {
23
36
  });
24
37
  }
25
38
  export async function spawnAgentWithClient(client, options) {
26
- await client.spawnPty(options);
39
+ const runtime = resolvedSpawnRuntime(options);
40
+ if (runtime === 'pty') {
41
+ const { runtime: _runtime, ...ptyOptions } = options;
42
+ await client.spawnPty(ptyOptions);
43
+ return;
44
+ }
45
+ if (options.spawnMode && options.spawnMode !== 'interactive') {
46
+ throw new Error('Native harnesses currently support only interactive spawn mode');
47
+ }
48
+ if (options.exitAfterTask) {
49
+ throw new Error('Native harnesses do not currently support --exit-after-task');
50
+ }
51
+ const launch = createNativeHarnessLaunch(options.cli, {
52
+ runtime: 'native',
53
+ name: options.name,
54
+ channels: options.channels,
55
+ task: options.task,
56
+ model: options.model,
57
+ cwd: options.cwd,
58
+ }, nativeSidecarLaunch());
59
+ const { transport: _transport, ...headlessInput } = launch;
60
+ await client.spawnHeadless(headlessInput);
27
61
  }
28
62
  //# sourceMappingURL=client-factory.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"client-factory.js","sourceRoot":"","sources":["../../../src/cli/lib/client-factory.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAuB,MAAM,6BAA6B,CAAC;AA+BvF,MAAM,CAAC,KAAK,UAAU,mBAAmB,CAAC,OAAmC;IAC3E,MAAM,EACJ,GAAG,EACH,QAAQ,GAAG,CAAC,SAAS,CAAC,EACtB,UAAU,GAAG,OAAO,CAAC,GAAG,CAAC,eAAe,EACxC,UAAU,EACV,UAAU,EACV,GAAG,GAAG,OAAO,CAAC,GAAG,EACjB,aAAa,GAAG,KAAK,EACrB,QAAQ,EACR,MAAM,GACP,GAAG,OAAO,CAAC;IAEZ,IAAI,aAAa,EAAE,CAAC;QAClB,IAAI,CAAC;YACH,wEAAwE;YACxE,0DAA0D;YAC1D,OAAO,MAAM,mBAAmB,CAAC,OAAO,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC;QACpD,CAAC;QAAC,MAAM,CAAC;YACP,2CAA2C;QAC7C,CAAC;IACH,CAAC;IAED,OAAO,mBAAmB,CAAC,KAAK,CAAC;QAC/B,UAAU,EAAE,UAAU,IAAI,SAAS;QACnC,UAAU;QACV,UAAU;QACV,QAAQ;QACR,GAAG;QACH,GAAG,EAAE,GAA6B;QAClC,QAAQ;QACR,MAAM;KACP,CAAC,CAAC;AACL,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,oBAAoB,CACxC,MAA2B,EAC3B,OAA2B;IAE3B,MAAM,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;AACjC,CAAC"}
1
+ {"version":3,"file":"client-factory.js","sourceRoot":"","sources":["../../../src/cli/lib/client-factory.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ export declare const MINIMUM_NODE_MAJOR = 22;
2
+ /** Fail before CLI initialization when Relay is run on an unsupported Node release. */
3
+ export declare function assertSupportedNodeVersion(version?: string): void;
4
+ //# sourceMappingURL=node-version.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"node-version.d.ts","sourceRoot":"","sources":["../../../src/cli/lib/node-version.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,kBAAkB,KAAK,CAAC;AAErC,uFAAuF;AACvF,wBAAgB,0BAA0B,CAAC,OAAO,SAAwB,GAAG,IAAI,CAOhF"}
@@ -0,0 +1,9 @@
1
+ export const MINIMUM_NODE_MAJOR = 22;
2
+ /** Fail before CLI initialization when Relay is run on an unsupported Node release. */
3
+ export function assertSupportedNodeVersion(version = process.versions.node) {
4
+ const major = Number.parseInt(version.split('.')[0] ?? '', 10);
5
+ if (!Number.isInteger(major) || major < MINIMUM_NODE_MAJOR) {
6
+ throw new Error(`Agent Relay requires Node.js ${MINIMUM_NODE_MAJOR} or newer (found ${version}). Upgrade Node.js before running agent-relay.`);
7
+ }
8
+ }
9
+ //# sourceMappingURL=node-version.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"node-version.js","sourceRoot":"","sources":["../../../src/cli/lib/node-version.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,kBAAkB,GAAG,EAAE,CAAC;AAErC,uFAAuF;AACvF,MAAM,UAAU,0BAA0B,CAAC,OAAO,GAAG,OAAO,CAAC,QAAQ,CAAC,IAAI;IACxE,MAAM,KAAK,GAAG,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,EAAE,EAAE,CAAC,CAAC;IAC/D,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,KAAK,GAAG,kBAAkB,EAAE,CAAC;QAC3D,MAAM,IAAI,KAAK,CACb,gCAAgC,kBAAkB,oBAAoB,OAAO,gDAAgD,CAC9H,CAAC;IACJ,CAAC;AACH,CAAC"}