agent-relay 2.2.23 → 2.3.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.
Files changed (133) hide show
  1. package/dist/index.cjs +199 -3
  2. package/package.json +64 -21
  3. package/packages/acp-bridge/package.json +2 -2
  4. package/packages/api-types/package.json +1 -1
  5. package/packages/benchmark/package.json +5 -5
  6. package/packages/bridge/package.json +7 -7
  7. package/packages/cli-tester/package.json +1 -1
  8. package/packages/config/package.json +2 -2
  9. package/packages/continuity/package.json +2 -2
  10. package/packages/daemon/dist/cloud-sync.d.ts +13 -1
  11. package/packages/daemon/dist/cloud-sync.d.ts.map +1 -1
  12. package/packages/daemon/dist/cloud-sync.js +169 -5
  13. package/packages/daemon/dist/cloud-sync.js.map +1 -1
  14. package/packages/daemon/dist/server.d.ts +5 -0
  15. package/packages/daemon/dist/server.d.ts.map +1 -1
  16. package/packages/daemon/dist/server.js +50 -0
  17. package/packages/daemon/dist/server.js.map +1 -1
  18. package/packages/daemon/package.json +12 -12
  19. package/packages/daemon/src/cloud-sync.ts +201 -5
  20. package/packages/daemon/src/server.ts +61 -0
  21. package/packages/hooks/package.json +4 -4
  22. package/packages/mcp/package.json +5 -5
  23. package/packages/memory/package.json +2 -2
  24. package/packages/policy/package.json +2 -2
  25. package/packages/protocol/package.json +1 -1
  26. package/packages/resiliency/package.json +1 -1
  27. package/packages/sdk/dist/client.d.ts +1 -1
  28. package/packages/sdk/dist/client.js +2 -2
  29. package/packages/sdk/package.json +3 -3
  30. package/packages/sdk/src/client.ts +2 -2
  31. package/packages/sdk-ts/README.md +65 -0
  32. package/packages/sdk-ts/dist/__tests__/integration.test.d.ts +2 -0
  33. package/packages/sdk-ts/dist/__tests__/integration.test.d.ts.map +1 -0
  34. package/packages/sdk-ts/dist/__tests__/integration.test.js +139 -0
  35. package/packages/sdk-ts/dist/__tests__/integration.test.js.map +1 -0
  36. package/packages/sdk-ts/dist/__tests__/quickstart.test.d.ts +2 -0
  37. package/packages/sdk-ts/dist/__tests__/quickstart.test.d.ts.map +1 -0
  38. package/packages/sdk-ts/dist/__tests__/quickstart.test.js +176 -0
  39. package/packages/sdk-ts/dist/__tests__/quickstart.test.js.map +1 -0
  40. package/packages/sdk-ts/dist/browser.d.ts +16 -0
  41. package/packages/sdk-ts/dist/browser.d.ts.map +1 -0
  42. package/packages/sdk-ts/dist/browser.js +19 -0
  43. package/packages/sdk-ts/dist/browser.js.map +1 -0
  44. package/packages/sdk-ts/dist/client.d.ts +91 -0
  45. package/packages/sdk-ts/dist/client.d.ts.map +1 -0
  46. package/packages/sdk-ts/dist/client.js +360 -0
  47. package/packages/sdk-ts/dist/client.js.map +1 -0
  48. package/packages/sdk-ts/dist/consensus-helpers.d.ts +103 -0
  49. package/packages/sdk-ts/dist/consensus-helpers.d.ts.map +1 -0
  50. package/packages/sdk-ts/dist/consensus-helpers.js +147 -0
  51. package/packages/sdk-ts/dist/consensus-helpers.js.map +1 -0
  52. package/packages/sdk-ts/dist/consensus.d.ts +72 -0
  53. package/packages/sdk-ts/dist/consensus.d.ts.map +1 -0
  54. package/packages/sdk-ts/dist/consensus.js +378 -0
  55. package/packages/sdk-ts/dist/consensus.js.map +1 -0
  56. package/packages/sdk-ts/dist/examples/demo.d.ts +2 -0
  57. package/packages/sdk-ts/dist/examples/demo.d.ts.map +1 -0
  58. package/packages/sdk-ts/dist/examples/demo.js +63 -0
  59. package/packages/sdk-ts/dist/examples/demo.js.map +1 -0
  60. package/packages/sdk-ts/dist/examples/example.d.ts +2 -0
  61. package/packages/sdk-ts/dist/examples/example.d.ts.map +1 -0
  62. package/packages/sdk-ts/dist/examples/example.js +80 -0
  63. package/packages/sdk-ts/dist/examples/example.js.map +1 -0
  64. package/packages/sdk-ts/dist/examples/quickstart.d.ts +2 -0
  65. package/packages/sdk-ts/dist/examples/quickstart.d.ts.map +1 -0
  66. package/packages/sdk-ts/dist/examples/quickstart.js +56 -0
  67. package/packages/sdk-ts/dist/examples/quickstart.js.map +1 -0
  68. package/packages/sdk-ts/dist/examples/ralph-loop.d.ts +2 -0
  69. package/packages/sdk-ts/dist/examples/ralph-loop.d.ts.map +1 -0
  70. package/packages/sdk-ts/dist/examples/ralph-loop.js +281 -0
  71. package/packages/sdk-ts/dist/examples/ralph-loop.js.map +1 -0
  72. package/packages/sdk-ts/dist/index.d.ts +9 -0
  73. package/packages/sdk-ts/dist/index.d.ts.map +1 -0
  74. package/packages/sdk-ts/dist/index.js +9 -0
  75. package/packages/sdk-ts/dist/index.js.map +1 -0
  76. package/packages/sdk-ts/dist/logs.d.ts +47 -0
  77. package/packages/sdk-ts/dist/logs.d.ts.map +1 -0
  78. package/packages/sdk-ts/dist/logs.js +137 -0
  79. package/packages/sdk-ts/dist/logs.js.map +1 -0
  80. package/packages/sdk-ts/dist/protocol.d.ts +249 -0
  81. package/packages/sdk-ts/dist/protocol.d.ts.map +1 -0
  82. package/packages/sdk-ts/dist/protocol.js +2 -0
  83. package/packages/sdk-ts/dist/protocol.js.map +1 -0
  84. package/packages/sdk-ts/dist/pty.d.ts +8 -0
  85. package/packages/sdk-ts/dist/pty.d.ts.map +1 -0
  86. package/packages/sdk-ts/dist/pty.js +14 -0
  87. package/packages/sdk-ts/dist/pty.js.map +1 -0
  88. package/packages/sdk-ts/dist/relay.d.ts +118 -0
  89. package/packages/sdk-ts/dist/relay.d.ts.map +1 -0
  90. package/packages/sdk-ts/dist/relay.js +355 -0
  91. package/packages/sdk-ts/dist/relay.js.map +1 -0
  92. package/packages/sdk-ts/dist/relaycast.d.ts +57 -0
  93. package/packages/sdk-ts/dist/relaycast.d.ts.map +1 -0
  94. package/packages/sdk-ts/dist/relaycast.js +110 -0
  95. package/packages/sdk-ts/dist/relaycast.js.map +1 -0
  96. package/packages/sdk-ts/dist/shadow.d.ts +100 -0
  97. package/packages/sdk-ts/dist/shadow.d.ts.map +1 -0
  98. package/packages/sdk-ts/dist/shadow.js +174 -0
  99. package/packages/sdk-ts/dist/shadow.js.map +1 -0
  100. package/packages/sdk-ts/package.json +75 -0
  101. package/packages/sdk-ts/scripts/bundle-agent-relay.mjs +53 -0
  102. package/packages/sdk-ts/src/__tests__/integration.test.ts +170 -0
  103. package/packages/sdk-ts/src/__tests__/quickstart.test.ts +198 -0
  104. package/packages/sdk-ts/src/browser.ts +57 -0
  105. package/packages/sdk-ts/src/client.ts +491 -0
  106. package/packages/sdk-ts/src/consensus-helpers.ts +253 -0
  107. package/packages/sdk-ts/src/consensus.ts +506 -0
  108. package/packages/sdk-ts/src/examples/demo.ts +88 -0
  109. package/packages/sdk-ts/src/examples/example.ts +91 -0
  110. package/packages/sdk-ts/src/examples/quickstart.ts +72 -0
  111. package/packages/sdk-ts/src/examples/ralph-loop.ts +352 -0
  112. package/packages/sdk-ts/src/examples/sample-prd.json +37 -0
  113. package/packages/sdk-ts/src/index.ts +8 -0
  114. package/packages/sdk-ts/src/logs.ts +163 -0
  115. package/packages/sdk-ts/src/protocol.ts +266 -0
  116. package/packages/sdk-ts/src/pty.ts +16 -0
  117. package/packages/sdk-ts/src/relay.ts +454 -0
  118. package/packages/sdk-ts/src/relaycast.ts +143 -0
  119. package/packages/sdk-ts/src/shadow.ts +230 -0
  120. package/packages/sdk-ts/tsconfig.json +16 -0
  121. package/packages/spawner/package.json +1 -1
  122. package/packages/state/package.json +1 -1
  123. package/packages/storage/package.json +2 -2
  124. package/packages/telemetry/package.json +1 -1
  125. package/packages/trajectory/package.json +2 -2
  126. package/packages/user-directory/package.json +2 -2
  127. package/packages/utils/package.json +3 -3
  128. package/packages/wrapper/dist/client.js +1 -1
  129. package/packages/wrapper/package.json +6 -6
  130. package/packages/wrapper/src/client.test.ts +1 -1
  131. package/packages/wrapper/src/client.ts +1 -1
  132. package/packages/mcp/SPEC.md +0 -1922
  133. package/packages/mcp/STAFFING_PLAN.md +0 -294
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@agent-relay/mcp",
3
- "version": "2.2.23",
3
+ "version": "2.3.0",
4
4
  "description": "MCP server for Agent Relay - native messaging tools for AI agents in Claude, Cursor, and VS Code",
