@mcpc-tech/core 0.3.23 → 0.3.24

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
@@ -534,6 +534,7 @@ __export(mod_exports, {
534
534
  composeMcpDepTools: () => composeMcpDepTools,
535
535
  convertToAISDKTools: () => convertToAISDKTools,
536
536
  extractJsonSchema: () => extractJsonSchema,
537
+ isMarkdownFile: () => isMarkdownFile,
537
538
  isProdEnv: () => isProdEnv,
538
539
  isSCF: () => isSCF,
539
540
  isWrappedSchema: () => isWrappedSchema,
@@ -542,6 +543,7 @@ __export(mod_exports, {
542
543
  optionalObject: () => optionalObject,
543
544
  parseJSON: () => parseJSON,
544
545
  parseMcpcConfigs: () => parseMcpcConfigs,
546
+ setMarkdownAgentLoader: () => setMarkdownAgentLoader,
545
547
  truncateJSON: () => truncateJSON
546
548
  });
547
549
  module.exports = __toCommonJS(mod_exports);
@@ -14868,7 +14870,9 @@ var Client = class extends Protocol {
14868
14870
  }
14869
14871
  return taskValidationResult.data;
14870
14872
  }
14871
- const validationResult = safeParse3(CreateMessageResultSchema, result);
14873
+ const hasTools = params.tools || params.toolChoice;
14874
+ const resultSchema = hasTools ? CreateMessageResultWithToolsSchema : CreateMessageResultSchema;
14875
+ const validationResult = safeParse3(resultSchema, result);
14872
14876
  if (!validationResult.success) {
14873
14877
  const errorMessage = validationResult.error instanceof Error ? validationResult.error.message : String(validationResult.error);
14874
14878
  throw new McpError(ErrorCode.InvalidParams, `Invalid sampling result: ${errorMessage}`);
@@ -20406,12 +20410,44 @@ function convertToAISDKTools(server, helpers) {
20406
20410
  }
20407
20411
 
20408
20412
  // __mcpc__core_latest/node_modules/@mcpc/core/src/set-up-mcp-compose.js
20413
+ var markdownAgentLoader = null;
20414
+ function setMarkdownAgentLoader(loader) {
20415
+ markdownAgentLoader = loader;
20416
+ }
20417
+ function isMarkdownFile(path) {
20418
+ return path.endsWith(".md") || path.endsWith(".markdown");
20419
+ }
20420
+ async function resolveComposeInput(input) {
20421
+ if (typeof input !== "string") {
20422
+ return input;
20423
+ }
20424
+ if (!isMarkdownFile(input)) {
20425
+ throw new Error(`Invalid compose input: "${input}". Expected a Markdown file path (.md) or a ComposeDefinition object.`);
20426
+ }
20427
+ if (!markdownAgentLoader) {
20428
+ throw new Error(`Cannot load Markdown agent file "${input}": Markdown loader not available. Use markdownLoaderPlugin() from "@mcpc/plugin-markdown-loader", or use inline ComposeDefinition objects.`);
20429
+ }
20430
+ return await markdownAgentLoader(input);
20431
+ }
20409
20432
  function parseMcpcConfigs(conf) {
20410
20433
  return conf ?? [];
20411
20434
  }
20412
- async function mcpc(serverConf, composeConf, setupCallback) {
20435
+ async function mcpc(serverConf, composeConf, optionsOrSetup) {
20413
20436
  const server = new ComposableMCPServer(...serverConf);
20414
- const parsed = parseMcpcConfigs(composeConf);
20437
+ const options = typeof optionsOrSetup === "function" ? {
20438
+ setup: optionsOrSetup
20439
+ } : optionsOrSetup ?? {};
20440
+ if (options.plugins) {
20441
+ for (const plugin of options.plugins) {
20442
+ if (typeof plugin === "string") {
20443
+ await server.loadPluginFromPath(plugin);
20444
+ } else {
20445
+ await server.addPlugin(plugin);
20446
+ }
20447
+ }
20448
+ }
20449
+ const resolvedConfigs = composeConf ? await Promise.all(composeConf.map(resolveComposeInput)) : [];
20450
+ const parsed = parseMcpcConfigs(resolvedConfigs);
20415
20451
  await server.initBuiltInPlugins();
20416
20452
  for (const mcpcConfig of parsed) {
20417
20453
  if (mcpcConfig.plugins) {
@@ -20424,8 +20460,8 @@ async function mcpc(serverConf, composeConf, setupCallback) {
20424
20460
  }
20425
20461
  }
20426
20462
  }
20427
- if (setupCallback) {
20428
- await setupCallback(server);
20463
+ if (options.setup) {
20464
+ await options.setup(server);
20429
20465
  }
20430
20466
  for (const mcpcConfig of parsed) {
20431
20467
  await server.compose(mcpcConfig.name, mcpcConfig.description ?? "", mcpcConfig.deps, mcpcConfig.options);
@@ -20438,6 +20474,7 @@ async function mcpc(serverConf, composeConf, setupCallback) {
20438
20474
  composeMcpDepTools,
20439
20475
  convertToAISDKTools,
20440
20476
  extractJsonSchema,
20477
+ isMarkdownFile,
20441
20478
  isProdEnv,
20442
20479
  isSCF,
20443
20480
  isWrappedSchema,
@@ -20446,5 +20483,6 @@ async function mcpc(serverConf, composeConf, setupCallback) {
20446
20483
  optionalObject,
20447
20484
  parseJSON,
20448
20485
  parseMcpcConfigs,
20486
+ setMarkdownAgentLoader,
20449
20487
  truncateJSON
20450
20488
  });
package/index.mjs CHANGED
@@ -14856,7 +14856,9 @@ var Client = class extends Protocol {
14856
14856
  }
14857
14857
  return taskValidationResult.data;
14858
14858
  }
14859
- const validationResult = safeParse3(CreateMessageResultSchema, result);
14859
+ const hasTools = params.tools || params.toolChoice;
14860
+ const resultSchema = hasTools ? CreateMessageResultWithToolsSchema : CreateMessageResultSchema;
14861
+ const validationResult = safeParse3(resultSchema, result);
14860
14862
  if (!validationResult.success) {
14861
14863
  const errorMessage = validationResult.error instanceof Error ? validationResult.error.message : String(validationResult.error);
14862
14864
  throw new McpError(ErrorCode.InvalidParams, `Invalid sampling result: ${errorMessage}`);
@@ -20393,12 +20395,44 @@ function convertToAISDKTools(server, helpers) {
20393
20395
  }
20394
20396
 
20395
20397
  // __mcpc__core_latest/node_modules/@mcpc/core/src/set-up-mcp-compose.js
20398
+ var markdownAgentLoader = null;
20399
+ function setMarkdownAgentLoader(loader) {
20400
+ markdownAgentLoader = loader;
20401
+ }
20402
+ function isMarkdownFile(path) {
20403
+ return path.endsWith(".md") || path.endsWith(".markdown");
20404
+ }
20405
+ async function resolveComposeInput(input) {
20406
+ if (typeof input !== "string") {
20407
+ return input;
20408
+ }
20409
+ if (!isMarkdownFile(input)) {
20410
+ throw new Error(`Invalid compose input: "${input}". Expected a Markdown file path (.md) or a ComposeDefinition object.`);
20411
+ }
20412
+ if (!markdownAgentLoader) {
20413
+ throw new Error(`Cannot load Markdown agent file "${input}": Markdown loader not available. Use markdownLoaderPlugin() from "@mcpc/plugin-markdown-loader", or use inline ComposeDefinition objects.`);
20414
+ }
20415
+ return await markdownAgentLoader(input);
20416
+ }
20396
20417
  function parseMcpcConfigs(conf) {
20397
20418
  return conf ?? [];
20398
20419
  }
20399
- async function mcpc(serverConf, composeConf, setupCallback) {
20420
+ async function mcpc(serverConf, composeConf, optionsOrSetup) {
20400
20421
  const server = new ComposableMCPServer(...serverConf);
20401
- const parsed = parseMcpcConfigs(composeConf);
20422
+ const options = typeof optionsOrSetup === "function" ? {
20423
+ setup: optionsOrSetup
20424
+ } : optionsOrSetup ?? {};
20425
+ if (options.plugins) {
20426
+ for (const plugin of options.plugins) {
20427
+ if (typeof plugin === "string") {
20428
+ await server.loadPluginFromPath(plugin);
20429
+ } else {
20430
+ await server.addPlugin(plugin);
20431
+ }
20432
+ }
20433
+ }
20434
+ const resolvedConfigs = composeConf ? await Promise.all(composeConf.map(resolveComposeInput)) : [];
20435
+ const parsed = parseMcpcConfigs(resolvedConfigs);
20402
20436
  await server.initBuiltInPlugins();
20403
20437
  for (const mcpcConfig of parsed) {
20404
20438
  if (mcpcConfig.plugins) {
@@ -20411,8 +20445,8 @@ async function mcpc(serverConf, composeConf, setupCallback) {
20411
20445
  }
20412
20446
  }
20413
20447
  }
20414
- if (setupCallback) {
20415
- await setupCallback(server);
20448
+ if (options.setup) {
20449
+ await options.setup(server);
20416
20450
  }
20417
20451
  for (const mcpcConfig of parsed) {
20418
20452
  await server.compose(mcpcConfig.name, mcpcConfig.description ?? "", mcpcConfig.deps, mcpcConfig.options);
@@ -20424,6 +20458,7 @@ export {
20424
20458
  composeMcpDepTools,
20425
20459
  convertToAISDKTools,
20426
20460
  extractJsonSchema,
20461
+ isMarkdownFile,
20427
20462
  isProdEnv,
20428
20463
  isSCF,
20429
20464
  isWrappedSchema,
@@ -20432,5 +20467,6 @@ export {
20432
20467
  optionalObject,
20433
20468
  parseJSON,
20434
20469
  parseMcpcConfigs,
20470
+ setMarkdownAgentLoader,
20435
20471
  truncateJSON
20436
20472
  };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@mcpc-tech/core",
3
- "version": "0.3.23",
3
+ "version": "0.3.24",
4
4
  "homepage": "https://jsr.io/@mcpc/core",
5
5
  "dependencies": {
6
6
  "@ai-sdk/provider": "^2.0.0",
package/types/mod.d.ts CHANGED
@@ -47,11 +47,13 @@
47
47
  *
48
48
  * @module
49
49
  */ export * from "./src/compose.js";
50
+ export type { McpServerConfig, MCPSetting, SseServerConfig, StdioServerConfig, StreamableHTTPServerConfig } from "./src/service/tools.js";
51
+ export type { SamplingConfig, ToolRefXml } from "./src/types.js";
50
52
  export type { AgentToolRegistrationContext, ComposedTool, ComposeEndContext, ComposeStartContext, FinalizeContext, ToolConfig, ToolPlugin, TransformContext } from "./src/plugin-types.js";
51
53
  export * from "./src/utils/common/env.js";
52
54
  export * from "./src/utils/common/json.js";
53
55
  export * from "./src/utils/common/mcp.js";
54
- export * from "./src/set-up-mcp-compose.js";
56
+ export { type ComposeDefinition, type ComposeInput, type ComposibleMCPConfig, isMarkdownFile, type MarkdownAgentLoader, mcpc, type McpcOptions, parseMcpcConfigs, setMarkdownAgentLoader } from "./src/set-up-mcp-compose.js";
55
57
  export { extractJsonSchema, isWrappedSchema, jsonSchema, type Schema } from "./src/utils/schema.js";
56
58
  export { convertToAISDKTools, type JsonSchemaHelper, type ToolHelper } from "./src/ai-sdk-adapter.js";
57
59
  //# sourceMappingURL=mod.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"mod.d.ts","sources":["../mod.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAgDC,GAED,iCAAiC;AAGjC,cACE,4BAA4B,EAC5B,YAAY,EACZ,iBAAiB,EACjB,mBAAmB,EACnB,eAAe,EACf,UAAU,EACV,UAAU,EACV,gBAAgB,gCACa;AAE/B,0CAA0C;AAC1C,2CAA2C;AAC3C,0CAA0C;AAE1C,4CAA4C;AAG5C,SACE,iBAAiB,EACjB,eAAe,EACf,UAAU,EACV,KAAK,MAAM,gCACkB;AAG/B,SACE,mBAAmB,EACnB,KAAK,gBAAgB,EACrB,KAAK,UAAU,kCACgB"}
1
+ {"version":3,"file":"mod.d.ts","sources":["../mod.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAgDC,GAED,iCAAiC;AAGjC,cACE,eAAe,EACf,UAAU,EACV,eAAe,EACf,iBAAiB,EACjB,0BAA0B,iCACI;AAGhC,cAAc,cAAc,EAAE,UAAU,yBAAyB;AAGjE,cACE,4BAA4B,EAC5B,YAAY,EACZ,iBAAiB,EACjB,mBAAmB,EACnB,eAAe,EACf,UAAU,EACV,UAAU,EACV,gBAAgB,gCACa;AAE/B,0CAA0C;AAC1C,2CAA2C;AAC3C,0CAA0C;AAE1C,SACE,KAAK,iBAAiB,EACtB,KAAK,YAAY,EACjB,KAAK,mBAAmB,EACxB,cAAc,EACd,KAAK,mBAAmB,EACxB,IAAI,EACJ,KAAK,WAAW,EAChB,gBAAgB,EAChB,sBAAsB,sCACa;AAGrC,SACE,iBAAiB,EACjB,eAAe,EACf,UAAU,EACV,KAAK,MAAM,gCACkB;AAG/B,SACE,mBAAmB,EACnB,KAAK,gBAAgB,EACrB,KAAK,UAAU,kCACgB"}
@@ -95,10 +95,52 @@ export interface ComposeDefinition {
95
95
  */ refs?: Array<ToolRefXml>;
96
96
  };
97
97
  }
98
+ /**
99
+ * Input type for mcpc() that supports both inline definitions and file paths.
100
+ * - ComposeDefinition: Inline agent definition object
101
+ * - string: Path to a Markdown agent file (.md)
102
+ *
103
+ * @example
104
+ * ```typescript
105
+ * // Mix of inline and file-based definitions
106
+ * await mcpc(serverConf, [
107
+ * './agents/coding-agent.md', // Load from file
108
+ * { name: 'inline-agent', description: '...' } // Inline definition
109
+ * ]);
110
+ * ```
111
+ */ export type ComposeInput = ComposeDefinition | string;
98
112
  export interface ComposibleMCPConfig {
99
113
  [key: string]: ComposeDefinition[];
100
114
  }
115
+ /**
116
+ * Markdown agent file loader function type.
117
+ * This is registered by markdownLoaderPlugin() to avoid circular dependencies.
118
+ */ export type MarkdownAgentLoader = (filePath: string) => Promise<ComposeDefinition>;
119
+ /**
120
+ * Register the Markdown agent loader (called by markdownLoaderPlugin())
121
+ */ export declare function setMarkdownAgentLoader(loader: MarkdownAgentLoader): void;
122
+ /**
123
+ * Check if a path is a Markdown file (.md or .markdown)
124
+ */ export declare function isMarkdownFile(path: string): boolean;
101
125
  export declare function parseMcpcConfigs(conf?: ComposeDefinition[]): ComposeDefinition[];
126
+ /**
127
+ * Options for mcpc() function
128
+ */ export interface McpcOptions {
129
+ /**
130
+ * Loader plugins to load BEFORE resolving compose inputs.
131
+ * These plugins register file loaders (e.g., markdown-loader) that are needed
132
+ * to parse file paths in composeConf.
133
+ *
134
+ * Supports both plugin objects and string paths (e.g., "@mcpc/plugin-markdown-loader").
135
+ *
136
+ * Note: This is different from ComposeDefinition.plugins which are runtime plugins
137
+ * that transform tool descriptions and results AFTER composition.
138
+ */ plugins?: (ToolPlugin | string)[];
139
+ /**
140
+ * Callback to register custom tools or perform additional setup before composition.
141
+ * Useful for adding internal tools or custom configurations.
142
+ */ setup?: (server: ComposableMCPServer) => void | Promise<void>;
143
+ }
102
144
  /**
103
145
  * Create and configure an agentic MCP server with composed tools.
104
146
  *
@@ -110,6 +152,7 @@ export declare function parseMcpcConfigs(conf?: ComposeDefinition[]): ComposeDef
110
152
  *
111
153
  * @example
112
154
  * ```typescript
155
+ * // Using inline definitions
113
156
  * const server = await mcpc(
114
157
  * [
115
158
  * { name: "coding-agent", version: "1.0.0" },
@@ -139,6 +182,16 @@ export declare function parseMcpcConfigs(conf?: ComposeDefinition[]): ComposeDef
139
182
  * options: { mode: "ai_sampling" }
140
183
  * }]
141
184
  * );
185
+ *
186
+ * // Using Markdown file paths with plugin
187
+ * import { markdownLoaderPlugin } from "@mcpc/plugin-markdown-loader";
188
+ *
189
+ * const server = await mcpc(
190
+ * [{ name: "my-server", version: "1.0.0" }, { capabilities: { tools: {} } }],
191
+ * ["./agents/coding-agent.md"],
192
+ * { plugins: [markdownLoaderPlugin()] }
193
+ * );
194
+ *
142
195
  * await server.connect(new StdioServerTransport());
143
196
  * ```
144
197
  *
@@ -146,20 +199,17 @@ export declare function parseMcpcConfigs(conf?: ComposeDefinition[]): ComposeDef
146
199
  * - First element: Server metadata (name, version)
147
200
  * - Second element: Server capabilities (tools, sampling, etc.)
148
201
  *
149
- * @param composeConf - Array of agent composition definitions. Each definition includes:
150
- * - name: Agent name (set to null for composition-only mode)
151
- * - description: Agent purpose with XML-like tool references (e.g., `<tool name="server.tool"/>`)
152
- * - deps: MCP server dependencies with transport configurations (stdio, sse, streamable-http)
153
- * - plugins: Global plugins to transform/extend tool behavior (objects or file paths)
154
- * - options: Execution mode settings (agentic, ai_sampling, ai_acp)
202
+ * @param composeConf - Array of agent composition definitions or Markdown file paths.
203
+ * - ComposeDefinition: Inline agent definition object
204
+ * - string: Path to a Markdown agent file (.md) - requires markdown-loader plugin
155
205
  *
156
- * @param setupCallback - Optional callback to register custom tools or perform additional setup
157
- * before composition. Useful for adding internal tools or custom configurations.
206
+ * @param options - Optional configuration for mcpc()
207
+ * - plugins: Plugins to load before resolving compose inputs (e.g., markdown-loader)
158
208
  *
159
209
  * @returns A configured MCP Server instance ready to connect to a transport
160
210
  *
161
211
  * @see {@link ComposeDefinition} for detailed composition configuration options
162
212
  * @see {@link ToolPlugin} for plugin development guide
163
213
  * @see https://github.com/mcpc-tech/mcpc/tree/main/docs for complete documentation
164
- */ export declare function mcpc(serverConf: ConstructorParameters<typeof ComposableMCPServer>, composeConf?: ComposeDefinition[], setupCallback?: (server: ComposableMCPServer) => void | Promise<void>): Promise<InstanceType<typeof ComposableMCPServer>>;
214
+ */ export declare function mcpc(serverConf: ConstructorParameters<typeof ComposableMCPServer>, composeConf?: ComposeInput[], optionsOrSetup?: McpcOptions | ((server: ComposableMCPServer) => void | Promise<void>)): Promise<InstanceType<typeof ComposableMCPServer>>;
165
215
  //# sourceMappingURL=set-up-mcp-compose.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"set-up-mcp-compose.d.ts","sources":["../../src/set-up-mcp-compose.ts"],"names":[],"mappings":"AAAA,SAAS,mBAAmB,oBAAoB;AAChD,cAAc,UAAU,6BAA6B;AACrD,cAAc,cAAc,qBAAqB;AACjD,cAAc,UAAU,4BAA4B;AACpD,cAAc,UAAU,qBAAqB;AAC7C,cAAc,aAAa,6BAA6B;AAExD,iBAAiB;EACf;;;GAGC,GACD,MAAM,MAAM,GAAG,IAAI;EACnB;;GAEC,GACD,cAAc,MAAM;EACpB,OAAO;EAEP;;;;;;;;;;;GAWC,GACD,WAAW,aAAa,MAAM;EAE9B;IACE;;;;;;KAMC,GACD,OAAO;IAEP;;KAEC,GACD,iBAAiB;IAEjB;;;;KAIC,GACD;MACE;QACE,QAAQ;UAAQ,OAAO,MAAM;;QAC7B,eAAe,MAAM;QACrB,gBAAgB,MAAM;QACtB,uBAAuB,MAAM;;;IAIjC;;;;KAIC,GACD;MACE,SAAS,MAAM;MACf,OAAO,MAAM;MACb,MAAM,OAAO,MAAM,EAAE,MAAM;MAC3B;QACE,MAAM,MAAM;QACZ,aAAa;UACX,MAAM,MAAM;UACZ,SAAS,MAAM;UACf,OAAO,MAAM;UACb,MAAM,OAAO,MAAM,EAAE,MAAM;;;MAG/B,iBAAiB,OAAO;;IAG1B;;;;KAIC,GACD,WAAW,MAAM;IAEjB;;;;KAIC,GACD,YAAY,MAAM;IAElB;;;;KAIC,GACD,iBAAiB,OAAO;IAExB;;;;;KAKC,GACD;;;KAGC,GACD,OAAO,MAAM;;;AAMjB,iBAAiB;GACd,KAAK,MAAM,GAAG;;AAGjB,OAAO,iBAAS,iBACd,OAAO,mBAAmB,GACzB;AAIH;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA8DC,GACD,OAAO,iBAAe,KACpB,YAAY,6BAA6B,oBAAoB,EAC7D,cAAc,mBAAmB,EACjC,iBAAiB,QAAQ,wBAAwB,IAAI,GAAG,QAAQ,IAAI,CAAC,GACpE,QAAQ,oBAAoB"}
1
+ {"version":3,"file":"set-up-mcp-compose.d.ts","sources":["../../src/set-up-mcp-compose.ts"],"names":[],"mappings":"AAAA,SAAS,mBAAmB,oBAAoB;AAChD,cAAc,UAAU,6BAA6B;AACrD,cAAc,cAAc,qBAAqB;AACjD,cAAc,UAAU,4BAA4B;AACpD,cAAc,UAAU,qBAAqB;AAC7C,cAAc,aAAa,6BAA6B;AAExD,iBAAiB;EACf;;;GAGC,GACD,MAAM,MAAM,GAAG,IAAI;EACnB;;GAEC,GACD,cAAc,MAAM;EACpB,OAAO;EAEP;;;;;;;;;;;GAWC,GACD,WAAW,aAAa,MAAM;EAE9B;IACE;;;;;;KAMC,GACD,OAAO;IAEP;;KAEC,GACD,iBAAiB;IAEjB;;;;KAIC,GACD;MACE;QACE,QAAQ;UAAQ,OAAO,MAAM;;QAC7B,eAAe,MAAM;QACrB,gBAAgB,MAAM;QACtB,uBAAuB,MAAM;;;IAIjC;;;;KAIC,GACD;MACE,SAAS,MAAM;MACf,OAAO,MAAM;MACb,MAAM,OAAO,MAAM,EAAE,MAAM;MAC3B;QACE,MAAM,MAAM;QACZ,aAAa;UACX,MAAM,MAAM;UACZ,SAAS,MAAM;UACf,OAAO,MAAM;UACb,MAAM,OAAO,MAAM,EAAE,MAAM;;;MAG/B,iBAAiB,OAAO;;IAG1B;;;;KAIC,GACD,WAAW,MAAM;IAEjB;;;;KAIC,GACD,YAAY,MAAM;IAElB;;;;KAIC,GACD,iBAAiB,OAAO;IAExB;;;;;KAKC,GACD;;;KAGC,GACD,OAAO,MAAM;;;AAIjB;;;;;;;;;;;;;CAaC,GACD,YAAY,eAAe,oBAAoB,MAAM;AAIrD,iBAAiB;GACd,KAAK,MAAM,GAAG;;AAGjB;;;CAGC,GACD,YAAY,uBACV,UAAU,MAAM,KACb,QAAQ;AAKb;;CAEC,GACD,OAAO,iBAAS,uBAAuB,QAAQ,mBAAmB,GAAG,IAAI;AAIzE;;CAEC,GACD,OAAO,iBAAS,eAAe,MAAM,MAAM,GAAG,OAAO;AAgCrD,OAAO,iBAAS,iBACd,OAAO,mBAAmB,GACzB;AAIH;;CAEC,GACD,iBAAiB;EACf;;;;;;;;;GASC,GACD,WAAW,aAAa,MAAM;EAE9B;;;GAGC,GACD,SAAS,QAAQ,wBAAwB,IAAI,GAAG,QAAQ,IAAI;;AAG9D;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAsEC,GACD,OAAO,iBAAe,KACpB,YAAY,6BAA6B,oBAAoB,EAC7D,cAAc,cAAc,EAC5B,iBACI,gBACE,QAAQ,wBAAwB,IAAI,GAAG,QAAQ,IAAI,EAAE,GAC1D,QAAQ,oBAAoB"}