agent-relay 2.0.37 → 2.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (88) hide show
  1. package/dist/index.cjs +32003 -33977
  2. package/dist/src/cli/index.js +36 -51
  3. package/dist/src/cli/index.js.map +1 -1
  4. package/package.json +18 -19
  5. package/packages/api-types/package.json +1 -1
  6. package/packages/benchmark/package.json +4 -4
  7. package/packages/bridge/package.json +8 -8
  8. package/packages/cli-tester/package.json +1 -1
  9. package/packages/config/dist/project-namespace.d.ts +28 -0
  10. package/packages/config/dist/project-namespace.d.ts.map +1 -1
  11. package/packages/config/dist/project-namespace.js +42 -0
  12. package/packages/config/dist/project-namespace.js.map +1 -1
  13. package/packages/config/package.json +2 -2
  14. package/packages/config/src/project-namespace.ts +65 -0
  15. package/packages/continuity/dist/formatter.d.ts +8 -2
  16. package/packages/continuity/dist/formatter.d.ts.map +1 -1
  17. package/packages/continuity/dist/formatter.js +142 -7
  18. package/packages/continuity/dist/formatter.js.map +1 -1
  19. package/packages/continuity/dist/index.d.ts +1 -0
  20. package/packages/continuity/dist/index.d.ts.map +1 -1
  21. package/packages/continuity/dist/index.js +2 -0
  22. package/packages/continuity/dist/index.js.map +1 -1
  23. package/packages/continuity/package.json +4 -1
  24. package/packages/continuity/src/formatter.ts +175 -10
  25. package/packages/continuity/src/index.ts +3 -0
  26. package/packages/daemon/dist/enhanced-features.d.ts +2 -3
  27. package/packages/daemon/dist/enhanced-features.d.ts.map +1 -1
  28. package/packages/daemon/dist/enhanced-features.js +1 -0
  29. package/packages/daemon/dist/enhanced-features.js.map +1 -1
  30. package/packages/daemon/dist/index.d.ts +0 -2
  31. package/packages/daemon/dist/index.d.ts.map +1 -1
  32. package/packages/daemon/dist/index.js +0 -3
  33. package/packages/daemon/dist/index.js.map +1 -1
  34. package/packages/daemon/dist/server.d.ts +0 -6
  35. package/packages/daemon/dist/server.d.ts.map +1 -1
  36. package/packages/daemon/dist/server.js +20 -119
  37. package/packages/daemon/dist/server.js.map +1 -1
  38. package/packages/daemon/package.json +12 -14
  39. package/packages/daemon/src/enhanced-features.ts +4 -4
  40. package/packages/daemon/src/index.ts +0 -4
  41. package/packages/daemon/src/server.ts +19 -127
  42. package/packages/daemon/vitest.config.ts +9 -0
  43. package/packages/hooks/package.json +4 -4
  44. package/packages/mcp/package.json +3 -3
  45. package/packages/memory/package.json +2 -2
  46. package/packages/policy/package.json +2 -2
  47. package/packages/protocol/package.json +1 -1
  48. package/packages/resiliency/package.json +1 -1
  49. package/packages/sdk/package.json +2 -2
  50. package/packages/spawner/package.json +1 -1
  51. package/packages/state/package.json +1 -1
  52. package/packages/storage/dist/adapter.d.ts +5 -5
  53. package/packages/storage/dist/adapter.js +9 -9
  54. package/packages/storage/dist/adapter.js.map +1 -1
  55. package/packages/storage/package.json +2 -2
  56. package/packages/storage/src/adapter.ts +9 -9
  57. package/packages/telemetry/package.json +1 -1
  58. package/packages/trajectory/package.json +2 -2
  59. package/packages/user-directory/package.json +2 -2
  60. package/packages/utils/dist/cjs/relay-pty-path.js +111 -55
  61. package/packages/utils/dist/relay-pty-path.d.ts +17 -12
  62. package/packages/utils/dist/relay-pty-path.d.ts.map +1 -1
  63. package/packages/utils/dist/relay-pty-path.js +144 -94
  64. package/packages/utils/dist/relay-pty-path.js.map +1 -1
  65. package/packages/utils/package.json +2 -2
  66. package/packages/utils/src/relay-pty-path.test.ts +373 -0
  67. package/packages/utils/src/relay-pty-path.ts +182 -91
  68. package/packages/wrapper/package.json +6 -6
  69. package/scripts/build-cjs.mjs +2 -0
  70. package/packages/daemon/dist/migrations/index.d.ts +0 -73
  71. package/packages/daemon/dist/migrations/index.d.ts.map +0 -1
  72. package/packages/daemon/dist/migrations/index.js +0 -241
  73. package/packages/daemon/dist/migrations/index.js.map +0 -1
  74. package/packages/daemon/dist/relay-ledger.d.ts +0 -263
  75. package/packages/daemon/dist/relay-ledger.d.ts.map +0 -1
  76. package/packages/daemon/dist/relay-ledger.js +0 -538
  77. package/packages/daemon/dist/relay-ledger.js.map +0 -1
  78. package/packages/daemon/dist/relay-watchdog.d.ts +0 -125
  79. package/packages/daemon/dist/relay-watchdog.d.ts.map +0 -1
  80. package/packages/daemon/dist/relay-watchdog.js +0 -611
  81. package/packages/daemon/dist/relay-watchdog.js.map +0 -1
  82. package/packages/daemon/src/migrations/0001_initial.sql +0 -72
  83. package/packages/daemon/src/migrations/index.test.ts +0 -195
  84. package/packages/daemon/src/migrations/index.ts +0 -286
  85. package/packages/daemon/src/relay-ledger.test.ts +0 -358
  86. package/packages/daemon/src/relay-ledger.ts +0 -713
  87. package/packages/daemon/src/relay-watchdog.test.ts +0 -881
  88. package/packages/daemon/src/relay-watchdog.ts +0 -785
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@agent-relay/sdk",
3
- "version": "2.0.37",
3
+ "version": "2.1.1",
4
4
  "description": "Lightweight SDK for agent-to-agent communication via Agent Relay",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",
