agent-relay 3.1.10 → 3.1.12

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 (93) hide show
  1. package/bin/agent-relay-broker-darwin-arm64 +0 -0
  2. package/bin/agent-relay-broker-darwin-x64 +0 -0
  3. package/bin/agent-relay-broker-linux-arm64 +0 -0
  4. package/bin/agent-relay-broker-linux-x64 +0 -0
  5. package/dist/index.cjs +2 -2
  6. package/dist/src/cli/bootstrap.d.ts.map +1 -1
  7. package/dist/src/cli/bootstrap.js +2 -0
  8. package/dist/src/cli/bootstrap.js.map +1 -1
  9. package/dist/src/cli/commands/connect.d.ts +3 -0
  10. package/dist/src/cli/commands/connect.d.ts.map +1 -0
  11. package/dist/src/cli/commands/connect.js +18 -0
  12. package/dist/src/cli/commands/connect.js.map +1 -0
  13. package/dist/src/cli/lib/auth-ssh.d.ts.map +1 -1
  14. package/dist/src/cli/lib/auth-ssh.js +22 -270
  15. package/dist/src/cli/lib/auth-ssh.js.map +1 -1
  16. package/dist/src/cli/lib/broker-lifecycle.d.ts.map +1 -1
  17. package/dist/src/cli/lib/broker-lifecycle.js +33 -0
  18. package/dist/src/cli/lib/broker-lifecycle.js.map +1 -1
  19. package/dist/src/cli/lib/connect-daytona.d.ts +15 -0
  20. package/dist/src/cli/lib/connect-daytona.d.ts.map +1 -0
  21. package/dist/src/cli/lib/connect-daytona.js +217 -0
  22. package/dist/src/cli/lib/connect-daytona.js.map +1 -0
  23. package/dist/src/cli/lib/ssh-interactive.d.ts +41 -0
  24. package/dist/src/cli/lib/ssh-interactive.d.ts.map +1 -0
  25. package/dist/src/cli/lib/ssh-interactive.js +320 -0
  26. package/dist/src/cli/lib/ssh-interactive.js.map +1 -0
  27. package/install.sh +2 -1
  28. package/package.json +13 -10
  29. package/packages/acp-bridge/package.json +2 -2
  30. package/packages/config/dist/cli-auth-config.d.ts +2 -0
  31. package/packages/config/dist/cli-auth-config.d.ts.map +1 -1
  32. package/packages/config/dist/cli-auth-config.js +1 -0
  33. package/packages/config/dist/cli-auth-config.js.map +1 -1
  34. package/packages/config/package.json +1 -1
  35. package/packages/config/src/cli-auth-config.ts +3 -0
  36. package/packages/hooks/package.json +4 -4
  37. package/packages/memory/package.json +2 -2
  38. package/packages/openclaw/dist/__tests__/gateway-control.test.js +13 -13
  39. package/packages/openclaw/dist/__tests__/gateway-control.test.js.map +1 -1
  40. package/packages/openclaw/dist/__tests__/gateway-poll-fallback.test.d.ts +2 -0
  41. package/packages/openclaw/dist/__tests__/gateway-poll-fallback.test.d.ts.map +1 -0
  42. package/packages/openclaw/dist/__tests__/gateway-poll-fallback.test.js +369 -0
  43. package/packages/openclaw/dist/__tests__/gateway-poll-fallback.test.js.map +1 -0
  44. package/packages/openclaw/dist/__tests__/gateway-threads.test.js +57 -16
  45. package/packages/openclaw/dist/__tests__/gateway-threads.test.js.map +1 -1
  46. package/packages/openclaw/dist/__tests__/ws-client.test.js +2 -0
  47. package/packages/openclaw/dist/__tests__/ws-client.test.js.map +1 -1
  48. package/packages/openclaw/dist/config.d.ts +2 -0
  49. package/packages/openclaw/dist/config.d.ts.map +1 -1
  50. package/packages/openclaw/dist/config.js +99 -12
  51. package/packages/openclaw/dist/config.js.map +1 -1
  52. package/packages/openclaw/dist/gateway.d.ts +56 -2
  53. package/packages/openclaw/dist/gateway.d.ts.map +1 -1
  54. package/packages/openclaw/dist/gateway.js +819 -127
  55. package/packages/openclaw/dist/gateway.js.map +1 -1
  56. package/packages/openclaw/dist/runtime/openclaw-config.d.ts +2 -0
  57. package/packages/openclaw/dist/runtime/openclaw-config.d.ts.map +1 -1
  58. package/packages/openclaw/dist/runtime/openclaw-config.js +1 -1
  59. package/packages/openclaw/dist/runtime/openclaw-config.js.map +1 -1
  60. package/packages/openclaw/dist/runtime/setup.d.ts +0 -2
  61. package/packages/openclaw/dist/runtime/setup.d.ts.map +1 -1
  62. package/packages/openclaw/dist/runtime/setup.js +53 -8
  63. package/packages/openclaw/dist/runtime/setup.js.map +1 -1
  64. package/packages/openclaw/dist/types.d.ts +28 -0
  65. package/packages/openclaw/dist/types.d.ts.map +1 -1
  66. package/packages/openclaw/package.json +2 -2
  67. package/packages/openclaw/skill/SKILL.md +150 -44
  68. package/packages/openclaw/src/__tests__/gateway-control.test.ts +14 -14
  69. package/packages/openclaw/src/__tests__/gateway-poll-fallback.test.ts +467 -0
  70. package/packages/openclaw/src/__tests__/gateway-threads.test.ts +73 -23
  71. package/packages/openclaw/src/__tests__/ws-client.test.ts +71 -51
  72. package/packages/openclaw/src/config.ts +121 -12
  73. package/packages/openclaw/src/gateway.ts +1155 -252
  74. package/packages/openclaw/src/runtime/openclaw-config.ts +3 -1
  75. package/packages/openclaw/src/runtime/setup.ts +57 -16
  76. package/packages/openclaw/src/types.ts +31 -0
  77. package/packages/openclaw/test/vitest.setup.ts +1 -0
  78. package/packages/policy/package.json +2 -2
  79. package/packages/sdk/dist/__tests__/unit.test.js +131 -129
  80. package/packages/sdk/dist/__tests__/unit.test.js.map +1 -1
  81. package/packages/sdk/dist/relay.js +1 -1
  82. package/packages/sdk/dist/workflows/runner.d.ts.map +1 -1
  83. package/packages/sdk/dist/workflows/runner.js +5 -3
  84. package/packages/sdk/dist/workflows/runner.js.map +1 -1
  85. package/packages/sdk/package.json +2 -2
  86. package/packages/sdk/src/__tests__/unit.test.ts +142 -157
  87. package/packages/sdk/src/relay.ts +1 -1
  88. package/packages/sdk/src/workflows/runner.ts +12 -9
  89. package/packages/sdk-py/pyproject.toml +1 -1
  90. package/packages/telemetry/package.json +1 -1
  91. package/packages/trajectory/package.json +2 -2
  92. package/packages/user-directory/package.json +2 -2
  93. package/packages/utils/package.json +2 -2
