@inkeep/agents-cli 0.58.10 → 0.58.12

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 (151) hide show
  1. package/dist/agents-cli/package.js +3 -2
  2. package/dist/agents-cli/package.js.map +1 -0
  3. package/dist/api.js +7 -11
  4. package/dist/api.js.map +1 -0
  5. package/dist/commands/add-ui.js +2 -1
  6. package/dist/commands/add-ui.js.map +1 -0
  7. package/dist/commands/add.js +2 -1
  8. package/dist/commands/add.js.map +1 -0
  9. package/dist/commands/config.js +2 -1
  10. package/dist/commands/config.js.map +1 -0
  11. package/dist/commands/dev.js +2 -1
  12. package/dist/commands/dev.js.map +1 -0
  13. package/dist/commands/init.js +2 -1
  14. package/dist/commands/init.js.map +1 -0
  15. package/dist/commands/list-agents.js +2 -1
  16. package/dist/commands/list-agents.js.map +1 -0
  17. package/dist/commands/login.js +2 -1
  18. package/dist/commands/login.js.map +1 -0
  19. package/dist/commands/logout.js +2 -1
  20. package/dist/commands/logout.js.map +1 -0
  21. package/dist/commands/profile.js +2 -1
  22. package/dist/commands/profile.js.map +1 -0
  23. package/dist/commands/pull-v4/component-parser.js +2 -1
  24. package/dist/commands/pull-v4/component-parser.js.map +1 -0
  25. package/dist/commands/pull-v4/component-registry.js +2 -1
  26. package/dist/commands/pull-v4/component-registry.js.map +1 -0
  27. package/dist/commands/pull-v4/generators/agent-generator.helpers.js +186 -0
  28. package/dist/commands/pull-v4/generators/agent-generator.helpers.js.map +1 -0
  29. package/dist/commands/pull-v4/generators/agent-generator.js +70 -209
  30. package/dist/commands/pull-v4/generators/agent-generator.js.map +1 -0
  31. package/dist/commands/pull-v4/generators/artifact-component-generator.js +13 -16
  32. package/dist/commands/pull-v4/generators/artifact-component-generator.js.map +1 -0
  33. package/dist/commands/pull-v4/generators/context-config-generator.js +38 -24
  34. package/dist/commands/pull-v4/generators/context-config-generator.js.map +1 -0
  35. package/dist/commands/pull-v4/generators/credential-generator.js +14 -10
  36. package/dist/commands/pull-v4/generators/credential-generator.js.map +1 -0
  37. package/dist/commands/pull-v4/generators/data-component-generator.js +10 -12
  38. package/dist/commands/pull-v4/generators/data-component-generator.js.map +1 -0
  39. package/dist/commands/pull-v4/generators/environment-generator.js +11 -91
  40. package/dist/commands/pull-v4/generators/environment-generator.js.map +1 -0
  41. package/dist/commands/pull-v4/generators/external-agent-generator.js +22 -39
  42. package/dist/commands/pull-v4/generators/external-agent-generator.js.map +1 -0
  43. package/dist/commands/pull-v4/generators/function-tool-generator.js +19 -31
  44. package/dist/commands/pull-v4/generators/function-tool-generator.js.map +1 -0
  45. package/dist/commands/pull-v4/generators/mcp-tool-generator.js +30 -71
  46. package/dist/commands/pull-v4/generators/mcp-tool-generator.js.map +1 -0
  47. package/dist/commands/pull-v4/generators/project-generator.js +64 -31
  48. package/dist/commands/pull-v4/generators/project-generator.js.map +1 -0
  49. package/dist/commands/pull-v4/generators/skill-generator.js +4 -1
  50. package/dist/commands/pull-v4/generators/skill-generator.js.map +1 -0
  51. package/dist/commands/pull-v4/generators/status-component-generator.js +19 -19
  52. package/dist/commands/pull-v4/generators/status-component-generator.js.map +1 -0
  53. package/dist/commands/pull-v4/generators/sub-agent-generator.helpers.js +84 -0
  54. package/dist/commands/pull-v4/generators/sub-agent-generator.helpers.js.map +1 -0
  55. package/dist/commands/pull-v4/generators/sub-agent-generator.js +82 -113
  56. package/dist/commands/pull-v4/generators/sub-agent-generator.js.map +1 -0
  57. package/dist/commands/pull-v4/generators/trigger-generator.js +21 -30
  58. package/dist/commands/pull-v4/generators/trigger-generator.js.map +1 -0
  59. package/dist/commands/pull-v4/introspect/demo-project.js +1616 -0
  60. package/dist/commands/pull-v4/introspect/demo-project.js.map +1 -0
  61. package/dist/commands/pull-v4/introspect/index.js +17 -16
  62. package/dist/commands/pull-v4/introspect/index.js.map +1 -0
  63. package/dist/commands/pull-v4/introspect/test-helpers.js +5 -3
  64. package/dist/commands/pull-v4/introspect/test-helpers.js.map +1 -0
  65. package/dist/commands/pull-v4/introspect-generator.js +606 -93
  66. package/dist/commands/pull-v4/introspect-generator.js.map +1 -0
  67. package/dist/commands/pull-v4/module-merge.js +2 -1
  68. package/dist/commands/pull-v4/module-merge.js.map +1 -0
  69. package/dist/commands/pull-v4/scheduled-trigger-generator.js +16 -17
  70. package/dist/commands/pull-v4/scheduled-trigger-generator.js.map +1 -0
  71. package/dist/commands/pull-v4/utils.js +90 -28
  72. package/dist/commands/pull-v4/utils.js.map +1 -0
  73. package/dist/commands/push.js +2 -1
  74. package/dist/commands/push.js.map +1 -0
  75. package/dist/commands/status.js +2 -1
  76. package/dist/commands/status.js.map +1 -0
  77. package/dist/commands/update.js +2 -1
  78. package/dist/commands/update.js.map +1 -0
  79. package/dist/commands/whoami.js +2 -1
  80. package/dist/commands/whoami.js.map +1 -0
  81. package/dist/config.js +2 -1
  82. package/dist/config.js.map +1 -0
  83. package/dist/env.js +2 -1
  84. package/dist/env.js.map +1 -0
  85. package/dist/index.js +2 -1
  86. package/dist/index.js.map +1 -0
  87. package/dist/instrumentation.js +2 -1
  88. package/dist/instrumentation.js.map +1 -0
  89. package/dist/node_modules/.pnpm/diff@8.0.3/node_modules/diff/libesm/diff/array.js +2 -1
  90. package/dist/node_modules/.pnpm/diff@8.0.3/node_modules/diff/libesm/diff/array.js.map +1 -0
  91. package/dist/node_modules/.pnpm/diff@8.0.3/node_modules/diff/libesm/diff/base.js +2 -1
  92. package/dist/node_modules/.pnpm/diff@8.0.3/node_modules/diff/libesm/diff/base.js.map +1 -0
  93. package/dist/node_modules/.pnpm/diff@8.0.3/node_modules/diff/libesm/diff/character.js +2 -1
  94. package/dist/node_modules/.pnpm/diff@8.0.3/node_modules/diff/libesm/diff/character.js.map +1 -0
  95. package/dist/node_modules/.pnpm/diff@8.0.3/node_modules/diff/libesm/diff/css.js +2 -1
  96. package/dist/node_modules/.pnpm/diff@8.0.3/node_modules/diff/libesm/diff/css.js.map +1 -0
  97. package/dist/node_modules/.pnpm/diff@8.0.3/node_modules/diff/libesm/diff/json.js +2 -1
  98. package/dist/node_modules/.pnpm/diff@8.0.3/node_modules/diff/libesm/diff/json.js.map +1 -0
  99. package/dist/node_modules/.pnpm/diff@8.0.3/node_modules/diff/libesm/diff/line.js +2 -1
  100. package/dist/node_modules/.pnpm/diff@8.0.3/node_modules/diff/libesm/diff/line.js.map +1 -0
  101. package/dist/node_modules/.pnpm/diff@8.0.3/node_modules/diff/libesm/diff/sentence.js +2 -1
  102. package/dist/node_modules/.pnpm/diff@8.0.3/node_modules/diff/libesm/diff/sentence.js.map +1 -0
  103. package/dist/node_modules/.pnpm/diff@8.0.3/node_modules/diff/libesm/diff/word.js +2 -1
  104. package/dist/node_modules/.pnpm/diff@8.0.3/node_modules/diff/libesm/diff/word.js.map +1 -0
  105. package/dist/node_modules/.pnpm/diff@8.0.3/node_modules/diff/libesm/patch/create.js +2 -1
  106. package/dist/node_modules/.pnpm/diff@8.0.3/node_modules/diff/libesm/patch/create.js.map +1 -0
  107. package/dist/node_modules/.pnpm/diff@8.0.3/node_modules/diff/libesm/util/string.js +2 -1
  108. package/dist/node_modules/.pnpm/diff@8.0.3/node_modules/diff/libesm/util/string.js.map +1 -0
  109. package/dist/utils/background-version-check.js +2 -1
  110. package/dist/utils/background-version-check.js.map +1 -0
  111. package/dist/utils/ci-environment.js +2 -1
  112. package/dist/utils/ci-environment.js.map +1 -0
  113. package/dist/utils/cli-pipeline.js +2 -1
  114. package/dist/utils/cli-pipeline.js.map +1 -0
  115. package/dist/utils/config.js +2 -1
  116. package/dist/utils/config.js.map +1 -0
  117. package/dist/utils/credentials.js +2 -1
  118. package/dist/utils/credentials.js.map +1 -0
  119. package/dist/utils/environment-loader.js +2 -1
  120. package/dist/utils/environment-loader.js.map +1 -0
  121. package/dist/utils/file-finder.js +2 -1
  122. package/dist/utils/file-finder.js.map +1 -0
  123. package/dist/utils/json-comparator.js +2 -1
  124. package/dist/utils/json-comparator.js.map +1 -0
  125. package/dist/utils/json-comparison.js +2 -1
  126. package/dist/utils/json-comparison.js.map +1 -0
  127. package/dist/utils/mcp-runner.js +2 -1
  128. package/dist/utils/mcp-runner.js.map +1 -0
  129. package/dist/utils/model-config.js +2 -1
  130. package/dist/utils/model-config.js.map +1 -0
  131. package/dist/utils/package-manager.js +2 -1
  132. package/dist/utils/package-manager.js.map +1 -0
  133. package/dist/utils/profile-config.js +2 -1
  134. package/dist/utils/profile-config.js.map +1 -0
  135. package/dist/utils/profiles/profile-manager.js +2 -1
  136. package/dist/utils/profiles/profile-manager.js.map +1 -0
  137. package/dist/utils/profiles/types.js +2 -1
  138. package/dist/utils/profiles/types.js.map +1 -0
  139. package/dist/utils/project-directory.js +2 -1
  140. package/dist/utils/project-directory.js.map +1 -0
  141. package/dist/utils/project-loader.js +2 -1
  142. package/dist/utils/project-loader.js.map +1 -0
  143. package/dist/utils/schema-introspection.js +2 -1
  144. package/dist/utils/schema-introspection.js.map +1 -0
  145. package/dist/utils/templates.js +2 -1
  146. package/dist/utils/templates.js.map +1 -0
  147. package/dist/utils/tsx-loader.js +2 -1
  148. package/dist/utils/tsx-loader.js.map +1 -0
  149. package/dist/utils/version-check.js +2 -1
  150. package/dist/utils/version-check.js.map +1 -0
  151. package/package.json +3 -3
