@agent-relay/harness-driver 14.0.0 → 15.0.0-next.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.
- package/dist/broker-install.d.ts +146 -0
- package/dist/broker-install.d.ts.map +1 -0
- package/dist/broker-install.js +494 -0
- package/dist/broker-install.js.map +1 -0
- package/dist/broker-path.d.ts +53 -10
- package/dist/broker-path.d.ts.map +1 -1
- package/dist/broker-path.js +111 -49
- package/dist/broker-path.js.map +1 -1
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -1
- package/dist/install-paths.d.ts +94 -0
- package/dist/install-paths.d.ts.map +1 -0
- package/dist/install-paths.js +151 -0
- package/dist/install-paths.js.map +1 -0
- package/package.json +17 -7
package/dist/broker-path.d.ts
CHANGED
|
@@ -5,19 +5,62 @@
|
|
|
5
5
|
* import { getBrokerBinaryPath } from '@agent-relay/harness-driver/broker-path';
|
|
6
6
|
* const binPath = getBrokerBinaryPath();
|
|
7
7
|
*/
|
|
8
|
+
/**
|
|
9
|
+
* npm package name of the platform broker, e.g. `@agent-relay/broker-linux-x64`.
|
|
10
|
+
* @param platform - Target platform
|
|
11
|
+
* @param arch - Target architecture
|
|
12
|
+
* @returns The optional-dependency package name
|
|
13
|
+
*/
|
|
8
14
|
export declare function getOptionalDepPackageName(platform?: NodeJS.Platform, arch?: string): string;
|
|
15
|
+
/** Where {@link resolveBrokerBinary} found the broker. */
|
|
16
|
+
export type BrokerBinarySource = 'env' | 'source-checkout' | 'canonical' | 'standalone' | 'npm-optional-dependency' | 'cargo-dev' | 'path' | 'legacy-install';
|
|
17
|
+
/** A resolved broker binary and where it was found. */
|
|
18
|
+
export interface ResolvedBrokerBinary {
|
|
19
|
+
path: string;
|
|
20
|
+
source: BrokerBinarySource;
|
|
21
|
+
}
|
|
22
|
+
export interface OptionalDepBrokerPathOptions {
|
|
23
|
+
/**
|
|
24
|
+
* Also resolve through `<cwd>/package.json` (default true). The CLI passes
|
|
25
|
+
* false when choosing a broker to copy into the shared bin directory, so a
|
|
26
|
+
* project's own (possibly different) broker version never lands there.
|
|
27
|
+
*/
|
|
28
|
+
includeCwd?: boolean;
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* The broker shipped by the npm optional dependency
|
|
32
|
+
* `@agent-relay/broker-<platform>-<arch>`, or null when it is not installed.
|
|
33
|
+
* Exposed so the CLI can copy it into the canonical bin directory.
|
|
34
|
+
* @param options - Resolution options
|
|
35
|
+
* @returns Absolute path to the npm broker, or null
|
|
36
|
+
*/
|
|
37
|
+
export declare function getOptionalDepBrokerPath(options?: OptionalDepBrokerPathOptions): string | null;
|
|
9
38
|
/**
|
|
10
|
-
* Resolve the agent-relay-broker binary
|
|
39
|
+
* Resolve the agent-relay-broker binary and report where it came from.
|
|
11
40
|
*
|
|
12
|
-
* Search order:
|
|
13
|
-
* 1. Explicit env override
|
|
14
|
-
* 2.
|
|
15
|
-
* checkout
|
|
16
|
-
* 3.
|
|
17
|
-
*
|
|
18
|
-
*
|
|
19
|
-
*
|
|
20
|
-
*
|
|
41
|
+
* Search order (first existing file wins):
|
|
42
|
+
* 1. Explicit env override: BROKER_BINARY_PATH, then AGENT_RELAY_BIN.
|
|
43
|
+
* 2. Development only: the Cargo build of an agent-relay source checkout
|
|
44
|
+
* when this runtime is loaded from (or run inside) that checkout.
|
|
45
|
+
* 3. Canonical install: `<install root>/bin/agent-relay-broker[.exe]`, where
|
|
46
|
+
* the install root is AGENT_RELAY_INSTALL_DIR, else AGENT_RELAY_HOME,
|
|
47
|
+
* else ~/.agentworkforce/relay. install.sh, the desktop app and the npm
|
|
48
|
+
* CLI (on first run) all put the broker here. A standalone CLI's own bin
|
|
49
|
+
* directory counts as its canonical install.
|
|
50
|
+
* 4. Legacy npm fallback: the platform optional-dependency package
|
|
51
|
+
* `@agent-relay/broker-<platform>-<arch>`.
|
|
52
|
+
* 5. Cargo development paths (target/release, target/debug).
|
|
53
|
+
* 6. PATH lookup via `which` / `where`.
|
|
54
|
+
* 7. Older installer locations (launcher sibling, ~/.agent-relay/bin,
|
|
55
|
+
* ~/.local/bin), for version managers that launch Node with a minimal
|
|
56
|
+
* PATH.
|
|
57
|
+
*
|
|
58
|
+
* @returns The resolved broker and its source, or null if none was found
|
|
59
|
+
*/
|
|
60
|
+
export declare function resolveBrokerBinary(): ResolvedBrokerBinary | null;
|
|
61
|
+
/**
|
|
62
|
+
* Resolve the agent-relay-broker binary path. See {@link resolveBrokerBinary}
|
|
63
|
+
* for the search order.
|
|
21
64
|
*
|
|
22
65
|
* @returns Absolute path to the broker binary, or null if not found
|
|
23
66
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"broker-path.d.ts","sourceRoot":"","sources":["../src/broker-path.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;
|
|
1
|
+
{"version":3,"file":"broker-path.d.ts","sourceRoot":"","sources":["../src/broker-path.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAkBH;;;;;GAKG;AACH,wBAAgB,yBAAyB,CACvC,QAAQ,GAAE,MAAM,CAAC,QAA2B,EAC5C,IAAI,GAAE,MAAqB,GAC1B,MAAM,CAER;AA4MD,0DAA0D;AAC1D,MAAM,MAAM,kBAAkB,GAC1B,KAAK,GACL,iBAAiB,GACjB,WAAW,GACX,YAAY,GACZ,yBAAyB,GACzB,WAAW,GACX,MAAM,GACN,gBAAgB,CAAC;AAErB,uDAAuD;AACvD,MAAM,WAAW,oBAAoB;IACnC,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,kBAAkB,CAAC;CAC5B;AAoCD,MAAM,WAAW,4BAA4B;IAC3C;;;;OAIG;IACH,UAAU,CAAC,EAAE,OAAO,CAAC;CACtB;AAED;;;;;;GAMG;AACH,wBAAgB,wBAAwB,CAAC,OAAO,GAAE,4BAAiC,GAAG,MAAM,GAAG,IAAI,CAElG;AAED;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,wBAAgB,mBAAmB,IAAI,oBAAoB,GAAG,IAAI,CAqDjE;AAED;;;;;GAKG;AACH,wBAAgB,mBAAmB,IAAI,MAAM,GAAG,IAAI,CAEnD;AAED;;;;;GAKG;AACH,wBAAgB,yBAAyB,IAAI,MAAM,CASlD"}
|
package/dist/broker-path.js
CHANGED
|
@@ -6,12 +6,18 @@
|
|
|
6
6
|
* const binPath = getBrokerBinaryPath();
|
|
7
7
|
*/
|
|
8
8
|
import { existsSync, realpathSync } from 'node:fs';
|
|
9
|
-
import { join, dirname, resolve } from 'node:path';
|
|
10
|
-
import { execFileSync } from 'node:child_process';
|
|
9
|
+
import { basename, join, dirname, resolve } from 'node:path';
|
|
11
10
|
import { createRequire } from 'node:module';
|
|
12
11
|
import { homedir } from 'node:os';
|
|
13
12
|
import { fileURLToPath } from 'node:url';
|
|
14
|
-
|
|
13
|
+
import { BROKER_BINARY_NAME, findExecutableOnPath, getCanonicalBrokerPath, getRelayBinDir, isUsableBinary, } from './install-paths.js';
|
|
14
|
+
const BROKER_NAME = BROKER_BINARY_NAME;
|
|
15
|
+
/**
|
|
16
|
+
* npm package name of the platform broker, e.g. `@agent-relay/broker-linux-x64`.
|
|
17
|
+
* @param platform - Target platform
|
|
18
|
+
* @param arch - Target architecture
|
|
19
|
+
* @returns The optional-dependency package name
|
|
20
|
+
*/
|
|
15
21
|
export function getOptionalDepPackageName(platform = process.platform, arch = process.arch) {
|
|
16
22
|
return `@agent-relay/broker-${platform}-${arch}`;
|
|
17
23
|
}
|
|
@@ -71,7 +77,7 @@ function getCurrentModuleReference() {
|
|
|
71
77
|
}
|
|
72
78
|
return getImportMetaUrl();
|
|
73
79
|
}
|
|
74
|
-
function getResolutionReferences() {
|
|
80
|
+
function getResolutionReferences(includeCwd = true) {
|
|
75
81
|
const refs = [];
|
|
76
82
|
addResolutionReference(refs, getCurrentModuleReference());
|
|
77
83
|
// Also try the entry script so CLI consumers and bundled installs
|
|
@@ -90,11 +96,13 @@ function getResolutionReferences() {
|
|
|
90
96
|
// some vite/webpack bundling configurations, repl experimentation), but
|
|
91
97
|
// the consumer's cwd is inside their own project. We only use this
|
|
92
98
|
// reference to run require.resolve; no file I/O is triggered on misses.
|
|
93
|
-
|
|
99
|
+
if (includeCwd) {
|
|
100
|
+
addResolutionReference(refs, join(process.cwd(), 'package.json'));
|
|
101
|
+
}
|
|
94
102
|
return refs;
|
|
95
103
|
}
|
|
96
104
|
/**
|
|
97
|
-
* Binary locations created by Relay
|
|
105
|
+
* Binary locations created by older Relay installers. These are
|
|
98
106
|
* deliberately checked without shelling out: a version manager can launch
|
|
99
107
|
* Node with a minimal PATH, which is exactly when `which` cannot see the
|
|
100
108
|
* broker that the Relay installer placed beside its launcher or under the
|
|
@@ -114,7 +122,6 @@ function getInstalledBinaryPaths(ext) {
|
|
|
114
122
|
addSiblingBinaryPaths(process.execPath);
|
|
115
123
|
const userHome = homedir();
|
|
116
124
|
if (userHome) {
|
|
117
|
-
addUniquePath(binaryPaths, join(userHome, '.agentworkforce', 'relay', 'bin', binaryFile));
|
|
118
125
|
addUniquePath(binaryPaths, join(userHome, '.agent-relay', 'bin', binaryFile));
|
|
119
126
|
addUniquePath(binaryPaths, join(userHome, '.local', 'bin', binaryFile));
|
|
120
127
|
}
|
|
@@ -127,10 +134,10 @@ function getInstalledBinaryPaths(ext) {
|
|
|
127
134
|
* --no-optional / --omit=optional / --include= omits optional, or when the
|
|
128
135
|
* broker hasn't been published for their platform yet).
|
|
129
136
|
*/
|
|
130
|
-
function getOptionalDepBinaryPath(ext) {
|
|
137
|
+
function getOptionalDepBinaryPath(ext, includeCwd = true) {
|
|
131
138
|
const pkgName = getOptionalDepPackageName();
|
|
132
139
|
const binaryFile = `${BROKER_NAME}${ext}`;
|
|
133
|
-
for (const ref of getResolutionReferences()) {
|
|
140
|
+
for (const ref of getResolutionReferences(includeCwd)) {
|
|
134
141
|
try {
|
|
135
142
|
const pkgJsonPath = createRequire(ref).resolve(`${pkgName}/package.json`);
|
|
136
143
|
const binPath = join(dirname(pkgJsonPath), 'bin', binaryFile);
|
|
@@ -189,70 +196,125 @@ function getSourceCheckoutBinaryPaths(ext) {
|
|
|
189
196
|
return getDevelopmentBinaryPaths(ext).filter((binaryPath) => isSourceCheckoutRoot(resolve(dirname(binaryPath), '..', '..')));
|
|
190
197
|
}
|
|
191
198
|
/**
|
|
192
|
-
*
|
|
199
|
+
* Directory of a running standalone (Bun-compiled) CLI. install.sh puts the
|
|
200
|
+
* standalone CLI and the broker side by side in the install's bin directory,
|
|
201
|
+
* so when the install root was relocated without exporting
|
|
202
|
+
* AGENT_RELAY_INSTALL_DIR at runtime, the executable's own directory is still
|
|
203
|
+
* that install's bin directory.
|
|
204
|
+
*/
|
|
205
|
+
function getStandaloneCliBinDir() {
|
|
206
|
+
const exe = basename(process.execPath).toLowerCase();
|
|
207
|
+
if (exe !== 'agent-relay' && exe !== 'agent-relay.exe')
|
|
208
|
+
return null;
|
|
209
|
+
return dirname(resolve(process.execPath));
|
|
210
|
+
}
|
|
211
|
+
/**
|
|
212
|
+
* Step 3 of {@link resolveBrokerBinary}: the canonical bin dir, then a
|
|
213
|
+
* standalone CLI's own bin dir. A file there that is empty, not a regular
|
|
214
|
+
* file or not executable is skipped, so a damaged shared install cannot hide
|
|
215
|
+
* a working npm broker from SDK callers that never run the CLI's repair step.
|
|
216
|
+
*/
|
|
217
|
+
function findCanonicalBroker(ext) {
|
|
218
|
+
const canonical = getCanonicalBrokerPath();
|
|
219
|
+
if (existsSync(canonical) && isUsableBinary(canonical)) {
|
|
220
|
+
return { path: canonical, source: 'canonical' };
|
|
221
|
+
}
|
|
222
|
+
const standaloneBinDir = getStandaloneCliBinDir();
|
|
223
|
+
if (standaloneBinDir) {
|
|
224
|
+
const standaloneBroker = join(standaloneBinDir, `${BROKER_NAME}${ext}`);
|
|
225
|
+
if (existsSync(standaloneBroker) && isUsableBinary(standaloneBroker)) {
|
|
226
|
+
return { path: standaloneBroker, source: 'standalone' };
|
|
227
|
+
}
|
|
228
|
+
}
|
|
229
|
+
return null;
|
|
230
|
+
}
|
|
231
|
+
/**
|
|
232
|
+
* The broker shipped by the npm optional dependency
|
|
233
|
+
* `@agent-relay/broker-<platform>-<arch>`, or null when it is not installed.
|
|
234
|
+
* Exposed so the CLI can copy it into the canonical bin directory.
|
|
235
|
+
* @param options - Resolution options
|
|
236
|
+
* @returns Absolute path to the npm broker, or null
|
|
237
|
+
*/
|
|
238
|
+
export function getOptionalDepBrokerPath(options = {}) {
|
|
239
|
+
return getOptionalDepBinaryPath(process.platform === 'win32' ? '.exe' : '', options.includeCwd ?? true);
|
|
240
|
+
}
|
|
241
|
+
/**
|
|
242
|
+
* Resolve the agent-relay-broker binary and report where it came from.
|
|
193
243
|
*
|
|
194
|
-
* Search order:
|
|
195
|
-
* 1. Explicit env override
|
|
196
|
-
* 2.
|
|
197
|
-
* checkout
|
|
198
|
-
* 3.
|
|
199
|
-
*
|
|
200
|
-
*
|
|
201
|
-
*
|
|
202
|
-
*
|
|
244
|
+
* Search order (first existing file wins):
|
|
245
|
+
* 1. Explicit env override: BROKER_BINARY_PATH, then AGENT_RELAY_BIN.
|
|
246
|
+
* 2. Development only: the Cargo build of an agent-relay source checkout
|
|
247
|
+
* when this runtime is loaded from (or run inside) that checkout.
|
|
248
|
+
* 3. Canonical install: `<install root>/bin/agent-relay-broker[.exe]`, where
|
|
249
|
+
* the install root is AGENT_RELAY_INSTALL_DIR, else AGENT_RELAY_HOME,
|
|
250
|
+
* else ~/.agentworkforce/relay. install.sh, the desktop app and the npm
|
|
251
|
+
* CLI (on first run) all put the broker here. A standalone CLI's own bin
|
|
252
|
+
* directory counts as its canonical install.
|
|
253
|
+
* 4. Legacy npm fallback: the platform optional-dependency package
|
|
254
|
+
* `@agent-relay/broker-<platform>-<arch>`.
|
|
255
|
+
* 5. Cargo development paths (target/release, target/debug).
|
|
256
|
+
* 6. PATH lookup via `which` / `where`.
|
|
257
|
+
* 7. Older installer locations (launcher sibling, ~/.agent-relay/bin,
|
|
258
|
+
* ~/.local/bin), for version managers that launch Node with a minimal
|
|
259
|
+
* PATH.
|
|
203
260
|
*
|
|
204
|
-
* @returns
|
|
261
|
+
* @returns The resolved broker and its source, or null if none was found
|
|
205
262
|
*/
|
|
206
|
-
export function
|
|
263
|
+
export function resolveBrokerBinary() {
|
|
207
264
|
const ext = process.platform === 'win32' ? '.exe' : '';
|
|
208
265
|
const override = process.env.BROKER_BINARY_PATH ?? process.env.AGENT_RELAY_BIN;
|
|
266
|
+
// 1. Explicit override.
|
|
209
267
|
if (override) {
|
|
210
268
|
const resolvedOverride = resolve(override);
|
|
211
269
|
if (existsSync(resolvedOverride)) {
|
|
212
|
-
return resolvedOverride;
|
|
270
|
+
return { path: resolvedOverride, source: 'env' };
|
|
213
271
|
}
|
|
214
272
|
}
|
|
215
|
-
//
|
|
273
|
+
// 2. A local Cargo build when this runtime is being used from a source checkout.
|
|
216
274
|
for (const developmentPath of getSourceCheckoutBinaryPaths(ext)) {
|
|
217
275
|
if (existsSync(developmentPath)) {
|
|
218
|
-
return developmentPath;
|
|
276
|
+
return { path: developmentPath, source: 'source-checkout' };
|
|
219
277
|
}
|
|
220
278
|
}
|
|
221
|
-
//
|
|
279
|
+
// 3. The canonical install location shared by every install method.
|
|
280
|
+
const installed = findCanonicalBroker(ext);
|
|
281
|
+
if (installed) {
|
|
282
|
+
return installed;
|
|
283
|
+
}
|
|
284
|
+
// 4. Legacy: the platform-specific npm optional dependency.
|
|
222
285
|
const optionalDepBinary = getOptionalDepBinaryPath(ext);
|
|
223
286
|
if (optionalDepBinary) {
|
|
224
|
-
return optionalDepBinary;
|
|
287
|
+
return { path: optionalDepBinary, source: 'npm-optional-dependency' };
|
|
225
288
|
}
|
|
226
|
-
//
|
|
289
|
+
// 5. Common development paths for local Cargo builds.
|
|
227
290
|
for (const developmentPath of getDevelopmentBinaryPaths(ext)) {
|
|
228
291
|
if (existsSync(developmentPath)) {
|
|
229
|
-
return developmentPath;
|
|
292
|
+
return { path: developmentPath, source: 'cargo-dev' };
|
|
230
293
|
}
|
|
231
294
|
}
|
|
232
|
-
//
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
const result = execFileSync(cmd, [BROKER_NAME], {
|
|
237
|
-
encoding: 'utf-8',
|
|
238
|
-
stdio: ['pipe', 'pipe', 'pipe'],
|
|
239
|
-
}).trim();
|
|
240
|
-
if (result) {
|
|
241
|
-
return result.split(/\r?\n/u)[0].trim();
|
|
242
|
-
}
|
|
295
|
+
// 6. PATH lookup.
|
|
296
|
+
const onPath = findExecutableOnPath(BROKER_NAME);
|
|
297
|
+
if (onPath) {
|
|
298
|
+
return { path: onPath, source: 'path' };
|
|
243
299
|
}
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
}
|
|
247
|
-
// 5. Relay's npm/standalone installer locations. This also covers mise and
|
|
248
|
-
// similar version managers when their activation PATH omits the user bin.
|
|
300
|
+
// 7. Older installer locations. This also covers mise and similar version
|
|
301
|
+
// managers when their activation PATH omits the user bin.
|
|
249
302
|
for (const installedPath of getInstalledBinaryPaths(ext)) {
|
|
250
303
|
if (existsSync(installedPath)) {
|
|
251
|
-
return installedPath;
|
|
304
|
+
return { path: installedPath, source: 'legacy-install' };
|
|
252
305
|
}
|
|
253
306
|
}
|
|
254
307
|
return null;
|
|
255
308
|
}
|
|
309
|
+
/**
|
|
310
|
+
* Resolve the agent-relay-broker binary path. See {@link resolveBrokerBinary}
|
|
311
|
+
* for the search order.
|
|
312
|
+
*
|
|
313
|
+
* @returns Absolute path to the broker binary, or null if not found
|
|
314
|
+
*/
|
|
315
|
+
export function getBrokerBinaryPath() {
|
|
316
|
+
return resolveBrokerBinary()?.path ?? null;
|
|
317
|
+
}
|
|
256
318
|
/**
|
|
257
319
|
* Human-readable error message explaining that the optional-dep broker
|
|
258
320
|
* package for the current platform/arch isn't installed. Used by the SDK
|
|
@@ -262,9 +324,9 @@ export function getBrokerBinaryPath() {
|
|
|
262
324
|
export function formatBrokerNotFoundError() {
|
|
263
325
|
const pkgName = getOptionalDepPackageName();
|
|
264
326
|
return (`@agent-relay/harness-driver couldn't find an agent-relay-broker binary for ` +
|
|
265
|
-
`${process.platform}-${process.arch}.
|
|
266
|
-
|
|
267
|
-
`
|
|
268
|
-
`to point at a broker binary you've downloaded manually.`);
|
|
327
|
+
`${process.platform}-${process.arch}. Expected it at ${join(getRelayBinDir(), `${BROKER_NAME}${process.platform === 'win32' ? '.exe' : ''}`)} ` +
|
|
328
|
+
`(install with: curl -fsSL https://raw.githubusercontent.com/AgentWorkforce/relay/main/install.sh | bash) ` +
|
|
329
|
+
`or in the optional dependency ${pkgName} (reinstall with --include=optional). ` +
|
|
330
|
+
`Or set BROKER_BINARY_PATH to point at a broker binary you've downloaded manually.`);
|
|
269
331
|
}
|
|
270
332
|
//# sourceMappingURL=broker-path.js.map
|
package/dist/broker-path.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"broker-path.js","sourceRoot":"","sources":["../src/broker-path.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACnD,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"broker-path.js","sourceRoot":"","sources":["../src/broker-path.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
|
@@ -9,4 +9,6 @@ export * from './transport.js';
|
|
|
9
9
|
export * from './broker-path.js';
|
|
10
10
|
export * from './harness.js';
|
|
11
11
|
export * from './predictive-echo.js';
|
|
12
|
+
export * from './install-paths.js';
|
|
13
|
+
export { ensureCanonicalBroker, SKIP_BROKER_INSTALL_ENV, type EnsureCanonicalBrokerOptions, type EnsureCanonicalBrokerResult, type EnsureCanonicalBrokerSkipReason, } from './broker-install.js';
|
|
12
14
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,mBAAmB,CAAC;AAClC,cAAc,mBAAmB,CAAC;AAClC,cAAc,oBAAoB,CAAC;AACnC,cAAc,cAAc,CAAC;AAC7B,cAAc,aAAa,CAAC;AAC5B,cAAc,eAAe,CAAC;AAC9B,cAAc,YAAY,CAAC;AAC3B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,kBAAkB,CAAC;AACjC,cAAc,cAAc,CAAC;AAC7B,cAAc,sBAAsB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,mBAAmB,CAAC;AAClC,cAAc,mBAAmB,CAAC;AAClC,cAAc,oBAAoB,CAAC;AACnC,cAAc,cAAc,CAAC;AAC7B,cAAc,aAAa,CAAC;AAC5B,cAAc,eAAe,CAAC;AAC9B,cAAc,YAAY,CAAC;AAC3B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,kBAAkB,CAAC;AACjC,cAAc,cAAc,CAAC;AAC7B,cAAc,sBAAsB,CAAC;AACrC,cAAc,oBAAoB,CAAC;AACnC,OAAO,EACL,qBAAqB,EACrB,uBAAuB,EACvB,KAAK,4BAA4B,EACjC,KAAK,2BAA2B,EAChC,KAAK,+BAA+B,GACrC,MAAM,qBAAqB,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -9,4 +9,6 @@ export * from './transport.js';
|
|
|
9
9
|
export * from './broker-path.js';
|
|
10
10
|
export * from './harness.js';
|
|
11
11
|
export * from './predictive-echo.js';
|
|
12
|
+
export * from './install-paths.js';
|
|
13
|
+
export { ensureCanonicalBroker, SKIP_BROKER_INSTALL_ENV, } from './broker-install.js';
|
|
12
14
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,mBAAmB,CAAC;AAClC,cAAc,mBAAmB,CAAC;AAClC,cAAc,oBAAoB,CAAC;AACnC,cAAc,cAAc,CAAC;AAC7B,cAAc,aAAa,CAAC;AAC5B,cAAc,eAAe,CAAC;AAC9B,cAAc,YAAY,CAAC;AAC3B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,kBAAkB,CAAC;AACjC,cAAc,cAAc,CAAC;AAC7B,cAAc,sBAAsB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,mBAAmB,CAAC;AAClC,cAAc,mBAAmB,CAAC;AAClC,cAAc,oBAAoB,CAAC;AACnC,cAAc,cAAc,CAAC;AAC7B,cAAc,aAAa,CAAC;AAC5B,cAAc,eAAe,CAAC;AAC9B,cAAc,YAAY,CAAC;AAC3B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,kBAAkB,CAAC;AACjC,cAAc,cAAc,CAAC;AAC7B,cAAc,sBAAsB,CAAC;AACrC,cAAc,oBAAoB,CAAC;AACnC,OAAO,EACL,qBAAqB,EACrB,uBAAuB,GAIxB,MAAM,qBAAqB,CAAC"}
|
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The single, canonical location of every Agent Relay native binary.
|
|
3
|
+
*
|
|
4
|
+
* However Agent Relay is installed (`install.sh`, `npm i -g agent-relay`, the
|
|
5
|
+
* desktop app), its binaries converge on one directory so the CLI, the broker
|
|
6
|
+
* it launches and the desktop app always run the same executables:
|
|
7
|
+
*
|
|
8
|
+
* $AGENT_RELAY_INSTALL_DIR/bin when AGENT_RELAY_INSTALL_DIR is set
|
|
9
|
+
* $AGENT_RELAY_HOME/bin otherwise, when AGENT_RELAY_HOME is set
|
|
10
|
+
* ~/.agentworkforce/relay/bin by default
|
|
11
|
+
*
|
|
12
|
+
* Reserved binary slots in that directory (`.exe` suffix on Windows):
|
|
13
|
+
*
|
|
14
|
+
* agent-relay standalone CLI (written by install.sh)
|
|
15
|
+
* agent-relay-broker Rust broker (install.sh, desktop app, or copied from
|
|
16
|
+
* the npm optional dependency on first CLI run)
|
|
17
|
+
* relaycast-engine local Relaycast server (install.sh, when published)
|
|
18
|
+
*
|
|
19
|
+
* `install.sh` resolves the same directory, so the shell installer and the
|
|
20
|
+
* runtime resolvers cannot disagree about where binaries live.
|
|
21
|
+
*/
|
|
22
|
+
export declare const BROKER_BINARY_NAME = "agent-relay-broker";
|
|
23
|
+
export declare const RELAYCAST_ENGINE_BINARY_NAME = "relaycast-engine";
|
|
24
|
+
/** Environment variable that relocates the whole install root. */
|
|
25
|
+
export declare const RELAY_INSTALL_DIR_ENV = "AGENT_RELAY_INSTALL_DIR";
|
|
26
|
+
/** Relay home (credentials, state). Its `bin/` is used when no install dir is set. */
|
|
27
|
+
export declare const RELAY_HOME_ENV = "AGENT_RELAY_HOME";
|
|
28
|
+
/** Explicit path to a relaycast-engine binary, checked before the canonical slot. */
|
|
29
|
+
export declare const RELAYCAST_ENGINE_PATH_ENV = "RELAYCAST_ENGINE_PATH";
|
|
30
|
+
type Env = Record<string, string | undefined>;
|
|
31
|
+
/**
|
|
32
|
+
* Executable file name for `name` on `platform` (`.exe` on Windows).
|
|
33
|
+
* @param name - Binary base name, e.g. `agent-relay-broker`
|
|
34
|
+
* @param platform - Target platform (defaults to the current one)
|
|
35
|
+
* @returns The file name to look for on disk
|
|
36
|
+
*/
|
|
37
|
+
export declare function executableFileName(name: string, platform?: NodeJS.Platform): string;
|
|
38
|
+
/**
|
|
39
|
+
* Root of the Agent Relay install (`AGENT_RELAY_INSTALL_DIR` →
|
|
40
|
+
* `AGENT_RELAY_HOME` → `~/.agentworkforce/relay`).
|
|
41
|
+
* @param env - Environment to read overrides from
|
|
42
|
+
* @param home - Home directory used for the default
|
|
43
|
+
* @returns Absolute install root
|
|
44
|
+
*/
|
|
45
|
+
export declare function getRelayInstallDir(env?: Env, home?: string): string;
|
|
46
|
+
/**
|
|
47
|
+
* The canonical binary directory: `<install root>/bin`.
|
|
48
|
+
* @param env - Environment to read overrides from
|
|
49
|
+
* @param home - Home directory used for the default
|
|
50
|
+
* @returns Absolute path of the canonical bin directory
|
|
51
|
+
*/
|
|
52
|
+
export declare function getRelayBinDir(env?: Env, home?: string): string;
|
|
53
|
+
/**
|
|
54
|
+
* Canonical path of the broker binary (may not exist).
|
|
55
|
+
* @param env - Environment to read overrides from
|
|
56
|
+
* @param platform - Target platform
|
|
57
|
+
* @returns `<bin>/agent-relay-broker[.exe]`
|
|
58
|
+
*/
|
|
59
|
+
export declare function getCanonicalBrokerPath(env?: Env, platform?: NodeJS.Platform): string;
|
|
60
|
+
/**
|
|
61
|
+
* Canonical path of the local Relaycast server binary (may not exist).
|
|
62
|
+
* @param env - Environment to read overrides from
|
|
63
|
+
* @param platform - Target platform
|
|
64
|
+
* @returns `<bin>/relaycast-engine[.exe]`
|
|
65
|
+
*/
|
|
66
|
+
export declare function getCanonicalRelaycastEnginePath(env?: Env, platform?: NodeJS.Platform): string;
|
|
67
|
+
/**
|
|
68
|
+
* Whether `filePath` looks runnable: a non-empty regular file that is
|
|
69
|
+
* executable (the execute bit is not checked on Windows). Cheap enough for
|
|
70
|
+
* every resolve; it does not execute the file.
|
|
71
|
+
* @param filePath - Candidate binary
|
|
72
|
+
* @returns true when the file can plausibly be launched
|
|
73
|
+
*/
|
|
74
|
+
export declare function isUsableBinary(filePath: string): boolean;
|
|
75
|
+
/**
|
|
76
|
+
* First match for `name` on PATH (`which` / `where`), or null.
|
|
77
|
+
* @param name - Command name to look up
|
|
78
|
+
* @returns Absolute path, or null when the command is not on PATH
|
|
79
|
+
*/
|
|
80
|
+
export declare function findExecutableOnPath(name: string): string | null;
|
|
81
|
+
/**
|
|
82
|
+
* Resolve the local Relaycast server binary.
|
|
83
|
+
*
|
|
84
|
+
* Search order:
|
|
85
|
+
* 1. `RELAYCAST_ENGINE_PATH` (explicit override; must exist)
|
|
86
|
+
* 2. Canonical slot `<bin>/relaycast-engine[.exe]`
|
|
87
|
+
* 3. PATH lookup
|
|
88
|
+
*
|
|
89
|
+
* @param env - Environment to read overrides from
|
|
90
|
+
* @returns Absolute path to the binary, or null if none is installed
|
|
91
|
+
*/
|
|
92
|
+
export declare function getRelaycastEnginePath(env?: Env): string | null;
|
|
93
|
+
export {};
|
|
94
|
+
//# sourceMappingURL=install-paths.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"install-paths.d.ts","sourceRoot":"","sources":["../src/install-paths.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAOH,eAAO,MAAM,kBAAkB,uBAAuB,CAAC;AACvD,eAAO,MAAM,4BAA4B,qBAAqB,CAAC;AAE/D,kEAAkE;AAClE,eAAO,MAAM,qBAAqB,4BAA4B,CAAC;AAC/D,sFAAsF;AACtF,eAAO,MAAM,cAAc,qBAAqB,CAAC;AACjD,qFAAqF;AACrF,eAAO,MAAM,yBAAyB,0BAA0B,CAAC;AAEjE,KAAK,GAAG,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,CAAC;AAO9C;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,GAAE,MAAM,CAAC,QAA2B,GAAG,MAAM,CAErG;AAED;;;;;;GAMG;AACH,wBAAgB,kBAAkB,CAAC,GAAG,GAAE,GAAiB,EAAE,IAAI,GAAE,MAAkB,GAAG,MAAM,CAI3F;AAED;;;;;GAKG;AACH,wBAAgB,cAAc,CAAC,GAAG,GAAE,GAAiB,EAAE,IAAI,GAAE,MAAkB,GAAG,MAAM,CAEvF;AAED;;;;;GAKG;AACH,wBAAgB,sBAAsB,CACpC,GAAG,GAAE,GAAiB,EACtB,QAAQ,GAAE,MAAM,CAAC,QAA2B,GAC3C,MAAM,CAER;AAED;;;;;GAKG;AACH,wBAAgB,+BAA+B,CAC7C,GAAG,GAAE,GAAiB,EACtB,QAAQ,GAAE,MAAM,CAAC,QAA2B,GAC3C,MAAM,CAER;AAED;;;;;;GAMG;AACH,wBAAgB,cAAc,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CASxD;AAED;;;;GAIG;AACH,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAchE;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,sBAAsB,CAAC,GAAG,GAAE,GAAiB,GAAG,MAAM,GAAG,IAAI,CAW5E"}
|
|
@@ -0,0 +1,151 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The single, canonical location of every Agent Relay native binary.
|
|
3
|
+
*
|
|
4
|
+
* However Agent Relay is installed (`install.sh`, `npm i -g agent-relay`, the
|
|
5
|
+
* desktop app), its binaries converge on one directory so the CLI, the broker
|
|
6
|
+
* it launches and the desktop app always run the same executables:
|
|
7
|
+
*
|
|
8
|
+
* $AGENT_RELAY_INSTALL_DIR/bin when AGENT_RELAY_INSTALL_DIR is set
|
|
9
|
+
* $AGENT_RELAY_HOME/bin otherwise, when AGENT_RELAY_HOME is set
|
|
10
|
+
* ~/.agentworkforce/relay/bin by default
|
|
11
|
+
*
|
|
12
|
+
* Reserved binary slots in that directory (`.exe` suffix on Windows):
|
|
13
|
+
*
|
|
14
|
+
* agent-relay standalone CLI (written by install.sh)
|
|
15
|
+
* agent-relay-broker Rust broker (install.sh, desktop app, or copied from
|
|
16
|
+
* the npm optional dependency on first CLI run)
|
|
17
|
+
* relaycast-engine local Relaycast server (install.sh, when published)
|
|
18
|
+
*
|
|
19
|
+
* `install.sh` resolves the same directory, so the shell installer and the
|
|
20
|
+
* runtime resolvers cannot disagree about where binaries live.
|
|
21
|
+
*/
|
|
22
|
+
import { execFileSync } from 'node:child_process';
|
|
23
|
+
import { accessSync, constants, existsSync, statSync } from 'node:fs';
|
|
24
|
+
import { homedir } from 'node:os';
|
|
25
|
+
import { join, resolve } from 'node:path';
|
|
26
|
+
export const BROKER_BINARY_NAME = 'agent-relay-broker';
|
|
27
|
+
export const RELAYCAST_ENGINE_BINARY_NAME = 'relaycast-engine';
|
|
28
|
+
/** Environment variable that relocates the whole install root. */
|
|
29
|
+
export const RELAY_INSTALL_DIR_ENV = 'AGENT_RELAY_INSTALL_DIR';
|
|
30
|
+
/** Relay home (credentials, state). Its `bin/` is used when no install dir is set. */
|
|
31
|
+
export const RELAY_HOME_ENV = 'AGENT_RELAY_HOME';
|
|
32
|
+
/** Explicit path to a relaycast-engine binary, checked before the canonical slot. */
|
|
33
|
+
export const RELAYCAST_ENGINE_PATH_ENV = 'RELAYCAST_ENGINE_PATH';
|
|
34
|
+
function nonEmpty(value) {
|
|
35
|
+
const trimmed = value?.trim();
|
|
36
|
+
return trimmed ? trimmed : undefined;
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* Executable file name for `name` on `platform` (`.exe` on Windows).
|
|
40
|
+
* @param name - Binary base name, e.g. `agent-relay-broker`
|
|
41
|
+
* @param platform - Target platform (defaults to the current one)
|
|
42
|
+
* @returns The file name to look for on disk
|
|
43
|
+
*/
|
|
44
|
+
export function executableFileName(name, platform = process.platform) {
|
|
45
|
+
return platform === 'win32' ? `${name}.exe` : name;
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* Root of the Agent Relay install (`AGENT_RELAY_INSTALL_DIR` →
|
|
49
|
+
* `AGENT_RELAY_HOME` → `~/.agentworkforce/relay`).
|
|
50
|
+
* @param env - Environment to read overrides from
|
|
51
|
+
* @param home - Home directory used for the default
|
|
52
|
+
* @returns Absolute install root
|
|
53
|
+
*/
|
|
54
|
+
export function getRelayInstallDir(env = process.env, home = homedir()) {
|
|
55
|
+
const explicit = nonEmpty(env[RELAY_INSTALL_DIR_ENV]) ?? nonEmpty(env[RELAY_HOME_ENV]);
|
|
56
|
+
if (explicit)
|
|
57
|
+
return resolve(explicit);
|
|
58
|
+
return join(home, '.agentworkforce', 'relay');
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* The canonical binary directory: `<install root>/bin`.
|
|
62
|
+
* @param env - Environment to read overrides from
|
|
63
|
+
* @param home - Home directory used for the default
|
|
64
|
+
* @returns Absolute path of the canonical bin directory
|
|
65
|
+
*/
|
|
66
|
+
export function getRelayBinDir(env = process.env, home = homedir()) {
|
|
67
|
+
return join(getRelayInstallDir(env, home), 'bin');
|
|
68
|
+
}
|
|
69
|
+
/**
|
|
70
|
+
* Canonical path of the broker binary (may not exist).
|
|
71
|
+
* @param env - Environment to read overrides from
|
|
72
|
+
* @param platform - Target platform
|
|
73
|
+
* @returns `<bin>/agent-relay-broker[.exe]`
|
|
74
|
+
*/
|
|
75
|
+
export function getCanonicalBrokerPath(env = process.env, platform = process.platform) {
|
|
76
|
+
return join(getRelayBinDir(env), executableFileName(BROKER_BINARY_NAME, platform));
|
|
77
|
+
}
|
|
78
|
+
/**
|
|
79
|
+
* Canonical path of the local Relaycast server binary (may not exist).
|
|
80
|
+
* @param env - Environment to read overrides from
|
|
81
|
+
* @param platform - Target platform
|
|
82
|
+
* @returns `<bin>/relaycast-engine[.exe]`
|
|
83
|
+
*/
|
|
84
|
+
export function getCanonicalRelaycastEnginePath(env = process.env, platform = process.platform) {
|
|
85
|
+
return join(getRelayBinDir(env), executableFileName(RELAYCAST_ENGINE_BINARY_NAME, platform));
|
|
86
|
+
}
|
|
87
|
+
/**
|
|
88
|
+
* Whether `filePath` looks runnable: a non-empty regular file that is
|
|
89
|
+
* executable (the execute bit is not checked on Windows). Cheap enough for
|
|
90
|
+
* every resolve; it does not execute the file.
|
|
91
|
+
* @param filePath - Candidate binary
|
|
92
|
+
* @returns true when the file can plausibly be launched
|
|
93
|
+
*/
|
|
94
|
+
export function isUsableBinary(filePath) {
|
|
95
|
+
try {
|
|
96
|
+
const stat = statSync(filePath);
|
|
97
|
+
if (!stat.isFile() || stat.size === 0)
|
|
98
|
+
return false;
|
|
99
|
+
if (process.platform !== 'win32')
|
|
100
|
+
accessSync(filePath, constants.X_OK);
|
|
101
|
+
return true;
|
|
102
|
+
}
|
|
103
|
+
catch {
|
|
104
|
+
return false;
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
/**
|
|
108
|
+
* First match for `name` on PATH (`which` / `where`), or null.
|
|
109
|
+
* @param name - Command name to look up
|
|
110
|
+
* @returns Absolute path, or null when the command is not on PATH
|
|
111
|
+
*/
|
|
112
|
+
export function findExecutableOnPath(name) {
|
|
113
|
+
try {
|
|
114
|
+
const cmd = process.platform === 'win32' ? 'where' : 'which';
|
|
115
|
+
const result = execFileSync(cmd, [name], {
|
|
116
|
+
encoding: 'utf-8',
|
|
117
|
+
stdio: ['pipe', 'pipe', 'pipe'],
|
|
118
|
+
}).trim();
|
|
119
|
+
if (result) {
|
|
120
|
+
return result.split(/\r?\n/u)[0].trim();
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
catch {
|
|
124
|
+
// Not found on PATH.
|
|
125
|
+
}
|
|
126
|
+
return null;
|
|
127
|
+
}
|
|
128
|
+
/**
|
|
129
|
+
* Resolve the local Relaycast server binary.
|
|
130
|
+
*
|
|
131
|
+
* Search order:
|
|
132
|
+
* 1. `RELAYCAST_ENGINE_PATH` (explicit override; must exist)
|
|
133
|
+
* 2. Canonical slot `<bin>/relaycast-engine[.exe]`
|
|
134
|
+
* 3. PATH lookup
|
|
135
|
+
*
|
|
136
|
+
* @param env - Environment to read overrides from
|
|
137
|
+
* @returns Absolute path to the binary, or null if none is installed
|
|
138
|
+
*/
|
|
139
|
+
export function getRelaycastEnginePath(env = process.env) {
|
|
140
|
+
const override = nonEmpty(env[RELAYCAST_ENGINE_PATH_ENV]);
|
|
141
|
+
if (override) {
|
|
142
|
+
const resolvedOverride = resolve(override);
|
|
143
|
+
if (existsSync(resolvedOverride))
|
|
144
|
+
return resolvedOverride;
|
|
145
|
+
}
|
|
146
|
+
const canonical = getCanonicalRelaycastEnginePath(env);
|
|
147
|
+
if (existsSync(canonical) && isUsableBinary(canonical))
|
|
148
|
+
return canonical;
|
|
149
|
+
return findExecutableOnPath(RELAYCAST_ENGINE_BINARY_NAME);
|
|
150
|
+
}
|
|
151
|
+
//# sourceMappingURL=install-paths.js.map
|