@@ -62,6 +62,8 @@ vi.mock('node:fs/promises', () => ({
62
62
  readFile: vi.fn().mockResolvedValue('{"spawns":[]}'),
63
63
  writeFile: vi.fn().mockResolvedValue(undefined),
64
64
  mkdir: vi.fn().mockResolvedValue(undefined),
65
+ rename: vi.fn().mockResolvedValue(undefined),
66
+ chmod: vi.fn().mockResolvedValue(undefined),
65
67
  }));
66
68
  vi.mock('node:fs', () => ({
67
69
  existsSync: vi.fn().mockReturnValue(false),
@@ -72,7 +74,6 @@ vi.mock('node:fs', () => ({
72
74
  // We need to override RELAYCAST_CONTROL_PORT to use port 0 (random)
73
75
  // Actually, we can't use port 0 because the gateway hardcodes the listen call.
74
76
  // Instead, let's mock node:http to capture the request handler, then run a real server.
75
- let capturedHandler = null;
76
77
  let realServer = null;
77
78
  let controlPort = 0;
78
79
  vi.mock('node:http', async (importOriginal) => {
@@ -80,7 +81,6 @@ vi.mock('node:http', async (importOriginal) => {
80
81
  return {
81
82
  ...actual,
82
83
  createServer: vi.fn((handler) => {
83
- capturedHandler = handler;
84
84
  // Create a real HTTP server with the captured handler
85
85
  realServer = actual.createServer(handler);
86
86
  return {
@@ -151,7 +151,7 @@ describe('Gateway control HTTP server', () => {
151
151
  it('GET /health returns 200', async () => {
152
152
  const res = await fetchControl('GET', '/health');
153
153
  expect(res.status).toBe(200);
154
- const data = await res.json();
154
+ const data = (await res.json());
155
155
  expect(data.ok).toBe(true);
156
156
  expect(data.status).toBe('running');
157
157
  expect(typeof data.uptime).toBe('number');
@@ -169,7 +169,7 @@ describe('Gateway control HTTP server', () => {
169
169
  role: 'researcher',
170
170
  });
171
171
  expect(res.status).toBe(200);
172
- const data = await res.json();
172
+ const data = (await res.json());
173
173
  expect(data.ok).toBe(true);
174
174
  expect(data.name).toBe('worker-1');
175
175
  expect(data.agentName).toBe('claw-ws-worker-1');
@@ -178,7 +178,7 @@ describe('Gateway control HTTP server', () => {
178
178
  it('POST /spawn without name returns 400', async () => {
179
179
  const res = await fetchControl('POST', '/spawn', { role: 'worker' });
180
180
  expect(res.status).toBe(400);
181
- const data = await res.json();
181
+ const data = (await res.json());
182
182
  expect(data.ok).toBe(false);
183
183
  expect(data.error).toMatch(/name/i);
184
184
  });
@@ -186,7 +186,7 @@ describe('Gateway control HTTP server', () => {
186
186
  mockSpawnManager.spawn.mockRejectedValue(new Error('Docker unavailable'));
187
187
  const res = await fetchControl('POST', '/spawn', { name: 'worker-1' });
188
188
  expect(res.status).toBe(500);
189
- const data = await res.json();
189
+ const data = (await res.json());
190
190
  expect(data.ok).toBe(false);
191
191
  expect(data.error).toContain('Docker unavailable');
192
192
  });
@@ -194,7 +194,7 @@ describe('Gateway control HTTP server', () => {
194
194
  mockSpawnManager.list.mockReturnValue([]);
195
195
  const res = await fetchControl('GET', '/list');
196
196
  expect(res.status).toBe(200);
197
- const data = await res.json();
197
+ const data = (await res.json());
198
198
  expect(data.ok).toBe(true);
199
199
  expect(data.active).toBe(0);
200
200
  expect(data.claws).toEqual([]);
@@ -205,7 +205,7 @@ describe('Gateway control HTTP server', () => {
205
205
  ]);
206
206
  const res = await fetchControl('GET', '/list');
207
207
  expect(res.status).toBe(200);
208
- const data = await res.json();
208
+ const data = (await res.json());
209
209
  expect(data.claws).toHaveLength(1);
210
210
  expect(data.claws[0].name).toBe('alpha');
211
211
  });
@@ -214,7 +214,7 @@ describe('Gateway control HTTP server', () => {
214
214
  mockSpawnManager.size = 0;
215
215
  const res = await fetchControl('POST', '/release', { name: 'worker-1' });
216
216
  expect(res.status).toBe(200);
217
- const data = await res.json();
217
+ const data = (await res.json());
218
218
  expect(data.ok).toBe(true);
219
219
  });
220
220
  it('POST /release by id returns 200', async () => {
@@ -222,13 +222,13 @@ describe('Gateway control HTTP server', () => {
222
222
  mockSpawnManager.size = 0;
223
223
  const res = await fetchControl('POST', '/release', { id: 'spawn-1' });
224
224
  expect(res.status).toBe(200);
225
- const data = await res.json();
225
+ const data = (await res.json());
226
226
  expect(data.ok).toBe(true);
227
227
  });
228
228
  it('POST /release without name or id returns 400', async () => {
229
229
  const res = await fetchControl('POST', '/release', {});
230
230
  expect(res.status).toBe(400);
231
- const data = await res.json();
231
+ const data = (await res.json());
232
232
  expect(data.ok).toBe(false);
233
233
  expect(data.error).toMatch(/name.*id|id.*name/i);
234
234
  });
@@ -236,14 +236,14 @@ describe('Gateway control HTTP server', () => {
236
236
  mockSpawnManager.release.mockRejectedValue(new Error('Process kill failed'));
237
237
  const res = await fetchControl('POST', '/release', { id: 'spawn-1' });
238
238
  expect(res.status).toBe(500);
239
- const data = await res.json();
239
+ const data = (await res.json());
240
240
  expect(data.ok).toBe(false);
241
241
  expect(data.error).toContain('Process kill failed');
242
242
  });
243
243
  it('GET /unknown returns 404', async () => {
244
244
  const res = await fetchControl('GET', '/nonexistent');
245
245
  expect(res.status).toBe(404);
246
- const data = await res.json();
246
+ const data = (await res.json());
247
247
  expect(data.error).toBe('Not found');
248
248
  });
249
249
  });
@@ -1 +1 @@
1
- {"version":3,"file":"gateway-control.test.js","sourceRoot":"","sources":["../../src/__tests__/gateway-control.test.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"gateway-control.test.js","sourceRoot":"","sources":["../../src/__tests__/gateway-control.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=gateway-poll-fallback.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gateway-poll-fallback.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/gateway-poll-fallback.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,369 @@
1
+ import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest';
2
+ const eventHandlers = {};
3
+ function registerHandler(event) {
4
+ return (handler) => {
5
+ if (!eventHandlers[event])
6
+ eventHandlers[event] = [];
7
+ eventHandlers[event].push(handler);
8
+ return () => {
9
+ eventHandlers[event] = eventHandlers[event].filter((entry) => entry !== handler);
10
+ };
11
+ };
12
+ }
13
+ function fireEvent(event, ...args) {
14
+ for (const handler of eventHandlers[event] ?? []) {
15
+ handler(...args);
16
+ }
17
+ }
18
+ const mockAgentClient = {
19
+ connect: vi.fn(),
20
+ disconnect: vi.fn().mockResolvedValue(undefined),
21
+ subscribe: vi.fn(),
22
+ channels: {
23
+ join: vi.fn().mockResolvedValue({ ok: true }),
24
+ create: vi.fn().mockResolvedValue({ name: 'general' }),
25
+ },
26
+ on: {
27
+ connected: registerHandler('connected'),
28
+ messageCreated: registerHandler('messageCreated'),
29
+ threadReply: registerHandler('threadReply'),
30
+ dmReceived: registerHandler('dmReceived'),
31
+ groupDmReceived: registerHandler('groupDmReceived'),
32
+ commandInvoked: registerHandler('commandInvoked'),
33
+ reactionAdded: registerHandler('reactionAdded'),
34
+ reactionRemoved: registerHandler('reactionRemoved'),
35
+ reconnecting: registerHandler('reconnecting'),
36
+ disconnected: registerHandler('disconnected'),
37
+ error: registerHandler('error'),
38
+ },
39
+ };
40
+ const registerOrGet = vi.fn().mockResolvedValue({ name: 'test-claw', token: 'tok_test' });
41
+ const registerOrRotate = vi.fn().mockResolvedValue({ name: 'test-claw', token: 'tok_rotated' });
42
+ const fsMocks = vi.hoisted(() => ({
43
+ readFile: vi.fn(),
44
+ writeFile: vi.fn(),
45
+ rename: vi.fn(),
46
+ mkdir: vi.fn(),
47
+ chmod: vi.fn(),
48
+ }));
49
+ const { readFile, writeFile, rename, mkdir } = fsMocks;
50
+ vi.mock('@relaycast/sdk', () => ({
51
+ RelayCast: vi.fn().mockImplementation(() => ({
52
+ agents: {
53
+ registerOrGet,
54
+ registerOrRotate,
55
+ },
56
+ as: vi.fn().mockReturnValue(mockAgentClient),
57
+ })),
58
+ }));
59
+ vi.mock('../spawn/manager.js', () => ({
60
+ SpawnManager: vi.fn().mockImplementation(() => ({
61
+ size: 0,
62
+ spawn: vi.fn(),
63
+ release: vi.fn(),
64
+ releaseByName: vi.fn(),
65
+ releaseAll: vi.fn().mockResolvedValue(undefined),
66
+ list: vi.fn().mockReturnValue([]),
67
+ get: vi.fn(),
68
+ })),
69
+ }));
70
+ vi.mock('node:fs/promises', () => ({
71
+ ...fsMocks,
72
+ }));
73
+ vi.mock('node:fs', () => ({
74
+ existsSync: vi.fn().mockReturnValue(false),
75
+ }));
76
+ vi.mock('node:http', async (importOriginal) => {
77
+ const actual = await importOriginal();
78
+ return {
79
+ ...actual,
80
+ createServer: vi.fn().mockReturnValue({
81
+ listen: vi.fn((_port, _host, cb) => cb()),
82
+ close: vi.fn((cb) => cb?.()),
83
+ on: vi.fn(),
84
+ address: vi.fn().mockReturnValue({ port: 18790 }),
85
+ }),
86
+ };
87
+ });
88
+ import { InboundGateway } from '../gateway.js';
89
+ function response(status, body, headers) {
90
+ const normalized = Object.fromEntries(Object.entries(headers ?? {}).map(([key, value]) => [key.toLowerCase(), value]));
91
+ return {
92
+ ok: status >= 200 && status < 300,
93
+ status,
94
+ headers: {
95
+ get: (name) => normalized[name.toLowerCase()] ?? null,
96
+ },
97
+ json: vi.fn().mockResolvedValue(body),
98
+ };
99
+ }
100
+ function pendingFetch(init) {
101
+ return new Promise((_resolve, reject) => {
102
+ const signal = init?.signal;
103
+ signal?.addEventListener('abort', () => reject(new Error('aborted')), { once: true });
104
+ });
105
+ }
106
+ function createGateway(pollFallbackOverrides = {}) {
107
+ const sendMessage = vi.fn().mockResolvedValue({ event_id: 'evt_out_1' });
108
+ const gateway = new InboundGateway({
109
+ config: {
110
+ apiKey: 'rk_live_test',
111
+ clawName: 'test-claw',
112
+ baseUrl: 'http://127.0.0.1:8888',
113
+ channels: ['general'],
114
+ transport: {
115
+ pollFallback: {
116
+ enabled: true,
117
+ wsFailureThreshold: 1,
118
+ timeoutSeconds: 1,
119
+ ...pollFallbackOverrides,
120
+ probeWs: {
121
+ enabled: true,
122
+ intervalMs: 5_000,
123
+ stableGraceMs: 10,
124
+ ...pollFallbackOverrides.probeWs,
125
+ },
126
+ },
127
+ },
128
+ },
129
+ relaySender: { sendMessage },
130
+ });
131
+ return { gateway, sendMessage };
132
+ }
133
+ describe('InboundGateway poll fallback', () => {
134
+ const fetchMock = vi.fn();
135
+ beforeEach(() => {
136
+ vi.clearAllMocks();
137
+ vi.useRealTimers();
138
+ vi.stubGlobal('fetch', fetchMock);
139
+ for (const key of Object.keys(eventHandlers)) {
140
+ eventHandlers[key] = [];
141
+ }
142
+ readFile.mockReset();
143
+ readFile.mockRejectedValue(Object.assign(new Error('ENOENT'), { code: 'ENOENT' }));
144
+ writeFile.mockReset();
145
+ writeFile.mockResolvedValue(undefined);
146
+ rename.mockReset();
147
+ rename.mockResolvedValue(undefined);
148
+ mkdir.mockReset();
149
+ mkdir.mockResolvedValue(undefined);
150
+ });
151
+ afterEach(async () => {
152
+ vi.unstubAllGlobals();
153
+ vi.useRealTimers();
154
+ });
155
+ it('falls back to poll and persists the committed cursor after successful delivery', async () => {
156
+ fetchMock
157
+ .mockResolvedValueOnce(response(200, {
158
+ events: [
159
+ {
160
+ id: 'evt_poll_1',
161
+ sequence: 1,
162
+ timestamp: '2026-03-06T04:00:00Z',
163
+ payload: {
164
+ type: 'message.created',
165
+ channel: 'general',
166
+ message: {
167
+ id: 'msg_1',
168
+ agentName: 'alice',
169
+ text: 'hello from poll',
170
+ },
171
+ },
172
+ },
173
+ ],
174
+ nextCursor: 'cursor_1',
175
+ hasMore: false,
176
+ }))
177
+ .mockImplementation((_input, init) => pendingFetch(init));
178
+ const { gateway, sendMessage } = createGateway();
179
+ await gateway.start();
180
+ fireEvent('error', new Error('proxy blocked'));
181
+ await vi.waitFor(() => {
182
+ expect(sendMessage).toHaveBeenCalledTimes(1);
183
+ });
184
+ expect(sendMessage.mock.calls[0][0].text).toBe('[relaycast:general] @alice: hello from poll\n(reply with: post_message channel="general" or reply_to_thread message_id="msg_1")');
185
+ expect(String(fetchMock.mock.calls[0]?.[0])).toContain('/messages/poll');
186
+ expect(String(fetchMock.mock.calls[0]?.[0])).toContain('cursor=0');
187
+ expect(writeFile).toHaveBeenCalledWith(expect.stringContaining('inbound-cursor.json.tmp'), expect.stringContaining('"cursor": "cursor_1"'), 'utf-8');
188
+ await gateway.stop();
189
+ });
190
+ it('resets a stale cursor on 409 and resumes from the initial cursor', async () => {
191
+ readFile.mockResolvedValueOnce(JSON.stringify({
192
+ cursor: 'stale_cursor',
193
+ lastSequence: 41,
194
+ recentEventIds: [],
195
+ updatedAt: '2026-03-06T03:59:00Z',
196
+ }));
197
+ fetchMock
198
+ .mockImplementationOnce(async (input) => {
199
+ expect(String(input)).toContain('cursor=stale_cursor');
200
+ return response(409, {});
201
+ })
202
+ .mockImplementationOnce(async (input) => {
203
+ expect(String(input)).toContain('cursor=0');
204
+ return response(200, {
205
+ events: [
206
+ {
207
+ id: 'evt_poll_42',
208
+ sequence: 42,
209
+ timestamp: '2026-03-06T04:01:00Z',
210
+ payload: {
211
+ type: 'message.created',
212
+ channel: 'general',
213
+ message: {
214
+ id: 'msg_42',
215
+ agentName: 'alice',
216
+ text: 'resumed after reset',
217
+ },
218
+ },
219
+ },
220
+ ],
221
+ nextCursor: 'cursor_42',
222
+ hasMore: false,
223
+ });
224
+ })
225
+ .mockImplementation((_input, init) => pendingFetch(init));
226
+ const { gateway, sendMessage } = createGateway();
227
+ await gateway.start();
228
+ fireEvent('disconnected');
229
+ await vi.waitFor(() => {
230
+ expect(sendMessage).toHaveBeenCalledTimes(1);
231
+ });
232
+ expect(sendMessage.mock.calls[0][0].text).toBe('[relaycast:general] @alice: resumed after reset\n(reply with: post_message channel="general" or reply_to_thread message_id="msg_42")');
233
+ expect(writeFile).toHaveBeenCalledWith(expect.stringContaining('inbound-cursor.json.tmp'), expect.stringContaining('"cursor": "cursor_42"'), 'utf-8');
234
+ await gateway.stop();
235
+ });
236
+ it('promotes back to WS after a stable recovery window', async () => {
237
+ vi.useFakeTimers();
238
+ fetchMock
239
+ .mockResolvedValueOnce(response(200, {
240
+ events: [],
241
+ nextCursor: 'cursor_0',
242
+ hasMore: false,
243
+ }))
244
+ .mockImplementationOnce((_input, init) => pendingFetch(init))
245
+ .mockResolvedValueOnce(response(200, {
246
+ events: [],
247
+ nextCursor: 'cursor_0',
248
+ hasMore: false,
249
+ }))
250
+ .mockImplementation((_input, init) => pendingFetch(init));
251
+ const { gateway, sendMessage } = createGateway();
252
+ await gateway.start();
253
+ fireEvent('error', new Error('proxy blocked'));
254
+ await vi.waitFor(() => {
255
+ expect(fetchMock).toHaveBeenCalled();
256
+ });
257
+ fireEvent('connected');
258
+ await vi.advanceTimersByTimeAsync(1_100);
259
+ fireEvent('messageCreated', {
260
+ type: 'message.created',
261
+ channel: 'general',
262
+ message: {
263
+ id: 'msg_ws_1',
264
+ agentName: 'bob',
265
+ text: 'back on ws',
266
+ },
267
+ });
268
+ await vi.waitFor(() => {
269
+ expect(sendMessage).toHaveBeenCalledTimes(1);
270
+ });
271
+ expect(sendMessage.mock.calls[0][0].text).toBe('[relaycast:general] @bob: back on ws\n(reply with: post_message channel="general" or reply_to_thread message_id="msg_ws_1")');
272
+ await gateway.stop();
273
+ });
274
+ it('processes WS messages during RECOVERING_WS before promotion completes', async () => {
275
+ vi.useFakeTimers();
276
+ fetchMock
277
+ .mockResolvedValueOnce(response(200, {
278
+ events: [],
279
+ nextCursor: 'cursor_0',
280
+ hasMore: false,
281
+ }))
282
+ .mockImplementation((_input, init) => pendingFetch(init));
283
+ const { gateway, sendMessage } = createGateway({
284
+ probeWs: {
285
+ stableGraceMs: 5_000,
286
+ },
287
+ });
288
+ await gateway.start();
289
+ fireEvent('error', new Error('proxy blocked'));
290
+ await vi.waitFor(() => {
291
+ expect(fetchMock).toHaveBeenCalled();
292
+ });
293
+ fireEvent('connected');
294
+ await vi.advanceTimersByTimeAsync(100);
295
+ fireEvent('messageCreated', {
296
+ type: 'message.created',
297
+ channel: 'general',
298
+ message: {
299
+ id: 'msg_ws_recovering',
300
+ agentName: 'carol',
301
+ text: 'delivered during recovery',
302
+ },
303
+ });
304
+ await vi.waitFor(() => {
305
+ expect(sendMessage).toHaveBeenCalledTimes(1);
306
+ });
307
+ expect(sendMessage.mock.calls[0][0].text).toBe('[relaycast:general] @carol: delivered during recovery\n(reply with: post_message channel="general" or reply_to_thread message_id="msg_ws_recovering")');
308
+ await gateway.stop();
309
+ });
310
+ it('does not redeliver a message that was already committed in poll mode after WS recovery', async () => {
311
+ vi.useFakeTimers();
312
+ fetchMock
313
+ .mockResolvedValueOnce(response(200, {
314
+ events: [
315
+ {
316
+ id: 'evt_poll_1',
317
+ sequence: 1,
318
+ timestamp: '2026-03-06T04:00:00Z',
319
+ payload: {
320
+ type: 'message.created',
321
+ channel: 'general',
322
+ message: {
323
+ id: 'msg_1',
324
+ agentName: 'alice',
325
+ text: 'hello from poll',
326
+ },
327
+ },
328
+ },
329
+ ],
330
+ nextCursor: 'cursor_1',
331
+ hasMore: false,
332
+ }))
333
+ .mockImplementationOnce((_input, init) => pendingFetch(init))
334
+ .mockResolvedValueOnce(response(200, {
335
+ events: [],
336
+ nextCursor: 'cursor_1',
337
+ hasMore: false,
338
+ }))
339
+ .mockImplementation((_input, init) => pendingFetch(init));
340
+ const { gateway, sendMessage } = createGateway();
341
+ await gateway.start();
342
+ fireEvent('error', new Error('proxy blocked'));
343
+ await vi.waitFor(() => {
344
+ expect(sendMessage).toHaveBeenCalledTimes(1);
345
+ });
346
+ fireEvent('connected');
347
+ await vi.advanceTimersByTimeAsync(1_100);
348
+ fireEvent('messageCreated', {
349
+ type: 'message.created',
350
+ channel: 'general',
351
+ message: {
352
+ id: 'msg_1',
353
+ agentName: 'alice',
354
+ text: 'hello from poll',
355
+ },
356
+ });
357
+ await vi.advanceTimersByTimeAsync(0);
358
+ expect(sendMessage).toHaveBeenCalledTimes(1);
359
+ await gateway.stop();
360
+ });
361
+ it('uses a single jitter pass for 429 responses without Retry-After', async () => {
362
+ vi.spyOn(Math, 'random').mockReturnValue(0);
363
+ fetchMock.mockResolvedValueOnce(response(429, {}));
364
+ const { gateway } = createGateway();
365
+ const delayMs = await gateway.pollOnce(1);
366
+ expect(delayMs).toBe(550);
367
+ });
368
+ });
369
+ //# sourceMappingURL=gateway-poll-fallback.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gateway-poll-fallback.test.js","sourceRoot":"","sources":["../../src/__tests__/gateway-poll-fallback.test.ts"],"names":[],"mappings":"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"}