agent-relay 4.0.3 → 4.0.5
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/README.md +19 -19
- package/dist/index.cjs +8 -7
- package/dist/src/cli/commands/auth.js +1 -1
- package/dist/src/cli/commands/auth.js.map +1 -1
- package/dist/src/cli/commands/on/start.d.ts +2 -0
- package/dist/src/cli/commands/on/start.d.ts.map +1 -1
- package/dist/src/cli/commands/on/start.js +13 -4
- package/dist/src/cli/commands/on/start.js.map +1 -1
- package/dist/src/cli/commands/on.js +2 -2
- package/dist/src/cli/commands/setup.js +1 -1
- package/dist/src/cli/lib/auth-ssh.d.ts.map +1 -1
- package/dist/src/cli/lib/auth-ssh.js +19 -10
- package/dist/src/cli/lib/auth-ssh.js.map +1 -1
- package/dist/src/cli/lib/connect-daytona.d.ts.map +1 -1
- package/dist/src/cli/lib/connect-daytona.js +4 -2
- package/dist/src/cli/lib/connect-daytona.js.map +1 -1
- package/package.json +12 -13
- package/packages/acp-bridge/package.json +2 -2
- package/packages/brand/package.json +1 -1
- package/packages/cloud/dist/types.d.ts +2 -2
- package/packages/cloud/dist/types.d.ts.map +1 -1
- package/packages/cloud/dist/types.js +5 -12
- package/packages/cloud/dist/types.js.map +1 -1
- package/packages/cloud/dist/workflows.d.ts +1 -1
- package/packages/cloud/dist/workflows.d.ts.map +1 -1
- package/packages/cloud/dist/workflows.js +113 -113
- package/packages/cloud/dist/workflows.js.map +1 -1
- package/packages/cloud/package.json +2 -2
- package/packages/cloud/src/types.ts +7 -14
- package/packages/cloud/src/workflows.ts +146 -148
- package/packages/config/dist/cloud-config.d.ts.map +1 -1
- package/packages/config/dist/cloud-config.js +1 -3
- package/packages/config/dist/cloud-config.js.map +1 -1
- package/packages/config/package.json +1 -1
- package/packages/config/src/cloud-config.ts +10 -11
- package/packages/hooks/package.json +4 -4
- package/packages/memory/package.json +2 -2
- package/packages/openclaw/package.json +2 -2
- package/packages/openclaw/skill/SKILL.md +12 -12
- package/packages/policy/package.json +2 -2
- package/packages/sdk/dist/relay.js +1 -1
- package/packages/sdk/dist/workflows/__tests__/permissions-integration.test.js +42 -0
- package/packages/sdk/dist/workflows/__tests__/permissions-integration.test.js.map +1 -1
- package/packages/sdk/dist/workflows/cli.js +4 -2
- package/packages/sdk/dist/workflows/cli.js.map +1 -1
- package/packages/sdk/dist/workflows/listr-renderer.d.ts.map +1 -1
- package/packages/sdk/dist/workflows/listr-renderer.js +2 -4
- package/packages/sdk/dist/workflows/listr-renderer.js.map +1 -1
- package/packages/sdk/dist/workflows/runner.d.ts.map +1 -1
- package/packages/sdk/dist/workflows/runner.js +6 -5
- package/packages/sdk/dist/workflows/runner.js.map +1 -1
- package/packages/sdk/package.json +2 -2
- package/packages/sdk/src/__tests__/unit.test.ts +1 -1
- package/packages/sdk/src/relay.ts +1 -1
- package/packages/sdk/src/workflows/__tests__/permissions-integration.test.ts +44 -0
- package/packages/sdk/src/workflows/cli.ts +6 -4
- package/packages/sdk/src/workflows/listr-renderer.ts +5 -7
- package/packages/sdk/src/workflows/runner.ts +6 -5
- package/packages/sdk-py/pyproject.toml +1 -1
- package/packages/telemetry/dist/client.js +1 -1
- package/packages/telemetry/package.json +1 -1
- package/packages/telemetry/src/client.ts +1 -1
- package/packages/trajectory/package.json +2 -2
- package/packages/user-directory/package.json +2 -2
- package/packages/utils/package.json +2 -2
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@agent-relay/sdk",
|
|
3
|
-
"version": "4.0.
|
|
3
|
+
"version": "4.0.5",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"types": "dist/index.d.ts",
|
|
@@ -113,7 +113,7 @@
|
|
|
113
113
|
"typescript": "^5.7.3"
|
|
114
114
|
},
|
|
115
115
|
"dependencies": {
|
|
116
|
-
"@agent-relay/config": "4.0.
|
|
116
|
+
"@agent-relay/config": "4.0.5",
|
|
117
117
|
"@relaycast/sdk": "^1.1.0",
|
|
118
118
|
"@relayfile/sdk": "^0.1.2",
|
|
119
119
|
"@sinclair/typebox": "^0.34.48",
|
|
@@ -405,7 +405,7 @@ test('observerUrl: returns correct URL format when workspaceKey is set', () => {
|
|
|
405
405
|
const url = relay.observerUrl;
|
|
406
406
|
assert.ok(url, 'observerUrl should be defined after key is set');
|
|
407
407
|
assert.ok(
|
|
408
|
-
url!.startsWith('https://agentrelay.
|
|
408
|
+
url!.startsWith('https://agentrelay.com/observer?key='),
|
|
409
409
|
`observerUrl should start with observer base URL, got: ${url}`
|
|
410
410
|
);
|
|
411
411
|
assert.ok(url!.includes('rk_live_test123'), 'observerUrl should include the workspace key');
|
|
@@ -373,7 +373,7 @@ export class AgentRelay {
|
|
|
373
373
|
/** Observer URL for the auto-created workspace (available after first spawn). */
|
|
374
374
|
get observerUrl(): string | undefined {
|
|
375
375
|
if (!this.relayApiKey) return undefined;
|
|
376
|
-
return `https://agentrelay.
|
|
376
|
+
return `https://agentrelay.com/observer?key=${this.relayApiKey}`;
|
|
377
377
|
}
|
|
378
378
|
|
|
379
379
|
// Shorthand spawners
|
|
@@ -506,6 +506,50 @@ describe('WorkflowRunner permission lifecycle integration', () => {
|
|
|
506
506
|
expect(spawnOptions?.env?.RELAYFILE_TOKEN).toBe('token:headless-agent');
|
|
507
507
|
});
|
|
508
508
|
|
|
509
|
+
it('merges relay.env with inherited process env for non-interactive agents', async () => {
|
|
510
|
+
const projectDir = createBaseProject();
|
|
511
|
+
const inheritedEnvKey = 'WORKFLOW_RUNNER_RELAY_ENV_MERGE_TEST';
|
|
512
|
+
const originalInheritedValue = process.env[inheritedEnvKey];
|
|
513
|
+
process.env[inheritedEnvKey] = 'inherited-value';
|
|
514
|
+
|
|
515
|
+
try {
|
|
516
|
+
const runner = new WorkflowRunner({
|
|
517
|
+
cwd: projectDir,
|
|
518
|
+
db: makeDb(),
|
|
519
|
+
workspaceId: 'ws-test',
|
|
520
|
+
relay: {
|
|
521
|
+
env: {
|
|
522
|
+
AGENT_RELAY_WORKFLOW_DISABLE_RELAYCAST: '1',
|
|
523
|
+
RELAYFILE_BASE_URL: 'https://relay.example.test',
|
|
524
|
+
},
|
|
525
|
+
},
|
|
526
|
+
});
|
|
527
|
+
const config = makeConfig([
|
|
528
|
+
{
|
|
529
|
+
name: 'env-merge-agent',
|
|
530
|
+
cli: 'claude',
|
|
531
|
+
interactive: false,
|
|
532
|
+
permissions: { access: 'readwrite' },
|
|
533
|
+
},
|
|
534
|
+
]);
|
|
535
|
+
|
|
536
|
+
const run = await runner.execute(config, 'default');
|
|
537
|
+
const spawnOptions = mockSubprocessSpawn.mock.calls[0]?.[2] as { env?: NodeJS.ProcessEnv } | undefined;
|
|
538
|
+
|
|
539
|
+
expect(run.status).toBe('completed');
|
|
540
|
+
expect(mockSubprocessSpawn).toHaveBeenCalledTimes(1);
|
|
541
|
+
expect(spawnOptions?.env?.[inheritedEnvKey]).toBe('inherited-value');
|
|
542
|
+
expect(spawnOptions?.env?.RELAYFILE_BASE_URL).toBe('https://relay.example.test');
|
|
543
|
+
expect(spawnOptions?.env?.AGENT_RELAY_WORKFLOW_DISABLE_RELAYCAST).toBe('1');
|
|
544
|
+
} finally {
|
|
545
|
+
if (originalInheritedValue === undefined) {
|
|
546
|
+
delete process.env[inheritedEnvKey];
|
|
547
|
+
} else {
|
|
548
|
+
process.env[inheritedEnvKey] = originalInheritedValue;
|
|
549
|
+
}
|
|
550
|
+
}
|
|
551
|
+
});
|
|
552
|
+
|
|
509
553
|
it('clears workflow-scoped tokens after successful completion', async () => {
|
|
510
554
|
const projectDir = createBaseProject();
|
|
511
555
|
const runner = makeRunner(projectDir);
|
|
@@ -85,21 +85,23 @@ function installOutputFilter(): () => void {
|
|
|
85
85
|
const orig = console.log.bind(console);
|
|
86
86
|
console.log = (...args: unknown[]) => {
|
|
87
87
|
const str = String(args[0] ?? '');
|
|
88
|
-
if (str.includes('Observer:') || str.includes('agentrelay.
|
|
88
|
+
if (str.includes('Observer:') || str.includes('agentrelay.com') || str.includes('Channel: wf-')) {
|
|
89
89
|
orig(...args);
|
|
90
90
|
return;
|
|
91
91
|
}
|
|
92
92
|
if (/\[broker\]/.test(str) || /\[workflow\s+\d{2}:\d{2}\]/.test(str)) return;
|
|
93
93
|
orig(...args);
|
|
94
94
|
};
|
|
95
|
-
return () => {
|
|
95
|
+
return () => {
|
|
96
|
+
console.log = orig;
|
|
97
|
+
};
|
|
96
98
|
}
|
|
97
99
|
|
|
98
100
|
async function runWithListr(
|
|
99
101
|
runner: WorkflowRunner,
|
|
100
102
|
config: RunnerConfig,
|
|
101
103
|
workflowName: string | undefined,
|
|
102
|
-
executeOptions: ExecuteOptions | undefined
|
|
104
|
+
executeOptions: ExecuteOptions | undefined
|
|
103
105
|
): Promise<RunnerResult> {
|
|
104
106
|
const stepHandles = new Map<string, StepHandle>();
|
|
105
107
|
const restoreConsole = installOutputFilter();
|
|
@@ -135,7 +137,7 @@ async function runWithListr(
|
|
|
135
137
|
collapseErrors: false,
|
|
136
138
|
showErrorMessage: true,
|
|
137
139
|
},
|
|
138
|
-
}
|
|
140
|
+
}
|
|
139
141
|
);
|
|
140
142
|
|
|
141
143
|
runner.on((event: WorkflowEvent) => {
|
|
@@ -10,7 +10,7 @@ function installOutputFilter(): () => void {
|
|
|
10
10
|
console.log = (...args: unknown[]) => {
|
|
11
11
|
const str = String(args[0] ?? '');
|
|
12
12
|
// Always show the observer URL and channel so users can follow the run
|
|
13
|
-
if (str.includes('Observer:') || str.includes('agentrelay.
|
|
13
|
+
if (str.includes('Observer:') || str.includes('agentrelay.com') || str.includes('Channel: wf-')) {
|
|
14
14
|
orig(...args);
|
|
15
15
|
return;
|
|
16
16
|
}
|
|
@@ -98,8 +98,8 @@ export function createWorkflowRenderer(): WorkflowRenderer {
|
|
|
98
98
|
rendererOptions: {
|
|
99
99
|
collapseErrors: false,
|
|
100
100
|
showErrorMessage: true,
|
|
101
|
-
|
|
102
|
-
|
|
101
|
+
},
|
|
102
|
+
}
|
|
103
103
|
);
|
|
104
104
|
for (const task of pendingAdds) listr.add(task);
|
|
105
105
|
pendingAdds.length = 0;
|
|
@@ -161,7 +161,7 @@ export function createWorkflowRenderer(): WorkflowRenderer {
|
|
|
161
161
|
if (handle) {
|
|
162
162
|
handle.setOutput(
|
|
163
163
|
chalk.dim(`> Owner: ${event.ownerName}`) +
|
|
164
|
-
(event.specialistName ? chalk.dim(` · specialist: ${event.specialistName}`) : '')
|
|
164
|
+
(event.specialistName ? chalk.dim(` · specialist: ${event.specialistName}`) : '')
|
|
165
165
|
);
|
|
166
166
|
}
|
|
167
167
|
break;
|
|
@@ -190,9 +190,7 @@ export function createWorkflowRenderer(): WorkflowRenderer {
|
|
|
190
190
|
}
|
|
191
191
|
|
|
192
192
|
case 'step:owner-timeout': {
|
|
193
|
-
stepHandles
|
|
194
|
-
.get(event.stepName)
|
|
195
|
-
?.setOutput(chalk.red(`> Owner ${event.ownerName} timed out`));
|
|
193
|
+
stepHandles.get(event.stepName)?.setOutput(chalk.red(`> Owner ${event.ownerName} timed out`));
|
|
196
194
|
break;
|
|
197
195
|
}
|
|
198
196
|
|
|
@@ -1517,13 +1517,14 @@ export class WorkflowRunner {
|
|
|
1517
1517
|
}
|
|
1518
1518
|
|
|
1519
1519
|
private getRelayEnv(): NodeJS.ProcessEnv | undefined {
|
|
1520
|
-
if (!this.relayApiKey) {
|
|
1521
|
-
return
|
|
1520
|
+
if (!this.relayApiKey && !this.relayOptions.env) {
|
|
1521
|
+
return undefined;
|
|
1522
1522
|
}
|
|
1523
1523
|
|
|
1524
1524
|
return {
|
|
1525
|
-
...
|
|
1526
|
-
|
|
1525
|
+
...process.env,
|
|
1526
|
+
...(this.relayOptions.env ?? {}),
|
|
1527
|
+
...(this.relayApiKey ? { RELAY_API_KEY: this.relayApiKey } : {}),
|
|
1527
1528
|
};
|
|
1528
1529
|
}
|
|
1529
1530
|
|
|
@@ -2699,7 +2700,7 @@ export class WorkflowRunner {
|
|
|
2699
2700
|
this.log('API key resolved');
|
|
2700
2701
|
if (this.relayApiKeyAutoCreated && this.relayApiKey) {
|
|
2701
2702
|
this.log(`Workspace created — follow this run in Relaycast:`);
|
|
2702
|
-
this.log(` Observer: https://agentrelay.
|
|
2703
|
+
this.log(` Observer: https://agentrelay.com/observer?key=${this.relayApiKey}`);
|
|
2703
2704
|
this.log(` Channel: ${channel}`);
|
|
2704
2705
|
}
|
|
2705
2706
|
}
|
|
@@ -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://agentrelay.
|
|
60
|
+
console.log('Learn more: https://agentrelay.com/telemetry');
|
|
61
61
|
console.log('');
|
|
62
62
|
markNotified();
|
|
63
63
|
}
|
|
@@ -71,7 +71,7 @@ function showFirstRunNotice(): void {
|
|
|
71
71
|
console.log('');
|
|
72
72
|
console.log('Agent Relay collects anonymous usage data to improve the product.');
|
|
73
73
|
console.log('Run `agent-relay telemetry disable` to opt out.');
|
|
74
|
-
console.log('Learn more: https://agentrelay.
|
|
74
|
+
console.log('Learn more: https://agentrelay.com/telemetry');
|
|
75
75
|
console.log('');
|
|
76
76
|
|
|
77
77
|
markNotified();
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@agent-relay/trajectory",
|
|
3
|
-
"version": "4.0.
|
|
3
|
+
"version": "4.0.5",
|
|
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": "4.0.
|
|
25
|
+
"@agent-relay/config": "4.0.5"
|
|
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": "4.0.
|
|
3
|
+
"version": "4.0.5",
|
|
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": "4.0.
|
|
25
|
+
"@agent-relay/utils": "4.0.5"
|
|
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": "4.0.
|
|
3
|
+
"version": "4.0.5",
|
|
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": "4.0.
|
|
115
|
+
"@agent-relay/config": "4.0.5",
|
|
116
116
|
"compare-versions": "^6.1.1"
|
|
117
117
|
},
|
|
118
118
|
"publishConfig": {
|