@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.
Files changed (88) hide show
  1. package/dist/agents-cli/package.js +1 -1
  2. package/dist/commands/pull-v4/collector-common.js +128 -0
  3. package/dist/commands/pull-v4/collector-common.js.map +1 -0
  4. package/dist/commands/pull-v4/collector-reference-helpers.js +323 -0
  5. package/dist/commands/pull-v4/collector-reference-helpers.js.map +1 -0
  6. package/dist/commands/pull-v4/component-parser.js +2 -1
  7. package/dist/commands/pull-v4/component-parser.js.map +1 -1
  8. package/dist/commands/pull-v4/file-scope.js +43 -0
  9. package/dist/commands/pull-v4/file-scope.js.map +1 -0
  10. package/dist/commands/pull-v4/generation-resolver.js +305 -0
  11. package/dist/commands/pull-v4/generation-resolver.js.map +1 -0
  12. package/dist/commands/pull-v4/generation-types.js +56 -0
  13. package/dist/commands/pull-v4/generation-types.js.map +1 -0
  14. package/dist/commands/pull-v4/generators/agent-generator.helpers.js +4 -10
  15. package/dist/commands/pull-v4/generators/agent-generator.helpers.js.map +1 -1
  16. package/dist/commands/pull-v4/generators/agent-generator.js +154 -81
  17. package/dist/commands/pull-v4/generators/agent-generator.js.map +1 -1
  18. package/dist/commands/pull-v4/generators/artifact-component-generator.js +48 -27
  19. package/dist/commands/pull-v4/generators/artifact-component-generator.js.map +1 -1
  20. package/dist/commands/pull-v4/generators/context-config-generator.js +147 -129
  21. package/dist/commands/pull-v4/generators/context-config-generator.js.map +1 -1
  22. package/dist/commands/pull-v4/generators/credential-generator.js +36 -14
  23. package/dist/commands/pull-v4/generators/credential-generator.js.map +1 -1
  24. package/dist/commands/pull-v4/generators/data-component-generator.js +55 -19
  25. package/dist/commands/pull-v4/generators/data-component-generator.js.map +1 -1
  26. package/dist/commands/pull-v4/generators/environment-generator.js +29 -33
  27. package/dist/commands/pull-v4/generators/environment-generator.js.map +1 -1
  28. package/dist/commands/pull-v4/generators/environment-settings-generator.js +57 -0
  29. package/dist/commands/pull-v4/generators/environment-settings-generator.js.map +1 -0
  30. package/dist/commands/pull-v4/generators/external-agent-generator.js +51 -23
  31. package/dist/commands/pull-v4/generators/external-agent-generator.js.map +1 -1
  32. package/dist/commands/pull-v4/generators/function-tool-generator.js +50 -14
  33. package/dist/commands/pull-v4/generators/function-tool-generator.js.map +1 -1
  34. package/dist/commands/pull-v4/generators/helpers/agent.js +129 -0
  35. package/dist/commands/pull-v4/generators/helpers/agent.js.map +1 -0
  36. package/dist/commands/pull-v4/generators/helpers/sub-agent.js +65 -0
  37. package/dist/commands/pull-v4/generators/helpers/sub-agent.js.map +1 -0
  38. package/dist/commands/pull-v4/generators/index.js +38 -0
  39. package/dist/commands/pull-v4/generators/index.js.map +1 -0
  40. package/dist/commands/pull-v4/generators/mcp-tool-generator.js +48 -27
  41. package/dist/commands/pull-v4/generators/mcp-tool-generator.js.map +1 -1
  42. package/dist/commands/pull-v4/generators/project-generator.js +144 -110
  43. package/dist/commands/pull-v4/generators/project-generator.js.map +1 -1
  44. package/dist/commands/pull-v4/generators/scheduled-trigger-generator.js +66 -0
  45. package/dist/commands/pull-v4/generators/scheduled-trigger-generator.js.map +1 -0
  46. package/dist/commands/pull-v4/generators/status-component-generator.js +55 -20
  47. package/dist/commands/pull-v4/generators/status-component-generator.js.map +1 -1
  48. package/dist/commands/pull-v4/generators/sub-agent-generator.helpers.js +4 -1
  49. package/dist/commands/pull-v4/generators/sub-agent-generator.helpers.js.map +1 -1
  50. package/dist/commands/pull-v4/generators/sub-agent-generator.js +282 -166
  51. package/dist/commands/pull-v4/generators/sub-agent-generator.js.map +1 -1
  52. package/dist/commands/pull-v4/generators/trigger-generator.js +62 -27
  53. package/dist/commands/pull-v4/generators/trigger-generator.js.map +1 -1
  54. package/dist/commands/pull-v4/import-plan.js +40 -0
  55. package/dist/commands/pull-v4/import-plan.js.map +1 -0
  56. package/dist/commands/pull-v4/introspect/index.js +11 -7
  57. package/dist/commands/pull-v4/introspect/index.js.map +1 -1
  58. package/dist/commands/pull-v4/introspect-generator.js +15 -1218
  59. package/dist/commands/pull-v4/introspect-generator.js.map +1 -1
  60. package/dist/commands/pull-v4/module-merge.js +14 -5
  61. package/dist/commands/pull-v4/module-merge.js.map +1 -1
  62. package/dist/commands/pull-v4/reference-resolution.js +111 -0
  63. package/dist/commands/pull-v4/reference-resolution.js.map +1 -0
  64. package/dist/commands/pull-v4/simple-factory-generator.js +54 -0
  65. package/dist/commands/pull-v4/simple-factory-generator.js.map +1 -0
  66. package/dist/commands/pull-v4/{generators/skill-generator.js → skill.js} +18 -6
  67. package/dist/commands/pull-v4/skill.js.map +1 -0
  68. package/dist/commands/pull-v4/typescript-file-writer.js +78 -0
  69. package/dist/commands/pull-v4/typescript-file-writer.js.map +1 -0
  70. package/dist/commands/pull-v4/utils/code-values.js +64 -0
  71. package/dist/commands/pull-v4/utils/code-values.js.map +1 -0
  72. package/dist/commands/pull-v4/utils/factory-writer.js +128 -0
  73. package/dist/commands/pull-v4/utils/factory-writer.js.map +1 -0
  74. package/dist/commands/pull-v4/utils/index.js +8 -0
  75. package/dist/commands/pull-v4/utils/naming.js +74 -0
  76. package/dist/commands/pull-v4/utils/naming.js.map +1 -0
  77. package/dist/commands/pull-v4/utils/schema-rendering.js +20 -0
  78. package/dist/commands/pull-v4/utils/schema-rendering.js.map +1 -0
  79. package/dist/commands/pull-v4/utils/shared.js +18 -0
  80. package/dist/commands/pull-v4/utils/shared.js.map +1 -0
  81. package/dist/commands/pull-v4/utils/templates.js +58 -0
  82. package/dist/commands/pull-v4/utils/templates.js.map +1 -0
  83. package/package.json +4 -4
  84. package/dist/commands/pull-v4/generators/skill-generator.js.map +0 -1
  85. package/dist/commands/pull-v4/scheduled-trigger-generator.js +0 -38
  86. package/dist/commands/pull-v4/scheduled-trigger-generator.js.map +0 -1
  87. package/dist/commands/pull-v4/utils.js +0 -320
  88. 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 { addValueToObject, createFactoryDefinition, formatStringLiteral, toToolReferenceName } from "../utils.js";
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
- const result = McpToolSchema.safeParse(data);
21
- if (!result.success) throw new Error(`Validation failed for MCP tool:\n${z.prettifyError(result.error)}`);
22
- const { credentialReferenceId, config, mcpToolId, ...parsed } = result.data;
23
- const { sourceFile, configObject } = createFactoryDefinition({
24
- importName: "mcpTool",
25
- variableName: toToolReferenceName(parsed.name)
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 createFactoryDefinition,\n formatStringLiteral,\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 const result = McpToolSchema.safeParse(data);\n if (!result.success) {\n throw new Error(`Validation failed for MCP tool:\\n${z.prettifyError(result.error)}`);\n }\n\n const { credentialReferenceId, config, mcpToolId, ...parsed } = result.data;\n const { sourceFile, configObject } = createFactoryDefinition({\n importName: 'mcpTool',\n variableName: toToolReferenceName(parsed.name),\n });\n\n const activeTools = config?.mcp?.activeTools;\n for (const [k, v] of Object.entries({\n id: mcpToolId,\n ...parsed,\n serverUrl: config?.mcp?.server?.url,\n transport: config?.mcp?.transport,\n ...(activeTools?.length && { activeTools }),\n })) {\n addValueToObject(configObject, k, v);\n }\n\n if (credentialReferenceId) {\n sourceFile.addImportDeclaration({\n namedImports: ['envSettings'],\n moduleSpecifier: '../environments',\n });\n configObject.addPropertyAssignment({\n name: 'credential',\n initializer: `envSettings.getEnvironmentCredential(${formatStringLiteral(credentialReferenceId)})`,\n });\n }\n return sourceFile;\n}\n"],"mappings":";;;;;AAUA,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;CACrD,MAAM,SAAS,cAAc,UAAU,KAAK;AAC5C,KAAI,CAAC,OAAO,QACV,OAAM,IAAI,MAAM,oCAAoC,EAAE,cAAc,OAAO,MAAM,GAAG;CAGtF,MAAM,EAAE,uBAAuB,QAAQ,WAAW,GAAG,WAAW,OAAO;CACvE,MAAM,EAAE,YAAY,iBAAiB,wBAAwB;EAC3D,YAAY;EACZ,cAAc,oBAAoB,OAAO,KAAK;EAC/C,CAAC;CAEF,MAAM,cAAc,QAAQ,KAAK;AACjC,MAAK,MAAM,CAAC,GAAG,MAAM,OAAO,QAAQ;EAClC,IAAI;EACJ,GAAG;EACH,WAAW,QAAQ,KAAK,QAAQ;EAChC,WAAW,QAAQ,KAAK;EACxB,GAAI,aAAa,UAAU,EAAE,aAAa;EAC3C,CAAC,CACA,kBAAiB,cAAc,GAAG,EAAE;AAGtC,KAAI,uBAAuB;AACzB,aAAW,qBAAqB;GAC9B,cAAc,CAAC,cAAc;GAC7B,iBAAiB;GAClB,CAAC;AACF,eAAa,sBAAsB;GACjC,MAAM;GACN,aAAa,wCAAwC,oBAAoB,sBAAsB,CAAC;GACjG,CAAC;;AAEJ,QAAO"}
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"}