@evref-bl/plexus-gateway 0.1.0-alpha.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/gateway.d.ts +107 -0
- package/dist/gateway.d.ts.map +1 -0
- package/dist/gateway.js +445 -0
- package/dist/gateway.js.map +1 -0
- package/dist/imageMcpRouter.d.ts +25 -0
- package/dist/imageMcpRouter.d.ts.map +1 -0
- package/dist/imageMcpRouter.js +90 -0
- package/dist/imageMcpRouter.js.map +1 -0
- package/dist/index.d.ts +7 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +28 -0
- package/dist/index.js.map +1 -0
- package/dist/pharoFacade.d.ts +12 -0
- package/dist/pharoFacade.d.ts.map +1 -0
- package/dist/pharoFacade.js +67 -0
- package/dist/pharoFacade.js.map +1 -0
- package/dist/routingTable.d.ts +84 -0
- package/dist/routingTable.d.ts.map +1 -0
- package/dist/routingTable.js +166 -0
- package/dist/routingTable.js.map +1 -0
- package/dist/server.d.ts +133 -0
- package/dist/server.d.ts.map +1 -0
- package/dist/server.js +394 -0
- package/dist/server.js.map +1 -0
- package/package.json +36 -0
package/dist/server.js
ADDED
|
@@ -0,0 +1,394 @@
|
|
|
1
|
+
import http from "node:http";
|
|
2
|
+
import { Server } from "@modelcontextprotocol/sdk/server/index.js";
|
|
3
|
+
import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
|
|
4
|
+
import { StreamableHTTPServerTransport } from "@modelcontextprotocol/sdk/server/streamableHttp.js";
|
|
5
|
+
import { CallToolRequestSchema, ListToolsRequestSchema, } from "@modelcontextprotocol/sdk/types.js";
|
|
6
|
+
import { PlexusGateway } from "./gateway.js";
|
|
7
|
+
const stringSchema = { type: "string", minLength: 1 };
|
|
8
|
+
const optionalStringSchema = { type: "string", minLength: 1 };
|
|
9
|
+
function objectSchema(properties, required = []) {
|
|
10
|
+
return {
|
|
11
|
+
type: "object",
|
|
12
|
+
properties,
|
|
13
|
+
required,
|
|
14
|
+
additionalProperties: false,
|
|
15
|
+
};
|
|
16
|
+
}
|
|
17
|
+
const routeReferenceProperties = {
|
|
18
|
+
projectId: optionalStringSchema,
|
|
19
|
+
workspaceId: optionalStringSchema,
|
|
20
|
+
targetId: optionalStringSchema,
|
|
21
|
+
};
|
|
22
|
+
const projectStateSchema = {
|
|
23
|
+
type: "object",
|
|
24
|
+
additionalProperties: true,
|
|
25
|
+
};
|
|
26
|
+
export const gatewayTools = [
|
|
27
|
+
{
|
|
28
|
+
name: "plexus_gateway_register_target",
|
|
29
|
+
description: "Register or update one gateway target route from PLexus runtime state.",
|
|
30
|
+
inputSchema: objectSchema({
|
|
31
|
+
projectRoot: stringSchema,
|
|
32
|
+
statePath: stringSchema,
|
|
33
|
+
state: projectStateSchema,
|
|
34
|
+
}, ["projectRoot", "statePath", "state"]),
|
|
35
|
+
},
|
|
36
|
+
{
|
|
37
|
+
name: "plexus_gateway_unregister_target",
|
|
38
|
+
description: "Remove a registered gateway target route without opening or closing project images.",
|
|
39
|
+
inputSchema: objectSchema(routeReferenceProperties),
|
|
40
|
+
},
|
|
41
|
+
{
|
|
42
|
+
name: "plexus_gateway_status",
|
|
43
|
+
description: "Return gateway route status for registered targets/images.",
|
|
44
|
+
inputSchema: objectSchema({
|
|
45
|
+
...routeReferenceProperties,
|
|
46
|
+
refreshHealth: { type: "boolean" },
|
|
47
|
+
}),
|
|
48
|
+
},
|
|
49
|
+
{
|
|
50
|
+
name: "plexus_gateway_cleanup_stale_routes",
|
|
51
|
+
description: "Remove registered gateway target routes whose runtime state files are gone.",
|
|
52
|
+
inputSchema: objectSchema({}),
|
|
53
|
+
},
|
|
54
|
+
];
|
|
55
|
+
export const rawRoutingTool = {
|
|
56
|
+
name: "plexus_route_to_image",
|
|
57
|
+
description: "Route a Pharo MCP tool call to the MCP server running inside a selected image.",
|
|
58
|
+
inputSchema: objectSchema({
|
|
59
|
+
...routeReferenceProperties,
|
|
60
|
+
imageId: stringSchema,
|
|
61
|
+
toolName: stringSchema,
|
|
62
|
+
arguments: {
|
|
63
|
+
type: "object",
|
|
64
|
+
additionalProperties: true,
|
|
65
|
+
},
|
|
66
|
+
}, ["imageId", "toolName"]),
|
|
67
|
+
};
|
|
68
|
+
const legacyGatewaySurface = "pharo";
|
|
69
|
+
function agentGatewaySurface(surface) {
|
|
70
|
+
return surface === "gateway" || surface === legacyGatewaySurface;
|
|
71
|
+
}
|
|
72
|
+
function pharoToolsVisible(surface) {
|
|
73
|
+
return agentGatewaySurface(surface) || surface === "combined";
|
|
74
|
+
}
|
|
75
|
+
function adminToolsVisible(surface) {
|
|
76
|
+
return surface === "admin" || surface === "combined";
|
|
77
|
+
}
|
|
78
|
+
function visibleAdminTools(exposeRawRoutingTool) {
|
|
79
|
+
return [
|
|
80
|
+
...gatewayTools,
|
|
81
|
+
...(exposeRawRoutingTool ? [rawRoutingTool] : []),
|
|
82
|
+
];
|
|
83
|
+
}
|
|
84
|
+
function visibleRawRoutingTools(exposeRawRoutingTool) {
|
|
85
|
+
return (exposeRawRoutingTool ? [rawRoutingTool] : []);
|
|
86
|
+
}
|
|
87
|
+
function visibleTools(gateway, surface, exposeRawRoutingTool) {
|
|
88
|
+
return [
|
|
89
|
+
...(adminToolsVisible(surface)
|
|
90
|
+
? visibleAdminTools(exposeRawRoutingTool)
|
|
91
|
+
: []),
|
|
92
|
+
...(!adminToolsVisible(surface) && exposeRawRoutingTool
|
|
93
|
+
? visibleRawRoutingTools(exposeRawRoutingTool)
|
|
94
|
+
: []),
|
|
95
|
+
...(pharoToolsVisible(surface) ? gateway.listPharoTools() : []),
|
|
96
|
+
];
|
|
97
|
+
}
|
|
98
|
+
function parseBooleanEnv(value, name) {
|
|
99
|
+
if (value === undefined || value.trim().length === 0) {
|
|
100
|
+
return false;
|
|
101
|
+
}
|
|
102
|
+
const normalized = value.trim().toLowerCase();
|
|
103
|
+
if (normalized === "true" || normalized === "1" || normalized === "yes") {
|
|
104
|
+
return true;
|
|
105
|
+
}
|
|
106
|
+
if (normalized === "false" || normalized === "0" || normalized === "no") {
|
|
107
|
+
return false;
|
|
108
|
+
}
|
|
109
|
+
throw new Error(`${name} must be true or false`);
|
|
110
|
+
}
|
|
111
|
+
export const legacyGatewayTools = [...gatewayTools, rawRoutingTool];
|
|
112
|
+
/*
|
|
113
|
+
* `pharo` is retained as a temporary compatibility alias for the agent-facing
|
|
114
|
+
* gateway proxy. New generated config should use `gateway`.
|
|
115
|
+
*/
|
|
116
|
+
function parseGatewaySurface(value) {
|
|
117
|
+
if (value === undefined || value.trim().length === 0) {
|
|
118
|
+
return "combined";
|
|
119
|
+
}
|
|
120
|
+
if (value === "combined" ||
|
|
121
|
+
value === "admin" ||
|
|
122
|
+
value === "gateway" ||
|
|
123
|
+
value === legacyGatewaySurface) {
|
|
124
|
+
return value;
|
|
125
|
+
}
|
|
126
|
+
throw new Error(`Unsupported PLexus gateway surface: ${value}`);
|
|
127
|
+
}
|
|
128
|
+
function jsonResult(value, isError = false) {
|
|
129
|
+
return {
|
|
130
|
+
content: [{ type: "text", text: JSON.stringify(value, null, 2) }],
|
|
131
|
+
...(isError ? { isError } : {}),
|
|
132
|
+
};
|
|
133
|
+
}
|
|
134
|
+
function isCallToolResult(value) {
|
|
135
|
+
return (Boolean(value) &&
|
|
136
|
+
typeof value === "object" &&
|
|
137
|
+
Array.isArray(value.content));
|
|
138
|
+
}
|
|
139
|
+
function withToolMeta(value, meta) {
|
|
140
|
+
if (!meta) {
|
|
141
|
+
return value;
|
|
142
|
+
}
|
|
143
|
+
return {
|
|
144
|
+
...value,
|
|
145
|
+
_meta: {
|
|
146
|
+
...(value._meta ?? {}),
|
|
147
|
+
...meta,
|
|
148
|
+
},
|
|
149
|
+
};
|
|
150
|
+
}
|
|
151
|
+
function directToolResult(value, meta) {
|
|
152
|
+
if (isCallToolResult(value)) {
|
|
153
|
+
return withToolMeta(value, meta);
|
|
154
|
+
}
|
|
155
|
+
return withToolMeta(jsonResult(value), meta);
|
|
156
|
+
}
|
|
157
|
+
export function createGatewayServer(gateway = new PlexusGateway()) {
|
|
158
|
+
return createGatewayServerWithOptions(gateway);
|
|
159
|
+
}
|
|
160
|
+
export function createGatewayServerWithOptions(gateway = new PlexusGateway(), options = {}) {
|
|
161
|
+
const surface = options.surface ?? "combined";
|
|
162
|
+
const exposeRawRoutingTool = options.exposeRawRoutingTool ?? false;
|
|
163
|
+
const server = new Server({
|
|
164
|
+
name: "plexus-gateway",
|
|
165
|
+
version: "0.1.0",
|
|
166
|
+
}, {
|
|
167
|
+
capabilities: {
|
|
168
|
+
tools: {},
|
|
169
|
+
},
|
|
170
|
+
});
|
|
171
|
+
server.setRequestHandler(ListToolsRequestSchema, async () => ({
|
|
172
|
+
tools: visibleTools(gateway, surface, exposeRawRoutingTool),
|
|
173
|
+
}));
|
|
174
|
+
server.setRequestHandler(CallToolRequestSchema, async (request) => {
|
|
175
|
+
if (gateway.isPharoTool(request.params.name) && pharoToolsVisible(surface)) {
|
|
176
|
+
const result = await gateway.callPharoTool(request.params.name, request.params.arguments ?? {});
|
|
177
|
+
if (!result.ok) {
|
|
178
|
+
return jsonResult(result, true);
|
|
179
|
+
}
|
|
180
|
+
return directToolResult(result.data);
|
|
181
|
+
}
|
|
182
|
+
if (request.params.name === "plexus_route_to_image") {
|
|
183
|
+
if (!exposeRawRoutingTool) {
|
|
184
|
+
return jsonResult({
|
|
185
|
+
ok: false,
|
|
186
|
+
error: "Raw image routing is disabled; set PLEXUS_EXPOSE_RAW_ROUTING_TOOL=true to expose plexus_route_to_image.",
|
|
187
|
+
}, true);
|
|
188
|
+
}
|
|
189
|
+
const result = await gateway.handleTool(request.params.name, request.params.arguments ?? {});
|
|
190
|
+
if (!result.ok) {
|
|
191
|
+
return jsonResult(result, true);
|
|
192
|
+
}
|
|
193
|
+
return directToolResult(result.data, result.route ? { plexusRoute: result.route } : undefined);
|
|
194
|
+
}
|
|
195
|
+
if (agentGatewaySurface(surface)) {
|
|
196
|
+
return jsonResult({
|
|
197
|
+
ok: false,
|
|
198
|
+
error: `Unknown Pharo tool: ${request.params.name}`,
|
|
199
|
+
}, true);
|
|
200
|
+
}
|
|
201
|
+
const result = await gateway.handleTool(request.params.name, request.params.arguments ?? {});
|
|
202
|
+
if (!result.ok) {
|
|
203
|
+
return jsonResult(result, true);
|
|
204
|
+
}
|
|
205
|
+
return jsonResult(result);
|
|
206
|
+
});
|
|
207
|
+
return server;
|
|
208
|
+
}
|
|
209
|
+
function parseJsonArrayEnv(value, name) {
|
|
210
|
+
if (value === undefined || value.trim().length === 0) {
|
|
211
|
+
return [];
|
|
212
|
+
}
|
|
213
|
+
const parsed = JSON.parse(value);
|
|
214
|
+
if (!Array.isArray(parsed)) {
|
|
215
|
+
throw new Error(`${name} must be a JSON array`);
|
|
216
|
+
}
|
|
217
|
+
return parsed;
|
|
218
|
+
}
|
|
219
|
+
export function parseGatewayEnvironmentOptions(env = process.env) {
|
|
220
|
+
return {
|
|
221
|
+
surface: parseGatewaySurface(env.PLEXUS_GATEWAY_SURFACE),
|
|
222
|
+
exposeRawRoutingTool: parseBooleanEnv(env.PLEXUS_EXPOSE_RAW_ROUTING_TOOL, "PLEXUS_EXPOSE_RAW_ROUTING_TOOL"),
|
|
223
|
+
pharoTools: parseJsonArrayEnv(env.PLEXUS_PHARO_TOOLS_JSON, "PLEXUS_PHARO_TOOLS_JSON"),
|
|
224
|
+
pharoScope: {
|
|
225
|
+
projectId: env.PLEXUS_PROJECT_ID,
|
|
226
|
+
workspaceId: env.PLEXUS_WORKSPACE_ID ?? env.VIBE_KANBAN_WORKSPACE_ID,
|
|
227
|
+
targetId: env.PLEXUS_TARGET_ID,
|
|
228
|
+
},
|
|
229
|
+
};
|
|
230
|
+
}
|
|
231
|
+
export function createGatewayFromEnvironment(env = process.env) {
|
|
232
|
+
const options = parseGatewayEnvironmentOptions(env);
|
|
233
|
+
return {
|
|
234
|
+
gateway: new PlexusGateway({
|
|
235
|
+
pharoTools: options.pharoTools,
|
|
236
|
+
pharoScope: options.pharoScope,
|
|
237
|
+
}),
|
|
238
|
+
serverOptions: {
|
|
239
|
+
surface: options.surface,
|
|
240
|
+
exposeRawRoutingTool: options.exposeRawRoutingTool,
|
|
241
|
+
},
|
|
242
|
+
};
|
|
243
|
+
}
|
|
244
|
+
export async function startGatewayServer() {
|
|
245
|
+
const environment = createGatewayFromEnvironment();
|
|
246
|
+
const server = createGatewayServerWithOptions(environment.gateway, environment.serverOptions);
|
|
247
|
+
const transport = new StdioServerTransport();
|
|
248
|
+
await server.connect(transport);
|
|
249
|
+
}
|
|
250
|
+
function parsePort(value, name) {
|
|
251
|
+
const port = Number(value);
|
|
252
|
+
if (!Number.isInteger(port) || port < 1 || port > 65_535) {
|
|
253
|
+
throw new Error(`${name} must be an integer between 1 and 65535`);
|
|
254
|
+
}
|
|
255
|
+
return port;
|
|
256
|
+
}
|
|
257
|
+
function writeJsonResponse(response, statusCode, value) {
|
|
258
|
+
response.writeHead(statusCode, {
|
|
259
|
+
"content-type": "application/json; charset=utf-8",
|
|
260
|
+
});
|
|
261
|
+
response.end(`${JSON.stringify(value)}\n`);
|
|
262
|
+
}
|
|
263
|
+
function listen(server, port, host) {
|
|
264
|
+
return new Promise((resolve, reject) => {
|
|
265
|
+
const onError = (error) => {
|
|
266
|
+
server.off("listening", onListening);
|
|
267
|
+
reject(error);
|
|
268
|
+
};
|
|
269
|
+
const onListening = () => {
|
|
270
|
+
server.off("error", onError);
|
|
271
|
+
resolve();
|
|
272
|
+
};
|
|
273
|
+
server.once("error", onError);
|
|
274
|
+
server.once("listening", onListening);
|
|
275
|
+
server.listen(port, host);
|
|
276
|
+
});
|
|
277
|
+
}
|
|
278
|
+
export async function startGatewayHttpServer(options) {
|
|
279
|
+
const host = options.host ?? "127.0.0.1";
|
|
280
|
+
const healthPath = options.healthPath ?? "/health";
|
|
281
|
+
const mcpPath = options.mcpPath ?? "/mcp";
|
|
282
|
+
const environment = createGatewayFromEnvironment();
|
|
283
|
+
const activeTransports = new Set();
|
|
284
|
+
async function handleMcpRequest(request, response) {
|
|
285
|
+
const gatewayServer = createGatewayServerWithOptions(environment.gateway, environment.serverOptions);
|
|
286
|
+
const transport = new StreamableHTTPServerTransport({
|
|
287
|
+
sessionIdGenerator: undefined,
|
|
288
|
+
enableJsonResponse: true,
|
|
289
|
+
});
|
|
290
|
+
activeTransports.add(transport);
|
|
291
|
+
response.once("close", () => {
|
|
292
|
+
activeTransports.delete(transport);
|
|
293
|
+
void transport.close();
|
|
294
|
+
});
|
|
295
|
+
await gatewayServer.connect(transport);
|
|
296
|
+
await transport.handleRequest(request, response);
|
|
297
|
+
}
|
|
298
|
+
const server = http.createServer((request, response) => {
|
|
299
|
+
void (async () => {
|
|
300
|
+
const url = new URL(request.url ?? "/", `http://${request.headers.host ?? `${host}:${options.port}`}`);
|
|
301
|
+
if (url.pathname === "/" || url.pathname === healthPath) {
|
|
302
|
+
if (request.method !== "GET" && request.method !== "HEAD") {
|
|
303
|
+
writeJsonResponse(response, 405, {
|
|
304
|
+
ok: false,
|
|
305
|
+
error: "Method not allowed",
|
|
306
|
+
});
|
|
307
|
+
return;
|
|
308
|
+
}
|
|
309
|
+
writeJsonResponse(response, 200, {
|
|
310
|
+
ok: true,
|
|
311
|
+
service: "plexus-gateway",
|
|
312
|
+
mcpPath,
|
|
313
|
+
});
|
|
314
|
+
return;
|
|
315
|
+
}
|
|
316
|
+
if (url.pathname === mcpPath) {
|
|
317
|
+
await handleMcpRequest(request, response);
|
|
318
|
+
return;
|
|
319
|
+
}
|
|
320
|
+
writeJsonResponse(response, 404, {
|
|
321
|
+
ok: false,
|
|
322
|
+
error: "Not found",
|
|
323
|
+
});
|
|
324
|
+
})().catch((error) => {
|
|
325
|
+
if (!response.headersSent) {
|
|
326
|
+
writeJsonResponse(response, 500, {
|
|
327
|
+
ok: false,
|
|
328
|
+
error: error instanceof Error ? error.message : String(error),
|
|
329
|
+
});
|
|
330
|
+
return;
|
|
331
|
+
}
|
|
332
|
+
response.destroy(error instanceof Error ? error : undefined);
|
|
333
|
+
});
|
|
334
|
+
});
|
|
335
|
+
server.on("close", () => {
|
|
336
|
+
for (const transport of activeTransports) {
|
|
337
|
+
void transport.close();
|
|
338
|
+
}
|
|
339
|
+
activeTransports.clear();
|
|
340
|
+
});
|
|
341
|
+
await listen(server, options.port, host);
|
|
342
|
+
return server;
|
|
343
|
+
}
|
|
344
|
+
export function parseGatewayServerCliOptions(args = process.argv.slice(2), env = process.env) {
|
|
345
|
+
let transport = "stdio";
|
|
346
|
+
let host = env.PLEXUS_HOST ?? "127.0.0.1";
|
|
347
|
+
let portValue = env.PLEXUS_MCP_PORT ?? env.PORT ?? "7331";
|
|
348
|
+
for (let index = 0; index < args.length; index += 1) {
|
|
349
|
+
const arg = args[index];
|
|
350
|
+
if (arg === "serve" || arg === "http" || arg === "--http") {
|
|
351
|
+
transport = "http";
|
|
352
|
+
continue;
|
|
353
|
+
}
|
|
354
|
+
if (arg === "--stdio") {
|
|
355
|
+
transport = "stdio";
|
|
356
|
+
continue;
|
|
357
|
+
}
|
|
358
|
+
if (arg === "--host") {
|
|
359
|
+
const next = args[index + 1];
|
|
360
|
+
if (!next) {
|
|
361
|
+
throw new Error("--host requires a value");
|
|
362
|
+
}
|
|
363
|
+
host = next;
|
|
364
|
+
index += 1;
|
|
365
|
+
continue;
|
|
366
|
+
}
|
|
367
|
+
if (arg === "--port") {
|
|
368
|
+
const next = args[index + 1];
|
|
369
|
+
if (!next) {
|
|
370
|
+
throw new Error("--port requires a value");
|
|
371
|
+
}
|
|
372
|
+
portValue = next;
|
|
373
|
+
index += 1;
|
|
374
|
+
continue;
|
|
375
|
+
}
|
|
376
|
+
throw new Error(`Unknown plexus-gateway argument: ${arg}`);
|
|
377
|
+
}
|
|
378
|
+
return {
|
|
379
|
+
transport,
|
|
380
|
+
host,
|
|
381
|
+
port: parsePort(portValue, "PLexus gateway port"),
|
|
382
|
+
};
|
|
383
|
+
}
|
|
384
|
+
export async function startGatewayServerFromCli(options = parseGatewayServerCliOptions()) {
|
|
385
|
+
if (options.transport === "stdio") {
|
|
386
|
+
await startGatewayServer();
|
|
387
|
+
return;
|
|
388
|
+
}
|
|
389
|
+
await startGatewayHttpServer({
|
|
390
|
+
host: options.host,
|
|
391
|
+
port: options.port,
|
|
392
|
+
});
|
|
393
|
+
}
|
|
394
|
+
//# sourceMappingURL=server.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,MAAM,EAAE,MAAM,2CAA2C,CAAC;AACnE,OAAO,EAAE,oBAAoB,EAAE,MAAM,2CAA2C,CAAC;AACjF,OAAO,EAAE,6BAA6B,EAAE,MAAM,oDAAoD,CAAC;AACnG,OAAO,EACL,qBAAqB,EACrB,sBAAsB,GAGvB,MAAM,oCAAoC,CAAC;AAC5C,OAAO,EAAE,aAAa,EAAmC,MAAM,cAAc,CAAC;AAE9E,MAAM,YAAY,GAAG,EAAE,IAAI,EAAE,QAAQ,EAAE,SAAS,EAAE,CAAC,EAAW,CAAC;AAC/D,MAAM,oBAAoB,GAAG,EAAE,IAAI,EAAE,QAAQ,EAAE,SAAS,EAAE,CAAC,EAAW,CAAC;AAEvE,SAAS,YAAY,CACnB,UAAmC,EACnC,WAAqB,EAAE;IAEvB,OAAO;QACL,IAAI,EAAE,QAAQ;QACd,UAAU;QACV,QAAQ;QACR,oBAAoB,EAAE,KAAK;KACnB,CAAC;AACb,CAAC;AAED,MAAM,wBAAwB,GAAG;IAC/B,SAAS,EAAE,oBAAoB;IAC/B,WAAW,EAAE,oBAAoB;IACjC,QAAQ,EAAE,oBAAoB;CACtB,CAAC;AAEX,MAAM,kBAAkB,GAAG;IACzB,IAAI,EAAE,QAAQ;IACd,oBAAoB,EAAE,IAAI;CAClB,CAAC;AAEX,MAAM,CAAC,MAAM,YAAY,GAAG;IAC1B;QACE,IAAI,EAAE,gCAAgC;QACtC,WAAW,EACT,wEAAwE;QAC1E,WAAW,EAAE,YAAY,CACvB;YACE,WAAW,EAAE,YAAY;YACzB,SAAS,EAAE,YAAY;YACvB,KAAK,EAAE,kBAAkB;SAC1B,EACD,CAAC,aAAa,EAAE,WAAW,EAAE,OAAO,CAAC,CACtC;KACF;IACD;QACE,IAAI,EAAE,kCAAkC;QACxC,WAAW,EACT,qFAAqF;QACvF,WAAW,EAAE,YAAY,CAAC,wBAAwB,CAAC;KACpD;IACD;QACE,IAAI,EAAE,uBAAuB;QAC7B,WAAW,EACT,4DAA4D;QAC9D,WAAW,EAAE,YAAY,CAAC;YACxB,GAAG,wBAAwB;YAC3B,aAAa,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE;SACnC,CAAC;KACH;IACD;QACE,IAAI,EAAE,qCAAqC;QAC3C,WAAW,EACT,6EAA6E;QAC/E,WAAW,EAAE,YAAY,CAAC,EAAE,CAAC;KAC9B;CACO,CAAC;AAEX,MAAM,CAAC,MAAM,cAAc,GAAG;IAC5B,IAAI,EAAE,uBAAuB;IAC7B,WAAW,EACT,gFAAgF;IAClF,WAAW,EAAE,YAAY,CACvB;QACE,GAAG,wBAAwB;QAC3B,OAAO,EAAE,YAAY;QACrB,QAAQ,EAAE,YAAY;QACtB,SAAS,EAAE;YACT,IAAI,EAAE,QAAQ;YACd,oBAAoB,EAAE,IAAI;SAC3B;KACF,EACD,CAAC,SAAS,EAAE,UAAU,CAAC,CACxB;CACO,CAAC;AAEX,MAAM,oBAAoB,GAAG,OAAO,CAAC;AAoBrC,SAAS,mBAAmB,CAAC,OAAuB;IAClD,OAAO,OAAO,KAAK,SAAS,IAAI,OAAO,KAAK,oBAAoB,CAAC;AACnE,CAAC;AAED,SAAS,iBAAiB,CAAC,OAAuB;IAChD,OAAO,mBAAmB,CAAC,OAAO,CAAC,IAAI,OAAO,KAAK,UAAU,CAAC;AAChE,CAAC;AAED,SAAS,iBAAiB,CAAC,OAAuB;IAChD,OAAO,OAAO,KAAK,OAAO,IAAI,OAAO,KAAK,UAAU,CAAC;AACvD,CAAC;AAED,SAAS,iBAAiB,CAAC,oBAA6B;IACtD,OAAO;QACL,GAAG,YAAY;QACf,GAAG,CAAC,oBAAoB,CAAC,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;KACxC,CAAC;AACd,CAAC;AAED,SAAS,sBAAsB,CAAC,oBAA6B;IAC3D,OAAO,CAAC,oBAAoB,CAAC,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,EAAE,CAAW,CAAC;AAClE,CAAC;AAED,SAAS,YAAY,CACnB,OAAsB,EACtB,OAAuB,EACvB,oBAA6B;IAE7B,OAAO;QACL,GAAG,CAAC,iBAAiB,CAAC,OAAO,CAAC;YAC5B,CAAC,CAAC,iBAAiB,CAAC,oBAAoB,CAAC;YACzC,CAAC,CAAC,EAAE,CAAC;QACP,GAAG,CAAC,CAAC,iBAAiB,CAAC,OAAO,CAAC,IAAI,oBAAoB;YACrD,CAAC,CAAC,sBAAsB,CAAC,oBAAoB,CAAC;YAC9C,CAAC,CAAC,EAAE,CAAC;QACP,GAAG,CAAC,iBAAiB,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,cAAc,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KAChE,CAAC;AACJ,CAAC;AAED,SAAS,eAAe,CAAC,KAAyB,EAAE,IAAY;IAC9D,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACrD,OAAO,KAAK,CAAC;IACf,CAAC;IAED,MAAM,UAAU,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IAC9C,IAAI,UAAU,KAAK,MAAM,IAAI,UAAU,KAAK,GAAG,IAAI,UAAU,KAAK,KAAK,EAAE,CAAC;QACxE,OAAO,IAAI,CAAC;IACd,CAAC;IAED,IAAI,UAAU,KAAK,OAAO,IAAI,UAAU,KAAK,GAAG,IAAI,UAAU,KAAK,IAAI,EAAE,CAAC;QACxE,OAAO,KAAK,CAAC;IACf,CAAC;IAED,MAAM,IAAI,KAAK,CAAC,GAAG,IAAI,wBAAwB,CAAC,CAAC;AACnD,CAAC;AAED,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,GAAG,YAAY,EAAE,cAAc,CAAU,CAAC;AAE7E;;;GAGG;AACH,SAAS,mBAAmB,CAAC,KAAyB;IACpD,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACrD,OAAO,UAAU,CAAC;IACpB,CAAC;IAED,IACE,KAAK,KAAK,UAAU;QACpB,KAAK,KAAK,OAAO;QACjB,KAAK,KAAK,SAAS;QACnB,KAAK,KAAK,oBAAoB,EAC9B,CAAC;QACD,OAAO,KAAK,CAAC;IACf,CAAC;IAED,MAAM,IAAI,KAAK,CAAC,uCAAuC,KAAK,EAAE,CAAC,CAAC;AAClE,CAAC;AAiBD,SAAS,UAAU,CAAC,KAAc,EAAE,OAAO,GAAG,KAAK;IACjD,OAAO;QACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC;QACjE,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KAChC,CAAC;AACJ,CAAC;AAED,SAAS,gBAAgB,CAAC,KAAc;IACtC,OAAO,CACL,OAAO,CAAC,KAAK,CAAC;QACd,OAAO,KAAK,KAAK,QAAQ;QACzB,KAAK,CAAC,OAAO,CAAE,KAA+B,CAAC,OAAO,CAAC,CACxD,CAAC;AACJ,CAAC;AAED,SAAS,YAAY,CACnB,KAAiB,EACjB,IAAyC;IAEzC,IAAI,CAAC,IAAI,EAAE,CAAC;QACV,OAAO,KAAK,CAAC;IACf,CAAC;IAED,OAAO;QACL,GAAG,KAAK;QACR,KAAK,EAAE;YACL,GAAG,CAAC,KAAK,CAAC,KAAK,IAAI,EAAE,CAAC;YACtB,GAAG,IAAI;SACR;KACF,CAAC;AACJ,CAAC;AAED,SAAS,gBAAgB,CACvB,KAAc,EACd,IAA8B;IAE9B,IAAI,gBAAgB,CAAC,KAAK,CAAC,EAAE,CAAC;QAC5B,OAAO,YAAY,CAAC,KAAmB,EAAE,IAAI,CAAC,CAAC;IACjD,CAAC;IAED,OAAO,YAAY,CAAC,UAAU,CAAC,KAAK,CAAC,EAAE,IAAI,CAAC,CAAC;AAC/C,CAAC;AAED,MAAM,UAAU,mBAAmB,CAAC,OAAO,GAAG,IAAI,aAAa,EAAE;IAC/D,OAAO,8BAA8B,CAAC,OAAO,CAAC,CAAC;AACjD,CAAC;AAED,MAAM,UAAU,8BAA8B,CAC5C,OAAO,GAAG,IAAI,aAAa,EAAE,EAC7B,UAAgC,EAAE;IAElC,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,IAAI,UAAU,CAAC;IAC9C,MAAM,oBAAoB,GAAG,OAAO,CAAC,oBAAoB,IAAI,KAAK,CAAC;IACnE,MAAM,MAAM,GAAG,IAAI,MAAM,CACvB;QACE,IAAI,EAAE,gBAAgB;QACtB,OAAO,EAAE,OAAO;KACjB,EACD;QACE,YAAY,EAAE;YACZ,KAAK,EAAE,EAAE;SACV;KACF,CACF,CAAC;IAEF,MAAM,CAAC,iBAAiB,CAAC,sBAAsB,EAAE,KAAK,IAAI,EAAE,CAAC,CAAC;QAC5D,KAAK,EAAE,YAAY,CAAC,OAAO,EAAE,OAAO,EAAE,oBAAoB,CAAC;KAC5D,CAAC,CAAC,CAAC;IAEJ,MAAM,CAAC,iBAAiB,CAAC,qBAAqB,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE;QAChE,IAAI,OAAO,CAAC,WAAW,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,iBAAiB,CAAC,OAAO,CAAC,EAAE,CAAC;YAC3E,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,aAAa,CACxC,OAAO,CAAC,MAAM,CAAC,IAAI,EACnB,OAAO,CAAC,MAAM,CAAC,SAAS,IAAI,EAAE,CAC/B,CAAC;YAEF,IAAI,CAAC,MAAM,CAAC,EAAE,EAAE,CAAC;gBACf,OAAO,UAAU,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;YAClC,CAAC;YAED,OAAO,gBAAgB,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QACvC,CAAC;QAED,IAAI,OAAO,CAAC,MAAM,CAAC,IAAI,KAAK,uBAAuB,EAAE,CAAC;YACpD,IAAI,CAAC,oBAAoB,EAAE,CAAC;gBAC1B,OAAO,UAAU,CACf;oBACE,EAAE,EAAE,KAAK;oBACT,KAAK,EACH,yGAAyG;iBAC5G,EACD,IAAI,CACL,CAAC;YACJ,CAAC;YAED,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,UAAU,CACrC,OAAO,CAAC,MAAM,CAAC,IAAI,EACnB,OAAO,CAAC,MAAM,CAAC,SAAS,IAAI,EAAE,CAC/B,CAAC;YAEF,IAAI,CAAC,MAAM,CAAC,EAAE,EAAE,CAAC;gBACf,OAAO,UAAU,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;YAClC,CAAC;YAED,OAAO,gBAAgB,CACrB,MAAM,CAAC,IAAI,EACX,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,SAAS,CACzD,CAAC;QACJ,CAAC;QAED,IAAI,mBAAmB,CAAC,OAAO,CAAC,EAAE,CAAC;YACjC,OAAO,UAAU,CACf;gBACE,EAAE,EAAE,KAAK;gBACT,KAAK,EAAE,uBAAuB,OAAO,CAAC,MAAM,CAAC,IAAI,EAAE;aACpD,EACD,IAAI,CACL,CAAC;QACJ,CAAC;QAED,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,UAAU,CACrC,OAAO,CAAC,MAAM,CAAC,IAAI,EACnB,OAAO,CAAC,MAAM,CAAC,SAAS,IAAI,EAAE,CAC/B,CAAC;QAEF,IAAI,CAAC,MAAM,CAAC,EAAE,EAAE,CAAC;YACf,OAAO,UAAU,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;QAClC,CAAC;QAED,OAAO,UAAU,CAAC,MAAM,CAAC,CAAC;IAC5B,CAAC,CAAC,CAAC;IAEH,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,SAAS,iBAAiB,CAAC,KAAyB,EAAE,IAAY;IAChE,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACrD,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAY,CAAC;IAC5C,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;QAC3B,MAAM,IAAI,KAAK,CAAC,GAAG,IAAI,uBAAuB,CAAC,CAAC;IAClD,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,MAAM,UAAU,8BAA8B,CAC5C,MAAyB,OAAO,CAAC,GAAG;IAEpC,OAAO;QACL,OAAO,EAAE,mBAAmB,CAAC,GAAG,CAAC,sBAAsB,CAAC;QACxD,oBAAoB,EAAE,eAAe,CACnC,GAAG,CAAC,8BAA8B,EAClC,gCAAgC,CACjC;QACD,UAAU,EAAE,iBAAiB,CAC3B,GAAG,CAAC,uBAAuB,EAC3B,yBAAyB,CAChB;QACX,UAAU,EAAE;YACV,SAAS,EAAE,GAAG,CAAC,iBAAiB;YAChC,WAAW,EAAE,GAAG,CAAC,mBAAmB,IAAI,GAAG,CAAC,wBAAwB;YACpE,QAAQ,EAAE,GAAG,CAAC,gBAAgB;SAC/B;KACF,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,4BAA4B,CAC1C,MAAyB,OAAO,CAAC,GAAG;IAEpC,MAAM,OAAO,GAAG,8BAA8B,CAAC,GAAG,CAAC,CAAC;IACpD,OAAO;QACL,OAAO,EAAE,IAAI,aAAa,CAAC;YACzB,UAAU,EAAE,OAAO,CAAC,UAAU;YAC9B,UAAU,EAAE,OAAO,CAAC,UAAU;SAC/B,CAAC;QACF,aAAa,EAAE;YACb,OAAO,EAAE,OAAO,CAAC,OAAO;YACxB,oBAAoB,EAAE,OAAO,CAAC,oBAAoB;SACnD;KACF,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,kBAAkB;IACtC,MAAM,WAAW,GAAG,4BAA4B,EAAE,CAAC;IACnD,MAAM,MAAM,GAAG,8BAA8B,CAC3C,WAAW,CAAC,OAAO,EACnB,WAAW,CAAC,aAAa,CAC1B,CAAC;IACF,MAAM,SAAS,GAAG,IAAI,oBAAoB,EAAE,CAAC;IAC7C,MAAM,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;AAClC,CAAC;AAED,SAAS,SAAS,CAAC,KAAyB,EAAE,IAAY;IACxD,MAAM,IAAI,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;IAC3B,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,IAAI,GAAG,CAAC,IAAI,IAAI,GAAG,MAAM,EAAE,CAAC;QACzD,MAAM,IAAI,KAAK,CAAC,GAAG,IAAI,yCAAyC,CAAC,CAAC;IACpE,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC;AAED,SAAS,iBAAiB,CACxB,QAA6B,EAC7B,UAAkB,EAClB,KAAc;IAEd,QAAQ,CAAC,SAAS,CAAC,UAAU,EAAE;QAC7B,cAAc,EAAE,iCAAiC;KAClD,CAAC,CAAC;IACH,QAAQ,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;AAC7C,CAAC;AAED,SAAS,MAAM,CACb,MAAmB,EACnB,IAAY,EACZ,IAAY;IAEZ,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QACrC,MAAM,OAAO,GAAG,CAAC,KAAY,EAAQ,EAAE;YACrC,MAAM,CAAC,GAAG,CAAC,WAAW,EAAE,WAAW,CAAC,CAAC;YACrC,MAAM,CAAC,KAAK,CAAC,CAAC;QAChB,CAAC,CAAC;QACF,MAAM,WAAW,GAAG,GAAS,EAAE;YAC7B,MAAM,CAAC,GAAG,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;YAC7B,OAAO,EAAE,CAAC;QACZ,CAAC,CAAC;QAEF,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;QAC9B,MAAM,CAAC,IAAI,CAAC,WAAW,EAAE,WAAW,CAAC,CAAC;QACtC,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;IAC5B,CAAC,CAAC,CAAC;AACL,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,sBAAsB,CAC1C,OAAiC;IAEjC,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,IAAI,WAAW,CAAC;IACzC,MAAM,UAAU,GAAG,OAAO,CAAC,UAAU,IAAI,SAAS,CAAC;IACnD,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,IAAI,MAAM,CAAC;IAC1C,MAAM,WAAW,GAAG,4BAA4B,EAAE,CAAC;IACnD,MAAM,gBAAgB,GAAG,IAAI,GAAG,EAAiC,CAAC;IAElE,KAAK,UAAU,gBAAgB,CAC7B,OAA6B,EAC7B,QAA6B;QAE7B,MAAM,aAAa,GAAG,8BAA8B,CAClD,WAAW,CAAC,OAAO,EACnB,WAAW,CAAC,aAAa,CAC1B,CAAC;QACF,MAAM,SAAS,GAAG,IAAI,6BAA6B,CAAC;YAClD,kBAAkB,EAAE,SAAS;YAC7B,kBAAkB,EAAE,IAAI;SACzB,CAAC,CAAC;QAEH,gBAAgB,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;QAChC,QAAQ,CAAC,IAAI,CAAC,OAAO,EAAE,GAAG,EAAE;YAC1B,gBAAgB,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;YACnC,KAAK,SAAS,CAAC,KAAK,EAAE,CAAC;QACzB,CAAC,CAAC,CAAC;QAEH,MAAM,aAAa,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;QACvC,MAAM,SAAS,CAAC,aAAa,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;IACnD,CAAC;IAED,MAAM,MAAM,GAAG,IAAI,CAAC,YAAY,CAAC,CAAC,OAAO,EAAE,QAAQ,EAAE,EAAE;QACrD,KAAK,CAAC,KAAK,IAAI,EAAE;YACf,MAAM,GAAG,GAAG,IAAI,GAAG,CACjB,OAAO,CAAC,GAAG,IAAI,GAAG,EAClB,UAAU,OAAO,CAAC,OAAO,CAAC,IAAI,IAAI,GAAG,IAAI,IAAI,OAAO,CAAC,IAAI,EAAE,EAAE,CAC9D,CAAC;YAEF,IAAI,GAAG,CAAC,QAAQ,KAAK,GAAG,IAAI,GAAG,CAAC,QAAQ,KAAK,UAAU,EAAE,CAAC;gBACxD,IAAI,OAAO,CAAC,MAAM,KAAK,KAAK,IAAI,OAAO,CAAC,MAAM,KAAK,MAAM,EAAE,CAAC;oBAC1D,iBAAiB,CAAC,QAAQ,EAAE,GAAG,EAAE;wBAC/B,EAAE,EAAE,KAAK;wBACT,KAAK,EAAE,oBAAoB;qBAC5B,CAAC,CAAC;oBACH,OAAO;gBACT,CAAC;gBAED,iBAAiB,CAAC,QAAQ,EAAE,GAAG,EAAE;oBAC/B,EAAE,EAAE,IAAI;oBACR,OAAO,EAAE,gBAAgB;oBACzB,OAAO;iBACR,CAAC,CAAC;gBACH,OAAO;YACT,CAAC;YAED,IAAI,GAAG,CAAC,QAAQ,KAAK,OAAO,EAAE,CAAC;gBAC7B,MAAM,gBAAgB,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;gBAC1C,OAAO;YACT,CAAC;YAED,iBAAiB,CAAC,QAAQ,EAAE,GAAG,EAAE;gBAC/B,EAAE,EAAE,KAAK;gBACT,KAAK,EAAE,WAAW;aACnB,CAAC,CAAC;QACL,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,KAAc,EAAE,EAAE;YAC5B,IAAI,CAAC,QAAQ,CAAC,WAAW,EAAE,CAAC;gBAC1B,iBAAiB,CAAC,QAAQ,EAAE,GAAG,EAAE;oBAC/B,EAAE,EAAE,KAAK;oBACT,KAAK,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC;iBAC9D,CAAC,CAAC;gBACH,OAAO;YACT,CAAC;YAED,QAAQ,CAAC,OAAO,CAAC,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;QAC/D,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,EAAE;QACtB,KAAK,MAAM,SAAS,IAAI,gBAAgB,EAAE,CAAC;YACzC,KAAK,SAAS,CAAC,KAAK,EAAE,CAAC;QACzB,CAAC;QACD,gBAAgB,CAAC,KAAK,EAAE,CAAC;IAC3B,CAAC,CAAC,CAAC;IAEH,MAAM,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;IACzC,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,MAAM,UAAU,4BAA4B,CAC1C,OAAiB,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EACtC,MAAyB,OAAO,CAAC,GAAG;IAEpC,IAAI,SAAS,GAAmC,OAAO,CAAC;IACxD,IAAI,IAAI,GAAG,GAAG,CAAC,WAAW,IAAI,WAAW,CAAC;IAC1C,IAAI,SAAS,GAAG,GAAG,CAAC,eAAe,IAAI,GAAG,CAAC,IAAI,IAAI,MAAM,CAAC;IAE1D,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,IAAI,CAAC,MAAM,EAAE,KAAK,IAAI,CAAC,EAAE,CAAC;QACpD,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC;QAExB,IAAI,GAAG,KAAK,OAAO,IAAI,GAAG,KAAK,MAAM,IAAI,GAAG,KAAK,QAAQ,EAAE,CAAC;YAC1D,SAAS,GAAG,MAAM,CAAC;YACnB,SAAS;QACX,CAAC;QAED,IAAI,GAAG,KAAK,SAAS,EAAE,CAAC;YACtB,SAAS,GAAG,OAAO,CAAC;YACpB,SAAS;QACX,CAAC;QAED,IAAI,GAAG,KAAK,QAAQ,EAAE,CAAC;YACrB,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC;YAC7B,IAAI,CAAC,IAAI,EAAE,CAAC;gBACV,MAAM,IAAI,KAAK,CAAC,yBAAyB,CAAC,CAAC;YAC7C,CAAC;YAED,IAAI,GAAG,IAAI,CAAC;YACZ,KAAK,IAAI,CAAC,CAAC;YACX,SAAS;QACX,CAAC;QAED,IAAI,GAAG,KAAK,QAAQ,EAAE,CAAC;YACrB,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC;YAC7B,IAAI,CAAC,IAAI,EAAE,CAAC;gBACV,MAAM,IAAI,KAAK,CAAC,yBAAyB,CAAC,CAAC;YAC7C,CAAC;YAED,SAAS,GAAG,IAAI,CAAC;YACjB,KAAK,IAAI,CAAC,CAAC;YACX,SAAS;QACX,CAAC;QAED,MAAM,IAAI,KAAK,CAAC,oCAAoC,GAAG,EAAE,CAAC,CAAC;IAC7D,CAAC;IAED,OAAO;QACL,SAAS;QACT,IAAI;QACJ,IAAI,EAAE,SAAS,CAAC,SAAS,EAAE,qBAAqB,CAAC;KAClD,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,yBAAyB,CAC7C,OAAO,GAAG,4BAA4B,EAAE;IAExC,IAAI,OAAO,CAAC,SAAS,KAAK,OAAO,EAAE,CAAC;QAClC,MAAM,kBAAkB,EAAE,CAAC;QAC3B,OAAO;IACT,CAAC;IAED,MAAM,sBAAsB,CAAC;QAC3B,IAAI,EAAE,OAAO,CAAC,IAAI;QAClB,IAAI,EAAE,OAAO,CAAC,IAAI;KACnB,CAAC,CAAC;AACL,CAAC"}
|
package/package.json
ADDED
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@evref-bl/plexus-gateway",
|
|
3
|
+
"version": "0.1.0-alpha.0",
|
|
4
|
+
"private": false,
|
|
5
|
+
"description": "PLexus image-scoped Pharo MCP gateway.",
|
|
6
|
+
"license": "Apache-2.0",
|
|
7
|
+
"type": "module",
|
|
8
|
+
"main": "./dist/index.js",
|
|
9
|
+
"exports": {
|
|
10
|
+
".": "./dist/index.js"
|
|
11
|
+
},
|
|
12
|
+
"types": "./dist/index.d.ts",
|
|
13
|
+
"bin": {
|
|
14
|
+
"plexus-gateway": "dist/index.js"
|
|
15
|
+
},
|
|
16
|
+
"files": [
|
|
17
|
+
"dist",
|
|
18
|
+
"package.json"
|
|
19
|
+
],
|
|
20
|
+
"publishConfig": {
|
|
21
|
+
"access": "public"
|
|
22
|
+
},
|
|
23
|
+
"engines": {
|
|
24
|
+
"node": ">=24"
|
|
25
|
+
},
|
|
26
|
+
"scripts": {
|
|
27
|
+
"build": "tsc -p tsconfig.json",
|
|
28
|
+
"typecheck": "tsc -p tsconfig.json --noEmit",
|
|
29
|
+
"test": "vitest run",
|
|
30
|
+
"clean": "node -e \"require('node:fs').rmSync('dist', { recursive: true, force: true })\""
|
|
31
|
+
},
|
|
32
|
+
"dependencies": {
|
|
33
|
+
"@modelcontextprotocol/sdk": "^1.29.0"
|
|
34
|
+
},
|
|
35
|
+
"devDependencies": {}
|
|
36
|
+
}
|