@agent-relay/utils 2.1.21 → 2.1.23-beta.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.
package/dist/cjs/index.js CHANGED
@@ -23,6 +23,7 @@ __reExport(index_exports, require("./git-remote.js"), module.exports);
23
23
  __reExport(index_exports, require("./update-checker.js"), module.exports);
24
24
  __reExport(index_exports, require("./error-tracking.js"), module.exports);
25
25
  __reExport(index_exports, require("./model-mapping.js"), module.exports);
26
+ __reExport(index_exports, require("./model-commands.js"), module.exports);
26
27
  __reExport(index_exports, require("./relay-pty-path.js"), module.exports);
27
28
  __reExport(index_exports, require("./client-helpers.js"), module.exports);
28
29
  // Annotate the CommonJS export names for ESM import in node:
@@ -35,6 +36,7 @@ __reExport(index_exports, require("./client-helpers.js"), module.exports);
35
36
  ...require("./update-checker.js"),
36
37
  ...require("./error-tracking.js"),
37
38
  ...require("./model-mapping.js"),
39
+ ...require("./model-commands.js"),
38
40
  ...require("./relay-pty-path.js"),
39
41
  ...require("./client-helpers.js")
40
42
  });
@@ -0,0 +1,98 @@
1
+ "use strict";
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
6
+ var __export = (target, all) => {
7
+ for (var name in all)
8
+ __defProp(target, name, { get: all[name], enumerable: true });
9
+ };
10
+ var __copyProps = (to, from, except, desc) => {
11
+ if (from && typeof from === "object" || typeof from === "function") {
12
+ for (let key of __getOwnPropNames(from))
13
+ if (!__hasOwnProp.call(to, key) && key !== except)
14
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
15
+ }
16
+ return to;
17
+ };
18
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
+ var model_commands_exports = {};
20
+ __export(model_commands_exports, {
21
+ buildModelSwitchCommand: () => buildModelSwitchCommand,
22
+ getModelCommandConfig: () => getModelCommandConfig,
23
+ isModelSwitchSupported: () => isModelSwitchSupported,
24
+ validateModelForCli: () => validateModelForCli
25
+ });
26
+ module.exports = __toCommonJS(model_commands_exports);
27
+ const CLAUDE_MODEL_ALIASES = {
28
+ "claude-opus-4": "opus",
29
+ "claude-opus-4.5": "opus",
30
+ "claude-opus-4-6": "opus",
31
+ "claude-sonnet-4": "sonnet",
32
+ "claude-sonnet-4-5": "sonnet",
33
+ "claude-haiku-3.5": "haiku",
34
+ "claude-haiku-4.5": "haiku"
35
+ };
36
+ const CLAUDE_VALID_MODELS = ["opus", "sonnet", "haiku"];
37
+ const CLI_MODEL_COMMANDS = {
38
+ claude: {
39
+ supported: true,
40
+ buildCommand: (model) => `/model ${model}
41
+ `,
42
+ validModels: [
43
+ ...CLAUDE_VALID_MODELS,
44
+ ...Object.keys(CLAUDE_MODEL_ALIASES)
45
+ ],
46
+ normalizeModel: (model) => {
47
+ const normalized = model.trim().toLowerCase();
48
+ return CLAUDE_MODEL_ALIASES[normalized] ?? normalized;
49
+ }
50
+ },
51
+ codex: { supported: false },
52
+ gemini: { supported: false },
53
+ droid: { supported: false },
54
+ opencode: { supported: false },
55
+ aider: { supported: false },
56
+ goose: { supported: false },
57
+ cursor: { supported: false }
58
+ };
59
+ function getModelCommandConfig(cli) {
60
+ const baseCli = cli.split(":")[0].toLowerCase();
61
+ return CLI_MODEL_COMMANDS[baseCli] ?? { supported: false };
62
+ }
63
+ function isModelSwitchSupported(cli) {
64
+ return getModelCommandConfig(cli).supported;
65
+ }
66
+ function buildModelSwitchCommand(cli, model) {
67
+ const config = getModelCommandConfig(cli);
68
+ if (!config.supported || !config.buildCommand) {
69
+ return null;
70
+ }
71
+ const normalizedModel = config.normalizeModel ? config.normalizeModel(model) : model;
72
+ return config.buildCommand(normalizedModel);
73
+ }
74
+ function validateModelForCli(cli, model) {
75
+ const config = getModelCommandConfig(cli);
76
+ if (!config.supported) {
77
+ return {
78
+ valid: false,
79
+ error: `CLI "${cli}" does not support mid-session model switching`
80
+ };
81
+ }
82
+ const normalizedModel = config.normalizeModel ? config.normalizeModel(model) : model;
83
+ if (config.validModels && !config.validModels.includes(normalizedModel)) {
84
+ const displayModels = config.validModels.filter((m) => !m.includes("-"));
85
+ return {
86
+ valid: false,
87
+ error: `Invalid model "${model}" for CLI "${cli}". Valid models: ${displayModels.join(", ")}`
88
+ };
89
+ }
90
+ return { valid: true, normalizedModel };
91
+ }
92
+ // Annotate the CommonJS export names for ESM import in node:
93
+ 0 && (module.exports = {
94
+ buildModelSwitchCommand,
95
+ getModelCommandConfig,
96
+ isModelSwitchSupported,
97
+ validateModelForCli
98
+ });
@@ -77,7 +77,7 @@ function getLastSearchPaths() {
77
77
  }
