@salesforce/magen-mcp-workflow 0.0.1 → 0.0.3
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/common/graphConfig.d.ts +26 -0
- package/dist/{tools/utilities/inputExtraction/index.js → common/graphConfig.js} +2 -4
- package/dist/common/graphConfig.js.map +1 -0
- package/dist/common/metadata.d.ts +51 -10
- package/dist/common/metadata.js +9 -0
- package/dist/common/metadata.js.map +1 -1
- package/dist/execution/commandRunner.d.ts +28 -0
- package/dist/execution/commandRunner.js +162 -0
- package/dist/execution/commandRunner.js.map +1 -0
- package/dist/execution/index.d.ts +3 -0
- package/dist/execution/index.js +9 -0
- package/dist/execution/index.js.map +1 -0
- package/dist/execution/progressReporter.d.ts +33 -0
- package/dist/execution/progressReporter.js +58 -0
- package/dist/execution/progressReporter.js.map +1 -0
- package/dist/execution/types.d.ts +54 -0
- package/dist/execution/types.js +8 -0
- package/dist/execution/types.js.map +1 -0
- package/dist/index.d.ts +4 -2
- package/dist/index.js +5 -7
- package/dist/index.js.map +1 -1
- package/dist/nodes/abstractBaseNode.d.ts +29 -3
- package/dist/nodes/abstractBaseNode.js +26 -2
- package/dist/nodes/abstractBaseNode.js.map +1 -1
- package/dist/nodes/abstractToolNode.d.ts +5 -3
- package/dist/nodes/abstractToolNode.js +5 -3
- package/dist/nodes/abstractToolNode.js.map +1 -1
- package/dist/nodes/getUserInput/factory.js +2 -2
- package/dist/nodes/getUserInput/factory.js.map +1 -1
- package/dist/nodes/getUserInput/node.d.ts +19 -1
- package/dist/nodes/getUserInput/node.js +2 -2
- package/dist/nodes/getUserInput/node.js.map +1 -1
- package/dist/nodes/toolExecutor.d.ts +5 -4
- package/dist/nodes/toolExecutor.js +2 -2
- package/dist/nodes/toolExecutor.js.map +1 -1
- package/dist/routers/checkPropertiesFulfilledRouter.js +2 -2
- package/dist/routers/checkPropertiesFulfilledRouter.js.map +1 -1
- package/dist/services/abstractService.d.ts +5 -5
- package/dist/services/abstractService.js +5 -5
- package/dist/services/abstractService.js.map +1 -1
- package/dist/services/getInputService.d.ts +10 -2
- package/dist/services/getInputService.js +50 -15
- package/dist/services/getInputService.js.map +1 -1
- package/dist/services/inputExtractionService.d.ts +11 -2
- package/dist/services/inputExtractionService.js +94 -18
- package/dist/services/inputExtractionService.js.map +1 -1
- package/dist/tools/orchestrator/metadata.d.ts +49 -3
- package/dist/tools/orchestrator/metadata.js +31 -4
- package/dist/tools/orchestrator/metadata.js.map +1 -1
- package/dist/tools/orchestrator/orchestratorTool.d.ts +44 -3
- package/dist/tools/orchestrator/orchestratorTool.js +138 -13
- package/dist/tools/orchestrator/orchestratorTool.js.map +1 -1
- package/dist/tools/utilities/getInput/index.d.ts +0 -2
- package/dist/tools/utilities/getInput/index.js +0 -2
- package/dist/tools/utilities/getInput/index.js.map +1 -1
- package/dist/tools/utilities/getInput/metadata.d.ts +2 -68
- package/dist/tools/utilities/getInput/metadata.js +2 -30
- package/dist/tools/utilities/getInput/metadata.js.map +1 -1
- package/dist/tools/utilities/index.d.ts +0 -1
- package/dist/tools/utilities/index.js +0 -1
- package/dist/tools/utilities/index.js.map +1 -1
- package/dist/utils/toolExecutionUtils.d.ts +6 -6
- package/dist/utils/toolExecutionUtils.js +7 -7
- package/dist/utils/toolExecutionUtils.js.map +1 -1
- package/package.json +3 -3
- package/dist/tools/utilities/getInput/factory.d.ts +0 -43
- package/dist/tools/utilities/getInput/factory.js +0 -32
- package/dist/tools/utilities/getInput/factory.js.map +0 -1
- package/dist/tools/utilities/getInput/tool.d.ts +0 -89
- package/dist/tools/utilities/getInput/tool.js +0 -69
- package/dist/tools/utilities/getInput/tool.js.map +0 -1
- package/dist/tools/utilities/inputExtraction/factory.d.ts +0 -43
- package/dist/tools/utilities/inputExtraction/factory.js +0 -32
- package/dist/tools/utilities/inputExtraction/factory.js.map +0 -1
- package/dist/tools/utilities/inputExtraction/index.d.ts +0 -3
- package/dist/tools/utilities/inputExtraction/index.js.map +0 -1
- package/dist/tools/utilities/inputExtraction/metadata.d.ts +0 -66
- package/dist/tools/utilities/inputExtraction/metadata.js +0 -52
- package/dist/tools/utilities/inputExtraction/metadata.js.map +0 -1
- package/dist/tools/utilities/inputExtraction/tool.d.ts +0 -82
- package/dist/tools/utilities/inputExtraction/tool.js +0 -71
- package/dist/tools/utilities/inputExtraction/tool.js.map +0 -1
|
@@ -1,66 +0,0 @@
|
|
|
1
|
-
import { z } from 'zod';
|
|
2
|
-
import { WorkflowToolMetadata } from '../../../common/metadata.js';
|
|
3
|
-
/**
|
|
4
|
-
* Input Extraction Tool Input Schema
|
|
5
|
-
*/
|
|
6
|
-
export declare const INPUT_EXTRACTION_WORKFLOW_INPUT_SCHEMA: z.ZodObject<{
|
|
7
|
-
workflowStateData: z.ZodObject<{
|
|
8
|
-
thread_id: z.ZodString;
|
|
9
|
-
}, "strip", z.ZodTypeAny, {
|
|
10
|
-
thread_id: string;
|
|
11
|
-
}, {
|
|
12
|
-
thread_id: string;
|
|
13
|
-
}>;
|
|
14
|
-
} & {
|
|
15
|
-
userUtterance: z.ZodUnknown;
|
|
16
|
-
propertiesToExtract: z.ZodArray<z.ZodObject<{
|
|
17
|
-
propertyName: z.ZodString;
|
|
18
|
-
description: z.ZodString;
|
|
19
|
-
}, "strip", z.ZodTypeAny, {
|
|
20
|
-
description: string;
|
|
21
|
-
propertyName: string;
|
|
22
|
-
}, {
|
|
23
|
-
description: string;
|
|
24
|
-
propertyName: string;
|
|
25
|
-
}>, "many">;
|
|
26
|
-
resultSchema: z.ZodString;
|
|
27
|
-
}, "strip", z.ZodTypeAny, {
|
|
28
|
-
workflowStateData: {
|
|
29
|
-
thread_id: string;
|
|
30
|
-
};
|
|
31
|
-
resultSchema: string;
|
|
32
|
-
propertiesToExtract: {
|
|
33
|
-
description: string;
|
|
34
|
-
propertyName: string;
|
|
35
|
-
}[];
|
|
36
|
-
userUtterance?: unknown;
|
|
37
|
-
}, {
|
|
38
|
-
workflowStateData: {
|
|
39
|
-
thread_id: string;
|
|
40
|
-
};
|
|
41
|
-
resultSchema: string;
|
|
42
|
-
propertiesToExtract: {
|
|
43
|
-
description: string;
|
|
44
|
-
propertyName: string;
|
|
45
|
-
}[];
|
|
46
|
-
userUtterance?: unknown;
|
|
47
|
-
}>;
|
|
48
|
-
export declare const INPUT_EXTRACTION_WORKFLOW_RESULT_SCHEMA: z.ZodObject<{
|
|
49
|
-
resultSchema: z.ZodString;
|
|
50
|
-
}, "strip", z.ZodTypeAny, {
|
|
51
|
-
resultSchema: string;
|
|
52
|
-
}, {
|
|
53
|
-
resultSchema: string;
|
|
54
|
-
}>;
|
|
55
|
-
export type InputExtractionWorkflowInput = z.infer<typeof INPUT_EXTRACTION_WORKFLOW_INPUT_SCHEMA>;
|
|
56
|
-
/**
|
|
57
|
-
* Input Extraction Tool Metadata Type
|
|
58
|
-
*/
|
|
59
|
-
export type InputExtractionToolMetadata = WorkflowToolMetadata<typeof INPUT_EXTRACTION_WORKFLOW_INPUT_SCHEMA, typeof INPUT_EXTRACTION_WORKFLOW_RESULT_SCHEMA>;
|
|
60
|
-
/**
|
|
61
|
-
* Factory function to create Input Extraction Tool metadata with a dynamic tool ID
|
|
62
|
-
*
|
|
63
|
-
* @param toolId - The unique identifier for the tool (e.g., 'magen-input-extraction', 'mobile-magen-input-extraction')
|
|
64
|
-
* @returns Tool metadata object for Input Extraction Tool
|
|
65
|
-
*/
|
|
66
|
-
export declare function createInputExtractionMetadata(toolId: string): InputExtractionToolMetadata;
|
|
@@ -1,52 +0,0 @@
|
|
|
1
|
-
/*
|
|
2
|
-
* Copyright (c) 2025, salesforce.com, inc.
|
|
3
|
-
* All rights reserved.
|
|
4
|
-
* SPDX-License-Identifier: MIT
|
|
5
|
-
* For full license text, see the LICENSE file in the repo root or https://opensource.org/licenses/MIT
|
|
6
|
-
*/
|
|
7
|
-
import { z } from 'zod';
|
|
8
|
-
import { WORKFLOW_TOOL_BASE_INPUT_SCHEMA, MCP_WORKFLOW_TOOL_OUTPUT_SCHEMA, } from '../../../common/metadata.js';
|
|
9
|
-
/**
|
|
10
|
-
* Input Extraction Tool Input Schema
|
|
11
|
-
*/
|
|
12
|
-
export const INPUT_EXTRACTION_WORKFLOW_INPUT_SCHEMA = WORKFLOW_TOOL_BASE_INPUT_SCHEMA.extend({
|
|
13
|
-
userUtterance: z
|
|
14
|
-
.unknown()
|
|
15
|
-
.describe('Raw user input - can be text, structured data, or any format describing their request'),
|
|
16
|
-
propertiesToExtract: z
|
|
17
|
-
.array(z
|
|
18
|
-
.object({
|
|
19
|
-
propertyName: z.string().describe('The name of the property'),
|
|
20
|
-
description: z.string().describe('The description of the property'),
|
|
21
|
-
})
|
|
22
|
-
.describe('The name of the property and its description to correlate with the user input'))
|
|
23
|
-
.describe('The array of properties to extract from the user input'),
|
|
24
|
-
resultSchema: z
|
|
25
|
-
.string()
|
|
26
|
-
.describe('The JSON schema definining the extracted properties structure, as a string'),
|
|
27
|
-
});
|
|
28
|
-
// NOTE: This is a nominal definition, as the actual schema is dynamic, and needs to come
|
|
29
|
-
// through the input schema. Having this defined is an artifact of needing to reconsider
|
|
30
|
-
// our design for schema representation in our server tools.
|
|
31
|
-
export const INPUT_EXTRACTION_WORKFLOW_RESULT_SCHEMA = z.object({
|
|
32
|
-
resultSchema: z
|
|
33
|
-
.string()
|
|
34
|
-
.describe('The JSON schema definining the extracted properties structure, as a string'),
|
|
35
|
-
});
|
|
36
|
-
/**
|
|
37
|
-
* Factory function to create Input Extraction Tool metadata with a dynamic tool ID
|
|
38
|
-
*
|
|
39
|
-
* @param toolId - The unique identifier for the tool (e.g., 'magen-input-extraction', 'mobile-magen-input-extraction')
|
|
40
|
-
* @returns Tool metadata object for Input Extraction Tool
|
|
41
|
-
*/
|
|
42
|
-
export function createInputExtractionMetadata(toolId) {
|
|
43
|
-
return {
|
|
44
|
-
toolId,
|
|
45
|
-
title: 'Input Extraction',
|
|
46
|
-
description: 'Parses user input and extracts structured project properties',
|
|
47
|
-
inputSchema: INPUT_EXTRACTION_WORKFLOW_INPUT_SCHEMA,
|
|
48
|
-
outputSchema: MCP_WORKFLOW_TOOL_OUTPUT_SCHEMA,
|
|
49
|
-
resultSchema: INPUT_EXTRACTION_WORKFLOW_RESULT_SCHEMA,
|
|
50
|
-
};
|
|
51
|
-
}
|
|
52
|
-
//# sourceMappingURL=metadata.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"metadata.js","sourceRoot":"","sources":["../../../../src/tools/utilities/inputExtraction/metadata.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EACL,+BAA+B,EAC/B,+BAA+B,GAEhC,MAAM,6BAA6B,CAAC;AAErC;;GAEG;AACH,MAAM,CAAC,MAAM,sCAAsC,GAAG,+BAA+B,CAAC,MAAM,CAAC;IAC3F,aAAa,EAAE,CAAC;SACb,OAAO,EAAE;SACT,QAAQ,CACP,uFAAuF,CACxF;IACH,mBAAmB,EAAE,CAAC;SACnB,KAAK,CACJ,CAAC;SACE,MAAM,CAAC;QACN,YAAY,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,0BAA0B,CAAC;QAC7D,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,iCAAiC,CAAC;KACpE,CAAC;SACD,QAAQ,CAAC,+EAA+E,CAAC,CAC7F;SACA,QAAQ,CAAC,wDAAwD,CAAC;IACrE,YAAY,EAAE,CAAC;SACZ,MAAM,EAAE;SACR,QAAQ,CAAC,4EAA4E,CAAC;CAC1F,CAAC,CAAC;AAEH,yFAAyF;AACzF,wFAAwF;AACxF,4DAA4D;AAC5D,MAAM,CAAC,MAAM,uCAAuC,GAAG,CAAC,CAAC,MAAM,CAAC;IAC9D,YAAY,EAAE,CAAC;SACZ,MAAM,EAAE;SACR,QAAQ,CAAC,4EAA4E,CAAC;CAC1F,CAAC,CAAC;AAYH;;;;;GAKG;AACH,MAAM,UAAU,6BAA6B,CAAC,MAAc;IAC1D,OAAO;QACL,MAAM;QACN,KAAK,EAAE,kBAAkB;QACzB,WAAW,EAAE,8DAA8D;QAC3E,WAAW,EAAE,sCAAsC;QACnD,YAAY,EAAE,+BAA+B;QAC7C,YAAY,EAAE,uCAAuC;KAC7C,CAAC;AACb,CAAC"}
|
|
@@ -1,82 +0,0 @@
|
|
|
1
|
-
import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
|
|
2
|
-
import { Logger } from '../../../logging/logger.js';
|
|
3
|
-
import { InputExtractionWorkflowInput, InputExtractionToolMetadata } from './metadata.js';
|
|
4
|
-
import { AbstractWorkflowTool } from '../../base/abstractWorkflowTool.js';
|
|
5
|
-
export declare class InputExtractionTool extends AbstractWorkflowTool<InputExtractionToolMetadata> {
|
|
6
|
-
constructor(server: McpServer, toolId: string, orchestratorToolId: string, logger?: Logger);
|
|
7
|
-
handleRequest: (input: InputExtractionWorkflowInput) => Promise<{
|
|
8
|
-
[x: string]: unknown;
|
|
9
|
-
content: ({
|
|
10
|
-
[x: string]: unknown;
|
|
11
|
-
type: "text";
|
|
12
|
-
text: string;
|
|
13
|
-
_meta?: {
|
|
14
|
-
[x: string]: unknown;
|
|
15
|
-
} | undefined;
|
|
16
|
-
} | {
|
|
17
|
-
[x: string]: unknown;
|
|
18
|
-
type: "image";
|
|
19
|
-
data: string;
|
|
20
|
-
mimeType: string;
|
|
21
|
-
_meta?: {
|
|
22
|
-
[x: string]: unknown;
|
|
23
|
-
} | undefined;
|
|
24
|
-
} | {
|
|
25
|
-
[x: string]: unknown;
|
|
26
|
-
type: "audio";
|
|
27
|
-
data: string;
|
|
28
|
-
mimeType: string;
|
|
29
|
-
_meta?: {
|
|
30
|
-
[x: string]: unknown;
|
|
31
|
-
} | undefined;
|
|
32
|
-
} | {
|
|
33
|
-
[x: string]: unknown;
|
|
34
|
-
type: "resource_link";
|
|
35
|
-
name: string;
|
|
36
|
-
uri: string;
|
|
37
|
-
description?: string | undefined;
|
|
38
|
-
title?: string | undefined;
|
|
39
|
-
_meta?: {
|
|
40
|
-
[x: string]: unknown;
|
|
41
|
-
} | undefined;
|
|
42
|
-
mimeType?: string | undefined;
|
|
43
|
-
icons?: {
|
|
44
|
-
[x: string]: unknown;
|
|
45
|
-
src: string;
|
|
46
|
-
mimeType?: string | undefined;
|
|
47
|
-
sizes?: string[] | undefined;
|
|
48
|
-
}[] | undefined;
|
|
49
|
-
} | {
|
|
50
|
-
[x: string]: unknown;
|
|
51
|
-
type: "resource";
|
|
52
|
-
resource: {
|
|
53
|
-
[x: string]: unknown;
|
|
54
|
-
text: string;
|
|
55
|
-
uri: string;
|
|
56
|
-
_meta?: {
|
|
57
|
-
[x: string]: unknown;
|
|
58
|
-
} | undefined;
|
|
59
|
-
mimeType?: string | undefined;
|
|
60
|
-
} | {
|
|
61
|
-
[x: string]: unknown;
|
|
62
|
-
uri: string;
|
|
63
|
-
blob: string;
|
|
64
|
-
_meta?: {
|
|
65
|
-
[x: string]: unknown;
|
|
66
|
-
} | undefined;
|
|
67
|
-
mimeType?: string | undefined;
|
|
68
|
-
};
|
|
69
|
-
_meta?: {
|
|
70
|
-
[x: string]: unknown;
|
|
71
|
-
} | undefined;
|
|
72
|
-
})[];
|
|
73
|
-
_meta?: {
|
|
74
|
-
[x: string]: unknown;
|
|
75
|
-
} | undefined;
|
|
76
|
-
structuredContent?: {
|
|
77
|
-
[x: string]: unknown;
|
|
78
|
-
} | undefined;
|
|
79
|
-
isError?: boolean | undefined;
|
|
80
|
-
}>;
|
|
81
|
-
private generateInputExtractionGuidance;
|
|
82
|
-
}
|
|
@@ -1,71 +0,0 @@
|
|
|
1
|
-
/*
|
|
2
|
-
* Copyright (c) 2025, salesforce.com, inc.
|
|
3
|
-
* All rights reserved.
|
|
4
|
-
* SPDX-License-Identifier: MIT
|
|
5
|
-
* For full license text, see the LICENSE file in the repo root or https://opensource.org/licenses/MIT
|
|
6
|
-
*/
|
|
7
|
-
import { createInputExtractionMetadata, } from './metadata.js';
|
|
8
|
-
import { AbstractWorkflowTool } from '../../base/abstractWorkflowTool.js';
|
|
9
|
-
export class InputExtractionTool extends AbstractWorkflowTool {
|
|
10
|
-
constructor(server, toolId, orchestratorToolId, logger) {
|
|
11
|
-
super(server, createInputExtractionMetadata(toolId), orchestratorToolId, 'InputExtractionTool', logger);
|
|
12
|
-
}
|
|
13
|
-
handleRequest = async (input) => {
|
|
14
|
-
try {
|
|
15
|
-
const guidance = this.generateInputExtractionGuidance(input);
|
|
16
|
-
return this.finalizeWorkflowToolOutput(guidance, input.workflowStateData, input.resultSchema);
|
|
17
|
-
}
|
|
18
|
-
catch (error) {
|
|
19
|
-
const toolError = error instanceof Error ? error : new Error('Unknown error occurred');
|
|
20
|
-
return {
|
|
21
|
-
isError: true,
|
|
22
|
-
content: [
|
|
23
|
-
{
|
|
24
|
-
type: 'text',
|
|
25
|
-
text: `Error: ${toolError.message}`,
|
|
26
|
-
},
|
|
27
|
-
],
|
|
28
|
-
};
|
|
29
|
-
}
|
|
30
|
-
};
|
|
31
|
-
generateInputExtractionGuidance(input) {
|
|
32
|
-
return `
|
|
33
|
-
# ROLE
|
|
34
|
-
You are a highly accurate and precise data extraction tool.
|
|
35
|
-
|
|
36
|
-
# TASK
|
|
37
|
-
|
|
38
|
-
Your task is to analyze a user utterance and extract values for a given list of properties.
|
|
39
|
-
For each property you are asked to find, you must provide its extracted value or \`null\`
|
|
40
|
-
if no value is found.
|
|
41
|
-
|
|
42
|
-
---
|
|
43
|
-
# CONTEXT
|
|
44
|
-
|
|
45
|
-
## USER UTTERANCE TO ANALYZE
|
|
46
|
-
${JSON.stringify(input.userUtterance)}
|
|
47
|
-
|
|
48
|
-
## PROPERTIES TO EXTRACT
|
|
49
|
-
Here is the list of properties you need to find values for. Use each property's description
|
|
50
|
-
to understand what to look for.
|
|
51
|
-
|
|
52
|
-
\`\`\`json
|
|
53
|
-
${JSON.stringify(input.propertiesToExtract)}
|
|
54
|
-
\`\`\`
|
|
55
|
-
|
|
56
|
-
---
|
|
57
|
-
# INSTRUCTIONS
|
|
58
|
-
1. Carefully read the "USER UTTERANCE TO ANALYZE".
|
|
59
|
-
2. For each property listed in "PROPERTIES TO EXTRACT", search the text for a
|
|
60
|
-
corresponding value.
|
|
61
|
-
3. If a clear value is found for a property, place it in your output.
|
|
62
|
-
4. If a property's value is not ABSOLUTELY INFERABLE from USER UTTERANCE TO ANALYZE, you
|
|
63
|
-
MUST use \`null\` as the value for that property. You MAY NOT infer your own property
|
|
64
|
-
values, in the absence of their clear specification in the USER UTTERANCE TO ANALYZE.
|
|
65
|
-
5. Ensure the keys in your output JSON object exactly match the \`propertyName\` values
|
|
66
|
-
from the input list.
|
|
67
|
-
6. The exact format of your output object will be given in the section below.
|
|
68
|
-
`;
|
|
69
|
-
}
|
|
70
|
-
}
|
|
71
|
-
//# sourceMappingURL=tool.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"tool.js","sourceRoot":"","sources":["../../../../src/tools/utilities/inputExtraction/tool.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH,OAAO,EAGL,6BAA6B,GAC9B,MAAM,eAAe,CAAC;AACvB,OAAO,EAAE,oBAAoB,EAAE,MAAM,oCAAoC,CAAC;AAE1E,MAAM,OAAO,mBAAoB,SAAQ,oBAAiD;IACxF,YAAY,MAAiB,EAAE,MAAc,EAAE,kBAA0B,EAAE,MAAe;QACxF,KAAK,CACH,MAAM,EACN,6BAA6B,CAAC,MAAM,CAAC,EACrC,kBAAkB,EAClB,qBAAqB,EACrB,MAAM,CACP,CAAC;IACJ,CAAC;IAEM,aAAa,GAAG,KAAK,EAAE,KAAmC,EAAE,EAAE;QACnE,IAAI,CAAC;YACH,MAAM,QAAQ,GAAG,IAAI,CAAC,+BAA+B,CAAC,KAAK,CAAC,CAAC;YAC7D,OAAO,IAAI,CAAC,0BAA0B,CAAC,QAAQ,EAAE,KAAK,CAAC,iBAAiB,EAAE,KAAK,CAAC,YAAY,CAAC,CAAC;QAChG,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,SAAS,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,wBAAwB,CAAC,CAAC;YACvF,OAAO;gBACL,OAAO,EAAE,IAAI;gBACb,OAAO,EAAE;oBACP;wBACE,IAAI,EAAE,MAAe;wBACrB,IAAI,EAAE,UAAU,SAAS,CAAC,OAAO,EAAE;qBACpC;iBACF;aACF,CAAC;QACJ,CAAC;IACH,CAAC,CAAC;IAEM,+BAA+B,CAAC,KAAmC;QACzE,OAAO;;;;;;;;;;;;;;EAcT,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,aAAa,CAAC;;;;;;;EAOnC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,mBAAmB,CAAC;;;;;;;;;;;;;;;CAe1C,CAAC;IACA,CAAC;CACF"}
|