agent-relay 3.2.21 → 4.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/bin/agent-relay-broker-darwin-arm64 +0 -0
- package/bin/agent-relay-broker-darwin-x64 +0 -0
- package/bin/agent-relay-broker-linux-arm64 +0 -0
- package/bin/agent-relay-broker-linux-x64 +0 -0
- package/dist/index.cjs +5065 -1422
- package/dist/src/cli/bootstrap.d.ts.map +1 -1
- package/dist/src/cli/bootstrap.js +2 -0
- package/dist/src/cli/bootstrap.js.map +1 -1
- package/dist/src/cli/commands/agent-management.d.ts.map +1 -1
- package/dist/src/cli/commands/agent-management.js +14 -4
- package/dist/src/cli/commands/agent-management.js.map +1 -1
- package/dist/src/cli/commands/core.d.ts +2 -6
- package/dist/src/cli/commands/core.d.ts.map +1 -1
- package/dist/src/cli/commands/core.js +30 -12
- package/dist/src/cli/commands/core.js.map +1 -1
- package/dist/src/cli/commands/messaging.d.ts.map +1 -1
- package/dist/src/cli/commands/messaging.js +10 -3
- package/dist/src/cli/commands/messaging.js.map +1 -1
- package/dist/src/cli/commands/monitoring.d.ts +2 -2
- package/dist/src/cli/commands/monitoring.d.ts.map +1 -1
- package/dist/src/cli/commands/monitoring.js +15 -6
- package/dist/src/cli/commands/monitoring.js.map +1 -1
- package/dist/src/cli/commands/on/dotfiles.d.ts +35 -0
- package/dist/src/cli/commands/on/dotfiles.d.ts.map +1 -0
- package/dist/src/cli/commands/on/dotfiles.js +157 -0
- package/dist/src/cli/commands/on/dotfiles.js.map +1 -0
- package/dist/src/cli/commands/on/prereqs.d.ts +15 -0
- package/dist/src/cli/commands/on/prereqs.d.ts.map +1 -0
- package/dist/src/cli/commands/on/prereqs.js +103 -0
- package/dist/src/cli/commands/on/prereqs.js.map +1 -0
- package/dist/src/cli/commands/on/provision.d.ts +22 -0
- package/dist/src/cli/commands/on/provision.d.ts.map +1 -0
- package/dist/src/cli/commands/on/provision.js +157 -0
- package/dist/src/cli/commands/on/provision.js.map +1 -0
- package/dist/src/cli/commands/on/scan.d.ts +8 -0
- package/dist/src/cli/commands/on/scan.d.ts.map +1 -0
- package/dist/src/cli/commands/on/scan.js +59 -0
- package/dist/src/cli/commands/on/scan.js.map +1 -0
- package/dist/src/cli/commands/on/services.d.ts +17 -0
- package/dist/src/cli/commands/on/services.d.ts.map +1 -0
- package/dist/src/cli/commands/on/services.js +328 -0
- package/dist/src/cli/commands/on/services.js.map +1 -0
- package/dist/src/cli/commands/on/start.d.ts +61 -0
- package/dist/src/cli/commands/on/start.d.ts.map +1 -0
- package/dist/src/cli/commands/on/start.js +1071 -0
- package/dist/src/cli/commands/on/start.js.map +1 -0
- package/dist/src/cli/commands/on/stop.d.ts +4 -0
- package/dist/src/cli/commands/on/stop.d.ts.map +1 -0
- package/dist/src/cli/commands/on/stop.js +11 -0
- package/dist/src/cli/commands/on/stop.js.map +1 -0
- package/dist/src/cli/commands/on/token.d.ts +8 -0
- package/dist/src/cli/commands/on/token.d.ts.map +1 -0
- package/dist/src/cli/commands/on/token.js +26 -0
- package/dist/src/cli/commands/on/token.js.map +1 -0
- package/dist/src/cli/commands/on/workspace.d.ts +4 -0
- package/dist/src/cli/commands/on/workspace.d.ts.map +1 -0
- package/dist/src/cli/commands/on/workspace.js +241 -0
- package/dist/src/cli/commands/on/workspace.js.map +1 -0
- package/dist/src/cli/commands/on.d.ts +10 -0
- package/dist/src/cli/commands/on.d.ts.map +1 -0
- package/dist/src/cli/commands/on.js +52 -0
- package/dist/src/cli/commands/on.js.map +1 -0
- package/dist/src/cli/commands/setup.d.ts.map +1 -1
- package/dist/src/cli/commands/setup.js +10 -21
- package/dist/src/cli/commands/setup.js.map +1 -1
- package/dist/src/cli/lib/bridge.js +1 -1
- package/dist/src/cli/lib/bridge.js.map +1 -1
- package/dist/src/cli/lib/broker-lifecycle.d.ts +14 -4
- package/dist/src/cli/lib/broker-lifecycle.d.ts.map +1 -1
- package/dist/src/cli/lib/broker-lifecycle.js +82 -120
- package/dist/src/cli/lib/broker-lifecycle.js.map +1 -1
- package/dist/src/cli/lib/client-factory.d.ts +2 -2
- package/dist/src/cli/lib/client-factory.d.ts.map +1 -1
- package/dist/src/cli/lib/client-factory.js +14 -11
- package/dist/src/cli/lib/client-factory.js.map +1 -1
- package/dist/src/cli/lib/core-maintenance.d.ts.map +1 -1
- package/dist/src/cli/lib/core-maintenance.js +11 -22
- package/dist/src/cli/lib/core-maintenance.js.map +1 -1
- package/package.json +14 -11
- package/packages/acp-bridge/package.json +2 -2
- package/packages/brand/package.json +1 -1
- package/packages/cloud/package.json +2 -2
- package/packages/config/package.json +1 -1
- package/packages/hooks/package.json +4 -4
- package/packages/memory/package.json +2 -2
- package/packages/openclaw/package.json +2 -2
- package/packages/policy/package.json +2 -2
- package/packages/sdk/README.md +10 -3
- package/packages/sdk/dist/client.d.ts +108 -196
- package/packages/sdk/dist/client.d.ts.map +1 -1
- package/packages/sdk/dist/client.js +336 -824
- package/packages/sdk/dist/client.js.map +1 -1
- package/packages/sdk/dist/examples/example.js +2 -5
- package/packages/sdk/dist/examples/example.js.map +1 -1
- package/packages/sdk/dist/index.d.ts +3 -1
- package/packages/sdk/dist/index.d.ts.map +1 -1
- package/packages/sdk/dist/index.js +3 -1
- package/packages/sdk/dist/index.js.map +1 -1
- package/packages/sdk/dist/relay-adapter.d.ts +9 -26
- package/packages/sdk/dist/relay-adapter.d.ts.map +1 -1
- package/packages/sdk/dist/relay-adapter.js +75 -47
- package/packages/sdk/dist/relay-adapter.js.map +1 -1
- package/packages/sdk/dist/relay.d.ts +24 -5
- package/packages/sdk/dist/relay.d.ts.map +1 -1
- package/packages/sdk/dist/relay.js +213 -43
- package/packages/sdk/dist/relay.js.map +1 -1
- package/packages/sdk/dist/transport.d.ts +58 -0
- package/packages/sdk/dist/transport.d.ts.map +1 -0
- package/packages/sdk/dist/transport.js +184 -0
- package/packages/sdk/dist/transport.js.map +1 -0
- package/packages/sdk/dist/types.d.ts +69 -0
- package/packages/sdk/dist/types.d.ts.map +1 -0
- package/packages/sdk/dist/types.js +5 -0
- package/packages/sdk/dist/types.js.map +1 -0
- package/packages/sdk/dist/workflows/cli.js +46 -2
- package/packages/sdk/dist/workflows/cli.js.map +1 -1
- package/packages/sdk/dist/workflows/file-db.d.ts +2 -0
- package/packages/sdk/dist/workflows/file-db.d.ts.map +1 -1
- package/packages/sdk/dist/workflows/file-db.js +20 -3
- package/packages/sdk/dist/workflows/file-db.js.map +1 -1
- package/packages/sdk/dist/workflows/runner.d.ts +6 -1
- package/packages/sdk/dist/workflows/runner.d.ts.map +1 -1
- package/packages/sdk/dist/workflows/runner.js +157 -11
- package/packages/sdk/dist/workflows/runner.js.map +1 -1
- package/packages/sdk/dist/workflows/validator.d.ts.map +1 -1
- package/packages/sdk/dist/workflows/validator.js +17 -2
- package/packages/sdk/dist/workflows/validator.js.map +1 -1
- package/packages/sdk/package.json +2 -2
- package/packages/sdk/src/__tests__/resume-fallback.test.ts +415 -0
- package/packages/sdk/src/__tests__/unit.test.ts +100 -1
- package/packages/sdk/src/client.ts +422 -1072
- package/packages/sdk/src/examples/example.ts +2 -5
- package/packages/sdk/src/index.ts +8 -1
- package/packages/sdk/src/relay-adapter.ts +75 -55
- package/packages/sdk/src/relay.ts +260 -57
- package/packages/sdk/src/transport.ts +216 -0
- package/packages/sdk/src/types.ts +75 -0
- package/packages/sdk/src/workflows/cli.ts +53 -2
- package/packages/sdk/src/workflows/file-db.ts +22 -3
- package/packages/sdk/src/workflows/runner.ts +178 -11
- package/packages/sdk/src/workflows/validator.ts +20 -2
- package/packages/sdk-py/pyproject.toml +1 -1
- package/packages/sdk-py/src/agent_relay/__init__.py +0 -8
- package/packages/sdk-py/src/agent_relay/client.py +329 -522
- package/packages/sdk-py/src/agent_relay/protocol.py +2 -96
- package/packages/sdk-py/src/agent_relay/relay.py +1 -4
- package/packages/sdk-py/tests/test_wait_for_api_url.py +92 -0
- package/packages/sdk-py/uv.lock +5388 -0
- package/packages/telemetry/dist/client.d.ts.map +1 -1
- package/packages/telemetry/dist/client.js +1 -1
- package/packages/telemetry/dist/client.js.map +1 -1
- package/packages/telemetry/package.json +1 -1
- package/packages/telemetry/src/client.ts +3 -10
- package/packages/trajectory/package.json +2 -2
- package/packages/user-directory/package.json +2 -2
- package/packages/utils/package.json +2 -2
- package/scripts/postinstall.js +121 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"AAAA;;GAEG;AAOH,OAAO,EAEL,cAAc,EAKf,MAAM,aAAa,CAAC;AACrB,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"AAAA;;GAEG;AAOH,OAAO,EAEL,cAAc,EAKf,MAAM,aAAa,CAAC;AACrB,OAAO,KAAK,EAAoB,kBAAkB,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AA8D3F,wBAAgB,aAAa,CAAC,OAAO,GAAE;IAAE,UAAU,CAAC,EAAE,OAAO,CAAA;CAAO,GAAG,IAAI,CAsB1E;AAED,wBAAgB,KAAK,CAAC,CAAC,SAAS,kBAAkB,EAAE,KAAK,EAAE,CAAC,EAAE,UAAU,CAAC,EAAE,iBAAiB,CAAC,CAAC,CAAC,GAAG,IAAI,CAWrG;AAED,wBAAsB,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC,CAa9C;AAED,wBAAgB,SAAS,IAAI,OAAO,CAEnC;AAED,OAAO,EAAE,cAAc,EAAE,CAAC;AAE1B,wBAAgB,SAAS,IAAI;IAC3B,OAAO,EAAE,OAAO,CAAC;IACjB,aAAa,EAAE,OAAO,CAAC;IACvB,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,MAAM,GAAG,SAAS,CAAC;CAChC,CAQA"}
|
|
@@ -57,7 +57,7 @@ function showFirstRunNotice() {
|
|
|
57
57
|
console.log('');
|
|
58
58
|
console.log('Agent Relay collects anonymous usage data to improve the product.');
|
|
59
59
|
console.log('Run `agent-relay telemetry disable` to opt out.');
|
|
60
|
-
console.log('Learn more: https://
|
|
60
|
+
console.log('Learn more: https://agentrelay.dev/telemetry');
|
|
61
61
|
console.log('');
|
|
62
62
|
markNotified();
|
|
63
63
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client.js","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACvC,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EACL,kBAAkB,EAClB,cAAc,EACd,WAAW,EACX,YAAY,EACZ,eAAe,EACf,SAAS,GACV,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"client.js","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"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"}
|
|
@@ -15,11 +15,7 @@ import {
|
|
|
15
15
|
isDisabledByEnv,
|
|
16
16
|
loadPrefs,
|
|
17
17
|
} from './config.js';
|
|
18
|
-
import type {
|
|
19
|
-
CommonProperties,
|
|
20
|
-
TelemetryEventName,
|
|
21
|
-
TelemetryEventMap,
|
|
22
|
-
} from './events.js';
|
|
18
|
+
import type { CommonProperties, TelemetryEventName, TelemetryEventMap } from './events.js';
|
|
23
19
|
import { getPostHogConfig } from './posthog-config.js';
|
|
24
20
|
|
|
25
21
|
let client: PostHog | null = null;
|
|
@@ -75,7 +71,7 @@ function showFirstRunNotice(): void {
|
|
|
75
71
|
console.log('');
|
|
76
72
|
console.log('Agent Relay collects anonymous usage data to improve the product.');
|
|
77
73
|
console.log('Run `agent-relay telemetry disable` to opt out.');
|
|
78
|
-
console.log('Learn more: https://
|
|
74
|
+
console.log('Learn more: https://agentrelay.dev/telemetry');
|
|
79
75
|
console.log('');
|
|
80
76
|
|
|
81
77
|
markNotified();
|
|
@@ -105,10 +101,7 @@ export function initTelemetry(options: { showNotice?: boolean } = {}): void {
|
|
|
105
101
|
anonymousId = getAnonymousId();
|
|
106
102
|
}
|
|
107
103
|
|
|
108
|
-
export function track<E extends TelemetryEventName>(
|
|
109
|
-
event: E,
|
|
110
|
-
properties?: TelemetryEventMap[E]
|
|
111
|
-
): void {
|
|
104
|
+
export function track<E extends TelemetryEventName>(event: E, properties?: TelemetryEventMap[E]): void {
|
|
112
105
|
if (!client || !commonProps || !anonymousId) return;
|
|
113
106
|
|
|
114
107
|
client.capture({
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@agent-relay/trajectory",
|
|
3
|
-
"version": "
|
|
3
|
+
"version": "4.0.0",
|
|
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": "
|
|
25
|
+
"@agent-relay/config": "4.0.0"
|
|
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": "
|
|
3
|
+
"version": "4.0.0",
|
|
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/utils": "
|
|
25
|
+
"@agent-relay/utils": "4.0.0"
|
|
26
26
|
},
|
|
27
27
|
"devDependencies": {
|
|
28
28
|
"@types/node": "^22.19.3",
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@agent-relay/utils",
|
|
3
|
-
"version": "
|
|
3
|
+
"version": "4.0.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",
|
|
@@ -112,7 +112,7 @@
|
|
|
112
112
|
"vitest": "^3.2.4"
|
|
113
113
|
},
|
|
114
114
|
"dependencies": {
|
|
115
|
-
"@agent-relay/config": "
|
|
115
|
+
"@agent-relay/config": "4.0.0",
|
|
116
116
|
"compare-versions": "^6.1.1"
|
|
117
117
|
},
|
|
118
118
|
"publishConfig": {
|
package/scripts/postinstall.js
CHANGED
|
@@ -10,6 +10,7 @@
|
|
|
10
10
|
*/
|
|
11
11
|
|
|
12
12
|
import { execSync } from 'node:child_process';
|
|
13
|
+
import { createHash } from 'node:crypto';
|
|
13
14
|
import { createRequire } from 'node:module';
|
|
14
15
|
import https from 'node:https';
|
|
15
16
|
import path from 'node:path';
|
|
@@ -164,6 +165,74 @@ function getPackageVersion(pkgRoot) {
|
|
|
164
165
|
}
|
|
165
166
|
}
|
|
166
167
|
|
|
168
|
+
/**
|
|
169
|
+
* Verify SHA-256 checksum of a downloaded file.
|
|
170
|
+
* Downloads a checksums file from the same release directory and verifies.
|
|
171
|
+
* Returns true if verified, false if checksums file not found (graceful fallback).
|
|
172
|
+
* Throws if checksums file exists but verification fails.
|
|
173
|
+
*/
|
|
174
|
+
async function verifyChecksum(filePath, downloadUrl) {
|
|
175
|
+
const checksumUrl = downloadUrl.replace(/\/[^/]+$/, '/checksums.sha256');
|
|
176
|
+
const binaryName = path.basename(downloadUrl);
|
|
177
|
+
|
|
178
|
+
try {
|
|
179
|
+
const checksumContent = await new Promise((resolve, reject) => {
|
|
180
|
+
const fetchWithRedirects = (url, remaining = 5) => {
|
|
181
|
+
const chunks = [];
|
|
182
|
+
const request = https.get(url, res => {
|
|
183
|
+
if (res.statusCode >= 300 && res.statusCode < 400 && res.headers.location) {
|
|
184
|
+
if (remaining <= 0) { res.resume(); reject(new Error('Too many redirects fetching checksums')); return; }
|
|
185
|
+
res.resume();
|
|
186
|
+
fetchWithRedirects(new URL(res.headers.location, url).toString(), remaining - 1);
|
|
187
|
+
return;
|
|
188
|
+
}
|
|
189
|
+
if (res.statusCode !== 200) {
|
|
190
|
+
res.resume();
|
|
191
|
+
reject(new Error(`Checksums file not available (HTTP ${res.statusCode})`));
|
|
192
|
+
return;
|
|
193
|
+
}
|
|
194
|
+
res.on('data', chunk => chunks.push(chunk));
|
|
195
|
+
res.on('end', () => resolve(Buffer.concat(chunks).toString('utf-8')));
|
|
196
|
+
res.on('error', reject);
|
|
197
|
+
});
|
|
198
|
+
request.on('error', reject);
|
|
199
|
+
};
|
|
200
|
+
fetchWithRedirects(checksumUrl);
|
|
201
|
+
});
|
|
202
|
+
|
|
203
|
+
// Parse checksums file (format: "<hash> <filename>" per line)
|
|
204
|
+
const expectedHash = checksumContent
|
|
205
|
+
.split('\n')
|
|
206
|
+
.map(line => line.trim())
|
|
207
|
+
.filter(line => line.endsWith(binaryName))
|
|
208
|
+
.map(line => line.split(/\s+/)[0])[0];
|
|
209
|
+
|
|
210
|
+
if (!expectedHash) {
|
|
211
|
+
warn(`No checksum entry found for ${binaryName} in checksums file`);
|
|
212
|
+
return false;
|
|
213
|
+
}
|
|
214
|
+
|
|
215
|
+
const fileBuffer = fs.readFileSync(filePath);
|
|
216
|
+
const actualHash = createHash('sha256').update(fileBuffer).digest('hex');
|
|
217
|
+
|
|
218
|
+
if (actualHash !== expectedHash) {
|
|
219
|
+
throw new Error(
|
|
220
|
+
`Checksum mismatch for ${binaryName}: expected ${expectedHash}, got ${actualHash}`
|
|
221
|
+
);
|
|
222
|
+
}
|
|
223
|
+
|
|
224
|
+
info(`Checksum verified for ${binaryName}`);
|
|
225
|
+
return true;
|
|
226
|
+
} catch (err) {
|
|
227
|
+
if (err.message.includes('Checksum mismatch')) {
|
|
228
|
+
throw err; // Re-throw verification failures — this is a supply chain risk
|
|
229
|
+
}
|
|
230
|
+
// Checksums file not available — log warning but allow installation
|
|
231
|
+
warn(`Checksum verification skipped for ${binaryName}: ${err.message}`);
|
|
232
|
+
return false;
|
|
233
|
+
}
|
|
234
|
+
}
|
|
235
|
+
|
|
167
236
|
/**
|
|
168
237
|
* Download a file via HTTPS, following redirects
|
|
169
238
|
* Uses only built-in https module (no deps)
|
|
@@ -341,6 +410,7 @@ async function installBrokerBinary() {
|
|
|
341
410
|
|
|
342
411
|
try {
|
|
343
412
|
await downloadBinary(downloadUrl, targetPath);
|
|
413
|
+
await verifyChecksum(targetPath, downloadUrl);
|
|
344
414
|
fs.chmodSync(targetPath, 0o755);
|
|
345
415
|
resignBinaryForMacOS(targetPath);
|
|
346
416
|
success(`Downloaded broker binary for ${os.platform()}-${os.arch()}`);
|
|
@@ -348,6 +418,8 @@ async function installBrokerBinary() {
|
|
|
348
418
|
} catch (err) {
|
|
349
419
|
const message = err instanceof Error ? err.message : String(err);
|
|
350
420
|
warn(`Failed to download broker binary: ${message}`);
|
|
421
|
+
// Clean up partial/untrusted download
|
|
422
|
+
try { fs.unlinkSync(targetPath); } catch { /* ignore */ }
|
|
351
423
|
}
|
|
352
424
|
}
|
|
353
425
|
}
|
|
@@ -414,6 +486,7 @@ async function installDashboardBinary() {
|
|
|
414
486
|
try {
|
|
415
487
|
fs.mkdirSync(path.dirname(targetPath), { recursive: true });
|
|
416
488
|
await downloadBinary(downloadUrl, targetPath);
|
|
489
|
+
await verifyChecksum(targetPath, downloadUrl);
|
|
417
490
|
fs.chmodSync(targetPath, 0o755);
|
|
418
491
|
resignBinaryForMacOS(targetPath);
|
|
419
492
|
success('Downloaded dashboard-server binary');
|
|
@@ -421,6 +494,7 @@ async function installDashboardBinary() {
|
|
|
421
494
|
} catch (err) {
|
|
422
495
|
const message = err instanceof Error ? err.message : String(err);
|
|
423
496
|
info(`Dashboard binary not available (${message}) — will use npx fallback`);
|
|
497
|
+
try { fs.unlinkSync(targetPath); } catch { /* ignore */ }
|
|
424
498
|
return false;
|
|
425
499
|
}
|
|
426
500
|
}
|
|
@@ -468,6 +542,7 @@ async function installRelayAcpBinary() {
|
|
|
468
542
|
try {
|
|
469
543
|
fs.mkdirSync(path.dirname(targetPath), { recursive: true });
|
|
470
544
|
await downloadBinary(downloadUrl, targetPath);
|
|
545
|
+
await verifyChecksum(targetPath, downloadUrl);
|
|
471
546
|
fs.chmodSync(targetPath, 0o755);
|
|
472
547
|
resignBinaryForMacOS(targetPath);
|
|
473
548
|
success('Downloaded relay-acp binary');
|
|
@@ -475,6 +550,7 @@ async function installRelayAcpBinary() {
|
|
|
475
550
|
} catch (err) {
|
|
476
551
|
const message = err instanceof Error ? err.message : String(err);
|
|
477
552
|
info(`relay-acp binary not available (${message}) — Zed integration requires manual install`);
|
|
553
|
+
try { fs.unlinkSync(targetPath); } catch { /* ignore */ }
|
|
478
554
|
return false;
|
|
479
555
|
}
|
|
480
556
|
}
|
|
@@ -676,7 +752,7 @@ function patchAgentTrajectories() {
|
|
|
676
752
|
await storage.save(trajectory);`;
|
|
677
753
|
|
|
678
754
|
if (!content.includes(optionNeedle) || !content.includes(createNeedle)) {
|
|
679
|
-
warn('agent-trajectories CLI format changed, skipping patch');
|
|
755
|
+
warn('agent-trajectories CLI format changed, skipping patch (expected needle not found)');
|
|
680
756
|
return;
|
|
681
757
|
}
|
|
682
758
|
|
|
@@ -684,10 +760,51 @@ function patchAgentTrajectories() {
|
|
|
684
760
|
.replace(optionNeedle, optionReplacement)
|
|
685
761
|
.replace(createNeedle, createReplacement);
|
|
686
762
|
|
|
763
|
+
// Verify the patch produced exactly the expected changes (no double-application or corruption)
|
|
764
|
+
if (updated === content) {
|
|
765
|
+
warn('agent-trajectories patch produced no changes, skipping write');
|
|
766
|
+
return;
|
|
767
|
+
}
|
|
768
|
+
|
|
687
769
|
fs.writeFileSync(cliPath, updated, 'utf-8');
|
|
688
770
|
success('Patched agent-trajectories to record agent on trail start');
|
|
689
771
|
}
|
|
690
772
|
|
|
773
|
+
function patchRelayauthCoreExports() {
|
|
774
|
+
const pkgRoot = getPackageRoot();
|
|
775
|
+
const packageJsonPath = path.join(pkgRoot, 'node_modules', '@relayauth', 'core', 'package.json');
|
|
776
|
+
|
|
777
|
+
try {
|
|
778
|
+
const packageJson = JSON.parse(fs.readFileSync(packageJsonPath, 'utf-8'));
|
|
779
|
+
const rootExport = packageJson?.exports?.['.'];
|
|
780
|
+
|
|
781
|
+
if (!rootExport || typeof rootExport !== 'object' || Array.isArray(rootExport)) {
|
|
782
|
+
warn('@relayauth/core exports format changed, skipping require() compatibility patch');
|
|
783
|
+
return;
|
|
784
|
+
}
|
|
785
|
+
|
|
786
|
+
if (rootExport.require === './dist/index.js' && rootExport.default === './dist/index.js') {
|
|
787
|
+
info('@relayauth/core already supports require()');
|
|
788
|
+
return;
|
|
789
|
+
}
|
|
790
|
+
|
|
791
|
+
packageJson.exports['.'] = {
|
|
792
|
+
...rootExport,
|
|
793
|
+
require: rootExport.require ?? './dist/index.js',
|
|
794
|
+
default: rootExport.default ?? './dist/index.js',
|
|
795
|
+
};
|
|
796
|
+
|
|
797
|
+
fs.writeFileSync(packageJsonPath, `${JSON.stringify(packageJson, null, 2)}\n`, 'utf-8');
|
|
798
|
+
success('Patched @relayauth/core package exports for require() compatibility');
|
|
799
|
+
} catch (err) {
|
|
800
|
+
if (err.code === 'ENOENT') {
|
|
801
|
+
info('@relayauth/core not installed, skipping require() compatibility patch');
|
|
802
|
+
} else {
|
|
803
|
+
warn(`Failed to patch @relayauth/core package exports: ${err.message}`);
|
|
804
|
+
}
|
|
805
|
+
}
|
|
806
|
+
}
|
|
807
|
+
|
|
691
808
|
function logPostinstallDiagnostics(hasBrokerBinary, sqliteStatus, linkResult) {
|
|
692
809
|
// Workspace packages status (for global installs)
|
|
693
810
|
if (linkResult && linkResult.needed) {
|
|
@@ -742,6 +859,9 @@ async function main() {
|
|
|
742
859
|
// Ensure trail CLI captures agent info on start
|
|
743
860
|
patchAgentTrajectories();
|
|
744
861
|
|
|
862
|
+
// Make the published @relayauth/core package work with CommonJS require()
|
|
863
|
+
patchRelayauthCoreExports();
|
|
864
|
+
|
|
745
865
|
// Always install dashboard dependencies (needed for build)
|
|
746
866
|
installDashboardDeps();
|
|
747
867
|
|