@autobe/agent 0.0.0 → 0.3.6

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.
Files changed (166) hide show
  1. package/LICENSE +21 -21
  2. package/lib/AutoBeAgent.d.ts +9 -7
  3. package/lib/AutoBeAgent.js +106 -14
  4. package/lib/AutoBeAgent.js.map +1 -1
  5. package/lib/analyze/AnalyzeAgent.d.ts +24 -0
  6. package/lib/analyze/AnalyzeAgent.js +817 -0
  7. package/lib/analyze/AnalyzeAgent.js.map +1 -0
  8. package/lib/analyze/CreateReviewerAgent.d.ts +16 -0
  9. package/lib/analyze/CreateReviewerAgent.js +97 -0
  10. package/lib/analyze/CreateReviewerAgent.js.map +1 -0
  11. package/lib/analyze/Planning.d.ts +63 -0
  12. package/lib/{orchestrate/orchestratePrisma.js → analyze/Planning.js} +28 -11
  13. package/lib/analyze/Planning.js.map +1 -0
  14. package/lib/constants/AutoBeSystemPromptConstant.d.ts +14 -0
  15. package/lib/constants/AutoBeSystemPromptConstant.js +4 -0
  16. package/lib/constants/AutoBeSystemPromptConstant.js.map +1 -0
  17. package/lib/context/AutoBeContext.d.ts +7 -3
  18. package/lib/context/IAutoBeApplication.d.ts +72 -32
  19. package/lib/context/IAutoBeApplicationProps.d.ts +22 -2
  20. package/lib/context/IAutoBeApplicationResult.d.ts +0 -1
  21. package/lib/context/assertSchemaModel.d.ts +2 -0
  22. package/lib/context/assertSchemaModel.js +15 -0
  23. package/lib/context/assertSchemaModel.js.map +1 -0
  24. package/lib/{internal/transformAgenticaHistory.d.ts → factory/createAgenticaHistory.d.ts} +1 -1
  25. package/lib/{internal/transformAgenticaHistory.js → factory/createAgenticaHistory.js} +3 -4
  26. package/lib/factory/createAgenticaHistory.js.map +1 -0
  27. package/lib/factory/createAutoBeApplication.js +1195 -0
  28. package/lib/factory/createAutoBeApplication.js.map +1 -0
  29. package/lib/factory/createAutoBeState.js.map +1 -0
  30. package/lib/factory/index.d.ts +2 -0
  31. package/lib/factory/index.js +19 -0
  32. package/lib/factory/index.js.map +1 -0
  33. package/lib/factory/invertOpenApiDocument.d.ts +3 -0
  34. package/lib/factory/invertOpenApiDocument.js +51 -0
  35. package/lib/factory/invertOpenApiDocument.js.map +1 -0
  36. package/lib/index.d.ts +3 -3
  37. package/lib/index.js +4 -4
  38. package/lib/index.js.map +1 -1
  39. package/lib/index.mjs +5455 -547
  40. package/lib/index.mjs.map +1 -1
  41. package/lib/orchestrate/facade/transformFacadeStateMessage.d.ts +2 -0
  42. package/lib/orchestrate/facade/transformFacadeStateMessage.js +46 -0
  43. package/lib/orchestrate/facade/transformFacadeStateMessage.js.map +1 -0
  44. package/lib/orchestrate/index.d.ts +2 -2
  45. package/lib/orchestrate/index.js +2 -2
  46. package/lib/orchestrate/index.js.map +1 -1
  47. package/lib/orchestrate/interface/OpenApiEndpointComparator.d.ts +5 -0
  48. package/lib/orchestrate/interface/OpenApiEndpointComparator.js +16 -0
  49. package/lib/orchestrate/interface/OpenApiEndpointComparator.js.map +1 -0
  50. package/lib/orchestrate/interface/orchestrateInterface.d.ts +5 -0
  51. package/lib/orchestrate/interface/orchestrateInterface.js +61 -0
  52. package/lib/orchestrate/interface/orchestrateInterface.js.map +1 -0
  53. package/lib/orchestrate/interface/orchestrateInterfaceComponents.d.ts +4 -0
  54. package/lib/orchestrate/interface/orchestrateInterfaceComponents.js +702 -0
  55. package/lib/orchestrate/interface/orchestrateInterfaceComponents.js.map +1 -0
  56. package/lib/orchestrate/interface/orchestrateInterfaceEndpoints.d.ts +4 -0
  57. package/lib/orchestrate/interface/orchestrateInterfaceEndpoints.js +452 -0
  58. package/lib/orchestrate/interface/orchestrateInterfaceEndpoints.js.map +1 -0
  59. package/lib/orchestrate/interface/orchestrateInterfaceOperations.d.ts +4 -0
  60. package/lib/orchestrate/interface/orchestrateInterfaceOperations.js +2065 -0
  61. package/lib/orchestrate/interface/orchestrateInterfaceOperations.js.map +1 -0
  62. package/lib/orchestrate/interface/transformInterfaceHistories.d.ts +3 -0
  63. package/lib/orchestrate/interface/transformInterfaceHistories.js +94 -0
  64. package/lib/orchestrate/interface/transformInterfaceHistories.js.map +1 -0
  65. package/lib/orchestrate/orchestrateAnalyze.d.ts +1 -3
  66. package/lib/orchestrate/orchestrateAnalyze.js +60 -6
  67. package/lib/orchestrate/orchestrateAnalyze.js.map +1 -1
  68. package/lib/orchestrate/{orchestratePrisma.d.ts → prisma/orchestratePrisma.d.ts} +3 -6
  69. package/lib/orchestrate/prisma/orchestratePrisma.js +103 -0
  70. package/lib/orchestrate/prisma/orchestratePrisma.js.map +1 -0
  71. package/lib/orchestrate/prisma/orchestratePrismaCompiler.d.ts +6 -0
  72. package/lib/orchestrate/prisma/orchestratePrismaCompiler.js +436 -0
  73. package/lib/orchestrate/prisma/orchestratePrismaCompiler.js.map +1 -0
  74. package/lib/orchestrate/prisma/orchestratePrismaComponent.d.ts +5 -0
  75. package/lib/orchestrate/prisma/orchestratePrismaComponent.js +437 -0
  76. package/lib/orchestrate/prisma/orchestratePrismaComponent.js.map +1 -0
  77. package/lib/orchestrate/prisma/orchestratePrismaSchema.d.ts +7 -0
  78. package/lib/orchestrate/prisma/orchestratePrismaSchema.js +369 -0
  79. package/lib/orchestrate/prisma/orchestratePrismaSchema.js.map +1 -0
  80. package/lib/orchestrate/prisma/transformPrismaCompilerHistories.d.ts +3 -0
  81. package/lib/orchestrate/prisma/transformPrismaCompilerHistories.js +44 -0
  82. package/lib/orchestrate/prisma/transformPrismaCompilerHistories.js.map +1 -0
  83. package/lib/orchestrate/prisma/transformPrismaComponentsHistories.d.ts +3 -0
  84. package/lib/orchestrate/prisma/transformPrismaComponentsHistories.js +42 -0
  85. package/lib/orchestrate/prisma/transformPrismaComponentsHistories.js.map +1 -0
  86. package/lib/orchestrate/prisma/transformPrismaHistories.d.ts +3 -0
  87. package/lib/orchestrate/prisma/transformPrismaHistories.js +46 -0
  88. package/lib/orchestrate/prisma/transformPrismaHistories.js.map +1 -0
  89. package/lib/orchestrate/prisma/transformPrismaSchemaHistories.d.ts +3 -0
  90. package/lib/orchestrate/prisma/transformPrismaSchemaHistories.js +46 -0
  91. package/lib/orchestrate/prisma/transformPrismaSchemaHistories.js.map +1 -0
  92. package/lib/structures/IAutoBeConfig.d.ts +4 -4
  93. package/lib/utils/StringUtil.d.ts +4 -0
  94. package/lib/utils/StringUtil.js +43 -0
  95. package/lib/utils/StringUtil.js.map +1 -0
  96. package/lib/utils/divideArray.d.ts +4 -0
  97. package/lib/utils/divideArray.js +19 -0
  98. package/lib/utils/divideArray.js.map +1 -0
  99. package/lib/utils/emplaceMap.d.ts +1 -0
  100. package/lib/utils/emplaceMap.js +13 -0
  101. package/lib/utils/emplaceMap.js.map +1 -0
  102. package/package.json +29 -8
  103. package/src/AutoBeAgent.ts +227 -101
  104. package/src/analyze/AnalyzeAgent.ts +167 -0
  105. package/src/analyze/CreateReviewerAgent.ts +126 -0
  106. package/src/analyze/Planning.ts +75 -0
  107. package/src/constants/AutoBeSystemPromptConstant.ts +15 -0
  108. package/src/context/AutoBeContext.ts +19 -15
  109. package/src/context/AutoBeState.ts +15 -15
  110. package/src/context/AutoBeTokenUsage.ts +3 -3
  111. package/src/context/IAutoBeApplication.ts +112 -72
  112. package/src/context/IAutoBeApplicationProps.ts +27 -6
  113. package/src/context/IAutoBeApplicationResult.ts +3 -4
  114. package/src/context/assertSchemaModel.ts +17 -0
  115. package/src/{internal/transformAgenticaHistory.ts → factory/createAgenticaHistory.ts} +51 -54
  116. package/src/{internal → factory}/createAutoBeApplication.ts +52 -47
  117. package/src/{internal → factory}/createAutoBeState.ts +14 -14
  118. package/src/factory/index.ts +2 -0
  119. package/src/factory/invertOpenApiDocument.ts +63 -0
  120. package/src/index.ts +13 -12
  121. package/src/orchestrate/facade/transformFacadeStateMessage.ts +58 -0
  122. package/src/orchestrate/index.ts +5 -5
  123. package/src/orchestrate/interface/OpenApiEndpointComparator.ts +15 -0
  124. package/src/orchestrate/interface/orchestrateInterface.ts +66 -0
  125. package/src/orchestrate/interface/orchestrateInterfaceComponents.ts +324 -0
  126. package/src/orchestrate/interface/orchestrateInterfaceEndpoints.ts +140 -0
  127. package/src/orchestrate/interface/orchestrateInterfaceOperations.ts +247 -0
  128. package/src/orchestrate/interface/transformInterfaceHistories.ts +98 -0
  129. package/src/orchestrate/orchestrateAnalyze.ts +86 -21
  130. package/src/orchestrate/orchestrateRealize.ts +18 -18
  131. package/src/orchestrate/orchestrateTest.ts +18 -18
  132. package/src/orchestrate/prisma/orchestratePrisma.ts +117 -0
  133. package/src/orchestrate/prisma/orchestratePrismaCompiler.ts +194 -0
  134. package/src/orchestrate/prisma/orchestratePrismaComponent.ts +176 -0
  135. package/src/orchestrate/prisma/orchestratePrismaSchema.ts +181 -0
  136. package/src/orchestrate/prisma/transformPrismaCompilerHistories.ts +49 -0
  137. package/src/orchestrate/prisma/transformPrismaComponentsHistories.ts +46 -0
  138. package/src/orchestrate/prisma/transformPrismaHistories.ts +50 -0
  139. package/src/orchestrate/prisma/transformPrismaSchemaHistories.ts +50 -0
  140. package/src/structures/IAutoBeConfig.ts +25 -25
  141. package/src/structures/IAutoBeProps.ts +13 -13
  142. package/src/structures/IAutoBeVendor.ts +3 -3
  143. package/src/utils/StringUtil.ts +45 -0
  144. package/src/utils/divideArray.ts +16 -0
  145. package/src/utils/emplaceMap.ts +14 -0
  146. package/lib/factory/transformRouteDocument.d.ts +0 -3
  147. package/lib/factory/transformRouteDocument.js +0 -50
  148. package/lib/factory/transformRouteDocument.js.map +0 -1
  149. package/lib/internal/createAutoBeApplication.js +0 -1452
  150. package/lib/internal/createAutoBeApplication.js.map +0 -1
  151. package/lib/internal/createAutoBeState.js.map +0 -1
  152. package/lib/internal/transformAgenticaHistory.js.map +0 -1
  153. package/lib/orchestrate/interface/AutoBeInterfaceAgent.d.ts +0 -0
  154. package/lib/orchestrate/interface/AutoBeInterfaceAgent.js +0 -2
  155. package/lib/orchestrate/interface/AutoBeInterfaceAgent.js.map +0 -1
  156. package/lib/orchestrate/orchestrateInterface.d.ts +0 -8
  157. package/lib/orchestrate/orchestrateInterface.js +0 -22
  158. package/lib/orchestrate/orchestrateInterface.js.map +0 -1
  159. package/lib/orchestrate/orchestratePrisma.js.map +0 -1
  160. package/src/factory/transformRouteDocument.ts +0 -49
  161. package/src/orchestrate/interface/AutoBeInterfaceAgent.ts +0 -0
  162. package/src/orchestrate/orchestrateInterface.ts +0 -21
  163. package/src/orchestrate/orchestratePrisma.ts +0 -21
  164. /package/lib/{internal → factory}/createAutoBeApplication.d.ts +0 -0
  165. /package/lib/{internal → factory}/createAutoBeState.d.ts +0 -0
  166. /package/lib/{internal → factory}/createAutoBeState.js +0 -0
