@slashfi/agents-sdk 0.1.0 → 0.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/server.d.ts +20 -33
- package/dist/server.d.ts.map +1 -1
- package/dist/server.js +256 -162
- package/dist/server.js.map +1 -1
- package/package.json +1 -1
- package/src/server.ts +343 -226
package/dist/server.d.ts
CHANGED
|
@@ -1,26 +1,30 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Agent Server
|
|
2
|
+
* Agent Server (MCP over HTTP)
|
|
3
3
|
*
|
|
4
|
-
*
|
|
5
|
-
* Compatible with
|
|
4
|
+
* JSON-RPC server implementing the MCP protocol for agent interaction.
|
|
5
|
+
* Compatible with atlas-environments and any MCP client.
|
|
6
6
|
*
|
|
7
|
-
*
|
|
8
|
-
* -
|
|
9
|
-
* -
|
|
10
|
-
* -
|
|
7
|
+
* MCP Methods:
|
|
8
|
+
* - initialize → Protocol handshake
|
|
9
|
+
* - tools/list → List available MCP tools (call_agent, list_agents)
|
|
10
|
+
* - tools/call → Execute an MCP tool
|
|
11
|
+
*
|
|
12
|
+
* MCP Tools exposed:
|
|
13
|
+
* - call_agent → Execute a tool on a registered agent
|
|
14
|
+
* - list_agents → List registered agents and their tools
|
|
15
|
+
*
|
|
16
|
+
* Additional endpoints:
|
|
17
|
+
* - POST /oauth/token → OAuth2 client_credentials (when @auth registered)
|
|
18
|
+
* - GET /health → Health check
|
|
11
19
|
*
|
|
12
20
|
* Auth Integration:
|
|
13
21
|
* When an `@auth` agent is registered, the server automatically:
|
|
14
22
|
* - Validates Bearer tokens on requests
|
|
15
23
|
* - Resolves tokens to identity + scopes
|
|
16
|
-
* - Populates
|
|
24
|
+
* - Populates caller context from headers (X-Atlas-Actor-Id, etc.)
|
|
17
25
|
* - Recognizes the root key for admin access
|
|
18
|
-
* - Mounts the /oauth/token endpoint
|
|
19
26
|
*/
|
|
20
27
|
import type { AgentRegistry } from "./registry.js";
|
|
21
|
-
/**
|
|
22
|
-
* Server configuration options.
|
|
23
|
-
*/
|
|
24
28
|
export interface AgentServerOptions {
|
|
25
29
|
/** Port to listen on (default: 3000) */
|
|
26
30
|
port?: number;
|
|
@@ -30,12 +34,11 @@ export interface AgentServerOptions {
|
|
|
30
34
|
basePath?: string;
|
|
31
35
|
/** Enable CORS (default: true) */
|
|
32
36
|
cors?: boolean;
|
|
33
|
-
/**
|
|
34
|
-
|
|
37
|
+
/** Server name reported in MCP initialize (default: 'agents-sdk') */
|
|
38
|
+
serverName?: string;
|
|
39
|
+
/** Server version reported in MCP initialize (default: '1.0.0') */
|
|
40
|
+
serverVersion?: string;
|
|
35
41
|
}
|
|
36
|
-
/**
|
|
37
|
-
* Agent server instance.
|
|
38
|
-
*/
|
|
39
42
|
export interface AgentServer {
|
|
40
43
|
/** Start the server */
|
|
41
44
|
start(): Promise<void>;
|
|
@@ -46,21 +49,5 @@ export interface AgentServer {
|
|
|
46
49
|
/** Get the server URL (only available after start) */
|
|
47
50
|
url: string | null;
|
|
48
51
|
}
|
|
49
|
-
/**
|
|
50
|
-
* Create an HTTP server for the agent registry.
|
|
51
|
-
*
|
|
52
|
-
* @example
|
|
53
|
-
* ```typescript
|
|
54
|
-
* const registry = createAgentRegistry();
|
|
55
|
-
* registry.register(createAuthAgent({ rootKey: 'rk_xxx' }));
|
|
56
|
-
* registry.register(myAgent);
|
|
57
|
-
*
|
|
58
|
-
* const server = createAgentServer(registry, { port: 3000 });
|
|
59
|
-
* await server.start();
|
|
60
|
-
* // POST /call - Execute agent actions
|
|
61
|
-
* // GET /list - List agents (filtered by auth)
|
|
62
|
-
* // POST /oauth/token - OAuth2 token endpoint
|
|
63
|
-
* ```
|
|
64
|
-
*/
|
|
65
52
|
export declare function createAgentServer(registry: AgentRegistry, options?: AgentServerOptions): AgentServer;
|
|
66
53
|
//# sourceMappingURL=server.d.ts.map
|
package/dist/server.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AAGH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAOnD,MAAM,WAAW,kBAAkB;IACjC,wCAAwC;IACxC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,iDAAiD;IACjD,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,4CAA4C;IAC5C,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,kCAAkC;IAClC,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,qEAAqE;IACrE,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,mEAAmE;IACnE,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAED,MAAM,WAAW,WAAW;IAC1B,uBAAuB;IACvB,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IACvB,sBAAsB;IACtB,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IACtB,iDAAiD;IACjD,KAAK,CAAC,GAAG,EAAE,OAAO,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC;IACvC,sDAAsD;IACtD,GAAG,EAAE,MAAM,GAAG,IAAI,CAAC;CACpB;AAoMD,wBAAgB,iBAAiB,CAC/B,QAAQ,EAAE,aAAa,EACvB,OAAO,GAAE,kBAAuB,GAC/B,WAAW,CA8Tb"}
|
package/dist/server.js
CHANGED
|
@@ -1,38 +1,61 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Agent Server
|
|
2
|
+
* Agent Server (MCP over HTTP)
|
|
3
3
|
*
|
|
4
|
-
*
|
|
5
|
-
* Compatible with
|
|
4
|
+
* JSON-RPC server implementing the MCP protocol for agent interaction.
|
|
5
|
+
* Compatible with atlas-environments and any MCP client.
|
|
6
6
|
*
|
|
7
|
-
*
|
|
8
|
-
* -
|
|
9
|
-
* -
|
|
10
|
-
* -
|
|
7
|
+
* MCP Methods:
|
|
8
|
+
* - initialize → Protocol handshake
|
|
9
|
+
* - tools/list → List available MCP tools (call_agent, list_agents)
|
|
10
|
+
* - tools/call → Execute an MCP tool
|
|
11
|
+
*
|
|
12
|
+
* MCP Tools exposed:
|
|
13
|
+
* - call_agent → Execute a tool on a registered agent
|
|
14
|
+
* - list_agents → List registered agents and their tools
|
|
15
|
+
*
|
|
16
|
+
* Additional endpoints:
|
|
17
|
+
* - POST /oauth/token → OAuth2 client_credentials (when @auth registered)
|
|
18
|
+
* - GET /health → Health check
|
|
11
19
|
*
|
|
12
20
|
* Auth Integration:
|
|
13
21
|
* When an `@auth` agent is registered, the server automatically:
|
|
14
22
|
* - Validates Bearer tokens on requests
|
|
15
23
|
* - Resolves tokens to identity + scopes
|
|
16
|
-
* - Populates
|
|
24
|
+
* - Populates caller context from headers (X-Atlas-Actor-Id, etc.)
|
|
17
25
|
* - Recognizes the root key for admin access
|
|
18
|
-
* - Mounts the /oauth/token endpoint
|
|
19
26
|
*/
|
|
20
27
|
// ============================================
|
|
21
|
-
//
|
|
28
|
+
// Helpers
|
|
22
29
|
// ============================================
|
|
23
30
|
function jsonResponse(data, status = 200) {
|
|
24
31
|
return new Response(JSON.stringify(data), {
|
|
25
32
|
status,
|
|
26
|
-
headers: {
|
|
27
|
-
"Content-Type": "application/json",
|
|
28
|
-
},
|
|
33
|
+
headers: { "Content-Type": "application/json" },
|
|
29
34
|
});
|
|
30
35
|
}
|
|
31
36
|
function corsHeaders() {
|
|
32
37
|
return {
|
|
33
38
|
"Access-Control-Allow-Origin": "*",
|
|
34
39
|
"Access-Control-Allow-Methods": "GET, POST, OPTIONS",
|
|
35
|
-
"Access-Control-Allow-Headers": "Content-Type, Authorization",
|
|
40
|
+
"Access-Control-Allow-Headers": "Content-Type, Authorization, X-Atlas-Actor-Id, X-Atlas-Agent-Id, X-Atlas-Session-Id",
|
|
41
|
+
};
|
|
42
|
+
}
|
|
43
|
+
function jsonRpcSuccess(id, result) {
|
|
44
|
+
return { jsonrpc: "2.0", id, result };
|
|
45
|
+
}
|
|
46
|
+
function jsonRpcError(id, code, message, data) {
|
|
47
|
+
return { jsonrpc: "2.0", id, error: { code, message, ...(data !== undefined && { data }) } };
|
|
48
|
+
}
|
|
49
|
+
/** Wrap a value as MCP tool result content */
|
|
50
|
+
function mcpResult(value, isError = false) {
|
|
51
|
+
return {
|
|
52
|
+
content: [
|
|
53
|
+
{
|
|
54
|
+
type: "text",
|
|
55
|
+
text: typeof value === "string" ? value : JSON.stringify(value, null, 2),
|
|
56
|
+
},
|
|
57
|
+
],
|
|
58
|
+
...(isError && { isError: true }),
|
|
36
59
|
};
|
|
37
60
|
}
|
|
38
61
|
// ============================================
|
|
@@ -55,20 +78,12 @@ async function resolveAuth(req, authConfig) {
|
|
|
55
78
|
const [scheme, credential] = authHeader.split(" ", 2);
|
|
56
79
|
if (scheme?.toLowerCase() !== "bearer" || !credential)
|
|
57
80
|
return null;
|
|
58
|
-
// Check root key
|
|
59
81
|
if (credential === authConfig.rootKey) {
|
|
60
|
-
return {
|
|
61
|
-
callerId: "root",
|
|
62
|
-
callerType: "system",
|
|
63
|
-
scopes: ["*"],
|
|
64
|
-
isRoot: true,
|
|
65
|
-
};
|
|
82
|
+
return { callerId: "root", callerType: "system", scopes: ["*"], isRoot: true };
|
|
66
83
|
}
|
|
67
|
-
// Validate token
|
|
68
84
|
const token = await authConfig.store.validateToken(credential);
|
|
69
85
|
if (!token)
|
|
70
86
|
return null;
|
|
71
|
-
// Look up client name
|
|
72
87
|
const client = await authConfig.store.getClient(token.clientId);
|
|
73
88
|
return {
|
|
74
89
|
callerId: client?.name ?? token.clientId,
|
|
@@ -77,11 +92,8 @@ async function resolveAuth(req, authConfig) {
|
|
|
77
92
|
isRoot: false,
|
|
78
93
|
};
|
|
79
94
|
}
|
|
80
|
-
// ============================================
|
|
81
|
-
// Visibility Filtering for /list
|
|
82
|
-
// ============================================
|
|
83
95
|
function canSeeAgent(agent, auth) {
|
|
84
|
-
const visibility = agent.visibility ?? "internal";
|
|
96
|
+
const visibility = (agent.config?.visibility ?? "internal");
|
|
85
97
|
if (auth?.isRoot)
|
|
86
98
|
return true;
|
|
87
99
|
if (visibility === "public")
|
|
@@ -91,44 +103,208 @@ function canSeeAgent(agent, auth) {
|
|
|
91
103
|
return false;
|
|
92
104
|
}
|
|
93
105
|
// ============================================
|
|
106
|
+
// MCP Tool Definitions
|
|
107
|
+
// ============================================
|
|
108
|
+
function getToolDefinitions() {
|
|
109
|
+
return [
|
|
110
|
+
{
|
|
111
|
+
name: "call_agent",
|
|
112
|
+
description: "Execute a tool on a registered agent. Provide the agent path and tool name.",
|
|
113
|
+
inputSchema: {
|
|
114
|
+
type: "object",
|
|
115
|
+
properties: {
|
|
116
|
+
request: {
|
|
117
|
+
type: "object",
|
|
118
|
+
description: "The call request",
|
|
119
|
+
properties: {
|
|
120
|
+
action: {
|
|
121
|
+
type: "string",
|
|
122
|
+
enum: ["execute_tool", "describe_tools", "load"],
|
|
123
|
+
description: "Action to perform",
|
|
124
|
+
},
|
|
125
|
+
path: {
|
|
126
|
+
type: "string",
|
|
127
|
+
description: "Agent path (e.g. '@registry')",
|
|
128
|
+
},
|
|
129
|
+
tool: {
|
|
130
|
+
type: "string",
|
|
131
|
+
description: "Tool name to call (for execute_tool)",
|
|
132
|
+
},
|
|
133
|
+
params: {
|
|
134
|
+
type: "object",
|
|
135
|
+
description: "Parameters for the tool",
|
|
136
|
+
additionalProperties: true,
|
|
137
|
+
},
|
|
138
|
+
},
|
|
139
|
+
required: ["action", "path"],
|
|
140
|
+
},
|
|
141
|
+
},
|
|
142
|
+
required: ["request"],
|
|
143
|
+
},
|
|
144
|
+
},
|
|
145
|
+
{
|
|
146
|
+
name: "list_agents",
|
|
147
|
+
description: "List all registered agents and their available tools.",
|
|
148
|
+
inputSchema: {
|
|
149
|
+
type: "object",
|
|
150
|
+
properties: {},
|
|
151
|
+
},
|
|
152
|
+
},
|
|
153
|
+
];
|
|
154
|
+
}
|
|
155
|
+
// ============================================
|
|
94
156
|
// Create Server
|
|
95
157
|
// ============================================
|
|
96
|
-
/**
|
|
97
|
-
* Create an HTTP server for the agent registry.
|
|
98
|
-
*
|
|
99
|
-
* @example
|
|
100
|
-
* ```typescript
|
|
101
|
-
* const registry = createAgentRegistry();
|
|
102
|
-
* registry.register(createAuthAgent({ rootKey: 'rk_xxx' }));
|
|
103
|
-
* registry.register(myAgent);
|
|
104
|
-
*
|
|
105
|
-
* const server = createAgentServer(registry, { port: 3000 });
|
|
106
|
-
* await server.start();
|
|
107
|
-
* // POST /call - Execute agent actions
|
|
108
|
-
* // GET /list - List agents (filtered by auth)
|
|
109
|
-
* // POST /oauth/token - OAuth2 token endpoint
|
|
110
|
-
* ```
|
|
111
|
-
*/
|
|
112
158
|
export function createAgentServer(registry, options = {}) {
|
|
113
|
-
const { port = 3000, hostname = "localhost", basePath = "", cors = true,
|
|
159
|
+
const { port = 3000, hostname = "localhost", basePath = "", cors = true, serverName = "agents-sdk", serverVersion = "1.0.0", } = options;
|
|
114
160
|
let serverInstance = null;
|
|
115
161
|
let serverUrl = null;
|
|
116
|
-
// Detect auth configuration
|
|
117
162
|
const authConfig = detectAuth(registry);
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
163
|
+
// ──────────────────────────────────────────
|
|
164
|
+
// MCP JSON-RPC handler
|
|
165
|
+
// ──────────────────────────────────────────
|
|
166
|
+
async function handleJsonRpc(request, auth) {
|
|
167
|
+
switch (request.method) {
|
|
168
|
+
// MCP protocol handshake
|
|
169
|
+
case "initialize":
|
|
170
|
+
return jsonRpcSuccess(request.id, {
|
|
171
|
+
protocolVersion: "2024-11-05",
|
|
172
|
+
capabilities: { tools: {} },
|
|
173
|
+
serverInfo: { name: serverName, version: serverVersion },
|
|
174
|
+
});
|
|
175
|
+
case "notifications/initialized":
|
|
176
|
+
return jsonRpcSuccess(request.id, {});
|
|
177
|
+
// List MCP tools
|
|
178
|
+
case "tools/list":
|
|
179
|
+
return jsonRpcSuccess(request.id, {
|
|
180
|
+
tools: getToolDefinitions(),
|
|
181
|
+
});
|
|
182
|
+
// Call an MCP tool
|
|
183
|
+
case "tools/call": {
|
|
184
|
+
const { name, arguments: args } = (request.params ?? {});
|
|
185
|
+
try {
|
|
186
|
+
const result = await handleToolCall(name, args ?? {}, auth);
|
|
187
|
+
return jsonRpcSuccess(request.id, result);
|
|
188
|
+
}
|
|
189
|
+
catch (err) {
|
|
190
|
+
return jsonRpcSuccess(request.id, mcpResult(`Error: ${err instanceof Error ? err.message : String(err)}`, true));
|
|
191
|
+
}
|
|
192
|
+
}
|
|
193
|
+
default:
|
|
194
|
+
return jsonRpcError(request.id, -32601, `Method not found: ${request.method}`);
|
|
195
|
+
}
|
|
196
|
+
}
|
|
197
|
+
// ──────────────────────────────────────────
|
|
198
|
+
// MCP tool implementations
|
|
199
|
+
// ──────────────────────────────────────────
|
|
200
|
+
async function handleToolCall(toolName, args, auth) {
|
|
201
|
+
switch (toolName) {
|
|
202
|
+
case "call_agent": {
|
|
203
|
+
const req = (args.request ?? args);
|
|
204
|
+
// Inject auth context
|
|
205
|
+
if (auth) {
|
|
206
|
+
req.callerId = auth.callerId;
|
|
207
|
+
req.callerType = auth.callerType;
|
|
208
|
+
if (!req.metadata)
|
|
209
|
+
req.metadata = {};
|
|
210
|
+
req.metadata.scopes = auth.scopes;
|
|
211
|
+
req.metadata.isRoot = auth.isRoot;
|
|
212
|
+
}
|
|
213
|
+
if (auth?.isRoot) {
|
|
214
|
+
req.callerType = "system";
|
|
215
|
+
}
|
|
216
|
+
const result = await registry.call(req);
|
|
217
|
+
return mcpResult(result);
|
|
218
|
+
}
|
|
219
|
+
case "list_agents": {
|
|
220
|
+
const agents = registry.list();
|
|
221
|
+
const visible = agents.filter((agent) => canSeeAgent(agent, auth));
|
|
222
|
+
return mcpResult({
|
|
223
|
+
success: true,
|
|
224
|
+
agents: visible.map((agent) => ({
|
|
225
|
+
path: agent.path,
|
|
226
|
+
name: agent.config?.name,
|
|
227
|
+
description: agent.config?.description,
|
|
228
|
+
supportedActions: agent.config?.supportedActions,
|
|
229
|
+
tools: agent.tools
|
|
230
|
+
.filter((t) => {
|
|
231
|
+
const tv = t.visibility ?? "internal";
|
|
232
|
+
if (auth?.isRoot)
|
|
233
|
+
return true;
|
|
234
|
+
if (tv === "public")
|
|
235
|
+
return true;
|
|
236
|
+
if (tv === "internal" && auth)
|
|
237
|
+
return true;
|
|
238
|
+
return false;
|
|
239
|
+
})
|
|
240
|
+
.map((t) => t.name),
|
|
241
|
+
})),
|
|
242
|
+
});
|
|
243
|
+
}
|
|
244
|
+
default:
|
|
245
|
+
throw new Error(`Unknown tool: ${toolName}`);
|
|
246
|
+
}
|
|
247
|
+
}
|
|
248
|
+
// ──────────────────────────────────────────
|
|
249
|
+
// OAuth2 token handler (unchanged)
|
|
250
|
+
// ──────────────────────────────────────────
|
|
251
|
+
async function handleOAuthToken(req) {
|
|
252
|
+
if (!authConfig) {
|
|
253
|
+
return jsonResponse({ error: "auth_not_configured" }, 404);
|
|
254
|
+
}
|
|
255
|
+
const contentType = req.headers.get("Content-Type") ?? "";
|
|
256
|
+
let grantType;
|
|
257
|
+
let clientId;
|
|
258
|
+
let clientSecret;
|
|
259
|
+
if (contentType.includes("application/x-www-form-urlencoded")) {
|
|
260
|
+
const body = await req.text();
|
|
261
|
+
const params = new URLSearchParams(body);
|
|
262
|
+
grantType = params.get("grant_type") ?? "";
|
|
263
|
+
clientId = params.get("client_id") ?? "";
|
|
264
|
+
clientSecret = params.get("client_secret") ?? "";
|
|
265
|
+
}
|
|
266
|
+
else {
|
|
267
|
+
const body = (await req.json());
|
|
268
|
+
grantType = body.grant_type ?? "";
|
|
269
|
+
clientId = body.client_id ?? "";
|
|
270
|
+
clientSecret = body.client_secret ?? "";
|
|
271
|
+
}
|
|
272
|
+
if (grantType !== "client_credentials") {
|
|
273
|
+
return jsonResponse({ error: "unsupported_grant_type", error_description: "Only client_credentials is supported" }, 400);
|
|
274
|
+
}
|
|
275
|
+
if (!clientId || !clientSecret) {
|
|
276
|
+
return jsonResponse({ error: "invalid_request", error_description: "Missing client_id or client_secret" }, 400);
|
|
277
|
+
}
|
|
278
|
+
const client = await authConfig.store.validateClient(clientId, clientSecret);
|
|
279
|
+
if (!client) {
|
|
280
|
+
return jsonResponse({ error: "invalid_client", error_description: "Invalid client credentials" }, 401);
|
|
281
|
+
}
|
|
282
|
+
const tokenString = `at_${Date.now().toString(36)}_${Math.random().toString(36).slice(2)}`;
|
|
283
|
+
const now = Date.now();
|
|
284
|
+
await authConfig.store.storeToken({
|
|
285
|
+
token: tokenString,
|
|
286
|
+
clientId: client.clientId,
|
|
287
|
+
scopes: client.scopes,
|
|
288
|
+
issuedAt: now,
|
|
289
|
+
expiresAt: now + authConfig.tokenTtl * 1000,
|
|
290
|
+
});
|
|
291
|
+
return jsonResponse({
|
|
292
|
+
access_token: tokenString,
|
|
293
|
+
token_type: "Bearer",
|
|
294
|
+
expires_in: authConfig.tokenTtl,
|
|
295
|
+
scope: client.scopes.join(" "),
|
|
296
|
+
});
|
|
297
|
+
}
|
|
298
|
+
// ──────────────────────────────────────────
|
|
299
|
+
// HTTP request handler
|
|
300
|
+
// ─��────────────────────────────────────────
|
|
121
301
|
async function fetch(req) {
|
|
122
302
|
const url = new URL(req.url);
|
|
123
303
|
const path = url.pathname.replace(basePath, "") || "/";
|
|
124
|
-
//
|
|
304
|
+
// CORS preflight
|
|
125
305
|
if (cors && req.method === "OPTIONS") {
|
|
126
|
-
return new Response(null, {
|
|
127
|
-
status: 204,
|
|
128
|
-
headers: corsHeaders(),
|
|
129
|
-
});
|
|
306
|
+
return new Response(null, { status: 204, headers: corsHeaders() });
|
|
130
307
|
}
|
|
131
|
-
// Add CORS headers to response
|
|
132
308
|
const addCors = (response) => {
|
|
133
309
|
if (!cors)
|
|
134
310
|
return response;
|
|
@@ -142,93 +318,23 @@ export function createAgentServer(registry, options = {}) {
|
|
|
142
318
|
headers,
|
|
143
319
|
});
|
|
144
320
|
};
|
|
145
|
-
// Resolve auth on every request
|
|
146
321
|
const auth = authConfig ? await resolveAuth(req, authConfig) : null;
|
|
147
322
|
try {
|
|
148
|
-
// POST /
|
|
149
|
-
if (path === "/
|
|
150
|
-
const contentType = req.headers.get("Content-Type") ?? "";
|
|
151
|
-
let grantType;
|
|
152
|
-
let clientId;
|
|
153
|
-
let clientSecret;
|
|
154
|
-
if (contentType.includes("application/x-www-form-urlencoded")) {
|
|
155
|
-
const body = await req.text();
|
|
156
|
-
const params = new URLSearchParams(body);
|
|
157
|
-
grantType = params.get("grant_type") ?? "";
|
|
158
|
-
clientId = params.get("client_id") ?? "";
|
|
159
|
-
clientSecret = params.get("client_secret") ?? "";
|
|
160
|
-
}
|
|
161
|
-
else {
|
|
162
|
-
const body = (await req.json());
|
|
163
|
-
grantType = body.grant_type ?? "";
|
|
164
|
-
clientId = body.client_id ?? "";
|
|
165
|
-
clientSecret = body.client_secret ?? "";
|
|
166
|
-
}
|
|
167
|
-
if (grantType !== "client_credentials") {
|
|
168
|
-
return addCors(jsonResponse({
|
|
169
|
-
error: "unsupported_grant_type",
|
|
170
|
-
error_description: "Only client_credentials is supported",
|
|
171
|
-
}, 400));
|
|
172
|
-
}
|
|
173
|
-
if (!clientId || !clientSecret) {
|
|
174
|
-
return addCors(jsonResponse({
|
|
175
|
-
error: "invalid_request",
|
|
176
|
-
error_description: "Missing client_id or client_secret",
|
|
177
|
-
}, 400));
|
|
178
|
-
}
|
|
179
|
-
const client = await authConfig.store.validateClient(clientId, clientSecret);
|
|
180
|
-
if (!client) {
|
|
181
|
-
return addCors(jsonResponse({
|
|
182
|
-
error: "invalid_client",
|
|
183
|
-
error_description: "Invalid client credentials",
|
|
184
|
-
}, 401));
|
|
185
|
-
}
|
|
186
|
-
// Generate token
|
|
187
|
-
const tokenString = `at_${Array.from({ length: 48 }, () => "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789"[Math.floor(Math.random() * 62)]).join("")}`;
|
|
188
|
-
const token = {
|
|
189
|
-
token: tokenString,
|
|
190
|
-
clientId: client.clientId,
|
|
191
|
-
scopes: client.scopes,
|
|
192
|
-
issuedAt: Date.now(),
|
|
193
|
-
expiresAt: Date.now() + authConfig.tokenTtl * 1000,
|
|
194
|
-
};
|
|
195
|
-
await authConfig.store.storeToken(token);
|
|
196
|
-
// Standard OAuth2 response
|
|
197
|
-
return addCors(jsonResponse({
|
|
198
|
-
access_token: token.token,
|
|
199
|
-
token_type: "bearer",
|
|
200
|
-
expires_in: authConfig.tokenTtl,
|
|
201
|
-
scope: client.scopes.join(" "),
|
|
202
|
-
}));
|
|
203
|
-
}
|
|
204
|
-
// POST /call - Execute agent action
|
|
205
|
-
if (path === "/call" && req.method === "POST") {
|
|
323
|
+
// MCP endpoint: POST / or POST /mcp
|
|
324
|
+
if ((path === "/" || path === "/mcp") && req.method === "POST") {
|
|
206
325
|
const body = (await req.json());
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
}
|
|
214
|
-
// Inject auth context into request
|
|
215
|
-
if (auth) {
|
|
216
|
-
body.callerId = auth.callerId;
|
|
217
|
-
body.callerType = auth.callerType;
|
|
218
|
-
if (!body.metadata)
|
|
219
|
-
body.metadata = {};
|
|
220
|
-
body.metadata.scopes = auth.scopes;
|
|
221
|
-
body.metadata.isRoot = auth.isRoot;
|
|
222
|
-
}
|
|
223
|
-
// Root key bypasses all access checks
|
|
224
|
-
if (auth?.isRoot) {
|
|
225
|
-
body.callerType = "system";
|
|
226
|
-
}
|
|
227
|
-
const result = await registry.call(body);
|
|
228
|
-
const status = "success" in result && result.success ? 200 : 400;
|
|
229
|
-
return addCors(jsonResponse(result, status));
|
|
326
|
+
const response = await handleJsonRpc(body, auth);
|
|
327
|
+
return addCors(jsonResponse(response));
|
|
328
|
+
}
|
|
329
|
+
// OAuth2 token endpoint
|
|
330
|
+
if (path === "/oauth/token" && req.method === "POST") {
|
|
331
|
+
return addCors(await handleOAuthToken(req));
|
|
230
332
|
}
|
|
231
|
-
//
|
|
333
|
+
// Health check
|
|
334
|
+
if (path === "/health" && req.method === "GET") {
|
|
335
|
+
return addCors(jsonResponse({ status: "ok" }));
|
|
336
|
+
}
|
|
337
|
+
// Backwards compat: GET /list (returns agents directly)
|
|
232
338
|
if (path === "/list" && req.method === "GET") {
|
|
233
339
|
const agents = registry.list();
|
|
234
340
|
const visible = agents.filter((agent) => canSeeAgent(agent, auth));
|
|
@@ -254,42 +360,30 @@ export function createAgentServer(registry, options = {}) {
|
|
|
254
360
|
})),
|
|
255
361
|
}));
|
|
256
362
|
}
|
|
257
|
-
|
|
258
|
-
if (onNotFound) {
|
|
259
|
-
return addCors(await onNotFound(req));
|
|
260
|
-
}
|
|
261
|
-
return addCors(jsonResponse({
|
|
262
|
-
success: false,
|
|
263
|
-
error: `Not found: ${req.method} ${path}`,
|
|
264
|
-
code: "NOT_FOUND",
|
|
265
|
-
}, 404));
|
|
363
|
+
return addCors(jsonResponse({ jsonrpc: "2.0", id: null, error: { code: -32601, message: `Not found: ${req.method} ${path}` } }, 404));
|
|
266
364
|
}
|
|
267
365
|
catch (err) {
|
|
268
|
-
return addCors(jsonResponse({
|
|
269
|
-
success: false,
|
|
270
|
-
error: err instanceof Error ? err.message : String(err),
|
|
271
|
-
code: "INTERNAL_ERROR",
|
|
272
|
-
}, 500));
|
|
366
|
+
return addCors(jsonResponse({ jsonrpc: "2.0", id: null, error: { code: -32603, message: "Internal error" } }, 500));
|
|
273
367
|
}
|
|
274
368
|
}
|
|
369
|
+
// ──────────────────────────────────────────
|
|
370
|
+
// Server lifecycle
|
|
371
|
+
// ──────────────────────────────────────────
|
|
275
372
|
const server = {
|
|
276
373
|
async start() {
|
|
277
|
-
if (serverInstance)
|
|
374
|
+
if (serverInstance)
|
|
278
375
|
throw new Error("Server is already running");
|
|
279
|
-
}
|
|
280
|
-
serverInstance = Bun.serve({
|
|
281
|
-
port,
|
|
282
|
-
hostname,
|
|
283
|
-
fetch,
|
|
284
|
-
});
|
|
376
|
+
serverInstance = Bun.serve({ port, hostname, fetch });
|
|
285
377
|
serverUrl = `http://${hostname}:${port}${basePath}`;
|
|
286
378
|
console.log(`Agent server running at ${serverUrl}`);
|
|
287
|
-
console.log(` POST
|
|
288
|
-
console.log(`
|
|
379
|
+
console.log(` POST / - MCP JSON-RPC endpoint`);
|
|
380
|
+
console.log(` POST /mcp - MCP JSON-RPC endpoint (alias)`);
|
|
381
|
+
console.log(` GET /health - Health check`);
|
|
289
382
|
if (authConfig) {
|
|
290
|
-
console.log(` POST
|
|
291
|
-
console.log(" Auth: enabled
|
|
383
|
+
console.log(` POST /oauth/token - OAuth2 token endpoint`);
|
|
384
|
+
console.log(" Auth: enabled");
|
|
292
385
|
}
|
|
386
|
+
console.log(` MCP tools: call_agent, list_agents`);
|
|
293
387
|
},
|
|
294
388
|
async stop() {
|
|
295
389
|
if (serverInstance) {
|
package/dist/server.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AAuEH,+CAA+C;AAC/C,UAAU;AACV,+CAA+C;AAE/C,SAAS,YAAY,CAAC,IAAa,EAAE,MAAM,GAAG,GAAG;IAC/C,OAAO,IAAI,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE;QACxC,MAAM;QACN,OAAO,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE;KAChD,CAAC,CAAC;AACL,CAAC;AAED,SAAS,WAAW;IAClB,OAAO;QACL,6BAA6B,EAAE,GAAG;QAClC,8BAA8B,EAAE,oBAAoB;QACpD,8BAA8B,EAC5B,qFAAqF;KACxF,CAAC;AACJ,CAAC;AAED,SAAS,cAAc,CAAC,EAAW,EAAE,MAAe;IAClD,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE,EAAE,MAAM,EAAE,CAAC;AACxC,CAAC;AAED,SAAS,YAAY,CACnB,EAAW,EACX,IAAY,EACZ,OAAe,EACf,IAAc;IAEd,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,GAAG,CAAC,IAAI,KAAK,SAAS,IAAI,EAAE,IAAI,EAAE,CAAC,EAAE,EAAE,CAAC;AAC/F,CAAC;AAED,8CAA8C;AAC9C,SAAS,SAAS,CAAC,KAAc,EAAE,OAAO,GAAG,KAAK;IAChD,OAAO;QACL,OAAO,EAAE;YACP;gBACE,IAAI,EAAE,MAAM;gBACZ,IAAI,EAAE,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;aACzE;SACF;QACD,GAAG,CAAC,OAAO,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;KAClC,CAAC;AACJ,CAAC;AAED,+CAA+C;AAC/C,iBAAiB;AACjB,+CAA+C;AAE/C,SAAS,UAAU,CAAC,QAAuB;IACzC,MAAM,SAAS,GAAG,QAAQ,CAAC,GAAG,CAAC,OAAO,CAMzB,CAAC;IAEd,IAAI,CAAC,SAAS,EAAE,WAAW,IAAI,CAAC,SAAS,CAAC,SAAS;QAAE,OAAO,IAAI,CAAC;IAEjE,OAAO;QACL,KAAK,EAAE,SAAS,CAAC,WAAW;QAC5B,OAAO,EAAE,SAAS,CAAC,SAAS;QAC5B,QAAQ,EAAE,SAAS,CAAC,UAAU,IAAI,IAAI;KACvC,CAAC;AACJ,CAAC;AAED,KAAK,UAAU,WAAW,CACxB,GAAY,EACZ,UAAsB;IAEtB,MAAM,UAAU,GAAG,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC;IACpD,IAAI,CAAC,UAAU;QAAE,OAAO,IAAI,CAAC;IAE7B,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,GAAG,UAAU,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;IACtD,IAAI,MAAM,EAAE,WAAW,EAAE,KAAK,QAAQ,IAAI,CAAC,UAAU;QAAE,OAAO,IAAI,CAAC;IAEnE,IAAI,UAAU,KAAK,UAAU,CAAC,OAAO,EAAE,CAAC;QACtC,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC,GAAG,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC;IACjF,CAAC;IAED,MAAM,KAAK,GAAG,MAAM,UAAU,CAAC,KAAK,CAAC,aAAa,CAAC,UAAU,CAAC,CAAC;IAC/D,IAAI,CAAC,KAAK;QAAE,OAAO,IAAI,CAAC;IAExB,MAAM,MAAM,GAAG,MAAM,UAAU,CAAC,KAAK,CAAC,SAAS,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;IAChE,OAAO;QACL,QAAQ,EAAE,MAAM,EAAE,IAAI,IAAI,KAAK,CAAC,QAAQ;QACxC,UAAU,EAAE,OAAO;QACnB,MAAM,EAAE,KAAK,CAAC,MAAM;QACpB,MAAM,EAAE,KAAK;KACd,CAAC;AACJ,CAAC;AAED,SAAS,WAAW,CAAC,KAAsB,EAAE,IAAyB;IACpE,MAAM,UAAU,GAAG,CAAC,KAAK,CAAC,MAAM,EAAE,UAAU,IAAI,UAAU,CAAe,CAAC;IAC1E,IAAI,IAAI,EAAE,MAAM;QAAE,OAAO,IAAI,CAAC;IAC9B,IAAI,UAAU,KAAK,QAAQ;QAAE,OAAO,IAAI,CAAC;IACzC,IAAI,UAAU,KAAK,UAAU,IAAI,IAAI;QAAE,OAAO,IAAI,CAAC;IACnD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,+CAA+C;AAC/C,uBAAuB;AACvB,+CAA+C;AAE/C,SAAS,kBAAkB;IACzB,OAAO;QACL;YACE,IAAI,EAAE,YAAY;YAClB,WAAW,EACT,6EAA6E;YAC/E,WAAW,EAAE;gBACX,IAAI,EAAE,QAAQ;gBACd,UAAU,EAAE;oBACV,OAAO,EAAE;wBACP,IAAI,EAAE,QAAQ;wBACd,WAAW,EAAE,kBAAkB;wBAC/B,UAAU,EAAE;4BACV,MAAM,EAAE;gCACN,IAAI,EAAE,QAAQ;gCACd,IAAI,EAAE,CAAC,cAAc,EAAE,gBAAgB,EAAE,MAAM,CAAC;gCAChD,WAAW,EAAE,mBAAmB;6BACjC;4BACD,IAAI,EAAE;gCACJ,IAAI,EAAE,QAAQ;gCACd,WAAW,EAAE,+BAA+B;6BAC7C;4BACD,IAAI,EAAE;gCACJ,IAAI,EAAE,QAAQ;gCACd,WAAW,EAAE,sCAAsC;6BACpD;4BACD,MAAM,EAAE;gCACN,IAAI,EAAE,QAAQ;gCACd,WAAW,EAAE,yBAAyB;gCACtC,oBAAoB,EAAE,IAAI;6BAC3B;yBACF;wBACD,QAAQ,EAAE,CAAC,QAAQ,EAAE,MAAM,CAAC;qBAC7B;iBACF;gBACD,QAAQ,EAAE,CAAC,SAAS,CAAC;aACtB;SACF;QACD;YACE,IAAI,EAAE,aAAa;YACnB,WAAW,EAAE,uDAAuD;YACpE,WAAW,EAAE;gBACX,IAAI,EAAE,QAAQ;gBACd,UAAU,EAAE,EAAE;aACf;SACF;KACF,CAAC;AACJ,CAAC;AAED,+CAA+C;AAC/C,gBAAgB;AAChB,+CAA+C;AAE/C,MAAM,UAAU,iBAAiB,CAC/B,QAAuB,EACvB,UAA8B,EAAE;IAEhC,MAAM,EACJ,IAAI,GAAG,IAAI,EACX,QAAQ,GAAG,WAAW,EACtB,QAAQ,GAAG,EAAE,EACb,IAAI,GAAG,IAAI,EACX,UAAU,GAAG,YAAY,EACzB,aAAa,GAAG,OAAO,GACxB,GAAG,OAAO,CAAC;IAEZ,IAAI,cAAc,GAAwC,IAAI,CAAC;IAC/D,IAAI,SAAS,GAAkB,IAAI,CAAC;IAEpC,MAAM,UAAU,GAAG,UAAU,CAAC,QAAQ,CAAC,CAAC;IAExC,6CAA6C;IAC7C,uBAAuB;IACvB,6CAA6C;IAE7C,KAAK,UAAU,aAAa,CAC1B,OAAuB,EACvB,IAAyB;QAEzB,QAAQ,OAAO,CAAC,MAAM,EAAE,CAAC;YACvB,yBAAyB;YACzB,KAAK,YAAY;gBACf,OAAO,cAAc,CAAC,OAAO,CAAC,EAAE,EAAE;oBAChC,eAAe,EAAE,YAAY;oBAC7B,YAAY,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE;oBAC3B,UAAU,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE,OAAO,EAAE,aAAa,EAAE;iBACzD,CAAC,CAAC;YAEL,KAAK,2BAA2B;gBAC9B,OAAO,cAAc,CAAC,OAAO,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;YAExC,iBAAiB;YACjB,KAAK,YAAY;gBACf,OAAO,cAAc,CAAC,OAAO,CAAC,EAAE,EAAE;oBAChC,KAAK,EAAE,kBAAkB,EAAE;iBAC5B,CAAC,CAAC;YAEL,mBAAmB;YACnB,KAAK,YAAY,CAAC,CAAC,CAAC;gBAClB,MAAM,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,GAAG,CAAC,OAAO,CAAC,MAAM,IAAI,EAAE,CAGtD,CAAC;gBAEF,IAAI,CAAC;oBACH,MAAM,MAAM,GAAG,MAAM,cAAc,CAAC,IAAI,EAAE,IAAI,IAAI,EAAE,EAAE,IAAI,CAAC,CAAC;oBAC5D,OAAO,cAAc,CAAC,OAAO,CAAC,EAAE,EAAE,MAAM,CAAC,CAAC;gBAC5C,CAAC;gBAAC,OAAO,GAAG,EAAE,CAAC;oBACb,OAAO,cAAc,CACnB,OAAO,CAAC,EAAE,EACV,SAAS,CACP,UAAU,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,EAC5D,IAAI,CACL,CACF,CAAC;gBACJ,CAAC;YACH,CAAC;YAED;gBACE,OAAO,YAAY,CACjB,OAAO,CAAC,EAAE,EACV,CAAC,KAAK,EACN,qBAAqB,OAAO,CAAC,MAAM,EAAE,CACtC,CAAC;QACN,CAAC;IACH,CAAC;IAED,6CAA6C;IAC7C,2BAA2B;IAC3B,6CAA6C;IAE7C,KAAK,UAAU,cAAc,CAC3B,QAAgB,EAChB,IAA6B,EAC7B,IAAyB;QAEzB,QAAQ,QAAQ,EAAE,CAAC;YACjB,KAAK,YAAY,CAAC,CAAC,CAAC;gBAClB,MAAM,GAAG,GAAG,CAAC,IAAI,CAAC,OAAO,IAAI,IAAI,CAAqB,CAAC;gBAEvD,sBAAsB;gBACtB,IAAI,IAAI,EAAE,CAAC;oBACT,GAAG,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC;oBAC7B,GAAG,CAAC,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC;oBACjC,IAAI,CAAC,GAAG,CAAC,QAAQ;wBAAE,GAAG,CAAC,QAAQ,GAAG,EAAE,CAAC;oBACrC,GAAG,CAAC,QAAQ,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC;oBAClC,GAAG,CAAC,QAAQ,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC;gBACpC,CAAC;gBACD,IAAI,IAAI,EAAE,MAAM,EAAE,CAAC;oBACjB,GAAG,CAAC,UAAU,GAAG,QAAQ,CAAC;gBAC5B,CAAC;gBAED,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;gBACxC,OAAO,SAAS,CAAC,MAAM,CAAC,CAAC;YAC3B,CAAC;YAED,KAAK,aAAa,CAAC,CAAC,CAAC;gBACnB,MAAM,MAAM,GAAG,QAAQ,CAAC,IAAI,EAAE,CAAC;gBAC/B,MAAM,OAAO,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,WAAW,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC,CAAC;gBAEnE,OAAO,SAAS,CAAC;oBACf,OAAO,EAAE,IAAI;oBACb,MAAM,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;wBAC9B,IAAI,EAAE,KAAK,CAAC,IAAI;wBAChB,IAAI,EAAE,KAAK,CAAC,MAAM,EAAE,IAAI;wBACxB,WAAW,EAAE,KAAK,CAAC,MAAM,EAAE,WAAW;wBACtC,gBAAgB,EAAE,KAAK,CAAC,MAAM,EAAE,gBAAgB;wBAChD,KAAK,EAAE,KAAK,CAAC,KAAK;6BACf,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE;4BACZ,MAAM,EAAE,GAAG,CAAC,CAAC,UAAU,IAAI,UAAU,CAAC;4BACtC,IAAI,IAAI,EAAE,MAAM;gCAAE,OAAO,IAAI,CAAC;4BAC9B,IAAI,EAAE,KAAK,QAAQ;gCAAE,OAAO,IAAI,CAAC;4BACjC,IAAI,EAAE,KAAK,UAAU,IAAI,IAAI;gCAAE,OAAO,IAAI,CAAC;4BAC3C,OAAO,KAAK,CAAC;wBACf,CAAC,CAAC;6BACD,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;qBACtB,CAAC,CAAC;iBACJ,CAAC,CAAC;YACL,CAAC;YAED;gBACE,MAAM,IAAI,KAAK,CAAC,iBAAiB,QAAQ,EAAE,CAAC,CAAC;QACjD,CAAC;IACH,CAAC;IAED,6CAA6C;IAC7C,mCAAmC;IACnC,6CAA6C;IAE7C,KAAK,UAAU,gBAAgB,CAAC,GAAY;QAC1C,IAAI,CAAC,UAAU,EAAE,CAAC;YAChB,OAAO,YAAY,CAAC,EAAE,KAAK,EAAE,qBAAqB,EAAE,EAAE,GAAG,CAAC,CAAC;QAC7D,CAAC;QAED,MAAM,WAAW,GAAG,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC,IAAI,EAAE,CAAC;QAC1D,IAAI,SAAiB,CAAC;QACtB,IAAI,QAAgB,CAAC;QACrB,IAAI,YAAoB,CAAC;QAEzB,IAAI,WAAW,CAAC,QAAQ,CAAC,mCAAmC,CAAC,EAAE,CAAC;YAC9D,MAAM,IAAI,GAAG,MAAM,GAAG,CAAC,IAAI,EAAE,CAAC;YAC9B,MAAM,MAAM,GAAG,IAAI,eAAe,CAAC,IAAI,CAAC,CAAC;YACzC,SAAS,GAAG,MAAM,CAAC,GAAG,CAAC,YAAY,CAAC,IAAI,EAAE,CAAC;YAC3C,QAAQ,GAAG,MAAM,CAAC,GAAG,CAAC,WAAW,CAAC,IAAI,EAAE,CAAC;YACzC,YAAY,GAAG,MAAM,CAAC,GAAG,CAAC,eAAe,CAAC,IAAI,EAAE,CAAC;QACnD,CAAC;aAAM,CAAC;YACN,MAAM,IAAI,GAAG,CAAC,MAAM,GAAG,CAAC,IAAI,EAAE,CAA2B,CAAC;YAC1D,SAAS,GAAG,IAAI,CAAC,UAAU,IAAI,EAAE,CAAC;YAClC,QAAQ,GAAG,IAAI,CAAC,SAAS,IAAI,EAAE,CAAC;YAChC,YAAY,GAAG,IAAI,CAAC,aAAa,IAAI,EAAE,CAAC;QAC1C,CAAC;QAED,IAAI,SAAS,KAAK,oBAAoB,EAAE,CAAC;YACvC,OAAO,YAAY,CACjB,EAAE,KAAK,EAAE,wBAAwB,EAAE,iBAAiB,EAAE,sCAAsC,EAAE,EAC9F,GAAG,CACJ,CAAC;QACJ,CAAC;QAED,IAAI,CAAC,QAAQ,IAAI,CAAC,YAAY,EAAE,CAAC;YAC/B,OAAO,YAAY,CACjB,EAAE,KAAK,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,oCAAoC,EAAE,EACrF,GAAG,CACJ,CAAC;QACJ,CAAC;QAED,MAAM,MAAM,GAAG,MAAM,UAAU,CAAC,KAAK,CAAC,cAAc,CAAC,QAAQ,EAAE,YAAY,CAAC,CAAC;QAC7E,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,OAAO,YAAY,CACjB,EAAE,KAAK,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,4BAA4B,EAAE,EAC5E,GAAG,CACJ,CAAC;QACJ,CAAC;QAED,MAAM,WAAW,GAAG,MAAM,IAAI,CAAC,GAAG,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC;QAC3F,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QAEvB,MAAM,UAAU,CAAC,KAAK,CAAC,UAAU,CAAC;YAChC,KAAK,EAAE,WAAW;YAClB,QAAQ,EAAE,MAAM,CAAC,QAAQ;YACzB,MAAM,EAAE,MAAM,CAAC,MAAM;YACrB,QAAQ,EAAE,GAAG;YACb,SAAS,EAAE,GAAG,GAAG,UAAU,CAAC,QAAQ,GAAG,IAAI;SAC5C,CAAC,CAAC;QAEH,OAAO,YAAY,CAAC;YAClB,YAAY,EAAE,WAAW;YACzB,UAAU,EAAE,QAAQ;YACpB,UAAU,EAAE,UAAU,CAAC,QAAQ;YAC/B,KAAK,EAAE,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC;SAC/B,CAAC,CAAC;IACL,CAAC;IAED,6CAA6C;IAC7C,uBAAuB;IACvB,8CAA8C;IAE9C,KAAK,UAAU,KAAK,CAAC,GAAY;QAC/B,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QAC7B,MAAM,IAAI,GAAG,GAAG,CAAC,QAAQ,CAAC,OAAO,CAAC,QAAQ,EAAE,EAAE,CAAC,IAAI,GAAG,CAAC;QAEvD,iBAAiB;QACjB,IAAI,IAAI,IAAI,GAAG,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;YACrC,OAAO,IAAI,QAAQ,CAAC,IAAI,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,OAAO,EAAE,WAAW,EAAE,EAAE,CAAC,CAAC;QACrE,CAAC;QAED,MAAM,OAAO,GAAG,CAAC,QAAkB,EAAY,EAAE;YAC/C,IAAI,CAAC,IAAI;gBAAE,OAAO,QAAQ,CAAC;YAC3B,MAAM,OAAO,GAAG,IAAI,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;YAC9C,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC,EAAE,CAAC;gBACzD,OAAO,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;YAC1B,CAAC;YACD,OAAO,IAAI,QAAQ,CAAC,QAAQ,CAAC,IAAI,EAAE;gBACjC,MAAM,EAAE,QAAQ,CAAC,MAAM;gBACvB,UAAU,EAAE,QAAQ,CAAC,UAAU;gBAC/B,OAAO;aACR,CAAC,CAAC;QACL,CAAC,CAAC;QAEF,MAAM,IAAI,GAAG,UAAU,CAAC,CAAC,CAAC,MAAM,WAAW,CAAC,GAAG,EAAE,UAAU,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;QAEpE,IAAI,CAAC;YACH,oCAAoC;YACpC,IAAI,CAAC,IAAI,KAAK,GAAG,IAAI,IAAI,KAAK,MAAM,CAAC,IAAI,GAAG,CAAC,MAAM,KAAK,MAAM,EAAE,CAAC;gBAC/D,MAAM,IAAI,GAAG,CAAC,MAAM,GAAG,CAAC,IAAI,EAAE,CAAmB,CAAC;gBAClD,MAAM,QAAQ,GAAG,MAAM,aAAa,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;gBACjD,OAAO,OAAO,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC,CAAC;YACzC,CAAC;YAED,wBAAwB;YACxB,IAAI,IAAI,KAAK,cAAc,IAAI,GAAG,CAAC,MAAM,KAAK,MAAM,EAAE,CAAC;gBACrD,OAAO,OAAO,CAAC,MAAM,gBAAgB,CAAC,GAAG,CAAC,CAAC,CAAC;YAC9C,CAAC;YAED,eAAe;YACf,IAAI,IAAI,KAAK,SAAS,IAAI,GAAG,CAAC,MAAM,KAAK,KAAK,EAAE,CAAC;gBAC/C,OAAO,OAAO,CAAC,YAAY,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;YACjD,CAAC;YAED,wDAAwD;YACxD,IAAI,IAAI,KAAK,OAAO,IAAI,GAAG,CAAC,MAAM,KAAK,KAAK,EAAE,CAAC;gBAC7C,MAAM,MAAM,GAAG,QAAQ,CAAC,IAAI,EAAE,CAAC;gBAC/B,MAAM,OAAO,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,WAAW,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC,CAAC;gBACnE,OAAO,OAAO,CACZ,YAAY,CAAC;oBACX,OAAO,EAAE,IAAI;oBACb,MAAM,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;wBAC9B,IAAI,EAAE,KAAK,CAAC,IAAI;wBAChB,IAAI,EAAE,KAAK,CAAC,MAAM,EAAE,IAAI;wBACxB,WAAW,EAAE,KAAK,CAAC,MAAM,EAAE,WAAW;wBACtC,gBAAgB,EAAE,KAAK,CAAC,MAAM,EAAE,gBAAgB;wBAChD,KAAK,EAAE,KAAK,CAAC,KAAK;6BACf,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE;4BACZ,MAAM,EAAE,GAAG,CAAC,CAAC,UAAU,IAAI,UAAU,CAAC;4BACtC,IAAI,IAAI,EAAE,MAAM;gCAAE,OAAO,IAAI,CAAC;4BAC9B,IAAI,EAAE,KAAK,QAAQ;gCAAE,OAAO,IAAI,CAAC;4BACjC,IAAI,EAAE,KAAK,UAAU,IAAI,IAAI;gCAAE,OAAO,IAAI,CAAC;4BAC3C,OAAO,KAAK,CAAC;wBACf,CAAC,CAAC;6BACD,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;qBACtB,CAAC,CAAC;iBACJ,CAAC,CACH,CAAC;YACJ,CAAC;YAED,OAAO,OAAO,CAAC,YAAY,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,CAAC,KAAK,EAAE,OAAO,EAAE,cAAc,GAAG,CAAC,MAAM,IAAI,IAAI,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC,CAAC,CAAC;QACxI,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,OAAO,OAAO,CACZ,YAAY,CACV,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,CAAC,KAAK,EAAE,OAAO,EAAE,gBAAgB,EAAE,EAAE,EAChF,GAAG,CACJ,CACF,CAAC;QACJ,CAAC;IACH,CAAC;IAED,6CAA6C;IAC7C,mBAAmB;IACnB,6CAA6C;IAE7C,MAAM,MAAM,GAAgB;QAC1B,KAAK,CAAC,KAAK;YACT,IAAI,cAAc;gBAAE,MAAM,IAAI,KAAK,CAAC,2BAA2B,CAAC,CAAC;YAEjE,cAAc,GAAG,GAAG,CAAC,KAAK,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC,CAAC;YACtD,SAAS,GAAG,UAAU,QAAQ,IAAI,IAAI,GAAG,QAAQ,EAAE,CAAC;YAEpD,OAAO,CAAC,GAAG,CAAC,2BAA2B,SAAS,EAAE,CAAC,CAAC;YACpD,OAAO,CAAC,GAAG,CAAC,sCAAsC,CAAC,CAAC;YACpD,OAAO,CAAC,GAAG,CAAC,8CAA8C,CAAC,CAAC;YAC5D,OAAO,CAAC,GAAG,CAAC,+BAA+B,CAAC,CAAC;YAC7C,IAAI,UAAU,EAAE,CAAC;gBACf,OAAO,CAAC,GAAG,CAAC,6CAA6C,CAAC,CAAC;gBAC3D,OAAO,CAAC,GAAG,CAAC,iBAAiB,CAAC,CAAC;YACjC,CAAC;YACD,OAAO,CAAC,GAAG,CAAC,sCAAsC,CAAC,CAAC;QACtD,CAAC;QAED,KAAK,CAAC,IAAI;YACR,IAAI,cAAc,EAAE,CAAC;gBACnB,cAAc,CAAC,IAAI,EAAE,CAAC;gBACtB,cAAc,GAAG,IAAI,CAAC;gBACtB,SAAS,GAAG,IAAI,CAAC;YACnB,CAAC;QACH,CAAC;QAED,KAAK;QAEL,IAAI,GAAG;YACL,OAAO,SAAS,CAAC;QACnB,CAAC;KACF,CAAC;IAEF,OAAO,MAAM,CAAC;AAChB,CAAC"}
|