5
5
  "author": "Agent Workforce Inc.",
6
6
  "license": "Apache-2.0",
@@ -47,15 +47,15 @@
47
47
  "prepublishOnly": "npm run clean && npm run build && npm test"
48
48
  },
49
49
  "dependencies": {
50
- "@agent-relay/config": "2.2.23",
51
- "@agent-relay/protocol": "2.2.23",
52
- "@agent-relay/utils": "2.2.23",
50
+ "@agent-relay/config": "2.3.0",
51
+ "@agent-relay/protocol": "2.3.0",
52
+ "@agent-relay/utils": "2.3.0",
53
53
  "@modelcontextprotocol/sdk": "^1.0.0",
54
54
  "smol-toml": "^1.6.0",
55
55
  "zod": "^3.23.8"
56
56
  },
57
57
  "devDependencies": {
58
- "@agent-relay/sdk": "2.2.23",
58
+ "@agent-relay/sdk": "2.3.0",
59
59
  "@types/node": "^22.19.3",
60
60
  "typescript": "^5.9.3",
61
61
  "vitest": "^2.1.9"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@agent-relay/memory",
3
- "version": "2.2.23",
3
+ "version": "2.3.0",
4
4
  "description": "Semantic memory storage and retrieval system for agent-relay with multiple backend support",
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/hooks": "2.2.23"
25
+ "@agent-relay/hooks": "2.3.0"
26
26
  },
