@mcpc-tech/core 0.3.34 → 0.3.35

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
@@ -1,4 +1,3 @@
1
- #!/usr/bin/env node
2
1
  var __create = Object.create;
3
2
  var __defProp = Object.defineProperty;
4
3
  var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
@@ -13109,6 +13108,9 @@ var Protocol = class {
13109
13108
  * The Protocol object assumes ownership of the Transport, replacing any callbacks that have already been set, and expects that it is the only user of the Transport instance going forward.
13110
13109
  */
13111
13110
  async connect(transport) {
13111
+ if (this._transport) {
13112
+ throw new Error("Already connected to a transport. Call close() before connecting to a new transport, or use a separate Protocol instance per connection.");
13113
+ }
13112
13114
  this._transport = transport;
13113
13115
  const _onclose = this.transport?.onclose;
13114
13116
  this._transport.onclose = () => {
@@ -13141,6 +13143,10 @@ var Protocol = class {
13141
13143
  this._progressHandlers.clear();
13142
13144
  this._taskProgressTokens.clear();
13143
13145
  this._pendingDebouncedNotifications.clear();
13146
+ for (const controller of this._requestHandlerAbortControllers.values()) {
13147
+ controller.abort();
13148
+ }
13149
+ this._requestHandlerAbortControllers.clear();
13144
13150
  const error2 = McpError.fromError(ErrorCode.ConnectionClosed, "Connection closed");
13145
13151
  this._transport = void 0;
13146
13152
  this.onclose?.();
@@ -13191,6 +13197,8 @@ var Protocol = class {
13191
13197
  sessionId: capturedTransport?.sessionId,
13192
13198
  _meta: request.params?._meta,
13193
13199
  sendNotification: async (notification) => {
13200
+ if (abortController.signal.aborted)
13201
+ return;
13194
13202
  const notificationOptions = { relatedRequestId: request.id };
13195
13203
  if (relatedTaskId) {
13196
13204
  notificationOptions.relatedTask = { taskId: relatedTaskId };
@@ -13198,6 +13206,9 @@ var Protocol = class {
13198
13206
  await this.notification(notification, notificationOptions);
13199
13207
  },
13200
13208
  sendRequest: async (r, resultSchema, options) => {
13209
+ if (abortController.signal.aborted) {
13210
+ throw new McpError(ErrorCode.ConnectionClosed, "Request was cancelled");
13211
+ }
13201
13212
  const requestOptions = { ...options, relatedRequestId: request.id };
13202
13213
  if (relatedTaskId && !requestOptions.relatedTask) {
13203
13214
  requestOptions.relatedTask = { taskId: relatedTaskId };
@@ -20085,6 +20096,25 @@ var ToolManager = class {
20085
20096
  execute: tool2.callback
20086
20097
  };
20087
20098
  }
20099
+ /**
20100
+ * Get all tools as ComposedTool objects with execute callback
20101
+ * Includes both public and internal tools
20102
+ */
20103
+ getAllComposedTools() {
20104
+ const composedTools = [];
20105
+ for (const [name, tool2] of this.toolRegistry.entries()) {
20106
+ composedTools.push({
20107
+ name,
20108
+ description: tool2.description,
20109
+ inputSchema: tool2.schema ?? {
20110
+ type: "object",
20111
+ properties: {}
20112
+ },
20113
+ execute: tool2.callback
20114
+ });
20115
+ }
20116
+ return composedTools;
20117
+ }
20088
20118
  };
20089
20119
 
20090
20120
  // __mcpc__core_latest/node_modules/@mcpc/core/src/utils/common/schema.js
@@ -20565,6 +20595,50 @@ var ComposableMCPServer = class extends Server {
20565
20595
  const publicToolNames = this.getPublicToolNames();
20566
20596
  return allToolNames.filter((name) => !publicToolNames.includes(name));
20567
20597
  }
20598
+ /**
20599
+ * Get all internal tools with their full metadata (description, schema)
20600
+ * Internal tools are not exposed to MCP clients but available within the agent
20601
+ */
20602
+ getInternalTools() {
20603
+ const internalNames = this.getInternalToolNames();
20604
+ const registry2 = this.toolManager.getToolRegistry();
20605
+ return internalNames.map((name) => {
20606
+ const tool2 = registry2.get(name);
20607
+ return {
20608
+ name,
20609
+ description: tool2?.description || "",
20610
+ inputSchema: tool2?.schema || {
20611
+ type: "object"
20612
+ }
20613
+ };
20614
+ });
20615
+ }
20616
+ /**
20617
+ * Get a single tool with full details including execute callback
20618
+ * Works for both public and internal tools
20619
+ */
20620
+ getComposedTool(name) {
20621
+ return this.toolManager.getComposedTool(name);
20622
+ }
20623
+ /**
20624
+ * Get all tools (public and internal) as composed tools with execute callback
20625
+ */
20626
+ getAllComposedTools() {
20627
+ return this.toolManager.getAllComposedTools();
20628
+ }
20629
+ /**
20630
+ * Get all tools (public and internal) with full details
20631
+ */
20632
+ getAllTools() {
20633
+ const registry2 = this.toolManager.getToolRegistry();
20634
+ return Array.from(registry2.entries()).map(([name, tool2]) => ({
20635
+ name,
20636
+ description: tool2?.description || "",
20637
+ inputSchema: tool2?.schema || {
20638
+ type: "object"
20639
+ }
20640
+ }));
20641
+ }
20568
20642
  /**
20569
20643
  * Get hidden tool schema by name (for internal access)
20570
20644
  */
package/index.mjs CHANGED
@@ -1,6 +1,3 @@
1
- #!/usr/bin/env node
2
- import { createRequire } from 'node:module';
3
- const require = createRequire(import.meta.url);
4
1
  var __create = Object.create;
5
2
  var __defProp = Object.defineProperty;
6
3
  var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
@@ -13097,6 +13094,9 @@ var Protocol = class {
13097
13094
  * The Protocol object assumes ownership of the Transport, replacing any callbacks that have already been set, and expects that it is the only user of the Transport instance going forward.
13098
13095
  */
13099
13096
  async connect(transport) {
13097
+ if (this._transport) {
13098
+ throw new Error("Already connected to a transport. Call close() before connecting to a new transport, or use a separate Protocol instance per connection.");
13099
+ }
13100
13100
  this._transport = transport;
13101
13101
  const _onclose = this.transport?.onclose;
13102
13102
  this._transport.onclose = () => {
@@ -13129,6 +13129,10 @@ var Protocol = class {
13129
13129
  this._progressHandlers.clear();
13130
13130
  this._taskProgressTokens.clear();
13131
13131
  this._pendingDebouncedNotifications.clear();
13132
+ for (const controller of this._requestHandlerAbortControllers.values()) {
13133
+ controller.abort();
13134
+ }
13135
+ this._requestHandlerAbortControllers.clear();
13132
13136
  const error2 = McpError.fromError(ErrorCode.ConnectionClosed, "Connection closed");
13133
13137
  this._transport = void 0;
13134
13138
  this.onclose?.();
@@ -13179,6 +13183,8 @@ var Protocol = class {
13179
13183
  sessionId: capturedTransport?.sessionId,
13180
13184
  _meta: request.params?._meta,
13181
13185
  sendNotification: async (notification) => {
13186
+ if (abortController.signal.aborted)
13187
+ return;
13182
13188
  const notificationOptions = { relatedRequestId: request.id };
13183
13189
  if (relatedTaskId) {
13184
13190
  notificationOptions.relatedTask = { taskId: relatedTaskId };
@@ -13186,6 +13192,9 @@ var Protocol = class {
13186
13192
  await this.notification(notification, notificationOptions);
13187
13193
  },
13188
13194
  sendRequest: async (r, resultSchema, options) => {
13195
+ if (abortController.signal.aborted) {
13196
+ throw new McpError(ErrorCode.ConnectionClosed, "Request was cancelled");
13197
+ }
13189
13198
  const requestOptions = { ...options, relatedRequestId: request.id };
13190
13199
  if (relatedTaskId && !requestOptions.relatedTask) {
13191
13200
  requestOptions.relatedTask = { taskId: relatedTaskId };
@@ -20072,6 +20081,25 @@ var ToolManager = class {
20072
20081
  execute: tool2.callback
20073
20082
  };
20074
20083
  }
20084
+ /**
20085
+ * Get all tools as ComposedTool objects with execute callback
20086
+ * Includes both public and internal tools
20087
+ */
20088
+ getAllComposedTools() {
20089
+ const composedTools = [];
20090
+ for (const [name, tool2] of this.toolRegistry.entries()) {
20091
+ composedTools.push({
20092
+ name,
20093
+ description: tool2.description,
20094
+ inputSchema: tool2.schema ?? {
20095
+ type: "object",
20096
+ properties: {}
20097
+ },
20098
+ execute: tool2.callback
20099
+ });
20100
+ }
20101
+ return composedTools;
20102
+ }
20075
20103
  };
20076
20104
 
20077
20105
  // __mcpc__core_latest/node_modules/@mcpc/core/src/utils/common/schema.js
@@ -20552,6 +20580,50 @@ var ComposableMCPServer = class extends Server {
20552
20580
  const publicToolNames = this.getPublicToolNames();
20553
20581
  return allToolNames.filter((name) => !publicToolNames.includes(name));
20554
20582
  }
20583
+ /**
20584
+ * Get all internal tools with their full metadata (description, schema)
20585
+ * Internal tools are not exposed to MCP clients but available within the agent
20586
+ */
20587
+ getInternalTools() {
20588
+ const internalNames = this.getInternalToolNames();
20589
+ const registry2 = this.toolManager.getToolRegistry();
20590
+ return internalNames.map((name) => {
20591
+ const tool2 = registry2.get(name);
20592
+ return {
20593
+ name,
20594
+ description: tool2?.description || "",
20595
+ inputSchema: tool2?.schema || {
20596
+ type: "object"
20597
+ }
20598
+ };
20599
+ });
20600
+ }
20601
+ /**
20602
+ * Get a single tool with full details including execute callback
20603
+ * Works for both public and internal tools
20604
+ */
20605
+ getComposedTool(name) {
20606
+ return this.toolManager.getComposedTool(name);
20607
+ }
20608
+ /**
20609
+ * Get all tools (public and internal) as composed tools with execute callback
20610
+ */
20611
+ getAllComposedTools() {
20612
+ return this.toolManager.getAllComposedTools();
20613
+ }
20614
+ /**
20615
+ * Get all tools (public and internal) with full details
20616
+ */
20617
+ getAllTools() {
20618
+ const registry2 = this.toolManager.getToolRegistry();
20619
+ return Array.from(registry2.entries()).map(([name, tool2]) => ({
20620
+ name,
20621
+ description: tool2?.description || "",
20622
+ inputSchema: tool2?.schema || {
20623
+ type: "object"
20624
+ }
20625
+ }));
20626
+ }
20555
20627
  /**
20556
20628
  * Get hidden tool schema by name (for internal access)
20557
20629
  */
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@mcpc-tech/core",
3
- "version": "0.3.34",
3
+ "version": "0.3.35",
4
4
  "homepage": "https://jsr.io/@mcpc/core",
5
5
  "dependencies": {
6
6
  "@ai-sdk/provider": "^2.0.0",
@@ -1,4 +1,3 @@
1
- #!/usr/bin/env node
2
1
  var __create = Object.create;
3
2
  var __defProp = Object.defineProperty;
4
3
  var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
@@ -1,7 +1,3 @@
1
- #!/usr/bin/env node
2
- import { createRequire } from 'node:module';
3
- const require = createRequire(import.meta.url);
4
-
5
1
  // __mcpc__core_latest/node_modules/@mcpc/core/src/plugins/large-result.ts
6
2
  import { mkdtemp, writeFile } from "node:fs/promises";
7
3
  import { join } from "node:path";
@@ -1,4 +1,3 @@
1
- #!/usr/bin/env node
2
1
  var __create = Object.create;
3
2
  var __defProp = Object.defineProperty;
4
3
  var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
@@ -1,7 +1,3 @@
1
- #!/usr/bin/env node
2
- import { createRequire } from 'node:module';
3
- const require = createRequire(import.meta.url);
4
-
5
1
  // __mcpc__core_latest/node_modules/@mcpc/core/src/plugins/search-tool.ts
6
2
  import rg from "@mcpc-tech/ripgrep-napi";
7
3
  import { tmpdir } from "node:os";
@@ -1,4 +1,3 @@
1
- #!/usr/bin/env node
2
1
  var __defProp = Object.defineProperty;
3
2
  var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
3
  var __getOwnPropNames = Object.getOwnPropertyNames;
@@ -1,7 +1,3 @@
1
- #!/usr/bin/env node
2
- import { createRequire } from 'node:module';
3
- const require = createRequire(import.meta.url);
4
-
5
1
  // __mcpc__core_latest/node_modules/@mcpc/core/src/plugins/skills.ts
6
2
  import { readdir, readFile } from "node:fs/promises";
7
3
  import { join, relative, resolve } from "node:path";
package/plugins.cjs CHANGED
@@ -1,4 +1,3 @@
1
- #!/usr/bin/env node
2
1
  var __create = Object.create;
3
2
  var __defProp = Object.defineProperty;
4
3
  var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
package/plugins.mjs CHANGED
@@ -1,7 +1,3 @@
1
- #!/usr/bin/env node
2
- import { createRequire } from 'node:module';
3
- const require = createRequire(import.meta.url);
4
-
5
1
  // __mcpc__core_latest/node_modules/@mcpc/core/src/plugins/search-tool.js
6
2
  import rg from "@mcpc-tech/ripgrep-napi";
7
3
  import { tmpdir } from "node:os";
@@ -4,7 +4,7 @@ import type { MCPSetting } from "./service/tools.js";
4
4
  import { Server, type ServerOptions } from "@modelcontextprotocol/sdk/server/index.js";
5
5
  import type { ComposeDefinition, FileLoader } from "./set-up-mcp-compose.js";
6
6
  import type { JSONSchema, ToolCallback } from "./types.js";
7
- import type { ToolConfig, ToolPlugin } from "./plugin-types.js";
7
+ import type { ComposedTool, ToolConfig, ToolPlugin } from "./plugin-types.js";
8
8
  export declare class ComposableMCPServer extends Server {
9
9
  private pluginManager: any;
10
10
  private toolManager: any;
@@ -76,6 +76,28 @@ export declare class ComposableMCPServer extends Server {
76
76
  /**
77
77
  * Get all internal tool names (tools that are not public)
78
78
  */ getInternalToolNames(): string[];
79
+ /**
80
+ * Get all internal tools with their full metadata (description, schema)
81
+ * Internal tools are not exposed to MCP clients but available within the agent
82
+ */ getInternalTools(): Array<{
83
+ name: string;
84
+ description: string;
85
+ inputSchema: JSONSchema;
86
+ }>;
87
+ /**
88
+ * Get a single tool with full details including execute callback
89
+ * Works for both public and internal tools
90
+ */ getComposedTool(name: string): ComposedTool | undefined;
91
+ /**
92
+ * Get all tools (public and internal) as composed tools with execute callback
93
+ */ getAllComposedTools(): ComposedTool[];
94
+ /**
95
+ * Get all tools (public and internal) with full details
96
+ */ getAllTools(): Array<{
97
+ name: string;
98
+ description: string;
99
+ inputSchema: JSONSchema;
100
+ }>;
79
101
  /**
80
102
  * Get hidden tool schema by name (for internal access)
81
103
  */ getHiddenToolSchema(name: string): {
@@ -1 +1 @@
1
- {"version":3,"file":"compose.d.ts","sources":["../../src/compose.ts"],"names":[],"mappings":"AAAA,SAGE,KAAK,cAAc,EAGnB,KAAK,IAAI,6CAC8C;AACzD,SAAwC,KAAK,MAAM,4BAA4B;AAC/E,cAAc,UAAU,6BAA6B;AACrD,SACE,MAAM,EACN,KAAK,aAAa,oDAC4C;AAGhE,cAAc,iBAAiB,EAAE,UAAU,kCAAkC;AAC7E,cAAc,UAAU,EAAE,YAAY,qBAAqB;AAM3D,cAA4B,UAAU,EAAE,UAAU,4BAA4B;AAe9E,OAAO,cAAM,4BAA4B;EACvC,QAAQ,mBAA6B;EACrC,QAAQ,iBAAyB;EACjC,QAAQ,YAAsC;EAC9C,QAAQ,iBAA4C;EAGpD,IAAI,mBAAmB,IAAI,MAAM,EAAE,MAAM;EAIzC,YAAY,aAAa,cAAc,EAAE,SAAS,aAAa;EAiB/D;;;;;;;;;;;;;;;GAeC,GACD,mBAAmB,WAAW,MAAM,EAAE,QAAQ,UAAU,GAAG,IAAI;EAI/D;;GAEC,GACD,cAAc,WAAW,MAAM,GAAG,aAAa,SAAS;EAIxD;;GAEC,GACD,cAAc,WAAW,MAAM,GAAG,OAAO;EAIzC;;GAEC,GACD,2BAA2B,MAAM;EAIjC;;;GAGC,GACD,AAAM,gBAAgB,UAAU,MAAM,GAAG,QAAQ;EAqBjD;;GAEC,GACD,AAAM,sBAAsB,QAAQ,IAAI;UAqB1B;UAsDN;EAIR,KAAK,GACH,MAAM,MAAM,EACZ,aAAa,MAAM,EACnB,cAAc,OAAO,KAAK,UAAU,EACpC,KAAK,MAAM,GAAG,QAAQ,OAAO,KAAK,OAAO,EACzC;IAAW,WAAW,OAAO;IAAE,SAAS,OAAO;IAAE,UAAU;GACvD;EA+JN;;GAEC,GACD,gBAAgB,MAAM,MAAM,GAAG,eAAe,SAAS;EAIvD;;GAEC,GACD,eAAe,QAAQ,MAAM,GAAG,aAAa,SAAS;EAItD;;;GAGC,GACD,AAAM,SACJ,MAAM,MAAM,EACZ,MAAM,OAAO,EACb;IAAW,YAAY,MAAM;IAAE,iBAAiB,MAAM;GAAS,GAC9D,QAAQ,OAAO;EA4JlB;;GAEC,GACD,sBAAsB,MAAM;EAI5B;;GAEC,GACD,kBAAkB;EAIlB;;GAEC,GACD,sBAAsB,MAAM;EAI5B;;GAEC,GACD,wBAAwB,MAAM;EAM9B;;GAEC,GACD,oBACE,MAAM,MAAM;IACT,aAAa,MAAM;IAAE,QAAQ;MAAe,SAAS;EAI1D;;GAEC,GACD,aAAa,MAAM,MAAM,GAAG,OAAO;EAInC;;GAEC,GACD,WAAW,UAAU,MAAM,EAAE,QAAQ,UAAU,GAAG,IAAI;EAItD;;GAEC,GACD,cAAc,UAAU,MAAM,GAAG,aAAa,SAAS;EAIvD;;GAEC,GACD,iBAAiB,UAAU,MAAM,GAAG,OAAO;EAI3C;;GAEC,GACD,AAAM,UAAU,QAAQ,UAAU,GAAG,QAAQ,IAAI;EAIjD;;GAEC,GACD,AAAM,mBACJ,YAAY,MAAM,EAClB;IAAW,QAAQ,OAAO;GAAoB,GAC7C,QAAQ,IAAI;UAOD;EAOd;;GAEC,GACD,AAAM,kBAAkB,QAAQ,IAAI;EAIpC;;GAEC,GACD,SAAe,SAAS,QAAQ,IAAI;EAK9B,QACJ,MAAM,MAAM,GAAG,IAAI,EACnB,aAAa,MAAM,EACnB,aAAY,UAA+B,EAC3C,UAAS,kBAAkB,UAAgC,EAC3D,SAAS,MAAM;AAoRnB"}
1
+ {"version":3,"file":"compose.d.ts","sources":["../../src/compose.ts"],"names":[],"mappings":"AAAA,SAGE,KAAK,cAAc,EAGnB,KAAK,IAAI,6CAC8C;AACzD,SAAwC,KAAK,MAAM,4BAA4B;AAC/E,cAAc,UAAU,6BAA6B;AACrD,SACE,MAAM,EACN,KAAK,aAAa,oDAC4C;AAGhE,cAAc,iBAAiB,EAAE,UAAU,kCAAkC;AAC7E,cAAc,UAAU,EAAE,YAAY,qBAAqB;AAM3D,cAAc,YAAY,EAAE,UAAU,EAAE,UAAU,4BAA4B;AAe9E,OAAO,cAAM,4BAA4B;EACvC,QAAQ,mBAA6B;EACrC,QAAQ,iBAAyB;EACjC,QAAQ,YAAsC;EAC9C,QAAQ,iBAA4C;EAGpD,IAAI,mBAAmB,IAAI,MAAM,EAAE,MAAM;EAIzC,YAAY,aAAa,cAAc,EAAE,SAAS,aAAa;EAiB/D;;;;;;;;;;;;;;;GAeC,GACD,mBAAmB,WAAW,MAAM,EAAE,QAAQ,UAAU,GAAG,IAAI;EAI/D;;GAEC,GACD,cAAc,WAAW,MAAM,GAAG,aAAa,SAAS;EAIxD;;GAEC,GACD,cAAc,WAAW,MAAM,GAAG,OAAO;EAIzC;;GAEC,GACD,2BAA2B,MAAM;EAIjC;;;GAGC,GACD,AAAM,gBAAgB,UAAU,MAAM,GAAG,QAAQ;EAqBjD;;GAEC,GACD,AAAM,sBAAsB,QAAQ,IAAI;UAqB1B;UAsDN;EAIR,KAAK,GACH,MAAM,MAAM,EACZ,aAAa,MAAM,EACnB,cAAc,OAAO,KAAK,UAAU,EACpC,KAAK,MAAM,GAAG,QAAQ,OAAO,KAAK,OAAO,EACzC;IAAW,WAAW,OAAO;IAAE,SAAS,OAAO;IAAE,UAAU;GACvD;EA+JN;;GAEC,GACD,gBAAgB,MAAM,MAAM,GAAG,eAAe,SAAS;EAIvD;;GAEC,GACD,eAAe,QAAQ,MAAM,GAAG,aAAa,SAAS;EAItD;;;GAGC,GACD,AAAM,SACJ,MAAM,MAAM,EACZ,MAAM,OAAO,EACb;IAAW,YAAY,MAAM;IAAE,iBAAiB,MAAM;GAAS,GAC9D,QAAQ,OAAO;EA4JlB;;GAEC,GACD,sBAAsB,MAAM;EAI5B;;GAEC,GACD,kBAAkB;EAIlB;;GAEC,GACD,sBAAsB,MAAM;EAI5B;;GAEC,GACD,wBAAwB,MAAM;EAM9B;;;GAGC,GACD,oBAAoB;IAClB,MAAM,MAAM;IACZ,aAAa,MAAM;IACnB,aAAa;;EAef;;;GAGC,GACD,gBAAgB,MAAM,MAAM,GAAG,eAAe,SAAS;EAIvD;;GAEC,GACD,uBAAuB;EAIvB;;GAEC,GACD,eAAe;IACb,MAAM,MAAM;IACZ,aAAa,MAAM;IACnB,aAAa;;EAWf;;GAEC,GACD,oBACE,MAAM,MAAM;IACT,aAAa,MAAM;IAAE,QAAQ;MAAe,SAAS;EAI1D;;GAEC,GACD,aAAa,MAAM,MAAM,GAAG,OAAO;EAInC;;GAEC,GACD,WAAW,UAAU,MAAM,EAAE,QAAQ,UAAU,GAAG,IAAI;EAItD;;GAEC,GACD,cAAc,UAAU,MAAM,GAAG,aAAa,SAAS;EAIvD;;GAEC,GACD,iBAAiB,UAAU,MAAM,GAAG,OAAO;EAI3C;;GAEC,GACD,AAAM,UAAU,QAAQ,UAAU,GAAG,QAAQ,IAAI;EAIjD;;GAEC,GACD,AAAM,mBACJ,YAAY,MAAM,EAClB;IAAW,QAAQ,OAAO;GAAoB,GAC7C,QAAQ,IAAI;UAOD;EAOd;;GAEC,GACD,AAAM,kBAAkB,QAAQ,IAAI;EAIpC;;GAEC,GACD,SAAe,SAAS,QAAQ,IAAI;EAK9B,QACJ,MAAM,MAAM,GAAG,IAAI,EACnB,aAAa,MAAM,EACnB,aAAY,UAA+B,EAC3C,UAAS,kBAAkB,UAAgC,EAC3D,SAAS,MAAM;AAoRnB"}