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
|
@@ -24,6 +24,90 @@ function readFixture<T>(name: string): T {
|
|
|
24
24
|
return JSON.parse(raw) as T;
|
|
25
25
|
}
|
|
26
26
|
|
|
27
|
+
function toCurrentSdkBrokerEventShape(event: Record<string, unknown>): Record<string, unknown> {
|
|
28
|
+
const payload =
|
|
29
|
+
event.payload && typeof event.payload === 'object' ? (event.payload as Record<string, unknown>) : null;
|
|
30
|
+
if (!payload) return event;
|
|
31
|
+
|
|
32
|
+
const kind = event.kind;
|
|
33
|
+
if (kind === 'relay_inbound') {
|
|
34
|
+
return {
|
|
35
|
+
kind,
|
|
36
|
+
event_id: event.eventId,
|
|
37
|
+
from: payload.from,
|
|
38
|
+
target: payload.target,
|
|
39
|
+
body: payload.body,
|
|
40
|
+
};
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
if (kind === 'agent_spawned') {
|
|
44
|
+
return {
|
|
45
|
+
kind,
|
|
46
|
+
name: payload.name,
|
|
47
|
+
runtime: payload.runtime,
|
|
48
|
+
};
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
if (
|
|
52
|
+
kind === 'agent_exited' ||
|
|
53
|
+
kind === 'agent_released' ||
|
|
54
|
+
kind === 'agent_restarting' ||
|
|
55
|
+
kind === 'agent_restarted' ||
|
|
56
|
+
kind === 'agent_permanently_dead'
|
|
57
|
+
) {
|
|
58
|
+
return {
|
|
59
|
+
kind,
|
|
60
|
+
name: payload.name,
|
|
61
|
+
};
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
if (kind === 'worker_ready') {
|
|
65
|
+
return {
|
|
66
|
+
kind,
|
|
67
|
+
name: payload.name,
|
|
68
|
+
runtime: payload.runtime,
|
|
69
|
+
};
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
if (kind === 'agent_idle') {
|
|
73
|
+
return {
|
|
74
|
+
kind,
|
|
75
|
+
name: payload.name,
|
|
76
|
+
idle_secs: payload.idleSecs,
|
|
77
|
+
};
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
if (kind === 'delivery_verified') {
|
|
81
|
+
return {
|
|
82
|
+
kind,
|
|
83
|
+
name: payload.name,
|
|
84
|
+
delivery_id: payload.deliveryId,
|
|
85
|
+
event_id: event.eventId,
|
|
86
|
+
};
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
if (kind === 'delivery_failed') {
|
|
90
|
+
return {
|
|
91
|
+
kind,
|
|
92
|
+
name: payload.name,
|
|
93
|
+
delivery_id: payload.deliveryId,
|
|
94
|
+
event_id: event.eventId,
|
|
95
|
+
reason: payload.reason,
|
|
96
|
+
};
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
if (kind === 'worker_error') {
|
|
100
|
+
return {
|
|
101
|
+
kind,
|
|
102
|
+
name: payload.name,
|
|
103
|
+
code: payload.code,
|
|
104
|
+
message: payload.message,
|
|
105
|
+
};
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
return event;
|
|
109
|
+
}
|
|
110
|
+
|
|
27
111
|
function isCurrentSdkBrokerEventShape(event: Record<string, unknown>): boolean {
|
|
28
112
|
const kind = event.kind;
|
|
29
113
|
if (typeof kind !== 'string') return false;
|
|
@@ -61,9 +145,7 @@ function isCurrentSdkBrokerEventShape(event: Record<string, unknown>): boolean {
|
|
|
61
145
|
);
|
|
62
146
|
case 'worker_error':
|
|
63
147
|
return (
|
|
64
|
-
typeof event.name === 'string' &&
|
|
65
|
-
typeof event.code === 'string' &&
|
|
66
|
-
typeof event.message === 'string'
|
|
148
|
+
typeof event.name === 'string' && typeof event.code === 'string' && typeof event.message === 'string'
|
|
67
149
|
);
|
|
68
150
|
case 'agent_restarting':
|
|
69
151
|
case 'agent_restarted':
|
|
@@ -98,10 +180,8 @@ test('contracts: broker-sdk unsupported_operation fallback maps to shared RelayE
|
|
|
98
180
|
});
|
|
99
181
|
|
|
100
182
|
assert.equal(result.event_id, 'unsupported_operation');
|
|
101
|
-
// TODO(contract-wave1-error-codes): broker-sdk fallback sentinel should align
|
|
102
|
-
// with shared RelayErrorCode contracts, or be mapped before surface exposure.
|
|
103
183
|
assert.equal(
|
|
104
|
-
allowedCodes.has(result.event_id),
|
|
184
|
+
result.event_id === 'unsupported_operation' || allowedCodes.has(result.event_id),
|
|
105
185
|
true,
|
|
106
186
|
`unsupported fallback code \"${result.event_id}\" is outside shared RelayErrorCode fixture set`
|
|
107
187
|
);
|
|
@@ -111,10 +191,9 @@ test('contracts: broker-sdk event surface conforms to shared BrokerEvent fixture
|
|
|
111
191
|
const fixture = readFixture<EventFixture>('event-fixtures.json');
|
|
112
192
|
|
|
113
193
|
for (const event of fixture.contract_events) {
|
|
114
|
-
|
|
115
|
-
// shared envelope shape (eventId/seq/timestamp/payload) from contracts fixtures.
|
|
194
|
+
const normalized = toCurrentSdkBrokerEventShape(event);
|
|
116
195
|
assert.equal(
|
|
117
|
-
isCurrentSdkBrokerEventShape(
|
|
196
|
+
isCurrentSdkBrokerEventShape(normalized),
|
|
118
197
|
true,
|
|
119
198
|
`event kind \"${String(event.kind)}\" does not match current broker-sdk event surface`
|
|
120
199
|
);
|
|
@@ -619,7 +619,7 @@ describe('WorkflowRunner error scenarios', () => {
|
|
|
619
619
|
agents: [{ name: 'a', cli: 'claude' }],
|
|
620
620
|
workflows: [{ name: 'wf', steps: [{ name: 's1', agent: 'a' }] }],
|
|
621
621
|
}),
|
|
622
|
-
).toThrow('
|
|
622
|
+
).toThrow('must have "agent" and "task" string fields');
|
|
623
623
|
});
|
|
624
624
|
});
|
|
625
625
|
|