@@ -0,0 +1,50 @@
1
+ import { IAgenticaHistoryJson } from "@agentica/core";
2
+
3
+ import { AutoBeSystemPromptConstant } from "../../constants/AutoBeSystemPromptConstant";
4
+ import { AutoBeState } from "../../context/AutoBeState";
5
+
6
+ export const transformPrismaSchemaHistories = (
7
+ state: AutoBeState,
8
+ ): Array<
9
+ IAgenticaHistoryJson.IAssistantMessage | IAgenticaHistoryJson.ISystemMessage
10
+ > => {
11
+ if (state.analyze === null)
12
+ return [
13
+ {
14
+ type: "systemMessage",
15
+ text: [
16
+ "Requirement analysis is not yet completed.",
17
+ "Don't call any tool function,",
18
+ "but say to process the requirement analysis.",
19
+ ].join(" "),
20
+ },
21
+ ];
22
+ return [
23
+ {
24
+ type: "systemMessage",
25
+ text: AutoBeSystemPromptConstant.PRISMA_SCHEMA,
26
+ },
27
+ {
28
+ type: "assistantMessage",
29
+ text: AutoBeSystemPromptConstant.PRISMA_EXAMPLE,
30
+ },
31
+ {
32
+ type: "assistantMessage",
33
+ text: [
34
+ "Here is the requirement analysis report.",
35
+ "",
36
+ "Call the provided tool function to generate Prisma DB schema",
37
+ "referencing below requirement analysis report.",
38
+ "",
39
+ "## User Request",
40
+ state.analyze.reason,
41
+ "",
42
+ `## Requirement Analysis Report`,
43
+ "",
44
+ "```json",
45
+ JSON.stringify(state.analyze.files),
46
+ "```",
47
+ ].join("\n"),
48
+ },
49
+ ];
50
+ };
@@ -1,25 +1,25 @@
1
- export interface IAutoBeConfig {
2
- /**
3
- * Locale of the A.I. chatbot.
4
- *
5
- * If you configure this property, the A.I. chatbot will conversate with
6
- * the given locale. You can get the locale value by
7
- *
8
- * - Browser: `navigator.language`
9
- * - NodeJS: `process.env.LANG.split(".")[0]`
10
- *
11
- * @default your_locale
12
- */
13
- locale?: string;
14
-
15
- /**
16
- * Timezone of the A.I. chatbot.
17
- *
18
- * If you configure this property, the A.I. chatbot will consider the
19
- * given timezone. You can get the timezone value by
20
- * `Intl.DateTimeFormat().resolvedOptions().timeZone`.
21
- *
22
- * @default your_timezone
23
- */
24
- timezone?: string;
25
- }
1
+ export interface IAutoBeConfig {
2
+ /**
3
+ * Locale of the A.I. chatbot.
4
+ *
5
+ * If you configure this property, the A.I. chatbot will conversate with the
6
+ * given locale. You can get the locale value by
7
+ *
8
+ * - Browser: `navigator.language`
9
+ * - NodeJS: `process.env.LANG.split(".")[0]`
10
+ *
11
+ * @default your_locale
12
+ */
13
+ locale?: string;
14
+
15
+ /**
16
+ * Timezone of the A.I. chatbot.
17
+ *
18
+ * If you configure this property, the A.I. chatbot will consider the given
19
+ * timezone. You can get the timezone value by
20
+ * `Intl.DateTimeFormat().resolvedOptions().timeZone`.
21
+ *
22
+ * @default your_timezone
23
+ */
24
+ timezone?: string;
25
+ }
@@ -1,13 +1,13 @@
1
- import { AutoBeHistory, IAutoBeCompiler } from "@autobe/interface";
2
- import { ILlmSchema } from "@samchon/openapi";
3
-
4
- import { IAutoBeConfig } from "./IAutoBeConfig";
5
- import { IAutoBeVendor } from "./IAutoBeVendor";
6
-
7
- export interface IAutoBeProps<Model extends ILlmSchema.Model> {
8
- model: Model;
9
- vendor: IAutoBeVendor;
10
- compiler: IAutoBeCompiler;
11
- histories?: AutoBeHistory[] | undefined;
12
- config?: IAutoBeConfig | undefined;
13
- }
1
+ import { AutoBeHistory, IAutoBeCompiler } from "@autobe/interface";
2
+ import { ILlmSchema } from "@samchon/openapi";
3
+
4
+ import { IAutoBeConfig } from "./IAutoBeConfig";
5
+ import { IAutoBeVendor } from "./IAutoBeVendor";
6
+
7
+ export interface IAutoBeProps<Model extends ILlmSchema.Model> {
8
+ model: Model;
9
+ vendor: IAutoBeVendor;
10
+ compiler: IAutoBeCompiler;
11
+ histories?: AutoBeHistory[] | undefined;
12
+ config?: IAutoBeConfig | undefined;
13
+ }
@@ -1,3 +1,3 @@
1
- import { IAgenticaVendor } from "@agentica/core";
2
-
3
- export type IAutoBeVendor = IAgenticaVendor;
1
+ import { IAgenticaVendor } from "@agentica/core";
2
+
3
+ export type IAutoBeVendor = IAgenticaVendor;
@@ -0,0 +1,45 @@
1
+ export namespace StringUtil {
2
+ export function trim(
3
+ strings: TemplateStringsArray,
4
+ ...values: any[]
5
+ ): string {
6
+ let result: string = strings[0];
7
+ for (let i = 0; i < values.length; i++) {
8
+ result += String(values[i]) + strings[i + 1];
9
+ }
10
+
11
+ const lines: string[] = result.split("\n");
12
+ while (lines.length > 0 && lines[0].trim() === "") {
13
+ lines.shift();
14
+ }
15
+ while (lines.length > 0 && lines[lines.length - 1].trim() === "") {
16
+ lines.pop();
17
+ }
18
+ if (lines.length === 0) return "";
19
+
20
+ const firstNonEmptyLine: string | undefined = lines.find(
21
+ (line) => line.trim() !== "",
22
+ );
23
+ if (!firstNonEmptyLine) return "";
24
+
25
+ const leadingWhitespace: string =
26
+ firstNonEmptyLine.match(/^[ \t]*/)?.[0] || "";
27
+ const indentLength: number = leadingWhitespace.length;
28
+ const trimmedLines: string[] = lines.map((line) => {
29
+ if (line.trim() === "") return "";
30
+ return line.slice(indentLength);
31
+ });
32
+ return trimmedLines.join("\n");
33
+ }
34
+
35
+ export function singleLine(
36
+ strings: TemplateStringsArray,
37
+ ...values: any[]
38
+ ): string {
39
+ let result: string = strings[0];
40
+ for (let i = 0; i < values.length; i++) {
41
+ result += String(values[i]) + strings[i + 1];
42
+ }
43
+ return result.replace(/\n/g, " ").replace(/\s+/g, " ").trim();
44
+ }
45
+ }
@@ -0,0 +1,16 @@
1
+ export function divideArray<T>(props: { array: T[]; capacity: number }): T[][] {
2
+ if (props.capacity <= 0) {
3
+ throw new Error("Capacity must be a positive integer");
4
+ }
5
+ if (Number.isNaN(props.capacity)) {
6
+ throw new TypeError("Capacity must be a positive integer");
7
+ }
8
+ if (props.capacity === Infinity) {
9
+ throw new Error("Capacity must be a positive integer");
10
+ }
11
+
12
+ const size: number = Math.ceil(props.array.length / props.capacity);
13
+ const capacity: number = Math.ceil(props.array.length / size);
14
+ const replica: T[] = props.array.slice();
15
+ return Array.from({ length: size }, () => replica.splice(0, capacity));
16
+ }
@@ -0,0 +1,14 @@
1
+ export function emplaceMap<Key, T>(
2
+ dict: Map<Key, T>,
3
+ key: Key,
4
+ generator: () => T,
5
+ ): T {
6
+ const oldbie: T | undefined = dict.get(key);
7
+ if (oldbie !== undefined) {
8
+ return oldbie;
9
+ }
10
+
11
+ const value: T = generator();
12
+ dict.set(key, value);
13
+ return value;
14
+ }
@@ -1,3 +0,0 @@
1
- import { IAutoBeRouteDocument } from "@autobe/interface";
2
- import { OpenApi } from "@samchon/openapi";
3
- export declare function transformRouteDocument(route: IAutoBeRouteDocument): OpenApi.IDocument;
@@ -1,50 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.transformRouteDocument = transformRouteDocument;
4
- function transformRouteDocument(route) {
5
- var _a;
6
- var _b;
7
- const paths = {};
8
- for (const op of route.operations) {
9
- (_a = paths[_b = op.path]) !== null && _a !== void 0 ? _a : (paths[_b] = {});
10
- paths[op.path][op.method] = {
11
- parameters: op.parameters.map((p) => ({
12
- name: p.name,
13
- in: "path",
14
- schema: p.schema,
15
- description: p.description,
16
- required: true,
17
- })),
18
- requestBody: op.body
19
- ? {
20
- content: {
21
- "application/json": {
22
- schema: op.body.schema,
23
- },
24
- },
25
- description: op.description,
26
- required: true,
27
- }
28
- : undefined,
29
- responses: op.response
30
- ? {
31
- [op.method === "post" ? 201 : 200]: {
32
- content: {
33
- "application/json": {
34
- schema: op.response.schema,
35
- },
36
- },
37
- description: op.description,
38
- },
39
- }
40
- : undefined,
41
- };
42
- }
43
- return {
44
- openapi: "3.1.0",
45
- paths,
46
- components: route.components,
47
- "x-samchon-emended-v4": true,
48
- };
49
- }
50
- //# sourceMappingURL=transformRouteDocument.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"transformRouteDocument.js","sourceRoot":"","sources":["../../src/factory/transformRouteDocument.ts"],"names":[],"mappings":";;AAGA,wDA6CC;AA7CD,SAAgB,sBAAsB,CACpC,KAA2B;;;IAE3B,MAAM,KAAK,GAAkC,EAAE,CAAC;IAChD,KAAK,MAAM,EAAE,IAAI,KAAK,CAAC,UAAU,EAAE,CAAC;QAClC,MAAA,KAAK,MAAC,EAAE,CAAC,IAAI,qCAAb,KAAK,OAAc,EAAE,EAAC;QACtB,KAAK,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,GAAG;YAC1B,UAAU,EAAE,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;gBACpC,IAAI,EAAE,CAAC,CAAC,IAAI;gBACZ,EAAE,EAAE,MAAM;gBACV,MAAM,EAAE,CAAC,CAAC,MAAM;gBAChB,WAAW,EAAE,CAAC,CAAC,WAAW;gBAC1B,QAAQ,EAAE,IAAI;aACf,CAAC,CAAC;YACH,WAAW,EAAE,EAAE,CAAC,IAAI;gBAClB,CAAC,CAAC;oBACE,OAAO,EAAE;wBACP,kBAAkB,EAAE;4BAClB,MAAM,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM;yBACvB;qBACF;oBACD,WAAW,EAAE,EAAE,CAAC,WAAW;oBAC3B,QAAQ,EAAE,IAAI;iBACf;gBACH,CAAC,CAAC,SAAS;YACb,SAAS,EAAE,EAAE,CAAC,QAAQ;gBACpB,CAAC,CAAC;oBACE,CAAC,EAAE,CAAC,MAAM,KAAK,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE;wBAClC,OAAO,EAAE;4BACP,kBAAkB,EAAE;gCAClB,MAAM,EAAE,EAAE,CAAC,QAAQ,CAAC,MAAM;6BAC3B;yBACF;wBACD,WAAW,EAAE,EAAE,CAAC,WAAW;qBAC5B;iBACF;gBACH,CAAC,CAAC,SAAS;SACd,CAAC;IACJ,CAAC;IACD,OAAO;QACL,OAAO,EAAE,OAAO;QAChB,KAAK;QACL,UAAU,EAAE,KAAK,CAAC,UAAU;QAC5B,sBAAsB,EAAE,IAAI;KAC7B,CAAC;AACJ,CAAC"}