agent-relay 8.8.5 → 8.9.1

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 (56) hide show
  1. package/dist/cli/agent-relay-mcp.d.ts +2 -53
  2. package/dist/cli/agent-relay-mcp.d.ts.map +1 -1
  3. package/dist/cli/agent-relay-mcp.js +11 -943
  4. package/dist/cli/agent-relay-mcp.js.map +1 -1
  5. package/dist/cli/commands/fleet.d.ts.map +1 -1
  6. package/dist/cli/commands/fleet.js +86 -13
  7. package/dist/cli/commands/fleet.js.map +1 -1
  8. package/dist/cli/lib/broker-dashboard.d.ts +12 -0
  9. package/dist/cli/lib/broker-dashboard.d.ts.map +1 -0
  10. package/dist/cli/lib/broker-dashboard.js +431 -0
  11. package/dist/cli/lib/broker-dashboard.js.map +1 -0
  12. package/dist/cli/lib/broker-lifecycle.d.ts.map +1 -1
  13. package/dist/cli/lib/broker-lifecycle.js +1 -428
  14. package/dist/cli/lib/broker-lifecycle.js.map +1 -1
  15. package/dist/cli/mcp/action-schema.d.ts +20 -0
  16. package/dist/cli/mcp/action-schema.d.ts.map +1 -0
  17. package/dist/cli/mcp/action-schema.js +132 -0
  18. package/dist/cli/mcp/action-schema.js.map +1 -0
  19. package/dist/cli/mcp/action-tools.d.ts +10 -0
  20. package/dist/cli/mcp/action-tools.d.ts.map +1 -0
  21. package/dist/cli/mcp/action-tools.js +114 -0
  22. package/dist/cli/mcp/action-tools.js.map +1 -0
  23. package/dist/cli/mcp/inbox.d.ts +9 -0
  24. package/dist/cli/mcp/inbox.d.ts.map +1 -0
  25. package/dist/cli/mcp/inbox.js +49 -0
  26. package/dist/cli/mcp/inbox.js.map +1 -0
  27. package/dist/cli/mcp/messaging-tools.d.ts +9 -0
  28. package/dist/cli/mcp/messaging-tools.d.ts.map +1 -0
  29. package/dist/cli/mcp/messaging-tools.js +315 -0
  30. package/dist/cli/mcp/messaging-tools.js.map +1 -0
  31. package/dist/cli/mcp/resources.d.ts +39 -0
  32. package/dist/cli/mcp/resources.d.ts.map +1 -0
  33. package/dist/cli/mcp/resources.js +158 -0
  34. package/dist/cli/mcp/resources.js.map +1 -0
  35. package/dist/cli/mcp/telemetry.d.ts +9 -0
  36. package/dist/cli/mcp/telemetry.d.ts.map +1 -0
  37. package/dist/cli/mcp/telemetry.js +176 -0
  38. package/dist/cli/mcp/telemetry.js.map +1 -0
  39. package/dist/cli/mcp/tool-results.d.ts +29 -0
  40. package/dist/cli/mcp/tool-results.d.ts.map +1 -0
  41. package/dist/cli/mcp/tool-results.js +39 -0
  42. package/dist/cli/mcp/tool-results.js.map +1 -0
  43. package/dist/cli/mcp/tool-shapes.d.ts +13 -0
  44. package/dist/cli/mcp/tool-shapes.d.ts.map +1 -0
  45. package/dist/cli/mcp/tool-shapes.js +16 -0
  46. package/dist/cli/mcp/tool-shapes.js.map +1 -0
  47. package/dist/cli/mcp/types.d.ts +38 -0
  48. package/dist/cli/mcp/types.d.ts.map +1 -0
  49. package/dist/cli/mcp/types.js +2 -0
  50. package/dist/cli/mcp/types.js.map +1 -0
  51. package/dist/cli/mcp/workspace.d.ts +10 -0
  52. package/dist/cli/mcp/workspace.d.ts.map +1 -0
  53. package/dist/cli/mcp/workspace.js +36 -0
  54. package/dist/cli/mcp/workspace.js.map +1 -0
  55. package/dist/index.cjs +47 -2
  56. package/package.json +8 -8
