agent-relay 2.1.13 → 2.1.15

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 (165) hide show
  1. package/dist/index.cjs +37571 -50918
  2. package/dist/src/cli/index.js +1 -1
  3. package/dist/src/cli/index.js.map +1 -1
  4. package/package.json +18 -18
  5. package/packages/acp-bridge/package.json +2 -2
  6. package/packages/api-types/package.json +1 -1
  7. package/packages/benchmark/datasets/quick-test.yaml +20 -0
  8. package/packages/benchmark/dist/runners/base.d.ts.map +1 -1
  9. package/packages/benchmark/dist/runners/base.js +1 -0
  10. package/packages/benchmark/dist/runners/base.js.map +1 -1
  11. package/packages/benchmark/package.json +4 -4
  12. package/packages/benchmark/src/runners/base.ts +1 -0
  13. package/packages/bridge/dist/spawner.d.ts.map +1 -1
  14. package/packages/bridge/dist/spawner.js +2 -30
  15. package/packages/bridge/dist/spawner.js.map +1 -1
  16. package/packages/bridge/package.json +7 -8
  17. package/packages/bridge/src/spawner.ts +2 -29
  18. package/packages/cli-tester/package.json +1 -1
  19. package/packages/config/dist/teams-config.d.ts +7 -1
  20. package/packages/config/dist/teams-config.d.ts.map +1 -1
  21. package/packages/config/dist/teams-config.js +88 -34
  22. package/packages/config/dist/teams-config.js.map +1 -1
  23. package/packages/config/package.json +2 -2
  24. package/packages/config/src/teams-config.ts +106 -39
  25. package/packages/continuity/package.json +2 -2
  26. package/packages/daemon/dist/server.d.ts.map +1 -1
  27. package/packages/daemon/dist/server.js +18 -0
  28. package/packages/daemon/dist/server.js.map +1 -1
  29. package/packages/daemon/dist/spawn-manager.d.ts +8 -0
  30. package/packages/daemon/dist/spawn-manager.d.ts.map +1 -1
  31. package/packages/daemon/dist/spawn-manager.js +14 -3
  32. package/packages/daemon/dist/spawn-manager.js.map +1 -1
  33. package/packages/daemon/package.json +12 -12
  34. package/packages/daemon/src/server.ts +17 -0
  35. package/packages/daemon/src/spawn-manager.ts +21 -3
  36. package/packages/hooks/package.json +4 -4
  37. package/packages/mcp/CHANGELOG.md +28 -0
  38. package/packages/mcp/README.md +31 -0
  39. package/packages/mcp/dist/bin.js +18 -5
  40. package/packages/mcp/dist/bin.js.map +1 -1
  41. package/packages/mcp/dist/{client.d.ts → client-adapter.d.ts} +22 -36
  42. package/packages/mcp/dist/client-adapter.d.ts.map +1 -0
  43. package/packages/mcp/dist/client-adapter.js +227 -0
  44. package/packages/mcp/dist/client-adapter.js.map +1 -0
  45. package/packages/mcp/dist/hybrid-client.d.ts +1 -31
  46. package/packages/mcp/dist/hybrid-client.d.ts.map +1 -1
  47. package/packages/mcp/dist/hybrid-client.js +3 -153
  48. package/packages/mcp/dist/hybrid-client.js.map +1 -1
  49. package/packages/mcp/dist/index.d.ts +2 -3
  50. package/packages/mcp/dist/index.d.ts.map +1 -1
  51. package/packages/mcp/dist/index.js +4 -3
  52. package/packages/mcp/dist/index.js.map +1 -1
  53. package/packages/mcp/dist/resources/agents.d.ts +1 -1
  54. package/packages/mcp/dist/resources/agents.d.ts.map +1 -1
  55. package/packages/mcp/dist/resources/inbox.d.ts +1 -1
  56. package/packages/mcp/dist/resources/inbox.d.ts.map +1 -1
  57. package/packages/mcp/dist/resources/project.d.ts +1 -1
  58. package/packages/mcp/dist/resources/project.d.ts.map +1 -1
  59. package/packages/mcp/dist/server.d.ts +5 -1
  60. package/packages/mcp/dist/server.d.ts.map +1 -1
  61. package/packages/mcp/dist/server.js.map +1 -1
  62. package/packages/mcp/dist/simple.d.ts +1 -1
  63. package/packages/mcp/dist/simple.d.ts.map +1 -1
  64. package/packages/mcp/dist/simple.js +1 -1
  65. package/packages/mcp/dist/simple.js.map +1 -1
  66. package/packages/mcp/dist/tools/relay-broadcast.d.ts +1 -1
  67. package/packages/mcp/dist/tools/relay-broadcast.d.ts.map +1 -1
  68. package/packages/mcp/dist/tools/relay-channel.d.ts +1 -1
  69. package/packages/mcp/dist/tools/relay-channel.d.ts.map +1 -1
  70. package/packages/mcp/dist/tools/relay-connected.d.ts +1 -1
  71. package/packages/mcp/dist/tools/relay-connected.d.ts.map +1 -1
  72. package/packages/mcp/dist/tools/relay-consensus.d.ts +7 -7
  73. package/packages/mcp/dist/tools/relay-consensus.d.ts.map +1 -1
  74. package/packages/mcp/dist/tools/relay-continuity.d.ts +1 -1
  75. package/packages/mcp/dist/tools/relay-continuity.d.ts.map +1 -1
  76. package/packages/mcp/dist/tools/relay-health.d.ts +1 -1
  77. package/packages/mcp/dist/tools/relay-health.d.ts.map +1 -1
  78. package/packages/mcp/dist/tools/relay-inbox.d.ts +2 -2
  79. package/packages/mcp/dist/tools/relay-inbox.d.ts.map +1 -1
  80. package/packages/mcp/dist/tools/relay-logs.d.ts +1 -1
  81. package/packages/mcp/dist/tools/relay-logs.d.ts.map +1 -1
  82. package/packages/mcp/dist/tools/relay-messages.d.ts +7 -7
  83. package/packages/mcp/dist/tools/relay-messages.d.ts.map +1 -1
  84. package/packages/mcp/dist/tools/relay-metrics.d.ts +1 -1
  85. package/packages/mcp/dist/tools/relay-metrics.d.ts.map +1 -1
  86. package/packages/mcp/dist/tools/relay-metrics.js +4 -4
  87. package/packages/mcp/dist/tools/relay-metrics.js.map +1 -1
  88. package/packages/mcp/dist/tools/relay-release.d.ts +1 -1
  89. package/packages/mcp/dist/tools/relay-release.d.ts.map +1 -1
  90. package/packages/mcp/dist/tools/relay-remove-agent.d.ts +1 -1
  91. package/packages/mcp/dist/tools/relay-remove-agent.d.ts.map +1 -1
  92. package/packages/mcp/dist/tools/relay-send.d.ts +3 -3
  93. package/packages/mcp/dist/tools/relay-send.d.ts.map +1 -1
  94. package/packages/mcp/dist/tools/relay-shadow.d.ts +1 -1
  95. package/packages/mcp/dist/tools/relay-shadow.d.ts.map +1 -1
  96. package/packages/mcp/dist/tools/relay-spawn.d.ts +3 -3
  97. package/packages/mcp/dist/tools/relay-spawn.d.ts.map +1 -1
  98. package/packages/mcp/dist/tools/relay-status.d.ts +1 -1
  99. package/packages/mcp/dist/tools/relay-status.d.ts.map +1 -1
  100. package/packages/mcp/dist/tools/relay-subscribe.d.ts +1 -1
  101. package/packages/mcp/dist/tools/relay-subscribe.d.ts.map +1 -1
  102. package/packages/mcp/dist/tools/relay-who.d.ts +1 -1
  103. package/packages/mcp/dist/tools/relay-who.d.ts.map +1 -1
  104. package/packages/mcp/package.json +13 -4
  105. package/packages/mcp/src/bin.ts +21 -6
  106. package/packages/mcp/src/client-adapter.ts +346 -0
  107. package/packages/mcp/src/hybrid-client.ts +3 -202
  108. package/packages/mcp/src/index.ts +12 -5
  109. package/packages/mcp/src/resources/agents.ts +1 -1
  110. package/packages/mcp/src/resources/inbox.ts +1 -1
  111. package/packages/mcp/src/resources/project.ts +1 -1
  112. package/packages/mcp/src/server.ts +5 -1
  113. package/packages/mcp/src/simple.ts +1 -1
  114. package/packages/mcp/src/tools/relay-broadcast.ts +1 -1
  115. package/packages/mcp/src/tools/relay-channel.ts +1 -1
  116. package/packages/mcp/src/tools/relay-connected.ts +1 -1
  117. package/packages/mcp/src/tools/relay-consensus.ts +1 -1
  118. package/packages/mcp/src/tools/relay-continuity.ts +1 -1
  119. package/packages/mcp/src/tools/relay-health.ts +1 -1
  120. package/packages/mcp/src/tools/relay-inbox.ts +1 -1
  121. package/packages/mcp/src/tools/relay-logs.ts +1 -1
  122. package/packages/mcp/src/tools/relay-messages.ts +1 -1
  123. package/packages/mcp/src/tools/relay-metrics.ts +7 -5
  124. package/packages/mcp/src/tools/relay-release.ts +1 -1
  125. package/packages/mcp/src/tools/relay-remove-agent.ts +1 -1
  126. package/packages/mcp/src/tools/relay-send.ts +1 -1
  127. package/packages/mcp/src/tools/relay-shadow.ts +1 -1
  128. package/packages/mcp/src/tools/relay-spawn.ts +1 -1
  129. package/packages/mcp/src/tools/relay-status.ts +1 -1
  130. package/packages/mcp/src/tools/relay-subscribe.ts +1 -1
  131. package/packages/mcp/src/tools/relay-who.ts +1 -1
  132. package/packages/mcp/tests/client.test.ts +332 -432
  133. package/packages/memory/package.json +2 -2
  134. package/packages/policy/package.json +2 -2
  135. package/packages/protocol/package.json +1 -1
  136. package/packages/resiliency/package.json +1 -1
  137. package/packages/sdk/README.md +185 -0
  138. package/packages/sdk/dist/client.d.ts +1 -1
  139. package/packages/sdk/dist/client.d.ts.map +1 -1
  140. package/packages/sdk/dist/client.js +2 -1
  141. package/packages/sdk/dist/client.js.map +1 -1
  142. package/packages/sdk/dist/standalone.d.ts +2 -0
  143. package/packages/sdk/dist/standalone.d.ts.map +1 -1
  144. package/packages/sdk/dist/standalone.js +6 -1
  145. package/packages/sdk/dist/standalone.js.map +1 -1
  146. package/packages/sdk/package.json +3 -4
  147. package/packages/sdk/src/client.ts +2 -2
  148. package/packages/sdk/src/standalone.ts +8 -1
  149. package/packages/spawner/package.json +1 -1
  150. package/packages/state/package.json +1 -1
  151. package/packages/storage/package.json +2 -2
  152. package/packages/storage/src/jsonl-adapter.test.ts +3 -1
  153. package/packages/telemetry/package.json +1 -1
  154. package/packages/trajectory/package.json +2 -2
  155. package/packages/user-directory/package.json +2 -2
  156. package/packages/utils/package.json +3 -3
  157. package/packages/wrapper/dist/relay-pty-orchestrator.d.ts.map +1 -1
  158. package/packages/wrapper/dist/relay-pty-orchestrator.js +13 -0
  159. package/packages/wrapper/dist/relay-pty-orchestrator.js.map +1 -1
  160. package/packages/wrapper/package.json +6 -6
  161. package/packages/wrapper/src/relay-pty-orchestrator.ts +14 -0
  162. package/packages/mcp/dist/client.d.ts.map +0 -1
  163. package/packages/mcp/dist/client.js +0 -320
  164. package/packages/mcp/dist/client.js.map +0 -1
  165. package/packages/mcp/src/client.ts +0 -485