@@ -1,4 +1,5 @@
1
- import { addReferenceGetterProperty, addStringProperty, addValueToObject, collectTemplateVariableNames, convertNullToUndefined, createFactoryDefinition, formatInlineLiteral, formatTemplate, hasReferences, isPlainObject, resolveReferenceName, toCamelCase } from "../utils.js";
1
+ import { addReferenceGetterProperty, addStringProperty, addValueToObject, collectTemplateVariableNames, createFactoryDefinition, formatTemplate, hasReferences, isPlainObject, resolveContextTemplateImports, resolveNonCollidingName, resolveReferenceName } from "../utils.js";
2
+ import { collectCanDelegateToReferences, collectCanUseReferences, collectSkills, resolveSubAgentName, resolveSubAgentVariableName } from "./sub-agent-generator.helpers.js";
2
3
  import { FullAgentAgentInsertSchema } from "@inkeep/agents-core";
3
4
  import { z } from "zod";
4
5
  import { SyntaxKind } from "ts-morph";
@@ -13,18 +14,29 @@ const ReferenceOverridesSchema = z.object({
13
14
  dataComponents: ReferenceNameByIdSchema.optional(),
14
15
  artifactComponents: ReferenceNameByIdSchema.optional()
15
16
  });
17
+ const ReferencePathOverridesSchema = z.object({
18
+ tools: ReferenceNameByIdSchema.optional(),
19
+ subAgents: ReferenceNameByIdSchema.optional(),
20
+ agents: ReferenceNameByIdSchema.optional(),
21
+ externalAgents: ReferenceNameByIdSchema.optional()
22
+ });
16
23
  const ContextTemplateReferenceSchema = z.object({
17
24
  name: z.string().nonempty(),
18
25
  local: z.boolean().optional()
19
26
  });
