@relaycast/mcp 0.5.0 → 0.5.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/dist/piggyback.d.ts +12 -1
- package/dist/piggyback.d.ts.map +1 -1
- package/dist/piggyback.js +39 -16
- package/dist/piggyback.js.map +1 -1
- package/dist/prompts.d.ts +1 -1
- package/dist/prompts.d.ts.map +1 -1
- package/dist/prompts.js +9 -9
- package/dist/resources/definitions.d.ts +6 -1
- package/dist/resources/definitions.d.ts.map +1 -1
- package/dist/resources/definitions.js +38 -12
- package/dist/resources/definitions.js.map +1 -1
- package/dist/server.d.ts +5 -0
- package/dist/server.d.ts.map +1 -1
- package/dist/server.js +177 -38
- package/dist/server.js.map +1 -1
- package/dist/stdio.js +8 -0
- package/dist/stdio.js.map +1 -1
- package/dist/tool-aliases.d.ts +67 -0
- package/dist/tool-aliases.d.ts.map +1 -0
- package/dist/tool-aliases.js +71 -0
- package/dist/tool-aliases.js.map +1 -0
- package/dist/tools/channels.d.ts +5 -2
- package/dist/tools/channels.d.ts.map +1 -1
- package/dist/tools/channels.js +32 -21
- package/dist/tools/channels.js.map +1 -1
- package/dist/tools/features.d.ts +4 -1
- package/dist/tools/features.d.ts.map +1 -1
- package/dist/tools/features.js +28 -20
- package/dist/tools/features.js.map +1 -1
- package/dist/tools/messaging.d.ts +7 -1
- package/dist/tools/messaging.d.ts.map +1 -1
- package/dist/tools/messaging.js +34 -21
- package/dist/tools/messaging.js.map +1 -1
- package/dist/tools/programmability.d.ts +7 -1
- package/dist/tools/programmability.d.ts.map +1 -1
- package/dist/tools/programmability.js +22 -18
- package/dist/tools/programmability.js.map +1 -1
- package/dist/tools/registration.d.ts +4 -1
- package/dist/tools/registration.d.ts.map +1 -1
- package/dist/tools/registration.js +317 -21
- package/dist/tools/registration.js.map +1 -1
- package/dist/transports.d.ts.map +1 -1
- package/dist/transports.js +118 -1
- package/dist/transports.js.map +1 -1
- package/dist/types.d.ts +23 -0
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js +4 -0
- package/dist/types.js.map +1 -1
- package/dist/workspaces.d.ts +69 -0
- package/dist/workspaces.d.ts.map +1 -0
- package/dist/workspaces.js +134 -0
- package/dist/workspaces.js.map +1 -0
- package/package.json +3 -3
|
@@ -1,7 +1,16 @@
|
|
|
1
|
+
import { createHash } from 'node:crypto';
|
|
1
2
|
import { z } from 'zod';
|
|
2
3
|
const DEFAULT_BASE_URL = 'https://api.relaycast.dev';
|
|
3
4
|
/** Passthrough object schema for dynamic API responses. */
|
|
4
5
|
const jsonResult = z.object({}).passthrough();
|
|
6
|
+
const workspaceEntrySchema = z.object({
|
|
7
|
+
workspace_ref: z.string().describe('Stable workspace reference accepted by "workspace.switch"'),
|
|
8
|
+
workspace_key: z.string().describe('Masked workspace API key for display'),
|
|
9
|
+
workspace_name: z.string().nullable().describe('Canonical workspace name from the Relaycast API'),
|
|
10
|
+
workspace_label: z.string().nullable().describe('Optional custom label saved during "workspace.join"'),
|
|
11
|
+
agent_name: z.string().describe('Saved agent name for this workspace'),
|
|
12
|
+
is_active: z.boolean().describe('True if this workspace is currently active in the session'),
|
|
13
|
+
});
|
|
5
14
|
function normalizeBaseUrl(baseUrl) {
|
|
6
15
|
return (baseUrl ?? DEFAULT_BASE_URL).replace(/\/+$/, '');
|
|
7
16
|
}
|
|
@@ -20,14 +29,53 @@ async function createWorkspace(name, baseUrl) {
|
|
|
20
29
|
}
|
|
21
30
|
return payload.data;
|
|
22
31
|
}
|
|
32
|
+
async function fetchWorkspaceName(apiKey, baseUrl) {
|
|
33
|
+
try {
|
|
34
|
+
const response = await fetch(`${normalizeBaseUrl(baseUrl)}/v1/workspace`, {
|
|
35
|
+
headers: {
|
|
36
|
+
Authorization: `Bearer ${apiKey}`,
|
|
37
|
+
},
|
|
38
|
+
});
|
|
39
|
+
if (!response.ok)
|
|
40
|
+
return undefined;
|
|
41
|
+
const payload = (await response.json());
|
|
42
|
+
if (!payload || typeof payload !== 'object' || !('ok' in payload) || !payload.ok) {
|
|
43
|
+
return undefined;
|
|
44
|
+
}
|
|
45
|
+
const name = payload.data?.name;
|
|
46
|
+
return typeof name === 'string' ? name : undefined;
|
|
47
|
+
}
|
|
48
|
+
catch {
|
|
49
|
+
return undefined;
|
|
50
|
+
}
|
|
51
|
+
}
|
|
23
52
|
function requireWorkspaceKey(session) {
|
|
24
53
|
if (session.workspaceKey)
|
|
25
54
|
return;
|
|
26
|
-
throw new Error('Workspace key not configured. Call "
|
|
55
|
+
throw new Error('Workspace key not configured. Call "workspace.create" or "workspace.set_key" first.');
|
|
56
|
+
}
|
|
57
|
+
function saveWorkspaceContext(session, workspaceKey, agentToken, agentName, metadata = {}) {
|
|
58
|
+
const existing = session.workspaces.get(workspaceKey);
|
|
59
|
+
session.workspaces.set(workspaceKey, {
|
|
60
|
+
workspaceKey,
|
|
61
|
+
agentToken,
|
|
62
|
+
agentName,
|
|
63
|
+
agents: new Map(session.agents),
|
|
64
|
+
// Preserve existing workspace metadata if not explicitly provided.
|
|
65
|
+
workspaceName: metadata.workspaceName ?? existing?.workspaceName,
|
|
66
|
+
workspaceLabel: metadata.workspaceLabel ?? existing?.workspaceLabel,
|
|
67
|
+
// Force bridge re-init when this workspace is restored.
|
|
68
|
+
wsBridge: null,
|
|
69
|
+
subscriptions: null,
|
|
70
|
+
wsInitAttempted: false,
|
|
71
|
+
});
|
|
72
|
+
}
|
|
73
|
+
function createRegisteredAgent(agentName, agentToken) {
|
|
74
|
+
return { agentName, agentToken };
|
|
27
75
|
}
|
|
28
76
|
export function registerRegistrationTools(server, getRelay, getSession, setSession, baseUrl, strictAgentName, preferredAgentName, forcedAgentType) {
|
|
29
77
|
// Tool 1: create_workspace
|
|
30
|
-
server.registerTool('
|
|
78
|
+
server.registerTool('workspace.create', {
|
|
31
79
|
title: 'Create Workspace',
|
|
32
80
|
description: 'Create a new Relaycast workspace and automatically store its API key in this MCP session. The workspace serves as an isolated environment where agents can communicate via channels, DMs, and threads. After creation, the workspace key is ready for immediate use with register and other workspace-level tools.',
|
|
33
81
|
inputSchema: {
|
|
@@ -41,15 +89,19 @@ export function registerRegistrationTools(server, getRelay, getSession, setSessi
|
|
|
41
89
|
if (!workspaceKey || typeof workspaceKey !== 'string') {
|
|
42
90
|
throw new Error('Workspace created, but the response did not include api_key');
|
|
43
91
|
}
|
|
44
|
-
//
|
|
45
|
-
|
|
92
|
+
// Save current workspace context before switching (if registered).
|
|
93
|
+
const session = getSession();
|
|
94
|
+
if (session.workspaceKey && session.agentToken && session.agentName) {
|
|
95
|
+
saveWorkspaceContext(session, session.workspaceKey, session.agentToken, session.agentName);
|
|
96
|
+
}
|
|
97
|
+
setSession({ workspaceKey, agentToken: null, agentName: null, agents: new Map() });
|
|
46
98
|
return {
|
|
47
99
|
content: [{ type: 'text', text: JSON.stringify(workspace, null, 2) }],
|
|
48
100
|
structuredContent: workspace,
|
|
49
101
|
};
|
|
50
102
|
});
|
|
51
103
|
// Tool 2: set_workspace_key
|
|
52
|
-
server.registerTool('
|
|
104
|
+
server.registerTool('workspace.set_key', {
|
|
53
105
|
title: 'Set Workspace Key',
|
|
54
106
|
description: 'Authenticate this MCP session by providing an existing workspace API key (rk_live_...). This enables all workspace-level tools including agent registration, channel management, and messaging. If the key belongs to a different workspace than the current session, the previous agent identity is cleared and you must re-register.',
|
|
55
107
|
inputSchema: {
|
|
@@ -66,22 +118,40 @@ export function registerRegistrationTools(server, getRelay, getSession, setSessi
|
|
|
66
118
|
const session = getSession();
|
|
67
119
|
const switchingWorkspace = session.workspaceKey !== api_key;
|
|
68
120
|
if (switchingWorkspace) {
|
|
69
|
-
//
|
|
70
|
-
|
|
121
|
+
// Save current workspace context before switching (if registered).
|
|
122
|
+
if (session.workspaceKey && session.agentToken && session.agentName) {
|
|
123
|
+
saveWorkspaceContext(session, session.workspaceKey, session.agentToken, session.agentName);
|
|
124
|
+
}
|
|
125
|
+
// Restore previously joined workspace context, or start fresh.
|
|
126
|
+
const saved = session.workspaces.get(api_key);
|
|
127
|
+
if (saved) {
|
|
128
|
+
setSession({
|
|
129
|
+
workspaceKey: api_key,
|
|
130
|
+
agentToken: saved.agentToken,
|
|
131
|
+
agentName: saved.agentName,
|
|
132
|
+
agents: new Map(saved.agents),
|
|
133
|
+
});
|
|
134
|
+
}
|
|
135
|
+
else {
|
|
136
|
+
setSession({ workspaceKey: api_key, agentToken: null, agentName: null, agents: new Map() });
|
|
137
|
+
}
|
|
71
138
|
}
|
|
72
139
|
else {
|
|
73
140
|
setSession({ workspaceKey: api_key });
|
|
74
141
|
}
|
|
75
|
-
const
|
|
76
|
-
|
|
77
|
-
|
|
142
|
+
const saved = session.workspaces.get(api_key);
|
|
143
|
+
const message = !switchingWorkspace
|
|
144
|
+
? 'Workspace key set.'
|
|
145
|
+
: saved
|
|
146
|
+
? `Switched to workspace. Restored agent identity "${saved.agentName}".`
|
|
147
|
+
: 'Workspace key set. Call "agent.register" to join this workspace.';
|
|
78
148
|
return {
|
|
79
149
|
content: [{ type: 'text', text: message }],
|
|
80
150
|
structuredContent: { message },
|
|
81
151
|
};
|
|
82
152
|
});
|
|
83
|
-
// Tool 3: register
|
|
84
|
-
server.registerTool('register', {
|
|
153
|
+
// Tool 3: agent.register
|
|
154
|
+
server.registerTool('agent.register', {
|
|
85
155
|
title: 'Register Agent',
|
|
86
156
|
description: 'Register an agent identity in the current workspace and obtain an agent token for all subsequent operations. The agent name must be unique within the workspace. Once registered, the agent can send messages, join channels, react to messages, and perform all other agent-level actions. Re-registering with the same name returns the existing token.',
|
|
87
157
|
inputSchema: {
|
|
@@ -95,10 +165,18 @@ export function registerRegistrationTools(server, getRelay, getSession, setSessi
|
|
|
95
165
|
}, async ({ name, type, persona, metadata }) => {
|
|
96
166
|
const session = getSession();
|
|
97
167
|
requireWorkspaceKey(session);
|
|
98
|
-
const configuredName =
|
|
99
|
-
|
|
100
|
-
|
|
168
|
+
const configuredName = strictAgentName
|
|
169
|
+
? preferredAgentName?.trim()
|
|
170
|
+
?? session.agentName
|
|
171
|
+
?? null
|
|
172
|
+
: session.agentName
|
|
173
|
+
?? preferredAgentName?.trim()
|
|
174
|
+
?? null;
|
|
101
175
|
const warnings = [];
|
|
176
|
+
const registeredConfiguredToken = configuredName
|
|
177
|
+
? session.agents.get(configuredName)?.agentToken
|
|
178
|
+
?? (session.agentName === configuredName ? session.agentToken : null)
|
|
179
|
+
: null;
|
|
102
180
|
// In strict mode, enforce the pre-registered name from the broker.
|
|
103
181
|
// This prevents spawned agents from re-registering under a different name.
|
|
104
182
|
const effectiveName = strictAgentName && configuredName ? configuredName : name;
|
|
@@ -111,10 +189,21 @@ export function registerRegistrationTools(server, getRelay, getSession, setSessi
|
|
|
111
189
|
}
|
|
112
190
|
// If already pre-registered with a token, skip the API call and return
|
|
113
191
|
// the existing registration to avoid overwriting the pre-registered identity.
|
|
114
|
-
if (
|
|
192
|
+
if (registeredConfiguredToken && effectiveName && strictAgentName) {
|
|
193
|
+
const workspaceName = session.workspaceKey
|
|
194
|
+
? await fetchWorkspaceName(session.workspaceKey, baseUrl)
|
|
195
|
+
: undefined;
|
|
196
|
+
setSession({
|
|
197
|
+
agentToken: registeredConfiguredToken,
|
|
198
|
+
agentName: effectiveName,
|
|
199
|
+
agents: new Map(session.agents).set(effectiveName, createRegisteredAgent(effectiveName, registeredConfiguredToken)),
|
|
200
|
+
});
|
|
201
|
+
if (session.workspaceKey) {
|
|
202
|
+
saveWorkspaceContext(session, session.workspaceKey, registeredConfiguredToken, effectiveName, { workspaceName });
|
|
203
|
+
}
|
|
115
204
|
const existing = {
|
|
116
205
|
name: effectiveName,
|
|
117
|
-
token:
|
|
206
|
+
token: registeredConfiguredToken,
|
|
118
207
|
registered_name: effectiveName,
|
|
119
208
|
warnings,
|
|
120
209
|
};
|
|
@@ -124,14 +213,22 @@ export function registerRegistrationTools(server, getRelay, getSession, setSessi
|
|
|
124
213
|
};
|
|
125
214
|
}
|
|
126
215
|
const relay = getRelay();
|
|
127
|
-
const result = await relay.agents.
|
|
216
|
+
const result = await relay.agents.registerOrRotate({
|
|
128
217
|
name: effectiveName,
|
|
129
218
|
type: effectiveType,
|
|
130
219
|
persona,
|
|
131
220
|
metadata,
|
|
132
221
|
});
|
|
222
|
+
const nextAgents = new Map(session.agents);
|
|
223
|
+
nextAgents.set(effectiveName, createRegisteredAgent(effectiveName, result.token));
|
|
133
224
|
// Store the agent token in session state
|
|
134
|
-
setSession({ agentToken: result.token, agentName: effectiveName });
|
|
225
|
+
setSession({ agentToken: result.token, agentName: effectiveName, agents: nextAgents });
|
|
226
|
+
// Update multi-workspace context map.
|
|
227
|
+
const updatedSession = getSession();
|
|
228
|
+
if (updatedSession.workspaceKey) {
|
|
229
|
+
const workspaceName = await fetchWorkspaceName(updatedSession.workspaceKey, baseUrl);
|
|
230
|
+
saveWorkspaceContext(updatedSession, updatedSession.workspaceKey, result.token, effectiveName, { workspaceName });
|
|
231
|
+
}
|
|
135
232
|
const payload = {
|
|
136
233
|
...result,
|
|
137
234
|
registered_name: effectiveName,
|
|
@@ -142,8 +239,8 @@ export function registerRegistrationTools(server, getRelay, getSession, setSessi
|
|
|
142
239
|
structuredContent: payload,
|
|
143
240
|
};
|
|
144
241
|
});
|
|
145
|
-
// Tool 4:
|
|
146
|
-
server.registerTool('
|
|
242
|
+
// Tool 4: agent.list
|
|
243
|
+
server.registerTool('agent.list', {
|
|
147
244
|
title: 'List Agents',
|
|
148
245
|
description: 'Retrieve all agents registered in the current workspace. Returns each agent\'s name, type, persona, and online/offline status. Use the optional status filter to find only agents that are currently connected or disconnected.',
|
|
149
246
|
inputSchema: {
|
|
@@ -165,5 +262,204 @@ export function registerRegistrationTools(server, getRelay, getSession, setSessi
|
|
|
165
262
|
structuredContent: { agents: agents },
|
|
166
263
|
};
|
|
167
264
|
});
|
|
265
|
+
// Tool 5: list_workspaces
|
|
266
|
+
server.registerTool('workspace.list', {
|
|
267
|
+
title: 'List Joined Workspaces',
|
|
268
|
+
description: 'List all workspaces this agent has joined in the current MCP session. Returns a stable workspace_ref for switching, the masked workspace key for display, the canonical workspace name, any saved label, the saved agent name, and whether the workspace is currently active.',
|
|
269
|
+
inputSchema: {
|
|
270
|
+
status: z.enum(['active', 'all']).optional().describe('Filter workspaces by status: "active" for only the current workspace, "all" (default) for every joined workspace'),
|
|
271
|
+
},
|
|
272
|
+
outputSchema: {
|
|
273
|
+
workspaces: z.array(workspaceEntrySchema).describe('Array of joined workspace entries'),
|
|
274
|
+
active_workspace: z.string().nullable().describe('The masked workspace key that is currently active'),
|
|
275
|
+
active_workspace_ref: z.string().nullable().describe('Stable reference for the currently active workspace'),
|
|
276
|
+
},
|
|
277
|
+
annotations: { readOnlyHint: true, destructiveHint: false, idempotentHint: true, openWorldHint: false },
|
|
278
|
+
}, async ({ status }) => {
|
|
279
|
+
const session = getSession();
|
|
280
|
+
const all = Array.from(session.workspaces.values()).map((ctx) => ({
|
|
281
|
+
workspace_ref: createWorkspaceRef(ctx.workspaceKey),
|
|
282
|
+
workspace_key: maskKey(ctx.workspaceKey),
|
|
283
|
+
workspace_name: ctx.workspaceName ?? null,
|
|
284
|
+
workspace_label: ctx.workspaceLabel ?? null,
|
|
285
|
+
agent_name: ctx.agentName,
|
|
286
|
+
is_active: ctx.workspaceKey === session.workspaceKey,
|
|
287
|
+
}));
|
|
288
|
+
const entries = status === 'active'
|
|
289
|
+
? all.filter((e) => e.is_active)
|
|
290
|
+
: all;
|
|
291
|
+
const result = {
|
|
292
|
+
workspaces: entries,
|
|
293
|
+
active_workspace: session.workspaceKey ? maskKey(session.workspaceKey) : null,
|
|
294
|
+
active_workspace_ref: session.workspaceKey ? createWorkspaceRef(session.workspaceKey) : null,
|
|
295
|
+
};
|
|
296
|
+
return {
|
|
297
|
+
content: [{ type: 'text', text: JSON.stringify(result, null, 2) }],
|
|
298
|
+
structuredContent: result,
|
|
299
|
+
};
|
|
300
|
+
});
|
|
301
|
+
// Tool 6: join_workspace
|
|
302
|
+
server.registerTool('workspace.join', {
|
|
303
|
+
title: 'Join Workspace',
|
|
304
|
+
description: 'Join an additional workspace by providing its API key and registering an agent identity. The agent will be registered in the target workspace and the session context will be saved, allowing you to switch between workspaces without re-registering. After joining, the new workspace becomes the active workspace.',
|
|
305
|
+
inputSchema: {
|
|
306
|
+
api_key: z.string().describe('Workspace API key starting with "rk_live_"'),
|
|
307
|
+
name: z.string().describe('Agent name to register in the target workspace'),
|
|
308
|
+
workspace_name: z.string().optional().describe('Optional custom label to save for easier switching. The canonical workspace name is fetched automatically from the API.'),
|
|
309
|
+
type: z.enum(['agent', 'human']).optional().describe('Whether this identity represents an AI agent or a human user'),
|
|
310
|
+
persona: z.string().optional().describe('Free-text persona description'),
|
|
311
|
+
},
|
|
312
|
+
outputSchema: jsonResult,
|
|
313
|
+
annotations: { readOnlyHint: false, destructiveHint: false, idempotentHint: true, openWorldHint: true },
|
|
314
|
+
}, async ({ api_key, name, workspace_name, type, persona }) => {
|
|
315
|
+
if (!api_key.startsWith('rk_live_')) {
|
|
316
|
+
throw new Error('Workspace key must start with "rk_live_"');
|
|
317
|
+
}
|
|
318
|
+
const session = getSession();
|
|
319
|
+
const canonicalWorkspaceName = await fetchWorkspaceName(api_key, baseUrl);
|
|
320
|
+
// Save current workspace context before switching.
|
|
321
|
+
if (session.workspaceKey && session.agentToken && session.agentName) {
|
|
322
|
+
saveWorkspaceContext(session, session.workspaceKey, session.agentToken, session.agentName);
|
|
323
|
+
}
|
|
324
|
+
// Check if already joined this workspace.
|
|
325
|
+
const existing = session.workspaces.get(api_key);
|
|
326
|
+
if (existing) {
|
|
327
|
+
if (canonicalWorkspaceName && existing.workspaceName !== canonicalWorkspaceName) {
|
|
328
|
+
existing.workspaceName = canonicalWorkspaceName;
|
|
329
|
+
}
|
|
330
|
+
if (workspace_name && existing.workspaceLabel !== workspace_name) {
|
|
331
|
+
existing.workspaceLabel = workspace_name;
|
|
332
|
+
}
|
|
333
|
+
setSession({
|
|
334
|
+
workspaceKey: api_key,
|
|
335
|
+
agentToken: existing.agentToken,
|
|
336
|
+
agentName: existing.agentName,
|
|
337
|
+
agents: new Map(existing.agents),
|
|
338
|
+
});
|
|
339
|
+
const result = {
|
|
340
|
+
message: `Already joined workspace as "${existing.agentName}". Switched to it.`,
|
|
341
|
+
agent_name: existing.agentName,
|
|
342
|
+
};
|
|
343
|
+
return {
|
|
344
|
+
content: [{ type: 'text', text: JSON.stringify(result, null, 2) }],
|
|
345
|
+
structuredContent: result,
|
|
346
|
+
};
|
|
347
|
+
}
|
|
348
|
+
// Switch to new workspace and register.
|
|
349
|
+
setSession({ workspaceKey: api_key, agentToken: null, agentName: null, agents: new Map() });
|
|
350
|
+
const relay = getRelay();
|
|
351
|
+
const regResult = await relay.agents.registerOrRotate({ name, type, persona });
|
|
352
|
+
setSession({
|
|
353
|
+
agentToken: regResult.token,
|
|
354
|
+
agentName: name,
|
|
355
|
+
agents: new Map([[name, createRegisteredAgent(name, regResult.token)]]),
|
|
356
|
+
});
|
|
357
|
+
// Save the new workspace context.
|
|
358
|
+
const updatedSession = getSession();
|
|
359
|
+
saveWorkspaceContext(updatedSession, api_key, regResult.token, name, {
|
|
360
|
+
workspaceName: canonicalWorkspaceName,
|
|
361
|
+
workspaceLabel: workspace_name,
|
|
362
|
+
});
|
|
363
|
+
const result = {
|
|
364
|
+
message: `Joined workspace and registered as "${name}".`,
|
|
365
|
+
...regResult,
|
|
366
|
+
agent_name: name,
|
|
367
|
+
};
|
|
368
|
+
return {
|
|
369
|
+
content: [{ type: 'text', text: JSON.stringify(result, null, 2) }],
|
|
370
|
+
structuredContent: result,
|
|
371
|
+
};
|
|
372
|
+
});
|
|
373
|
+
// Tool 7: switch_workspace
|
|
374
|
+
server.registerTool('workspace.switch', {
|
|
375
|
+
title: 'Switch Workspace',
|
|
376
|
+
description: 'Switch the active workspace to a previously joined workspace. Provide either a full api_key, workspace_ref from "workspace.list", or workspace_name matching either the canonical workspace record name or a saved custom label. The agent identity and WebSocket connection for the target workspace are restored from the saved session context.',
|
|
377
|
+
inputSchema: {
|
|
378
|
+
api_key: z.string().optional().describe('Full workspace API key to switch to (must have been previously joined)'),
|
|
379
|
+
workspace_ref: z.string().optional().describe('Stable workspace reference from "workspace.list"'),
|
|
380
|
+
workspace_name: z.string().optional().describe('Canonical workspace name from the API, or a saved custom label from "workspace.join"'),
|
|
381
|
+
},
|
|
382
|
+
outputSchema: {
|
|
383
|
+
message: z.string().describe('Confirmation message'),
|
|
384
|
+
agent_name: z.string().describe('The restored agent name in the target workspace'),
|
|
385
|
+
},
|
|
386
|
+
annotations: { readOnlyHint: false, destructiveHint: false, idempotentHint: true, openWorldHint: false },
|
|
387
|
+
}, async ({ api_key, workspace_ref, workspace_name }) => {
|
|
388
|
+
if (!api_key && !workspace_ref && !workspace_name) {
|
|
389
|
+
throw new Error('Provide "api_key", "workspace_ref", or "workspace_name".');
|
|
390
|
+
}
|
|
391
|
+
if (api_key && !api_key.startsWith('rk_live_')) {
|
|
392
|
+
throw new Error('Workspace key must start with "rk_live_"');
|
|
393
|
+
}
|
|
394
|
+
const session = getSession();
|
|
395
|
+
const resolved = resolveSavedWorkspace(session, api_key, workspace_ref, workspace_name);
|
|
396
|
+
if (!resolved) {
|
|
397
|
+
throw new Error('Workspace not found in session. Use "workspace.join" to join it first, or "workspace.set_key" to connect without a saved context.');
|
|
398
|
+
}
|
|
399
|
+
const { workspaceKey: targetWorkspaceKey, context: saved } = resolved;
|
|
400
|
+
// Save current workspace context.
|
|
401
|
+
if (session.workspaceKey && session.agentToken && session.agentName) {
|
|
402
|
+
saveWorkspaceContext(session, session.workspaceKey, session.agentToken, session.agentName);
|
|
403
|
+
}
|
|
404
|
+
// Restore the target workspace context.
|
|
405
|
+
setSession({
|
|
406
|
+
workspaceKey: targetWorkspaceKey,
|
|
407
|
+
agentToken: saved.agentToken,
|
|
408
|
+
agentName: saved.agentName,
|
|
409
|
+
agents: new Map(saved.agents),
|
|
410
|
+
});
|
|
411
|
+
const result = {
|
|
412
|
+
message: `Switched to workspace. Restored agent identity "${saved.agentName}".`,
|
|
413
|
+
agent_name: saved.agentName,
|
|
414
|
+
};
|
|
415
|
+
return {
|
|
416
|
+
content: [{ type: 'text', text: JSON.stringify(result, null, 2) }],
|
|
417
|
+
structuredContent: result,
|
|
418
|
+
};
|
|
419
|
+
});
|
|
420
|
+
}
|
|
421
|
+
function createWorkspaceRef(workspaceKey) {
|
|
422
|
+
return `ws_${createHash('sha256').update(workspaceKey).digest('hex').slice(0, 12)}`;
|
|
423
|
+
}
|
|
424
|
+
function resolveSavedWorkspace(session, apiKey, workspaceRef, workspaceName) {
|
|
425
|
+
if (apiKey) {
|
|
426
|
+
const exact = session.workspaces.get(apiKey);
|
|
427
|
+
if (exact) {
|
|
428
|
+
return { workspaceKey: apiKey, context: exact };
|
|
429
|
+
}
|
|
430
|
+
const maskedMatches = Array.from(session.workspaces.entries()).filter(([workspaceKey]) => maskKey(workspaceKey) === apiKey);
|
|
431
|
+
if (maskedMatches.length > 1) {
|
|
432
|
+
throw new Error('Masked workspace key is ambiguous. Use "workspace_ref" from "workspace.list" or the full api_key.');
|
|
433
|
+
}
|
|
434
|
+
if (maskedMatches.length === 1) {
|
|
435
|
+
const [workspaceKey, context] = maskedMatches[0];
|
|
436
|
+
return { workspaceKey, context };
|
|
437
|
+
}
|
|
438
|
+
}
|
|
439
|
+
if (workspaceRef) {
|
|
440
|
+
for (const [workspaceKey, context] of session.workspaces.entries()) {
|
|
441
|
+
if (createWorkspaceRef(workspaceKey) === workspaceRef) {
|
|
442
|
+
return { workspaceKey, context };
|
|
443
|
+
}
|
|
444
|
+
}
|
|
445
|
+
}
|
|
446
|
+
if (workspaceName) {
|
|
447
|
+
const nameMatches = Array.from(session.workspaces.entries()).filter(([, ctx]) => ctx.workspaceName?.toLowerCase() === workspaceName.toLowerCase()
|
|
448
|
+
|| ctx.workspaceLabel?.toLowerCase() === workspaceName.toLowerCase());
|
|
449
|
+
if (nameMatches.length > 1) {
|
|
450
|
+
throw new Error(`Multiple workspaces match name "${workspaceName}". Use "workspace_ref" or "api_key" instead.`);
|
|
451
|
+
}
|
|
452
|
+
if (nameMatches.length === 1) {
|
|
453
|
+
const [workspaceKey, context] = nameMatches[0];
|
|
454
|
+
return { workspaceKey, context };
|
|
455
|
+
}
|
|
456
|
+
}
|
|
457
|
+
return null;
|
|
458
|
+
}
|
|
459
|
+
/** Mask a workspace key for display, showing only first 12 and last 4 chars. */
|
|
460
|
+
function maskKey(key) {
|
|
461
|
+
if (key.length <= 16)
|
|
462
|
+
return key;
|
|
463
|
+
return `${key.slice(0, 12)}...${key.slice(-4)}`;
|
|
168
464
|
}
|
|
169
465
|
//# sourceMappingURL=registration.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"registration.js","sourceRoot":"","sources":["../../src/tools/registration.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAcxB,MAAM,gBAAgB,GAAG,2BAA2B,CAAC;AAErD,2DAA2D;AAC3D,MAAM,UAAU,GAAG,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC;AAE9C,SAAS,gBAAgB,CAAC,OAAgB;IACxC,OAAO,CAAC,OAAO,IAAI,gBAAgB,CAAC,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;AAC3D,CAAC;AAED,KAAK,UAAU,eAAe,CAC5B,IAAY,EACZ,OAAgB;IAEhB,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,gBAAgB,CAAC,OAAO,CAAC,gBAAgB,EAAE;QACzE,MAAM,EAAE,MAAM;QACd,OAAO,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE;QAC/C,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,IAAI,EAAE,CAAC;KAC/B,CAAC,CAAC;IAEH,MAAM,OAAO,GAAG,CAAC,MAAM,QAAQ,CAAC,IAAI,EAAE,CAA4C,CAAC;IACnF,IAAI,CAAC,OAAO,IAAI,OAAO,OAAO,KAAK,QAAQ,IAAI,CAAC,CAAC,IAAI,IAAI,OAAO,CAAC,EAAE,CAAC;QAClE,MAAM,IAAI,KAAK,CAAC,2CAA2C,CAAC,CAAC;IAC/D,CAAC;IACD,IAAI,CAAC,OAAO,CAAC,EAAE,EAAE,CAAC;QAChB,MAAM,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,EAAE,OAAO,IAAI,4BAA4B,CAAC,CAAC;IAC1E,CAAC;IACD,OAAO,OAAO,CAAC,IAAI,CAAC;AACtB,CAAC;AAED,SAAS,mBAAmB,CAAC,OAAqB;IAChD,IAAI,OAAO,CAAC,YAAY;QAAE,OAAO;IACjC,MAAM,IAAI,KAAK,CACb,qFAAqF,CACtF,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,yBAAyB,CACvC,MAAiB,EACjB,QAAyB,EACzB,UAA8B,EAC9B,UAAkD,EAClD,OAAgB,EAChB,eAAyB,EACzB,kBAA2B,EAC3B,eAAmC;IAEnC,2BAA2B;IAC3B,MAAM,CAAC,YAAY,CACjB,kBAAkB,EAClB;QACE,KAAK,EAAE,kBAAkB;QACzB,WAAW,EACT,oTAAoT;QACtT,WAAW,EAAE;YACX,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,sFAAsF,CAAC;SAClH;QACD,YAAY,EAAE,UAAU;QACxB,WAAW,EAAE,EAAE,YAAY,EAAE,KAAK,EAAE,eAAe,EAAE,KAAK,EAAE,cAAc,EAAE,KAAK,EAAE,aAAa,EAAE,IAAI,EAAE;KACzG,EACD,KAAK,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE;QACjB,MAAM,SAAS,GAAG,MAAM,eAAe,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;QACvD,MAAM,YAAY,GAAG,SAAS,CAAC,OAAO,IAAI,SAAS,CAAC,MAAM,CAAC;QAC3D,IAAI,CAAC,YAAY,IAAI,OAAO,YAAY,KAAK,QAAQ,EAAE,CAAC;YACtD,MAAM,IAAI,KAAK,CAAC,6DAA6D,CAAC,CAAC;QACjF,CAAC;QAED,gEAAgE;QAChE,UAAU,CAAC,EAAE,YAAY,EAAE,UAAU,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAEhE,OAAO;YACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC;YACrE,iBAAiB,EAAE,SAA+C;SACnE,CAAC;IACJ,CAAC,CACF,CAAC;IAEF,4BAA4B;IAC5B,MAAM,CAAC,YAAY,CACjB,mBAAmB,EACnB;QACE,KAAK,EAAE,mBAAmB;QAC1B,WAAW,EACT,wUAAwU;QAC1U,WAAW,EAAE;YACX,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,yGAAyG,CAAC;SACxI;QACD,YAAY,EAAE;YACZ,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,gFAAgF,CAAC;SAC/G;QACD,WAAW,EAAE,EAAE,YAAY,EAAE,KAAK,EAAE,eAAe,EAAE,KAAK,EAAE,cAAc,EAAE,IAAI,EAAE,aAAa,EAAE,KAAK,EAAE;KACzG,EACD,KAAK,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE;QACpB,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;YACpC,MAAM,IAAI,KAAK,CAAC,0CAA0C,CAAC,CAAC;QAC9D,CAAC;QAED,MAAM,OAAO,GAAG,UAAU,EAAE,CAAC;QAC7B,MAAM,kBAAkB,GAAG,OAAO,CAAC,YAAY,KAAK,OAAO,CAAC;QAC5D,IAAI,kBAAkB,EAAE,CAAC;YACvB,gEAAgE;YAChE,UAAU,CAAC,EAAE,YAAY,EAAE,OAAO,EAAE,UAAU,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAC3E,CAAC;aAAM,CAAC;YACN,UAAU,CAAC,EAAE,YAAY,EAAE,OAAO,EAAE,CAAC,CAAC;QACxC,CAAC;QAED,MAAM,OAAO,GAAG,kBAAkB;YAChC,CAAC,CAAC,+EAA+E;YACjF,CAAC,CAAC,oBAAoB,CAAC;QAEzB,OAAO;YACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC;YAC1C,iBAAiB,EAAE,EAAE,OAAO,EAAE;SAC/B,CAAC;IACJ,CAAC,CACF,CAAC;IAEF,mBAAmB;IACnB,MAAM,CAAC,YAAY,CACjB,UAAU,EACV;QACE,KAAK,EAAE,gBAAgB;QACvB,WAAW,EACT,2VAA2V;QAC7V,WAAW,EAAE;YACX,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,2FAA2F,CAAC;YACtH,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,8DAA8D,CAAC;YACpH,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,4GAA4G,CAAC;YACrJ,QAAQ,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,+JAA+J,CAAC;SACjO;QACD,YAAY,EAAE,UAAU;QACxB,WAAW,EAAE,EAAE,YAAY,EAAE,KAAK,EAAE,eAAe,EAAE,KAAK,EAAE,cAAc,EAAE,IAAI,EAAE,aAAa,EAAE,IAAI,EAAE;KACxG,EACD,KAAK,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE;QAC1C,MAAM,OAAO,GAAG,UAAU,EAAE,CAAC;QAC7B,mBAAmB,CAAC,OAAO,CAAC,CAAC;QAE7B,MAAM,cAAc,GAAG,OAAO,CAAC,SAAS;eACnC,kBAAkB,EAAE,IAAI,EAAE;eAC1B,IAAI,CAAC;QACV,MAAM,QAAQ,GAAa,EAAE,CAAC;QAE9B,mEAAmE;QACnE,2EAA2E;QAC3E,MAAM,aAAa,GACjB,eAAe,IAAI,cAAc,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,IAAI,CAAC;QAC5D,IAAI,eAAe,IAAI,cAAc,IAAI,IAAI,CAAC,IAAI,EAAE,KAAK,cAAc,EAAE,CAAC;YACxE,QAAQ,CAAC,IAAI,CACX,+DAA+D,IAAI,gBAAgB,cAAc,IAAI,CACtG,CAAC;QACJ,CAAC;QAED,MAAM,aAAa,GAAG,eAAe,IAAI,IAAI,CAAC;QAC9C,IAAI,eAAe,IAAI,IAAI,IAAI,IAAI,KAAK,eAAe,EAAE,CAAC;YACxD,QAAQ,CAAC,IAAI,CACX,2DAA2D,IAAI,gBAAgB,eAAe,IAAI,CACnG,CAAC;QACJ,CAAC;QAED,uEAAuE;QACvE,8EAA8E;QAC9E,IAAI,OAAO,CAAC,UAAU,IAAI,aAAa,IAAI,eAAe,EAAE,CAAC;YAC3D,MAAM,QAAQ,GAAG;gBACf,IAAI,EAAE,aAAa;gBACnB,KAAK,EAAE,OAAO,CAAC,UAAU;gBACzB,eAAe,EAAE,aAAa;gBAC9B,QAAQ;aACT,CAAC;YACF,OAAO;gBACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC;gBACpE,iBAAiB,EAAE,QAA8C;aAClE,CAAC;QACJ,CAAC;QAED,MAAM,KAAK,GAAG,QAAQ,EAAE,CAAC;QACzB,MAAM,MAAM,GAAG,MAAM,KAAK,CAAC,MAAM,CAAC,QAAQ,CAAC;YACzC,IAAI,EAAE,aAAa;YACnB,IAAI,EAAE,aAAa;YACnB,OAAO;YACP,QAAQ;SACT,CAAC,CAAC;QACH,yCAAyC;QACzC,UAAU,CAAC,EAAE,UAAU,EAAE,MAAM,CAAC,KAAK,EAAE,SAAS,EAAE,aAAa,EAAE,CAAC,CAAC;QACnE,MAAM,OAAO,GAAG;YACd,GAAG,MAAM;YACT,eAAe,EAAE,aAAa;YAC9B,QAAQ;SACT,CAAC;QACF,OAAO;YACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC;YACnE,iBAAiB,EAAE,OAA6C;SACjE,CAAC;IACJ,CAAC,CACF,CAAC;IAEF,sBAAsB;IACtB,MAAM,CAAC,YAAY,CACjB,aAAa,EACb;QACE,KAAK,EAAE,aAAa;QACpB,WAAW,EACT,iOAAiO;QACnO,WAAW,EAAE;YACX,MAAM,EAAE,CAAC;iBACN,IAAI,CAAC,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC;iBAC3B,QAAQ,EAAE;iBACV,QAAQ,CAAC,8GAA8G,CAAC;SAC5H;QACD,YAAY,EAAE;YACZ,MAAM,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC,QAAQ,CAAC,wEAAwE,CAAC;SAC/H;QACD,WAAW,EAAE,EAAE,YAAY,EAAE,IAAI,EAAE,eAAe,EAAE,KAAK,EAAE,cAAc,EAAE,IAAI,EAAE,aAAa,EAAE,IAAI,EAAE;KACvG,EACD,KAAK,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE;QACnB,mBAAmB,CAAC,UAAU,EAAE,CAAC,CAAC;QAClC,MAAM,KAAK,GAAG,QAAQ,EAAE,CAAC;QACzB,MAAM,MAAM,GAAG,MAAM,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;QACxE,OAAO;YACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC;YAClE,iBAAiB,EAAE,EAAE,MAAM,EAAE,MAA8C,EAAE;SAC9E,CAAC;IACJ,CAAC,CACF,CAAC;AACJ,CAAC"}
|
|
1
|
+
{"version":3,"file":"registration.js","sourceRoot":"","sources":["../../src/tools/registration.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAEzC,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAkBxB,MAAM,gBAAgB,GAAG,2BAA2B,CAAC;AAErD,2DAA2D;AAC3D,MAAM,UAAU,GAAG,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC;AAC9C,MAAM,oBAAoB,GAAG,CAAC,CAAC,MAAM,CAAC;IACpC,aAAa,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,2DAA2D,CAAC;IAC/F,aAAa,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,sCAAsC,CAAC;IAC1E,cAAc,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,iDAAiD,CAAC;IACjG,eAAe,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,qDAAqD,CAAC;IACtG,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,qCAAqC,CAAC;IACtE,SAAS,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,CAAC,2DAA2D,CAAC;CAC7F,CAAC,CAAC;AAEH,SAAS,gBAAgB,CAAC,OAAgB;IACxC,OAAO,CAAC,OAAO,IAAI,gBAAgB,CAAC,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;AAC3D,CAAC;AAED,KAAK,UAAU,eAAe,CAC5B,IAAY,EACZ,OAAgB;IAEhB,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,gBAAgB,CAAC,OAAO,CAAC,gBAAgB,EAAE;QACzE,MAAM,EAAE,MAAM;QACd,OAAO,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE;QAC/C,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,IAAI,EAAE,CAAC;KAC/B,CAAC,CAAC;IAEH,MAAM,OAAO,GAAG,CAAC,MAAM,QAAQ,CAAC,IAAI,EAAE,CAA4C,CAAC;IACnF,IAAI,CAAC,OAAO,IAAI,OAAO,OAAO,KAAK,QAAQ,IAAI,CAAC,CAAC,IAAI,IAAI,OAAO,CAAC,EAAE,CAAC;QAClE,MAAM,IAAI,KAAK,CAAC,2CAA2C,CAAC,CAAC;IAC/D,CAAC;IACD,IAAI,CAAC,OAAO,CAAC,EAAE,EAAE,CAAC;QAChB,MAAM,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,EAAE,OAAO,IAAI,4BAA4B,CAAC,CAAC;IAC1E,CAAC;IACD,OAAO,OAAO,CAAC,IAAI,CAAC;AACtB,CAAC;AAED,KAAK,UAAU,kBAAkB,CAC/B,MAAc,EACd,OAAgB;IAEhB,IAAI,CAAC;QACH,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,gBAAgB,CAAC,OAAO,CAAC,eAAe,EAAE;YACxE,OAAO,EAAE;gBACP,aAAa,EAAE,UAAU,MAAM,EAAE;aAClC;SACF,CAAC,CAAC;QACH,IAAI,CAAC,QAAQ,CAAC,EAAE;YAAE,OAAO,SAAS,CAAC;QAEnC,MAAM,OAAO,GAAG,CAAC,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAuC,CAAC;QAC9E,IAAI,CAAC,OAAO,IAAI,OAAO,OAAO,KAAK,QAAQ,IAAI,CAAC,CAAC,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,EAAE,CAAC;YACjF,OAAO,SAAS,CAAC;QACnB,CAAC;QAED,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC;QAChC,OAAO,OAAO,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC;IACrD,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,SAAS,CAAC;IACnB,CAAC;AACH,CAAC;AAED,SAAS,mBAAmB,CAAC,OAAqB;IAChD,IAAI,OAAO,CAAC,YAAY;QAAE,OAAO;IACjC,MAAM,IAAI,KAAK,CACb,qFAAqF,CACtF,CAAC;AACJ,CAAC;AAED,SAAS,oBAAoB,CAC3B,OAAqB,EACrB,YAAoB,EACpB,UAAkB,EAClB,SAAiB,EACjB,WAA8B,EAAE;IAEhC,MAAM,QAAQ,GAAG,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;IACtD,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC,YAAY,EAAE;QACnC,YAAY;QACZ,UAAU;QACV,SAAS;QACT,MAAM,EAAE,IAAI,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC;QAC/B,mEAAmE;QACnE,aAAa,EAAE,QAAQ,CAAC,aAAa,IAAI,QAAQ,EAAE,aAAa;QAChE,cAAc,EAAE,QAAQ,CAAC,cAAc,IAAI,QAAQ,EAAE,cAAc;QACnE,wDAAwD;QACxD,QAAQ,EAAE,IAAI;QACd,aAAa,EAAE,IAAI;QACnB,eAAe,EAAE,KAAK;KACvB,CAAC,CAAC;AACL,CAAC;AAED,SAAS,qBAAqB,CAAC,SAAiB,EAAE,UAAkB;IAClE,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,CAAC;AACnC,CAAC;AAED,MAAM,UAAU,yBAAyB,CACvC,MAAiB,EACjB,QAGc,EACd,UAA8B,EAC9B,UAAkD,EAClD,OAAgB,EAChB,eAAyB,EACzB,kBAA2B,EAC3B,eAAmC;IAEnC,2BAA2B;IAC3B,MAAM,CAAC,YAAY,CACjB,kBAAkB,EAClB;QACE,KAAK,EAAE,kBAAkB;QACzB,WAAW,EACT,oTAAoT;QACtT,WAAW,EAAE;YACX,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,sFAAsF,CAAC;SAClH;QACD,YAAY,EAAE,UAAU;QACxB,WAAW,EAAE,EAAE,YAAY,EAAE,KAAK,EAAE,eAAe,EAAE,KAAK,EAAE,cAAc,EAAE,KAAK,EAAE,aAAa,EAAE,IAAI,EAAE;KACzG,EACD,KAAK,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE;QACjB,MAAM,SAAS,GAAG,MAAM,eAAe,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;QACvD,MAAM,YAAY,GAAG,SAAS,CAAC,OAAO,IAAI,SAAS,CAAC,MAAM,CAAC;QAC3D,IAAI,CAAC,YAAY,IAAI,OAAO,YAAY,KAAK,QAAQ,EAAE,CAAC;YACtD,MAAM,IAAI,KAAK,CAAC,6DAA6D,CAAC,CAAC;QACjF,CAAC;QAED,mEAAmE;QACnE,MAAM,OAAO,GAAG,UAAU,EAAE,CAAC;QAC7B,IAAI,OAAO,CAAC,YAAY,IAAI,OAAO,CAAC,UAAU,IAAI,OAAO,CAAC,SAAS,EAAE,CAAC;YACpE,oBAAoB,CAClB,OAAO,EACP,OAAO,CAAC,YAAY,EACpB,OAAO,CAAC,UAAU,EAClB,OAAO,CAAC,SAAS,CAClB,CAAC;QACJ,CAAC;QACD,UAAU,CAAC,EAAE,YAAY,EAAE,UAAU,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,GAAG,EAAE,EAAE,CAAC,CAAC;QAEnF,OAAO;YACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC;YACrE,iBAAiB,EAAE,SAA+C;SACnE,CAAC;IACJ,CAAC,CACF,CAAC;IAEF,4BAA4B;IAC5B,MAAM,CAAC,YAAY,CACjB,mBAAmB,EACnB;QACE,KAAK,EAAE,mBAAmB;QAC1B,WAAW,EACT,wUAAwU;QAC1U,WAAW,EAAE;YACX,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,yGAAyG,CAAC;SACxI;QACD,YAAY,EAAE;YACZ,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,gFAAgF,CAAC;SAC/G;QACD,WAAW,EAAE,EAAE,YAAY,EAAE,KAAK,EAAE,eAAe,EAAE,KAAK,EAAE,cAAc,EAAE,IAAI,EAAE,aAAa,EAAE,KAAK,EAAE;KACzG,EACD,KAAK,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE;QACpB,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;YACpC,MAAM,IAAI,KAAK,CAAC,0CAA0C,CAAC,CAAC;QAC9D,CAAC;QAED,MAAM,OAAO,GAAG,UAAU,EAAE,CAAC;QAC7B,MAAM,kBAAkB,GAAG,OAAO,CAAC,YAAY,KAAK,OAAO,CAAC;QAC5D,IAAI,kBAAkB,EAAE,CAAC;YACvB,mEAAmE;YACnE,IAAI,OAAO,CAAC,YAAY,IAAI,OAAO,CAAC,UAAU,IAAI,OAAO,CAAC,SAAS,EAAE,CAAC;gBACpE,oBAAoB,CAClB,OAAO,EACP,OAAO,CAAC,YAAY,EACpB,OAAO,CAAC,UAAU,EAClB,OAAO,CAAC,SAAS,CAClB,CAAC;YACJ,CAAC;YAED,+DAA+D;YAC/D,MAAM,KAAK,GAAG,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;YAC9C,IAAI,KAAK,EAAE,CAAC;gBACV,UAAU,CAAC;oBACT,YAAY,EAAE,OAAO;oBACrB,UAAU,EAAE,KAAK,CAAC,UAAU;oBAC5B,SAAS,EAAE,KAAK,CAAC,SAAS;oBAC1B,MAAM,EAAE,IAAI,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC;iBAC9B,CAAC,CAAC;YACL,CAAC;iBAAM,CAAC;gBACN,UAAU,CAAC,EAAE,YAAY,EAAE,OAAO,EAAE,UAAU,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,GAAG,EAAE,EAAE,CAAC,CAAC;YAC9F,CAAC;QACH,CAAC;aAAM,CAAC;YACN,UAAU,CAAC,EAAE,YAAY,EAAE,OAAO,EAAE,CAAC,CAAC;QACxC,CAAC;QAED,MAAM,KAAK,GAAG,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;QAC9C,MAAM,OAAO,GAAG,CAAC,kBAAkB;YACjC,CAAC,CAAC,oBAAoB;YACtB,CAAC,CAAC,KAAK;gBACL,CAAC,CAAC,mDAAmD,KAAK,CAAC,SAAS,IAAI;gBACxE,CAAC,CAAC,kEAAkE,CAAC;QAEzE,OAAO;YACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC;YAC1C,iBAAiB,EAAE,EAAE,OAAO,EAAE;SAC/B,CAAC;IACJ,CAAC,CACF,CAAC;IAEF,yBAAyB;IACzB,MAAM,CAAC,YAAY,CACjB,gBAAgB,EAChB;QACE,KAAK,EAAE,gBAAgB;QACvB,WAAW,EACT,2VAA2V;QAC7V,WAAW,EAAE;YACX,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,2FAA2F,CAAC;YACtH,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,8DAA8D,CAAC;YACpH,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,4GAA4G,CAAC;YACrJ,QAAQ,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,+JAA+J,CAAC;SACjO;QACD,YAAY,EAAE,UAAU;QACxB,WAAW,EAAE,EAAE,YAAY,EAAE,KAAK,EAAE,eAAe,EAAE,KAAK,EAAE,cAAc,EAAE,IAAI,EAAE,aAAa,EAAE,IAAI,EAAE;KACxG,EACD,KAAK,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE;QAC1C,MAAM,OAAO,GAAG,UAAU,EAAE,CAAC;QAC7B,mBAAmB,CAAC,OAAO,CAAC,CAAC;QAE7B,MAAM,cAAc,GAAG,eAAe;YACpC,CAAC,CAAC,kBAAkB,EAAE,IAAI,EAAE;mBACvB,OAAO,CAAC,SAAS;mBACjB,IAAI;YACT,CAAC,CAAC,OAAO,CAAC,SAAS;mBACd,kBAAkB,EAAE,IAAI,EAAE;mBAC1B,IAAI,CAAC;QACZ,MAAM,QAAQ,GAAa,EAAE,CAAC;QAC9B,MAAM,yBAAyB,GAAG,cAAc;YAC9C,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,cAAc,CAAC,EAAE,UAAU;mBAC3C,CAAC,OAAO,CAAC,SAAS,KAAK,cAAc,CAAC,CAAC,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC;YACvE,CAAC,CAAC,IAAI,CAAC;QAET,mEAAmE;QACnE,2EAA2E;QAC3E,MAAM,aAAa,GACjB,eAAe,IAAI,cAAc,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,IAAI,CAAC;QAC5D,IAAI,eAAe,IAAI,cAAc,IAAI,IAAI,CAAC,IAAI,EAAE,KAAK,cAAc,EAAE,CAAC;YACxE,QAAQ,CAAC,IAAI,CACX,+DAA+D,IAAI,gBAAgB,cAAc,IAAI,CACtG,CAAC;QACJ,CAAC;QAED,MAAM,aAAa,GAAG,eAAe,IAAI,IAAI,CAAC;QAC9C,IAAI,eAAe,IAAI,IAAI,IAAI,IAAI,KAAK,eAAe,EAAE,CAAC;YACxD,QAAQ,CAAC,IAAI,CACX,2DAA2D,IAAI,gBAAgB,eAAe,IAAI,CACnG,CAAC;QACJ,CAAC;QAED,uEAAuE;QACvE,8EAA8E;QAC9E,IAAI,yBAAyB,IAAI,aAAa,IAAI,eAAe,EAAE,CAAC;YAClE,MAAM,aAAa,GAAG,OAAO,CAAC,YAAY;gBACxC,CAAC,CAAC,MAAM,kBAAkB,CAAC,OAAO,CAAC,YAAY,EAAE,OAAO,CAAC;gBACzD,CAAC,CAAC,SAAS,CAAC;YACd,UAAU,CAAC;gBACT,UAAU,EAAE,yBAAyB;gBACrC,SAAS,EAAE,aAAa;gBACxB,MAAM,EAAE,IAAI,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,GAAG,CACjC,aAAa,EACb,qBAAqB,CAAC,aAAa,EAAE,yBAAyB,CAAC,CAChE;aACF,CAAC,CAAC;YACH,IAAI,OAAO,CAAC,YAAY,EAAE,CAAC;gBACzB,oBAAoB,CAClB,OAAO,EACP,OAAO,CAAC,YAAY,EACpB,yBAAyB,EACzB,aAAa,EACb,EAAE,aAAa,EAAE,CAClB,CAAC;YACJ,CAAC;YACD,MAAM,QAAQ,GAAG;gBACf,IAAI,EAAE,aAAa;gBACnB,KAAK,EAAE,yBAAyB;gBAChC,eAAe,EAAE,aAAa;gBAC9B,QAAQ;aACT,CAAC;YACF,OAAO;gBACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC;gBACpE,iBAAiB,EAAE,QAA8C;aAClE,CAAC;QACJ,CAAC;QAED,MAAM,KAAK,GAAG,QAAQ,EAAE,CAAC;QACzB,MAAM,MAAM,GAAG,MAAM,KAAK,CAAC,MAAM,CAAC,gBAAgB,CAAC;YACjD,IAAI,EAAE,aAAa;YACnB,IAAI,EAAE,aAAa;YACnB,OAAO;YACP,QAAQ;SACT,CAAC,CAAC;QACH,MAAM,UAAU,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;QAC3C,UAAU,CAAC,GAAG,CAAC,aAAa,EAAE,qBAAqB,CAAC,aAAa,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;QAClF,yCAAyC;QACzC,UAAU,CAAC,EAAE,UAAU,EAAE,MAAM,CAAC,KAAK,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,EAAE,UAAU,EAAE,CAAC,CAAC;QAEvF,sCAAsC;QACtC,MAAM,cAAc,GAAG,UAAU,EAAE,CAAC;QACpC,IAAI,cAAc,CAAC,YAAY,EAAE,CAAC;YAChC,MAAM,aAAa,GAAG,MAAM,kBAAkB,CAAC,cAAc,CAAC,YAAY,EAAE,OAAO,CAAC,CAAC;YACrF,oBAAoB,CAClB,cAAc,EACd,cAAc,CAAC,YAAY,EAC3B,MAAM,CAAC,KAAK,EACZ,aAAa,EACb,EAAE,aAAa,EAAE,CAClB,CAAC;QACJ,CAAC;QACD,MAAM,OAAO,GAAG;YACd,GAAG,MAAM;YACT,eAAe,EAAE,aAAa;YAC9B,QAAQ;SACT,CAAC;QACF,OAAO;YACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC;YACnE,iBAAiB,EAAE,OAA6C;SACjE,CAAC;IACJ,CAAC,CACF,CAAC;IAEF,qBAAqB;IACrB,MAAM,CAAC,YAAY,CACjB,YAAY,EACZ;QACE,KAAK,EAAE,aAAa;QACpB,WAAW,EACT,iOAAiO;QACnO,WAAW,EAAE;YACX,MAAM,EAAE,CAAC;iBACN,IAAI,CAAC,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC;iBAC3B,QAAQ,EAAE;iBACV,QAAQ,CAAC,8GAA8G,CAAC;SAC5H;QACD,YAAY,EAAE;YACZ,MAAM,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC,QAAQ,CAAC,wEAAwE,CAAC;SAC/H;QACD,WAAW,EAAE,EAAE,YAAY,EAAE,IAAI,EAAE,eAAe,EAAE,KAAK,EAAE,cAAc,EAAE,IAAI,EAAE,aAAa,EAAE,IAAI,EAAE;KACvG,EACD,KAAK,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE;QACnB,mBAAmB,CAAC,UAAU,EAAE,CAAC,CAAC;QAClC,MAAM,KAAK,GAAG,QAAQ,EAAE,CAAC;QACzB,MAAM,MAAM,GAAG,MAAM,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;QACxE,OAAO;YACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC;YAClE,iBAAiB,EAAE,EAAE,MAAM,EAAE,MAA8C,EAAE;SAC9E,CAAC;IACJ,CAAC,CACF,CAAC;IAEF,0BAA0B;IAC1B,MAAM,CAAC,YAAY,CACjB,gBAAgB,EAChB;QACE,KAAK,EAAE,wBAAwB;QAC/B,WAAW,EACT,+QAA+Q;QACjR,WAAW,EAAE;YACX,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,kHAAkH,CAAC;SAC1K;QACD,YAAY,EAAE;YACZ,UAAU,EAAE,CAAC,CAAC,KAAK,CAAC,oBAAoB,CAAC,CAAC,QAAQ,CAAC,mCAAmC,CAAC;YACvF,gBAAgB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,mDAAmD,CAAC;YACrG,oBAAoB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,qDAAqD,CAAC;SAC5G;QACD,WAAW,EAAE,EAAE,YAAY,EAAE,IAAI,EAAE,eAAe,EAAE,KAAK,EAAE,cAAc,EAAE,IAAI,EAAE,aAAa,EAAE,KAAK,EAAE;KACxG,EACD,KAAK,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE;QACnB,MAAM,OAAO,GAAG,UAAU,EAAE,CAAC;QAC7B,MAAM,GAAG,GAAG,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,MAAM,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;YAChE,aAAa,EAAE,kBAAkB,CAAC,GAAG,CAAC,YAAY,CAAC;YACnD,aAAa,EAAE,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC;YACxC,cAAc,EAAE,GAAG,CAAC,aAAa,IAAI,IAAI;YACzC,eAAe,EAAE,GAAG,CAAC,cAAc,IAAI,IAAI;YAC3C,UAAU,EAAE,GAAG,CAAC,SAAS;YACzB,SAAS,EAAE,GAAG,CAAC,YAAY,KAAK,OAAO,CAAC,YAAY;SACrD,CAAC,CAAC,CAAC;QACJ,MAAM,OAAO,GAAG,MAAM,KAAK,QAAQ;YACjC,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;YAChC,CAAC,CAAC,GAAG,CAAC;QACR,MAAM,MAAM,GAAG;YACb,UAAU,EAAE,OAAO;YACnB,gBAAgB,EAAE,OAAO,CAAC,YAAY,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,IAAI;YAC7E,oBAAoB,EAAE,OAAO,CAAC,YAAY,CAAC,CAAC,CAAC,kBAAkB,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,IAAI;SAC7F,CAAC;QACF,OAAO;YACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC;YAClE,iBAAiB,EAAE,MAA4C;SAChE,CAAC;IACJ,CAAC,CACF,CAAC;IAEF,yBAAyB;IACzB,MAAM,CAAC,YAAY,CACjB,gBAAgB,EAChB;QACE,KAAK,EAAE,gBAAgB;QACvB,WAAW,EACT,uTAAuT;QACzT,WAAW,EAAE;YACX,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,4CAA4C,CAAC;YAC1E,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,gDAAgD,CAAC;YAC3E,cAAc,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,yHAAyH,CAAC;YACzK,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,8DAA8D,CAAC;YACpH,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,+BAA+B,CAAC;SACzE;QACD,YAAY,EAAE,UAAU;QACxB,WAAW,EAAE,EAAE,YAAY,EAAE,KAAK,EAAE,eAAe,EAAE,KAAK,EAAE,cAAc,EAAE,IAAI,EAAE,aAAa,EAAE,IAAI,EAAE;KACxG,EACD,KAAK,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,cAAc,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE,EAAE;QACzD,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;YACpC,MAAM,IAAI,KAAK,CAAC,0CAA0C,CAAC,CAAC;QAC9D,CAAC;QAED,MAAM,OAAO,GAAG,UAAU,EAAE,CAAC;QAC7B,MAAM,sBAAsB,GAAG,MAAM,kBAAkB,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;QAE1E,mDAAmD;QACnD,IAAI,OAAO,CAAC,YAAY,IAAI,OAAO,CAAC,UAAU,IAAI,OAAO,CAAC,SAAS,EAAE,CAAC;YACpE,oBAAoB,CAClB,OAAO,EACP,OAAO,CAAC,YAAY,EACpB,OAAO,CAAC,UAAU,EAClB,OAAO,CAAC,SAAS,CAClB,CAAC;QACJ,CAAC;QAED,0CAA0C;QAC1C,MAAM,QAAQ,GAAG,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;QACjD,IAAI,QAAQ,EAAE,CAAC;YACb,IAAI,sBAAsB,IAAI,QAAQ,CAAC,aAAa,KAAK,sBAAsB,EAAE,CAAC;gBAChF,QAAQ,CAAC,aAAa,GAAG,sBAAsB,CAAC;YAClD,CAAC;YACD,IAAI,cAAc,IAAI,QAAQ,CAAC,cAAc,KAAK,cAAc,EAAE,CAAC;gBACjE,QAAQ,CAAC,cAAc,GAAG,cAAc,CAAC;YAC3C,CAAC;YACD,UAAU,CAAC;gBACT,YAAY,EAAE,OAAO;gBACrB,UAAU,EAAE,QAAQ,CAAC,UAAU;gBAC/B,SAAS,EAAE,QAAQ,CAAC,SAAS;gBAC7B,MAAM,EAAE,IAAI,GAAG,CAAC,QAAQ,CAAC,MAAM,CAAC;aACjC,CAAC,CAAC;YACH,MAAM,MAAM,GAAG;gBACb,OAAO,EAAE,gCAAgC,QAAQ,CAAC,SAAS,oBAAoB;gBAC/E,UAAU,EAAE,QAAQ,CAAC,SAAS;aAC/B,CAAC;YACF,OAAO;gBACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC;gBAClE,iBAAiB,EAAE,MAA4C;aAChE,CAAC;QACJ,CAAC;QAED,wCAAwC;QACxC,UAAU,CAAC,EAAE,YAAY,EAAE,OAAO,EAAE,UAAU,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,GAAG,EAAE,EAAE,CAAC,CAAC;QAE5F,MAAM,KAAK,GAAG,QAAQ,EAAE,CAAC;QACzB,MAAM,SAAS,GAAG,MAAM,KAAK,CAAC,MAAM,CAAC,gBAAgB,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,CAAC;QAC/E,UAAU,CAAC;YACT,UAAU,EAAE,SAAS,CAAC,KAAK;YAC3B,SAAS,EAAE,IAAI;YACf,MAAM,EAAE,IAAI,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,qBAAqB,CAAC,IAAI,EAAE,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;SACxE,CAAC,CAAC;QAEH,kCAAkC;QAClC,MAAM,cAAc,GAAG,UAAU,EAAE,CAAC;QACpC,oBAAoB,CAAC,cAAc,EAAE,OAAO,EAAE,SAAS,CAAC,KAAK,EAAE,IAAI,EAAE;YACnE,aAAa,EAAE,sBAAsB;YACrC,cAAc,EAAE,cAAc;SAC/B,CAAC,CAAC;QAEH,MAAM,MAAM,GAAG;YACb,OAAO,EAAE,uCAAuC,IAAI,IAAI;YACxD,GAAG,SAAS;YACZ,UAAU,EAAE,IAAI;SACjB,CAAC;QACF,OAAO;YACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC;YAClE,iBAAiB,EAAE,MAA4C;SAChE,CAAC;IACJ,CAAC,CACF,CAAC;IAEF,2BAA2B;IAC3B,MAAM,CAAC,YAAY,CACjB,kBAAkB,EAClB;QACE,KAAK,EAAE,kBAAkB;QACzB,WAAW,EACT,oVAAoV;QACtV,WAAW,EAAE;YACX,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,wEAAwE,CAAC;YACjH,aAAa,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,kDAAkD,CAAC;YACjG,cAAc,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,sFAAsF,CAAC;SACvI;QACD,YAAY,EAAE;YACZ,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,sBAAsB,CAAC;YACpD,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,iDAAiD,CAAC;SACnF;QACD,WAAW,EAAE,EAAE,YAAY,EAAE,KAAK,EAAE,eAAe,EAAE,KAAK,EAAE,cAAc,EAAE,IAAI,EAAE,aAAa,EAAE,KAAK,EAAE;KACzG,EACD,KAAK,EAAE,EAAE,OAAO,EAAE,aAAa,EAAE,cAAc,EAAE,EAAE,EAAE;QACnD,IAAI,CAAC,OAAO,IAAI,CAAC,aAAa,IAAI,CAAC,cAAc,EAAE,CAAC;YAClD,MAAM,IAAI,KAAK,CAAC,0DAA0D,CAAC,CAAC;QAC9E,CAAC;QACD,IAAI,OAAO,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;YAC/C,MAAM,IAAI,KAAK,CAAC,0CAA0C,CAAC,CAAC;QAC9D,CAAC;QAED,MAAM,OAAO,GAAG,UAAU,EAAE,CAAC;QAC7B,MAAM,QAAQ,GAAG,qBAAqB,CAAC,OAAO,EAAE,OAAO,EAAE,aAAa,EAAE,cAAc,CAAC,CAAC;QACxF,IAAI,CAAC,QAAQ,EAAE,CAAC;YACd,MAAM,IAAI,KAAK,CACb,mIAAmI,CACpI,CAAC;QACJ,CAAC;QACD,MAAM,EAAE,YAAY,EAAE,kBAAkB,EAAE,OAAO,EAAE,KAAK,EAAE,GAAG,QAAQ,CAAC;QAEtE,kCAAkC;QAClC,IAAI,OAAO,CAAC,YAAY,IAAI,OAAO,CAAC,UAAU,IAAI,OAAO,CAAC,SAAS,EAAE,CAAC;YACpE,oBAAoB,CAClB,OAAO,EACP,OAAO,CAAC,YAAY,EACpB,OAAO,CAAC,UAAU,EAClB,OAAO,CAAC,SAAS,CAClB,CAAC;QACJ,CAAC;QAED,wCAAwC;QACxC,UAAU,CAAC;YACT,YAAY,EAAE,kBAAkB;YAChC,UAAU,EAAE,KAAK,CAAC,UAAU;YAC5B,SAAS,EAAE,KAAK,CAAC,SAAS;YAC1B,MAAM,EAAE,IAAI,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC;SAC9B,CAAC,CAAC;QAEH,MAAM,MAAM,GAAG;YACb,OAAO,EAAE,mDAAmD,KAAK,CAAC,SAAS,IAAI;YAC/E,UAAU,EAAE,KAAK,CAAC,SAAS;SAC5B,CAAC;QACF,OAAO;YACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC;YAClE,iBAAiB,EAAE,MAA4C;SAChE,CAAC;IACJ,CAAC,CACF,CAAC;AACJ,CAAC;AAED,SAAS,kBAAkB,CAAC,YAAoB;IAC9C,OAAO,MAAM,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC;AACtF,CAAC;AAED,SAAS,qBAAqB,CAC5B,OAAqB,EACrB,MAAe,EACf,YAAqB,EACrB,aAAsB;IAEtB,IAAI,MAAM,EAAE,CAAC;QACX,MAAM,KAAK,GAAG,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QAC7C,IAAI,KAAK,EAAE,CAAC;YACV,OAAO,EAAE,YAAY,EAAE,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;QAClD,CAAC;QAED,MAAM,aAAa,GAAG,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,OAAO,EAAE,CAAC,CAAC,MAAM,CACnE,CAAC,CAAC,YAAY,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,YAAY,CAAC,KAAK,MAAM,CACrD,CAAC;QACF,IAAI,aAAa,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC7B,MAAM,IAAI,KAAK,CACb,mGAAmG,CACpG,CAAC;QACJ,CAAC;QACD,IAAI,aAAa,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC/B,MAAM,CAAC,YAAY,EAAE,OAAO,CAAC,GAAG,aAAa,CAAC,CAAC,CAAC,CAAC;YACjD,OAAO,EAAE,YAAY,EAAE,OAAO,EAAE,CAAC;QACnC,CAAC;IACH,CAAC;IAED,IAAI,YAAY,EAAE,CAAC;QACjB,KAAK,MAAM,CAAC,YAAY,EAAE,OAAO,CAAC,IAAI,OAAO,CAAC,UAAU,CAAC,OAAO,EAAE,EAAE,CAAC;YACnE,IAAI,kBAAkB,CAAC,YAAY,CAAC,KAAK,YAAY,EAAE,CAAC;gBACtD,OAAO,EAAE,YAAY,EAAE,OAAO,EAAE,CAAC;YACnC,CAAC;QACH,CAAC;IACH,CAAC;IAED,IAAI,aAAa,EAAE,CAAC;QAClB,MAAM,WAAW,GAAG,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,OAAO,EAAE,CAAC,CAAC,MAAM,CACjE,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,EAAE,CACV,GAAG,CAAC,aAAa,EAAE,WAAW,EAAE,KAAK,aAAa,CAAC,WAAW,EAAE;eAC7D,GAAG,CAAC,cAAc,EAAE,WAAW,EAAE,KAAK,aAAa,CAAC,WAAW,EAAE,CACvE,CAAC;QACF,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC3B,MAAM,IAAI,KAAK,CACb,mCAAmC,aAAa,8CAA8C,CAC/F,CAAC;QACJ,CAAC;QACD,IAAI,WAAW,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC7B,MAAM,CAAC,YAAY,EAAE,OAAO,CAAC,GAAG,WAAW,CAAC,CAAC,CAAC,CAAC;YAC/C,OAAO,EAAE,YAAY,EAAE,OAAO,EAAE,CAAC;QACnC,CAAC;IACH,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC;AAED,gFAAgF;AAChF,SAAS,OAAO,CAAC,GAAW;IAC1B,IAAI,GAAG,CAAC,MAAM,IAAI,EAAE;QAAE,OAAO,GAAG,CAAC;IACjC,OAAO,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,MAAM,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;AAClD,CAAC"}
|
package/dist/transports.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"transports.d.ts","sourceRoot":"","sources":["../src/transports.ts"],"names":[],"mappings":"AAEA,OAAO,EAAqC,KAAK,gBAAgB,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"transports.d.ts","sourceRoot":"","sources":["../src/transports.ts"],"names":[],"mappings":"AAEA,OAAO,EAAqC,KAAK,gBAAgB,EAAE,MAAM,aAAa,CAAC;AA0GvF;;;GAGG;AACH,wBAAsB,UAAU,CAAC,OAAO,EAAE,gBAAgB,GAAG,OAAO,CAAC,IAAI,CAAC,CAgDzE;AAED;;;GAGG;AACH,MAAM,WAAW,gBAAgB;IAC/B,SAAS,CAAC,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,IAAI,CAAC;IACxC,QAAQ,CAAC,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,IAAI,CAAC;CACxC;AAQD;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,WAAW,EAAE,gBAAgB,EAAE,SAAS,CAAC,EAAE,gBAAgB;IAEzF,2DAA2D;4BACnC,MAAM;yBAGvB,OAAO,WAAW,EAAE,eAAe,OACnC,OAAO,WAAW,EAAE,cAAc;EAoD5C"}
|
package/dist/transports.js
CHANGED
|
@@ -3,12 +3,129 @@ import { StreamableHTTPServerTransport } from '@modelcontextprotocol/sdk/server/
|
|
|
3
3
|
import { createRelayMcpServer, MCP_VERSION } from './server.js';
|
|
4
4
|
import { randomUUID } from 'node:crypto';
|
|
5
5
|
import { createMcpTelemetry } from './telemetry.js';
|
|
6
|
+
import { createInternalRelayCast } from '@relaycast/sdk/internal';
|
|
7
|
+
import { resolveDefaultWorkspaceId } from './workspaces.js';
|
|
8
|
+
const mcpOrigin = {
|
|
9
|
+
surface: 'mcp',
|
|
10
|
+
client: '@relaycast/mcp',
|
|
11
|
+
version: MCP_VERSION,
|
|
12
|
+
};
|
|
13
|
+
/**
|
|
14
|
+
* Bootstrap a single workspace by verifying/refreshing its token.
|
|
15
|
+
* Wrapped with a per-workspace timeout enforced via Promise.race so
|
|
16
|
+
* one slow workspace doesn't block all others.
|
|
17
|
+
*/
|
|
18
|
+
async function bootstrapOneWorkspace(ws, baseUrl, timeoutMs = 5_000) {
|
|
19
|
+
const doBootstrap = async () => {
|
|
20
|
+
const relay = createInternalRelayCast({
|
|
21
|
+
apiKey: ws.api_key,
|
|
22
|
+
baseUrl,
|
|
23
|
+
}, mcpOrigin);
|
|
24
|
+
let token = ws.agent_token;
|
|
25
|
+
const agentName = ws.agent_name ?? ws.workspace_alias ?? ws.workspace_id;
|
|
26
|
+
let workspaceName = ws.workspace_name;
|
|
27
|
+
try {
|
|
28
|
+
const workspace = await relay.workspace.info();
|
|
29
|
+
workspaceName = workspace.name;
|
|
30
|
+
}
|
|
31
|
+
catch {
|
|
32
|
+
// Keep any pre-supplied name or leave undefined if workspace info is unavailable.
|
|
33
|
+
}
|
|
34
|
+
// If we have a token, verify it's still valid via an inbox call
|
|
35
|
+
if (token) {
|
|
36
|
+
try {
|
|
37
|
+
const client = relay.as(token);
|
|
38
|
+
await client.inbox();
|
|
39
|
+
}
|
|
40
|
+
catch {
|
|
41
|
+
// Token is invalid, need to re-register
|
|
42
|
+
token = undefined;
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
// If no valid token, register or rotate
|
|
46
|
+
if (!token) {
|
|
47
|
+
const result = await relay.agents.registerOrRotate({
|
|
48
|
+
name: agentName,
|
|
49
|
+
type: 'agent',
|
|
50
|
+
});
|
|
51
|
+
token = result.token;
|
|
52
|
+
}
|
|
53
|
+
return {
|
|
54
|
+
...ws,
|
|
55
|
+
agent_token: token,
|
|
56
|
+
agent_name: agentName,
|
|
57
|
+
workspace_name: workspaceName,
|
|
58
|
+
};
|
|
59
|
+
};
|
|
60
|
+
try {
|
|
61
|
+
const timeout = new Promise((_, reject) => setTimeout(() => reject(new Error(`Bootstrap timed out after ${timeoutMs}ms`)), timeoutMs));
|
|
62
|
+
return await Promise.race([doBootstrap(), timeout]);
|
|
63
|
+
}
|
|
64
|
+
catch (err) {
|
|
65
|
+
console.error(`[bootstrap] Failed to bootstrap workspace ${ws.workspace_id}: ${err instanceof Error ? err.message : String(err)}`);
|
|
66
|
+
// Still return the workspace config even if bootstrap failed,
|
|
67
|
+
// so it can be retried later
|
|
68
|
+
return ws;
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
/**
|
|
72
|
+
* Bootstrap workspaces by verifying/refreshing tokens and joining each
|
|
73
|
+
* workspace into the MCP server's session via setSession + saveWorkspaceContext.
|
|
74
|
+
*
|
|
75
|
+
* All workspaces are bootstrapped concurrently with individual timeouts.
|
|
76
|
+
*/
|
|
77
|
+
async function bootstrapWorkspaces(workspaces, baseUrl) {
|
|
78
|
+
const results = await Promise.allSettled(workspaces.map(ws => bootstrapOneWorkspace(ws, baseUrl)));
|
|
79
|
+
return results.map((result, i) => {
|
|
80
|
+
if (result.status === 'fulfilled')
|
|
81
|
+
return result.value;
|
|
82
|
+
console.error(`[bootstrap] Workspace ${workspaces[i].workspace_id} rejected: ${result.reason}`);
|
|
83
|
+
return workspaces[i];
|
|
84
|
+
});
|
|
85
|
+
}
|
|
6
86
|
/**
|
|
7
87
|
* Start MCP server with stdio transport (single agent).
|
|
8
88
|
* Reads from stdin, writes to stdout.
|
|
9
89
|
*/
|
|
10
90
|
export async function startStdio(options) {
|
|
11
|
-
|
|
91
|
+
let effectiveOptions = { ...options, telemetryTransport: 'stdio' };
|
|
92
|
+
const hasAgentToken = Boolean(options.agentToken);
|
|
93
|
+
const hasWorkspaces = Boolean(options.workspaces?.length);
|
|
94
|
+
if (hasWorkspaces) {
|
|
95
|
+
if (hasAgentToken) {
|
|
96
|
+
// When agentToken is pre-provided (broker-spawned), skip bootstrap entirely —
|
|
97
|
+
// the token is already valid. Use workspace configs as-is for routing context.
|
|
98
|
+
const withNames = options.workspaces.map(ws => ({
|
|
99
|
+
...ws,
|
|
100
|
+
agent_name: ws.agent_name ?? ws.workspace_alias ?? ws.workspace_id,
|
|
101
|
+
}));
|
|
102
|
+
effectiveOptions = { ...effectiveOptions, workspaces: withNames };
|
|
103
|
+
// Promote default workspace credentials so routing resolves correctly
|
|
104
|
+
const defaultWsId = resolveDefaultWorkspaceId(withNames, options.defaultWorkspace);
|
|
105
|
+
const defaultWs = withNames.find(w => w.workspace_id === defaultWsId);
|
|
106
|
+
if (defaultWs) {
|
|
107
|
+
effectiveOptions.apiKey = effectiveOptions.apiKey ?? defaultWs.api_key;
|
|
108
|
+
effectiveOptions.agentName = effectiveOptions.agentName ?? defaultWs.agent_name;
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
else {
|
|
112
|
+
// CLI user with RELAY_WORKSPACES_JSON — bootstrap is needed but now
|
|
113
|
+
// runs all workspaces concurrently (with per-workspace timeouts).
|
|
114
|
+
const bootstrapped = await bootstrapWorkspaces(options.workspaces, options.baseUrl);
|
|
115
|
+
effectiveOptions = { ...effectiveOptions, workspaces: bootstrapped };
|
|
116
|
+
// Set the default workspace's api key/token/name as the primary session
|
|
117
|
+
const defaultWsId = resolveDefaultWorkspaceId(bootstrapped, options.defaultWorkspace);
|
|
118
|
+
const defaultWs = bootstrapped.find(w => w.workspace_id === defaultWsId && w.agent_token);
|
|
119
|
+
if (defaultWs) {
|
|
120
|
+
effectiveOptions.apiKey = effectiveOptions.apiKey ?? defaultWs.api_key;
|
|
121
|
+
effectiveOptions.agentToken = effectiveOptions.agentToken ?? defaultWs.agent_token;
|
|
122
|
+
effectiveOptions.agentName = effectiveOptions.agentName ?? defaultWs.agent_name;
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
// createRelayMcpServer populates session.workspaces from
|
|
127
|
+
// effectiveOptions.workspaces internally — no need to reach into internals.
|
|
128
|
+
const mcpServer = createRelayMcpServer(effectiveOptions);
|
|
12
129
|
const transport = new StdioServerTransport();
|
|
13
130
|
await mcpServer.connect(transport);
|
|
14
131
|
}
|
package/dist/transports.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"transports.js","sourceRoot":"","sources":["../src/transports.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,MAAM,2CAA2C,CAAC;AACjF,OAAO,EAAE,6BAA6B,EAAE,MAAM,oDAAoD,CAAC;AACnG,OAAO,EAAE,oBAAoB,EAAE,WAAW,EAAyB,MAAM,aAAa,CAAC;AACvF,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"transports.js","sourceRoot":"","sources":["../src/transports.ts"],"names":[],"mappings":"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"}
|