@inkeep/agents-cli 0.59.3 → 0.59.4
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/agents-cli/package.js +1 -1
- package/dist/commands/pull-v4/collector-common.js +128 -0
- package/dist/commands/pull-v4/collector-common.js.map +1 -0
- package/dist/commands/pull-v4/collector-reference-helpers.js +323 -0
- package/dist/commands/pull-v4/collector-reference-helpers.js.map +1 -0
- package/dist/commands/pull-v4/component-parser.js +2 -1
- package/dist/commands/pull-v4/component-parser.js.map +1 -1
- package/dist/commands/pull-v4/file-scope.js +43 -0
- package/dist/commands/pull-v4/file-scope.js.map +1 -0
- package/dist/commands/pull-v4/generation-resolver.js +305 -0
- package/dist/commands/pull-v4/generation-resolver.js.map +1 -0
- package/dist/commands/pull-v4/generation-types.js +56 -0
- package/dist/commands/pull-v4/generation-types.js.map +1 -0
- package/dist/commands/pull-v4/generators/agent-generator.helpers.js +4 -10
- package/dist/commands/pull-v4/generators/agent-generator.helpers.js.map +1 -1
- package/dist/commands/pull-v4/generators/agent-generator.js +154 -81
- package/dist/commands/pull-v4/generators/agent-generator.js.map +1 -1
- package/dist/commands/pull-v4/generators/artifact-component-generator.js +48 -27
- package/dist/commands/pull-v4/generators/artifact-component-generator.js.map +1 -1
- package/dist/commands/pull-v4/generators/context-config-generator.js +147 -129
- package/dist/commands/pull-v4/generators/context-config-generator.js.map +1 -1
- package/dist/commands/pull-v4/generators/credential-generator.js +36 -14
- package/dist/commands/pull-v4/generators/credential-generator.js.map +1 -1
- package/dist/commands/pull-v4/generators/data-component-generator.js +55 -19
- package/dist/commands/pull-v4/generators/data-component-generator.js.map +1 -1
- package/dist/commands/pull-v4/generators/environment-generator.js +29 -33
- package/dist/commands/pull-v4/generators/environment-generator.js.map +1 -1
- package/dist/commands/pull-v4/generators/environment-settings-generator.js +57 -0
- package/dist/commands/pull-v4/generators/environment-settings-generator.js.map +1 -0
- package/dist/commands/pull-v4/generators/external-agent-generator.js +51 -23
- package/dist/commands/pull-v4/generators/external-agent-generator.js.map +1 -1
- package/dist/commands/pull-v4/generators/function-tool-generator.js +50 -14
- package/dist/commands/pull-v4/generators/function-tool-generator.js.map +1 -1
- package/dist/commands/pull-v4/generators/helpers/agent.js +129 -0
- package/dist/commands/pull-v4/generators/helpers/agent.js.map +1 -0
- package/dist/commands/pull-v4/generators/helpers/sub-agent.js +65 -0
- package/dist/commands/pull-v4/generators/helpers/sub-agent.js.map +1 -0
- package/dist/commands/pull-v4/generators/index.js +38 -0
- package/dist/commands/pull-v4/generators/index.js.map +1 -0
- package/dist/commands/pull-v4/generators/mcp-tool-generator.js +48 -27
- package/dist/commands/pull-v4/generators/mcp-tool-generator.js.map +1 -1
- package/dist/commands/pull-v4/generators/project-generator.js +144 -110
- package/dist/commands/pull-v4/generators/project-generator.js.map +1 -1
- package/dist/commands/pull-v4/generators/scheduled-trigger-generator.js +66 -0
- package/dist/commands/pull-v4/generators/scheduled-trigger-generator.js.map +1 -0
- package/dist/commands/pull-v4/generators/status-component-generator.js +55 -20
- package/dist/commands/pull-v4/generators/status-component-generator.js.map +1 -1
- package/dist/commands/pull-v4/generators/sub-agent-generator.helpers.js +4 -1
- package/dist/commands/pull-v4/generators/sub-agent-generator.helpers.js.map +1 -1
- package/dist/commands/pull-v4/generators/sub-agent-generator.js +282 -166
- package/dist/commands/pull-v4/generators/sub-agent-generator.js.map +1 -1
- package/dist/commands/pull-v4/generators/trigger-generator.js +62 -27
- package/dist/commands/pull-v4/generators/trigger-generator.js.map +1 -1
- package/dist/commands/pull-v4/import-plan.js +40 -0
- package/dist/commands/pull-v4/import-plan.js.map +1 -0
- package/dist/commands/pull-v4/introspect/index.js +11 -7
- package/dist/commands/pull-v4/introspect/index.js.map +1 -1
- package/dist/commands/pull-v4/introspect-generator.js +15 -1218
- package/dist/commands/pull-v4/introspect-generator.js.map +1 -1
- package/dist/commands/pull-v4/module-merge.js +14 -5
- package/dist/commands/pull-v4/module-merge.js.map +1 -1
- package/dist/commands/pull-v4/reference-resolution.js +111 -0
- package/dist/commands/pull-v4/reference-resolution.js.map +1 -0
- package/dist/commands/pull-v4/simple-factory-generator.js +54 -0
- package/dist/commands/pull-v4/simple-factory-generator.js.map +1 -0
- package/dist/commands/pull-v4/{generators/skill-generator.js → skill.js} +18 -6
- package/dist/commands/pull-v4/skill.js.map +1 -0
- package/dist/commands/pull-v4/typescript-file-writer.js +78 -0
- package/dist/commands/pull-v4/typescript-file-writer.js.map +1 -0
- package/dist/commands/pull-v4/utils/code-values.js +64 -0
- package/dist/commands/pull-v4/utils/code-values.js.map +1 -0
- package/dist/commands/pull-v4/utils/factory-writer.js +128 -0
- package/dist/commands/pull-v4/utils/factory-writer.js.map +1 -0
- package/dist/commands/pull-v4/utils/index.js +8 -0
- package/dist/commands/pull-v4/utils/naming.js +74 -0
- package/dist/commands/pull-v4/utils/naming.js.map +1 -0
- package/dist/commands/pull-v4/utils/schema-rendering.js +20 -0
- package/dist/commands/pull-v4/utils/schema-rendering.js.map +1 -0
- package/dist/commands/pull-v4/utils/shared.js +18 -0
- package/dist/commands/pull-v4/utils/shared.js.map +1 -0
- package/dist/commands/pull-v4/utils/templates.js +58 -0
- package/dist/commands/pull-v4/utils/templates.js.map +1 -0
- package/package.json +4 -4
- package/dist/commands/pull-v4/generators/skill-generator.js.map +0 -1
- package/dist/commands/pull-v4/scheduled-trigger-generator.js +0 -38
- package/dist/commands/pull-v4/scheduled-trigger-generator.js.map +0 -1
- package/dist/commands/pull-v4/utils.js +0 -320
- package/dist/commands/pull-v4/utils.js.map +0 -1
|
@@ -0,0 +1,129 @@
|
|
|
1
|
+
import { isPlainObject } from "../../utils/shared.js";
|
|
2
|
+
import { createUniqueReferenceName, toCamelCase, toKebabCase, toTriggerReferenceName } from "../../utils/naming.js";
|
|
3
|
+
import "../../utils/index.js";
|
|
4
|
+
import { addNamedImports, applyImportPlan, createImportPlan } from "../../import-plan.js";
|
|
5
|
+
|
|
6
|
+
//#region src/commands/pull-v4/generators/helpers/agent.ts
|
|
7
|
+
function extractIds(value) {
|
|
8
|
+
if (Array.isArray(value)) return value.map((item) => {
|
|
9
|
+
if (typeof item === "string") return item;
|
|
10
|
+
if (isPlainObject(item) && typeof item.id === "string") return item.id;
|
|
11
|
+
return null;
|
|
12
|
+
}).filter((id) => Boolean(id));
|
|
13
|
+
return Object.keys(value);
|
|
14
|
+
}
|
|
15
|
+
function addTriggerImports(sourceFile, referenceNames, importRefs) {
|
|
16
|
+
const importPlan = createImportPlan();
|
|
17
|
+
for (const [triggerId, referenceName] of referenceNames) {
|
|
18
|
+
const importRef = importRefs.get(triggerId);
|
|
19
|
+
if (!importRef) continue;
|
|
20
|
+
const { importName, modulePath } = importRef;
|
|
21
|
+
addNamedImports(importPlan, `./triggers/${modulePath}`, toNamedImport(importName, referenceName));
|
|
22
|
+
}
|
|
23
|
+
applyImportPlan(sourceFile, importPlan);
|
|
24
|
+
}
|
|
25
|
+
function addScheduledTriggerImports(sourceFile, referenceNames, importRefs) {
|
|
26
|
+
const importPlan = createImportPlan();
|
|
27
|
+
for (const [scheduledTriggerId, referenceName] of referenceNames) {
|
|
28
|
+
const importRef = importRefs.get(scheduledTriggerId);
|
|
29
|
+
if (!importRef) continue;
|
|
30
|
+
const { importName, modulePath } = importRef;
|
|
31
|
+
addNamedImports(importPlan, `./scheduled-triggers/${modulePath}`, toNamedImport(importName, referenceName));
|
|
32
|
+
}
|
|
33
|
+
applyImportPlan(sourceFile, importPlan);
|
|
34
|
+
}
|
|
35
|
+
function addStatusComponentImports(sourceFile, referenceNames) {
|
|
36
|
+
const importPlan = createImportPlan();
|
|
37
|
+
for (const [statusComponentId, referenceName] of referenceNames) {
|
|
38
|
+
const importName = toCamelCase(statusComponentId);
|
|
39
|
+
addNamedImports(importPlan, `../status-components/${statusComponentId}`, toNamedImport(importName, referenceName));
|
|
40
|
+
}
|
|
41
|
+
applyImportPlan(sourceFile, importPlan);
|
|
42
|
+
}
|
|
43
|
+
function createReferenceNameMap(ids, reservedNames, conflictSuffix) {
|
|
44
|
+
const map = /* @__PURE__ */ new Map();
|
|
45
|
+
for (const id of ids) {
|
|
46
|
+
if (map.has(id)) continue;
|
|
47
|
+
map.set(id, createUniqueReferenceName(toCamelCase(id), reservedNames, conflictSuffix));
|
|
48
|
+
}
|
|
49
|
+
return map;
|
|
50
|
+
}
|
|
51
|
+
function createScheduledTriggerReferenceMaps(scheduledTriggers, reservedNames) {
|
|
52
|
+
const referenceNames = /* @__PURE__ */ new Map();
|
|
53
|
+
const importRefs = /* @__PURE__ */ new Map();
|
|
54
|
+
if (!scheduledTriggers || !isPlainObject(scheduledTriggers)) return {
|
|
55
|
+
referenceNames,
|
|
56
|
+
importRefs
|
|
57
|
+
};
|
|
58
|
+
const moduleNameCounts = /* @__PURE__ */ new Map();
|
|
59
|
+
for (const [scheduledTriggerId, scheduledTriggerData] of Object.entries(scheduledTriggers)) {
|
|
60
|
+
if (referenceNames.has(scheduledTriggerId)) continue;
|
|
61
|
+
const scheduledTriggerRecord = isPlainObject(scheduledTriggerData) ? scheduledTriggerData : void 0;
|
|
62
|
+
const scheduledTriggerName = typeof scheduledTriggerRecord?.name === "string" && scheduledTriggerRecord.name.length > 0 ? scheduledTriggerRecord.name : scheduledTriggerId;
|
|
63
|
+
const importName = toTriggerReferenceName(scheduledTriggerName);
|
|
64
|
+
const referenceName = createNumericReferenceName(importName, reservedNames);
|
|
65
|
+
const baseModuleName = toKebabCase(scheduledTriggerName) || toKebabCase(scheduledTriggerId) || scheduledTriggerId;
|
|
66
|
+
const moduleCount = moduleNameCounts.get(baseModuleName) ?? 0;
|
|
67
|
+
moduleNameCounts.set(baseModuleName, moduleCount + 1);
|
|
68
|
+
const modulePath = moduleCount === 0 ? baseModuleName : `${baseModuleName}-${moduleCount}`;
|
|
69
|
+
referenceNames.set(scheduledTriggerId, referenceName);
|
|
70
|
+
importRefs.set(scheduledTriggerId, {
|
|
71
|
+
importName,
|
|
72
|
+
modulePath
|
|
73
|
+
});
|
|
74
|
+
}
|
|
75
|
+
return {
|
|
76
|
+
referenceNames,
|
|
77
|
+
importRefs
|
|
78
|
+
};
|
|
79
|
+
}
|
|
80
|
+
function createTriggerReferenceMaps(triggers, reservedNames) {
|
|
81
|
+
const referenceNames = /* @__PURE__ */ new Map();
|
|
82
|
+
const importRefs = /* @__PURE__ */ new Map();
|
|
83
|
+
if (!triggers || !isPlainObject(triggers)) return {
|
|
84
|
+
referenceNames,
|
|
85
|
+
importRefs
|
|
86
|
+
};
|
|
87
|
+
const moduleNameCounts = /* @__PURE__ */ new Map();
|
|
88
|
+
for (const [triggerId, triggerData] of Object.entries(triggers)) {
|
|
89
|
+
if (referenceNames.has(triggerId)) continue;
|
|
90
|
+
const triggerRecord = isPlainObject(triggerData) ? triggerData : void 0;
|
|
91
|
+
const triggerName = typeof triggerRecord?.name === "string" && triggerRecord.name.length > 0 ? triggerRecord.name : triggerId;
|
|
92
|
+
const importName = toTriggerReferenceName(triggerName);
|
|
93
|
+
const referenceName = createNumericReferenceName(importName, reservedNames);
|
|
94
|
+
const baseModuleName = toKebabCase(triggerName) || toKebabCase(triggerId) || triggerId;
|
|
95
|
+
const moduleCount = moduleNameCounts.get(baseModuleName) ?? 0;
|
|
96
|
+
moduleNameCounts.set(baseModuleName, moduleCount + 1);
|
|
97
|
+
const modulePath = moduleCount === 0 ? baseModuleName : `${baseModuleName}-${moduleCount}`;
|
|
98
|
+
referenceNames.set(triggerId, referenceName);
|
|
99
|
+
importRefs.set(triggerId, {
|
|
100
|
+
importName,
|
|
101
|
+
modulePath
|
|
102
|
+
});
|
|
103
|
+
}
|
|
104
|
+
return {
|
|
105
|
+
referenceNames,
|
|
106
|
+
importRefs
|
|
107
|
+
};
|
|
108
|
+
}
|
|
109
|
+
function createNumericReferenceName(baseName, reservedNames) {
|
|
110
|
+
if (!reservedNames.has(baseName)) {
|
|
111
|
+
reservedNames.add(baseName);
|
|
112
|
+
return baseName;
|
|
113
|
+
}
|
|
114
|
+
let index = 1;
|
|
115
|
+
while (reservedNames.has(`${baseName}${index}`)) index += 1;
|
|
116
|
+
const uniqueName = `${baseName}${index}`;
|
|
117
|
+
reservedNames.add(uniqueName);
|
|
118
|
+
return uniqueName;
|
|
119
|
+
}
|
|
120
|
+
function toNamedImport(importName, referenceName) {
|
|
121
|
+
return importName === referenceName ? importName : {
|
|
122
|
+
name: importName,
|
|
123
|
+
alias: referenceName
|
|
124
|
+
};
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
//#endregion
|
|
128
|
+
export { addScheduledTriggerImports, addStatusComponentImports, addTriggerImports, createReferenceNameMap, createScheduledTriggerReferenceMaps, createTriggerReferenceMaps, extractIds };
|
|
129
|
+
//# sourceMappingURL=agent.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"agent.js","names":[],"sources":["../../../../../src/commands/pull-v4/generators/helpers/agent.ts"],"sourcesContent":["import type { SourceFile } from 'ts-morph';\nimport {\n addNamedImports,\n applyImportPlan,\n createImportPlan,\n type NamedImportSpec,\n} from '../../import-plan';\nimport {\n createUniqueReferenceName,\n isPlainObject,\n toCamelCase,\n toKebabCase,\n toTriggerReferenceName,\n} from '../../utils';\n\nexport type ReferenceNameMap = Map<string, string>;\nexport type TriggerImportMap = Map<string, { importName: string; modulePath: string }>;\n\nexport function extractIds(value: unknown[] | Record<string, unknown>): string[] {\n if (Array.isArray(value)) {\n return value\n .map((item) => {\n if (typeof item === 'string') {\n return item;\n }\n if (isPlainObject(item) && typeof item.id === 'string') {\n return item.id;\n }\n return null;\n })\n .filter((id): id is string => Boolean(id));\n }\n return Object.keys(value);\n}\n\nexport function addTriggerImports(\n sourceFile: SourceFile,\n referenceNames: ReferenceNameMap,\n importRefs: TriggerImportMap\n): void {\n const importPlan = createImportPlan();\n for (const [triggerId, referenceName] of referenceNames) {\n const importRef = importRefs.get(triggerId);\n if (!importRef) {\n continue;\n }\n\n const { importName, modulePath } = importRef;\n addNamedImports(\n importPlan,\n `./triggers/${modulePath}`,\n toNamedImport(importName, referenceName)\n );\n }\n applyImportPlan(sourceFile, importPlan);\n}\n\nexport function addScheduledTriggerImports(\n sourceFile: SourceFile,\n referenceNames: ReferenceNameMap,\n importRefs: TriggerImportMap\n): void {\n const importPlan = createImportPlan();\n for (const [scheduledTriggerId, referenceName] of referenceNames) {\n const importRef = importRefs.get(scheduledTriggerId);\n if (!importRef) {\n continue;\n }\n\n const { importName, modulePath } = importRef;\n addNamedImports(\n importPlan,\n `./scheduled-triggers/${modulePath}`,\n toNamedImport(importName, referenceName)\n );\n }\n applyImportPlan(sourceFile, importPlan);\n}\n\nexport function addStatusComponentImports(\n sourceFile: SourceFile,\n referenceNames: ReferenceNameMap\n): void {\n const importPlan = createImportPlan();\n for (const [statusComponentId, referenceName] of referenceNames) {\n const importName = toCamelCase(statusComponentId);\n addNamedImports(\n importPlan,\n `../status-components/${statusComponentId}`,\n toNamedImport(importName, referenceName)\n );\n }\n applyImportPlan(sourceFile, importPlan);\n}\n\nexport function createReferenceNameMap(\n ids: Iterable<string>,\n reservedNames: Set<string>,\n conflictSuffix: string\n): ReferenceNameMap {\n const map: ReferenceNameMap = new Map();\n for (const id of ids) {\n if (map.has(id)) {\n continue;\n }\n map.set(id, createUniqueReferenceName(toCamelCase(id), reservedNames, conflictSuffix));\n }\n return map;\n}\n\nexport function createScheduledTriggerReferenceMaps(\n scheduledTriggers: unknown,\n reservedNames: Set<string>\n): {\n referenceNames: ReferenceNameMap;\n importRefs: TriggerImportMap;\n} {\n const referenceNames: ReferenceNameMap = new Map();\n const importRefs: TriggerImportMap = new Map();\n\n if (!scheduledTriggers || !isPlainObject(scheduledTriggers)) {\n return { referenceNames, importRefs };\n }\n\n const moduleNameCounts = new Map<string, number>();\n\n for (const [scheduledTriggerId, scheduledTriggerData] of Object.entries(scheduledTriggers)) {\n if (referenceNames.has(scheduledTriggerId)) {\n continue;\n }\n\n const scheduledTriggerRecord = isPlainObject(scheduledTriggerData)\n ? scheduledTriggerData\n : undefined;\n const scheduledTriggerName =\n typeof scheduledTriggerRecord?.name === 'string' && scheduledTriggerRecord.name.length > 0\n ? scheduledTriggerRecord.name\n : scheduledTriggerId;\n\n const importName = toTriggerReferenceName(scheduledTriggerName);\n const referenceName = createNumericReferenceName(importName, reservedNames);\n\n const baseModuleName =\n toKebabCase(scheduledTriggerName) || toKebabCase(scheduledTriggerId) || scheduledTriggerId;\n const moduleCount = moduleNameCounts.get(baseModuleName) ?? 0;\n moduleNameCounts.set(baseModuleName, moduleCount + 1);\n const modulePath = moduleCount === 0 ? baseModuleName : `${baseModuleName}-${moduleCount}`;\n\n referenceNames.set(scheduledTriggerId, referenceName);\n importRefs.set(scheduledTriggerId, { importName, modulePath });\n }\n\n return { referenceNames, importRefs };\n}\n\nexport function createTriggerReferenceMaps(\n triggers: unknown,\n reservedNames: Set<string>\n): {\n referenceNames: ReferenceNameMap;\n importRefs: TriggerImportMap;\n} {\n const referenceNames: ReferenceNameMap = new Map();\n const importRefs: TriggerImportMap = new Map();\n\n if (!triggers || !isPlainObject(triggers)) {\n return { referenceNames, importRefs };\n }\n\n const moduleNameCounts = new Map<string, number>();\n\n for (const [triggerId, triggerData] of Object.entries(triggers)) {\n if (referenceNames.has(triggerId)) {\n continue;\n }\n\n const triggerRecord = isPlainObject(triggerData) ? triggerData : undefined;\n const triggerName =\n typeof triggerRecord?.name === 'string' && triggerRecord.name.length > 0\n ? triggerRecord.name\n : triggerId;\n\n const importName = toTriggerReferenceName(triggerName);\n const referenceName = createNumericReferenceName(importName, reservedNames);\n\n const baseModuleName = toKebabCase(triggerName) || toKebabCase(triggerId) || triggerId;\n const moduleCount = moduleNameCounts.get(baseModuleName) ?? 0;\n moduleNameCounts.set(baseModuleName, moduleCount + 1);\n const modulePath = moduleCount === 0 ? baseModuleName : `${baseModuleName}-${moduleCount}`;\n\n referenceNames.set(triggerId, referenceName);\n importRefs.set(triggerId, { importName, modulePath });\n }\n\n return { referenceNames, importRefs };\n}\n\nfunction createNumericReferenceName(baseName: string, reservedNames: Set<string>): string {\n if (!reservedNames.has(baseName)) {\n reservedNames.add(baseName);\n return baseName;\n }\n\n let index = 1;\n while (reservedNames.has(`${baseName}${index}`)) {\n index += 1;\n }\n\n const uniqueName = `${baseName}${index}`;\n reservedNames.add(uniqueName);\n return uniqueName;\n}\n\nfunction toNamedImport(importName: string, referenceName: string): NamedImportSpec {\n return importName === referenceName ? importName : { name: importName, alias: referenceName };\n}\n"],"mappings":"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"}
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
import { codeMethodCall, codeReference } from "../../utils/code-values.js";
|
|
2
|
+
import { resolveReferenceName, toCamelCase } from "../../utils/naming.js";
|
|
3
|
+
import "../../utils/index.js";
|
|
4
|
+
|
|
5
|
+
//#region src/commands/pull-v4/generators/helpers/sub-agent.ts
|
|
6
|
+
function resolveSubAgentName(subAgentId, name) {
|
|
7
|
+
if (name !== void 0) return name;
|
|
8
|
+
return subAgentId.replace(/[-_]/g, " ").replace(/([a-z])([A-Z])/g, "$1 $2").replace(/\b\w/g, (char) => char.toUpperCase());
|
|
9
|
+
}
|
|
10
|
+
function resolveSubAgentVariableName(subAgentId, name) {
|
|
11
|
+
return toCamelCase(name || subAgentId);
|
|
12
|
+
}
|
|
13
|
+
function collectCanUseReferences(canUse, toolReferenceOverrides) {
|
|
14
|
+
if (!canUse?.length) return [];
|
|
15
|
+
const references = [];
|
|
16
|
+
for (const item of canUse) {
|
|
17
|
+
const toolReference = resolveReferenceName(item.toolId, [toolReferenceOverrides]);
|
|
18
|
+
const withConfig = {};
|
|
19
|
+
if (item.selectedTools?.length) withConfig.selectedTools = item.selectedTools;
|
|
20
|
+
if (item.headers && Object.keys(item.headers).length > 0) withConfig.headers = item.headers;
|
|
21
|
+
if (item.toolPolicies && Object.keys(item.toolPolicies).length > 0) withConfig.toolPolicies = item.toolPolicies;
|
|
22
|
+
if (Object.keys(withConfig).length > 0) {
|
|
23
|
+
references.push(codeMethodCall(codeReference(toolReference), "with", withConfig));
|
|
24
|
+
continue;
|
|
25
|
+
}
|
|
26
|
+
references.push(codeReference(toolReference));
|
|
27
|
+
}
|
|
28
|
+
return references;
|
|
29
|
+
}
|
|
30
|
+
function collectCanDelegateToReferences(canDelegateTo, referenceOverrides) {
|
|
31
|
+
if (!canDelegateTo?.length) return [];
|
|
32
|
+
const references = [];
|
|
33
|
+
for (const item of canDelegateTo) {
|
|
34
|
+
const targetReference = item.type === "agents" ? resolveReferenceName(item.id, [referenceOverrides.agents]) : item.type === "externalAgents" ? resolveReferenceName(item.id, [referenceOverrides.externalAgents]) : resolveReferenceName(item.id, [
|
|
35
|
+
referenceOverrides.subAgents,
|
|
36
|
+
referenceOverrides.agents,
|
|
37
|
+
referenceOverrides.externalAgents
|
|
38
|
+
]);
|
|
39
|
+
if (item.headers && Object.keys(item.headers).length > 0) {
|
|
40
|
+
references.push(codeMethodCall(codeReference(targetReference), "with", { headers: item.headers }));
|
|
41
|
+
continue;
|
|
42
|
+
}
|
|
43
|
+
references.push(codeReference(targetReference));
|
|
44
|
+
}
|
|
45
|
+
return references;
|
|
46
|
+
}
|
|
47
|
+
function collectSkills(skills) {
|
|
48
|
+
if (!skills?.length) return [];
|
|
49
|
+
const formattedSkills = [];
|
|
50
|
+
for (const skill of skills) {
|
|
51
|
+
if (typeof skill === "string") {
|
|
52
|
+
formattedSkills.push(skill);
|
|
53
|
+
continue;
|
|
54
|
+
}
|
|
55
|
+
const formattedSkill = { id: skill.id };
|
|
56
|
+
if (typeof skill.index === "number") formattedSkill.index = skill.index;
|
|
57
|
+
if (typeof skill.alwaysLoaded === "boolean") formattedSkill.alwaysLoaded = skill.alwaysLoaded;
|
|
58
|
+
formattedSkills.push(formattedSkill);
|
|
59
|
+
}
|
|
60
|
+
return formattedSkills;
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
//#endregion
|
|
64
|
+
export { collectCanDelegateToReferences, collectCanUseReferences, collectSkills, resolveSubAgentName, resolveSubAgentVariableName };
|
|
65
|
+
//# sourceMappingURL=sub-agent.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sub-agent.js","names":[],"sources":["../../../../../src/commands/pull-v4/generators/helpers/sub-agent.ts"],"sourcesContent":["import {\n type CodeValue,\n codeMethodCall,\n codeReference,\n resolveReferenceName,\n toCamelCase,\n} from '../../utils';\n\ninterface DelegateReferenceOverrides {\n subAgents?: Record<string, string>;\n agents?: Record<string, string>;\n externalAgents?: Record<string, string>;\n}\n\nexport interface NormalizedCanUseEntry {\n toolId: string;\n selectedTools?: unknown[];\n headers?: Record<string, unknown>;\n toolPolicies?: Record<string, unknown>;\n}\n\nexport type NormalizedDelegateTargetType = 'subAgents' | 'agents' | 'externalAgents';\n\nexport interface NormalizedCanDelegateToEntry {\n id: string;\n type?: NormalizedDelegateTargetType;\n headers?: Record<string, unknown>;\n}\n\nexport type NormalizedSkillEntry =\n | string\n | {\n id: string;\n index?: number;\n alwaysLoaded?: boolean;\n };\n\nexport function resolveSubAgentName(subAgentId: string, name?: string): string {\n if (name !== undefined) {\n return name;\n }\n\n return subAgentId\n .replace(/[-_]/g, ' ')\n .replace(/([a-z])([A-Z])/g, '$1 $2')\n .replace(/\\b\\w/g, (char) => char.toUpperCase());\n}\n\nexport function resolveSubAgentVariableName(subAgentId: string, name?: string): string {\n const seed = name || subAgentId;\n return toCamelCase(seed);\n}\n\nexport function collectCanUseReferences(\n canUse?: NormalizedCanUseEntry[],\n toolReferenceOverrides?: Record<string, string>\n): CodeValue[] {\n if (!canUse?.length) {\n return [];\n }\n\n const references: CodeValue[] = [];\n for (const item of canUse) {\n const toolReference = resolveReferenceName(item.toolId, [toolReferenceOverrides]);\n const withConfig: Record<string, unknown> = {};\n\n if (item.selectedTools?.length) {\n withConfig.selectedTools = item.selectedTools;\n }\n\n if (item.headers && Object.keys(item.headers).length > 0) {\n withConfig.headers = item.headers;\n }\n\n if (item.toolPolicies && Object.keys(item.toolPolicies).length > 0) {\n withConfig.toolPolicies = item.toolPolicies;\n }\n\n if (Object.keys(withConfig).length > 0) {\n references.push(codeMethodCall(codeReference(toolReference), 'with', withConfig));\n continue;\n }\n\n references.push(codeReference(toolReference));\n }\n\n return references;\n}\n\nexport function collectCanDelegateToReferences(\n canDelegateTo: NormalizedCanDelegateToEntry[] | undefined,\n referenceOverrides: DelegateReferenceOverrides\n): CodeValue[] {\n if (!canDelegateTo?.length) {\n return [];\n }\n\n const references: CodeValue[] = [];\n for (const item of canDelegateTo) {\n const targetReference =\n item.type === 'agents'\n ? resolveReferenceName(item.id, [referenceOverrides.agents])\n : item.type === 'externalAgents'\n ? resolveReferenceName(item.id, [referenceOverrides.externalAgents])\n : resolveReferenceName(item.id, [\n referenceOverrides.subAgents,\n referenceOverrides.agents,\n referenceOverrides.externalAgents,\n ]);\n\n if (item.headers && Object.keys(item.headers).length > 0) {\n references.push(\n codeMethodCall(codeReference(targetReference), 'with', { headers: item.headers })\n );\n continue;\n }\n\n references.push(codeReference(targetReference));\n }\n\n return references;\n}\n\nexport function collectSkills(skills?: NormalizedSkillEntry[]): unknown[] {\n if (!skills?.length) {\n return [];\n }\n\n const formattedSkills: unknown[] = [];\n for (const skill of skills) {\n if (typeof skill === 'string') {\n formattedSkills.push(skill);\n continue;\n }\n\n const formattedSkill: Record<string, unknown> = { id: skill.id };\n if (typeof skill.index === 'number') {\n formattedSkill.index = skill.index;\n }\n if (typeof skill.alwaysLoaded === 'boolean') {\n formattedSkill.alwaysLoaded = skill.alwaysLoaded;\n }\n\n formattedSkills.push(formattedSkill);\n }\n\n return formattedSkills;\n}\n"],"mappings":";;;;;AAqCA,SAAgB,oBAAoB,YAAoB,MAAuB;AAC7E,KAAI,SAAS,OACX,QAAO;AAGT,QAAO,WACJ,QAAQ,SAAS,IAAI,CACrB,QAAQ,mBAAmB,QAAQ,CACnC,QAAQ,UAAU,SAAS,KAAK,aAAa,CAAC;;AAGnD,SAAgB,4BAA4B,YAAoB,MAAuB;AAErF,QAAO,YADM,QAAQ,WACG;;AAG1B,SAAgB,wBACd,QACA,wBACa;AACb,KAAI,CAAC,QAAQ,OACX,QAAO,EAAE;CAGX,MAAM,aAA0B,EAAE;AAClC,MAAK,MAAM,QAAQ,QAAQ;EACzB,MAAM,gBAAgB,qBAAqB,KAAK,QAAQ,CAAC,uBAAuB,CAAC;EACjF,MAAM,aAAsC,EAAE;AAE9C,MAAI,KAAK,eAAe,OACtB,YAAW,gBAAgB,KAAK;AAGlC,MAAI,KAAK,WAAW,OAAO,KAAK,KAAK,QAAQ,CAAC,SAAS,EACrD,YAAW,UAAU,KAAK;AAG5B,MAAI,KAAK,gBAAgB,OAAO,KAAK,KAAK,aAAa,CAAC,SAAS,EAC/D,YAAW,eAAe,KAAK;AAGjC,MAAI,OAAO,KAAK,WAAW,CAAC,SAAS,GAAG;AACtC,cAAW,KAAK,eAAe,cAAc,cAAc,EAAE,QAAQ,WAAW,CAAC;AACjF;;AAGF,aAAW,KAAK,cAAc,cAAc,CAAC;;AAG/C,QAAO;;AAGT,SAAgB,+BACd,eACA,oBACa;AACb,KAAI,CAAC,eAAe,OAClB,QAAO,EAAE;CAGX,MAAM,aAA0B,EAAE;AAClC,MAAK,MAAM,QAAQ,eAAe;EAChC,MAAM,kBACJ,KAAK,SAAS,WACV,qBAAqB,KAAK,IAAI,CAAC,mBAAmB,OAAO,CAAC,GAC1D,KAAK,SAAS,mBACZ,qBAAqB,KAAK,IAAI,CAAC,mBAAmB,eAAe,CAAC,GAClE,qBAAqB,KAAK,IAAI;GAC5B,mBAAmB;GACnB,mBAAmB;GACnB,mBAAmB;GACpB,CAAC;AAEV,MAAI,KAAK,WAAW,OAAO,KAAK,KAAK,QAAQ,CAAC,SAAS,GAAG;AACxD,cAAW,KACT,eAAe,cAAc,gBAAgB,EAAE,QAAQ,EAAE,SAAS,KAAK,SAAS,CAAC,CAClF;AACD;;AAGF,aAAW,KAAK,cAAc,gBAAgB,CAAC;;AAGjD,QAAO;;AAGT,SAAgB,cAAc,QAA4C;AACxE,KAAI,CAAC,QAAQ,OACX,QAAO,EAAE;CAGX,MAAM,kBAA6B,EAAE;AACrC,MAAK,MAAM,SAAS,QAAQ;AAC1B,MAAI,OAAO,UAAU,UAAU;AAC7B,mBAAgB,KAAK,MAAM;AAC3B;;EAGF,MAAM,iBAA0C,EAAE,IAAI,MAAM,IAAI;AAChE,MAAI,OAAO,MAAM,UAAU,SACzB,gBAAe,QAAQ,MAAM;AAE/B,MAAI,OAAO,MAAM,iBAAiB,UAChC,gBAAe,eAAe,MAAM;AAGtC,kBAAgB,KAAK,eAAe;;AAGtC,QAAO"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import { task as task$1 } from "./agent-generator.js";
|
|
2
|
+
import { task as task$2 } from "./artifact-component-generator.js";
|
|
3
|
+
import { task as task$3 } from "./context-config-generator.js";
|
|
4
|
+
import { task as task$4 } from "./credential-generator.js";
|
|
5
|
+
import { task as task$5 } from "./data-component-generator.js";
|
|
6
|
+
import { task as task$6 } from "./environment-generator.js";
|
|
7
|
+
import { task as task$7 } from "./environment-settings-generator.js";
|
|
8
|
+
import { task as task$8 } from "./external-agent-generator.js";
|
|
9
|
+
import { task as task$9 } from "./function-tool-generator.js";
|
|
10
|
+
import { task as task$10 } from "./mcp-tool-generator.js";
|
|
11
|
+
import { task as task$11 } from "./project-generator.js";
|
|
12
|
+
import { task as task$12 } from "./scheduled-trigger-generator.js";
|
|
13
|
+
import { task as task$13 } from "./status-component-generator.js";
|
|
14
|
+
import { task as task$14 } from "./sub-agent-generator.js";
|
|
15
|
+
import { task as task$15 } from "./trigger-generator.js";
|
|
16
|
+
|
|
17
|
+
//#region src/commands/pull-v4/generators/index.ts
|
|
18
|
+
const generationTasks = {
|
|
19
|
+
"./agent-generator.ts": task$1,
|
|
20
|
+
"./artifact-component-generator.ts": task$2,
|
|
21
|
+
"./context-config-generator.ts": task$3,
|
|
22
|
+
"./credential-generator.ts": task$4,
|
|
23
|
+
"./data-component-generator.ts": task$5,
|
|
24
|
+
"./environment-generator.ts": task$6,
|
|
25
|
+
"./environment-settings-generator.ts": task$7,
|
|
26
|
+
"./external-agent-generator.ts": task$8,
|
|
27
|
+
"./function-tool-generator.ts": task$9,
|
|
28
|
+
"./mcp-tool-generator.ts": task$10,
|
|
29
|
+
"./project-generator.ts": task$11,
|
|
30
|
+
"./scheduled-trigger-generator.ts": task$12,
|
|
31
|
+
"./status-component-generator.ts": task$13,
|
|
32
|
+
"./sub-agent-generator.ts": task$14,
|
|
33
|
+
"./trigger-generator.ts": task$15
|
|
34
|
+
};
|
|
35
|
+
|
|
36
|
+
//#endregion
|
|
37
|
+
export { generationTasks };
|
|
38
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","names":[],"sources":["../../../../src/commands/pull-v4/generators/index.ts"],"sourcesContent":["import type { GenerationTask } from '../generation-types';\n\nexport const generationTasks: Record<\n `./${string}-generator.ts`,\n GenerationTask<unknown>\n> = import.meta\n // @ts-expect-error -- https://vite.dev/guide/features#named-imports\n .glob('./*-generator.ts', {\n import: 'task',\n eager: true,\n });\n"],"mappings":";;;;;;;;;;;;;;;;;AAEA,MAAa,kBAGT;;;;;;;;;;;;;;;;CAKA"}
|
|
@@ -1,6 +1,13 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { codeCall, codePropertyAccess, codeReference } from "../utils/code-values.js";
|
|
2
|
+
import { toToolReferenceName } from "../utils/naming.js";
|
|
3
|
+
import { addValueToObject } from "../utils/factory-writer.js";
|
|
4
|
+
import "../utils/index.js";
|
|
5
|
+
import { buildSequentialNameFileNames } from "../generation-resolver.js";
|
|
6
|
+
import { generateFactorySourceFile } from "../simple-factory-generator.js";
|
|
7
|
+
import { addNamedImports, applyImportPlan, createImportPlan } from "../import-plan.js";
|
|
2
8
|
import { FullProjectDefinitionSchema } from "@inkeep/agents-core";
|
|
3
9
|
import { z } from "zod";
|
|
10
|
+
import { join } from "node:path";
|
|
4
11
|
|
|
5
12
|
//#region src/commands/pull-v4/generators/mcp-tool-generator.ts
|
|
6
13
|
const MySchema = FullProjectDefinitionSchema.shape.tools.valueType.omit({
|
|
@@ -17,34 +24,48 @@ const McpToolSchema = z.strictObject({
|
|
|
17
24
|
credential: z.record(z.string(), z.unknown()).optional()
|
|
18
25
|
});
|
|
19
26
|
function generateMcpToolDefinition({ tenantId, id, projectId, createdAt, updatedAt, lastError, ...data }) {
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
27
|
+
return generateFactorySourceFile(data, {
|
|
28
|
+
schema: McpToolSchema,
|
|
29
|
+
factory: {
|
|
30
|
+
importName: "mcpTool",
|
|
31
|
+
variableName: (parsed) => toToolReferenceName(parsed.name)
|
|
32
|
+
},
|
|
33
|
+
render({ parsed, sourceFile, configObject }) {
|
|
34
|
+
const { credentialReferenceId, config, mcpToolId, ...rest } = parsed;
|
|
35
|
+
const activeTools = config?.mcp?.activeTools;
|
|
36
|
+
for (const [k, v] of Object.entries({
|
|
37
|
+
id: mcpToolId,
|
|
38
|
+
...rest,
|
|
39
|
+
serverUrl: config?.mcp?.server?.url,
|
|
40
|
+
transport: config?.mcp?.transport,
|
|
41
|
+
...activeTools?.length && { activeTools }
|
|
42
|
+
})) addValueToObject(configObject, k, v);
|
|
43
|
+
const importPlan = createImportPlan();
|
|
44
|
+
if (credentialReferenceId) {
|
|
45
|
+
addNamedImports(importPlan, "../environments", "envSettings");
|
|
46
|
+
addValueToObject(configObject, "credential", codeCall(codePropertyAccess(codeReference("envSettings"), "getEnvironmentCredential"), credentialReferenceId));
|
|
47
|
+
}
|
|
48
|
+
applyImportPlan(sourceFile, importPlan);
|
|
49
|
+
}
|
|
26
50
|
});
|
|
27
|
-
const activeTools = config?.mcp?.activeTools;
|
|
28
|
-
for (const [k, v] of Object.entries({
|
|
29
|
-
id: mcpToolId,
|
|
30
|
-
...parsed,
|
|
31
|
-
serverUrl: config?.mcp?.server?.url,
|
|
32
|
-
transport: config?.mcp?.transport,
|
|
33
|
-
...activeTools?.length && { activeTools }
|
|
34
|
-
})) addValueToObject(configObject, k, v);
|
|
35
|
-
if (credentialReferenceId) {
|
|
36
|
-
sourceFile.addImportDeclaration({
|
|
37
|
-
namedImports: ["envSettings"],
|
|
38
|
-
moduleSpecifier: "../environments"
|
|
39
|
-
});
|
|
40
|
-
configObject.addPropertyAssignment({
|
|
41
|
-
name: "credential",
|
|
42
|
-
initializer: `envSettings.getEnvironmentCredential(${formatStringLiteral(credentialReferenceId)})`
|
|
43
|
-
});
|
|
44
|
-
}
|
|
45
|
-
return sourceFile;
|
|
46
51
|
}
|
|
52
|
+
const task = {
|
|
53
|
+
type: "tool",
|
|
54
|
+
collect(context) {
|
|
55
|
+
const toolEntries = Object.entries(context.project.tools ?? {});
|
|
56
|
+
const fileNamesByToolId = buildSequentialNameFileNames(toolEntries);
|
|
57
|
+
return toolEntries.map(([toolId, toolData]) => ({
|
|
58
|
+
id: toolId,
|
|
59
|
+
filePath: context.resolver.resolveOutputFilePath("tools", toolId, join(context.paths.toolsDir, fileNamesByToolId[toolId])),
|
|
60
|
+
payload: {
|
|
61
|
+
mcpToolId: toolId,
|
|
62
|
+
...toolData
|
|
63
|
+
}
|
|
64
|
+
}));
|
|
65
|
+
},
|
|
66
|
+
generate: generateMcpToolDefinition
|
|
67
|
+
};
|
|
47
68
|
|
|
48
69
|
//#endregion
|
|
49
|
-
export { generateMcpToolDefinition };
|
|
70
|
+
export { generateMcpToolDefinition, task };
|
|
50
71
|
//# sourceMappingURL=mcp-tool-generator.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mcp-tool-generator.js","names":[],"sources":["../../../../src/commands/pull-v4/generators/mcp-tool-generator.ts"],"sourcesContent":["import { FullProjectDefinitionSchema } from '@inkeep/agents-core';\nimport type { SourceFile } from 'ts-morph';\nimport { z } from 'zod';\nimport {\n addValueToObject,\n
|
|
1
|
+
{"version":3,"file":"mcp-tool-generator.js","names":[],"sources":["../../../../src/commands/pull-v4/generators/mcp-tool-generator.ts"],"sourcesContent":["import { join } from 'node:path';\nimport { FullProjectDefinitionSchema } from '@inkeep/agents-core';\nimport type { SourceFile } from 'ts-morph';\nimport { z } from 'zod';\nimport { buildSequentialNameFileNames } from '../generation-resolver';\nimport type { GenerationTask } from '../generation-types';\nimport { addNamedImports, applyImportPlan, createImportPlan } from '../import-plan';\nimport { generateFactorySourceFile } from '../simple-factory-generator';\nimport {\n addValueToObject,\n codeCall,\n codePropertyAccess,\n codeReference,\n toToolReferenceName,\n} from '../utils';\n\nconst MySchema = FullProjectDefinitionSchema.shape.tools.valueType.omit({\n id: true,\n lastError: true,\n});\n\nconst McpToolSchema = z.strictObject({\n mcpToolId: z.string().nonempty(),\n ...MySchema.shape,\n description: z.preprocess((v) => v ?? undefined, MySchema.shape.description),\n headers: z.preprocess((v) => v ?? undefined, MySchema.shape.headers),\n capabilities: z.preprocess(\n (v) => (v && Object.keys(v).length && v) || undefined,\n MySchema.shape.capabilities\n ),\n imageUrl: z.preprocess((v) => v || undefined, MySchema.shape.imageUrl),\n // Additional field\n credential: z.record(z.string(), z.unknown()).optional(),\n});\n\ntype McpToolInput = z.input<typeof McpToolSchema>;\n\nexport function generateMcpToolDefinition({\n tenantId,\n id,\n projectId,\n createdAt,\n updatedAt,\n lastError,\n ...data\n}: McpToolInput & Record<string, unknown>): SourceFile {\n return generateFactorySourceFile(data, {\n schema: McpToolSchema,\n factory: {\n importName: 'mcpTool',\n variableName: (parsed) => toToolReferenceName(parsed.name),\n },\n render({ parsed, sourceFile, configObject }) {\n const { credentialReferenceId, config, mcpToolId, ...rest } = parsed;\n\n const activeTools = config?.mcp?.activeTools;\n for (const [k, v] of Object.entries({\n id: mcpToolId,\n ...rest,\n serverUrl: config?.mcp?.server?.url,\n transport: config?.mcp?.transport,\n ...(activeTools?.length && { activeTools }),\n })) {\n addValueToObject(configObject, k, v);\n }\n\n const importPlan = createImportPlan();\n if (credentialReferenceId) {\n addNamedImports(importPlan, '../environments', 'envSettings');\n addValueToObject(\n configObject,\n 'credential',\n codeCall(\n codePropertyAccess(codeReference('envSettings'), 'getEnvironmentCredential'),\n credentialReferenceId\n )\n );\n }\n applyImportPlan(sourceFile, importPlan);\n },\n });\n}\n\nexport const task = {\n type: 'tool',\n collect(context) {\n const toolEntries = Object.entries(context.project.tools ?? {});\n const fileNamesByToolId = buildSequentialNameFileNames(toolEntries);\n\n return toolEntries.map(([toolId, toolData]) => ({\n id: toolId,\n filePath: context.resolver.resolveOutputFilePath(\n 'tools',\n toolId,\n join(context.paths.toolsDir, fileNamesByToolId[toolId])\n ),\n payload: {\n mcpToolId: toolId,\n ...toolData,\n } as Parameters<typeof generateMcpToolDefinition>[0],\n }));\n },\n generate: generateMcpToolDefinition,\n} satisfies GenerationTask<Parameters<typeof generateMcpToolDefinition>[0]>;\n"],"mappings":";;;;;;;;;;;;AAgBA,MAAM,WAAW,4BAA4B,MAAM,MAAM,UAAU,KAAK;CACtE,IAAI;CACJ,WAAW;CACZ,CAAC;AAEF,MAAM,gBAAgB,EAAE,aAAa;CACnC,WAAW,EAAE,QAAQ,CAAC,UAAU;CAChC,GAAG,SAAS;CACZ,aAAa,EAAE,YAAY,MAAM,KAAK,QAAW,SAAS,MAAM,YAAY;CAC5E,SAAS,EAAE,YAAY,MAAM,KAAK,QAAW,SAAS,MAAM,QAAQ;CACpE,cAAc,EAAE,YACb,MAAO,KAAK,OAAO,KAAK,EAAE,CAAC,UAAU,KAAM,QAC5C,SAAS,MAAM,aAChB;CACD,UAAU,EAAE,YAAY,MAAM,KAAK,QAAW,SAAS,MAAM,SAAS;CAEtE,YAAY,EAAE,OAAO,EAAE,QAAQ,EAAE,EAAE,SAAS,CAAC,CAAC,UAAU;CACzD,CAAC;AAIF,SAAgB,0BAA0B,EACxC,UACA,IACA,WACA,WACA,WACA,WACA,GAAG,QACkD;AACrD,QAAO,0BAA0B,MAAM;EACrC,QAAQ;EACR,SAAS;GACP,YAAY;GACZ,eAAe,WAAW,oBAAoB,OAAO,KAAK;GAC3D;EACD,OAAO,EAAE,QAAQ,YAAY,gBAAgB;GAC3C,MAAM,EAAE,uBAAuB,QAAQ,WAAW,GAAG,SAAS;GAE9D,MAAM,cAAc,QAAQ,KAAK;AACjC,QAAK,MAAM,CAAC,GAAG,MAAM,OAAO,QAAQ;IAClC,IAAI;IACJ,GAAG;IACH,WAAW,QAAQ,KAAK,QAAQ;IAChC,WAAW,QAAQ,KAAK;IACxB,GAAI,aAAa,UAAU,EAAE,aAAa;IAC3C,CAAC,CACA,kBAAiB,cAAc,GAAG,EAAE;GAGtC,MAAM,aAAa,kBAAkB;AACrC,OAAI,uBAAuB;AACzB,oBAAgB,YAAY,mBAAmB,cAAc;AAC7D,qBACE,cACA,cACA,SACE,mBAAmB,cAAc,cAAc,EAAE,2BAA2B,EAC5E,sBACD,CACF;;AAEH,mBAAgB,YAAY,WAAW;;EAE1C,CAAC;;AAGJ,MAAa,OAAO;CAClB,MAAM;CACN,QAAQ,SAAS;EACf,MAAM,cAAc,OAAO,QAAQ,QAAQ,QAAQ,SAAS,EAAE,CAAC;EAC/D,MAAM,oBAAoB,6BAA6B,YAAY;AAEnE,SAAO,YAAY,KAAK,CAAC,QAAQ,eAAe;GAC9C,IAAI;GACJ,UAAU,QAAQ,SAAS,sBACzB,SACA,QACA,KAAK,QAAQ,MAAM,UAAU,kBAAkB,QAAQ,CACxD;GACD,SAAS;IACP,WAAW;IACX,GAAG;IACJ;GACF,EAAE;;CAEL,UAAU;CACX"}
|