27
27
  "devDependencies": {
28
28
  "@types/node": "^22.19.3",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@agent-relay/policy",
3
- "version": "2.2.23",
3
+ "version": "2.3.0",
4
4
  "description": "Agent policy management with multi-level fallback (repo, local PRPM, cloud workspace)",
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": "2.2.23"
25
+ "@agent-relay/config": "2.3.0"
26
26
  },
27
27
  "devDependencies": {
28
28
  "@types/node": "^22.19.3",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@agent-relay/protocol",
3
- "version": "2.2.23",
3
+ "version": "2.3.0",
4
4
  "description": "Wire protocol types and framing for Agent Relay",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@agent-relay/resiliency",
3
- "version": "2.2.23",
3
+ "version": "2.3.0",
4
4
  "description": "Health monitoring, logging, metrics, and crash resilience utilities for Agent Relay",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",
@@ -245,7 +245,7 @@ export declare class RelayClient {
245
245
  * @param options.shadowSpeakOn - Shadow speak-on triggers
246
246
  * @param options.waitForReady - Wait for the agent to be ready before resolving (default: false)
247
247
  * @param options.readyTimeoutMs - Timeout for agent to become ready (default: 60000ms)
248
- * @param timeoutMs - Timeout for spawn operation (default: 30000ms)
248
+ * @param timeoutMs - Timeout for spawn operation (default: 60000ms)
249
249
  * @returns Spawn result. When waitForReady is true, includes `ready` and `readyInfo` fields.
250
250
  */
251
251
  spawn(options: {
@@ -513,10 +513,10 @@ export class RelayClient {
513
513
  * @param options.shadowSpeakOn - Shadow speak-on triggers
514
514
  * @param options.waitForReady - Wait for the agent to be ready before resolving (default: false)
515
515
  * @param options.readyTimeoutMs - Timeout for agent to become ready (default: 60000ms)
516
- * @param timeoutMs - Timeout for spawn operation (default: 30000ms)
516
+ * @param timeoutMs - Timeout for spawn operation (default: 60000ms)
517
517
  * @returns Spawn result. When waitForReady is true, includes `ready` and `readyInfo` fields.
518
518
  */
519
- async spawn(options, timeoutMs = 30000) {
519
+ async spawn(options, timeoutMs = 60000) {
520
520
  if (this._state !== 'READY') {
521
521
  throw new Error('Client not ready');
522
522
  }
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@agent-relay/sdk",
3
- "version": "2.2.23",
3
+ "version": "2.3.0",
4
4
  "description": "Lightweight SDK for agent-to-agent communication via Agent Relay",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",
@@ -77,8 +77,8 @@
77
77
  "access": "public"
78
78
  },
79
79
  "dependencies": {
80
- "@agent-relay/protocol": "2.2.23",
81
- "@agent-relay/utils": "2.2.23"
80
+ "@agent-relay/protocol": "2.3.0",
81
+ "@agent-relay/utils": "2.3.0"
82
82
  },
83
83
  "engines": {
84
84
  "node": ">=18.0.0"
@@ -782,7 +782,7 @@ export class RelayClient {
782
782
  * @param options.shadowSpeakOn - Shadow speak-on triggers
783
783
  * @param options.waitForReady - Wait for the agent to be ready before resolving (default: false)
784
784
  * @param options.readyTimeoutMs - Timeout for agent to become ready (default: 60000ms)
785
- * @param timeoutMs - Timeout for spawn operation (default: 30000ms)
785
+ * @param timeoutMs - Timeout for spawn operation (default: 60000ms)
786
786
  * @returns Spawn result. When waitForReady is true, includes `ready` and `readyInfo` fields.
787
787
  */
788
788
  async spawn(
@@ -811,7 +811,7 @@ export class RelayClient {
811
811
  /** Timeout for agent to become ready (default: 60000ms). Only used when waitForReady is true. */
812
812
  readyTimeoutMs?: number;
813
813
  },
814
- timeoutMs = 30000
814
+ timeoutMs = 60000
815
815
  ): Promise<SpawnResult> {
816
816
  if (this._state !== 'READY') {
817
817
  throw new Error('Client not ready');
@@ -0,0 +1,65 @@
1
+ # `@agent-relay/broker-sdk`
2
+
3
+ TypeScript SDK for driving `agent-relay init` over stdio.
4
+
5
+ ## Status
6
+ - Broker lifecycle + request/response protocol client implemented.
7
+ - Spawn/list/release/shutdown APIs implemented.
8
+ - Event subscription for broker `event` frames implemented.
9
+
10
+ ## Bundled binary
11
+ - The SDK package bundles `agent-relay` inside `bin/` during `npm run build` and `npm pack`.
12
+ - By default, `AgentRelayClient` uses the bundled binary path when present.
13
+ - You can still override with `binaryPath` in `AgentRelayClient.start(...)`.
14
+
15
+ ## Quick example
16
+ ```ts
17
+ import { AgentRelayClient } from "@agent-relay/broker-sdk";
18
+
19
+ const client = await AgentRelayClient.start({
20
+ binaryPath: "/absolute/path/to/agent-relay",
21
+ env: process.env,
22
+ });
23
+
24
+ await client.spawnPty({
25
+ name: "Worker1",
26
+ cli: "codex",
27
+ args: ["--model", "gpt-5"],
28
+ channels: ["general"],
29
+ });
30
+
31
+ const agents = await client.listAgents();
32
+ console.log(agents);
33
+
34
+ await client.release("Worker1");
35
+ await client.shutdown();
36
+ ```
37
+
38
+ ## Tic-tac-toe demo script
39
+ After build, run:
40
+ ```bash
41
+ npm --prefix packages/sdk-ts run example
42
+ ```
43
+
44
+ Optional env:
45
+ - `CODEX_CMD` (default: `codex`)
46
+ - `CODEX_ARGS` (space-separated CLI args)
47
+ - `AGENT_X_NAME` / `AGENT_O_NAME`
48
+ - `RELAY_CHANNEL` (default: `general`)
49
+ - `AGENT_RELAY_BIN` (override bundled binary path)
50
+
51
+ ## Integration test
52
+ ```bash
53
+ cargo build
54
+ npm --prefix packages/sdk-ts install
55
+ npm --prefix packages/sdk-ts run build
56
+ AGENT_RELAY_BIN="$(pwd)/target/debug/agent-relay" npm --prefix packages/sdk-ts run test:integration
57
+ ```
58
+
59
+ Integration tests require Relaycast credentials in environment (`RELAY_API_KEY`).
60
+
61
+ ## Package tarball
62
+ ```bash
63
+ npm --prefix packages/sdk-ts pack
64
+ ```
65
+ The generated tarball includes `dist/` and `bin/agent-relay` (or `bin/agent-relay.exe` on Windows).
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=integration.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"integration.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/integration.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,139 @@
1
+ import assert from "node:assert/strict";
2
+ import fs from "node:fs";
3
+ import path from "node:path";
4
+ import test from "node:test";
5
+ import { AgentRelayClient, AgentRelayProcessError } from "../client.js";
6
+ function resolveBinaryPath() {
7
+ if (process.env.AGENT_RELAY_BIN) {
8
+ return process.env.AGENT_RELAY_BIN;
9
+ }
10
+ return path.resolve(process.cwd(), "../../target/debug/agent-relay");
11
+ }
12
+ function resolveBundledBinaryPath() {
13
+ const exe = process.platform === "win32" ? "agent-relay.exe" : "agent-relay";
14
+ return path.resolve(process.cwd(), "bin", exe);
15
+ }
16
+ function requireRelaycast(t) {
17
+ const relayKey = process.env.RELAY_API_KEY?.trim();
18
+ if (!relayKey) {
19
+ t.skip("RELAY_API_KEY is required for broker integration tests");
20
+ return false;
21
+ }
22
+ return true;
23
+ }
24
+ test("sdk can use bundled binary by default", async (t) => {
25
+ if (!requireRelaycast(t)) {
26
+ return;
27
+ }
28
+ const bundledBinary = resolveBundledBinaryPath();
29
+ if (!fs.existsSync(bundledBinary)) {
30
+ t.skip(`bundled binary not found at ${bundledBinary}`);
31
+ return;
32
+ }
33
+ const client = await AgentRelayClient.start({
34
+ env: process.env,
35
+ });
36
+ try {
37
+ const agents = await client.listAgents();
38
+ assert.ok(Array.isArray(agents), "listAgents should return an array");
39
+ }
40
+ finally {
41
+ await client.shutdown();
42
+ }
43
+ });
44
+ test("sdk can start broker and manage agent lifecycle", async (t) => {
45
+ if (!requireRelaycast(t)) {
46
+ return;
47
+ }
48
+ const binaryPath = resolveBinaryPath();
49
+ if (!fs.existsSync(binaryPath)) {
50
+ t.skip(`agent-relay binary not found at ${binaryPath}`);
51
+ return;
52
+ }
53
+ const client = await AgentRelayClient.start({
54
+ binaryPath,
55
+ requestTimeoutMs: 8_000,
56
+ shutdownTimeoutMs: 2_000,
57
+ env: process.env,
58
+ });
59
+ const spawnedName = `sdk-test-${Date.now().toString(36)}`;
60
+ const seenEvents = [];
61
+ const unsub = client.onEvent((event) => {
62
+ seenEvents.push(event.kind);
63
+ });
64
+ try {
65
+ const spawned = await client.spawnPty({
66
+ name: spawnedName,
67
+ cli: "cat",
68
+ channels: ["general"],
69
+ });
70
+ assert.equal(spawned.name, spawnedName);
71
+ assert.equal(spawned.runtime, "pty");
72
+ const agentsAfterSpawn = await client.listAgents();
73
+ const spawnedAgent = agentsAfterSpawn.find((agent) => agent.name === spawnedName);
74
+ assert.ok(spawnedAgent, "spawned agent should be present in listAgents()");
75
+ assert.equal(spawnedAgent?.runtime, "pty");
76
+ const released = await client.release(spawnedName);
77
+ assert.equal(released.name, spawnedName);
78
+ const agentsAfterRelease = await client.listAgents();
79
+ assert.equal(agentsAfterRelease.some((agent) => agent.name === spawnedName), false, "released agent should not be present in listAgents()");
80
+ assert.ok(seenEvents.includes("agent_spawned"), "expected agent_spawned event");
81
+ assert.ok(seenEvents.includes("agent_released"), "expected agent_released event");
82
+ }
83
+ finally {
84
+ unsub();
85
+ await client.shutdown();
86
+ }
87
+ });
88
+ test("sdk can spawn and release headless claude worker", async (t) => {
89
+ if (!requireRelaycast(t)) {
90
+ return;
91
+ }
92
+ const binaryPath = resolveBinaryPath();
93
+ if (!fs.existsSync(binaryPath)) {
94
+ t.skip(`agent-relay binary not found at ${binaryPath}`);
95
+ return;
96
+ }
97
+ const client = await AgentRelayClient.start({
98
+ binaryPath,
99
+ requestTimeoutMs: 8_000,
100
+ shutdownTimeoutMs: 2_000,
101
+ env: process.env,
102
+ });
103
+ const spawnedName = `sdk-headless-${Date.now().toString(36)}`;
104
+ const seenEvents = [];
105
+ const unsub = client.onEvent((event) => {
106
+ seenEvents.push(event.kind);
107
+ });
108
+ try {
109
+ const spawned = await client.spawnHeadlessClaude({
110
+ name: spawnedName,
111
+ channels: ["general"],
112
+ });
113
+ assert.equal(spawned.name, spawnedName);
114
+ assert.equal(spawned.runtime, "headless_claude");
115
+ const agentsAfterSpawn = await client.listAgents();
116
+ const spawnedAgent = agentsAfterSpawn.find((agent) => agent.name === spawnedName);
117
+ assert.ok(spawnedAgent, "spawned headless agent should be present in listAgents()");
118
+ assert.equal(spawnedAgent?.runtime, "headless_claude");
119
+ const released = await client.release(spawnedName);
120
+ assert.equal(released.name, spawnedName);
121
+ const agentsAfterRelease = await client.listAgents();
122
+ assert.equal(agentsAfterRelease.some((agent) => agent.name === spawnedName), false, "released headless agent should not be present in listAgents()");
123
+ assert.ok(seenEvents.includes("agent_spawned"), "expected agent_spawned event");
124
+ assert.ok(seenEvents.includes("agent_released"), "expected agent_released event");
125
+ }
126
+ finally {
127
+ unsub();
128
+ await client.shutdown();
129
+ }
130
+ });
131
+ test("sdk surfaces process error when binary is missing", async () => {
132
+ await assert.rejects(AgentRelayClient.start({
133
+ binaryPath: "/definitely/missing/agent-relay",
134
+ requestTimeoutMs: 1_000,
135
+ }), (error) => {
136
+ return error instanceof AgentRelayProcessError || error instanceof Error;
137
+ });
138
+ });
139
+ //# sourceMappingURL=integration.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"integration.test.js","sourceRoot":"","sources":["../../src/__tests__/integration.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=quickstart.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"quickstart.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/quickstart.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,176 @@
1
+ /**
2
+ * Quickstart integration tests — exercises the AgentRelay facade:
3
+ * spawn agents, send messages, list, release, event hooks, shutdown.
4
+ *
5
+ * Run:
6
+ * npm run build && node --test dist/__tests__/quickstart.test.js
7
+ *
8
+ * Requires:
9
+ * RELAY_API_KEY — Relaycast workspace key
10
+ * AGENT_RELAY_BIN (optional) — path to agent-relay binary
11
+ */
12
+ import assert from "node:assert/strict";
13
+ import fs from "node:fs";
14
+ import path from "node:path";
15
+ import test from "node:test";
16
+ import { AgentRelay } from "../relay.js";
17
+ // ── helpers ─────────────────────────────────────────────────────────────────
18
+ function resolveBinaryPath() {
19
+ if (process.env.AGENT_RELAY_BIN) {
20
+ return process.env.AGENT_RELAY_BIN;
21
+ }
22
+ return path.resolve(process.cwd(), "../../target/debug/agent-relay");
23
+ }
24
+ function requireRelaycast(t) {
25
+ if (!process.env.RELAY_API_KEY?.trim()) {
26
+ t.skip("RELAY_API_KEY is required");
27
+ return false;
28
+ }
29
+ return true;
30
+ }
31
+ function requireBinary(t) {
32
+ const bin = resolveBinaryPath();
33
+ if (!fs.existsSync(bin)) {
34
+ t.skip(`agent-relay binary not found at ${bin}`);
35
+ return null;
36
+ }
37
+ return bin;
38
+ }
39
+ // ── full lifecycle ──────────────────────────────────────────────────────────
40
+ test("facade: spawn → message → list → release → shutdown", async (t) => {
41
+ if (!requireRelaycast(t))
42
+ return;
43
+ const bin = requireBinary(t);
44
+ if (!bin)
45
+ return;
46
+ const suffix = Date.now().toString(36);
47
+ const relay = new AgentRelay({
48
+ binaryPath: bin,
49
+ requestTimeoutMs: 10_000,
50
+ env: process.env,
51
+ });
52
+ const spawnedNames = [];
53
+ const releasedNames = [];
54
+ const receivedMessages = [];
55
+ const sentMessages = [];
56
+ relay.onAgentSpawned = (agent) => spawnedNames.push(agent.name);
57
+ relay.onAgentReleased = (agent) => releasedNames.push(agent.name);
58
+ relay.onMessageReceived = (msg) => receivedMessages.push(msg);
59
+ relay.onMessageSent = (msg) => sentMessages.push(msg);
60
+ try {
61
+ // Spawn two agents in parallel
62
+ const [codex, worker1] = await Promise.all([
63
+ relay.codex.spawn({ name: `Codex-${suffix}` }),
64
+ relay.spawnPty({
65
+ name: `Worker1-${suffix}`,
66
+ cli: "cat",
67
+ channels: ["general"],
68
+ }),
69
+ ]);
70
+ assert.equal(codex.runtime, "pty");
71
+ assert.equal(worker1.runtime, "pty");
72
+ // Send a message from a human source
73
+ const human = relay.human({ name: "System" });
74
+ const msg = await human.sendMessage({
75
+ to: codex.name,
76
+ text: "Hello, world!",
77
+ });
78
+ assert.ok(msg.eventId, "should return eventId");
79
+ assert.equal(msg.from, "System");
80
+ assert.equal(msg.to, codex.name);
81
+ // onMessageSent should have fired
82
+ assert.equal(sentMessages.length, 1);
83
+ assert.equal(sentMessages[0].text, "Hello, world!");
84
+ // List agents — should return Agent objects with release()
85
+ const agents = await relay.listAgents();
86
+ const names = agents.map((a) => a.name);
87
+ assert.ok(names.includes(codex.name));
88
+ assert.ok(names.includes(worker1.name));
89
+ assert.equal(typeof agents[0].release, "function");
90
+ // Release all via agent.release()
91
+ for (const agent of agents) {
92
+ if (agent.name === codex.name || agent.name === worker1.name) {
93
+ await agent.release();
94
+ }
95
+ }
96
+ // Verify gone
97
+ const remaining = await relay.listAgents();
98
+ assert.ok(!remaining.some((a) => a.name === codex.name));
99
+ assert.ok(!remaining.some((a) => a.name === worker1.name));
100
+ // Event hooks should have fired
101
+ assert.ok(spawnedNames.includes(codex.name));
102
+ assert.ok(spawnedNames.includes(worker1.name));
103
+ assert.ok(releasedNames.includes(codex.name));
104
+ assert.ok(releasedNames.includes(worker1.name));
105
+ }
106
+ finally {
107
+ await relay.shutdown();
108
+ }
109
+ });
110
+ // ── agent.sendMessage ───────────────────────────────────────────────────────
111
+ test("facade: agent.sendMessage sends from the agent identity", async (t) => {
112
+ if (!requireRelaycast(t))
113
+ return;
114
+ const bin = requireBinary(t);
115
+ if (!bin)
116
+ return;
117
+ const suffix = Date.now().toString(36);
118
+ const relay = new AgentRelay({
119
+ binaryPath: bin,
120
+ requestTimeoutMs: 10_000,
121
+ env: process.env,
122
+ });
123
+ const sentMessages = [];
124
+ relay.onMessageSent = (msg) => sentMessages.push(msg);
125
+ try {
126
+ const [a, b] = await Promise.all([
127
+ relay.spawnPty({ name: `A-${suffix}`, cli: "cat", channels: ["general"] }),
128
+ relay.spawnPty({ name: `B-${suffix}`, cli: "cat", channels: ["general"] }),
129
+ ]);
130
+ const msg = await a.sendMessage({ to: b.name, text: "ping" });
131
+ assert.equal(msg.from, a.name);
132
+ assert.equal(msg.to, b.name);
133
+ assert.equal(sentMessages.length, 1);
134
+ assert.equal(sentMessages[0].from, a.name);
135
+ await a.release();
136
+ await b.release();
137
+ }
138
+ finally {
139
+ await relay.shutdown();
140
+ }
141
+ });
142
+ // ── threading ───────────────────────────────────────────────────────────────
143
+ test("facade: message threading with threadId", async (t) => {
144
+ if (!requireRelaycast(t))
145
+ return;
146
+ const bin = requireBinary(t);
147
+ if (!bin)
148
+ return;
149
+ const suffix = Date.now().toString(36);
150
+ const relay = new AgentRelay({
151
+ binaryPath: bin,
152
+ requestTimeoutMs: 10_000,
153
+ env: process.env,
154
+ });
155
+ try {
156
+ const agent = await relay.spawnPty({
157
+ name: `Thread-${suffix}`,
158
+ cli: "cat",
159
+ channels: ["general"],
160
+ });
161
+ const human = relay.human({ name: "Human" });
162
+ const msg1 = await human.sendMessage({ to: agent.name, text: "start" });
163
+ const msg2 = await human.sendMessage({
164
+ to: agent.name,
165
+ text: "follow-up",
166
+ threadId: msg1.eventId,
167
+ });
168
+ assert.ok(msg2.eventId);
169
+ assert.notEqual(msg1.eventId, msg2.eventId);
170
+ await agent.release();
171
+ }
172
+ finally {
173
+ await relay.shutdown();
174
+ }
175
+ });
176
+ //# sourceMappingURL=quickstart.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"quickstart.test.js","sourceRoot":"","sources":["../../src/__tests__/quickstart.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,16 @@
1
+ /**
2
+ * Browser-compatible entry point for the broker SDK.
3
+ *
4
+ * Exports only modules with zero Node.js dependencies.
5
+ * The ConsensusEngine class (needs node:crypto + node:events) is NOT
6
+ * exported here — only its types and pure helper functions.
7
+ *
8
+ * @example
9
+ * ```ts
10
+ * import { PROTOCOL_VERSION, type BrokerEvent } from "agent-relay/broker/browser";
11
+ * ```
12
+ */
13
+ export { PROTOCOL_VERSION, type AgentRuntime, type AgentSpec, type BrokerEvent, type BrokerStatus, type BrokerToSdk, type BrokerToWorker, type PendingDeliveryInfo, type ProtocolEnvelope, type ProtocolError, type RelayDelivery, type SdkToBroker, type WorkerToBroker, } from "./protocol.js";
14
+ export { formatProposalMessage, formatResultMessage, parseVoteCommand, parseProposalCommand, isConsensusCommand, type ConsensusType, type VoteValue, type ProposalStatus, type AgentWeight, type Vote, type Proposal, type ConsensusResult, type ConsensusConfig, type ConsensusEvents, type ParsedProposalCommand, } from "./consensus-helpers.js";
15
+ export { ShadowManager, type ShadowConfig, type ShadowRelationship, type ShadowCopy, type SpeakOnTrigger, } from "./shadow.js";
16
+ //# sourceMappingURL=browser.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"browser.d.ts","sourceRoot":"","sources":["../src/browser.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAGH,OAAO,EACL,gBAAgB,EAChB,KAAK,YAAY,EACjB,KAAK,SAAS,EACd,KAAK,WAAW,EAChB,KAAK,YAAY,EACjB,KAAK,WAAW,EAChB,KAAK,cAAc,EACnB,KAAK,mBAAmB,EACxB,KAAK,gBAAgB,EACrB,KAAK,aAAa,EAClB,KAAK,aAAa,EAClB,KAAK,WAAW,EAChB,KAAK,cAAc,GACpB,MAAM,eAAe,CAAC;AAGvB,OAAO,EACL,qBAAqB,EACrB,mBAAmB,EACnB,gBAAgB,EAChB,oBAAoB,EACpB,kBAAkB,EAClB,KAAK,aAAa,EAClB,KAAK,SAAS,EACd,KAAK,cAAc,EACnB,KAAK,WAAW,EAChB,KAAK,IAAI,EACT,KAAK,QAAQ,EACb,KAAK,eAAe,EACpB,KAAK,eAAe,EACpB,KAAK,eAAe,EACpB,KAAK,qBAAqB,GAC3B,MAAM,wBAAwB,CAAC;AAGhC,OAAO,EACL,aAAa,EACb,KAAK,YAAY,EACjB,KAAK,kBAAkB,EACvB,KAAK,UAAU,EACf,KAAK,cAAc,GACpB,MAAM,aAAa,CAAC"}
@@ -0,0 +1,19 @@
1
+ /**
2
+ * Browser-compatible entry point for the broker SDK.
3
+ *
4
+ * Exports only modules with zero Node.js dependencies.
5
+ * The ConsensusEngine class (needs node:crypto + node:events) is NOT
6
+ * exported here — only its types and pure helper functions.
7
+ *
8
+ * @example
9
+ * ```ts
10
+ * import { PROTOCOL_VERSION, type BrokerEvent } from "agent-relay/broker/browser";
11
+ * ```
12
+ */
13
+ // Protocol types — pure TypeScript, zero deps
14
+ export { PROTOCOL_VERSION, } from "./protocol.js";
15
+ // Consensus types + pure functions (from the Node-free helpers file)
16
+ export { formatProposalMessage, formatResultMessage, parseVoteCommand, parseProposalCommand, isConsensusCommand, } from "./consensus-helpers.js";
17
+ // Shadow manager — pure in-memory, no I/O deps
18
+ export { ShadowManager, } from "./shadow.js";
19
+ //# sourceMappingURL=browser.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"browser.js","sourceRoot":"","sources":["../src/browser.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,8CAA8C;AAC9C,OAAO,EACL,gBAAgB,GAajB,MAAM,eAAe,CAAC;AAEvB,qEAAqE;AACrE,OAAO,EACL,qBAAqB,EACrB,mBAAmB,EACnB,gBAAgB,EAChB,oBAAoB,EACpB,kBAAkB,GAWnB,MAAM,wBAAwB,CAAC;AAEhC,+CAA+C;AAC/C,OAAO,EACL,aAAa,GAKd,MAAM,aAAa,CAAC"}