@@ -1,320 +0,0 @@
1
- /**
2
- * RelayClient - Client for connecting to the Agent Relay daemon
3
- *
4
- * This module uses @agent-relay/protocol for wire format handling
5
- * to avoid code duplication with the SDK.
6
- */
7
- import { createConnection } from 'node:net';
8
- import { randomUUID } from 'node:crypto';
9
- import { discoverSocket } from './cloud.js';
10
- import { DaemonNotRunningError } from './errors.js';
11
- // Import shared protocol types and framing utilities
12
- import { encodeFrameLegacy, PROTOCOL_VERSION, } from '@agent-relay/protocol';
13
- // Import shared client helpers for consistency
14
- import { createRequestEnvelope, createRequestHandler, generateRequestId, toSpawnResult, toReleaseResult, } from '@agent-relay/utils/client-helpers';
15
- export function createRelayClient(options) {
16
- const { agentName, project = 'default', timeout = 5000 } = options;
17
- // Prefer explicit socketPath option over discovery to avoid finding wrong daemon
18
- const socketPath = options.socketPath || discoverSocket()?.socketPath || '/tmp/agent-relay.sock';
19
- // Generate unique IDs with MCP prefix
20
- const generateId = () => generateRequestId('mcp-');
21
- // Timeouts for different operations
22
- const RELEASE_TIMEOUT = 10000; // 10 seconds for release operations
23
- const SPAWN_TIMEOUT = 30000; // 30 seconds for spawn operations
24
- /**
25
- * Fire-and-forget: Send a message without waiting for any response.
26
- * Used for SEND and SPAWN where we don't expect daemon to reply.
27
- */
28
- function fireAndForget(type, payload, envelopeProps) {
29
- return new Promise((resolve, reject) => {
30
- const id = generateId();
31
- const envelope = {
32
- v: PROTOCOL_VERSION,
33
- type,
34
- id,
35
- ts: Date.now(),
36
- payload,
37
- from: envelopeProps?.from,
38
- to: envelopeProps?.to,
39
- };
40
- const socket = createConnection(socketPath);
41
- socket.on('connect', () => {
42
- socket.write(encodeFrameLegacy(envelope));
43
- socket.end();
44
- resolve();
45
- });
46
- socket.on('error', (err) => {
47
- const errno = err.code;
48
- if (errno === 'ECONNREFUSED' || errno === 'ENOENT') {
49
- reject(new DaemonNotRunningError(`Cannot connect to daemon at ${socketPath}`));
50
- }
51
- else {
52
- reject(err);
53
- }
54
- });
55
- });
56
- }
57
- /**
58
- * Request-response: Send a message and wait for daemon to respond.
59
- * Used for queries (STATUS, INBOX, etc.) and blocking sends (waits for ACK).
60
- */
61
- async function request(type, payload, customTimeout, payloadMeta, envelopeProps) {
62
- const id = generateId();
63
- const envelope = createRequestEnvelope(type, payload, id, {
64
- payloadMeta,
65
- envelopeProps,
66
- });
67
- try {
68
- return await createRequestHandler(socketPath, envelope, {
69
- timeout: customTimeout ?? timeout,
70
- payloadMeta,
71
- envelopeProps,
72
- });
73
- }
74
- catch (err) {
75
- const errno = err.code;
76
- if (errno === 'ECONNREFUSED' || errno === 'ENOENT') {
77
- throw new DaemonNotRunningError(`Cannot connect to daemon at ${socketPath}`);
78
- }
79
- throw err;
80
- }
81
- }
82
- return {
83
- async send(to, message, opts = {}) {
84
- const payload = {
85
- kind: opts.kind || 'message',
86
- body: message,
87
- thread: opts.thread,
88
- data: opts.data,
89
- };
90
- // Fire-and-forget: message is sent to daemon, but we don't wait for
91
- // recipient to ACK. Use sendAndWait() for confirmed delivery.
92
- // Connection errors (daemon not running) will still throw.
93
- await fireAndForget('SEND', payload, { from: agentName, to });
94
- },
95
- async sendAndWait(to, message, opts = {}) {
96
- const waitTimeout = opts.timeoutMs || 30000;
97
- const correlationId = randomUUID();
98
- const payload = {
99
- kind: opts.kind || 'message',
100
- body: message,
101
- thread: opts.thread,
102
- data: opts.data,
103
- };
104
- const ack = await request('SEND', payload, waitTimeout + 5000, { sync: { blocking: true, correlationId, timeoutMs: waitTimeout } }, { from: agentName, to });
105
- return ack;
106
- },
107
- async broadcast(message, opts = {}) {
108
- const payload = { kind: opts.kind || 'message', body: message };
109
- await fireAndForget('SEND', payload, { from: agentName, to: '*' });
110
- },
111
- async subscribe(topic) {
112
- try {
113
- await fireAndForget('SUBSCRIBE', { topic }, { from: agentName });
114
- return { success: true };
115
- }
116
- catch (e) {
117
- return { success: false, error: e instanceof Error ? e.message : String(e) };
118
- }
119
- },
120
- async unsubscribe(topic) {
121
- try {
122
- await fireAndForget('UNSUBSCRIBE', { topic }, { from: agentName });
123
- return { success: true };
124
- }
125
- catch (e) {
126
- return { success: false, error: e instanceof Error ? e.message : String(e) };
127
- }
128
- },
129
- async joinChannel(channel, displayName) {
130
- try {
131
- await fireAndForget('CHANNEL_JOIN', { channel, displayName }, { from: agentName });
132
- return { success: true };
133
- }
134
- catch (e) {
135
- return { success: false, error: e instanceof Error ? e.message : String(e) };
136
- }
137
- },
138
- async leaveChannel(channel, reason) {
139
- try {
140
- await fireAndForget('CHANNEL_LEAVE', { channel, reason }, { from: agentName });
141
- return { success: true };
142
- }
143
- catch (e) {
144
- return { success: false, error: e instanceof Error ? e.message : String(e) };
145
- }
146
- },
147
- async sendChannelMessage(channel, message, opts = {}) {
148
- await fireAndForget('CHANNEL_MESSAGE', { channel, body: message, thread: opts.thread }, { from: agentName });
149
- },
150
- async adminJoinChannel(channel, member) {
151
- try {
152
- await fireAndForget('CHANNEL_JOIN', { channel, member }, { from: agentName });
153
- return { success: true };
154
- }
155
- catch (e) {
156
- return { success: false, error: e instanceof Error ? e.message : String(e) };
157
- }
158
- },
159
- async adminRemoveMember(channel, member) {
160
- try {
161
- await fireAndForget('CHANNEL_LEAVE', { channel, member }, { from: agentName });
162
- return { success: true };
163
- }
164
- catch (e) {
165
- return { success: false, error: e instanceof Error ? e.message : String(e) };
166
- }
167
- },
168
- async bindAsShadow(primaryAgent, opts = {}) {
169
- try {
170
- await fireAndForget('SHADOW_BIND', { primaryAgent, speakOn: opts.speakOn }, { from: agentName });
171
- return { success: true };
172
- }
173
- catch (e) {
174
- return { success: false, error: e instanceof Error ? e.message : String(e) };
175
- }
176
- },
177
- async unbindAsShadow(primaryAgent) {
178
- try {
179
- await fireAndForget('SHADOW_UNBIND', { primaryAgent }, { from: agentName });
180
- return { success: true };
181
- }
182
- catch (e) {
183
- return { success: false, error: e instanceof Error ? e.message : String(e) };
184
- }
185
- },
186
- async createProposal(opts) {
187
- try {
188
- await fireAndForget('PROPOSAL_CREATE', {
189
- id: opts.id,
190
- description: opts.description,
191
- options: opts.options,
192
- votingMethod: opts.votingMethod || 'majority',
193
- deadline: opts.deadline,
194
- }, { from: agentName });
195
- return { success: true };
196
- }
197
- catch (e) {
198
- return { success: false, error: e instanceof Error ? e.message : String(e) };
199
- }
200
- },
201
- async vote(opts) {
202
- try {
203
- await fireAndForget('VOTE', {
204
- proposalId: opts.proposalId,
205
- vote: opts.vote,
206
- reason: opts.reason,
207
- }, { from: agentName });
208
- return { success: true };
209
- }
210
- catch (e) {
211
- return { success: false, error: e instanceof Error ? e.message : String(e) };
212
- }
213
- },
214
- async spawn(opts) {
215
- try {
216
- const payload = {
217
- name: opts.name,
218
- cli: opts.cli,
219
- task: opts.task,
220
- model: opts.model,
221
- cwd: opts.cwd,
222
- spawnerName: agentName,
223
- };
224
- const result = await request('SPAWN', payload, SPAWN_TIMEOUT, undefined, { from: agentName });
225
- return toSpawnResult(result);
226
- }
227
- catch (e) {
228
- return { success: false, error: e instanceof Error ? e.message : String(e) };
229
- }
230
- },
231
- async release(name, reason) {
232
- try {
233
- const payload = { name, reason };
234
- const result = await request('RELEASE', payload, RELEASE_TIMEOUT, undefined, { from: agentName });
235
- return toReleaseResult(result);
236
- }
237
- catch (e) {
238
- return { success: false, error: e instanceof Error ? e.message : String(e) };
239
- }
240
- },
241
- async getStatus() {
242
- try {
243
- const s = await request('STATUS', {});
244
- return { connected: true, agentName, project, socketPath, daemonVersion: s.version, uptime: s.uptime ? Math.floor(s.uptime / 1000) + 's' : undefined };
245
- }
246
- catch {
247
- return { connected: false, agentName, project, socketPath };
248
- }
249
- },
250
- async getInbox(opts = {}) {
251
- const payload = {
252
- agent: agentName,
253
- limit: opts.limit,
254
- unreadOnly: opts.unread_only,
255
- from: opts.from,
256
- channel: opts.channel,
257
- };
258
- const response = await request('INBOX', payload);
259
- const msgs = response.messages || [];
260
- return msgs.map(m => ({ id: m.id, from: m.from, content: m.body, channel: m.channel, thread: m.thread }));
261
- },
262
- async listAgents(opts = {}) {
263
- const payload = {
264
- includeIdle: opts.include_idle,
265
- project: opts.project,
266
- };
267
- const response = await request('LIST_AGENTS', payload);
268
- // Defensive: ensure response is an object with agents array
269
- if (!response || typeof response !== 'object') {
270
- return [];
271
- }
272
- return Array.isArray(response.agents) ? response.agents : [];
273
- },
274
- async listConnectedAgents(opts = {}) {
275
- const payload = { project: opts.project };
276
- const response = await request('LIST_CONNECTED_AGENTS', payload);
277
- // Defensive: ensure response is an object with agents array
278
- if (!response || typeof response !== 'object') {
279
- return [];
280
- }
281
- return Array.isArray(response.agents) ? response.agents : [];
282
- },
283
- async removeAgent(name, opts = {}) {
284
- const payload = { name, removeMessages: opts.removeMessages };
285
- return request('REMOVE_AGENT', payload);
286
- },
287
- async getHealth(opts = {}) {
288
- const payload = {
289
- includeCrashes: opts.include_crashes,
290
- includeAlerts: opts.include_alerts,
291
- };
292
- return request('HEALTH', payload);
293
- },
294
- async getMetrics(opts = {}) {
295
- const payload = { agent: opts.agent };
296
- return request('METRICS', payload);
297
- },
298
- async queryMessages(opts = {}) {
299
- const payload = {
300
- limit: opts.limit,
301
- sinceTs: opts.sinceTs,
302
- from: opts.from,
303
- to: opts.to,
304
- thread: opts.thread,
305
- order: opts.order,
306
- };
307
- const response = await request('MESSAGES_QUERY', payload);
308
- return response.messages || [];
309
- },
310
- async sendLog(data) {
311
- const payload = {
312
- data,
313
- timestamp: Date.now(),
314
- };
315
- await fireAndForget('LOG', payload, { from: agentName });
316
- },
317
- };
318
- }
319
- export default createRelayClient;
320
- //# sourceMappingURL=client.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"client.js","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"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"}