@inkeep/agents-cli 0.51.0 → 0.53.0
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 +6 -0
- package/dist/commands/config.js +1 -1
- package/dist/commands/dev.js +1 -1
- package/dist/commands/init.js +1 -1
- package/dist/commands/{pull-v3 → pull-v4}/component-parser.js +6 -12
- package/dist/commands/{pull-v3/utils → pull-v4}/component-registry.js +1 -1
- package/dist/commands/pull-v4/generators/agent-generator.js +258 -0
- package/dist/commands/pull-v4/generators/artifact-component-generator.js +69 -0
- package/dist/commands/pull-v4/generators/context-config-generator.js +264 -0
- package/dist/commands/pull-v4/generators/credential-generator.js +30 -0
- package/dist/commands/pull-v4/generators/data-component-generator.js +50 -0
- package/dist/commands/pull-v4/generators/environment-generator.js +123 -0
- package/dist/commands/pull-v4/generators/external-agent-generator.js +56 -0
- package/dist/commands/pull-v4/generators/function-tool-generator.js +48 -0
- package/dist/commands/pull-v4/generators/mcp-tool-generator.js +91 -0
- package/dist/commands/pull-v4/generators/project-generator.js +125 -0
- package/dist/commands/{pull-v3/components → pull-v4/generators}/skill-generator.js +1 -1
- package/dist/commands/pull-v4/generators/status-component-generator.js +35 -0
- package/dist/commands/pull-v4/generators/sub-agent-generator.js +269 -0
- package/dist/commands/pull-v4/generators/trigger-generator.js +58 -0
- package/dist/commands/pull-v4/introspect/index.js +365 -0
- package/dist/commands/pull-v4/introspect/test-helpers.js +143 -0
- package/dist/commands/pull-v4/introspect-generator.js +706 -0
- package/dist/commands/pull-v4/module-merge.js +405 -0
- package/dist/commands/pull-v4/utils.js +235 -0
- package/dist/commands/push.js +1 -1
- package/dist/commands/update.js +2 -2
- package/dist/index.js +18 -44
- package/dist/node_modules/.pnpm/diff@8.0.3/node_modules/diff/libesm/diff/array.js +18 -0
- package/dist/node_modules/.pnpm/diff@8.0.3/node_modules/diff/libesm/diff/base.js +180 -0
- package/dist/node_modules/.pnpm/diff@8.0.3/node_modules/diff/libesm/diff/character.js +8 -0
- package/dist/node_modules/.pnpm/diff@8.0.3/node_modules/diff/libesm/diff/css.js +12 -0
- package/dist/node_modules/.pnpm/diff@8.0.3/node_modules/diff/libesm/diff/json.js +60 -0
- package/dist/node_modules/.pnpm/diff@8.0.3/node_modules/diff/libesm/diff/line.js +37 -0
- package/dist/node_modules/.pnpm/diff@8.0.3/node_modules/diff/libesm/diff/sentence.js +31 -0
- package/dist/node_modules/.pnpm/diff@8.0.3/node_modules/diff/libesm/diff/word.js +118 -0
- package/dist/node_modules/.pnpm/diff@8.0.3/node_modules/diff/libesm/index.js +11 -0
- package/dist/node_modules/.pnpm/diff@8.0.3/node_modules/diff/libesm/patch/create.js +141 -0
- package/dist/node_modules/.pnpm/diff@8.0.3/node_modules/diff/libesm/util/string.js +63 -0
- package/dist/utils/ci-environment.js +1 -1
- package/dist/utils/config.js +1 -1
- package/dist/utils/environment-loader.js +1 -1
- package/dist/utils/file-finder.js +1 -1
- package/dist/utils/mcp-runner.js +1 -1
- package/dist/utils/profile-config.js +1 -1
- package/dist/utils/profiles/profile-manager.js +1 -1
- package/dist/utils/project-directory.js +1 -1
- package/dist/utils/project-loader.js +1 -1
- package/dist/utils/version-check.js +6 -15
- package/package.json +5 -7
- package/dist/commands/pull-v3/component-updater.js +0 -768
- package/dist/commands/pull-v3/components/agent-generator.js +0 -255
- package/dist/commands/pull-v3/components/artifact-component-generator.js +0 -143
- package/dist/commands/pull-v3/components/context-config-generator.js +0 -190
- package/dist/commands/pull-v3/components/credential-generator.js +0 -89
- package/dist/commands/pull-v3/components/data-component-generator.js +0 -102
- package/dist/commands/pull-v3/components/environment-generator.js +0 -173
- package/dist/commands/pull-v3/components/external-agent-generator.js +0 -75
- package/dist/commands/pull-v3/components/function-tool-generator.js +0 -92
- package/dist/commands/pull-v3/components/mcp-tool-generator.js +0 -86
- package/dist/commands/pull-v3/components/project-generator.js +0 -157
- package/dist/commands/pull-v3/components/status-component-generator.js +0 -92
- package/dist/commands/pull-v3/components/sub-agent-generator.js +0 -295
- package/dist/commands/pull-v3/components/trigger-generator.js +0 -185
- package/dist/commands/pull-v3/index.js +0 -510
- package/dist/commands/pull-v3/introspect-generator.js +0 -286
- package/dist/commands/pull-v3/llm-content-merger.js +0 -192
- package/dist/commands/pull-v3/new-component-generator.js +0 -279
- package/dist/commands/pull-v3/project-comparator.js +0 -914
- package/dist/commands/pull-v3/project-index-generator.js +0 -32
- package/dist/commands/pull-v3/project-validator.js +0 -358
- package/dist/commands/pull-v3/targeted-typescript-placeholders.js +0 -173
- package/dist/commands/pull-v3/utils/component-tracker.js +0 -165
- package/dist/commands/pull-v3/utils/generator-utils.js +0 -146
- package/dist/commands/pull-v3/utils/model-provider-detector.js +0 -50
- package/dist/utils/url.js +0 -26
|
@@ -0,0 +1,269 @@
|
|
|
1
|
+
import { addReferenceGetterProperty, addStringProperty, addValueToObject, collectTemplateVariableNames, convertNullToUndefined, createFactoryDefinition, formatInlineLiteral, formatTemplate, hasReferences, isPlainObject, resolveReferenceName, toCamelCase } from "../utils.js";
|
|
2
|
+
import { FullAgentAgentInsertSchema } from "@inkeep/agents-core";
|
|
3
|
+
import { z } from "zod";
|
|
4
|
+
import { SyntaxKind } from "ts-morph";
|
|
5
|
+
|
|
6
|
+
//#region src/commands/pull-v4/generators/sub-agent-generator.ts
|
|
7
|
+
const ReferenceNameByIdSchema = z.record(z.string(), z.string().nonempty());
|
|
8
|
+
const ReferenceOverridesSchema = z.object({
|
|
9
|
+
tools: ReferenceNameByIdSchema.optional(),
|
|
10
|
+
subAgents: ReferenceNameByIdSchema.optional(),
|
|
11
|
+
agents: ReferenceNameByIdSchema.optional(),
|
|
12
|
+
externalAgents: ReferenceNameByIdSchema.optional(),
|
|
13
|
+
dataComponents: ReferenceNameByIdSchema.optional(),
|
|
14
|
+
artifactComponents: ReferenceNameByIdSchema.optional()
|
|
15
|
+
});
|
|
16
|
+
const ContextTemplateReferenceSchema = z.object({
|
|
17
|
+
name: z.string().nonempty(),
|
|
18
|
+
local: z.boolean().optional()
|
|
19
|
+
});
|
|
20
|
+
const SubAgentSchema = FullAgentAgentInsertSchema.pick({
|
|
21
|
+
id: true,
|
|
22
|
+
description: true,
|
|
23
|
+
prompt: true
|
|
24
|
+
}).extend({
|
|
25
|
+
name: z.string().optional(),
|
|
26
|
+
stopWhen: z.preprocess(convertNullToUndefined, FullAgentAgentInsertSchema.shape.stopWhen),
|
|
27
|
+
models: z.preprocess(convertNullToUndefined, z.looseObject({}).optional()),
|
|
28
|
+
skills: z.array(z.unknown()).optional(),
|
|
29
|
+
canUse: z.array(z.unknown()).optional(),
|
|
30
|
+
canDelegateTo: z.array(z.unknown()).optional(),
|
|
31
|
+
canTransferTo: z.array(z.string()).optional(),
|
|
32
|
+
dataComponents: z.array(z.string()).optional(),
|
|
33
|
+
artifactComponents: z.array(z.string()).optional(),
|
|
34
|
+
referenceOverrides: ReferenceOverridesSchema.optional(),
|
|
35
|
+
contextConfigId: z.string().nonempty().optional(),
|
|
36
|
+
contextConfigReference: ContextTemplateReferenceSchema.optional(),
|
|
37
|
+
contextConfigHeadersReference: ContextTemplateReferenceSchema.optional()
|
|
38
|
+
});
|
|
39
|
+
function generateSubAgentDefinition(data) {
|
|
40
|
+
const result = SubAgentSchema.safeParse(data);
|
|
41
|
+
if (!result.success) throw new Error(`Validation failed for sub-agent:\n${z.prettifyError(result.error)}`);
|
|
42
|
+
const parsed = result.data;
|
|
43
|
+
const { sourceFile, configObject } = createFactoryDefinition({
|
|
44
|
+
importName: "subAgent",
|
|
45
|
+
variableName: toCamelCase(parsed.id)
|
|
46
|
+
});
|
|
47
|
+
const promptTemplateVariables = typeof parsed.prompt === "string" ? collectTemplateVariableNames(parsed.prompt) : [];
|
|
48
|
+
const hasContextTemplateVariables = promptTemplateVariables.some((variableName) => !variableName.startsWith("headers."));
|
|
49
|
+
const hasHeadersTemplateVariables = promptTemplateVariables.some((variableName) => variableName.startsWith("headers."));
|
|
50
|
+
const namedImports = [];
|
|
51
|
+
if (hasContextTemplateVariables && parsed.contextConfigId && parsed.contextConfigReference && parsed.contextConfigReference.local !== true) namedImports.push(parsed.contextConfigReference.name);
|
|
52
|
+
if (hasHeadersTemplateVariables && parsed.contextConfigId && parsed.contextConfigHeadersReference && parsed.contextConfigHeadersReference.local !== true) namedImports.push(parsed.contextConfigHeadersReference.name);
|
|
53
|
+
if (namedImports.length > 0 && parsed.contextConfigId) sourceFile.addImportDeclaration({
|
|
54
|
+
namedImports: [...new Set(namedImports)],
|
|
55
|
+
moduleSpecifier: `../context-configs/${parsed.contextConfigId}`
|
|
56
|
+
});
|
|
57
|
+
addCanUseToolImports(sourceFile, parsed.canUse, parsed.referenceOverrides?.tools);
|
|
58
|
+
addDataComponentImports(sourceFile, parsed.dataComponents, parsed.referenceOverrides?.dataComponents);
|
|
59
|
+
addArtifactComponentImports(sourceFile, parsed.artifactComponents, parsed.referenceOverrides?.artifactComponents);
|
|
60
|
+
addDelegateTargetImports(sourceFile, {
|
|
61
|
+
currentSubAgentId: parsed.id,
|
|
62
|
+
canDelegateTo: parsed.canDelegateTo,
|
|
63
|
+
canTransferTo: parsed.canTransferTo,
|
|
64
|
+
referenceOverrides: {
|
|
65
|
+
subAgents: parsed.referenceOverrides?.subAgents,
|
|
66
|
+
agents: parsed.referenceOverrides?.agents,
|
|
67
|
+
externalAgents: parsed.referenceOverrides?.externalAgents
|
|
68
|
+
}
|
|
69
|
+
});
|
|
70
|
+
writeSubAgentConfig(configObject, {
|
|
71
|
+
contextReference: parsed.contextConfigReference?.name,
|
|
72
|
+
headersReference: parsed.contextConfigHeadersReference?.name
|
|
73
|
+
}, parsed);
|
|
74
|
+
return sourceFile;
|
|
75
|
+
}
|
|
76
|
+
function addCanUseToolImports(sourceFile, canUse, toolReferenceOverrides) {
|
|
77
|
+
const toolImportsById = /* @__PURE__ */ new Map();
|
|
78
|
+
for (const item of canUse ?? []) {
|
|
79
|
+
const toolId = typeof item === "string" ? item : isPlainObject(item) && typeof item.toolId === "string" ? item.toolId : void 0;
|
|
80
|
+
if (!toolId || toolImportsById.has(toolId)) continue;
|
|
81
|
+
toolImportsById.set(toolId, resolveReferenceName(toolId, [toolReferenceOverrides]));
|
|
82
|
+
}
|
|
83
|
+
for (const [toolId, referenceName] of toolImportsById) sourceFile.addImportDeclaration({
|
|
84
|
+
namedImports: [referenceName],
|
|
85
|
+
moduleSpecifier: `../../tools/${toolId}`
|
|
86
|
+
});
|
|
87
|
+
}
|
|
88
|
+
function addDataComponentImports(sourceFile, dataComponents, dataComponentReferenceOverrides) {
|
|
89
|
+
addReferenceImports(sourceFile, dataComponents, "../../data-components", dataComponentReferenceOverrides);
|
|
90
|
+
}
|
|
91
|
+
function addArtifactComponentImports(sourceFile, artifactComponents, artifactComponentReferenceOverrides) {
|
|
92
|
+
addReferenceImports(sourceFile, artifactComponents, "../../artifact-components", artifactComponentReferenceOverrides);
|
|
93
|
+
}
|
|
94
|
+
function addReferenceImports(sourceFile, references, basePath, referenceOverrides) {
|
|
95
|
+
const importByReferenceId = /* @__PURE__ */ new Map();
|
|
96
|
+
for (const referenceId of references ?? []) {
|
|
97
|
+
if (!referenceId || importByReferenceId.has(referenceId)) continue;
|
|
98
|
+
importByReferenceId.set(referenceId, resolveReferenceName(referenceId, [referenceOverrides]));
|
|
99
|
+
}
|
|
100
|
+
for (const [referenceId, referenceName] of importByReferenceId) sourceFile.addImportDeclaration({
|
|
101
|
+
namedImports: [referenceName],
|
|
102
|
+
moduleSpecifier: `${basePath}/${referenceId}`
|
|
103
|
+
});
|
|
104
|
+
}
|
|
105
|
+
function addDelegateTargetImports(sourceFile, options) {
|
|
106
|
+
const importsByTarget = /* @__PURE__ */ new Map();
|
|
107
|
+
for (const item of options.canDelegateTo ?? []) {
|
|
108
|
+
const resolvedTarget = resolveDelegateTargetImport(item, options.referenceOverrides);
|
|
109
|
+
if (!resolvedTarget) continue;
|
|
110
|
+
if (resolvedTarget.type === "subAgents" && resolvedTarget.id === options.currentSubAgentId) continue;
|
|
111
|
+
importsByTarget.set(`${resolvedTarget.type}:${resolvedTarget.id}`, resolvedTarget);
|
|
112
|
+
}
|
|
113
|
+
for (const targetId of options.canTransferTo ?? []) {
|
|
114
|
+
const resolvedTarget = resolveDelegateTargetImport(targetId, options.referenceOverrides);
|
|
115
|
+
if (!resolvedTarget) continue;
|
|
116
|
+
if (resolvedTarget.type === "subAgents" && resolvedTarget.id === options.currentSubAgentId) continue;
|
|
117
|
+
importsByTarget.set(`${resolvedTarget.type}:${resolvedTarget.id}`, resolvedTarget);
|
|
118
|
+
}
|
|
119
|
+
for (const target of importsByTarget.values()) sourceFile.addImportDeclaration({
|
|
120
|
+
namedImports: [target.name],
|
|
121
|
+
moduleSpecifier: resolveDelegateImportModuleSpecifier(target.type, target.id)
|
|
122
|
+
});
|
|
123
|
+
}
|
|
124
|
+
function resolveDelegateTargetImport(canDelegateToEntry, referenceOverrides) {
|
|
125
|
+
if (typeof canDelegateToEntry === "string") {
|
|
126
|
+
const resolvedType = resolveDelegateTargetType(canDelegateToEntry, referenceOverrides);
|
|
127
|
+
if (!resolvedType) return;
|
|
128
|
+
return {
|
|
129
|
+
type: resolvedType,
|
|
130
|
+
id: canDelegateToEntry,
|
|
131
|
+
name: resolveReferenceName(canDelegateToEntry, [referenceOverrides[resolvedType]])
|
|
132
|
+
};
|
|
133
|
+
}
|
|
134
|
+
if (!isPlainObject(canDelegateToEntry)) return;
|
|
135
|
+
if (typeof canDelegateToEntry.subAgentId === "string") return {
|
|
136
|
+
type: "subAgents",
|
|
137
|
+
id: canDelegateToEntry.subAgentId,
|
|
138
|
+
name: resolveReferenceName(canDelegateToEntry.subAgentId, [referenceOverrides.subAgents])
|
|
139
|
+
};
|
|
140
|
+
if (typeof canDelegateToEntry.agentId === "string") return {
|
|
141
|
+
type: "agents",
|
|
142
|
+
id: canDelegateToEntry.agentId,
|
|
143
|
+
name: resolveReferenceName(canDelegateToEntry.agentId, [referenceOverrides.agents])
|
|
144
|
+
};
|
|
145
|
+
if (typeof canDelegateToEntry.externalAgentId === "string") return {
|
|
146
|
+
type: "externalAgents",
|
|
147
|
+
id: canDelegateToEntry.externalAgentId,
|
|
148
|
+
name: resolveReferenceName(canDelegateToEntry.externalAgentId, [referenceOverrides.externalAgents])
|
|
149
|
+
};
|
|
150
|
+
}
|
|
151
|
+
function resolveDelegateTargetType(targetId, referenceOverrides) {
|
|
152
|
+
if (referenceOverrides.subAgents?.[targetId]) return "subAgents";
|
|
153
|
+
if (referenceOverrides.agents?.[targetId]) return "agents";
|
|
154
|
+
if (referenceOverrides.externalAgents?.[targetId]) return "externalAgents";
|
|
155
|
+
return "subAgents";
|
|
156
|
+
}
|
|
157
|
+
function resolveDelegateImportModuleSpecifier(type, id) {
|
|
158
|
+
switch (type) {
|
|
159
|
+
case "subAgents": return `./${id}`;
|
|
160
|
+
case "agents": return `../${id}`;
|
|
161
|
+
case "externalAgents": return `../../external-agents/${id}`;
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
function writeSubAgentConfig(configObject, templateReferences, { dataComponents, name, canDelegateTo, canTransferTo, skills, artifactComponents, canUse, referenceOverrides, contextConfigId: _contextConfigId, contextConfigReference: _contextConfigReference, contextConfigHeadersReference: _contextConfigHeadersReference, ...rest }) {
|
|
165
|
+
rest = { ...rest };
|
|
166
|
+
rest.prompt &&= formatTemplate(rest.prompt, templateReferences);
|
|
167
|
+
for (const [k, v] of Object.entries(rest)) addValueToObject(configObject, k, v);
|
|
168
|
+
addStringProperty(configObject, "name", resolveSubAgentName(rest.id, name));
|
|
169
|
+
const canUseReferences = collectCanUseReferences(canUse, referenceOverrides?.tools);
|
|
170
|
+
if (canUseReferences.length) addReferenceGetterProperty(configObject, "canUse", canUseReferences);
|
|
171
|
+
const canDelegateToReferences = collectCanDelegateToReferences(canDelegateTo, {
|
|
172
|
+
subAgents: referenceOverrides?.subAgents,
|
|
173
|
+
agents: referenceOverrides?.agents,
|
|
174
|
+
externalAgents: referenceOverrides?.externalAgents
|
|
175
|
+
});
|
|
176
|
+
if (canDelegateToReferences.length) addReferenceGetterProperty(configObject, "canDelegateTo", canDelegateToReferences);
|
|
177
|
+
if (hasReferences(canTransferTo)) addReferenceGetterProperty(configObject, "canTransferTo", canTransferTo.map((id) => resolveReferenceName(id, [
|
|
178
|
+
referenceOverrides?.subAgents,
|
|
179
|
+
referenceOverrides?.agents,
|
|
180
|
+
referenceOverrides?.externalAgents
|
|
181
|
+
])));
|
|
182
|
+
if (hasReferences(dataComponents)) addReferenceGetterProperty(configObject, "dataComponents", dataComponents.map((id) => resolveReferenceName(id, [referenceOverrides?.dataComponents])));
|
|
183
|
+
if (hasReferences(artifactComponents)) addReferenceGetterProperty(configObject, "artifactComponents", artifactComponents.map((id) => resolveReferenceName(id, [referenceOverrides?.artifactComponents])));
|
|
184
|
+
const collectedSkills = collectSkills(skills);
|
|
185
|
+
if (collectedSkills.length > 0) {
|
|
186
|
+
const skillsArray = configObject.addPropertyAssignment({
|
|
187
|
+
name: "skills",
|
|
188
|
+
initializer: "() => []"
|
|
189
|
+
}).getInitializerIfKindOrThrow(SyntaxKind.ArrowFunction).getBody().asKindOrThrow(SyntaxKind.ArrayLiteralExpression);
|
|
190
|
+
for (const skill of collectedSkills) skillsArray.addElement(skill);
|
|
191
|
+
}
|
|
192
|
+
}
|
|
193
|
+
function resolveSubAgentName(subAgentId, name) {
|
|
194
|
+
if (name !== void 0) return name;
|
|
195
|
+
return subAgentId.replace(/[-_]/g, " ").replace(/([a-z])([A-Z])/g, "$1 $2").replace(/\b\w/g, (char) => char.toUpperCase());
|
|
196
|
+
}
|
|
197
|
+
function collectCanUseReferences(canUse, toolReferenceOverrides) {
|
|
198
|
+
if (!Array.isArray(canUse)) return [];
|
|
199
|
+
const references = [];
|
|
200
|
+
for (const item of canUse) {
|
|
201
|
+
if (typeof item === "string") {
|
|
202
|
+
references.push(resolveReferenceName(item, [toolReferenceOverrides]));
|
|
203
|
+
continue;
|
|
204
|
+
}
|
|
205
|
+
if (!isPlainObject(item)) continue;
|
|
206
|
+
const toolId = typeof item.toolId === "string" ? item.toolId : void 0;
|
|
207
|
+
if (!toolId) continue;
|
|
208
|
+
const toolReference = resolveReferenceName(toolId, [toolReferenceOverrides]);
|
|
209
|
+
const withConfig = {};
|
|
210
|
+
const selectedTools = Array.isArray(item.toolSelection) && item.toolSelection.length ? item.toolSelection : Array.isArray(item.selectedTools) && item.selectedTools.length ? item.selectedTools : void 0;
|
|
211
|
+
if (selectedTools) withConfig.selectedTools = selectedTools;
|
|
212
|
+
if (isPlainObject(item.headers) && Object.keys(item.headers).length) withConfig.headers = item.headers;
|
|
213
|
+
if (isPlainObject(item.toolPolicies) && Object.keys(item.toolPolicies).length) withConfig.toolPolicies = item.toolPolicies;
|
|
214
|
+
if (Object.keys(withConfig).length > 0) {
|
|
215
|
+
references.push(`${toolReference}.with(${formatInlineLiteral(withConfig)})`);
|
|
216
|
+
continue;
|
|
217
|
+
}
|
|
218
|
+
references.push(toolReference);
|
|
219
|
+
}
|
|
220
|
+
return references;
|
|
221
|
+
}
|
|
222
|
+
function collectCanDelegateToReferences(canDelegateTo, referenceOverrides) {
|
|
223
|
+
if (!Array.isArray(canDelegateTo)) return [];
|
|
224
|
+
const references = [];
|
|
225
|
+
for (const item of canDelegateTo) {
|
|
226
|
+
if (typeof item === "string") {
|
|
227
|
+
references.push(resolveReferenceName(item, [
|
|
228
|
+
referenceOverrides.subAgents,
|
|
229
|
+
referenceOverrides.agents,
|
|
230
|
+
referenceOverrides.externalAgents
|
|
231
|
+
]));
|
|
232
|
+
continue;
|
|
233
|
+
}
|
|
234
|
+
if (!isPlainObject(item)) continue;
|
|
235
|
+
const subAgentId = typeof item.subAgentId === "string" ? item.subAgentId : void 0;
|
|
236
|
+
const agentId = typeof item.agentId === "string" ? item.agentId : void 0;
|
|
237
|
+
const externalAgentId = typeof item.externalAgentId === "string" ? item.externalAgentId : void 0;
|
|
238
|
+
const targetId = subAgentId || agentId || externalAgentId;
|
|
239
|
+
if (!targetId) continue;
|
|
240
|
+
const targetReference = subAgentId ? resolveReferenceName(subAgentId, [referenceOverrides.subAgents]) : agentId ? resolveReferenceName(agentId, [referenceOverrides.agents]) : resolveReferenceName(targetId, [referenceOverrides.externalAgents]);
|
|
241
|
+
if (isPlainObject(item.headers) && Object.keys(item.headers).length > 0) {
|
|
242
|
+
references.push(`${targetReference}.with(${formatInlineLiteral({ headers: item.headers })})`);
|
|
243
|
+
continue;
|
|
244
|
+
}
|
|
245
|
+
references.push(targetReference);
|
|
246
|
+
}
|
|
247
|
+
return references;
|
|
248
|
+
}
|
|
249
|
+
function collectSkills(skills) {
|
|
250
|
+
if (!Array.isArray(skills)) return [];
|
|
251
|
+
const formattedSkills = [];
|
|
252
|
+
for (const skill of skills) {
|
|
253
|
+
if (typeof skill === "string") {
|
|
254
|
+
formattedSkills.push(formatInlineLiteral(skill));
|
|
255
|
+
continue;
|
|
256
|
+
}
|
|
257
|
+
if (!isPlainObject(skill)) continue;
|
|
258
|
+
const skillId = typeof skill.id === "string" ? skill.id : typeof skill.skillId === "string" ? skill.skillId : void 0;
|
|
259
|
+
if (!skillId) continue;
|
|
260
|
+
const formattedSkill = { id: skillId };
|
|
261
|
+
if (typeof skill.index === "number" && Number.isInteger(skill.index)) formattedSkill.index = skill.index;
|
|
262
|
+
if (typeof skill.alwaysLoaded === "boolean") formattedSkill.alwaysLoaded = skill.alwaysLoaded;
|
|
263
|
+
formattedSkills.push(formatInlineLiteral(formattedSkill));
|
|
264
|
+
}
|
|
265
|
+
return formattedSkills;
|
|
266
|
+
}
|
|
267
|
+
|
|
268
|
+
//#endregion
|
|
269
|
+
export { generateSubAgentDefinition };
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
import { addValueToObject, createFactoryDefinition, toCamelCase } from "../utils.js";
|
|
2
|
+
import { z } from "zod";
|
|
3
|
+
import { SyntaxKind } from "ts-morph";
|
|
4
|
+
|
|
5
|
+
//#region src/commands/pull-v4/generators/trigger-generator.ts
|
|
6
|
+
const TriggerSchema = z.looseObject({
|
|
7
|
+
triggerId: z.string().nonempty(),
|
|
8
|
+
name: z.string().nonempty(),
|
|
9
|
+
description: z.string().optional(),
|
|
10
|
+
enabled: z.boolean().optional(),
|
|
11
|
+
messageTemplate: z.string().nonempty(),
|
|
12
|
+
inputSchema: z.unknown().optional(),
|
|
13
|
+
outputTransform: z.looseObject({
|
|
14
|
+
jmespath: z.string().optional(),
|
|
15
|
+
objectTransformation: z.unknown().optional()
|
|
16
|
+
}).optional(),
|
|
17
|
+
authentication: z.looseObject({ headers: z.array(z.looseObject({})).optional() }).optional(),
|
|
18
|
+
signatureVerification: z.looseObject({
|
|
19
|
+
algorithm: z.string().optional(),
|
|
20
|
+
encoding: z.string().optional(),
|
|
21
|
+
signature: z.looseObject({}).optional(),
|
|
22
|
+
signedComponents: z.array(z.looseObject({})).optional(),
|
|
23
|
+
componentJoin: z.looseObject({}).optional(),
|
|
24
|
+
validation: z.looseObject({}).optional()
|
|
25
|
+
}).optional(),
|
|
26
|
+
signingSecretCredentialReferenceId: z.string().optional(),
|
|
27
|
+
signingSecretCredentialReference: z.union([z.string(), z.looseObject({ id: z.string().optional() })]).optional()
|
|
28
|
+
});
|
|
29
|
+
function generateTriggerDefinition(data) {
|
|
30
|
+
const result = TriggerSchema.safeParse(data);
|
|
31
|
+
if (!result.success) throw new Error(`Validation failed for trigger:\n${z.prettifyError(result.error)}`);
|
|
32
|
+
const parsed = result.data;
|
|
33
|
+
const { sourceFile, configObject } = createFactoryDefinition({
|
|
34
|
+
importName: "Trigger",
|
|
35
|
+
variableName: toCamelCase(parsed.triggerId),
|
|
36
|
+
syntaxKind: SyntaxKind.NewExpression
|
|
37
|
+
});
|
|
38
|
+
const { triggerId, signingSecretCredentialReferenceId, ...rest } = parsed;
|
|
39
|
+
for (const [key, value] of Object.entries({
|
|
40
|
+
id: triggerId,
|
|
41
|
+
...rest
|
|
42
|
+
})) addValueToObject(configObject, key, value);
|
|
43
|
+
if (signingSecretCredentialReferenceId) {
|
|
44
|
+
const varName = toCamelCase(signingSecretCredentialReferenceId);
|
|
45
|
+
sourceFile.addImportDeclaration({
|
|
46
|
+
namedImports: [varName],
|
|
47
|
+
moduleSpecifier: `../../credentials/${signingSecretCredentialReferenceId}`
|
|
48
|
+
});
|
|
49
|
+
configObject.addPropertyAssignment({
|
|
50
|
+
name: "signingSecretCredentialReference",
|
|
51
|
+
initializer: varName
|
|
52
|
+
});
|
|
53
|
+
}
|
|
54
|
+
return sourceFile;
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
//#endregion
|
|
58
|
+
export { generateTriggerDefinition };
|