agent-relay 3.0.2 → 3.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.
- package/README.md +8 -0
- package/bin/agent-relay-broker-linux-x64 +0 -0
- package/dist/index.cjs +273 -56
- package/dist/src/cli/commands/core.d.ts +2 -0
- package/dist/src/cli/commands/core.d.ts.map +1 -1
- package/dist/src/cli/commands/core.js +9 -2
- package/dist/src/cli/commands/core.js.map +1 -1
- package/dist/src/cli/lib/broker-lifecycle.d.ts.map +1 -1
- package/dist/src/cli/lib/broker-lifecycle.js +87 -28
- package/dist/src/cli/lib/broker-lifecycle.js.map +1 -1
- package/package.json +9 -9
- package/packages/acp-bridge/README.md +50 -67
- 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/README.md +78 -0
- package/packages/openclaw/bin/relay-openclaw.mjs +2 -0
- package/packages/openclaw/bridge/bridge.mjs +305 -0
- package/packages/openclaw/dist/__tests__/gateway-threads.test.d.ts +2 -0
- package/packages/openclaw/dist/__tests__/gateway-threads.test.d.ts.map +1 -0
- package/packages/openclaw/dist/__tests__/gateway-threads.test.js +320 -0
- package/packages/openclaw/dist/__tests__/gateway-threads.test.js.map +1 -0
- package/packages/openclaw/dist/__tests__/naming.test.d.ts +2 -0
- package/packages/openclaw/dist/__tests__/naming.test.d.ts.map +1 -0
- package/packages/openclaw/dist/__tests__/naming.test.js +21 -0
- package/packages/openclaw/dist/__tests__/naming.test.js.map +1 -0
- package/packages/openclaw/dist/__tests__/spawn-manager.test.d.ts +2 -0
- package/packages/openclaw/dist/__tests__/spawn-manager.test.d.ts.map +1 -0
- package/packages/openclaw/dist/__tests__/spawn-manager.test.js +126 -0
- package/packages/openclaw/dist/__tests__/spawn-manager.test.js.map +1 -0
- package/packages/openclaw/dist/auth/converter.d.ts +28 -0
- package/packages/openclaw/dist/auth/converter.d.ts.map +1 -0
- package/packages/openclaw/dist/auth/converter.js +64 -0
- package/packages/openclaw/dist/auth/converter.js.map +1 -0
- package/packages/openclaw/dist/cli.d.ts +2 -0
- package/packages/openclaw/dist/cli.d.ts.map +1 -0
- package/packages/openclaw/dist/cli.js +230 -0
- package/packages/openclaw/dist/cli.js.map +1 -0
- package/packages/openclaw/dist/config.d.ts +27 -0
- package/packages/openclaw/dist/config.d.ts.map +1 -0
- package/packages/openclaw/dist/config.js +97 -0
- package/packages/openclaw/dist/config.js.map +1 -0
- package/packages/openclaw/dist/control.d.ts +22 -0
- package/packages/openclaw/dist/control.d.ts.map +1 -0
- package/packages/openclaw/dist/control.js +58 -0
- package/packages/openclaw/dist/control.js.map +1 -0
- package/packages/openclaw/dist/gateway.d.ts +71 -0
- package/packages/openclaw/dist/gateway.d.ts.map +1 -0
- package/packages/openclaw/dist/gateway.js +785 -0
- package/packages/openclaw/dist/gateway.js.map +1 -0
- package/packages/openclaw/dist/identity/contract.d.ts +11 -0
- package/packages/openclaw/dist/identity/contract.d.ts.map +1 -0
- package/packages/openclaw/dist/identity/contract.js +40 -0
- package/packages/openclaw/dist/identity/contract.js.map +1 -0
- package/packages/openclaw/dist/identity/files.d.ts +33 -0
- package/packages/openclaw/dist/identity/files.d.ts.map +1 -0
- package/packages/openclaw/dist/identity/files.js +145 -0
- package/packages/openclaw/dist/identity/files.js.map +1 -0
- package/packages/openclaw/dist/identity/model.d.ts +11 -0
- package/packages/openclaw/dist/identity/model.d.ts.map +1 -0
- package/packages/openclaw/dist/identity/model.js +28 -0
- package/packages/openclaw/dist/identity/model.js.map +1 -0
- package/packages/openclaw/dist/identity/naming.d.ts +5 -0
- package/packages/openclaw/dist/identity/naming.d.ts.map +1 -0
- package/packages/openclaw/dist/identity/naming.js +7 -0
- package/packages/openclaw/dist/identity/naming.js.map +1 -0
- package/packages/openclaw/dist/index.d.ts +20 -0
- package/packages/openclaw/dist/index.d.ts.map +1 -0
- package/packages/openclaw/dist/index.js +27 -0
- package/packages/openclaw/dist/index.js.map +1 -0
- package/packages/openclaw/dist/inject.d.ts +14 -0
- package/packages/openclaw/dist/inject.d.ts.map +1 -0
- package/packages/openclaw/dist/inject.js +66 -0
- package/packages/openclaw/dist/inject.js.map +1 -0
- package/packages/openclaw/dist/mcp/server.d.ts +8 -0
- package/packages/openclaw/dist/mcp/server.d.ts.map +1 -0
- package/packages/openclaw/dist/mcp/server.js +105 -0
- package/packages/openclaw/dist/mcp/server.js.map +1 -0
- package/packages/openclaw/dist/mcp/tools.d.ts +17 -0
- package/packages/openclaw/dist/mcp/tools.d.ts.map +1 -0
- package/packages/openclaw/dist/mcp/tools.js +145 -0
- package/packages/openclaw/dist/mcp/tools.js.map +1 -0
- package/packages/openclaw/dist/runtime/openclaw-config.d.ts +20 -0
- package/packages/openclaw/dist/runtime/openclaw-config.d.ts.map +1 -0
- package/packages/openclaw/dist/runtime/openclaw-config.js +50 -0
- package/packages/openclaw/dist/runtime/openclaw-config.js.map +1 -0
- package/packages/openclaw/dist/runtime/patch.d.ts +24 -0
- package/packages/openclaw/dist/runtime/patch.d.ts.map +1 -0
- package/packages/openclaw/dist/runtime/patch.js +92 -0
- package/packages/openclaw/dist/runtime/patch.js.map +1 -0
- package/packages/openclaw/dist/runtime/setup.d.ts +26 -0
- package/packages/openclaw/dist/runtime/setup.d.ts.map +1 -0
- package/packages/openclaw/dist/runtime/setup.js +58 -0
- package/packages/openclaw/dist/runtime/setup.js.map +1 -0
- package/packages/openclaw/dist/setup.d.ts +29 -0
- package/packages/openclaw/dist/setup.d.ts.map +1 -0
- package/packages/openclaw/dist/setup.js +300 -0
- package/packages/openclaw/dist/setup.js.map +1 -0
- package/packages/openclaw/dist/spawn/docker.d.ts +58 -0
- package/packages/openclaw/dist/spawn/docker.d.ts.map +1 -0
- package/packages/openclaw/dist/spawn/docker.js +222 -0
- package/packages/openclaw/dist/spawn/docker.js.map +1 -0
- package/packages/openclaw/dist/spawn/manager.d.ts +45 -0
- package/packages/openclaw/dist/spawn/manager.d.ts.map +1 -0
- package/packages/openclaw/dist/spawn/manager.js +140 -0
- package/packages/openclaw/dist/spawn/manager.js.map +1 -0
- package/packages/openclaw/dist/spawn/process.d.ts +16 -0
- package/packages/openclaw/dist/spawn/process.d.ts.map +1 -0
- package/packages/openclaw/dist/spawn/process.js +241 -0
- package/packages/openclaw/dist/spawn/process.js.map +1 -0
- package/packages/openclaw/dist/spawn/types.d.ts +42 -0
- package/packages/openclaw/dist/spawn/types.d.ts.map +1 -0
- package/packages/openclaw/dist/spawn/types.js +2 -0
- package/packages/openclaw/dist/spawn/types.js.map +1 -0
- package/packages/openclaw/dist/types.d.ts +37 -0
- package/packages/openclaw/dist/types.d.ts.map +1 -0
- package/packages/openclaw/dist/types.js +2 -0
- package/packages/openclaw/dist/types.js.map +1 -0
- package/packages/openclaw/package.json +63 -0
- package/packages/openclaw/skill/SKILL.md +194 -0
- package/packages/openclaw/src/__tests__/gateway-threads.test.ts +384 -0
- package/packages/openclaw/src/__tests__/naming.test.ts +24 -0
- package/packages/openclaw/src/__tests__/spawn-manager.test.ts +152 -0
- package/packages/openclaw/src/auth/converter.ts +90 -0
- package/packages/openclaw/src/cli.ts +269 -0
- package/packages/openclaw/src/config.ts +124 -0
- package/packages/openclaw/src/control.ts +100 -0
- package/packages/openclaw/src/gateway.ts +941 -0
- package/packages/openclaw/src/identity/contract.ts +44 -0
- package/packages/openclaw/src/identity/files.ts +198 -0
- package/packages/openclaw/src/identity/model.ts +27 -0
- package/packages/openclaw/src/identity/naming.ts +6 -0
- package/packages/openclaw/src/index.ts +59 -0
- package/packages/openclaw/src/inject.ts +77 -0
- package/packages/openclaw/src/mcp/server.ts +121 -0
- package/packages/openclaw/src/mcp/tools.ts +174 -0
- package/packages/openclaw/src/runtime/openclaw-config.ts +64 -0
- package/packages/openclaw/src/runtime/patch.ts +103 -0
- package/packages/openclaw/src/runtime/setup.ts +89 -0
- package/packages/openclaw/src/setup.ts +336 -0
- package/packages/openclaw/src/spawn/docker.ts +261 -0
- package/packages/openclaw/src/spawn/manager.ts +181 -0
- package/packages/openclaw/src/spawn/process.ts +272 -0
- package/packages/openclaw/src/spawn/types.ts +43 -0
- package/packages/openclaw/src/types.ts +38 -0
- package/packages/openclaw/templates/SOUL.md.template +34 -0
- package/packages/openclaw/tsconfig.json +12 -0
- package/packages/policy/package.json +2 -2
- package/packages/sdk/README.md +169 -64
- package/packages/sdk/dist/__tests__/contract-fixtures.test.js +76 -9
- package/packages/sdk/dist/__tests__/contract-fixtures.test.js.map +1 -1
- package/packages/sdk/dist/__tests__/integration.test.js +5 -4
- package/packages/sdk/dist/__tests__/integration.test.js.map +1 -1
- package/packages/sdk/dist/client.d.ts +34 -3
- package/packages/sdk/dist/client.d.ts.map +1 -1
- package/packages/sdk/dist/client.js +120 -10
- package/packages/sdk/dist/client.js.map +1 -1
- package/packages/sdk/dist/protocol.d.ts +7 -1
- package/packages/sdk/dist/protocol.d.ts.map +1 -1
- package/packages/sdk/dist/relay.d.ts +47 -11
- package/packages/sdk/dist/relay.d.ts.map +1 -1
- package/packages/sdk/dist/relay.js +114 -23
- package/packages/sdk/dist/relay.js.map +1 -1
- package/packages/sdk/dist/workflows/runner.d.ts.map +1 -1
- package/packages/sdk/dist/workflows/runner.js +71 -36
- package/packages/sdk/dist/workflows/runner.js.map +1 -1
- package/packages/sdk/dist/workflows/types.d.ts +1 -1
- package/packages/sdk/dist/workflows/types.d.ts.map +1 -1
- package/packages/sdk/package.json +2 -2
- package/packages/sdk/src/__tests__/contract-fixtures.test.ts +88 -9
- package/packages/sdk/src/__tests__/error-scenarios.test.ts +1 -1
- package/packages/sdk/src/__tests__/idle-nudge.test.ts +205 -257
- package/packages/sdk/src/__tests__/integration.test.ts +5 -4
- package/packages/sdk/src/__tests__/orchestration-upgrades.test.ts +277 -13
- package/packages/sdk/src/__tests__/swarm-coordinator.test.ts +1 -0
- package/packages/sdk/src/__tests__/workflow-runner.test.ts +67 -7
- package/packages/sdk/src/__tests__/workflow-trajectory.test.ts +4 -5
- package/packages/sdk/src/client.ts +171 -14
- package/packages/sdk/src/examples/workflows/runner-idle-refactor.yaml +306 -0
- package/packages/sdk/src/protocol.ts +7 -2
- package/packages/sdk/src/relay.ts +196 -34
- package/packages/sdk/src/workflows/runner.ts +73 -42
- package/packages/sdk/src/workflows/schema.json +1 -1
- package/packages/sdk/src/workflows/types.ts +1 -1
- package/packages/sdk/vitest.config.ts +1 -0
- package/packages/sdk-py/README.md +89 -102
- package/packages/sdk-py/agent_relay/__init__.py +16 -19
- package/packages/sdk-py/pyproject.toml +5 -1
- package/packages/sdk-py/src/agent_relay/__init__.py +35 -1
- package/packages/sdk-py/src/agent_relay/client.py +776 -0
- package/packages/sdk-py/src/agent_relay/models.py +27 -0
- package/packages/sdk-py/src/agent_relay/protocol.py +114 -0
- package/packages/sdk-py/src/agent_relay/relay.py +860 -0
- package/packages/sdk-py/tests/test_relay_lifecycle_hooks.py +250 -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
- 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/packages/sdk/.trajectories/active/traj_1771875803391_84ca57b2.json +0 -50
- package/packages/sdk/.trajectories/active/traj_1771891934534_06504121.json +0 -50
- package/packages/sdk/.trajectories/active/traj_1771891957929_211afc4e.json +0 -50
- package/packages/sdk/.trajectories/active/traj_1771891982509_38c84638.json +0 -50
- package/packages/sdk/.trajectories/completed/traj_1771875803188_cd6d181c.json +0 -80
- package/packages/sdk/.trajectories/completed/traj_1771875803204_f2aeb8c8.json +0 -80
- package/packages/sdk/.trajectories/completed/traj_1771875803210_d65f3f1a.json +0 -80
- package/packages/sdk/.trajectories/completed/traj_1771875803218_e454a25d.json +0 -80
- package/packages/sdk/.trajectories/completed/traj_1771875803223_d7a64815.json +0 -80
- package/packages/sdk/.trajectories/completed/traj_1771875803227_7e56da5b.json +0 -80
- package/packages/sdk/.trajectories/completed/traj_1771875803235_4fbf93b4.json +0 -80
- package/packages/sdk/.trajectories/completed/traj_1771875803243_47931c71.json +0 -80
- package/packages/sdk/.trajectories/completed/traj_1771875803258_3816f3fe.json +0 -80
- package/packages/sdk/.trajectories/completed/traj_1771875803268_8061140e.json +0 -80
- package/packages/sdk/.trajectories/completed/traj_1771875803326_ae6f9c78.json +0 -80
- package/packages/sdk/.trajectories/completed/traj_1771875808396_cbde0a6c.json +0 -91
- package/packages/sdk/.trajectories/completed/traj_1771875812026_aa2442bb.json +0 -91
- package/packages/sdk/.trajectories/completed/traj_1771875815431_c2c656c5.json +0 -91
- package/packages/sdk/.trajectories/completed/traj_1771875818645_3a4dbf02.json +0 -91
- package/packages/sdk/.trajectories/completed/traj_1771891934403_24923c03.json +0 -80
- package/packages/sdk/.trajectories/completed/traj_1771891934421_dca16e24.json +0 -80
- package/packages/sdk/.trajectories/completed/traj_1771891934430_057706f7.json +0 -80
- package/packages/sdk/.trajectories/completed/traj_1771891934442_faf97382.json +0 -80
- package/packages/sdk/.trajectories/completed/traj_1771891934454_5542ecd5.json +0 -80
- package/packages/sdk/.trajectories/completed/traj_1771891934464_12202a08.json +0 -80
- package/packages/sdk/.trajectories/completed/traj_1771891934487_94378275.json +0 -80
- package/packages/sdk/.trajectories/completed/traj_1771891934503_ca728c13.json +0 -80
- package/packages/sdk/.trajectories/completed/traj_1771891934519_100af69a.json +0 -80
- package/packages/sdk/.trajectories/completed/traj_1771891934536_62ad39d9.json +0 -80
- package/packages/sdk/.trajectories/completed/traj_1771891934553_d6798a52.json +0 -80
- package/packages/sdk/.trajectories/completed/traj_1771891939537_541c8096.json +0 -91
- package/packages/sdk/.trajectories/completed/traj_1771891942985_36ab9a4d.json +0 -91
- package/packages/sdk/.trajectories/completed/traj_1771891946453_e8a6e05f.json +0 -91
- package/packages/sdk/.trajectories/completed/traj_1771891949838_5de0de84.json +0 -91
- package/packages/sdk/.trajectories/completed/traj_1771891957807_0ecfb4f4.json +0 -80
- package/packages/sdk/.trajectories/completed/traj_1771891957827_c4539239.json +0 -80
- package/packages/sdk/.trajectories/completed/traj_1771891957836_91168b48.json +0 -80
- package/packages/sdk/.trajectories/completed/traj_1771891957848_8c5cad0b.json +0 -80
- package/packages/sdk/.trajectories/completed/traj_1771891957857_0986b293.json +0 -80
- package/packages/sdk/.trajectories/completed/traj_1771891957872_8a3113af.json +0 -80
- package/packages/sdk/.trajectories/completed/traj_1771891957884_0bb85208.json +0 -80
- package/packages/sdk/.trajectories/completed/traj_1771891957892_86c75e2e.json +0 -80
- package/packages/sdk/.trajectories/completed/traj_1771891957907_98ca0e6f.json +0 -80
- package/packages/sdk/.trajectories/completed/traj_1771891957918_d9091231.json +0 -80
- package/packages/sdk/.trajectories/completed/traj_1771891957931_dcaf77ed.json +0 -80
- package/packages/sdk/.trajectories/completed/traj_1771891962931_eb1fdee2.json +0 -91
- package/packages/sdk/.trajectories/completed/traj_1771891966262_9061a93f.json +0 -91
- package/packages/sdk/.trajectories/completed/traj_1771891969915_1adaba19.json +0 -91
- package/packages/sdk/.trajectories/completed/traj_1771891973588_f08b79e9.json +0 -91
- package/packages/sdk/.trajectories/completed/traj_1771891982421_f1985bce.json +0 -80
- package/packages/sdk/.trajectories/completed/traj_1771891982432_e7a84163.json +0 -80
- package/packages/sdk/.trajectories/completed/traj_1771891982447_369b842a.json +0 -80
- package/packages/sdk/.trajectories/completed/traj_1771891982469_5fc45199.json +0 -80
- package/packages/sdk/.trajectories/completed/traj_1771891982495_454c7cb3.json +0 -80
- package/packages/sdk/.trajectories/completed/traj_1771891982514_08098e03.json +0 -80
- package/packages/sdk/.trajectories/completed/traj_1771891982526_b351d778.json +0 -80
- package/packages/sdk/.trajectories/completed/traj_1771891982533_fa542d83.json +0 -80
- package/packages/sdk/.trajectories/completed/traj_1771891982540_18ab24dc.json +0 -80
- package/packages/sdk/.trajectories/completed/traj_1771891982544_5b4fa163.json +0 -80
- package/packages/sdk/.trajectories/completed/traj_1771891982548_c13f089a.json +0 -80
- package/packages/sdk/.trajectories/completed/traj_1771891987510_23f6da1f.json +0 -91
- package/packages/sdk/.trajectories/completed/traj_1771891991466_912c2e04.json +0 -91
- package/packages/sdk/.trajectories/completed/traj_1771891994891_60604be2.json +0 -91
- package/packages/sdk/.trajectories/completed/traj_1771891998370_cfaf9b8b.json +0 -91
|
@@ -1,141 +1,128 @@
|
|
|
1
1
|
# Agent Relay Python SDK
|
|
2
2
|
|
|
3
|
-
Python SDK for
|
|
4
|
-
builder capabilities as the TypeScript workflow SDK.
|
|
3
|
+
Python SDK for real-time agent-to-agent communication. Spawn AI agents, send messages, and coordinate multi-agent workflows with a simple async API.
|
|
5
4
|
|
|
6
|
-
|
|
5
|
+
## Installation
|
|
7
6
|
|
|
8
7
|
```bash
|
|
9
|
-
agent-relay
|
|
8
|
+
pip install agent-relay-sdk
|
|
10
9
|
```
|
|
11
10
|
|
|
12
|
-
|
|
11
|
+
The SDK automatically downloads the broker binary on first use.
|
|
13
12
|
|
|
14
|
-
|
|
15
|
-
pip install agent-relay
|
|
16
|
-
```
|
|
13
|
+
## Requirements
|
|
17
14
|
|
|
18
|
-
|
|
15
|
+
- Python 3.10+
|
|
16
|
+
|
|
17
|
+
## Quick Start
|
|
19
18
|
|
|
20
19
|
```python
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
.
|
|
29
|
-
.
|
|
30
|
-
.
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
.
|
|
34
|
-
"
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
idle_threshold_secs=45,
|
|
39
|
-
retries=1,
|
|
20
|
+
import asyncio
|
|
21
|
+
from agent_relay import AgentRelay, Models
|
|
22
|
+
|
|
23
|
+
async def main():
|
|
24
|
+
relay = AgentRelay(channels=["dev"])
|
|
25
|
+
|
|
26
|
+
# Event hooks
|
|
27
|
+
relay.on_message_received = lambda msg: print(f"[{msg.from_name}]: {msg.text}")
|
|
28
|
+
relay.on_agent_ready = lambda agent: print(f" {agent.name} ready")
|
|
29
|
+
relay.on_agent_exited = lambda agent: print(f" {agent.name} exited")
|
|
30
|
+
|
|
31
|
+
# Spawn agents
|
|
32
|
+
await relay.claude.spawn(
|
|
33
|
+
name="Reviewer",
|
|
34
|
+
model=Models.Claude.OPUS,
|
|
35
|
+
channels=["dev"],
|
|
36
|
+
task="Review the PR and suggest improvements",
|
|
40
37
|
)
|
|
41
|
-
|
|
42
|
-
.
|
|
43
|
-
"
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
verification=VerificationCheck(type="output_contains", value="DONE"),
|
|
38
|
+
|
|
39
|
+
await relay.codex.spawn(
|
|
40
|
+
name="Builder",
|
|
41
|
+
model=Models.Codex.GPT_5_3_CODEX,
|
|
42
|
+
channels=["dev"],
|
|
43
|
+
task="Implement the suggested improvements",
|
|
48
44
|
)
|
|
49
|
-
.run()
|
|
50
|
-
)
|
|
51
|
-
```
|
|
52
45
|
|
|
53
|
-
|
|
46
|
+
# Wait for both agents to be ready
|
|
47
|
+
await asyncio.gather(
|
|
48
|
+
relay.wait_for_agent_ready("Reviewer"),
|
|
49
|
+
relay.wait_for_agent_ready("Builder"),
|
|
50
|
+
)
|
|
54
51
|
|
|
55
|
-
|
|
52
|
+
# Let agents collaborate, then shut down
|
|
53
|
+
await asyncio.sleep(600)
|
|
54
|
+
await relay.shutdown()
|
|
56
55
|
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
- `dag(...)`
|
|
56
|
+
asyncio.run(main())
|
|
57
|
+
```
|
|
60
58
|
|
|
61
|
-
|
|
62
|
-
from agent_relay import fan_out
|
|
63
|
-
|
|
64
|
-
builder = fan_out(
|
|
65
|
-
"parallel-analysis",
|
|
66
|
-
tasks=[
|
|
67
|
-
"Analyze backend modules and summarize risks",
|
|
68
|
-
"Analyze frontend modules and summarize risks",
|
|
69
|
-
],
|
|
70
|
-
synthesis_task="Synthesize both analyses into one prioritized action plan",
|
|
71
|
-
)
|
|
59
|
+
## API
|
|
72
60
|
|
|
73
|
-
|
|
74
|
-
|
|
61
|
+
### AgentRelay
|
|
62
|
+
|
|
63
|
+
The main entry point. Pass `channels` to subscribe to message channels.
|
|
75
64
|
|
|
76
65
|
```python
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
builder = pipeline(
|
|
80
|
-
"release-pipeline",
|
|
81
|
-
stages=[
|
|
82
|
-
PipelineStage(name="plan", task="Create release plan"),
|
|
83
|
-
PipelineStage(name="implement", task="Implement planned changes"),
|
|
84
|
-
PipelineStage(name="verify", task="Validate and produce release notes"),
|
|
85
|
-
],
|
|
86
|
-
)
|
|
66
|
+
relay = AgentRelay(channels=["dev", "planning"])
|
|
87
67
|
```
|
|
88
68
|
|
|
89
|
-
|
|
69
|
+
### Spawning Agents
|
|
90
70
|
|
|
91
|
-
|
|
71
|
+
Use runtime-specific spawners:
|
|
92
72
|
|
|
93
73
|
```python
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
74
|
+
await relay.claude.spawn(name="Agent1", model=Models.Claude.SONNET, channels=["dev"], task="...")
|
|
75
|
+
await relay.codex.spawn(name="Agent2", model=Models.Codex.GPT_5_3_CODEX, channels=["dev"], task="...")
|
|
76
|
+
await relay.gemini.spawn(name="Agent3", model=Models.Gemini.GEMINI_2_5_PRO, channels=["dev"], task="...")
|
|
77
|
+
|
|
78
|
+
worker = await relay.claude.spawn(
|
|
79
|
+
name="HookedWorker",
|
|
80
|
+
channels=["dev"],
|
|
81
|
+
# Lifecycle hooks can be sync or async callables.
|
|
82
|
+
on_start=lambda ctx: print(f"spawning {ctx['name']}"),
|
|
83
|
+
on_success=lambda ctx: print(f"spawned {ctx['name']} ({ctx['runtime']})"),
|
|
84
|
+
on_error=lambda ctx: print(f"failed to spawn {ctx['name']}: {ctx['error']}"),
|
|
85
|
+
)
|
|
98
86
|
|
|
99
|
-
|
|
100
|
-
"
|
|
101
|
-
|
|
87
|
+
await worker.release(
|
|
88
|
+
"done",
|
|
89
|
+
on_start=lambda ctx: print(f"releasing {ctx['name']}"),
|
|
90
|
+
on_success=lambda ctx: print(f"released {ctx['name']}"),
|
|
102
91
|
)
|
|
103
92
|
```
|
|
104
93
|
|
|
105
|
-
|
|
94
|
+
### Sending Messages
|
|
106
95
|
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
- `step:started`
|
|
112
|
-
- `step:completed`
|
|
113
|
-
- `step:failed`
|
|
114
|
-
- `step:skipped`
|
|
115
|
-
- `step:retrying`
|
|
116
|
-
- `step:nudged`
|
|
117
|
-
- `step:force-released`
|
|
96
|
+
```python
|
|
97
|
+
human = relay.system()
|
|
98
|
+
await human.send_message(to="Agent1", text="Please start the analysis")
|
|
99
|
+
```
|
|
118
100
|
|
|
119
|
-
|
|
101
|
+
### Event Hooks
|
|
120
102
|
|
|
121
103
|
```python
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
trajectories=False, # override YAML trajectory config at runtime
|
|
129
|
-
vars={"target": "staging"},
|
|
130
|
-
),
|
|
131
|
-
)
|
|
104
|
+
relay.on_message_received = lambda msg: ... # New message
|
|
105
|
+
relay.on_agent_ready = lambda agent: ... # Agent connected
|
|
106
|
+
relay.on_agent_exited = lambda agent: ... # Agent exited
|
|
107
|
+
relay.on_agent_spawned = lambda agent: ... # Agent spawned
|
|
108
|
+
relay.on_worker_output = lambda data: ... # Agent output
|
|
109
|
+
relay.on_agent_idle = lambda agent: ... # Agent idle
|
|
132
110
|
```
|
|
133
111
|
|
|
134
|
-
|
|
112
|
+
### Models
|
|
135
113
|
|
|
136
|
-
|
|
137
|
-
|
|
114
|
+
```python
|
|
115
|
+
Models.Claude.OPUS
|
|
116
|
+
Models.Claude.SONNET
|
|
117
|
+
Models.Claude.HAIKU
|
|
118
|
+
|
|
119
|
+
Models.Codex.GPT_5_2_CODEX
|
|
120
|
+
Models.Codex.GPT_5_3_CODEX
|
|
121
|
+
|
|
122
|
+
Models.Gemini.GEMINI_2_5_PRO
|
|
123
|
+
Models.Gemini.GEMINI_2_5_FLASH
|
|
124
|
+
```
|
|
138
125
|
|
|
139
126
|
## License
|
|
140
127
|
|
|
141
|
-
Apache-2.0
|
|
128
|
+
Apache-2.0
|
|
@@ -1,21 +1,18 @@
|
|
|
1
|
-
"""Agent Relay Python SDK
|
|
1
|
+
"""Agent Relay Python SDK — re-exports from src/agent_relay/.
|
|
2
2
|
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
CLI_REGISTRY,
|
|
7
|
-
DEFAULT_MODELS,
|
|
8
|
-
Models,
|
|
9
|
-
ModelOptions,
|
|
10
|
-
SwarmPatterns,
|
|
11
|
-
)
|
|
3
|
+
This directory exists for backward compatibility with codegen scripts.
|
|
4
|
+
The real package source lives in src/agent_relay/.
|
|
5
|
+
"""
|
|
12
6
|
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
7
|
+
import importlib.util as _util
|
|
8
|
+
import sys as _sys
|
|
9
|
+
from pathlib import Path as _Path
|
|
10
|
+
|
|
11
|
+
# Load the real package from src/agent_relay/ and replace this module
|
|
12
|
+
_src_init = _Path(__file__).resolve().parent.parent / "src" / "agent_relay" / "__init__.py"
|
|
13
|
+
_spec = _util.spec_from_file_location("agent_relay", str(_src_init),
|
|
14
|
+
submodule_search_locations=[str(_src_init.parent)])
|
|
15
|
+
assert _spec is not None and _spec.loader is not None, f"Could not load {_src_init}"
|
|
16
|
+
_real = _util.module_from_spec(_spec)
|
|
17
|
+
_sys.modules[__name__] = _real
|
|
18
|
+
_spec.loader.exec_module(_real)
|
|
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
|
|
|
4
4
|
|
|
5
5
|
[project]
|
|
6
6
|
name = "agent-relay-sdk"
|
|
7
|
-
version = "3.
|
|
7
|
+
version = "3.1.1"
|
|
8
8
|
description = "Python SDK for Agent Relay workflows"
|
|
9
9
|
readme = "README.md"
|
|
10
10
|
license = "Apache-2.0"
|
|
@@ -21,3 +21,7 @@ dev = [
|
|
|
21
21
|
|
|
22
22
|
[tool.hatch.build.targets.wheel]
|
|
23
23
|
packages = ["src/agent_relay"]
|
|
24
|
+
|
|
25
|
+
[tool.pytest.ini_options]
|
|
26
|
+
pythonpath = ["src"]
|
|
27
|
+
asyncio_mode = "auto"
|
|
@@ -1,4 +1,20 @@
|
|
|
1
|
-
"""Agent Relay Python SDK —
|
|
1
|
+
"""Agent Relay Python SDK — direct spawn/message API and workflow builder."""
|
|
2
|
+
|
|
3
|
+
# ── Primary API: Direct spawn/message (matches TypeScript SDK) ────────────────
|
|
4
|
+
|
|
5
|
+
from .relay import AgentRelay, Agent, AgentSpawner, HumanHandle, Message, SpawnOptions
|
|
6
|
+
from .models import Models
|
|
7
|
+
from .client import AgentRelayClient, AgentRelayProtocolError, AgentRelayProcessError
|
|
8
|
+
from .protocol import (
|
|
9
|
+
PROTOCOL_VERSION,
|
|
10
|
+
AgentRuntime,
|
|
11
|
+
AgentSpec,
|
|
12
|
+
BrokerEvent,
|
|
13
|
+
ProtocolEnvelope,
|
|
14
|
+
RestartPolicy as ProtocolRestartPolicy,
|
|
15
|
+
)
|
|
16
|
+
|
|
17
|
+
# ── Secondary API: Workflow builder (backward compatibility) ──────────────────
|
|
2
18
|
|
|
3
19
|
from .builder import workflow, WorkflowBuilder, run_yaml
|
|
4
20
|
from .templates import (
|
|
@@ -52,6 +68,24 @@ from .types import (
|
|
|
52
68
|
)
|
|
53
69
|
|
|
54
70
|
__all__ = [
|
|
71
|
+
# Primary API
|
|
72
|
+
"AgentRelay",
|
|
73
|
+
"Agent",
|
|
74
|
+
"AgentSpawner",
|
|
75
|
+
"HumanHandle",
|
|
76
|
+
"Message",
|
|
77
|
+
"SpawnOptions",
|
|
78
|
+
"Models",
|
|
79
|
+
"AgentRelayClient",
|
|
80
|
+
"AgentRelayProtocolError",
|
|
81
|
+
"AgentRelayProcessError",
|
|
82
|
+
"PROTOCOL_VERSION",
|
|
83
|
+
"AgentRuntime",
|
|
84
|
+
"AgentSpec",
|
|
85
|
+
"BrokerEvent",
|
|
86
|
+
"ProtocolEnvelope",
|
|
87
|
+
"ProtocolRestartPolicy",
|
|
88
|
+
# Workflow builder (backward compat)
|
|
55
89
|
"workflow",
|
|
56
90
|
"WorkflowBuilder",
|
|
57
91
|
"run_yaml",
|