agent-relay 3.0.2 → 3.1.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/README.md +8 -0
- 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 +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 +8 -8
- 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/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/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.0
|
|
7
|
+
version = "3.1.0"
|
|
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",
|