@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.
Files changed (76) hide show
  1. package/dist/agents-cli/package.js +6 -0
  2. package/dist/commands/config.js +1 -1
  3. package/dist/commands/dev.js +1 -1
  4. package/dist/commands/init.js +1 -1
  5. package/dist/commands/{pull-v3 → pull-v4}/component-parser.js +6 -12
  6. package/dist/commands/{pull-v3/utils → pull-v4}/component-registry.js +1 -1
  7. package/dist/commands/pull-v4/generators/agent-generator.js +258 -0
  8. package/dist/commands/pull-v4/generators/artifact-component-generator.js +69 -0
  9. package/dist/commands/pull-v4/generators/context-config-generator.js +264 -0
  10. package/dist/commands/pull-v4/generators/credential-generator.js +30 -0
  11. package/dist/commands/pull-v4/generators/data-component-generator.js +50 -0
  12. package/dist/commands/pull-v4/generators/environment-generator.js +123 -0
  13. package/dist/commands/pull-v4/generators/external-agent-generator.js +56 -0
  14. package/dist/commands/pull-v4/generators/function-tool-generator.js +48 -0
  15. package/dist/commands/pull-v4/generators/mcp-tool-generator.js +91 -0
  16. package/dist/commands/pull-v4/generators/project-generator.js +125 -0
  17. package/dist/commands/{pull-v3/components → pull-v4/generators}/skill-generator.js +1 -1
  18. package/dist/commands/pull-v4/generators/status-component-generator.js +35 -0
  19. package/dist/commands/pull-v4/generators/sub-agent-generator.js +269 -0
  20. package/dist/commands/pull-v4/generators/trigger-generator.js +58 -0
  21. package/dist/commands/pull-v4/introspect/index.js +365 -0
  22. package/dist/commands/pull-v4/introspect/test-helpers.js +143 -0
  23. package/dist/commands/pull-v4/introspect-generator.js +706 -0
  24. package/dist/commands/pull-v4/module-merge.js +405 -0
  25. package/dist/commands/pull-v4/utils.js +235 -0
  26. package/dist/commands/push.js +1 -1
  27. package/dist/commands/update.js +2 -2
  28. package/dist/index.js +18 -44
  29. package/dist/node_modules/.pnpm/diff@8.0.3/node_modules/diff/libesm/diff/array.js +18 -0
  30. package/dist/node_modules/.pnpm/diff@8.0.3/node_modules/diff/libesm/diff/base.js +180 -0
  31. package/dist/node_modules/.pnpm/diff@8.0.3/node_modules/diff/libesm/diff/character.js +8 -0
  32. package/dist/node_modules/.pnpm/diff@8.0.3/node_modules/diff/libesm/diff/css.js +12 -0
  33. package/dist/node_modules/.pnpm/diff@8.0.3/node_modules/diff/libesm/diff/json.js +60 -0
  34. package/dist/node_modules/.pnpm/diff@8.0.3/node_modules/diff/libesm/diff/line.js +37 -0
  35. package/dist/node_modules/.pnpm/diff@8.0.3/node_modules/diff/libesm/diff/sentence.js +31 -0
  36. package/dist/node_modules/.pnpm/diff@8.0.3/node_modules/diff/libesm/diff/word.js +118 -0
  37. package/dist/node_modules/.pnpm/diff@8.0.3/node_modules/diff/libesm/index.js +11 -0
  38. package/dist/node_modules/.pnpm/diff@8.0.3/node_modules/diff/libesm/patch/create.js +141 -0
  39. package/dist/node_modules/.pnpm/diff@8.0.3/node_modules/diff/libesm/util/string.js +63 -0
  40. package/dist/utils/ci-environment.js +1 -1
  41. package/dist/utils/config.js +1 -1
  42. package/dist/utils/environment-loader.js +1 -1
  43. package/dist/utils/file-finder.js +1 -1
  44. package/dist/utils/mcp-runner.js +1 -1
  45. package/dist/utils/profile-config.js +1 -1
  46. package/dist/utils/profiles/profile-manager.js +1 -1
  47. package/dist/utils/project-directory.js +1 -1
  48. package/dist/utils/project-loader.js +1 -1
  49. package/dist/utils/version-check.js +6 -15
  50. package/package.json +5 -7
  51. package/dist/commands/pull-v3/component-updater.js +0 -768
  52. package/dist/commands/pull-v3/components/agent-generator.js +0 -255
  53. package/dist/commands/pull-v3/components/artifact-component-generator.js +0 -143
  54. package/dist/commands/pull-v3/components/context-config-generator.js +0 -190
  55. package/dist/commands/pull-v3/components/credential-generator.js +0 -89
  56. package/dist/commands/pull-v3/components/data-component-generator.js +0 -102
  57. package/dist/commands/pull-v3/components/environment-generator.js +0 -173
  58. package/dist/commands/pull-v3/components/external-agent-generator.js +0 -75
  59. package/dist/commands/pull-v3/components/function-tool-generator.js +0 -92
  60. package/dist/commands/pull-v3/components/mcp-tool-generator.js +0 -86
  61. package/dist/commands/pull-v3/components/project-generator.js +0 -157
  62. package/dist/commands/pull-v3/components/status-component-generator.js +0 -92
  63. package/dist/commands/pull-v3/components/sub-agent-generator.js +0 -295
  64. package/dist/commands/pull-v3/components/trigger-generator.js +0 -185
  65. package/dist/commands/pull-v3/index.js +0 -510
  66. package/dist/commands/pull-v3/introspect-generator.js +0 -286
  67. package/dist/commands/pull-v3/llm-content-merger.js +0 -192
  68. package/dist/commands/pull-v3/new-component-generator.js +0 -279
  69. package/dist/commands/pull-v3/project-comparator.js +0 -914
  70. package/dist/commands/pull-v3/project-index-generator.js +0 -32
  71. package/dist/commands/pull-v3/project-validator.js +0 -358
  72. package/dist/commands/pull-v3/targeted-typescript-placeholders.js +0 -173
  73. package/dist/commands/pull-v3/utils/component-tracker.js +0 -165
  74. package/dist/commands/pull-v3/utils/generator-utils.js +0 -146
  75. package/dist/commands/pull-v3/utils/model-provider-detector.js +0 -50
  76. 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 };