@slashfi/agents-sdk 0.18.0 → 0.20.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/cli.d.ts +24 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +234 -0
- package/dist/cli.js.map +1 -0
- package/dist/codegen.d.ts +137 -0
- package/dist/codegen.d.ts.map +1 -0
- package/dist/codegen.js +1015 -0
- package/dist/codegen.js.map +1 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -12
- package/dist/index.js.map +1 -1
- package/dist/types.d.ts +1 -1
- package/dist/types.d.ts.map +1 -1
- package/package.json +1 -1
- package/src/codegen.ts +11 -11
- package/src/index.ts +11 -12
- package/src/types.ts +1 -1
package/dist/cli.d.ts
ADDED
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
#!/usr/bin/env bun
|
|
2
|
+
/**
|
|
3
|
+
* agents-sdk CLI
|
|
4
|
+
*
|
|
5
|
+
* Unified command-line interface for the agents SDK.
|
|
6
|
+
*
|
|
7
|
+
* Commands:
|
|
8
|
+
* codegen - Generate agent definitions from an MCP server
|
|
9
|
+
* use - Execute a tool on a codegenned agent
|
|
10
|
+
*
|
|
11
|
+
* @example
|
|
12
|
+
* ```bash
|
|
13
|
+
* # Generate from MCP server
|
|
14
|
+
* agents-sdk codegen --server 'npx @mcp/notion' --name notion --out ./agents/@notion
|
|
15
|
+
*
|
|
16
|
+
* # Use a tool
|
|
17
|
+
* agents-sdk use notion search_pages '{"query": "hello"}'
|
|
18
|
+
*
|
|
19
|
+
* # List tools on a codegenned agent
|
|
20
|
+
* agents-sdk use notion --list
|
|
21
|
+
* ```
|
|
22
|
+
*/
|
|
23
|
+
export {};
|
|
24
|
+
//# sourceMappingURL=cli.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AACA;;;;;;;;;;;;;;;;;;;;GAoBG"}
|
package/dist/cli.js
ADDED
|
@@ -0,0 +1,234 @@
|
|
|
1
|
+
#!/usr/bin/env bun
|
|
2
|
+
/**
|
|
3
|
+
* agents-sdk CLI
|
|
4
|
+
*
|
|
5
|
+
* Unified command-line interface for the agents SDK.
|
|
6
|
+
*
|
|
7
|
+
* Commands:
|
|
8
|
+
* codegen - Generate agent definitions from an MCP server
|
|
9
|
+
* use - Execute a tool on a codegenned agent
|
|
10
|
+
*
|
|
11
|
+
* @example
|
|
12
|
+
* ```bash
|
|
13
|
+
* # Generate from MCP server
|
|
14
|
+
* agents-sdk codegen --server 'npx @mcp/notion' --name notion --out ./agents/@notion
|
|
15
|
+
*
|
|
16
|
+
* # Use a tool
|
|
17
|
+
* agents-sdk use notion search_pages '{"query": "hello"}'
|
|
18
|
+
*
|
|
19
|
+
* # List tools on a codegenned agent
|
|
20
|
+
* agents-sdk use notion --list
|
|
21
|
+
* ```
|
|
22
|
+
*/
|
|
23
|
+
import { resolve, join } from "node:path";
|
|
24
|
+
import { existsSync, readdirSync } from "node:fs";
|
|
25
|
+
import { codegen, useAgent, listAgentTools } from "./codegen.js";
|
|
26
|
+
const args = process.argv.slice(2);
|
|
27
|
+
const command = args[0];
|
|
28
|
+
// ============================================
|
|
29
|
+
// Helpers
|
|
30
|
+
// ============================================
|
|
31
|
+
function parseFlag(args, flag) {
|
|
32
|
+
const idx = args.indexOf(flag);
|
|
33
|
+
if (idx === -1 || idx + 1 >= args.length)
|
|
34
|
+
return undefined;
|
|
35
|
+
return args[idx + 1];
|
|
36
|
+
}
|
|
37
|
+
function hasFlag(args, flag) {
|
|
38
|
+
return args.includes(flag);
|
|
39
|
+
}
|
|
40
|
+
/** Default directory for codegenned agents */
|
|
41
|
+
function getAgentsDir() {
|
|
42
|
+
return resolve(process.env.AGENTS_SDK_DIR ?? "./agents");
|
|
43
|
+
}
|
|
44
|
+
/** Find an agent directory by name */
|
|
45
|
+
function findAgentDir(name) {
|
|
46
|
+
const agentsDir = getAgentsDir();
|
|
47
|
+
// Try exact path first
|
|
48
|
+
const exactPath = resolve(name);
|
|
49
|
+
if (existsSync(join(exactPath, ".codegen-manifest.json"))) {
|
|
50
|
+
return exactPath;
|
|
51
|
+
}
|
|
52
|
+
// Try under agents dir with @ prefix
|
|
53
|
+
const withAt = join(agentsDir, `@${name}`);
|
|
54
|
+
if (existsSync(join(withAt, ".codegen-manifest.json"))) {
|
|
55
|
+
return withAt;
|
|
56
|
+
}
|
|
57
|
+
// Try under agents dir without @ prefix
|
|
58
|
+
const withoutAt = join(agentsDir, name);
|
|
59
|
+
if (existsSync(join(withoutAt, ".codegen-manifest.json"))) {
|
|
60
|
+
return withoutAt;
|
|
61
|
+
}
|
|
62
|
+
return null;
|
|
63
|
+
}
|
|
64
|
+
function printUsage() {
|
|
65
|
+
console.log(`agents-sdk - SDK for building AI agents
|
|
66
|
+
|
|
67
|
+
Usage:
|
|
68
|
+
agents-sdk codegen [options] Generate agent from MCP server
|
|
69
|
+
agents-sdk use <agent> [options] Execute a tool on a generated agent
|
|
70
|
+
agents-sdk list List all generated agents
|
|
71
|
+
|
|
72
|
+
Codegen options:
|
|
73
|
+
--server <source> MCP server (command string or URL)
|
|
74
|
+
--name <name> Agent name (default: derived from server)
|
|
75
|
+
--out <dir> Output directory (default: ./agents/@<name>)
|
|
76
|
+
--path <path> Agent path override
|
|
77
|
+
--no-cli Skip CLI generation
|
|
78
|
+
--no-types Skip TypeScript interface generation
|
|
79
|
+
--visibility <level> Agent visibility (public|internal|private)
|
|
80
|
+
|
|
81
|
+
Use options:
|
|
82
|
+
agents-sdk use <agent> <tool> [params_json]
|
|
83
|
+
agents-sdk use <agent> --list List tools on the agent
|
|
84
|
+
|
|
85
|
+
Examples:
|
|
86
|
+
agents-sdk codegen --server 'npx @mcp/notion' --name notion
|
|
87
|
+
agents-sdk use notion search_pages '{"query": "hello"}'
|
|
88
|
+
agents-sdk use notion --list
|
|
89
|
+
`);
|
|
90
|
+
}
|
|
91
|
+
// ============================================
|
|
92
|
+
// Commands
|
|
93
|
+
// ============================================
|
|
94
|
+
async function runCodegen(args) {
|
|
95
|
+
const server = parseFlag(args, "--server");
|
|
96
|
+
const name = parseFlag(args, "--name");
|
|
97
|
+
const outDir = parseFlag(args, "--out");
|
|
98
|
+
const agentPath = parseFlag(args, "--path");
|
|
99
|
+
const visibility = parseFlag(args, "--visibility");
|
|
100
|
+
const noCli = hasFlag(args, "--no-cli");
|
|
101
|
+
const noTypes = hasFlag(args, "--no-types");
|
|
102
|
+
if (!server) {
|
|
103
|
+
console.error("Error: --server is required.\n" +
|
|
104
|
+
" Example: agents-sdk codegen --server 'npx @mcp/notion' --name notion");
|
|
105
|
+
process.exit(1);
|
|
106
|
+
}
|
|
107
|
+
const resolvedOutDir = outDir ??
|
|
108
|
+
join(getAgentsDir(), `@${(name ?? "mcp-agent").toLowerCase().replace(/[^a-z0-9-]/g, "-")}`);
|
|
109
|
+
console.log(`Connecting to MCP server: ${server}`);
|
|
110
|
+
console.log(`Output: ${resolvedOutDir}\n`);
|
|
111
|
+
try {
|
|
112
|
+
const result = await codegen({
|
|
113
|
+
server,
|
|
114
|
+
outDir: resolvedOutDir,
|
|
115
|
+
agentPath,
|
|
116
|
+
name,
|
|
117
|
+
cli: !noCli,
|
|
118
|
+
types: !noTypes,
|
|
119
|
+
visibility,
|
|
120
|
+
});
|
|
121
|
+
console.log(`\x1b[32m\u2713\x1b[0m Generated ${result.toolCount} tools from ${result.serverInfo.name ?? "MCP server"}`);
|
|
122
|
+
console.log(`\nFiles:`);
|
|
123
|
+
for (const f of result.files) {
|
|
124
|
+
console.log(` ${f}`);
|
|
125
|
+
}
|
|
126
|
+
console.log(`\nUse: agents-sdk use ${name ?? result.serverInfo.name ?? "<agent>"} --list`);
|
|
127
|
+
}
|
|
128
|
+
catch (err) {
|
|
129
|
+
console.error(`\x1b[31mError:\x1b[0m ${err instanceof Error ? err.message : String(err)}`);
|
|
130
|
+
process.exit(1);
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
async function runUse(args) {
|
|
134
|
+
const agentName = args[1];
|
|
135
|
+
if (!agentName) {
|
|
136
|
+
console.error("Error: agent name required.\n" +
|
|
137
|
+
" Example: agents-sdk use notion search_pages '{...}'");
|
|
138
|
+
process.exit(1);
|
|
139
|
+
}
|
|
140
|
+
const agentDir = findAgentDir(agentName);
|
|
141
|
+
if (!agentDir) {
|
|
142
|
+
console.error(`Error: No generated agent '${agentName}' found.\n` +
|
|
143
|
+
` Looked in: ${getAgentsDir()}\n` +
|
|
144
|
+
` Run: agents-sdk codegen --server '...' --name ${agentName}`);
|
|
145
|
+
process.exit(1);
|
|
146
|
+
}
|
|
147
|
+
// --list: show available tools
|
|
148
|
+
if (hasFlag(args, "--list")) {
|
|
149
|
+
const tools = listAgentTools(agentDir);
|
|
150
|
+
console.log(`Tools for ${agentName}:\n`);
|
|
151
|
+
for (const t of tools) {
|
|
152
|
+
console.log(` ${t.name.padEnd(30)} ${t.description ?? ""}`);
|
|
153
|
+
}
|
|
154
|
+
return;
|
|
155
|
+
}
|
|
156
|
+
const toolName = args[2];
|
|
157
|
+
if (!toolName) {
|
|
158
|
+
console.error(`Error: tool name required.\n` +
|
|
159
|
+
` Example: agents-sdk use ${agentName} <tool> [params]\n` +
|
|
160
|
+
` List tools: agents-sdk use ${agentName} --list`);
|
|
161
|
+
process.exit(1);
|
|
162
|
+
}
|
|
163
|
+
const paramsStr = args[3];
|
|
164
|
+
const params = paramsStr ? JSON.parse(paramsStr) : {};
|
|
165
|
+
try {
|
|
166
|
+
const result = await useAgent({
|
|
167
|
+
agentDir,
|
|
168
|
+
tool: toolName,
|
|
169
|
+
params,
|
|
170
|
+
});
|
|
171
|
+
console.log(JSON.stringify(result, null, 2));
|
|
172
|
+
}
|
|
173
|
+
catch (err) {
|
|
174
|
+
console.error(`\x1b[31mError:\x1b[0m ${err instanceof Error ? err.message : String(err)}`);
|
|
175
|
+
process.exit(1);
|
|
176
|
+
}
|
|
177
|
+
}
|
|
178
|
+
function runList() {
|
|
179
|
+
const agentsDir = getAgentsDir();
|
|
180
|
+
if (!existsSync(agentsDir)) {
|
|
181
|
+
console.log("No generated agents found.");
|
|
182
|
+
return;
|
|
183
|
+
}
|
|
184
|
+
const entries = readdirSync(agentsDir);
|
|
185
|
+
const agents = [];
|
|
186
|
+
for (const entry of entries) {
|
|
187
|
+
const manifestPath = join(agentsDir, entry, ".codegen-manifest.json");
|
|
188
|
+
if (existsSync(manifestPath)) {
|
|
189
|
+
try {
|
|
190
|
+
const manifest = JSON.parse(require("node:fs").readFileSync(manifestPath, "utf-8"));
|
|
191
|
+
agents.push({
|
|
192
|
+
name: manifest.agentPath,
|
|
193
|
+
tools: manifest.tools.length,
|
|
194
|
+
server: manifest.serverInfo.name,
|
|
195
|
+
});
|
|
196
|
+
}
|
|
197
|
+
catch {
|
|
198
|
+
agents.push({ name: entry, tools: 0 });
|
|
199
|
+
}
|
|
200
|
+
}
|
|
201
|
+
}
|
|
202
|
+
if (agents.length === 0) {
|
|
203
|
+
console.log("No generated agents found.");
|
|
204
|
+
return;
|
|
205
|
+
}
|
|
206
|
+
console.log("Generated agents:\n");
|
|
207
|
+
for (const a of agents) {
|
|
208
|
+
console.log(` ${a.name.padEnd(25)} ${String(a.tools).padEnd(5)} tools${a.server ? ` (${a.server})` : ""}`);
|
|
209
|
+
}
|
|
210
|
+
}
|
|
211
|
+
// ============================================
|
|
212
|
+
// Main
|
|
213
|
+
// ============================================
|
|
214
|
+
switch (command) {
|
|
215
|
+
case "codegen":
|
|
216
|
+
await runCodegen(args);
|
|
217
|
+
break;
|
|
218
|
+
case "use":
|
|
219
|
+
await runUse(args);
|
|
220
|
+
break;
|
|
221
|
+
case "list":
|
|
222
|
+
runList();
|
|
223
|
+
break;
|
|
224
|
+
case "--help":
|
|
225
|
+
case "-h":
|
|
226
|
+
case undefined:
|
|
227
|
+
printUsage();
|
|
228
|
+
break;
|
|
229
|
+
default:
|
|
230
|
+
console.error(`Unknown command: ${command}`);
|
|
231
|
+
printUsage();
|
|
232
|
+
process.exit(1);
|
|
233
|
+
}
|
|
234
|
+
//# sourceMappingURL=cli.js.map
|
package/dist/cli.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,137 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* MCP Codegen
|
|
3
|
+
*
|
|
4
|
+
* Connects to any MCP server, introspects its tools via `tools/list`,
|
|
5
|
+
* and generates readable agent-definition source files.
|
|
6
|
+
*
|
|
7
|
+
* Supports three transport modes:
|
|
8
|
+
* - stdio: spawn a process (e.g., `npx @modelcontextprotocol/server-notion`)
|
|
9
|
+
* - sse: connect to an SSE endpoint
|
|
10
|
+
* - http: connect to an HTTP JSON-RPC endpoint
|
|
11
|
+
*
|
|
12
|
+
* @example
|
|
13
|
+
* ```typescript
|
|
14
|
+
* import { codegen } from '@slashfi/agents-sdk';
|
|
15
|
+
*
|
|
16
|
+
* await codegen({
|
|
17
|
+
* server: 'npx @modelcontextprotocol/server-notion',
|
|
18
|
+
* outDir: './generated/notion',
|
|
19
|
+
* agentPath: '@notion',
|
|
20
|
+
* });
|
|
21
|
+
* ```
|
|
22
|
+
*
|
|
23
|
+
* @example CLI
|
|
24
|
+
* ```bash
|
|
25
|
+
* agents-sdk codegen --server 'npx @mcp/notion' --name notion
|
|
26
|
+
* agents-sdk use notion search_pages '{"query": "hello"}'
|
|
27
|
+
* agents-sdk use notion --list
|
|
28
|
+
* ```
|
|
29
|
+
*/
|
|
30
|
+
import type { JsonSchema } from "./types.js";
|
|
31
|
+
/** MCP tool definition as returned by tools/list */
|
|
32
|
+
export interface McpToolDefinition {
|
|
33
|
+
name: string;
|
|
34
|
+
description?: string;
|
|
35
|
+
inputSchema?: JsonSchema;
|
|
36
|
+
}
|
|
37
|
+
/** MCP server info from initialize response */
|
|
38
|
+
export interface McpServerInfo {
|
|
39
|
+
name?: string;
|
|
40
|
+
version?: string;
|
|
41
|
+
protocolVersion?: string;
|
|
42
|
+
}
|
|
43
|
+
/** Transport for communicating with an MCP server */
|
|
44
|
+
export interface McpTransport {
|
|
45
|
+
send(method: string, params?: Record<string, unknown>): Promise<unknown>;
|
|
46
|
+
/** Send a JSON-RPC notification (no id, no response expected) */
|
|
47
|
+
notify(method: string, params?: Record<string, unknown>): Promise<void>;
|
|
48
|
+
close(): Promise<void>;
|
|
49
|
+
}
|
|
50
|
+
/** Server source — string command, URL, or explicit config */
|
|
51
|
+
export type ServerSource = string | {
|
|
52
|
+
command: string;
|
|
53
|
+
args?: string[];
|
|
54
|
+
env?: Record<string, string>;
|
|
55
|
+
} | {
|
|
56
|
+
url: string;
|
|
57
|
+
headers?: Record<string, string>;
|
|
58
|
+
} | {
|
|
59
|
+
spawn: string;
|
|
60
|
+
args?: string[];
|
|
61
|
+
env?: Record<string, string>;
|
|
62
|
+
port?: number;
|
|
63
|
+
endpoint?: string;
|
|
64
|
+
};
|
|
65
|
+
/** Options for the codegen function */
|
|
66
|
+
export interface CodegenOptions {
|
|
67
|
+
/** MCP server source — command string, URL, or config object */
|
|
68
|
+
server: ServerSource;
|
|
69
|
+
/** Output directory for generated files */
|
|
70
|
+
outDir: string;
|
|
71
|
+
/** Agent path override (default: derived from server name) */
|
|
72
|
+
agentPath?: string;
|
|
73
|
+
/** Agent display name */
|
|
74
|
+
name?: string;
|
|
75
|
+
/** SDK import path (default: '@slashfi/agents-sdk') */
|
|
76
|
+
sdkImport?: string;
|
|
77
|
+
/** Whether to generate a CLI entrypoint (default: true) */
|
|
78
|
+
cli?: boolean;
|
|
79
|
+
/** Whether to generate TypeScript interfaces from schemas (default: true) */
|
|
80
|
+
types?: boolean;
|
|
81
|
+
/** Visibility for the generated agent (default: 'public') */
|
|
82
|
+
visibility?: "public" | "internal" | "private";
|
|
83
|
+
}
|
|
84
|
+
/** Result of codegen */
|
|
85
|
+
export interface CodegenResult {
|
|
86
|
+
/** Path to the output directory */
|
|
87
|
+
outDir: string;
|
|
88
|
+
/** Server info from the MCP initialize handshake */
|
|
89
|
+
serverInfo: McpServerInfo;
|
|
90
|
+
/** Number of tools generated */
|
|
91
|
+
toolCount: number;
|
|
92
|
+
/** Names of generated tool files */
|
|
93
|
+
toolFiles: string[];
|
|
94
|
+
/** All generated file paths */
|
|
95
|
+
files: string[];
|
|
96
|
+
}
|
|
97
|
+
/** Convert tool name to a valid TypeScript identifier (camelCase) */
|
|
98
|
+
export declare function toIdentifier(name: string): string;
|
|
99
|
+
/** Convert tool name to PascalCase for type names */
|
|
100
|
+
export declare function toPascalCase(name: string): string;
|
|
101
|
+
/** Serialize a JSON schema to a readable TypeScript literal string */
|
|
102
|
+
export declare function schemaToString(schema: JsonSchema, indent?: number): string;
|
|
103
|
+
/** Generate a TypeScript interface from a JSON Schema */
|
|
104
|
+
export declare function schemaToInterface(name: string, schema: JsonSchema): string;
|
|
105
|
+
/** Manifest stored in outDir for `agents-sdk use` */
|
|
106
|
+
export interface CodegenManifest {
|
|
107
|
+
agentPath: string;
|
|
108
|
+
serverSource: ServerSource;
|
|
109
|
+
serverInfo: McpServerInfo;
|
|
110
|
+
tools: {
|
|
111
|
+
name: string;
|
|
112
|
+
description?: string;
|
|
113
|
+
}[];
|
|
114
|
+
generatedAt: string;
|
|
115
|
+
}
|
|
116
|
+
/**
|
|
117
|
+
* Connect to an MCP server, introspect its tools, and generate
|
|
118
|
+
* agent-definition source files.
|
|
119
|
+
*/
|
|
120
|
+
export declare function codegen(options: CodegenOptions): Promise<CodegenResult>;
|
|
121
|
+
/**
|
|
122
|
+
* Execute a tool on a previously codegenned agent by reconnecting
|
|
123
|
+
* to the MCP server and calling the tool.
|
|
124
|
+
*/
|
|
125
|
+
export declare function useAgent(options: {
|
|
126
|
+
/** Path to the generated agent directory (contains .codegen-manifest.json) */
|
|
127
|
+
agentDir: string;
|
|
128
|
+
/** Tool name to execute */
|
|
129
|
+
tool: string;
|
|
130
|
+
/** Tool parameters */
|
|
131
|
+
params?: Record<string, unknown>;
|
|
132
|
+
}): Promise<unknown>;
|
|
133
|
+
/**
|
|
134
|
+
* List tools available on a codegenned agent.
|
|
135
|
+
*/
|
|
136
|
+
export declare function listAgentTools(agentDir: string): CodegenManifest["tools"];
|
|
137
|
+
//# sourceMappingURL=codegen.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"codegen.d.ts","sourceRoot":"","sources":["../src/codegen.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AAIH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAM7C,oDAAoD;AACpD,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,WAAW,CAAC,EAAE,UAAU,CAAC;CAC1B;AAED,+CAA+C;AAC/C,MAAM,WAAW,aAAa;IAC5B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B;AAED,qDAAqD;AACrD,MAAM,WAAW,YAAY;IAC3B,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IACzE,iEAAiE;IACjE,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACxE,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CACxB;AAED,8DAA8D;AAC9D,MAAM,MAAM,YAAY,GACpB,MAAM,GACN;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAAC,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;CAAE,GAClE;IAAE,GAAG,EAAE,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;CAAE,GACjD;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAAC,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC;AAEvG,uCAAuC;AACvC,MAAM,WAAW,cAAc;IAC7B,gEAAgE;IAChE,MAAM,EAAE,YAAY,CAAC;IAErB,2CAA2C;IAC3C,MAAM,EAAE,MAAM,CAAC;IAEf,8DAA8D;IAC9D,SAAS,CAAC,EAAE,MAAM,CAAC;IAEnB,yBAAyB;IACzB,IAAI,CAAC,EAAE,MAAM,CAAC;IAEd,uDAAuD;IACvD,SAAS,CAAC,EAAE,MAAM,CAAC;IAEnB,2DAA2D;IAC3D,GAAG,CAAC,EAAE,OAAO,CAAC;IAEd,6EAA6E;IAC7E,KAAK,CAAC,EAAE,OAAO,CAAC;IAEhB,6DAA6D;IAC7D,UAAU,CAAC,EAAE,QAAQ,GAAG,UAAU,GAAG,SAAS,CAAC;CAChD;AAED,wBAAwB;AACxB,MAAM,WAAW,aAAa;IAC5B,mCAAmC;IACnC,MAAM,EAAE,MAAM,CAAC;IAEf,oDAAoD;IACpD,UAAU,EAAE,aAAa,CAAC;IAE1B,gCAAgC;IAChC,SAAS,EAAE,MAAM,CAAC;IAElB,oCAAoC;IACpC,SAAS,EAAE,MAAM,EAAE,CAAC;IAEpB,+BAA+B;IAC/B,KAAK,EAAE,MAAM,EAAE,CAAC;CACjB;AA+lBD,qEAAqE;AACrE,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAWjD;AAED,qDAAqD;AACrD,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAOjD;AAWD,sEAAsE;AACtE,wBAAgB,cAAc,CAAC,MAAM,EAAE,UAAU,EAAE,MAAM,SAAI,GAAG,MAAM,CA0DrE;AAED,yDAAyD;AACzD,wBAAgB,iBAAiB,CAC/B,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,UAAU,GACjB,MAAM,CAsBR;AAgRD,qDAAqD;AACrD,MAAM,WAAW,eAAe;IAC9B,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,EAAE,YAAY,CAAC;IAC3B,UAAU,EAAE,aAAa,CAAC;IAC1B,KAAK,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,WAAW,CAAC,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;IAChD,WAAW,EAAE,MAAM,CAAC;CACrB;AAsBD;;;GAGG;AACH,wBAAsB,OAAO,CAAC,OAAO,EAAE,cAAc,GAAG,OAAO,CAAC,aAAa,CAAC,CA4H7E;AAMD;;;GAGG;AACH,wBAAsB,QAAQ,CAAC,OAAO,EAAE;IACtC,8EAA8E;IAC9E,QAAQ,EAAE,MAAM,CAAC;IACjB,2BAA2B;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,sBAAsB;IACtB,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAClC,GAAG,OAAO,CAAC,OAAO,CAAC,CA8CnB;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,QAAQ,EAAE,MAAM,GAAG,eAAe,CAAC,OAAO,CAAC,CAazE"}
|