78
78
  function findRelayPtyBinary(callerDirname) {
79
79
  const envOverride = process.env.RELAY_PTY_BINARY;
80
- if (envOverride && isExecutable(envOverride)) {
80
+ if (envOverride && isExecutable(envOverride) && isPlatformCompatibleBinary(envOverride)) {
81
81
  lastSearchPaths = [envOverride];
82
82
  return envOverride;
83
83
  }
@@ -175,7 +175,7 @@ function findRelayPtyBinary(callerDirname) {
175
175
  candidates.push("/usr/bin/relay-pty");
176
176
  lastSearchPaths = candidates;
177
177
  for (const candidate of candidates) {
178
- if (isExecutable(candidate)) {
178
+ if (isExecutable(candidate) && isPlatformCompatibleBinary(candidate)) {
179
179
  return candidate;
180
180
  }
181
181
  }
@@ -189,6 +189,43 @@ function isExecutable(filePath) {
189
189
  return false;
190
190
  }
191
191
  }
192
+ function isPlatformCompatibleBinary(filePath) {
193
+ let fd;
194
+ try {
195
+ fd = import_node_fs.default.openSync(filePath, "r");
196
+ const header = Buffer.alloc(4);
197
+ const bytesRead = import_node_fs.default.readSync(fd, header, 0, 4, 0);
198
+ if (bytesRead < 4) {
199
+ return false;
200
+ }
201
+ const magic = header.readUInt32BE(0);
202
+ const platform = import_node_os.default.platform();
203
+ if (platform === "darwin") {
204
+ return isMachOBinary(magic);
205
+ }
206
+ if (platform === "linux") {
207
+ return magic === 2135247942;
208
+ }
209
+ return true;
210
+ } catch {
211
+ return true;
212
+ } finally {
213
+ if (fd !== void 0) {
214
+ try {
215
+ import_node_fs.default.closeSync(fd);
216
+ } catch {
217
+ }
218
+ }
219
+ }
220
+ }
221
+ function isMachOBinary(magic) {
222
+ return magic === 3489328638 || // MH_CIGAM_64 — 64-bit, byte-swapped (arm64/x64 LE files read as BE)
223
+ magic === 4277009103 || // MH_MAGIC_64 — 64-bit, native byte order
224
+ magic === 3472551422 || // MH_CIGAM — 32-bit, byte-swapped
225
+ magic === 4277009102 || // MH_MAGIC — 32-bit, native byte order
226
+ magic === 3405691582 || // FAT_MAGIC — universal/fat binary
227
+ magic === 3199925962;
228
+ }
192
229
  function hasRelayPtyBinary(callerDirname) {
193
230
  if (!cacheChecked) {
194
231
  cachedBinaryPath = findRelayPtyBinary(callerDirname);
package/dist/index.d.ts CHANGED
@@ -6,6 +6,7 @@ export * from './git-remote.js';
6
6
  export * from './update-checker.js';
7
7
  export * from './error-tracking.js';
8
8
  export * from './model-mapping.js';
9
+ export * from './model-commands.js';
9
10
  export * from './relay-pty-path.js';
10
11
  export * from './client-helpers.js';
11
12
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,qBAAqB,CAAC;AACpC,cAAc,aAAa,CAAC;AAC5B,cAAc,2BAA2B,CAAC;AAC1C,cAAc,uBAAuB,CAAC;AACtC,cAAc,iBAAiB,CAAC;AAChC,cAAc,qBAAqB,CAAC;AACpC,cAAc,qBAAqB,CAAC;AACpC,cAAc,oBAAoB,CAAC;AACnC,cAAc,qBAAqB,CAAC;AACpC,cAAc,qBAAqB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,qBAAqB,CAAC;AACpC,cAAc,aAAa,CAAC;AAC5B,cAAc,2BAA2B,CAAC;AAC1C,cAAc,uBAAuB,CAAC;AACtC,cAAc,iBAAiB,CAAC;AAChC,cAAc,qBAAqB,CAAC;AACpC,cAAc,qBAAqB,CAAC;AACpC,cAAc,oBAAoB,CAAC;AACnC,cAAc,qBAAqB,CAAC;AACpC,cAAc,qBAAqB,CAAC;AACpC,cAAc,qBAAqB,CAAC"}
package/dist/index.js CHANGED
@@ -6,6 +6,7 @@ export * from './git-remote.js';
6
6
  export * from './update-checker.js';
7
7
  export * from './error-tracking.js';
8
8
  export * from './model-mapping.js';
9
+ export * from './model-commands.js';
9
10
  export * from './relay-pty-path.js';
10
11
  export * from './client-helpers.js';
11
12
  //# 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,qBAAqB,CAAC;AACpC,cAAc,aAAa,CAAC;AAC5B,cAAc,2BAA2B,CAAC;AAC1C,cAAc,uBAAuB,CAAC;AACtC,cAAc,iBAAiB,CAAC;AAChC,cAAc,qBAAqB,CAAC;AACpC,cAAc,qBAAqB,CAAC;AACpC,cAAc,oBAAoB,CAAC;AACnC,cAAc,qBAAqB,CAAC;AACpC,cAAc,qBAAqB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,qBAAqB,CAAC;AACpC,cAAc,aAAa,CAAC;AAC5B,cAAc,2BAA2B,CAAC;AAC1C,cAAc,uBAAuB,CAAC;AACtC,cAAc,iBAAiB,CAAC;AAChC,cAAc,qBAAqB,CAAC;AACpC,cAAc,qBAAqB,CAAC;AACpC,cAAc,oBAAoB,CAAC;AACnC,cAAc,qBAAqB,CAAC;AACpC,cAAc,qBAAqB,CAAC;AACpC,cAAc,qBAAqB,CAAC"}
@@ -0,0 +1,42 @@
1
+ /**
2
+ * Model Command Registry
3
+ *
4
+ * Maps CLI types to their mid-session model-switch commands.
5
+ * Used by the spawner to send model switch commands to running agents.
6
+ */
7
+ /**
8
+ * Model command configuration for a specific CLI type.
9
+ */
10
+ export interface ModelCommandConfig {
11
+ /** Whether this CLI supports mid-session model switching */
12
+ supported: boolean;
13
+ /** Function to generate the command string for switching to a given model */
14
+ buildCommand?: (model: string) => string;
15
+ /** Valid model names for this CLI */
16
+ validModels?: string[];
17
+ /** Normalize a model name to the CLI's expected format */
18
+ normalizeModel?: (model: string) => string;
19
+ }
20
+ /**
21
+ * Get the model command configuration for a CLI type.
22
+ */
23
+ export declare function getModelCommandConfig(cli: string): ModelCommandConfig;
24
+ /**
25
+ * Check if a CLI type supports mid-session model switching.
26
+ */
27
+ export declare function isModelSwitchSupported(cli: string): boolean;
28
+ /**
29
+ * Build the command string to switch models for a given CLI.
30
+ * Returns null if the CLI doesn't support model switching.
31
+ */
32
+ export declare function buildModelSwitchCommand(cli: string, model: string): string | null;
33
+ /**
34
+ * Validate a model name for a given CLI.
35
+ * Returns the normalized model name if valid.
36
+ */
37
+ export declare function validateModelForCli(cli: string, model: string): {
38
+ valid: boolean;
39
+ error?: string;
40
+ normalizedModel?: string;
41
+ };
42
+ //# sourceMappingURL=model-commands.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"model-commands.d.ts","sourceRoot":"","sources":["../src/model-commands.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,4DAA4D;IAC5D,SAAS,EAAE,OAAO,CAAC;IACnB,6EAA6E;IAC7E,YAAY,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,MAAM,CAAC;IACzC,qCAAqC;IACrC,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;IACvB,0DAA0D;IAC1D,cAAc,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,MAAM,CAAC;CAC5C;AAyCD;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,GAAG,EAAE,MAAM,GAAG,kBAAkB,CAGrE;AAED;;GAEG;AACH,wBAAgB,sBAAsB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAE3D;AAED;;;GAGG;AACH,wBAAgB,uBAAuB,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAQjF;AAED;;;GAGG;AACH,wBAAgB,mBAAmB,CACjC,GAAG,EAAE,MAAM,EACX,KAAK,EAAE,MAAM,GACZ;IAAE,KAAK,EAAE,OAAO,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,eAAe,CAAC,EAAE,MAAM,CAAA;CAAE,CAqB9D"}
@@ -0,0 +1,90 @@
1
+ /**
2
+ * Model Command Registry
3
+ *
4
+ * Maps CLI types to their mid-session model-switch commands.
5
+ * Used by the spawner to send model switch commands to running agents.
6
+ */
7
+ /** Model name aliases for Claude Code */
8
+ const CLAUDE_MODEL_ALIASES = {
9
+ 'claude-opus-4': 'opus',
10
+ 'claude-opus-4.5': 'opus',
11
+ 'claude-opus-4-6': 'opus',
12
+ 'claude-sonnet-4': 'sonnet',
13
+ 'claude-sonnet-4-5': 'sonnet',
14
+ 'claude-haiku-3.5': 'haiku',
15
+ 'claude-haiku-4.5': 'haiku',
16
+ };
17
+ const CLAUDE_VALID_MODELS = ['opus', 'sonnet', 'haiku'];
18
+ /**
19
+ * Registry of CLI model switch commands.
20
+ * Claude-first; other CLIs can be added as they gain support.
21
+ */
22
+ const CLI_MODEL_COMMANDS = {
23
+ claude: {
24
+ supported: true,
25
+ buildCommand: (model) => `/model ${model}\n`,
26
+ validModels: [
27
+ ...CLAUDE_VALID_MODELS,
28
+ ...Object.keys(CLAUDE_MODEL_ALIASES),
29
+ ],
30
+ normalizeModel: (model) => {
31
+ const normalized = model.trim().toLowerCase();
32
+ return CLAUDE_MODEL_ALIASES[normalized] ?? normalized;
33
+ },
34
+ },
35
+ codex: { supported: false },
36
+ gemini: { supported: false },
37
+ droid: { supported: false },
38
+ opencode: { supported: false },
39
+ aider: { supported: false },
40
+ goose: { supported: false },
41
+ cursor: { supported: false },
42
+ };
43
+ /**
44
+ * Get the model command configuration for a CLI type.
45
+ */
46
+ export function getModelCommandConfig(cli) {
47
+ const baseCli = cli.split(':')[0].toLowerCase();
48
+ return CLI_MODEL_COMMANDS[baseCli] ?? { supported: false };
49
+ }
50
+ /**
51
+ * Check if a CLI type supports mid-session model switching.
52
+ */
53
+ export function isModelSwitchSupported(cli) {
54
+ return getModelCommandConfig(cli).supported;
55
+ }
56
+ /**
57
+ * Build the command string to switch models for a given CLI.
58
+ * Returns null if the CLI doesn't support model switching.
59
+ */
60
+ export function buildModelSwitchCommand(cli, model) {
61
+ const config = getModelCommandConfig(cli);
62
+ if (!config.supported || !config.buildCommand) {
63
+ return null;
64
+ }
65
+ const normalizedModel = config.normalizeModel ? config.normalizeModel(model) : model;
66
+ return config.buildCommand(normalizedModel);
67
+ }
68
+ /**
69
+ * Validate a model name for a given CLI.
70
+ * Returns the normalized model name if valid.
71
+ */
72
+ export function validateModelForCli(cli, model) {
73
+ const config = getModelCommandConfig(cli);
74
+ if (!config.supported) {
75
+ return {
76
+ valid: false,
77
+ error: `CLI "${cli}" does not support mid-session model switching`,
78
+ };
79
+ }
80
+ const normalizedModel = config.normalizeModel ? config.normalizeModel(model) : model;
81
+ if (config.validModels && !config.validModels.includes(normalizedModel)) {
82
+ const displayModels = config.validModels.filter(m => !m.includes('-')); // Show short names only
83
+ return {
84
+ valid: false,
85
+ error: `Invalid model "${model}" for CLI "${cli}". Valid models: ${displayModels.join(', ')}`,
86
+ };
87
+ }
88
+ return { valid: true, normalizedModel };
89
+ }
90
+ //# sourceMappingURL=model-commands.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"model-commands.js","sourceRoot":"","sources":["../src/model-commands.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"relay-pty-path.d.ts","sourceRoot":"","sources":["../src/relay-pty-path.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAgCH;;GAEG;AACH,wBAAgB,mBAAmB,IAAI,OAAO,CAI7C;AAED;;GAEG;AACH,wBAAgB,qBAAqB,IAAI,MAAM,CAQ9C;AASD;;;GAGG;AACH,wBAAgB,kBAAkB,IAAI,MAAM,EAAE,CAE7C;AAED;;;;;;;;GAQG;AACH,wBAAgB,kBAAkB,CAAC,aAAa,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAsLvE;AAeD;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAAC,aAAa,EAAE,MAAM,GAAG,OAAO,CAMhE;AAED;;;GAGG;AACH,wBAAgB,qBAAqB,IAAI,MAAM,GAAG,IAAI,GAAG,SAAS,CAEjE;AAED;;GAEG;AACH,wBAAgB,gBAAgB,IAAI,IAAI,CAGvC"}
1
+ {"version":3,"file":"relay-pty-path.d.ts","sourceRoot":"","sources":["../src/relay-pty-path.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAgCH;;GAEG;AACH,wBAAgB,mBAAmB,IAAI,OAAO,CAI7C;AAED;;GAEG;AACH,wBAAgB,qBAAqB,IAAI,MAAM,CAQ9C;AASD;;;GAGG;AACH,wBAAgB,kBAAkB,IAAI,MAAM,EAAE,CAE7C;AAED;;;;;;;;GAQG;AACH,wBAAgB,kBAAkB,CAAC,aAAa,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAsLvE;AAoED;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAAC,aAAa,EAAE,MAAM,GAAG,OAAO,CAMhE;AAED;;;GAGG;AACH,wBAAgB,qBAAqB,IAAI,MAAM,GAAG,IAAI,GAAG,SAAS,CAEjE;AAED;;GAEG;AACH,wBAAgB,gBAAgB,IAAI,IAAI,CAGvC"}
@@ -83,7 +83,7 @@ export function getLastSearchPaths() {
83
83
  export function findRelayPtyBinary(callerDirname) {
84
84
  // Check for explicit environment variable override first
85
85
  const envOverride = process.env.RELAY_PTY_BINARY;
86
- if (envOverride && isExecutable(envOverride)) {
86
+ if (envOverride && isExecutable(envOverride) && isPlatformCompatibleBinary(envOverride)) {
87
87
  lastSearchPaths = [envOverride];
88
88
  return envOverride;
89
89
  }
@@ -211,7 +211,7 @@ export function findRelayPtyBinary(callerDirname) {
211
211
  // Store search paths for debugging
212
212
  lastSearchPaths = candidates;
213
213
  for (const candidate of candidates) {
214
- if (isExecutable(candidate)) {
214
+ if (isExecutable(candidate) && isPlatformCompatibleBinary(candidate)) {
215
215
  return candidate;
216
216
  }
217
217
  }
@@ -230,6 +230,58 @@ function isExecutable(filePath) {
230
230
  return false;
231
231
  }
232
232
  }
233
+ /**
234
+ * Check if a binary is compatible with the current platform by reading its magic bytes.
235
+ * Prevents using a macOS binary on Linux or vice versa, which would fail at runtime
236
+ * with cryptic errors like "Syntax error: word unexpected".
237
+ */
238
+ function isPlatformCompatibleBinary(filePath) {
239
+ let fd;
240
+ try {
241
+ fd = fs.openSync(filePath, 'r');
242
+ const header = Buffer.alloc(4);
243
+ const bytesRead = fs.readSync(fd, header, 0, 4, 0);
244
+ if (bytesRead < 4) {
245
+ return false; // Too small to be a valid binary
246
+ }
247
+ const magic = header.readUInt32BE(0);
248
+ const platform = os.platform();
249
+ if (platform === 'darwin') {
250
+ return isMachOBinary(magic);
251
+ }
252
+ if (platform === 'linux') {
253
+ // ELF magic: 0x7f 'E' 'L' 'F'
254
+ return magic === 0x7f454c46;
255
+ }
256
+ // Unknown platform — don't block
257
+ return true;
258
+ }
259
+ catch {
260
+ // Can't read file (e.g. execute-only permissions) — let execution attempt proceed
261
+ return true;
262
+ }
263
+ finally {
264
+ if (fd !== undefined) {
265
+ try {
266
+ fs.closeSync(fd);
267
+ }
268
+ catch { /* ignore close errors */ }
269
+ }
270
+ }
271
+ }
272
+ /**
273
+ * Check if a magic value corresponds to any valid Mach-O format.
274
+ * Handles all variants: 32/64-bit, native/byte-swapped, and fat/universal.
275
+ */
276
+ function isMachOBinary(magic) {
277
+ return (magic === 0xcffaedfe || // MH_CIGAM_64 — 64-bit, byte-swapped (arm64/x64 LE files read as BE)
278
+ magic === 0xfeedfacf || // MH_MAGIC_64 — 64-bit, native byte order
279
+ magic === 0xcefaedfe || // MH_CIGAM — 32-bit, byte-swapped
280
+ magic === 0xfeedface || // MH_MAGIC — 32-bit, native byte order
281
+ magic === 0xcafebabe || // FAT_MAGIC — universal/fat binary
282
+ magic === 0xbebafeca // FAT_CIGAM — universal/fat binary, byte-swapped
283
+ );
284
+ }
233
285
  /**
234
286
  * Check if relay-pty binary is available (cached).
235
287
  * Returns true if the binary exists, false otherwise.
@@ -1 +1 @@
1
- {"version":3,"file":"relay-pty-path.js","sourceRoot":"","sources":["../src/relay-pty-path.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"relay-pty-path.js","sourceRoot":"","sources":["../src/relay-pty-path.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;AAE7B;;;GAGG;AACH,MAAM,mBAAmB,GAA2C;IAClE,MAAM,EAAE;QACN,KAAK,EAAE,wBAAwB;QAC/B,GAAG,EAAE,sBAAsB;KAC5B;IACD,KAAK,EAAE;QACL,KAAK,EAAE,uBAAuB;QAC9B,GAAG,EAAE,qBAAqB;KAC3B;CACF,CAAC;AAEF;;;GAGG;AACH,SAAS,qBAAqB;IAC5B,MAAM,QAAQ,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC;IAC/B,MAAM,IAAI,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC;IAEvB,OAAO,mBAAmB,CAAC,QAAQ,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC;AACvD,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,mBAAmB;IACjC,MAAM,QAAQ,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC;IAC/B,MAAM,IAAI,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC;IACvB,OAAO,mBAAmB,CAAC,QAAQ,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,SAAS,CAAC;AAC7D,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,qBAAqB;IACnC,MAAM,SAAS,GAAa,EAAE,CAAC;IAC/B,KAAK,MAAM,CAAC,EAAE,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,mBAAmB,CAAC,EAAE,CAAC;QAC9D,KAAK,MAAM,IAAI,IAAI,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;YACtC,SAAS,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,IAAI,EAAE,CAAC,CAAC;QAClC,CAAC;IACH,CAAC;IACD,OAAO,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC9B,CAAC;AAED,8CAA8C;AAC9C,IAAI,gBAA2C,CAAC;AAChD,IAAI,YAAY,GAAG,KAAK,CAAC;AAEzB,kDAAkD;AAClD,IAAI,eAAe,GAAa,EAAE,CAAC;AAEnC;;;GAGG;AACH,MAAM,UAAU,kBAAkB;IAChC,OAAO,CAAC,GAAG,eAAe,CAAC,CAAC;AAC9B,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,UAAU,kBAAkB,CAAC,aAAqB;IACtD,yDAAyD;IACzD,MAAM,WAAW,GAAG,OAAO,CAAC,GAAG,CAAC,gBAAgB,CAAC;IACjD,IAAI,WAAW,IAAI,YAAY,CAAC,WAAW,CAAC,IAAI,0BAA0B,CAAC,WAAW,CAAC,EAAE,CAAC;QACxF,eAAe,GAAG,CAAC,WAAW,CAAC,CAAC;QAChC,OAAO,WAAW,CAAC;IACrB,CAAC;IAED,qFAAqF;IACrF,MAAM,cAAc,GAAG,qBAAqB,EAAE,CAAC;IAE/C,8DAA8D;IAC9D,MAAM,gBAAgB,GAAG,aAAa,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;IAE3D,8CAA8C;IAC9C,MAAM,YAAY,GAAa,EAAE,CAAC;IAElC,0CAA0C;IAC1C,2DAA2D;IAC3D,sDAAsD;IACtD,MAAM,WAAW,GAAG,gBAAgB,CAAC,KAAK,CAAC,sCAAsC,CAAC,CAAC;IACnF,MAAM,WAAW,GAAG,gBAAgB,CAAC,KAAK,CAAC,mCAAmC,CAAC,CAAC;IAEhF,IAAI,WAAW,EAAE,CAAC;QAChB,iFAAiF;QACjF,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,aAAa,CAAC,CAAC,CAAC;IAC9D,CAAC;IAED,IAAI,WAAW,EAAE,CAAC;QAChB,4CAA4C;QAC5C,YAAY,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC;IACpC,CAAC;IAED,wDAAwD;IACxD,IAAI,CAAC,gBAAgB,CAAC,QAAQ,CAAC,cAAc,CAAC,EAAE,CAAC;QAC/C,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC;IAChE,CAAC;IAED,MAAM,IAAI,GAAG,OAAO,CAAC,GAAG,CAAC,IAAI,IAAI,OAAO,CAAC,GAAG,CAAC,WAAW,IAAI,EAAE,CAAC;IAE/D,sEAAsE;IACtE,IAAI,IAAI,EAAE,CAAC;QACT,MAAM,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;QACrD,IAAI,EAAE,CAAC,UAAU,CAAC,YAAY,CAAC,EAAE,CAAC;YAChC,IAAI,CAAC;gBACH,MAAM,OAAO,GAAG,EAAE,CAAC,WAAW,CAAC,YAAY,CAAC,CAAC;gBAC7C,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;oBAC5B,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,KAAK,EAAE,cAAc,EAAE,aAAa,CAAC,CAAC;oBACjF,IAAI,EAAE,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;wBAC9B,YAAY,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;oBAChC,CAAC;gBACH,CAAC;YACH,CAAC;YAAC,MAAM,CAAC;gBACP,qBAAqB;YACvB,CAAC;QACH,CAAC;IACH,CAAC;IAED,yCAAyC;IACzC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,cAAc,EAAE,aAAa,CAAC,CAAC,CAAC;IAE3E,qEAAqE;IACrE,IAAI,IAAI,EAAE,CAAC;QACT,oBAAoB;QACpB,YAAY,CAAC,IAAI,CACf,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,OAAO,CAAC,OAAO,EAAE,KAAK,EAAE,cAAc,EAAE,aAAa,CAAC,CACnG,CAAC;QAEF,+BAA+B;QAC/B,YAAY,CAAC,IAAI,CACf,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,aAAa,EAAE,KAAK,EAAE,cAAc,EAAE,aAAa,CAAC,CAC7G,CAAC;QAEF,0BAA0B;QAC1B,YAAY,CAAC,IAAI,CACf,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,eAAe,EAAE,OAAO,CAAC,OAAO,EAAE,cAAc,EAAE,KAAK,EAAE,cAAc,EAAE,aAAa,CAAC,CAChH,CAAC;QAEF,kCAAkC;QAClC,YAAY,CAAC,IAAI,CACf,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,GAAG,EAAE,KAAK,EAAE,cAAc,EAAE,aAAa,CAAC,CAC3D,CAAC;QAEF,mCAAmC;QACnC,YAAY,CAAC,IAAI,CACf,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,cAAc,EAAE,aAAa,CAAC,CACvH,CAAC;QAEF,cAAc;QACd,YAAY,CAAC,IAAI,CACf,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,cAAc,EAAE,aAAa,CAAC,CACpF,CAAC;QAEF,yBAAyB;QACzB,YAAY,CAAC,IAAI,CACf,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,cAAc,EAAE,aAAa,CAAC,CAC5E,CAAC;QAEF,qCAAqC;QACrC,YAAY,CAAC,IAAI,CACf,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,OAAO,EAAE,QAAQ,EAAE,cAAc,EAAE,aAAa,CAAC,CAClE,CAAC;IACJ,CAAC;IAED,wDAAwD;IACxD,gFAAgF;IAChF,MAAM,gBAAgB,GAAG,OAAO,CAAC,GAAG,CAAC,uBAAuB;QAC1D,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,uBAAuB,EAAE,KAAK,CAAC;QACvD,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,cAAc,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IACzD,MAAM,mBAAmB,GAAG,OAAO,CAAC,GAAG,CAAC,mBAAmB;WACtD,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,QAAQ,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;IAEtD,yEAAyE;IACzE,mEAAmE;IACnE,4EAA4E;IAC5E,oFAAoF;IACpF,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,IAAI,CAAC,CAAC;IACtE,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,KAAK,EAAE,cAAc,EAAE,aAAa,CAAC,CAAC,CAAC;IAE/E,uBAAuB;IACvB,YAAY,CAAC,IAAI,CAAC,yCAAyC,CAAC,CAAC;IAC7D,YAAY,CAAC,IAAI,CAAC,4CAA4C,CAAC,CAAC;IAEhE,wBAAwB;IACxB,YAAY,CAAC,IAAI,CAAC,mCAAmC,CAAC,CAAC;IAEvD,gEAAgE;IAChE,yDAAyD;IACzD,MAAM,UAAU,GAAa,EAAE,CAAC;IAEhC,KAAK,MAAM,IAAI,IAAI,YAAY,EAAE,CAAC;QAChC,6DAA6D;QAC7D,IAAI,cAAc,EAAE,CAAC;YACnB,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,KAAK,EAAE,cAAc,CAAC,CAAC,CAAC;QAC1D,CAAC;QACD,oDAAoD;QACpD,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,KAAK,EAAE,WAAW,CAAC,CAAC,CAAC;IACvD,CAAC;IAED,iCAAiC;IACjC,MAAM,OAAO,GAAG,gBAAgB,CAAC,QAAQ,CAAC,cAAc,CAAC;QACvD,CAAC,CAAC,IAAI;QACN,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;IAC/C,IAAI,OAAO,EAAE,CAAC;QACZ,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,WAAW,EAAE,QAAQ,EAAE,SAAS,EAAE,WAAW,CAAC,CAAC,CAAC;QACnF,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,WAAW,EAAE,QAAQ,EAAE,OAAO,EAAE,WAAW,CAAC,CAAC,CAAC;IACnF,CAAC;IACD,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,WAAW,EAAE,QAAQ,EAAE,SAAS,EAAE,WAAW,CAAC,CAAC,CAAC;IAEzF,oDAAoD;IACpD,iEAAiE;IACjE,IAAI,gBAAgB,EAAE,CAAC;QACrB,IAAI,cAAc,EAAE,CAAC;YACnB,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,gBAAgB,EAAE,cAAc,CAAC,CAAC,CAAC;QAC/D,CAAC;QACD,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,gBAAgB,EAAE,WAAW,CAAC,CAAC,CAAC;IAC5D,CAAC;IACD,mDAAmD;IACnD,IAAI,mBAAmB,EAAE,CAAC;QACxB,IAAI,cAAc,EAAE,CAAC;YACnB,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,mBAAmB,EAAE,cAAc,CAAC,CAAC,CAAC;QAClE,CAAC;QACD,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,mBAAmB,EAAE,WAAW,CAAC,CAAC,CAAC;IAC/D,CAAC;IAED,8BAA8B;IAC9B,UAAU,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAC;IAEtC,uBAAuB;IACvB,UAAU,CAAC,IAAI,CAAC,0BAA0B,CAAC,CAAC;IAC5C,UAAU,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAC;IAEtC,mCAAmC;IACnC,eAAe,GAAG,UAAU,CAAC;IAE7B,KAAK,MAAM,SAAS,IAAI,UAAU,EAAE,CAAC;QACnC,IAAI,YAAY,CAAC,SAAS,CAAC,IAAI,0BAA0B,CAAC,SAAS,CAAC,EAAE,CAAC;YACrE,OAAO,SAAS,CAAC;QACnB,CAAC;IACH,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;GAEG;AACH,SAAS,YAAY,CAAC,QAAgB;IACpC,IAAI,CAAC;QACH,EAAE,CAAC,UAAU,CAAC,QAAQ,EAAE,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;QAC3C,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,MAAM,CAAC;QACP,yCAAyC;QACzC,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAED;;;;GAIG;AACH,SAAS,0BAA0B,CAAC,QAAgB;IAClD,IAAI,EAAsB,CAAC;IAC3B,IAAI,CAAC;QACH,EAAE,GAAG,EAAE,CAAC,QAAQ,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC;QAChC,MAAM,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QAC/B,MAAM,SAAS,GAAG,EAAE,CAAC,QAAQ,CAAC,EAAE,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;QACnD,IAAI,SAAS,GAAG,CAAC,EAAE,CAAC;YAClB,OAAO,KAAK,CAAC,CAAC,iCAAiC;QACjD,CAAC;QAED,MAAM,KAAK,GAAG,MAAM,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;QACrC,MAAM,QAAQ,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC;QAE/B,IAAI,QAAQ,KAAK,QAAQ,EAAE,CAAC;YAC1B,OAAO,aAAa,CAAC,KAAK,CAAC,CAAC;QAC9B,CAAC;QACD,IAAI,QAAQ,KAAK,OAAO,EAAE,CAAC;YACzB,8BAA8B;YAC9B,OAAO,KAAK,KAAK,UAAU,CAAC;QAC9B,CAAC;QAED,iCAAiC;QACjC,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,MAAM,CAAC;QACP,kFAAkF;QAClF,OAAO,IAAI,CAAC;IACd,CAAC;YAAS,CAAC;QACT,IAAI,EAAE,KAAK,SAAS,EAAE,CAAC;YACrB,IAAI,CAAC;gBAAC,EAAE,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC;YAAC,CAAC;YAAC,MAAM,CAAC,CAAC,yBAAyB,CAAC,CAAC;QAC/D,CAAC;IACH,CAAC;AACH,CAAC;AAED;;;GAGG;AACH,SAAS,aAAa,CAAC,KAAa;IAClC,OAAO,CACL,KAAK,KAAK,UAAU,IAAI,qEAAqE;QAC7F,KAAK,KAAK,UAAU,IAAI,0CAA0C;QAClE,KAAK,KAAK,UAAU,IAAI,qCAAqC;QAC7D,KAAK,KAAK,UAAU,IAAI,0CAA0C;QAClE,KAAK,KAAK,UAAU,IAAI,qCAAqC;QAC7D,KAAK,KAAK,UAAU,CAAI,mDAAmD;KAC5E,CAAC;AACJ,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,iBAAiB,CAAC,aAAqB;IACrD,IAAI,CAAC,YAAY,EAAE,CAAC;QAClB,gBAAgB,GAAG,kBAAkB,CAAC,aAAa,CAAC,CAAC;QACrD,YAAY,GAAG,IAAI,CAAC;IACtB,CAAC;IACD,OAAO,gBAAgB,KAAK,IAAI,CAAC;AACnC,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,qBAAqB;IACnC,OAAO,gBAAgB,CAAC;AAC1B,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,gBAAgB;IAC9B,gBAAgB,GAAG,SAAS,CAAC;IAC7B,YAAY,GAAG,KAAK,CAAC;AACvB,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@agent-relay/utils",
3
- "version": "2.1.21",
3
+ "version": "2.1.23-beta.0",
4
4
  "description": "Shared utilities for agent-relay: logging, name generation, command resolution, update checking",
5
5
  "type": "module",
6
6
  "main": "dist/cjs/index.js",
@@ -60,6 +60,12 @@
60
60
  "import": "./dist/model-mapping.js",
61
61
  "default": "./dist/cjs/model-mapping.js"
62
62
  },
63
+ "./model-commands": {
64
+ "types": "./dist/model-commands.d.ts",
65
+ "require": "./dist/cjs/model-commands.js",
66
+ "import": "./dist/model-commands.js",
67
+ "default": "./dist/cjs/model-commands.js"
68
+ },
63
69
  "./relay-pty-path": {
64
70
  "types": "./dist/relay-pty-path.d.ts",
65
71
  "require": "./dist/cjs/relay-pty-path.js",
@@ -106,8 +112,8 @@
106
112
  "vitest": "^3.2.4"
107
113
  },
108
114
  "dependencies": {
109
- "@agent-relay/config": "2.1.21",
110
- "@agent-relay/protocol": "2.1.21",
115
+ "@agent-relay/config": "2.1.23-beta.0",
116
+ "@agent-relay/protocol": "2.1.23-beta.0",
111
117
  "compare-versions": "^6.1.1"
112
118
  },
113
119
  "publishConfig": {