20
- const SubAgentSchema = FullAgentAgentInsertSchema.pick({
27
+ const MySchema = FullAgentAgentInsertSchema.pick({
21
28
  id: true,
29
+ prompt: true,
30
+ name: true,
22
31
  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()),
32
+ stopWhen: true
33
+ });
34
+ const SubAgentSchema = z.strictObject({
35
+ ...MySchema.shape,
36
+ prompt: z.preprocess((v) => v || void 0, MySchema.shape.prompt),
37
+ description: z.preprocess((v) => v || void 0, MySchema.shape.description),
38
+ stopWhen: z.preprocess((v) => v ?? void 0, MySchema.shape.stopWhen),
39
+ models: z.preprocess((v) => v ?? void 0, z.looseObject({}).optional()),
28
40
  skills: z.array(z.unknown()).optional(),
29
41
  canUse: z.array(z.unknown()).optional(),
30
42
  canDelegateTo: z.array(z.unknown()).optional(),
@@ -32,29 +44,36 @@ const SubAgentSchema = FullAgentAgentInsertSchema.pick({
32
44
  dataComponents: z.array(z.string()).optional(),
33
45
  artifactComponents: z.array(z.string()).optional(),
34
46
  referenceOverrides: ReferenceOverridesSchema.optional(),
47
+ referencePathOverrides: ReferencePathOverridesSchema.optional(),
35
48
  contextConfigId: z.string().nonempty().optional(),
36
49
  contextConfigReference: ContextTemplateReferenceSchema.optional(),
37
50
  contextConfigHeadersReference: ContextTemplateReferenceSchema.optional()
38
51
  });
39
- function generateSubAgentDefinition(data) {
52
+ function generateSubAgentDefinition({ subAgentId, ...data }) {
40
53
  const result = SubAgentSchema.safeParse(data);
41
54
  if (!result.success) throw new Error(`Validation failed for sub-agent:\n${z.prettifyError(result.error)}`);
42
55
  const parsed = result.data;
56
+ const subAgentVariableName = resolveSubAgentVariableName(parsed.id, parsed.name);
43
57
  const { sourceFile, configObject } = createFactoryDefinition({
44
58
  importName: "subAgent",
45
- variableName: toCamelCase(parsed.id)
59
+ variableName: subAgentVariableName
46
60
  });
61
+ const reservedReferenceNames = new Set([subAgentVariableName]);
47
62
  const promptTemplateVariables = typeof parsed.prompt === "string" ? collectTemplateVariableNames(parsed.prompt) : [];
48
63
  const hasContextTemplateVariables = promptTemplateVariables.some((variableName) => !variableName.startsWith("headers."));
49
64
  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)],
65
+ const contextImportResolution = resolveContextTemplateImports({
66
+ reservedNames: reservedReferenceNames,
67
+ shouldResolveContextReference: hasContextTemplateVariables && Boolean(parsed.contextConfigId),
68
+ shouldResolveHeadersReference: hasHeadersTemplateVariables && Boolean(parsed.contextConfigId),
69
+ contextConfigReference: parsed.contextConfigReference,
70
+ contextConfigHeadersReference: parsed.contextConfigHeadersReference
71
+ });
72
+ if (contextImportResolution.namedImports.length > 0 && parsed.contextConfigId) sourceFile.addImportDeclaration({
73
+ namedImports: contextImportResolution.namedImports,
55
74
  moduleSpecifier: `../../context-configs/${parsed.contextConfigId}`
56
75
  });
57
- addCanUseToolImports(sourceFile, parsed.canUse, parsed.referenceOverrides?.tools);
76
+ const canUseToolReferenceOverrides = addCanUseToolImports(sourceFile, parsed.canUse, parsed.referenceOverrides?.tools, parsed.referencePathOverrides?.tools, reservedReferenceNames);
58
77
  addDataComponentImports(sourceFile, parsed.dataComponents, parsed.referenceOverrides?.dataComponents);
59
78
  addArtifactComponentImports(sourceFile, parsed.artifactComponents, parsed.referenceOverrides?.artifactComponents);
60
79
  addDelegateTargetImports(sourceFile, {
@@ -65,25 +84,43 @@ function generateSubAgentDefinition(data) {
65
84
  subAgents: parsed.referenceOverrides?.subAgents,
66
85
  agents: parsed.referenceOverrides?.agents,
67
86
  externalAgents: parsed.referenceOverrides?.externalAgents
87
+ },
88
+ referencePathOverrides: {
89
+ subAgents: parsed.referencePathOverrides?.subAgents,
90
+ agents: parsed.referencePathOverrides?.agents,
91
+ externalAgents: parsed.referencePathOverrides?.externalAgents
68
92
  }
69
93
  });
70
94
  writeSubAgentConfig(configObject, {
71
- contextReference: parsed.contextConfigReference?.name,
72
- headersReference: parsed.contextConfigHeadersReference?.name
73
- }, parsed);
95
+ contextReference: contextImportResolution.contextReferenceName,
96
+ headersReference: contextImportResolution.headersReferenceName
97
+ }, canUseToolReferenceOverrides, parsed);
74
98
  return sourceFile;
75
99
  }