@@ -55,7 +55,7 @@
55
55
  "access": "public"
56
56
  },
57
57
  "dependencies": {
58
- "@agent-relay/protocol": "2.0.37"
58
+ "@agent-relay/protocol": "2.1.1"
59
59
  },
60
60
  "engines": {
61
61
  "node": ">=18.0.0"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@agent-relay/spawner",
3
- "version": "2.0.37",
3
+ "version": "2.1.1",
4
4
  "description": "Agent spawning types and utilities for Agent Relay",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@agent-relay/state",
3
- "version": "2.0.37",
3
+ "version": "2.1.1",
4
4
  "description": "Agent state persistence for non-hook CLIs (Codex, Gemini, etc.)",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",
@@ -169,17 +169,17 @@ export declare function getStorageConfigFromEnv(): StorageConfig;
169
169
  * Configuration priority:
170
170
  * 1. Explicit config passed to function
171
171
  * 2. Environment variables (AGENT_RELAY_STORAGE_TYPE, AGENT_RELAY_STORAGE_PATH, AGENT_RELAY_STORAGE_URL)
172
- * 3. Default: SQLite at provided dbPath
172
+ * 3. Default: JSONL (no native dependencies)
173
173
  *
174
174
  * Fallback strategy:
175
- * - Prefer SQLite (or batched SQLite when requested)
176
- * - On SQLite failure, try JSONL append-only storage before dropping to in-memory
175
+ * - Default to JSONL (no native dependencies required)
176
+ * - SQLite available via --storage=sqlite flag (requires better-sqlite3 or Node 22+)
177
177
  * - If all durable adapters fail, keep daemon running via memory (non-persistent) with guidance
178
178
  *
179
179
  * Supported storage types:
180
- * - 'sqlite' (default): SQLite file-based storage
180
+ * - 'jsonl' (default): Append-only JSONL files (no native deps)
181
+ * - 'sqlite': SQLite file-based storage (requires better-sqlite3 or Node 22+)
181
182
  * - 'sqlite-batched': SQLite with buffered writes
182
- * - 'jsonl': Append-only JSONL files (durable fallback)
183
183
  * - 'none' or 'memory': In-memory storage (no persistence)
184
184
  * - 'postgres': PostgreSQL (requires AGENT_RELAY_STORAGE_URL) - future
185
185
  */
@@ -133,17 +133,17 @@ export function getStorageConfigFromEnv() {
133
133
  * Configuration priority:
134
134
  * 1. Explicit config passed to function
135
135
  * 2. Environment variables (AGENT_RELAY_STORAGE_TYPE, AGENT_RELAY_STORAGE_PATH, AGENT_RELAY_STORAGE_URL)
136
- * 3. Default: SQLite at provided dbPath
136
+ * 3. Default: JSONL (no native dependencies)
137
137
  *
138
138
  * Fallback strategy:
139
- * - Prefer SQLite (or batched SQLite when requested)
140
- * - On SQLite failure, try JSONL append-only storage before dropping to in-memory
139
+ * - Default to JSONL (no native dependencies required)
140
+ * - SQLite available via --storage=sqlite flag (requires better-sqlite3 or Node 22+)
141
141
  * - If all durable adapters fail, keep daemon running via memory (non-persistent) with guidance
142
142
  *
143
143
  * Supported storage types:
144
- * - 'sqlite' (default): SQLite file-based storage
144
+ * - 'jsonl' (default): Append-only JSONL files (no native deps)
145
+ * - 'sqlite': SQLite file-based storage (requires better-sqlite3 or Node 22+)
145
146
  * - 'sqlite-batched': SQLite with buffered writes
146
- * - 'jsonl': Append-only JSONL files (durable fallback)
147
147
  * - 'none' or 'memory': In-memory storage (no persistence)
148
148
  * - 'postgres': PostgreSQL (requires AGENT_RELAY_STORAGE_URL) - future
149
149
  */
@@ -151,7 +151,7 @@ export async function createStorageAdapter(dbPath, config) {
151
151
  // Merge with env config, explicit config takes priority
152
152
  const envConfig = getStorageConfigFromEnv();
153
153
  const finalConfig = {
154
- type: config?.type ?? envConfig.type ?? 'sqlite',
154
+ type: config?.type ?? envConfig.type ?? 'jsonl',
155
155
  path: config?.path ?? envConfig.path ?? dbPath,
156
156
  url: config?.url ?? envConfig.url,
157
157
  };
@@ -159,7 +159,7 @@ export async function createStorageAdapter(dbPath, config) {
159
159
  switch (storageType) {
160
160
  case 'none':
161
161
  case 'memory': {
162
- console.log('[storage] Using in-memory storage (no persistence)');
162
+ console.error('[storage] Using in-memory storage (no persistence)');
163
163
  const adapter = new MemoryStorageAdapter();
164
164
  await adapter.init();
165
165
  return adapter;
@@ -175,7 +175,7 @@ export async function createStorageAdapter(dbPath, config) {
175
175
  case 'sqlite-batched':
176
176
  case 'batched': {
177
177
  try {
178
- console.log('[storage] Using batched SQLite storage');
178
+ console.error('[storage] Using batched SQLite storage');
179
179
  const { BatchedSqliteAdapter } = await import('./batched-sqlite-adapter.js');
180
180
  const adapter = new BatchedSqliteAdapter({
181
181
  dbPath: finalConfig.path,
@@ -215,7 +215,7 @@ export async function createStorageAdapter(dbPath, config) {
215
215
  case 'jsonl': {
216
216
  const { JsonlStorageAdapter } = await import('./jsonl-adapter.js');
217
217
  const baseDir = path.dirname(finalConfig.path);
218
- console.log('[storage] Using JSONL storage');
218
+ console.error('[storage] Using JSONL storage');
219
219
  const adapter = new JsonlStorageAdapter({ baseDir });
220
220
  await adapter.init();
221
221
  return adapter;
@@ -1 +1 @@
1
- {"version":3,"file":"adapter.js","sourceRoot":"","sources":["../src/adapter.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"adapter.js","sourceRoot":"","sources":["../src/adapter.ts"],"names":[],"mappings":"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"}
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@agent-relay/storage",
3
- "version": "2.0.37",
3
+ "version": "2.1.1",
4
4
  "description": "Storage adapters and interfaces for Relay message/session persistence",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",
@@ -56,7 +56,7 @@
56
56
  }
57
57
  },
58
58
  "dependencies": {
59
- "@agent-relay/protocol": "2.0.37"
59
+ "@agent-relay/protocol": "2.1.1"
60
60
  },
61
61
  "devDependencies": {
62
62
  "@types/node": "^22.19.3",
@@ -298,17 +298,17 @@ export function getStorageConfigFromEnv(): StorageConfig {
298
298
  * Configuration priority:
299
299
  * 1. Explicit config passed to function
300
300
  * 2. Environment variables (AGENT_RELAY_STORAGE_TYPE, AGENT_RELAY_STORAGE_PATH, AGENT_RELAY_STORAGE_URL)
301
- * 3. Default: SQLite at provided dbPath
301
+ * 3. Default: JSONL (no native dependencies)
302
302
  *
303
303
  * Fallback strategy:
304
- * - Prefer SQLite (or batched SQLite when requested)
305
- * - On SQLite failure, try JSONL append-only storage before dropping to in-memory
304
+ * - Default to JSONL (no native dependencies required)
305
+ * - SQLite available via --storage=sqlite flag (requires better-sqlite3 or Node 22+)
306
306
  * - If all durable adapters fail, keep daemon running via memory (non-persistent) with guidance
307
307
  *
308
308
  * Supported storage types:
309
- * - 'sqlite' (default): SQLite file-based storage
309
+ * - 'jsonl' (default): Append-only JSONL files (no native deps)
310
+ * - 'sqlite': SQLite file-based storage (requires better-sqlite3 or Node 22+)
310
311
  * - 'sqlite-batched': SQLite with buffered writes
311
- * - 'jsonl': Append-only JSONL files (durable fallback)
312
312
  * - 'none' or 'memory': In-memory storage (no persistence)
313
313
  * - 'postgres': PostgreSQL (requires AGENT_RELAY_STORAGE_URL) - future
314
314
  */
@@ -319,7 +319,7 @@ export async function createStorageAdapter(
319
319
  // Merge with env config, explicit config takes priority
320
320
  const envConfig = getStorageConfigFromEnv();
321
321
  const finalConfig: StorageConfig = {
322
- type: config?.type ?? envConfig.type ?? 'sqlite',
322
+ type: config?.type ?? envConfig.type ?? 'jsonl',
323
323
  path: config?.path ?? envConfig.path ?? dbPath,
324
324
  url: config?.url ?? envConfig.url,
325
325
  };
@@ -329,7 +329,7 @@ export async function createStorageAdapter(
329
329
  switch (storageType) {
330
330
  case 'none':
331
331
  case 'memory': {
332
- console.log('[storage] Using in-memory storage (no persistence)');
332
+ console.error('[storage] Using in-memory storage (no persistence)');
333
333
  const adapter = new MemoryStorageAdapter();
334
334
  await adapter.init();
335
335
  return adapter;
@@ -351,7 +351,7 @@ export async function createStorageAdapter(
351
351
  case 'sqlite-batched':
352
352
  case 'batched': {
353
353
  try {
354
- console.log('[storage] Using batched SQLite storage');
354
+ console.error('[storage] Using batched SQLite storage');
355
355
  const { BatchedSqliteAdapter } = await import('./batched-sqlite-adapter.js');
356
356
  const adapter = new BatchedSqliteAdapter({
357
357
  dbPath: finalConfig.path!,
@@ -392,7 +392,7 @@ export async function createStorageAdapter(
392
392
  case 'jsonl': {
393
393
  const { JsonlStorageAdapter } = await import('./jsonl-adapter.js');
394
394
  const baseDir = path.dirname(finalConfig.path!);
395
- console.log('[storage] Using JSONL storage');
395
+ console.error('[storage] Using JSONL storage');
396
396
  const adapter = new JsonlStorageAdapter({ baseDir });
397
397
  await adapter.init();
398
398
  return adapter;
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@agent-relay/telemetry",
3
- "version": "2.0.37",
3
+ "version": "2.1.1",
4
4
  "description": "Anonymous telemetry for Agent Relay usage analytics",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@agent-relay/trajectory",
3
- "version": "2.0.37",
3
+ "version": "2.1.1",
4
4
  "description": "Trajectory integration utilities (trail/PDERO) for Relay",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",
@@ -22,7 +22,7 @@
22
22
  "test:watch": "vitest"
23
23
  },
24
24
  "dependencies": {
25
- "@agent-relay/config": "2.0.37"
25
+ "@agent-relay/config": "2.1.1"
26
26
  },
27
27
  "devDependencies": {
28
28
  "@types/node": "^22.19.3",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@agent-relay/user-directory",
3
- "version": "2.0.37",
3
+ "version": "2.1.1",
4
4
  "description": "User directory service for agent-relay (per-user credential storage)",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",
@@ -22,7 +22,7 @@
22
22
  "test:watch": "vitest"
23
23
  },
24
24
  "dependencies": {
25
- "@agent-relay/resiliency": "2.0.37"
25
+ "@agent-relay/resiliency": "2.1.1"
26
26
  },
27
27
  "devDependencies": {
28
28
  "@types/node": "^22.19.3",
@@ -32,20 +32,42 @@ __export(relay_pty_path_exports, {
32
32
  findRelayPtyBinary: () => findRelayPtyBinary,
33
33
  getCachedRelayPtyPath: () => getCachedRelayPtyPath,
34
34
  getLastSearchPaths: () => getLastSearchPaths,
35
- hasRelayPtyBinary: () => hasRelayPtyBinary
35
+ getSupportedPlatforms: () => getSupportedPlatforms,
36
+ hasRelayPtyBinary: () => hasRelayPtyBinary,
37
+ isPlatformSupported: () => isPlatformSupported
36
38
  });
37
39
  module.exports = __toCommonJS(relay_pty_path_exports);
38
40
  var import_node_fs = __toESM(require("node:fs"), 1);
39
41
  var import_node_os = __toESM(require("node:os"), 1);
40
42
  var import_node_path = __toESM(require("node:path"), 1);
43
+ const SUPPORTED_PLATFORMS = {
44
+ darwin: {
45
+ arm64: "relay-pty-darwin-arm64",
46
+ x64: "relay-pty-darwin-x64"
47
+ },
48
+ linux: {
49
+ arm64: "relay-pty-linux-arm64",
50
+ x64: "relay-pty-linux-x64"
51
+ }
52
+ };
41
53
  function getPlatformBinaryName() {
42
54
  const platform = import_node_os.default.platform();
43
55
  const arch = import_node_os.default.arch();
44
- if (platform === "darwin" && arch === "arm64") return "relay-pty-darwin-arm64";
45
- if (platform === "darwin" && arch === "x64") return "relay-pty-darwin-x64";
46
- if (platform === "linux" && arch === "arm64") return "relay-pty-linux-arm64";
47
- if (platform === "linux" && arch === "x64") return "relay-pty-linux-x64";
48
- return null;
56
+ return SUPPORTED_PLATFORMS[platform]?.[arch] ?? null;
57
+ }
58
+ function isPlatformSupported() {
59
+ const platform = import_node_os.default.platform();
60
+ const arch = import_node_os.default.arch();
61
+ return SUPPORTED_PLATFORMS[platform]?.[arch] !== void 0;
62
+ }
63
+ function getSupportedPlatforms() {
64
+ const platforms = [];
65
+ for (const [os2, archs] of Object.entries(SUPPORTED_PLATFORMS)) {
66
+ for (const arch of Object.keys(archs)) {
67
+ platforms.push(`${os2}-${arch}`);
68
+ }
69
+ }
70
+ return platforms.join(", ");
49
71
  }
50
72
  let cachedBinaryPath;
51
73
  let cacheChecked = false;
@@ -55,70 +77,102 @@ function getLastSearchPaths() {
55
77
  }
56
78
  function findRelayPtyBinary(callerDirname) {
57
79
  const envOverride = process.env.RELAY_PTY_BINARY;
58
- if (envOverride && import_node_fs.default.existsSync(envOverride)) {
80
+ if (envOverride && isExecutable(envOverride)) {
59
81
  lastSearchPaths = [envOverride];
60
82
  return envOverride;
61
83
  }
62
- let packageRoot;
63
- if (callerDirname.includes("node_modules/@agent-relay/")) {
64
- packageRoot = import_node_path.default.join(callerDirname, "..", "..", "..", "..");
65
- } else if (callerDirname.includes("node_modules/agent-relay")) {
66
- packageRoot = import_node_path.default.join(callerDirname, "..", "..", "..");
67
- } else {
68
- packageRoot = import_node_path.default.join(callerDirname, "..", "..", "..");
69
- }
70
- let nodeModulesRoot = null;
71
- const nodeModulesMatch = callerDirname.match(/^(.+?\/node_modules)\/@agent-relay\//);
72
- if (nodeModulesMatch) {
73
- nodeModulesRoot = nodeModulesMatch[1];
74
- }
75
84
  const platformBinary = getPlatformBinaryName();
76
- const candidates = [
77
- // Primary: installed by postinstall from platform-specific binary
78
- import_node_path.default.join(packageRoot, "bin", "relay-pty"),
79
- // Development: local Rust build
80
- import_node_path.default.join(packageRoot, "relay-pty", "target", "release", "relay-pty"),
81
- import_node_path.default.join(packageRoot, "relay-pty", "target", "debug", "relay-pty"),
82
- // Local build in cwd (for development)
83
- import_node_path.default.join(process.cwd(), "relay-pty", "target", "release", "relay-pty"),
84
- // Docker container (CI tests)
85
- "/app/bin/relay-pty",
86
- // Installed globally
87
- "/usr/local/bin/relay-pty",
88
- // In node_modules (when installed as local dependency)
89
- import_node_path.default.join(process.cwd(), "node_modules", "agent-relay", "bin", "relay-pty"),
90
- // Global npm install (nvm) - root package
91
- import_node_path.default.join(process.env.HOME || "", ".nvm", "versions", "node", process.version, "lib", "node_modules", "agent-relay", "bin", "relay-pty")
92
- ];
93
- if (nodeModulesRoot) {
94
- candidates.push(import_node_path.default.join(nodeModulesRoot, "agent-relay", "bin", "relay-pty"));
85
+ const normalizedCaller = callerDirname.replace(/\\/g, "/");
86
+ const packageRoots = [];
87
+ const scopedMatch = normalizedCaller.match(/^(.+?\/node_modules)\/@agent-relay\//);
88
+ const directMatch = normalizedCaller.match(/^(.+?\/node_modules\/agent-relay)/);
89
+ if (scopedMatch) {
90
+ packageRoots.push(import_node_path.default.join(scopedMatch[1], "agent-relay"));
95
91
  }
96
- if (process.env.HOME) {
97
- candidates.push(import_node_path.default.join("/usr/local/lib/node_modules", "agent-relay", "bin", "relay-pty"));
98
- candidates.push(import_node_path.default.join("/opt/homebrew/lib/node_modules", "agent-relay", "bin", "relay-pty"));
99
- candidates.push(import_node_path.default.join(process.env.HOME, ".local", "share", "pnpm", "global", "node_modules", "agent-relay", "bin", "relay-pty"));
92
+ if (directMatch) {
93
+ packageRoots.push(directMatch[1]);
100
94
  }
101
- if (platformBinary) {
102
- candidates.push(import_node_path.default.join(packageRoot, "bin", platformBinary));
103
- candidates.push(import_node_path.default.join(process.cwd(), "node_modules", "agent-relay", "bin", platformBinary));
104
- candidates.push(import_node_path.default.join(process.env.HOME || "", ".nvm", "versions", "node", process.version, "lib", "node_modules", "agent-relay", "bin", platformBinary));
105
- if (nodeModulesRoot) {
106
- candidates.push(import_node_path.default.join(nodeModulesRoot, "agent-relay", "bin", platformBinary));
95
+ if (!normalizedCaller.includes("node_modules")) {
96
+ packageRoots.push(import_node_path.default.join(callerDirname, "..", "..", ".."));
97
+ }
98
+ const home = process.env.HOME || process.env.USERPROFILE || "";
99
+ if (home) {
100
+ const npxCacheBase = import_node_path.default.join(home, ".npm", "_npx");
101
+ if (import_node_fs.default.existsSync(npxCacheBase)) {
102
+ try {
103
+ const entries = import_node_fs.default.readdirSync(npxCacheBase);
104
+ for (const entry of entries) {
105
+ const npxPackage = import_node_path.default.join(npxCacheBase, entry, "node_modules", "agent-relay");
106
+ if (import_node_fs.default.existsSync(npxPackage)) {
107
+ packageRoots.push(npxPackage);
108
+ }
109
+ }
110
+ } catch {
111
+ }
107
112
  }
108
- if (process.env.HOME) {
109
- candidates.push(import_node_path.default.join("/usr/local/lib/node_modules", "agent-relay", "bin", platformBinary));
110
- candidates.push(import_node_path.default.join("/opt/homebrew/lib/node_modules", "agent-relay", "bin", platformBinary));
111
- candidates.push(import_node_path.default.join(process.env.HOME, ".local", "share", "pnpm", "global", "node_modules", "agent-relay", "bin", platformBinary));
113
+ }
114
+ packageRoots.push(import_node_path.default.join(process.cwd(), "node_modules", "agent-relay"));
115
+ if (home) {
116
+ packageRoots.push(
117
+ import_node_path.default.join(home, ".nvm", "versions", "node", process.version, "lib", "node_modules", "agent-relay")
118
+ );
119
+ packageRoots.push(
120
+ import_node_path.default.join(home, ".volta", "tools", "image", "packages", "agent-relay", "lib", "node_modules", "agent-relay")
121
+ );
122
+ packageRoots.push(
123
+ import_node_path.default.join(home, ".fnm", "node-versions", process.version, "installation", "lib", "node_modules", "agent-relay")
124
+ );
125
+ packageRoots.push(
126
+ import_node_path.default.join(home, "n", "lib", "node_modules", "agent-relay")
127
+ );
128
+ packageRoots.push(
129
+ import_node_path.default.join(home, ".asdf", "installs", "nodejs", process.version.replace("v", ""), "lib", "node_modules", "agent-relay")
130
+ );
131
+ packageRoots.push(
132
+ import_node_path.default.join(home, ".local", "share", "pnpm", "global", "node_modules", "agent-relay")
133
+ );
134
+ packageRoots.push(
135
+ import_node_path.default.join(home, ".config", "yarn", "global", "node_modules", "agent-relay")
136
+ );
137
+ packageRoots.push(
138
+ import_node_path.default.join(home, ".yarn", "global", "node_modules", "agent-relay")
139
+ );
140
+ }
141
+ packageRoots.push("/usr/local/lib/node_modules/agent-relay");
142
+ packageRoots.push("/opt/homebrew/lib/node_modules/agent-relay");
143
+ packageRoots.push("/usr/lib/node_modules/agent-relay");
144
+ const candidates = [];
145
+ for (const root of packageRoots) {
146
+ if (platformBinary) {
147
+ candidates.push(import_node_path.default.join(root, "bin", platformBinary));
112
148
  }
149
+ candidates.push(import_node_path.default.join(root, "bin", "relay-pty"));
150
+ }
151
+ const devRoot = normalizedCaller.includes("node_modules") ? null : import_node_path.default.join(callerDirname, "..", "..", "..");
152
+ if (devRoot) {
153
+ candidates.push(import_node_path.default.join(devRoot, "relay-pty", "target", "release", "relay-pty"));
154
+ candidates.push(import_node_path.default.join(devRoot, "relay-pty", "target", "debug", "relay-pty"));
113
155
  }
156
+ candidates.push(import_node_path.default.join(process.cwd(), "relay-pty", "target", "release", "relay-pty"));
157
+ candidates.push("/app/bin/relay-pty");
158
+ candidates.push("/usr/local/bin/relay-pty");
159
+ candidates.push("/usr/bin/relay-pty");
114
160
  lastSearchPaths = candidates;
115
161
  for (const candidate of candidates) {
116
- if (import_node_fs.default.existsSync(candidate)) {
162
+ if (isExecutable(candidate)) {
117
163
  return candidate;
118
164
  }
119
165
  }
120
166
  return null;
121
167
  }
168
+ function isExecutable(filePath) {
169
+ try {
170
+ import_node_fs.default.accessSync(filePath, import_node_fs.default.constants.X_OK);
171
+ return true;
172
+ } catch {
173
+ return false;
174
+ }
175
+ }
122
176
  function hasRelayPtyBinary(callerDirname) {
123
177
  if (!cacheChecked) {
124
178
  cachedBinaryPath = findRelayPtyBinary(callerDirname);
@@ -139,5 +193,7 @@ function clearBinaryCache() {
139
193
  findRelayPtyBinary,
140
194
  getCachedRelayPtyPath,
141
195
  getLastSearchPaths,
142
- hasRelayPtyBinary
196
+ getSupportedPlatforms,
197
+ hasRelayPtyBinary,
198
+ isPlatformSupported
143
199
  });
@@ -5,12 +5,22 @@
5
5
  * - packages/bridge/src/spawner.ts (AgentSpawner)
6
6
  * - packages/wrapper/src/relay-pty-orchestrator.ts (RelayPtyOrchestrator)
7
7
  *
8
- * The search order handles multiple installation scenarios:
9
- * 1. Development (local Rust build)
10
- * 2. Local npm install (node_modules/agent-relay)
11
- * 3. Global npm install via nvm
12
- * 4. System-wide installs (/usr/local/bin)
8
+ * Supports all installation scenarios:
9
+ * - npx agent-relay (no postinstall, uses platform-specific binary)
10
+ * - npm install -g agent-relay (nvm, volta, fnm, n, asdf, Homebrew, system)
11
+ * - npm install agent-relay (local project)
12
+ * - pnpm/yarn global
13
+ * - Development (monorepo with Rust builds)
14
+ * - Docker containers
13
15
  */
16
+ /**
17
+ * Check if the current platform is supported.
18
+ */
19
+ export declare function isPlatformSupported(): boolean;
20
+ /**
21
+ * Get a human-readable description of supported platforms.
22
+ */
23
+ export declare function getSupportedPlatforms(): string;
14
24
  /**
15
25
  * Get the paths that were checked in the last binary search.
16
26
  * Useful for debugging when the binary is not found.
@@ -19,13 +29,8 @@ export declare function getLastSearchPaths(): string[];
19
29
  /**
20
30
  * Find the relay-pty binary.
21
31
  *
22
- * Search order:
23
- * 1. RELAY_PTY_BINARY environment variable (explicit override)
24
- * 2. bin/relay-pty in package root (installed by postinstall)
25
- * 3. relay-pty/target/release/relay-pty (local Rust build)
26
- * 4. /usr/local/bin/relay-pty (global install)
27
- * 5. In node_modules when installed as dependency
28
- * 6. Global npm installs (nvm) - both scoped and root packages
32
+ * Search order prioritizes platform-specific binaries FIRST because npx doesn't run postinstall.
33
+ * This ensures `npx agent-relay up` works without requiring global installation.
29
34
  *
30
35
  * @param callerDirname - The __dirname of the calling module (needed to resolve relative paths)
31
36
  * @returns Path to relay-pty binary, or null if not found
@@ -1 +1 @@
1
- {"version":3,"file":"relay-pty-path.d.ts","sourceRoot":"","sources":["../src/relay-pty-path.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AA8BH;;;GAGG;AACH,wBAAgB,kBAAkB,IAAI,MAAM,EAAE,CAE7C;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,kBAAkB,CAAC,aAAa,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAqGvE;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,CAuJvE;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"}