@mcpc-tech/plugin-markdown-loader 0.0.5 → 0.0.7

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/index.cjs CHANGED
@@ -32,7 +32,9 @@ var mod_exports = {};
32
32
  __export(mod_exports, {
33
33
  createPlugin: () => createPlugin,
34
34
  default: () => mod_default,
35
+ isDirectory: () => isDirectory,
35
36
  isMarkdownAgentFile: () => isMarkdownFile,
37
+ loadMarkdownAgentDirectory: () => loadMarkdownAgentDirectory,
36
38
  loadMarkdownAgentFile: () => loadMarkdownAgentFile,
37
39
  markdownAgentToComposeDefinition: () => markdownAgentToComposeDefinition,
38
40
  markdownLoaderPlugin: () => markdownLoaderPlugin,
@@ -1559,7 +1561,7 @@ IMPORTANT: You MUST respond with valid JSON only. Do not include any text before
1559
1561
  let enhanced = systemPrompt || "";
1560
1562
  const toolsPrompt = `
1561
1563
 
1562
- AVAILABLE TOOLS:
1564
+ <available_tools>
1563
1565
  You have access to the following tools. To use a tool, respond with this XML format:
1564
1566
  <use_tool tool="tool_name">
1565
1567
  {"param1": "value1", "param2": "value2"}
@@ -1568,23 +1570,34 @@ You have access to the following tools. To use a tool, respond with this XML for
1568
1570
  Follow the JSON schema definition for each tool's parameters.
1569
1571
  You can use multiple tools in one response. DO NOT include text before or after tool calls - wait for the tool results first.
1570
1572
 
1571
- Tools:`;
1573
+ <tools>`;
1572
1574
  const toolDescriptions = tools.map((tool2) => {
1573
1575
  if (tool2.type === "function") {
1574
1576
  const toolAny = tool2;
1575
1577
  const description = toolAny.description || "No description provided";
1576
1578
  const schema = toolAny.inputSchema || toolAny.parameters;
1577
- const params = schema ? `
1578
- JSON Schema: ${JSON.stringify(schema, null, 2)}` : "";
1579
+ const schemaStr = schema ? `
1580
+ <schema>
1581
+ ${JSON.stringify(schema, null, 2)}
1582
+ </schema>` : "";
1579
1583
  return `
1580
- - ${tool2.name}: ${description}${params}`;
1584
+ <tool name="${tool2.name}">
1585
+ <description>
1586
+ ${description}
1587
+ </description>${schemaStr}
1588
+ </tool>`;
1581
1589
  } else if (tool2.type === "provider-defined") {
1582
1590
  return `
1583
- - ${tool2.name}: ${tool2.id || "No description provided"}`;
1591
+ <tool name="${tool2.name}">
1592
+ <description>${tool2.id || "No description provided"}</description>
1593
+ </tool>`;
1584
1594
  }
1585
1595
  return "";
1586
1596
  }).filter(Boolean).join("");
1587
- enhanced = enhanced ? `${enhanced}${toolsPrompt}${toolDescriptions}` : `${toolsPrompt}${toolDescriptions}`.trim();
1597
+ const toolsEnd = `
1598
+ </tools>
1599
+ </available_tools>`;
1600
+ enhanced = enhanced ? `${enhanced}${toolsPrompt}${toolDescriptions}${toolsEnd}` : `${toolsPrompt}${toolDescriptions}${toolsEnd}`.trim();
1588
1601
  return enhanced || void 0;
1589
1602
  }
1590
1603
  /**
@@ -4002,10 +4015,15 @@ function parse(content, options = {}) {
4002
4015
  }
4003
4016
 
4004
4017
  // __mcpc__plugin-markdown-loader_latest/node_modules/@mcpc/plugin-markdown-loader/src/markdown-loader.js
4018
+ var import_node_path = require("node:path");
4005
4019
  var import_node_process5 = __toESM(require("node:process"), 1);
4006
4020
  function replaceEnvVars(str2) {
4007
- return str2.replace(/\$([A-Za-z_][A-Za-z0-9_]*)/g, (_match, varName) => {
4008
- return import_node_process5.default.env[varName] || "";
4021
+ return str2.replace(/\$([A-Za-z_][A-Za-z0-9_]*)(?!\s*\()/g, (match, varName) => {
4022
+ const value = import_node_process5.default.env[varName];
4023
+ if (value !== void 0) {
4024
+ return value;
4025
+ }
4026
+ return match;
4009
4027
  });
4010
4028
  }
4011
4029
  function replaceEnvVarsInObject(obj) {
@@ -4042,7 +4060,7 @@ function parseMarkdownAgent(content) {
4042
4060
  }
4043
4061
  return {
4044
4062
  frontMatter,
4045
- description: markdownContent.trim()
4063
+ body: markdownContent.trim()
4046
4064
  };
4047
4065
  }
4048
4066
  var OPTION_KEYS = [
@@ -4057,16 +4075,20 @@ var OPTION_KEYS = [
4057
4075
  ];
4058
4076
  function markdownAgentToComposeDefinition(parsed) {
4059
4077
  const frontMatter = replaceEnvVarsInObject(parsed.frontMatter);
4060
- const description = replaceEnvVars(parsed.description);
4078
+ const body = replaceEnvVars(parsed.body);
4061
4079
  const options = {};
4062
4080
  for (const key of OPTION_KEYS) {
4063
4081
  if (frontMatter[key] !== void 0) {
4064
4082
  options[key] = frontMatter[key];
4065
4083
  }
4066
4084
  }
4085
+ const hasDescription = frontMatter.description !== void 0 && frontMatter.description !== "";
4067
4086
  return {
4068
4087
  name: frontMatter.name,
4069
- description,
4088
+ description: hasDescription ? frontMatter.description : body,
4089
+ ...hasDescription && body ? {
4090
+ manual: body
4091
+ } : {},
4070
4092
  deps: frontMatter.deps,
4071
4093
  plugins: frontMatter.plugins,
4072
4094
  ...Object.keys(options).length > 0 ? {
@@ -4079,6 +4101,45 @@ async function loadMarkdownAgentFile(filePath) {
4079
4101
  const parsed = parseMarkdownAgent(content);
4080
4102
  return markdownAgentToComposeDefinition(parsed);
4081
4103
  }
4104
+ async function loadMarkdownAgentDirectory(dirPath, options = {}) {
4105
+ const { recursive = false } = options;
4106
+ const definitions = [];
4107
+ const errors = [];
4108
+ async function processDirectory(dir) {
4109
+ const entries = await (0, import_promises.readdir)(dir, {
4110
+ withFileTypes: true
4111
+ });
4112
+ for (const entry of entries) {
4113
+ const fullPath = (0, import_node_path.join)(dir, entry.name);
4114
+ if (entry.isDirectory() && recursive) {
4115
+ await processDirectory(fullPath);
4116
+ } else if (entry.isFile() && isMarkdownFile(entry.name)) {
4117
+ try {
4118
+ const definition = await loadMarkdownAgentFile(fullPath);
4119
+ definitions.push(definition);
4120
+ } catch (error) {
4121
+ errors.push({
4122
+ path: fullPath,
4123
+ error: error instanceof Error ? error.message : String(error)
4124
+ });
4125
+ }
4126
+ }
4127
+ }
4128
+ }
4129
+ await processDirectory(dirPath);
4130
+ return {
4131
+ definitions,
4132
+ errors
4133
+ };
4134
+ }
4135
+ async function isDirectory(path) {
4136
+ try {
4137
+ const stats = await (0, import_promises.stat)(path);
4138
+ return stats.isDirectory();
4139
+ } catch {
4140
+ return false;
4141
+ }
4142
+ }
4082
4143
 
4083
4144
  // __mcpc__plugin-markdown-loader_latest/node_modules/@mcpc/plugin-markdown-loader/mod.ts
4084
4145
  function markdownLoaderPlugin() {
@@ -4098,7 +4159,9 @@ var mod_default = defaultPlugin;
4098
4159
  // Annotate the CommonJS export names for ESM import in node:
4099
4160
  0 && (module.exports = {
4100
4161
  createPlugin,
4162
+ isDirectory,
4101
4163
  isMarkdownAgentFile,
4164
+ loadMarkdownAgentDirectory,
4102
4165
  loadMarkdownAgentFile,
4103
4166
  markdownAgentToComposeDefinition,
4104
4167
  markdownLoaderPlugin,
package/index.mjs CHANGED
@@ -1520,7 +1520,7 @@ IMPORTANT: You MUST respond with valid JSON only. Do not include any text before
1520
1520
  let enhanced = systemPrompt || "";
1521
1521
  const toolsPrompt = `
1522
1522
 
1523
- AVAILABLE TOOLS:
1523
+ <available_tools>
1524
1524
  You have access to the following tools. To use a tool, respond with this XML format:
1525
1525
  <use_tool tool="tool_name">
1526
1526
  {"param1": "value1", "param2": "value2"}
@@ -1529,23 +1529,34 @@ You have access to the following tools. To use a tool, respond with this XML for
1529
1529
  Follow the JSON schema definition for each tool's parameters.
1530
1530
  You can use multiple tools in one response. DO NOT include text before or after tool calls - wait for the tool results first.
1531
1531
 
1532
- Tools:`;
1532
+ <tools>`;
1533
1533
  const toolDescriptions = tools.map((tool2) => {
1534
1534
  if (tool2.type === "function") {
1535
1535
  const toolAny = tool2;
1536
1536
  const description = toolAny.description || "No description provided";
1537
1537
  const schema = toolAny.inputSchema || toolAny.parameters;
1538
- const params = schema ? `
1539
- JSON Schema: ${JSON.stringify(schema, null, 2)}` : "";
1538
+ const schemaStr = schema ? `
1539
+ <schema>
1540
+ ${JSON.stringify(schema, null, 2)}
1541
+ </schema>` : "";
1540
1542
  return `
1541
- - ${tool2.name}: ${description}${params}`;
1543
+ <tool name="${tool2.name}">
1544
+ <description>
1545
+ ${description}
1546
+ </description>${schemaStr}
1547
+ </tool>`;
1542
1548
  } else if (tool2.type === "provider-defined") {
1543
1549
  return `
1544
- - ${tool2.name}: ${tool2.id || "No description provided"}`;
1550
+ <tool name="${tool2.name}">
1551
+ <description>${tool2.id || "No description provided"}</description>
1552
+ </tool>`;
1545
1553
  }
1546
1554
  return "";
1547
1555
  }).filter(Boolean).join("");
1548
- enhanced = enhanced ? `${enhanced}${toolsPrompt}${toolDescriptions}` : `${toolsPrompt}${toolDescriptions}`.trim();
1556
+ const toolsEnd = `
1557
+ </tools>
1558
+ </available_tools>`;
1559
+ enhanced = enhanced ? `${enhanced}${toolsPrompt}${toolDescriptions}${toolsEnd}` : `${toolsPrompt}${toolDescriptions}${toolsEnd}`.trim();
1549
1560
  return enhanced || void 0;
1550
1561
  }
1551
1562
  /**
@@ -2024,7 +2035,7 @@ function isMarkdownFile(path) {
2024
2035
  }
2025
2036
 
2026
2037
  // __mcpc__plugin-markdown-loader_latest/node_modules/@mcpc/plugin-markdown-loader/src/markdown-loader.js
2027
- import { readFile } from "node:fs/promises";
2038
+ import { readdir, readFile, stat } from "node:fs/promises";
2028
2039
 
2029
2040
  // __mcpc__plugin-markdown-loader_latest/node_modules/@jsr/std__yaml/_chars.js
2030
2041
  var TAB = 9;
@@ -3963,10 +3974,15 @@ function parse(content, options = {}) {
3963
3974
  }
3964
3975
 
3965
3976
  // __mcpc__plugin-markdown-loader_latest/node_modules/@mcpc/plugin-markdown-loader/src/markdown-loader.js
3977
+ import { join } from "node:path";
3966
3978
  import process5 from "node:process";
3967
3979
  function replaceEnvVars(str2) {
3968
- return str2.replace(/\$([A-Za-z_][A-Za-z0-9_]*)/g, (_match, varName) => {
3969
- return process5.env[varName] || "";
3980
+ return str2.replace(/\$([A-Za-z_][A-Za-z0-9_]*)(?!\s*\()/g, (match, varName) => {
3981
+ const value = process5.env[varName];
3982
+ if (value !== void 0) {
3983
+ return value;
3984
+ }
3985
+ return match;
3970
3986
  });
3971
3987
  }
3972
3988
  function replaceEnvVarsInObject(obj) {
@@ -4003,7 +4019,7 @@ function parseMarkdownAgent(content) {
4003
4019
  }
4004
4020
  return {
4005
4021
  frontMatter,
4006
- description: markdownContent.trim()
4022
+ body: markdownContent.trim()
4007
4023
  };
4008
4024
  }
4009
4025
  var OPTION_KEYS = [
@@ -4018,16 +4034,20 @@ var OPTION_KEYS = [
4018
4034
  ];
4019
4035
  function markdownAgentToComposeDefinition(parsed) {
4020
4036
  const frontMatter = replaceEnvVarsInObject(parsed.frontMatter);
4021
- const description = replaceEnvVars(parsed.description);
4037
+ const body = replaceEnvVars(parsed.body);
4022
4038
  const options = {};
4023
4039
  for (const key of OPTION_KEYS) {
4024
4040
  if (frontMatter[key] !== void 0) {
4025
4041
  options[key] = frontMatter[key];
4026
4042
  }
4027
4043
  }
4044
+ const hasDescription = frontMatter.description !== void 0 && frontMatter.description !== "";
4028
4045
  return {
4029
4046
  name: frontMatter.name,
4030
- description,
4047
+ description: hasDescription ? frontMatter.description : body,
4048
+ ...hasDescription && body ? {
4049
+ manual: body
4050
+ } : {},
4031
4051
  deps: frontMatter.deps,
4032
4052
  plugins: frontMatter.plugins,
4033
4053
  ...Object.keys(options).length > 0 ? {
@@ -4040,6 +4060,45 @@ async function loadMarkdownAgentFile(filePath) {
4040
4060
  const parsed = parseMarkdownAgent(content);
4041
4061
  return markdownAgentToComposeDefinition(parsed);
4042
4062
  }
4063
+ async function loadMarkdownAgentDirectory(dirPath, options = {}) {
4064
+ const { recursive = false } = options;
4065
+ const definitions = [];
4066
+ const errors = [];
4067
+ async function processDirectory(dir) {
4068
+ const entries = await readdir(dir, {
4069
+ withFileTypes: true
4070
+ });
4071
+ for (const entry of entries) {
4072
+ const fullPath = join(dir, entry.name);
4073
+ if (entry.isDirectory() && recursive) {
4074
+ await processDirectory(fullPath);
4075
+ } else if (entry.isFile() && isMarkdownFile(entry.name)) {
4076
+ try {
4077
+ const definition = await loadMarkdownAgentFile(fullPath);
4078
+ definitions.push(definition);
4079
+ } catch (error) {
4080
+ errors.push({
4081
+ path: fullPath,
4082
+ error: error instanceof Error ? error.message : String(error)
4083
+ });
4084
+ }
4085
+ }
4086
+ }
4087
+ }
4088
+ await processDirectory(dirPath);
4089
+ return {
4090
+ definitions,
4091
+ errors
4092
+ };
4093
+ }
4094
+ async function isDirectory(path) {
4095
+ try {
4096
+ const stats = await stat(path);
4097
+ return stats.isDirectory();
4098
+ } catch {
4099
+ return false;
4100
+ }
4101
+ }
4043
4102
 
4044
4103
  // __mcpc__plugin-markdown-loader_latest/node_modules/@mcpc/plugin-markdown-loader/mod.ts
4045
4104
  function markdownLoaderPlugin() {
@@ -4059,7 +4118,9 @@ var mod_default = defaultPlugin;
4059
4118
  export {
4060
4119
  createPlugin,
4061
4120
  mod_default as default,
4121
+ isDirectory,
4062
4122
  isMarkdownFile as isMarkdownAgentFile,
4123
+ loadMarkdownAgentDirectory,
4063
4124
  loadMarkdownAgentFile,
4064
4125
  markdownAgentToComposeDefinition,
4065
4126
  markdownLoaderPlugin,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@mcpc-tech/plugin-markdown-loader",
3
- "version": "0.0.5",
3
+ "version": "0.0.7",
4
4
  "homepage": "https://jsr.io/@mcpc/plugin-markdown-loader",
5
5
  "dependencies": {
6
6
  "@ai-sdk/provider": "^2.0.0",
package/types/mod.d.ts CHANGED
@@ -25,7 +25,7 @@
25
25
  * @module
26
26
  */ import { type ToolPlugin } from "@jsr/mcpc__core";
27
27
  export { setMarkdownAgentLoader } from "@jsr/mcpc__core";
28
- export { isMarkdownAgentFile, loadMarkdownAgentFile, type MarkdownAgentFrontMatter, markdownAgentToComposeDefinition, type ParsedMarkdownAgent, parseMarkdownAgent } from "./src/markdown-loader.js";
28
+ export { isDirectory, isMarkdownAgentFile, type LoadDirectoryResult, loadMarkdownAgentDirectory, loadMarkdownAgentFile, type MarkdownAgentFrontMatter, markdownAgentToComposeDefinition, type ParsedMarkdownAgent, parseMarkdownAgent } from "./src/markdown-loader.js";
29
29
  /**
30
30
  * Create a Markdown loader plugin for mcpc().
31
31
  *
@@ -1 +1 @@
1
- {"version":3,"file":"mod.d.ts","sources":["../mod.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;CAyBC,GAED,SAAiC,KAAK,UAAU,0BAAiC;AAIjF,SAAS,sBAAsB,0BAAiC;AAEhE,SACE,mBAAmB,EACnB,qBAAqB,EACrB,KAAK,wBAAwB,EAC7B,gCAAgC,EAChC,KAAK,mBAAmB,EACxB,kBAAkB,mCACc;AAElC;;;;;CAKC,GACD,OAAO,iBAAS,wBAAwB;AAWxC,qDAAqD,GACrD,OAAO,cAAM,kBAAoC;AAEjD,4DAA4D,GAC5D,cAAM,eAAe;AACrB,eAAe,cAAc"}
1
+ {"version":3,"file":"mod.d.ts","sources":["../mod.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;CAyBC,GAED,SAAiC,KAAK,UAAU,0BAAiC;AAIjF,SAAS,sBAAsB,0BAAiC;AAEhE,SACE,WAAW,EACX,mBAAmB,EACnB,KAAK,mBAAmB,EACxB,0BAA0B,EAC1B,qBAAqB,EACrB,KAAK,wBAAwB,EAC7B,gCAAgC,EAChC,KAAK,mBAAmB,EACxB,kBAAkB,mCACc;AAElC;;;;;CAKC,GACD,OAAO,iBAAS,wBAAwB;AAWxC,qDAAqD,GACrD,OAAO,cAAM,kBAAoC;AAEjD,4DAA4D,GAC5D,cAAM,eAAe;AACrB,eAAe,cAAc"}
@@ -31,6 +31,11 @@ export { isMarkdownFile as isMarkdownAgentFile };
31
31
  * Front matter configuration for Markdown agent definitions
32
32
  */ export interface MarkdownAgentFrontMatter {
33
33
  /** Agent name (required) */ name: string;
34
+ /**
35
+ * Short description for progressive disclosure.
36
+ * If provided, the Markdown body becomes the `manual` field.
37
+ * If not provided, the Markdown body becomes the `description` field.
38
+ */ description?: string;
34
39
  /** Execution mode */ mode?: "agentic" | "ai_sampling" | "ai_acp" | "code_execution";
35
40
  /** Maximum execution steps */ maxSteps?: number;
36
41
  /** Maximum tokens for sampling */ maxTokens?: number;
@@ -71,7 +76,7 @@ export { isMarkdownFile as isMarkdownAgentFile };
71
76
  * Result of parsing a Markdown agent file
72
77
  */ export interface ParsedMarkdownAgent {
73
78
  frontMatter: MarkdownAgentFrontMatter;
74
- description: string;
79
+ /** The Markdown body content */ body: string;
75
80
  }
76
81
  /**
77
82
  * Parse YAML front matter and Markdown content from a string
@@ -82,4 +87,27 @@ export { isMarkdownFile as isMarkdownAgentFile };
82
87
  /**
83
88
  * Load a Markdown agent definition from a file path
84
89
  */ export declare function loadMarkdownAgentFile(filePath: string): Promise<ComposeDefinition>;
90
+ /**
91
+ * Result of loading agents from a directory
92
+ */ export interface LoadDirectoryResult {
93
+ /** Successfully loaded agent definitions */ definitions: ComposeDefinition[];
94
+ /** Errors encountered during loading (file path and error message) */ errors: Array<{
95
+ path: string;
96
+ error: string;
97
+ }>;
98
+ }
99
+ /**
100
+ * Load all Markdown agent definitions from a directory.
101
+ * Only loads .md files in the directory (non-recursive by default).
102
+ *
103
+ * @param dirPath - Path to the directory containing Markdown agent files
104
+ * @param options - Options for loading
105
+ * @param options.recursive - If true, recursively search subdirectories (default: false)
106
+ * @returns Object containing definitions and any errors encountered
107
+ */ export declare function loadMarkdownAgentDirectory(dirPath: string, options?: {
108
+ recursive?: boolean;
109
+ }): Promise<LoadDirectoryResult>;
110
+ /**
111
+ * Check if a path is a directory
112
+ */ export declare function isDirectory(path: string): Promise<boolean>;
85
113
  //# sourceMappingURL=markdown-loader.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"markdown-loader.d.ts","sources":["../../src/markdown-loader.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;CA2BC,GAED,SACE,KAAK,iBAAiB,EACtB,cAAc,EACd,KAAK,eAAe,EAEpB,KAAK,cAAc,0BACW;AAMhC,SAAyB,kBAAkB,mBAAmB,GAAG;AAgCjE;;CAEC,GACD,iBAAiB;EACf,0BAA0B,GAC1B,MAAM,MAAM;EACZ,mBAAmB,GACnB,OAAO,YAAY,gBAAgB,WAAW;EAC9C,4BAA4B,GAC5B,WAAW,MAAM;EACjB,gCAAgC,GAChC,YAAY,MAAM;EAClB,mBAAmB,GACnB,iBAAiB,OAAO;EACxB,4BAA4B,GAC5B;IACE,YAAY,OAAO,MAAM,EAAE;;EAE7B,sBAAsB,GACtB,UAAU,MAAM;EAChB,oBAAoB,GACpB,OAAO,MAAM;EACb,2BAA2B,GAC3B,iBAAiB;EACjB,8CAA8C,GAC9C;IACE;MACE,QAAQ;QAAQ,OAAO,MAAM;;MAC7B,eAAe,MAAM;MACrB,gBAAgB,MAAM;MACtB,uBAAuB,MAAM;;;EAGjC,qCAAqC,GACrC;IACE,SAAS,MAAM;IACf,OAAO,MAAM;IACb,MAAM,OAAO,MAAM,EAAE,MAAM;IAC3B;MACE,MAAM,MAAM;MACZ,aAAa;QACX,MAAM,MAAM;QACZ,SAAS,MAAM;QACf,OAAO,MAAM;QACb,MAAM,OAAO,MAAM,EAAE,MAAM;;;IAG/B,iBAAiB,OAAO;;;AAI5B;;CAEC,GACD,iBAAiB;EACf,aAAa;EACb,aAAa,MAAM;;AAGrB;;CAEC,GACD,OAAO,iBAAS,mBAAmB,SAAS,MAAM,GAAG;AA8CrD;;CAEC,GACD,OAAO,iBAAS,iCACd,QAAQ,mBAAmB,GAC1B;AAsBH;;CAEC,GACD,OAAO,iBAAe,sBACpB,UAAU,MAAM,GACf,QAAQ"}
1
+ {"version":3,"file":"markdown-loader.d.ts","sources":["../../src/markdown-loader.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;CA2BC,GAED,SACE,KAAK,iBAAiB,EACtB,cAAc,EACd,KAAK,eAAe,EAEpB,KAAK,cAAc,0BACW;AAOhC,SAAyB,kBAAkB,mBAAmB,GAAG;AA0CjE;;CAEC,GACD,iBAAiB;EACf,0BAA0B,GAC1B,MAAM,MAAM;EACZ;;;;GAIC,GACD,cAAc,MAAM;EACpB,mBAAmB,GACnB,OAAO,YAAY,gBAAgB,WAAW;EAC9C,4BAA4B,GAC5B,WAAW,MAAM;EACjB,gCAAgC,GAChC,YAAY,MAAM;EAClB,mBAAmB,GACnB,iBAAiB,OAAO;EACxB,4BAA4B,GAC5B;IACE,YAAY,OAAO,MAAM,EAAE;;EAE7B,sBAAsB,GACtB,UAAU,MAAM;EAChB,oBAAoB,GACpB,OAAO,MAAM;EACb,2BAA2B,GAC3B,iBAAiB;EACjB,8CAA8C,GAC9C;IACE;MACE,QAAQ;QAAQ,OAAO,MAAM;;MAC7B,eAAe,MAAM;MACrB,gBAAgB,MAAM;MACtB,uBAAuB,MAAM;;;EAGjC,qCAAqC,GACrC;IACE,SAAS,MAAM;IACf,OAAO,MAAM;IACb,MAAM,OAAO,MAAM,EAAE,MAAM;IAC3B;MACE,MAAM,MAAM;MACZ,aAAa;QACX,MAAM,MAAM;QACZ,SAAS,MAAM;QACf,OAAO,MAAM;QACb,MAAM,OAAO,MAAM,EAAE,MAAM;;;IAG/B,iBAAiB,OAAO;;;AAI5B;;CAEC,GACD,iBAAiB;EACf,aAAa;EACb,8BAA8B,GAC9B,MAAM,MAAM;;AAGd;;CAEC,GACD,OAAO,iBAAS,mBAAmB,SAAS,MAAM,GAAG;AA8CrD;;CAEC,GACD,OAAO,iBAAS,iCACd,QAAQ,mBAAmB,GAC1B;AA6BH;;CAEC,GACD,OAAO,iBAAe,sBACpB,UAAU,MAAM,GACf,QAAQ;AAMX;;CAEC,GACD,iBAAiB;EACf,0CAA0C,GAC1C,aAAa;EACb,oEAAoE,GACpE,QAAQ;IAAQ,MAAM,MAAM;IAAE,OAAO,MAAM;;;AAG7C;;;;;;;;CAQC,GACD,OAAO,iBAAe,2BACpB,SAAS,MAAM,EACf;EAAW,YAAY,OAAO;CAAO,GACpC,QAAQ;AAgCX;;CAEC,GACD,OAAO,iBAAe,YAAY,MAAM,MAAM,GAAG,QAAQ,OAAO"}