76
- function addCanUseToolImports(sourceFile, canUse, toolReferenceOverrides) {
100
+ function addCanUseToolImports(sourceFile, canUse, toolReferenceOverrides, toolReferencePathOverrides, reservedReferenceNames) {
77
101
  const toolImportsById = /* @__PURE__ */ new Map();
78
102
  for (const item of canUse ?? []) {
79
103
  const toolId = typeof item === "string" ? item : isPlainObject(item) && typeof item.toolId === "string" ? item.toolId : void 0;
80
104
  if (!toolId || toolImportsById.has(toolId)) continue;
81
- toolImportsById.set(toolId, resolveReferenceName(toolId, [toolReferenceOverrides]));
105
+ toolImportsById.set(toolId, {
106
+ importName: resolveReferenceName(toolId, [toolReferenceOverrides]),
107
+ modulePath: resolveReferenceName(toolId, [toolReferencePathOverrides])
108
+ });
82
109
  }
83
- for (const [toolId, referenceName] of toolImportsById) sourceFile.addImportDeclaration({
84
- namedImports: [referenceName],
85
- moduleSpecifier: `../../tools/${toolId}`
86
- });
110
+ const localReferenceNamesByToolId = {};
111
+ const localNames = reservedReferenceNames ?? /* @__PURE__ */ new Set();
112
+ for (const [toolId, { importName, modulePath }] of toolImportsById) {
113
+ const localName = resolveNonCollidingName(importName, localNames);
114
+ localReferenceNamesByToolId[toolId] = localName;
115
+ sourceFile.addImportDeclaration({
116
+ namedImports: [importName === localName ? importName : {
117
+ name: importName,
118
+ alias: localName
119
+ }],
120
+ moduleSpecifier: `../../tools/${modulePath}`
121
+ });
122
+ }
123
+ return localReferenceNamesByToolId;
87
124
  }
88
125
  function addDataComponentImports(sourceFile, dataComponents, dataComponentReferenceOverrides) {
89
126
  addReferenceImports(sourceFile, dataComponents, "../../data-components", dataComponentReferenceOverrides);
@@ -105,47 +142,51 @@ function addReferenceImports(sourceFile, references, basePath, referenceOverride
105
142
  function addDelegateTargetImports(sourceFile, options) {
106
143
  const importsByTarget = /* @__PURE__ */ new Map();
107
144
  for (const item of options.canDelegateTo ?? []) {
108
- const resolvedTarget = resolveDelegateTargetImport(item, options.referenceOverrides);
145
+ const resolvedTarget = resolveDelegateTargetImport(item, options.referenceOverrides, options.referencePathOverrides);
109
146
  if (!resolvedTarget) continue;
110
147
  if (resolvedTarget.type === "subAgents" && resolvedTarget.id === options.currentSubAgentId) continue;
111
148
  importsByTarget.set(`${resolvedTarget.type}:${resolvedTarget.id}`, resolvedTarget);
112
149
  }
113
150
  for (const targetId of options.canTransferTo ?? []) {
114
- const resolvedTarget = resolveDelegateTargetImport(targetId, options.referenceOverrides);
151
+ const resolvedTarget = resolveDelegateTargetImport(targetId, options.referenceOverrides, options.referencePathOverrides);
115
152
  if (!resolvedTarget) continue;
116
153
  if (resolvedTarget.type === "subAgents" && resolvedTarget.id === options.currentSubAgentId) continue;
117
154
  importsByTarget.set(`${resolvedTarget.type}:${resolvedTarget.id}`, resolvedTarget);
118
155
  }
119
156
  for (const target of importsByTarget.values()) sourceFile.addImportDeclaration({
120
157
  namedImports: [target.name],
121
- moduleSpecifier: resolveDelegateImportModuleSpecifier(target.type, target.id)
158
+ moduleSpecifier: resolveDelegateImportModuleSpecifier(target.type, target.id, target.modulePath)
122
159
  });
123
160
  }
124
- function resolveDelegateTargetImport(canDelegateToEntry, referenceOverrides) {
161
+ function resolveDelegateTargetImport(canDelegateToEntry, referenceOverrides, referencePathOverrides) {
125
162
  if (typeof canDelegateToEntry === "string") {
126
163
  const resolvedType = resolveDelegateTargetType(canDelegateToEntry, referenceOverrides);
127
164
  if (!resolvedType) return;
128
165
  return {
129
166
  type: resolvedType,
130
167
  id: canDelegateToEntry,
131
- name: resolveReferenceName(canDelegateToEntry, [referenceOverrides[resolvedType]])
168
+ name: resolveReferenceName(canDelegateToEntry, [referenceOverrides[resolvedType]]),
169
+ ...resolvedType === "subAgents" && { modulePath: referencePathOverrides?.subAgents?.[canDelegateToEntry] } || resolvedType === "agents" && { modulePath: referencePathOverrides?.agents?.[canDelegateToEntry] } || resolvedType === "externalAgents" && { modulePath: referencePathOverrides?.externalAgents?.[canDelegateToEntry] }
132
170
  };
133
171
  }
134
172
  if (!isPlainObject(canDelegateToEntry)) return;
135
173
  if (typeof canDelegateToEntry.subAgentId === "string") return {
136
174
  type: "subAgents",
137
175
  id: canDelegateToEntry.subAgentId,
138
- name: resolveReferenceName(canDelegateToEntry.subAgentId, [referenceOverrides.subAgents])
176
+ name: resolveReferenceName(canDelegateToEntry.subAgentId, [referenceOverrides.subAgents]),
177
+ modulePath: referencePathOverrides?.subAgents?.[canDelegateToEntry.subAgentId]
139
178
  };
140
179
  if (typeof canDelegateToEntry.agentId === "string") return {
141
180
  type: "agents",
142
181
  id: canDelegateToEntry.agentId,
143
- name: resolveReferenceName(canDelegateToEntry.agentId, [referenceOverrides.agents])
182
+ name: resolveReferenceName(canDelegateToEntry.agentId, [referenceOverrides.agents]),
183
+ modulePath: referencePathOverrides?.agents?.[canDelegateToEntry.agentId]
144
184
  };
145
185
  if (typeof canDelegateToEntry.externalAgentId === "string") return {
146
186
  type: "externalAgents",
147
187
  id: canDelegateToEntry.externalAgentId,
148
- name: resolveReferenceName(canDelegateToEntry.externalAgentId, [referenceOverrides.externalAgents])
188
+ name: resolveReferenceName(canDelegateToEntry.externalAgentId, [referenceOverrides.externalAgents]),
189
+ modulePath: referencePathOverrides?.externalAgents?.[canDelegateToEntry.externalAgentId]
149
190
  };
150
191
  }
151
192
  function resolveDelegateTargetType(targetId, referenceOverrides) {
@@ -154,19 +195,20 @@ function resolveDelegateTargetType(targetId, referenceOverrides) {
154
195
  if (referenceOverrides.externalAgents?.[targetId]) return "externalAgents";
155
196
  return "subAgents";
156
197
  }
157
- function resolveDelegateImportModuleSpecifier(type, id) {
198
+ function resolveDelegateImportModuleSpecifier(type, id, modulePath) {
199
+ const path = modulePath ?? id;
158
200
  switch (type) {
159
- case "subAgents": return `./${id}`;
160
- case "agents": return `../${id}`;
161
- case "externalAgents": return `../../external-agents/${id}`;
201
+ case "subAgents": return `./${path}`;
202
+ case "agents": return `../${path}`;
203
+ case "externalAgents": return `../../external-agents/${path}`;
162
204
  }
163
205
  }
164
- function writeSubAgentConfig(configObject, templateReferences, { dataComponents, name, canDelegateTo, canTransferTo, skills, artifactComponents, canUse, referenceOverrides, contextConfigId: _contextConfigId, contextConfigReference: _contextConfigReference, contextConfigHeadersReference: _contextConfigHeadersReference, ...rest }) {
206
+ function writeSubAgentConfig(configObject, templateReferences, canUseToolReferenceOverrides, { dataComponents, name, canDelegateTo, canTransferTo, skills, artifactComponents, canUse, referenceOverrides, referencePathOverrides: _referencePathOverrides, contextConfigId: _contextConfigId, contextConfigReference: _contextConfigReference, contextConfigHeadersReference: _contextConfigHeadersReference, ...rest }) {
165
207
  rest = { ...rest };
166
208
  rest.prompt &&= formatTemplate(rest.prompt, templateReferences);
167
209
  for (const [k, v] of Object.entries(rest)) addValueToObject(configObject, k, v);
168
210
  addStringProperty(configObject, "name", resolveSubAgentName(rest.id, name));
169
- const canUseReferences = collectCanUseReferences(canUse, referenceOverrides?.tools);
211
+ const canUseReferences = collectCanUseReferences(canUse, Object.keys(canUseToolReferenceOverrides).length ? canUseToolReferenceOverrides : referenceOverrides?.tools);
170
212
  if (canUseReferences.length) addReferenceGetterProperty(configObject, "canUse", canUseReferences);
171
213
  const canDelegateToReferences = collectCanDelegateToReferences(canDelegateTo, {
172
214
  subAgents: referenceOverrides?.subAgents,
@@ -190,80 +232,7 @@ function writeSubAgentConfig(configObject, templateReferences, { dataComponents,
190
232
  for (const skill of collectedSkills) skillsArray.addElement(skill);
191
233
  }
192
234
  }
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
235
 
268
236
  //#endregion
269
- export { generateSubAgentDefinition };
237
+ export { generateSubAgentDefinition };
238
+ //# sourceMappingURL=sub-agent-generator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sub-agent-generator.js","names":[],"sources":["../../../../src/commands/pull-v4/generators/sub-agent-generator.ts"],"sourcesContent":["import { FullAgentAgentInsertSchema } from '@inkeep/agents-core';\nimport { type ObjectLiteralExpression, type SourceFile, SyntaxKind } from 'ts-morph';\nimport { z } from 'zod';\nimport {\n addReferenceGetterProperty,\n addStringProperty,\n addValueToObject,\n collectTemplateVariableNames,\n createFactoryDefinition,\n formatTemplate,\n hasReferences,\n isPlainObject,\n resolveContextTemplateImports,\n resolveNonCollidingName,\n resolveReferenceName,\n} from '../utils';\nimport {\n collectCanDelegateToReferences,\n collectCanUseReferences,\n collectSkills,\n resolveSubAgentName,\n resolveSubAgentVariableName,\n} from './sub-agent-generator.helpers';\n\nconst ReferenceNameByIdSchema = z.record(z.string(), z.string().nonempty());\n\nconst ReferenceOverridesSchema = z.object({\n tools: ReferenceNameByIdSchema.optional(),\n subAgents: ReferenceNameByIdSchema.optional(),\n agents: ReferenceNameByIdSchema.optional(),\n externalAgents: ReferenceNameByIdSchema.optional(),\n dataComponents: ReferenceNameByIdSchema.optional(),\n artifactComponents: ReferenceNameByIdSchema.optional(),\n});\n\nconst ReferencePathOverridesSchema = z.object({\n tools: ReferenceNameByIdSchema.optional(),\n subAgents: ReferenceNameByIdSchema.optional(),\n agents: ReferenceNameByIdSchema.optional(),\n externalAgents: ReferenceNameByIdSchema.optional(),\n});\n\nconst ContextTemplateReferenceSchema = z.object({\n name: z.string().nonempty(),\n local: z.boolean().optional(),\n});\n\nconst MySchema = FullAgentAgentInsertSchema.pick({\n id: true,\n prompt: true,\n name: true,\n description: true,\n stopWhen: true,\n});\n\nconst SubAgentSchema = z.strictObject({\n ...MySchema.shape,\n prompt: z.preprocess((v) => v || undefined, MySchema.shape.prompt),\n description: z.preprocess((v) => v || undefined, MySchema.shape.description),\n stopWhen: z.preprocess((v) => v ?? undefined, MySchema.shape.stopWhen),\n models: z.preprocess((v) => v ?? undefined, z.looseObject({}).optional()),\n skills: z.array(z.unknown()).optional(),\n canUse: z.array(z.unknown()).optional(),\n canDelegateTo: z.array(z.unknown()).optional(),\n canTransferTo: z.array(z.string()).optional(),\n dataComponents: z.array(z.string()).optional(),\n artifactComponents: z.array(z.string()).optional(),\n referenceOverrides: ReferenceOverridesSchema.optional(),\n referencePathOverrides: ReferencePathOverridesSchema.optional(),\n contextConfigId: z.string().nonempty().optional(),\n contextConfigReference: ContextTemplateReferenceSchema.optional(),\n contextConfigHeadersReference: ContextTemplateReferenceSchema.optional(),\n});\n\ntype SubAgentInput = z.input<typeof SubAgentSchema>;\ntype SubAgentOutput = z.output<typeof SubAgentSchema>;\n\nexport function generateSubAgentDefinition({\n subAgentId,\n ...data\n}: SubAgentInput & Record<string, unknown>): SourceFile {\n const result = SubAgentSchema.safeParse(data);\n if (!result.success) {\n throw new Error(`Validation failed for sub-agent:\\n${z.prettifyError(result.error)}`);\n }\n\n const parsed = result.data;\n const subAgentVariableName = resolveSubAgentVariableName(parsed.id, parsed.name);\n const { sourceFile, configObject } = createFactoryDefinition({\n importName: 'subAgent',\n variableName: subAgentVariableName,\n });\n const reservedReferenceNames = new Set([subAgentVariableName]);\n\n const promptTemplateVariables =\n typeof parsed.prompt === 'string' ? collectTemplateVariableNames(parsed.prompt) : [];\n const hasContextTemplateVariables = promptTemplateVariables.some(\n (variableName) => !variableName.startsWith('headers.')\n );\n const hasHeadersTemplateVariables = promptTemplateVariables.some((variableName) =>\n variableName.startsWith('headers.')\n );\n const contextImportResolution = resolveContextTemplateImports({\n reservedNames: reservedReferenceNames,\n shouldResolveContextReference: hasContextTemplateVariables && Boolean(parsed.contextConfigId),\n shouldResolveHeadersReference: hasHeadersTemplateVariables && Boolean(parsed.contextConfigId),\n contextConfigReference: parsed.contextConfigReference,\n contextConfigHeadersReference: parsed.contextConfigHeadersReference,\n });\n if (contextImportResolution.namedImports.length > 0 && parsed.contextConfigId) {\n sourceFile.addImportDeclaration({\n namedImports: contextImportResolution.namedImports,\n moduleSpecifier: `../../context-configs/${parsed.contextConfigId}`,\n });\n }\n\n const canUseToolReferenceOverrides = addCanUseToolImports(\n sourceFile,\n parsed.canUse,\n parsed.referenceOverrides?.tools,\n parsed.referencePathOverrides?.tools,\n reservedReferenceNames\n );\n addDataComponentImports(\n sourceFile,\n parsed.dataComponents,\n parsed.referenceOverrides?.dataComponents\n );\n addArtifactComponentImports(\n sourceFile,\n parsed.artifactComponents,\n parsed.referenceOverrides?.artifactComponents\n );\n addDelegateTargetImports(sourceFile, {\n currentSubAgentId: parsed.id,\n canDelegateTo: parsed.canDelegateTo,\n canTransferTo: parsed.canTransferTo,\n referenceOverrides: {\n subAgents: parsed.referenceOverrides?.subAgents,\n agents: parsed.referenceOverrides?.agents,\n externalAgents: parsed.referenceOverrides?.externalAgents,\n },\n referencePathOverrides: {\n subAgents: parsed.referencePathOverrides?.subAgents,\n agents: parsed.referencePathOverrides?.agents,\n externalAgents: parsed.referencePathOverrides?.externalAgents,\n },\n });\n\n writeSubAgentConfig(\n configObject,\n {\n contextReference: contextImportResolution.contextReferenceName,\n headersReference: contextImportResolution.headersReferenceName,\n },\n canUseToolReferenceOverrides,\n parsed\n );\n\n return sourceFile;\n}\n\nfunction addCanUseToolImports(\n sourceFile: SourceFile,\n canUse?: unknown[],\n toolReferenceOverrides?: Record<string, string>,\n toolReferencePathOverrides?: Record<string, string>,\n reservedReferenceNames?: Set<string>\n): Record<string, string> {\n const toolImportsById = new Map<string, { importName: string; modulePath: string }>();\n for (const item of canUse ?? []) {\n const toolId =\n typeof item === 'string'\n ? item\n : isPlainObject(item) && typeof item.toolId === 'string'\n ? item.toolId\n : undefined;\n if (!toolId || toolImportsById.has(toolId)) {\n continue;\n }\n toolImportsById.set(toolId, {\n importName: resolveReferenceName(toolId, [toolReferenceOverrides]),\n modulePath: resolveReferenceName(toolId, [toolReferencePathOverrides]),\n });\n }\n\n const localReferenceNamesByToolId: Record<string, string> = {};\n const localNames = reservedReferenceNames ?? new Set<string>();\n for (const [toolId, { importName, modulePath }] of toolImportsById) {\n const localName = resolveNonCollidingName(importName, localNames);\n localReferenceNamesByToolId[toolId] = localName;\n sourceFile.addImportDeclaration({\n namedImports: [\n importName === localName ? importName : { name: importName, alias: localName },\n ],\n moduleSpecifier: `../../tools/${modulePath}`,\n });\n }\n\n return localReferenceNamesByToolId;\n}\n\nfunction addDataComponentImports(\n sourceFile: SourceFile,\n dataComponents?: string[],\n dataComponentReferenceOverrides?: Record<string, string>\n): void {\n addReferenceImports(\n sourceFile,\n dataComponents,\n '../../data-components',\n dataComponentReferenceOverrides\n );\n}\n\nfunction addArtifactComponentImports(\n sourceFile: SourceFile,\n artifactComponents?: string[],\n artifactComponentReferenceOverrides?: Record<string, string>\n): void {\n addReferenceImports(\n sourceFile,\n artifactComponents,\n '../../artifact-components',\n artifactComponentReferenceOverrides\n );\n}\n\nfunction addReferenceImports(\n sourceFile: SourceFile,\n references: string[] | undefined,\n basePath: string,\n referenceOverrides?: Record<string, string>\n): void {\n const importByReferenceId = new Map<string, string>();\n for (const referenceId of references ?? []) {\n if (!referenceId || importByReferenceId.has(referenceId)) {\n continue;\n }\n\n importByReferenceId.set(referenceId, resolveReferenceName(referenceId, [referenceOverrides]));\n }\n\n for (const [referenceId, referenceName] of importByReferenceId) {\n sourceFile.addImportDeclaration({\n namedImports: [referenceName],\n moduleSpecifier: `${basePath}/${referenceId}`,\n });\n }\n}\n\ntype DelegateTargetType = 'subAgents' | 'agents' | 'externalAgents';\n\nfunction addDelegateTargetImports(\n sourceFile: SourceFile,\n options: {\n currentSubAgentId: string;\n canDelegateTo?: unknown[];\n canTransferTo?: string[];\n referenceOverrides: {\n subAgents?: Record<string, string>;\n agents?: Record<string, string>;\n externalAgents?: Record<string, string>;\n };\n referencePathOverrides?: {\n subAgents?: Record<string, string>;\n agents?: Record<string, string>;\n externalAgents?: Record<string, string>;\n };\n }\n): void {\n const importsByTarget = new Map<\n string,\n { type: DelegateTargetType; id: string; name: string; modulePath?: string }\n >();\n\n for (const item of options.canDelegateTo ?? []) {\n const resolvedTarget = resolveDelegateTargetImport(\n item,\n options.referenceOverrides,\n options.referencePathOverrides\n );\n if (!resolvedTarget) {\n continue;\n }\n if (resolvedTarget.type === 'subAgents' && resolvedTarget.id === options.currentSubAgentId) {\n continue;\n }\n importsByTarget.set(`${resolvedTarget.type}:${resolvedTarget.id}`, resolvedTarget);\n }\n\n for (const targetId of options.canTransferTo ?? []) {\n const resolvedTarget = resolveDelegateTargetImport(\n targetId,\n options.referenceOverrides,\n options.referencePathOverrides\n );\n if (!resolvedTarget) {\n continue;\n }\n if (resolvedTarget.type === 'subAgents' && resolvedTarget.id === options.currentSubAgentId) {\n continue;\n }\n importsByTarget.set(`${resolvedTarget.type}:${resolvedTarget.id}`, resolvedTarget);\n }\n\n for (const target of importsByTarget.values()) {\n sourceFile.addImportDeclaration({\n namedImports: [target.name],\n moduleSpecifier: resolveDelegateImportModuleSpecifier(\n target.type,\n target.id,\n target.modulePath\n ),\n });\n }\n}\n\nfunction resolveDelegateTargetImport(\n canDelegateToEntry: unknown,\n referenceOverrides: {\n subAgents?: Record<string, string>;\n agents?: Record<string, string>;\n externalAgents?: Record<string, string>;\n },\n referencePathOverrides?: {\n subAgents?: Record<string, string>;\n agents?: Record<string, string>;\n externalAgents?: Record<string, string>;\n }\n): { type: DelegateTargetType; id: string; name: string; modulePath?: string } | undefined {\n if (typeof canDelegateToEntry === 'string') {\n const resolvedType = resolveDelegateTargetType(canDelegateToEntry, referenceOverrides);\n if (!resolvedType) {\n return;\n }\n\n return {\n type: resolvedType,\n id: canDelegateToEntry,\n name: resolveReferenceName(canDelegateToEntry, [referenceOverrides[resolvedType]]),\n ...((resolvedType === 'subAgents' && {\n modulePath: referencePathOverrides?.subAgents?.[canDelegateToEntry],\n }) ||\n (resolvedType === 'agents' && {\n modulePath: referencePathOverrides?.agents?.[canDelegateToEntry],\n }) ||\n (resolvedType === 'externalAgents' && {\n modulePath: referencePathOverrides?.externalAgents?.[canDelegateToEntry],\n })),\n };\n }\n\n if (!isPlainObject(canDelegateToEntry)) {\n return;\n }\n\n if (typeof canDelegateToEntry.subAgentId === 'string') {\n return {\n type: 'subAgents',\n id: canDelegateToEntry.subAgentId,\n name: resolveReferenceName(canDelegateToEntry.subAgentId, [referenceOverrides.subAgents]),\n modulePath: referencePathOverrides?.subAgents?.[canDelegateToEntry.subAgentId],\n };\n }\n\n if (typeof canDelegateToEntry.agentId === 'string') {\n return {\n type: 'agents',\n id: canDelegateToEntry.agentId,\n name: resolveReferenceName(canDelegateToEntry.agentId, [referenceOverrides.agents]),\n modulePath: referencePathOverrides?.agents?.[canDelegateToEntry.agentId],\n };\n }\n\n if (typeof canDelegateToEntry.externalAgentId === 'string') {\n return {\n type: 'externalAgents',\n id: canDelegateToEntry.externalAgentId,\n name: resolveReferenceName(canDelegateToEntry.externalAgentId, [\n referenceOverrides.externalAgents,\n ]),\n modulePath: referencePathOverrides?.externalAgents?.[canDelegateToEntry.externalAgentId],\n };\n }\n}\n\nfunction resolveDelegateTargetType(\n targetId: string,\n referenceOverrides: {\n subAgents?: Record<string, string>;\n agents?: Record<string, string>;\n externalAgents?: Record<string, string>;\n }\n): DelegateTargetType | undefined {\n if (referenceOverrides.subAgents?.[targetId]) {\n return 'subAgents';\n }\n if (referenceOverrides.agents?.[targetId]) {\n return 'agents';\n }\n if (referenceOverrides.externalAgents?.[targetId]) {\n return 'externalAgents';\n }\n\n return 'subAgents';\n}\n\nfunction resolveDelegateImportModuleSpecifier(\n type: DelegateTargetType,\n id: string,\n modulePath?: string\n): string {\n const path = modulePath ?? id;\n switch (type) {\n case 'subAgents':\n return `./${path}`;\n case 'agents':\n return `../${path}`;\n case 'externalAgents':\n return `../../external-agents/${path}`;\n }\n}\n\nfunction writeSubAgentConfig(\n configObject: ObjectLiteralExpression,\n templateReferences: {\n contextReference?: string;\n headersReference?: string;\n },\n canUseToolReferenceOverrides: Record<string, string>,\n {\n dataComponents,\n name,\n canDelegateTo,\n canTransferTo,\n skills,\n artifactComponents,\n canUse,\n referenceOverrides,\n referencePathOverrides: _referencePathOverrides,\n contextConfigId: _contextConfigId,\n contextConfigReference: _contextConfigReference,\n contextConfigHeadersReference: _contextConfigHeadersReference,\n ...rest\n }: SubAgentOutput\n) {\n rest = { ...rest };\n rest.prompt &&= formatTemplate(rest.prompt, templateReferences);\n for (const [k, v] of Object.entries(rest)) {\n addValueToObject(configObject, k, v);\n }\n addStringProperty(configObject, 'name', resolveSubAgentName(rest.id, name));\n\n const canUseReferences = collectCanUseReferences(\n canUse,\n Object.keys(canUseToolReferenceOverrides).length\n ? canUseToolReferenceOverrides\n : referenceOverrides?.tools\n );\n if (canUseReferences.length) {\n addReferenceGetterProperty(configObject, 'canUse', canUseReferences);\n }\n\n const canDelegateToReferences = collectCanDelegateToReferences(canDelegateTo, {\n subAgents: referenceOverrides?.subAgents,\n agents: referenceOverrides?.agents,\n externalAgents: referenceOverrides?.externalAgents,\n });\n if (canDelegateToReferences.length) {\n addReferenceGetterProperty(configObject, 'canDelegateTo', canDelegateToReferences);\n }\n\n if (hasReferences(canTransferTo)) {\n addReferenceGetterProperty(\n configObject,\n 'canTransferTo',\n canTransferTo.map((id) =>\n resolveReferenceName(id, [\n referenceOverrides?.subAgents,\n referenceOverrides?.agents,\n referenceOverrides?.externalAgents,\n ])\n )\n );\n }\n\n if (hasReferences(dataComponents)) {\n addReferenceGetterProperty(\n configObject,\n 'dataComponents',\n dataComponents.map((id) => resolveReferenceName(id, [referenceOverrides?.dataComponents]))\n );\n }\n\n if (hasReferences(artifactComponents)) {\n addReferenceGetterProperty(\n configObject,\n 'artifactComponents',\n artifactComponents.map((id) =>\n resolveReferenceName(id, [referenceOverrides?.artifactComponents])\n )\n );\n }\n\n const collectedSkills = collectSkills(skills);\n if (collectedSkills.length > 0) {\n const skillsProperty = configObject.addPropertyAssignment({\n name: 'skills',\n initializer: '() => []',\n });\n const skillsGetter = skillsProperty.getInitializerIfKindOrThrow(SyntaxKind.ArrowFunction);\n const skillsArray = skillsGetter.getBody().asKindOrThrow(SyntaxKind.ArrayLiteralExpression);\n for (const skill of collectedSkills) {\n skillsArray.addElement(skill);\n }\n }\n}\n"],"mappings":"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"}
@@ -1,52 +1,42 @@
1
- import { addValueToObject, convertNullToUndefined, createFactoryDefinition, toCamelCase } from "../utils.js";
1
+ import { addValueToObject, createFactoryDefinition, toCamelCase, toTriggerReferenceName } from "../utils.js";
2
+ import { FullProjectDefinitionSchema } from "@inkeep/agents-core";
2
3
  import { z } from "zod";
3
4
  import { SyntaxKind } from "ts-morph";
4
5
 
5
6
  //#region src/commands/pull-v4/generators/trigger-generator.ts
6
- const TriggerSchema = z.looseObject({
7
+ const MySchema = FullProjectDefinitionSchema.shape.agents.valueType.shape.triggers.unwrap().valueType.omit({ id: true });
8
+ const TriggerSchema = z.strictObject({
7
9
  triggerId: z.string().nonempty(),
8
- name: z.string().nonempty(),
9
- description: z.string().nullable().optional().transform(convertNullToUndefined),
10
- enabled: z.boolean().optional(),
11
- messageTemplate: z.string().nullable().optional().transform(convertNullToUndefined),
12
- inputSchema: z.unknown().optional(),
13
- outputTransform: z.looseObject({
14
- jmespath: z.string().optional(),
15
- objectTransformation: z.unknown().optional()
16
- }).nullable().optional().transform(convertNullToUndefined),
17
- authentication: z.looseObject({ headers: z.array(z.looseObject({})).optional() }).nullable().optional().transform(convertNullToUndefined),
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
- }).nullable().optional().transform(convertNullToUndefined),
26
- signingSecretCredentialReferenceId: z.string().nullable().optional().transform(convertNullToUndefined),
27
- signingSecretCredentialReference: z.union([z.string(), z.looseObject({ id: z.string().optional() })]).nullable().optional().transform(convertNullToUndefined),
28
- runAsUserId: z.string().nullable().optional().transform(convertNullToUndefined),
29
- createdBy: z.string().nullable().optional().transform(convertNullToUndefined)
10
+ ...MySchema.shape,
11
+ description: z.preprocess((v) => v || void 0, MySchema.shape.description),
12
+ inputSchema: z.preprocess((v) => v || void 0, MySchema.shape.inputSchema),
13
+ outputTransform: z.preprocess((v) => v || void 0, MySchema.shape.outputTransform),
14
+ messageTemplate: z.preprocess((v) => v || void 0, MySchema.shape.messageTemplate),
15
+ authentication: z.preprocess((v) => v || void 0, z.unknown()),
16
+ signatureVerification: z.preprocess((v) => v || void 0, MySchema.shape.signatureVerification),
17
+ signingSecretCredentialReferenceName: z.string().nonempty().optional(),
18
+ signingSecretCredentialReferencePath: z.string().nonempty().optional()
30
19
  });
31
- function generateTriggerDefinition(data) {
20
+ function generateTriggerDefinition({ id, runAsUserId, createdBy, ...data }) {
32
21
  const result = TriggerSchema.safeParse(data);
33
22
  if (!result.success) throw new Error(`Validation failed for trigger:\n${z.prettifyError(result.error)}`);
34
23
  const parsed = result.data;
35
24
  const { sourceFile, configObject } = createFactoryDefinition({
36
25
  importName: "Trigger",
37
- variableName: toCamelCase(parsed.triggerId),
26
+ variableName: toTriggerReferenceName(parsed.name),
38
27
  syntaxKind: SyntaxKind.NewExpression
39
28
  });
40
- const { triggerId, signingSecretCredentialReferenceId, ...rest } = parsed;
29
+ const { triggerId, signingSecretCredentialReferenceId, signingSecretCredentialReferenceName, signingSecretCredentialReferencePath, ...rest } = parsed;
41
30
  for (const [key, value] of Object.entries({
42
31
  id: triggerId,
43
32
  ...rest
44
33
  })) addValueToObject(configObject, key, value);
45
34
  if (signingSecretCredentialReferenceId) {
46
- const varName = toCamelCase(signingSecretCredentialReferenceId);
35
+ const varName = signingSecretCredentialReferenceName ?? toCamelCase(signingSecretCredentialReferenceId);
36
+ const modulePath = signingSecretCredentialReferencePath ?? signingSecretCredentialReferenceId;
47
37
  sourceFile.addImportDeclaration({
48
38
  namedImports: [varName],
49
- moduleSpecifier: `../../credentials/${signingSecretCredentialReferenceId}`
39
+ moduleSpecifier: `../../credentials/${modulePath}`
50
40
  });
51
41
  configObject.addPropertyAssignment({
52
42
  name: "signingSecretCredentialReference",
@@ -57,4 +47,5 @@ function generateTriggerDefinition(data) {
57
47
  }
58
48
 
59
49
  //#endregion
60
- export { generateTriggerDefinition };
50
+ export { generateTriggerDefinition };
51
+ //# sourceMappingURL=trigger-generator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"trigger-generator.js","names":[],"sources":["../../../../src/commands/pull-v4/generators/trigger-generator.ts"],"sourcesContent":["import { FullProjectDefinitionSchema } from '@inkeep/agents-core';\nimport { type SourceFile, SyntaxKind } from 'ts-morph';\nimport { z } from 'zod';\nimport {\n addValueToObject,\n createFactoryDefinition,\n toCamelCase,\n toTriggerReferenceName,\n} from '../utils';\n\nconst MySchema = FullProjectDefinitionSchema.shape.agents.valueType.shape.triggers\n .unwrap()\n .valueType.omit({\n id: true,\n });\n\nconst TriggerSchema = z.strictObject({\n triggerId: z.string().nonempty(),\n ...MySchema.shape,\n description: z.preprocess((v) => v || undefined, MySchema.shape.description),\n inputSchema: z.preprocess((v) => v || undefined, MySchema.shape.inputSchema),\n outputTransform: z.preprocess((v) => v || undefined, MySchema.shape.outputTransform),\n messageTemplate: z.preprocess((v) => v || undefined, MySchema.shape.messageTemplate),\n authentication: z.preprocess(\n (v) => v || undefined,\n // ✖ Invalid input: expected string, received undefined\n // → at authentication.headers[0].value\n z.unknown()\n ),\n signatureVerification: z.preprocess((v) => v || undefined, MySchema.shape.signatureVerification),\n signingSecretCredentialReferenceName: z.string().nonempty().optional(),\n signingSecretCredentialReferencePath: z.string().nonempty().optional(),\n});\n\ntype TriggerInput = z.input<typeof TriggerSchema>;\n\nexport function generateTriggerDefinition({\n id,\n runAsUserId,\n createdBy,\n ...data\n}: TriggerInput & Record<string, unknown>): SourceFile {\n const result = TriggerSchema.safeParse(data);\n if (!result.success) {\n throw new Error(`Validation failed for trigger:\\n${z.prettifyError(result.error)}`);\n }\n\n const parsed = result.data;\n const { sourceFile, configObject } = createFactoryDefinition({\n importName: 'Trigger',\n variableName: toTriggerReferenceName(parsed.name),\n syntaxKind: SyntaxKind.NewExpression,\n });\n\n const {\n triggerId,\n signingSecretCredentialReferenceId,\n signingSecretCredentialReferenceName,\n signingSecretCredentialReferencePath,\n ...rest\n } = parsed;\n\n for (const [key, value] of Object.entries({\n id: triggerId,\n ...rest,\n })) {\n addValueToObject(configObject, key, value);\n }\n\n if (signingSecretCredentialReferenceId) {\n const varName =\n signingSecretCredentialReferenceName ??\n toCamelCase(signingSecretCredentialReferenceId as string);\n const modulePath =\n signingSecretCredentialReferencePath ?? (signingSecretCredentialReferenceId as string);\n sourceFile.addImportDeclaration({\n namedImports: [varName],\n moduleSpecifier: `../../credentials/${modulePath}`,\n });\n configObject.addPropertyAssignment({\n name: 'signingSecretCredentialReference',\n initializer: varName,\n });\n }\n\n return sourceFile;\n}\n"],"mappings":";;;;;;AAUA,MAAM,WAAW,4BAA4B,MAAM,OAAO,UAAU,MAAM,SACvE,QAAQ,CACR,UAAU,KAAK,EACd,IAAI,MACL,CAAC;AAEJ,MAAM,gBAAgB,EAAE,aAAa;CACnC,WAAW,EAAE,QAAQ,CAAC,UAAU;CAChC,GAAG,SAAS;CACZ,aAAa,EAAE,YAAY,MAAM,KAAK,QAAW,SAAS,MAAM,YAAY;CAC5E,aAAa,EAAE,YAAY,MAAM,KAAK,QAAW,SAAS,MAAM,YAAY;CAC5E,iBAAiB,EAAE,YAAY,MAAM,KAAK,QAAW,SAAS,MAAM,gBAAgB;CACpF,iBAAiB,EAAE,YAAY,MAAM,KAAK,QAAW,SAAS,MAAM,gBAAgB;CACpF,gBAAgB,EAAE,YACf,MAAM,KAAK,QAGZ,EAAE,SAAS,CACZ;CACD,uBAAuB,EAAE,YAAY,MAAM,KAAK,QAAW,SAAS,MAAM,sBAAsB;CAChG,sCAAsC,EAAE,QAAQ,CAAC,UAAU,CAAC,UAAU;CACtE,sCAAsC,EAAE,QAAQ,CAAC,UAAU,CAAC,UAAU;CACvE,CAAC;AAIF,SAAgB,0BAA0B,EACxC,IACA,aACA,WACA,GAAG,QACkD;CACrD,MAAM,SAAS,cAAc,UAAU,KAAK;AAC5C,KAAI,CAAC,OAAO,QACV,OAAM,IAAI,MAAM,mCAAmC,EAAE,cAAc,OAAO,MAAM,GAAG;CAGrF,MAAM,SAAS,OAAO;CACtB,MAAM,EAAE,YAAY,iBAAiB,wBAAwB;EAC3D,YAAY;EACZ,cAAc,uBAAuB,OAAO,KAAK;EACjD,YAAY,WAAW;EACxB,CAAC;CAEF,MAAM,EACJ,WACA,oCACA,sCACA,sCACA,GAAG,SACD;AAEJ,MAAK,MAAM,CAAC,KAAK,UAAU,OAAO,QAAQ;EACxC,IAAI;EACJ,GAAG;EACJ,CAAC,CACA,kBAAiB,cAAc,KAAK,MAAM;AAG5C,KAAI,oCAAoC;EACtC,MAAM,UACJ,wCACA,YAAY,mCAA6C;EAC3D,MAAM,aACJ,wCAAyC;AAC3C,aAAW,qBAAqB;GAC9B,cAAc,CAAC,QAAQ;GACvB,iBAAiB,qBAAqB;GACvC,CAAC;AACF,eAAa,sBAAsB;GACjC,MAAM;GACN,aAAa;GACd,CAAC;;AAGJ,QAAO"}