@@ -0,0 +1,315 @@
1
+ import { z } from 'zod';
2
+ import { jsonContent, jsonResult, textContent } from './tool-results.js';
3
+ import { identityOverrideInputShape, messageResult } from './tool-shapes.js';
4
+ function resolveEmoji(input) {
5
+ const normalized = input.trim().replace(/^:/, '').replace(/:$/, '').toLowerCase();
6
+ const aliases = {
7
+ '+1': '👍',
8
+ thumbsup: '👍',
9
+ thumbs_up: '👍',
10
+ check: '✅',
11
+ white_check_mark: '✅',
12
+ rocket: '🚀',
13
+ eyes: '👀',
14
+ heart: '❤️',
15
+ clap: '👏',
16
+ };
17
+ return aliases[normalized] ?? input;
18
+ }
19
+ /**
20
+ * Register the channel, message, thread, DM, reaction, search, and inbox MCP
21
+ * tools. These all act through a single agent client resolved per-call from the
22
+ * optional `as` identity override.
23
+ */
24
+ export function registerMessagingTools(server, getAgentClient) {
25
+ server.registerTool('create_channel', {
26
+ title: 'Create Channel',
27
+ description: 'Create a new workspace channel.',
28
+ inputSchema: {
29
+ name: z.string().describe('Unique channel name'),
30
+ topic: z.string().optional().describe('Optional channel topic'),
31
+ ...identityOverrideInputShape,
32
+ },
33
+ outputSchema: jsonResult,
34
+ annotations: {
35
+ readOnlyHint: false,
36
+ destructiveHint: false,
37
+ idempotentHint: false,
38
+ openWorldHint: true,
39
+ },
40
+ }, async ({ name, topic, as }) => jsonContent(await getAgentClient(as).channels.create({ name, topic })));
41
+ server.registerTool('list_channels', {
42
+ title: 'List Channels',
43
+ description: 'List channels available in the workspace.',
44
+ inputSchema: {
45
+ include_archived: z.boolean().optional().describe('Include archived channels'),
46
+ ...identityOverrideInputShape,
47
+ },
48
+ outputSchema: {
49
+ channels: z.array(z.object({}).passthrough()).describe('Channels'),
50
+ },
51
+ annotations: { readOnlyHint: true, destructiveHint: false, idempotentHint: true, openWorldHint: true },
52
+ }, async ({ include_archived, as }) => {
53
+ const channels = await getAgentClient(as).channels.list(include_archived ? { includeArchived: include_archived } : undefined);
54
+ return jsonContent({ channels });
55
+ });
56
+ server.registerTool('join_channel', {
57
+ title: 'Join Channel',
58
+ description: 'Join an existing channel.',
59
+ inputSchema: {
60
+ channel: z.string().describe('Channel name'),
61
+ ...identityOverrideInputShape,
62
+ },
63
+ outputSchema: messageResult,
64
+ annotations: { readOnlyHint: false, destructiveHint: false, idempotentHint: true, openWorldHint: true },
65
+ }, async ({ channel, as }) => {
66
+ await getAgentClient(as).channels.join(channel);
67
+ return textContent(`Joined channel #${channel}`);
68
+ });
69
+ server.registerTool('leave_channel', {
70
+ title: 'Leave Channel',
71
+ description: 'Leave a channel.',
72
+ inputSchema: {
73
+ channel: z.string().describe('Channel name'),
74
+ ...identityOverrideInputShape,
75
+ },
76
+ outputSchema: messageResult,
77
+ annotations: { readOnlyHint: false, destructiveHint: false, idempotentHint: true, openWorldHint: true },
78
+ }, async ({ channel, as }) => {
79
+ await getAgentClient(as).channels.leave(channel);
80
+ return textContent(`Left channel #${channel}`);
81
+ });
82
+ server.registerTool('invite_to_channel', {
83
+ title: 'Invite to Channel',
84
+ description: 'Invite another agent to a channel.',
85
+ inputSchema: {
86
+ channel: z.string().describe('Channel name'),
87
+ agent: z.string().describe('Agent name to invite'),
88
+ ...identityOverrideInputShape,
89
+ },
90
+ outputSchema: messageResult,
91
+ annotations: { readOnlyHint: false, destructiveHint: false, idempotentHint: true, openWorldHint: true },
92
+ }, async ({ channel, agent, as }) => {
93
+ await getAgentClient(as).channels.invite(channel, agent);
94
+ return textContent(`Invited ${agent} to #${channel}`);
95
+ });
96
+ server.registerTool('set_channel_topic', {
97
+ title: 'Set Channel Topic',
98
+ description: 'Update a channel topic.',
99
+ inputSchema: {
100
+ channel: z.string().describe('Channel name'),
101
+ topic: z.string().describe('New topic'),
102
+ ...identityOverrideInputShape,
103
+ },
104
+ outputSchema: jsonResult,
105
+ annotations: { readOnlyHint: false, destructiveHint: false, idempotentHint: true, openWorldHint: true },
106
+ }, async ({ channel, topic, as }) => jsonContent(await getAgentClient(as).channels.setTopic(channel, topic)));
107
+ server.registerTool('archive_channel', {
108
+ title: 'Archive Channel',
109
+ description: 'Archive a channel.',
110
+ inputSchema: {
111
+ channel: z.string().describe('Channel name'),
112
+ ...identityOverrideInputShape,
113
+ },
114
+ outputSchema: messageResult,
115
+ annotations: { readOnlyHint: false, destructiveHint: true, idempotentHint: true, openWorldHint: true },
116
+ }, async ({ channel, as }) => {
117
+ await getAgentClient(as).channels.archive(channel);
118
+ return textContent(`Archived channel #${channel}`);
119
+ });
120
+ server.registerTool('post_message', {
121
+ title: 'Post Message',
122
+ description: 'Post a new message to a channel as the current agent.',
123
+ inputSchema: {
124
+ channel: z.string().describe('Channel name'),
125
+ text: z.string().describe('Message text'),
126
+ attachments: z.array(z.string()).optional().describe('File attachment IDs'),
127
+ mode: z.enum(['wait', 'steer']).optional().describe('Delivery mode'),
128
+ ...identityOverrideInputShape,
129
+ },
130
+ outputSchema: jsonResult,
131
+ annotations: {
132
+ readOnlyHint: false,
133
+ destructiveHint: false,
134
+ idempotentHint: false,
135
+ openWorldHint: true,
136
+ },
137
+ }, async ({ channel, text, attachments, mode, as }) => jsonContent(await getAgentClient(as).send(channel, text, { attachments, mode })));
138
+ server.registerTool('list_messages', {
139
+ title: 'Get Messages',
140
+ description: 'Retrieve message history from a channel.',
141
+ inputSchema: {
142
+ channel: z.string().describe('Channel name'),
143
+ limit: z.number().optional().describe('Maximum messages to return'),
144
+ before: z.string().optional().describe('Older-than cursor'),
145
+ after: z.string().optional().describe('Newer-than cursor'),
146
+ ...identityOverrideInputShape,
147
+ },
148
+ outputSchema: {
149
+ messages: z.array(z.object({}).passthrough()).describe('Messages'),
150
+ },
151
+ annotations: { readOnlyHint: true, destructiveHint: false, idempotentHint: true, openWorldHint: true },
152
+ }, async ({ channel, limit, before, after, as }) => {
153
+ const messages = await getAgentClient(as).messages(channel, { limit, before, after });
154
+ return jsonContent({ messages });
155
+ });
156
+ server.registerTool('reply_to_thread', {
157
+ title: 'Reply to Thread',
158
+ description: 'Reply to an existing message thread.',
159
+ inputSchema: {
160
+ message_id: z.string().describe('Parent message ID'),
161
+ text: z.string().describe('Reply text'),
162
+ ...identityOverrideInputShape,
163
+ },
164
+ outputSchema: jsonResult,
165
+ annotations: {
166
+ readOnlyHint: false,
167
+ destructiveHint: false,
168
+ idempotentHint: false,
169
+ openWorldHint: true,
170
+ },
171
+ }, async ({ message_id, text, as }) => jsonContent(await getAgentClient(as).reply(message_id, text)));
172
+ server.registerTool('get_message_thread', {
173
+ title: 'Get Thread',
174
+ description: 'Retrieve a message thread.',
175
+ inputSchema: {
176
+ message_id: z.string().describe('Parent message ID'),
177
+ limit: z.number().optional().describe('Maximum replies to return'),
178
+ ...identityOverrideInputShape,
179
+ },
180
+ outputSchema: jsonResult,
181
+ annotations: { readOnlyHint: true, destructiveHint: false, idempotentHint: true, openWorldHint: true },
182
+ }, async ({ message_id, limit, as }) => jsonContent(await getAgentClient(as).thread(message_id, limit ? { limit } : undefined)));
183
+ server.registerTool('send_dm', {
184
+ title: 'Send Direct Message',
185
+ description: 'Send a private direct message to another agent.',
186
+ inputSchema: {
187
+ to: z.string().describe('Recipient agent name'),
188
+ text: z.string().describe('DM text'),
189
+ mode: z.enum(['wait', 'steer']).optional().describe('Delivery mode'),
190
+ attachments: z.array(z.string()).optional().describe('File attachment IDs'),
191
+ ...identityOverrideInputShape,
192
+ },
193
+ outputSchema: jsonResult,
194
+ annotations: {
195
+ readOnlyHint: false,
196
+ destructiveHint: false,
197
+ idempotentHint: false,
198
+ openWorldHint: true,
199
+ },
200
+ }, async ({ to, text, mode, attachments, as }) => jsonContent(await getAgentClient(as).dm(to, text, { mode, attachments })));
201
+ server.registerTool('list_dms', {
202
+ title: 'List DM Conversations',
203
+ description: 'List direct message conversations for the current agent.',
204
+ inputSchema: {
205
+ ...identityOverrideInputShape,
206
+ },
207
+ outputSchema: {
208
+ conversations: z.array(z.object({}).passthrough()).describe('DM conversations'),
209
+ },
210
+ annotations: { readOnlyHint: true, destructiveHint: false, idempotentHint: true, openWorldHint: true },
211
+ }, async ({ as }) => jsonContent({ conversations: await getAgentClient(as).dms.conversations() }));
212
+ server.registerTool('send_group_dm', {
213
+ title: 'Send Group DM',
214
+ description: 'Create a group DM and send the first message.',
215
+ inputSchema: {
216
+ participants: z.array(z.string()).describe('Participant agent names'),
217
+ name: z.string().optional().describe('Optional group name'),
218
+ text: z.string().describe('Initial message'),
219
+ ...identityOverrideInputShape,
220
+ },
221
+ outputSchema: jsonResult,
222
+ annotations: {
223
+ readOnlyHint: false,
224
+ destructiveHint: false,
225
+ idempotentHint: false,
226
+ openWorldHint: true,
227
+ },
228
+ }, async ({ participants, name, text, as }) => {
229
+ const client = getAgentClient(as);
230
+ const conversation = await client.dms.createGroup({ participants, name });
231
+ const message = await client.dms.sendMessage(conversation.id, text);
232
+ return jsonContent({ conversation, message });
233
+ });
234
+ server.registerTool('add_reaction', {
235
+ title: 'Add Reaction',
236
+ description: 'Add an emoji reaction to a message.',
237
+ inputSchema: {
238
+ message_id: z.string().describe('Message ID'),
239
+ emoji: z.string().describe('Emoji character or shortcode'),
240
+ ...identityOverrideInputShape,
241
+ },
242
+ outputSchema: messageResult,
243
+ annotations: { readOnlyHint: false, destructiveHint: false, idempotentHint: true, openWorldHint: true },
244
+ }, async ({ message_id, emoji, as }) => {
245
+ const resolved = resolveEmoji(emoji);
246
+ await getAgentClient(as).react(message_id, resolved);
247
+ return textContent(`Reacted with ${resolved}`);
248
+ });
249
+ server.registerTool('remove_reaction', {
250
+ title: 'Remove Reaction',
251
+ description: 'Remove an emoji reaction from a message.',
252
+ inputSchema: {
253
+ message_id: z.string().describe('Message ID'),
254
+ emoji: z.string().describe('Emoji character or shortcode'),
255
+ ...identityOverrideInputShape,
256
+ },
257
+ outputSchema: messageResult,
258
+ annotations: { readOnlyHint: false, destructiveHint: false, idempotentHint: true, openWorldHint: true },
259
+ }, async ({ message_id, emoji, as }) => {
260
+ const resolved = resolveEmoji(emoji);
261
+ await getAgentClient(as).unreact(message_id, resolved);
262
+ return textContent(`Removed reaction ${resolved}`);
263
+ });
264
+ server.registerTool('search_messages', {
265
+ title: 'Search Messages',
266
+ description: 'Search messages across the workspace.',
267
+ inputSchema: {
268
+ query: z.string().describe('Text search query'),
269
+ channel: z.string().optional().describe('Optional channel filter'),
270
+ from: z.string().optional().describe('Optional sender filter'),
271
+ limit: z.number().optional().describe('Maximum results'),
272
+ ...identityOverrideInputShape,
273
+ },
274
+ outputSchema: {
275
+ results: z.array(z.object({}).passthrough()).describe('Search results'),
276
+ },
277
+ annotations: { readOnlyHint: true, destructiveHint: false, idempotentHint: true, openWorldHint: true },
278
+ }, async ({ query, channel, from, limit, as }) => jsonContent({ results: await getAgentClient(as).search(query, { channel, from, limit }) }));
279
+ server.registerTool('check_inbox', {
280
+ title: 'Check Inbox',
281
+ description: 'Check unread messages, mentions, DMs, and reactions for the current agent.',
282
+ inputSchema: {
283
+ limit: z.number().optional().describe('Maximum inbox items'),
284
+ ...identityOverrideInputShape,
285
+ },
286
+ outputSchema: jsonResult,
287
+ annotations: { readOnlyHint: true, destructiveHint: false, idempotentHint: true, openWorldHint: true },
288
+ }, async ({ limit, as }) => jsonContent(await getAgentClient(as).inbox(limit != null ? { limit } : undefined)));
289
+ server.registerTool('mark_message_read', {
290
+ title: 'Mark as Read',
291
+ description: 'Mark a message as read for the current agent.',
292
+ inputSchema: {
293
+ message_id: z.string().describe('Message ID'),
294
+ ...identityOverrideInputShape,
295
+ },
296
+ outputSchema: messageResult,
297
+ annotations: { readOnlyHint: false, destructiveHint: false, idempotentHint: true, openWorldHint: true },
298
+ }, async ({ message_id, as }) => {
299
+ await getAgentClient(as).markRead(message_id);
300
+ return textContent(`Marked message ${message_id} as read`);
301
+ });
302
+ server.registerTool('get_message_readers', {
303
+ title: 'Get Readers',
304
+ description: 'List agents who have read a message.',
305
+ inputSchema: {
306
+ message_id: z.string().describe('Message ID'),
307
+ ...identityOverrideInputShape,
308
+ },
309
+ outputSchema: {
310
+ readers: z.array(z.object({}).passthrough()).describe('Readers'),
311
+ },
312
+ annotations: { readOnlyHint: true, destructiveHint: false, idempotentHint: true, openWorldHint: true },
313
+ }, async ({ message_id, as }) => jsonContent({ readers: await getAgentClient(as).readers(message_id) }));
314
+ }
315
+ //# sourceMappingURL=messaging-tools.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"messaging-tools.js","sourceRoot":"","sources":["../../../src/cli/mcp/messaging-tools.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,39 @@
1
+ import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
2
+ import { type AgentClient, type RelayCast, type WsClient } from '@relaycast/sdk';
3
+ /**
4
+ * Tracks the set of `relay://` resource URIs the MCP client has subscribed to,
5
+ * so realtime events can be filtered down to only the resources that matter.
6
+ */
7
+ export declare class SubscriptionManager {
8
+ private readonly subscriptions;
9
+ subscribe(uri: string): void;
10
+ unsubscribe(uri: string): void;
11
+ getMatchingSubscriptions(uris: string[]): string[];
12
+ getAll(): string[];
13
+ clear(): void;
14
+ }
15
+ /**
16
+ * Map a realtime workspace event to the `relay://` resource URIs whose contents
17
+ * it invalidates, so subscribers can be notified to re-fetch.
18
+ */
19
+ export declare function eventToResourceUris(event: unknown): string[];
20
+ /**
21
+ * Bridges the realtime WebSocket event stream to MCP resource notifications:
22
+ * for each workspace event, notifies any subscribed `relay://` resource URIs
23
+ * that the event invalidates.
24
+ */
25
+ export declare class RealtimeResourceBridge {
26
+ private readonly wsClient;
27
+ private readonly subscriptions;
28
+ private readonly notifyCallback;
29
+ private unsubscribeFn;
30
+ constructor(wsClient: WsClient, subscriptions: SubscriptionManager, notifyCallback: (uri: string) => void);
31
+ start(): void;
32
+ stop(): void;
33
+ }
34
+ /**
35
+ * Register the read-only `relay://` resources (inbox, agents, channels, channel
36
+ * messages, message threads, and DM conversations) on the MCP server.
37
+ */
38
+ export declare function registerResourceDefinitions(server: McpServer, getAgentClient: (asIdentity?: string) => AgentClient, getRelay: () => RelayCast): void;
39
+ //# sourceMappingURL=resources.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resources.d.ts","sourceRoot":"","sources":["../../../src/cli/mcp/resources.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAoB,MAAM,yCAAyC,CAAC;AACtF,OAAO,EAAE,KAAK,WAAW,EAAE,KAAK,SAAS,EAAE,KAAK,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAEjF;;;GAGG;AACH,qBAAa,mBAAmB;IAC9B,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAqB;IAEnD,SAAS,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI;IAI5B,WAAW,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI;IAI9B,wBAAwB,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,MAAM,EAAE;IAIlD,MAAM,IAAI,MAAM,EAAE;IAIlB,KAAK,IAAI,IAAI;CAGd;AAUD;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,EAAE,CAwC5D;AAED;;;;GAIG;AACH,qBAAa,sBAAsB;IAI/B,OAAO,CAAC,QAAQ,CAAC,QAAQ;IACzB,OAAO,CAAC,QAAQ,CAAC,aAAa;IAC9B,OAAO,CAAC,QAAQ,CAAC,cAAc;IALjC,OAAO,CAAC,aAAa,CAA6B;gBAG/B,QAAQ,EAAE,QAAQ,EAClB,aAAa,EAAE,mBAAmB,EAClC,cAAc,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI;IAGxD,KAAK,IAAI,IAAI;IAoBb,IAAI,IAAI,IAAI;CAOb;AAED;;;GAGG;AACH,wBAAgB,2BAA2B,CACzC,MAAM,EAAE,SAAS,EACjB,cAAc,EAAE,CAAC,UAAU,CAAC,EAAE,MAAM,KAAK,WAAW,EACpD,QAAQ,EAAE,MAAM,SAAS,GACxB,IAAI,CAwEN"}
@@ -0,0 +1,158 @@
1
+ import { ResourceTemplate } from '@modelcontextprotocol/sdk/server/mcp.js';
2
+ /**
3
+ * Tracks the set of `relay://` resource URIs the MCP client has subscribed to,
4
+ * so realtime events can be filtered down to only the resources that matter.
5
+ */
6
+ export class SubscriptionManager {
7
+ subscriptions = new Set();
8
+ subscribe(uri) {
9
+ this.subscriptions.add(uri);
10
+ }
11
+ unsubscribe(uri) {
12
+ this.subscriptions.delete(uri);
13
+ }
14
+ getMatchingSubscriptions(uris) {
15
+ return uris.filter((uri) => this.subscriptions.has(uri));
16
+ }
17
+ getAll() {
18
+ return [...this.subscriptions];
19
+ }
20
+ clear() {
21
+ this.subscriptions.clear();
22
+ }
23
+ }
24
+ function getStringEventField(event, field) {
25
+ if (typeof event !== 'object' || event === null) {
26
+ return null;
27
+ }
28
+ const candidate = event[field];
29
+ return typeof candidate === 'string' ? candidate : null;
30
+ }
31
+ /**
32
+ * Map a realtime workspace event to the `relay://` resource URIs whose contents
33
+ * it invalidates, so subscribers can be notified to re-fetch.
34
+ */
35
+ export function eventToResourceUris(event) {
36
+ const type = getStringEventField(event, 'type');
37
+ switch (type) {
38
+ case 'message.created': {
39
+ const channel = getStringEventField(event, 'channel');
40
+ return channel ? ['relay://inbox', `relay://channels/${channel}/messages`] : ['relay://inbox'];
41
+ }
42
+ case 'message.updated': {
43
+ const channel = getStringEventField(event, 'channel');
44
+ return channel ? [`relay://channels/${channel}/messages`] : [];
45
+ }
46
+ case 'thread.reply': {
47
+ const parentId = getStringEventField(event, 'parentId');
48
+ return parentId ? ['relay://inbox', `relay://messages/${parentId}/thread`] : ['relay://inbox'];
49
+ }
50
+ case 'dm.received':
51
+ case 'group_dm.received': {
52
+ const conversationId = getStringEventField(event, 'conversationId');
53
+ return conversationId ? ['relay://inbox', `relay://dm/${conversationId}`] : ['relay://inbox'];
54
+ }
55
+ case 'agent.online':
56
+ case 'agent.offline':
57
+ return ['relay://agents'];
58
+ case 'channel.created':
59
+ case 'channel.updated':
60
+ case 'channel.archived':
61
+ case 'member.joined':
62
+ case 'member.left':
63
+ return ['relay://channels'];
64
+ case 'webhook.received':
65
+ case 'command.invoked': {
66
+ const channel = getStringEventField(event, 'channel');
67
+ return channel ? [`relay://channels/${channel}/messages`] : [];
68
+ }
69
+ case 'reaction.added':
70
+ case 'reaction.removed':
71
+ return ['relay://inbox'];
72
+ default:
73
+ return [];
74
+ }
75
+ }
76
+ /**
77
+ * Bridges the realtime WebSocket event stream to MCP resource notifications:
78
+ * for each workspace event, notifies any subscribed `relay://` resource URIs
79
+ * that the event invalidates.
80
+ */
81
+ export class RealtimeResourceBridge {
82
+ wsClient;
83
+ subscriptions;
84
+ notifyCallback;
85
+ unsubscribeFn = null;
86
+ constructor(wsClient, subscriptions, notifyCallback) {
87
+ this.wsClient = wsClient;
88
+ this.subscriptions = subscriptions;
89
+ this.notifyCallback = notifyCallback;
90
+ }
91
+ start() {
92
+ this.unsubscribeFn = this.wsClient.on('*', (event) => {
93
+ const type = getStringEventField(event, 'type');
94
+ if (type === 'open' ||
95
+ type === 'close' ||
96
+ type === 'error' ||
97
+ type === 'reconnecting' ||
98
+ type === 'permanently_disconnected') {
99
+ return;
100
+ }
101
+ const matched = this.subscriptions.getMatchingSubscriptions(eventToResourceUris(event));
102
+ for (const uri of matched) {
103
+ this.notifyCallback(uri);
104
+ }
105
+ });
106
+ this.wsClient.connect();
107
+ }
108
+ stop() {
109
+ if (this.unsubscribeFn) {
110
+ this.unsubscribeFn();
111
+ this.unsubscribeFn = null;
112
+ }
113
+ this.wsClient.disconnect();
114
+ }
115
+ }
116
+ /**
117
+ * Register the read-only `relay://` resources (inbox, agents, channels, channel
118
+ * messages, message threads, and DM conversations) on the MCP server.
119
+ */
120
+ export function registerResourceDefinitions(server, getAgentClient, getRelay) {
121
+ server.registerResource('inbox', 'relay://inbox', { title: 'Inbox', description: 'Unread messages, mentions, and DMs', mimeType: 'application/json' }, async (uri) => {
122
+ const inbox = await getAgentClient().inbox();
123
+ return { contents: [{ uri: uri.href, text: JSON.stringify(inbox) }] };
124
+ });
125
+ server.registerResource('agents', 'relay://agents', {
126
+ title: 'Agents',
127
+ description: 'Online and offline agents in the workspace',
128
+ mimeType: 'application/json',
129
+ }, async (uri) => {
130
+ const agents = await getRelay().agents.list();
131
+ return { contents: [{ uri: uri.href, text: JSON.stringify(agents) }] };
132
+ });
133
+ server.registerResource('channels', 'relay://channels', { title: 'Channels', description: 'Available channels in the workspace', mimeType: 'application/json' }, async (uri) => {
134
+ const channels = await getAgentClient().channels.list();
135
+ return { contents: [{ uri: uri.href, text: JSON.stringify(channels) }] };
136
+ });
137
+ server.registerResource('channel-messages', new ResourceTemplate('relay://channels/{name}/messages', { list: undefined }), {
138
+ title: 'Channel Messages',
139
+ description: 'Messages in a specific channel',
140
+ mimeType: 'application/json',
141
+ }, async (uri, params) => {
142
+ const messages = await getAgentClient().messages(String(params.name));
143
+ return { contents: [{ uri: uri.href, text: JSON.stringify(messages) }] };
144
+ });
145
+ server.registerResource('message-thread', new ResourceTemplate('relay://messages/{id}/thread', { list: undefined }), { title: 'Message Thread', description: 'Thread replies on a message', mimeType: 'application/json' }, async (uri, params) => {
146
+ const thread = await getAgentClient().thread(String(params.id));
147
+ return { contents: [{ uri: uri.href, text: JSON.stringify(thread) }] };
148
+ });
149
+ server.registerResource('dm-conversation', new ResourceTemplate('relay://dm/{conversation_id}', { list: undefined }), {
150
+ title: 'DM Conversation',
151
+ description: 'Direct message conversation',
152
+ mimeType: 'application/json',
153
+ }, async (uri, params) => {
154
+ const messages = await getAgentClient().dms.messages(String(params.conversation_id));
155
+ return { contents: [{ uri: uri.href, text: JSON.stringify(messages) }] };
156
+ });
157
+ }
158
+ //# sourceMappingURL=resources.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resources.js","sourceRoot":"","sources":["../../../src/cli/mcp/resources.ts"],"names":[],"mappings":"AAAA,OAAO,EAAa,gBAAgB,EAAE,MAAM,yCAAyC,CAAC;AAGtF;;;GAGG;AACH,MAAM,OAAO,mBAAmB;IACb,aAAa,GAAG,IAAI,GAAG,EAAU,CAAC;IAEnD,SAAS,CAAC,GAAW;QACnB,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IAC9B,CAAC;IAED,WAAW,CAAC,GAAW;QACrB,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;IACjC,CAAC;IAED,wBAAwB,CAAC,IAAc;QACrC,OAAO,IAAI,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;IAC3D,CAAC;IAED,MAAM;QACJ,OAAO,CAAC,GAAG,IAAI,CAAC,aAAa,CAAC,CAAC;IACjC,CAAC;IAED,KAAK;QACH,IAAI,CAAC,aAAa,CAAC,KAAK,EAAE,CAAC;IAC7B,CAAC;CACF;AAED,SAAS,mBAAmB,CAAC,KAAc,EAAE,KAAa;IACxD,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;QAChD,OAAO,IAAI,CAAC;IACd,CAAC;IACD,MAAM,SAAS,GAAI,KAAiC,CAAC,KAAK,CAAC,CAAC;IAC5D,OAAO,OAAO,SAAS,KAAK,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC;AAC1D,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,mBAAmB,CAAC,KAAc;IAChD,MAAM,IAAI,GAAG,mBAAmB,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;IAChD,QAAQ,IAAI,EAAE,CAAC;QACb,KAAK,iBAAiB,CAAC,CAAC,CAAC;YACvB,MAAM,OAAO,GAAG,mBAAmB,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC;YACtD,OAAO,OAAO,CAAC,CAAC,CAAC,CAAC,eAAe,EAAE,oBAAoB,OAAO,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC;QACjG,CAAC;QACD,KAAK,iBAAiB,CAAC,CAAC,CAAC;YACvB,MAAM,OAAO,GAAG,mBAAmB,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC;YACtD,OAAO,OAAO,CAAC,CAAC,CAAC,CAAC,oBAAoB,OAAO,WAAW,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QACjE,CAAC;QACD,KAAK,cAAc,CAAC,CAAC,CAAC;YACpB,MAAM,QAAQ,GAAG,mBAAmB,CAAC,KAAK,EAAE,UAAU,CAAC,CAAC;YACxD,OAAO,QAAQ,CAAC,CAAC,CAAC,CAAC,eAAe,EAAE,oBAAoB,QAAQ,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC;QACjG,CAAC;QACD,KAAK,aAAa,CAAC;QACnB,KAAK,mBAAmB,CAAC,CAAC,CAAC;YACzB,MAAM,cAAc,GAAG,mBAAmB,CAAC,KAAK,EAAE,gBAAgB,CAAC,CAAC;YACpE,OAAO,cAAc,CAAC,CAAC,CAAC,CAAC,eAAe,EAAE,cAAc,cAAc,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC;QAChG,CAAC;QACD,KAAK,cAAc,CAAC;QACpB,KAAK,eAAe;YAClB,OAAO,CAAC,gBAAgB,CAAC,CAAC;QAC5B,KAAK,iBAAiB,CAAC;QACvB,KAAK,iBAAiB,CAAC;QACvB,KAAK,kBAAkB,CAAC;QACxB,KAAK,eAAe,CAAC;QACrB,KAAK,aAAa;YAChB,OAAO,CAAC,kBAAkB,CAAC,CAAC;QAC9B,KAAK,kBAAkB,CAAC;QACxB,KAAK,iBAAiB,CAAC,CAAC,CAAC;YACvB,MAAM,OAAO,GAAG,mBAAmB,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC;YACtD,OAAO,OAAO,CAAC,CAAC,CAAC,CAAC,oBAAoB,OAAO,WAAW,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QACjE,CAAC;QACD,KAAK,gBAAgB,CAAC;QACtB,KAAK,kBAAkB;YACrB,OAAO,CAAC,eAAe,CAAC,CAAC;QAC3B;YACE,OAAO,EAAE,CAAC;IACd,CAAC;AACH,CAAC;AAED;;;;GAIG;AACH,MAAM,OAAO,sBAAsB;IAId;IACA;IACA;IALX,aAAa,GAAwB,IAAI,CAAC;IAElD,YACmB,QAAkB,EAClB,aAAkC,EAClC,cAAqC;QAFrC,aAAQ,GAAR,QAAQ,CAAU;QAClB,kBAAa,GAAb,aAAa,CAAqB;QAClC,mBAAc,GAAd,cAAc,CAAuB;IACrD,CAAC;IAEJ,KAAK;QACH,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,KAAK,EAAE,EAAE;YACnD,MAAM,IAAI,GAAG,mBAAmB,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;YAChD,IACE,IAAI,KAAK,MAAM;gBACf,IAAI,KAAK,OAAO;gBAChB,IAAI,KAAK,OAAO;gBAChB,IAAI,KAAK,cAAc;gBACvB,IAAI,KAAK,0BAA0B,EACnC,CAAC;gBACD,OAAO;YACT,CAAC;YACD,MAAM,OAAO,GAAG,IAAI,CAAC,aAAa,CAAC,wBAAwB,CAAC,mBAAmB,CAAC,KAAK,CAAC,CAAC,CAAC;YACxF,KAAK,MAAM,GAAG,IAAI,OAAO,EAAE,CAAC;gBAC1B,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC;YAC3B,CAAC;QACH,CAAC,CAAC,CAAC;QACH,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE,CAAC;IAC1B,CAAC;IAED,IAAI;QACF,IAAI,IAAI,CAAC,aAAa,EAAE,CAAC;YACvB,IAAI,CAAC,aAAa,EAAE,CAAC;YACrB,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC;QAC5B,CAAC;QACD,IAAI,CAAC,QAAQ,CAAC,UAAU,EAAE,CAAC;IAC7B,CAAC;CACF;AAED;;;GAGG;AACH,MAAM,UAAU,2BAA2B,CACzC,MAAiB,EACjB,cAAoD,EACpD,QAAyB;IAEzB,MAAM,CAAC,gBAAgB,CACrB,OAAO,EACP,eAAe,EACf,EAAE,KAAK,EAAE,OAAO,EAAE,WAAW,EAAE,oCAAoC,EAAE,QAAQ,EAAE,kBAAkB,EAAE,EACnG,KAAK,EAAE,GAAG,EAAE,EAAE;QACZ,MAAM,KAAK,GAAG,MAAM,cAAc,EAAE,CAAC,KAAK,EAAE,CAAC;QAC7C,OAAO,EAAE,QAAQ,EAAE,CAAC,EAAE,GAAG,EAAE,GAAG,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE,CAAC,EAAE,CAAC;IACxE,CAAC,CACF,CAAC;IAEF,MAAM,CAAC,gBAAgB,CACrB,QAAQ,EACR,gBAAgB,EAChB;QACE,KAAK,EAAE,QAAQ;QACf,WAAW,EAAE,4CAA4C;QACzD,QAAQ,EAAE,kBAAkB;KAC7B,EACD,KAAK,EAAE,GAAG,EAAE,EAAE;QACZ,MAAM,MAAM,GAAG,MAAM,QAAQ,EAAE,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;QAC9C,OAAO,EAAE,QAAQ,EAAE,CAAC,EAAE,GAAG,EAAE,GAAG,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,CAAC;IACzE,CAAC,CACF,CAAC;IAEF,MAAM,CAAC,gBAAgB,CACrB,UAAU,EACV,kBAAkB,EAClB,EAAE,KAAK,EAAE,UAAU,EAAE,WAAW,EAAE,qCAAqC,EAAE,QAAQ,EAAE,kBAAkB,EAAE,EACvG,KAAK,EAAE,GAAG,EAAE,EAAE;QACZ,MAAM,QAAQ,GAAG,MAAM,cAAc,EAAE,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC;QACxD,OAAO,EAAE,QAAQ,EAAE,CAAC,EAAE,GAAG,EAAE,GAAG,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,EAAE,CAAC,EAAE,CAAC;IAC3E,CAAC,CACF,CAAC;IAEF,MAAM,CAAC,gBAAgB,CACrB,kBAAkB,EAClB,IAAI,gBAAgB,CAAC,kCAAkC,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC,EAC7E;QACE,KAAK,EAAE,kBAAkB;QACzB,WAAW,EAAE,gCAAgC;QAC7C,QAAQ,EAAE,kBAAkB;KAC7B,EACD,KAAK,EAAE,GAAG,EAAE,MAAM,EAAE,EAAE;QACpB,MAAM,QAAQ,GAAG,MAAM,cAAc,EAAE,CAAC,QAAQ,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC;QACtE,OAAO,EAAE,QAAQ,EAAE,CAAC,EAAE,GAAG,EAAE,GAAG,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,EAAE,CAAC,EAAE,CAAC;IAC3E,CAAC,CACF,CAAC;IAEF,MAAM,CAAC,gBAAgB,CACrB,gBAAgB,EAChB,IAAI,gBAAgB,CAAC,8BAA8B,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC,EACzE,EAAE,KAAK,EAAE,gBAAgB,EAAE,WAAW,EAAE,6BAA6B,EAAE,QAAQ,EAAE,kBAAkB,EAAE,EACrG,KAAK,EAAE,GAAG,EAAE,MAAM,EAAE,EAAE;QACpB,MAAM,MAAM,GAAG,MAAM,cAAc,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC;QAChE,OAAO,EAAE,QAAQ,EAAE,CAAC,EAAE,GAAG,EAAE,GAAG,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,CAAC;IACzE,CAAC,CACF,CAAC;IAEF,MAAM,CAAC,gBAAgB,CACrB,iBAAiB,EACjB,IAAI,gBAAgB,CAAC,8BAA8B,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC,EACzE;QACE,KAAK,EAAE,iBAAiB;QACxB,WAAW,EAAE,6BAA6B;QAC1C,QAAQ,EAAE,kBAAkB;KAC7B,EACD,KAAK,EAAE,GAAG,EAAE,MAAM,EAAE,EAAE;QACpB,MAAM,QAAQ,GAAG,MAAM,cAAc,EAAE,CAAC,GAAG,CAAC,QAAQ,CAAC,MAAM,CAAC,MAAM,CAAC,eAAe,CAAC,CAAC,CAAC;QACrF,OAAO,EAAE,QAAQ,EAAE,CAAC,EAAE,GAAG,EAAE,GAAG,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,EAAE,CAAC,EAAE,CAAC;IAC3E,CAAC,CACF,CAAC;AACJ,CAAC"}
@@ -0,0 +1,9 @@
1
+ import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
2
+ import type { AgentClientLike, AgentRelayMcpServerOptions, SessionState } from './types.js';
3
+ /**
4
+ * Wrap `server.registerTool` so every owned tool emits `agent_relay_tool_call`
5
+ * telemetry, surfaces invalid-agent-token errors as recoverable results, and
6
+ * piggybacks a compact inbox summary onto successful results.
7
+ */
8
+ export declare function enableInboxPiggyback(mcpServer: McpServer, getSession: () => SessionState, getAgentClient: (asIdentity?: string) => AgentClientLike, invalidateAgentToken: (asIdentity?: string) => void, telemetryTransport?: AgentRelayMcpServerOptions['telemetryTransport'], actionToolNames?: Set<string>): void;
9
+ //# sourceMappingURL=telemetry.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"telemetry.d.ts","sourceRoot":"","sources":["../../../src/cli/mcp/telemetry.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAWpE,OAAO,KAAK,EAAE,eAAe,EAAE,0BAA0B,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAsF5F;;;;GAIG;AACH,wBAAgB,oBAAoB,CAClC,SAAS,EAAE,SAAS,EACpB,UAAU,EAAE,MAAM,YAAY,EAC9B,cAAc,EAAE,CAAC,UAAU,CAAC,EAAE,MAAM,KAAK,eAAe,EACxD,oBAAoB,EAAE,CAAC,UAAU,CAAC,EAAE,MAAM,KAAK,IAAI,EACnD,kBAAkB,CAAC,EAAE,0BAA0B,CAAC,oBAAoB,CAAC,EACrE,eAAe,cAAoB,GAClC,IAAI,CA0GN"}