agent-relay 3.1.19 → 3.1.20
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 +13 -1
- 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 +435 -190
- package/dist/src/cli/bootstrap.js +0 -15
- package/dist/src/cli/bootstrap.js.map +1 -1
- package/dist/src/cli/commands/agent-management.d.ts +1 -0
- package/dist/src/cli/commands/agent-management.d.ts.map +1 -1
- package/dist/src/cli/commands/agent-management.js +235 -16
- package/dist/src/cli/commands/agent-management.js.map +1 -1
- package/dist/src/cli/commands/core.js +1 -1
- package/dist/src/cli/commands/core.js.map +1 -1
- package/dist/src/cli/index.d.ts.map +1 -1
- package/dist/src/cli/index.js +13 -1
- package/dist/src/cli/index.js.map +1 -1
- package/dist/src/cli/lib/broker-lifecycle.d.ts.map +1 -1
- package/dist/src/cli/lib/broker-lifecycle.js +3 -5
- package/dist/src/cli/lib/broker-lifecycle.js.map +1 -1
- package/dist/src/cli/lib/connect-daytona.js +2 -2
- package/dist/src/cli/lib/connect-daytona.js.map +1 -1
- package/install.sh +9 -3
- package/package.json +13 -13
- package/packages/acp-bridge/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/dist/cli.js +79 -2
- package/packages/openclaw/dist/cli.js.map +1 -1
- package/packages/openclaw/dist/config.d.ts +28 -1
- package/packages/openclaw/dist/config.d.ts.map +1 -1
- package/packages/openclaw/dist/config.js +145 -0
- package/packages/openclaw/dist/config.js.map +1 -1
- package/packages/openclaw/dist/index.d.ts +2 -2
- package/packages/openclaw/dist/index.d.ts.map +1 -1
- package/packages/openclaw/dist/index.js +1 -1
- package/packages/openclaw/dist/index.js.map +1 -1
- package/packages/openclaw/dist/setup.d.ts.map +1 -1
- package/packages/openclaw/dist/setup.js +24 -1
- package/packages/openclaw/dist/setup.js.map +1 -1
- package/packages/openclaw/dist/types.d.ts +23 -0
- package/packages/openclaw/dist/types.d.ts.map +1 -1
- package/packages/openclaw/package.json +2 -2
- package/packages/openclaw/skill/SKILL.md +46 -0
- package/packages/openclaw/src/cli.ts +90 -2
- package/packages/openclaw/src/config.ts +165 -1
- package/packages/openclaw/src/index.ts +7 -1
- package/packages/openclaw/src/setup.ts +26 -1
- package/packages/openclaw/src/types.ts +25 -0
- package/packages/policy/package.json +2 -2
- package/packages/sdk/dist/__tests__/integration.test.js +35 -0
- package/packages/sdk/dist/__tests__/integration.test.js.map +1 -1
- package/packages/sdk/dist/client.d.ts +9 -0
- package/packages/sdk/dist/client.d.ts.map +1 -1
- package/packages/sdk/dist/client.js +33 -22
- package/packages/sdk/dist/client.js.map +1 -1
- package/packages/sdk/dist/protocol.d.ts +1 -0
- package/packages/sdk/dist/protocol.d.ts.map +1 -1
- package/packages/sdk/dist/relay.d.ts +8 -0
- package/packages/sdk/dist/relay.d.ts.map +1 -1
- package/packages/sdk/dist/relay.js +50 -5
- package/packages/sdk/dist/relay.js.map +1 -1
- package/packages/sdk/dist/workflows/cli.js +2 -0
- package/packages/sdk/dist/workflows/cli.js.map +1 -1
- package/packages/sdk/dist/workflows/runner.d.ts +11 -0
- package/packages/sdk/dist/workflows/runner.d.ts.map +1 -1
- package/packages/sdk/dist/workflows/runner.js +350 -167
- package/packages/sdk/dist/workflows/runner.js.map +1 -1
- package/packages/sdk/dist/workflows/trajectory.d.ts +6 -1
- package/packages/sdk/dist/workflows/trajectory.d.ts.map +1 -1
- package/packages/sdk/dist/workflows/trajectory.js +16 -2
- package/packages/sdk/dist/workflows/trajectory.js.map +1 -1
- package/packages/sdk/package.json +2 -2
- package/packages/sdk/src/__tests__/integration.test.ts +49 -0
- package/packages/sdk/src/__tests__/orchestration-upgrades.test.ts +50 -1
- package/packages/sdk/src/client.ts +44 -21
- package/packages/sdk/src/protocol.ts +1 -1
- package/packages/sdk/src/relay.ts +70 -5
- package/packages/sdk/src/workflows/cli.ts +2 -0
- package/packages/sdk/src/workflows/runner.ts +414 -185
- package/packages/sdk/src/workflows/trajectory.ts +22 -2
- package/packages/sdk-py/pyproject.toml +1 -1
- package/packages/sdk-py/src/agent_relay/client.py +18 -1
- package/packages/sdk-py/src/agent_relay/relay.py +4 -0
- package/packages/sdk-py/src/agent_relay/types.py +4 -0
- package/packages/telemetry/package.json +1 -1
- package/packages/trajectory/package.json +2 -2
- package/packages/user-directory/package.json +2 -2
- package/packages/utils/package.json +2 -2
|
@@ -182,7 +182,7 @@ export class WorkflowTrajectory {
|
|
|
182
182
|
id,
|
|
183
183
|
version: 1,
|
|
184
184
|
task: {
|
|
185
|
-
title:
|
|
185
|
+
title: workflowName,
|
|
186
186
|
source: { system: 'workflow-runner', id: this.runId },
|
|
187
187
|
},
|
|
188
188
|
status: 'active',
|
|
@@ -251,6 +251,9 @@ export class WorkflowTrajectory {
|
|
|
251
251
|
await this.registerAgent(participants.reviewer, 'reviewer');
|
|
252
252
|
}
|
|
253
253
|
|
|
254
|
+
this.closeCurrentChapter();
|
|
255
|
+
this.openChapter(`Execution: ${step.name}`, agent);
|
|
256
|
+
|
|
254
257
|
// Capture the step's purpose: first non-empty sentence of the task
|
|
255
258
|
const intent = step.task
|
|
256
259
|
? step.task
|
|
@@ -479,12 +482,29 @@ export class WorkflowTrajectory {
|
|
|
479
482
|
}
|
|
480
483
|
|
|
481
484
|
/** Abandon the trajectory. */
|
|
482
|
-
async abandon(
|
|
485
|
+
async abandon(
|
|
486
|
+
reason: string,
|
|
487
|
+
meta?: { summary?: string; confidence?: number; learnings?: string[]; challenges?: string[] }
|
|
488
|
+
): Promise<void> {
|
|
483
489
|
if (!this.enabled || !this.trajectory) return;
|
|
484
490
|
|
|
491
|
+
const elapsed = Date.now() - this.startTime;
|
|
492
|
+
const elapsedStr =
|
|
493
|
+
elapsed > 60_000 ? `${Math.round(elapsed / 60_000)} minutes` : `${Math.round(elapsed / 1_000)} seconds`;
|
|
494
|
+
const summary = meta?.summary ?? `Workflow abandoned: ${reason}`;
|
|
495
|
+
|
|
496
|
+
this.openRetrospective();
|
|
497
|
+
this.addEvent('reflection', `${summary} (abandoned after ${elapsedStr})`, 'high');
|
|
485
498
|
this.addEvent('error', `Workflow abandoned: ${reason}`, 'high');
|
|
486
499
|
this.trajectory.status = 'abandoned';
|
|
487
500
|
this.trajectory.completedAt = new Date().toISOString();
|
|
501
|
+
this.trajectory.retrospective = {
|
|
502
|
+
summary,
|
|
503
|
+
approach: `${this.swarmPattern} workflow (${this.trajectory.agents.filter((a) => a.role !== 'workflow-runner').length} agents)`,
|
|
504
|
+
confidence: meta?.confidence ?? 0,
|
|
505
|
+
learnings: meta?.learnings,
|
|
506
|
+
challenges: meta?.challenges,
|
|
507
|
+
};
|
|
488
508
|
|
|
489
509
|
this.closeCurrentChapter();
|
|
490
510
|
await this.flush();
|
|
@@ -167,8 +167,16 @@ def _install_broker_binary() -> str:
|
|
|
167
167
|
target_path.stat().st_mode | stat.S_IXUSR | stat.S_IXGRP | stat.S_IXOTH
|
|
168
168
|
)
|
|
169
169
|
|
|
170
|
-
# macOS: re-sign to avoid Gatekeeper issues
|
|
170
|
+
# macOS: strip quarantine and re-sign to avoid Gatekeeper issues
|
|
171
171
|
if platform.system() == "Darwin":
|
|
172
|
+
try:
|
|
173
|
+
subprocess.run(
|
|
174
|
+
["xattr", "-d", "com.apple.quarantine", str(target_path)],
|
|
175
|
+
capture_output=True,
|
|
176
|
+
timeout=10,
|
|
177
|
+
)
|
|
178
|
+
except Exception:
|
|
179
|
+
pass # Non-fatal — attribute may not exist
|
|
172
180
|
try:
|
|
173
181
|
subprocess.run(
|
|
174
182
|
["codesign", "--force", "--sign", "-", str(target_path)],
|
|
@@ -557,6 +565,7 @@ class AgentRelayClient:
|
|
|
557
565
|
idle_threshold_secs: Optional[int] = None,
|
|
558
566
|
restart_policy: Optional[dict[str, Any]] = None,
|
|
559
567
|
continue_from: Optional[str] = None,
|
|
568
|
+
skip_relay_prompt: Optional[bool] = None,
|
|
560
569
|
) -> dict[str, Any]:
|
|
561
570
|
await self.start_client()
|
|
562
571
|
built_args = _build_pty_args_with_model(cli, args or [], model)
|
|
@@ -585,6 +594,8 @@ class AgentRelayClient:
|
|
|
585
594
|
request_payload["idle_threshold_secs"] = idle_threshold_secs
|
|
586
595
|
if continue_from is not None:
|
|
587
596
|
request_payload["continue_from"] = continue_from
|
|
597
|
+
if skip_relay_prompt is not None:
|
|
598
|
+
request_payload["skip_relay_prompt"] = skip_relay_prompt
|
|
588
599
|
return await self._request_ok("spawn_agent", request_payload)
|
|
589
600
|
|
|
590
601
|
async def spawn_headless(
|
|
@@ -595,6 +606,7 @@ class AgentRelayClient:
|
|
|
595
606
|
args: Optional[list[str]] = None,
|
|
596
607
|
channels: Optional[list[str]] = None,
|
|
597
608
|
task: Optional[str] = None,
|
|
609
|
+
skip_relay_prompt: Optional[bool] = None,
|
|
598
610
|
) -> dict[str, Any]:
|
|
599
611
|
await self.start_client()
|
|
600
612
|
agent = AgentSpec(
|
|
@@ -607,6 +619,8 @@ class AgentRelayClient:
|
|
|
607
619
|
request_payload: dict[str, Any] = {"agent": agent.to_dict()}
|
|
608
620
|
if task is not None:
|
|
609
621
|
request_payload["initial_task"] = task
|
|
622
|
+
if skip_relay_prompt is not None:
|
|
623
|
+
request_payload["skip_relay_prompt"] = skip_relay_prompt
|
|
610
624
|
return await self._request_ok("spawn_agent", request_payload)
|
|
611
625
|
|
|
612
626
|
async def spawn_provider(
|
|
@@ -626,6 +640,7 @@ class AgentRelayClient:
|
|
|
626
640
|
idle_threshold_secs: Optional[int] = None,
|
|
627
641
|
restart_policy: Optional[dict[str, Any]] = None,
|
|
628
642
|
continue_from: Optional[str] = None,
|
|
643
|
+
skip_relay_prompt: Optional[bool] = None,
|
|
629
644
|
) -> dict[str, Any]:
|
|
630
645
|
resolved_transport: AgentTransport = transport or (
|
|
631
646
|
"headless" if provider == "opencode" else "pty"
|
|
@@ -645,6 +660,7 @@ class AgentRelayClient:
|
|
|
645
660
|
args=args,
|
|
646
661
|
channels=channels,
|
|
647
662
|
task=task,
|
|
663
|
+
skip_relay_prompt=skip_relay_prompt,
|
|
648
664
|
)
|
|
649
665
|
|
|
650
666
|
return await self.spawn_pty(
|
|
@@ -661,6 +677,7 @@ class AgentRelayClient:
|
|
|
661
677
|
idle_threshold_secs=idle_threshold_secs,
|
|
662
678
|
restart_policy=restart_policy,
|
|
663
679
|
continue_from=continue_from,
|
|
680
|
+
skip_relay_prompt=skip_relay_prompt,
|
|
664
681
|
)
|
|
665
682
|
|
|
666
683
|
async def spawn_claude(self, **kwargs: Any) -> dict[str, Any]:
|
|
@@ -51,6 +51,7 @@ class SpawnOptions:
|
|
|
51
51
|
shadow_mode: Optional[str] = None
|
|
52
52
|
idle_threshold_secs: Optional[int] = None
|
|
53
53
|
restart_policy: Optional[dict[str, Any]] = None
|
|
54
|
+
skip_relay_prompt: Optional[bool] = None
|
|
54
55
|
on_start: LifecycleHook = None
|
|
55
56
|
on_success: LifecycleHook = None
|
|
56
57
|
on_error: LifecycleHook = None
|
|
@@ -304,6 +305,7 @@ class AgentSpawner:
|
|
|
304
305
|
task: Optional[str] = None,
|
|
305
306
|
model: Optional[str] = None,
|
|
306
307
|
cwd: Optional[str] = None,
|
|
308
|
+
skip_relay_prompt: Optional[bool] = None,
|
|
307
309
|
on_start: LifecycleHook = None,
|
|
308
310
|
on_success: LifecycleHook = None,
|
|
309
311
|
on_error: LifecycleHook = None,
|
|
@@ -332,6 +334,7 @@ class AgentSpawner:
|
|
|
332
334
|
task=task,
|
|
333
335
|
model=model,
|
|
334
336
|
cwd=cwd,
|
|
337
|
+
skip_relay_prompt=skip_relay_prompt,
|
|
335
338
|
)
|
|
336
339
|
except Exception as error:
|
|
337
340
|
await self._relay._invoke_lifecycle_hook(
|
|
@@ -512,6 +515,7 @@ class AgentRelay:
|
|
|
512
515
|
shadow_mode=opts.shadow_mode,
|
|
513
516
|
idle_threshold_secs=opts.idle_threshold_secs,
|
|
514
517
|
restart_policy=opts.restart_policy,
|
|
518
|
+
skip_relay_prompt=opts.skip_relay_prompt,
|
|
515
519
|
)
|
|
516
520
|
except Exception as error:
|
|
517
521
|
await self._invoke_lifecycle_hook(
|
|
@@ -491,6 +491,8 @@ class StepCompletedEvent:
|
|
|
491
491
|
run_id: str = ""
|
|
492
492
|
step_name: str = ""
|
|
493
493
|
output: str | None = None
|
|
494
|
+
exit_code: int | None = None
|
|
495
|
+
exit_signal: str | None = None
|
|
494
496
|
|
|
495
497
|
|
|
496
498
|
@dataclass(frozen=True)
|
|
@@ -499,6 +501,8 @@ class StepFailedEvent:
|
|
|
499
501
|
run_id: str = ""
|
|
500
502
|
step_name: str = ""
|
|
501
503
|
error: str = ""
|
|
504
|
+
exit_code: int | None = None
|
|
505
|
+
exit_signal: str | None = None
|
|
502
506
|
|
|
503
507
|
|
|
504
508
|
@dataclass(frozen=True)
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@agent-relay/trajectory",
|
|
3
|
-
"version": "3.1.
|
|
3
|
+
"version": "3.1.20",
|
|
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": "3.1.
|
|
25
|
+
"@agent-relay/config": "3.1.20"
|
|
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.1.
|
|
3
|
+
"version": "3.1.20",
|
|
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": "3.1.
|
|
25
|
+
"@agent-relay/utils": "3.1.20"
|
|
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.1.
|
|
3
|
+
"version": "3.1.20",
|
|
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": "3.1.
|
|
115
|
+
"@agent-relay/config": "3.1.20",
|
|
116
116
|
"compare-versions": "^6.1.1"
|
|
117
117
|
},
|
|
118
118
|
"publishConfig": {
|