@inkeep/agents-cli 0.59.3 → 0.59.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (88) hide show
  1. package/dist/agents-cli/package.js +1 -1
  2. package/dist/commands/pull-v4/collector-common.js +128 -0
  3. package/dist/commands/pull-v4/collector-common.js.map +1 -0
  4. package/dist/commands/pull-v4/collector-reference-helpers.js +323 -0
  5. package/dist/commands/pull-v4/collector-reference-helpers.js.map +1 -0
  6. package/dist/commands/pull-v4/component-parser.js +2 -1
  7. package/dist/commands/pull-v4/component-parser.js.map +1 -1
  8. package/dist/commands/pull-v4/file-scope.js +43 -0
  9. package/dist/commands/pull-v4/file-scope.js.map +1 -0
  10. package/dist/commands/pull-v4/generation-resolver.js +305 -0
  11. package/dist/commands/pull-v4/generation-resolver.js.map +1 -0
  12. package/dist/commands/pull-v4/generation-types.js +56 -0
  13. package/dist/commands/pull-v4/generation-types.js.map +1 -0
  14. package/dist/commands/pull-v4/generators/agent-generator.helpers.js +4 -10
  15. package/dist/commands/pull-v4/generators/agent-generator.helpers.js.map +1 -1
  16. package/dist/commands/pull-v4/generators/agent-generator.js +154 -81
  17. package/dist/commands/pull-v4/generators/agent-generator.js.map +1 -1
  18. package/dist/commands/pull-v4/generators/artifact-component-generator.js +48 -27
  19. package/dist/commands/pull-v4/generators/artifact-component-generator.js.map +1 -1
  20. package/dist/commands/pull-v4/generators/context-config-generator.js +147 -129
  21. package/dist/commands/pull-v4/generators/context-config-generator.js.map +1 -1
  22. package/dist/commands/pull-v4/generators/credential-generator.js +36 -14
  23. package/dist/commands/pull-v4/generators/credential-generator.js.map +1 -1
  24. package/dist/commands/pull-v4/generators/data-component-generator.js +55 -19
  25. package/dist/commands/pull-v4/generators/data-component-generator.js.map +1 -1
  26. package/dist/commands/pull-v4/generators/environment-generator.js +29 -33
  27. package/dist/commands/pull-v4/generators/environment-generator.js.map +1 -1
  28. package/dist/commands/pull-v4/generators/environment-settings-generator.js +57 -0
  29. package/dist/commands/pull-v4/generators/environment-settings-generator.js.map +1 -0
  30. package/dist/commands/pull-v4/generators/external-agent-generator.js +51 -23
  31. package/dist/commands/pull-v4/generators/external-agent-generator.js.map +1 -1
  32. package/dist/commands/pull-v4/generators/function-tool-generator.js +50 -14
  33. package/dist/commands/pull-v4/generators/function-tool-generator.js.map +1 -1
  34. package/dist/commands/pull-v4/generators/helpers/agent.js +129 -0
  35. package/dist/commands/pull-v4/generators/helpers/agent.js.map +1 -0
  36. package/dist/commands/pull-v4/generators/helpers/sub-agent.js +65 -0
  37. package/dist/commands/pull-v4/generators/helpers/sub-agent.js.map +1 -0
  38. package/dist/commands/pull-v4/generators/index.js +38 -0
  39. package/dist/commands/pull-v4/generators/index.js.map +1 -0
  40. package/dist/commands/pull-v4/generators/mcp-tool-generator.js +48 -27
  41. package/dist/commands/pull-v4/generators/mcp-tool-generator.js.map +1 -1
  42. package/dist/commands/pull-v4/generators/project-generator.js +144 -110
  43. package/dist/commands/pull-v4/generators/project-generator.js.map +1 -1
  44. package/dist/commands/pull-v4/generators/scheduled-trigger-generator.js +66 -0
  45. package/dist/commands/pull-v4/generators/scheduled-trigger-generator.js.map +1 -0
  46. package/dist/commands/pull-v4/generators/status-component-generator.js +55 -20
  47. package/dist/commands/pull-v4/generators/status-component-generator.js.map +1 -1
  48. package/dist/commands/pull-v4/generators/sub-agent-generator.helpers.js +4 -1
  49. package/dist/commands/pull-v4/generators/sub-agent-generator.helpers.js.map +1 -1
  50. package/dist/commands/pull-v4/generators/sub-agent-generator.js +282 -166
  51. package/dist/commands/pull-v4/generators/sub-agent-generator.js.map +1 -1
  52. package/dist/commands/pull-v4/generators/trigger-generator.js +62 -27
  53. package/dist/commands/pull-v4/generators/trigger-generator.js.map +1 -1
  54. package/dist/commands/pull-v4/import-plan.js +40 -0
  55. package/dist/commands/pull-v4/import-plan.js.map +1 -0
  56. package/dist/commands/pull-v4/introspect/index.js +11 -7
  57. package/dist/commands/pull-v4/introspect/index.js.map +1 -1
  58. package/dist/commands/pull-v4/introspect-generator.js +15 -1218
  59. package/dist/commands/pull-v4/introspect-generator.js.map +1 -1
  60. package/dist/commands/pull-v4/module-merge.js +14 -5
  61. package/dist/commands/pull-v4/module-merge.js.map +1 -1
  62. package/dist/commands/pull-v4/reference-resolution.js +111 -0
  63. package/dist/commands/pull-v4/reference-resolution.js.map +1 -0
  64. package/dist/commands/pull-v4/simple-factory-generator.js +54 -0
  65. package/dist/commands/pull-v4/simple-factory-generator.js.map +1 -0
  66. package/dist/commands/pull-v4/{generators/skill-generator.js → skill.js} +18 -6
  67. package/dist/commands/pull-v4/skill.js.map +1 -0
  68. package/dist/commands/pull-v4/typescript-file-writer.js +78 -0
  69. package/dist/commands/pull-v4/typescript-file-writer.js.map +1 -0
  70. package/dist/commands/pull-v4/utils/code-values.js +64 -0
  71. package/dist/commands/pull-v4/utils/code-values.js.map +1 -0
  72. package/dist/commands/pull-v4/utils/factory-writer.js +128 -0
  73. package/dist/commands/pull-v4/utils/factory-writer.js.map +1 -0
  74. package/dist/commands/pull-v4/utils/index.js +8 -0
  75. package/dist/commands/pull-v4/utils/naming.js +74 -0
  76. package/dist/commands/pull-v4/utils/naming.js.map +1 -0
  77. package/dist/commands/pull-v4/utils/schema-rendering.js +20 -0
  78. package/dist/commands/pull-v4/utils/schema-rendering.js.map +1 -0
  79. package/dist/commands/pull-v4/utils/shared.js +18 -0
  80. package/dist/commands/pull-v4/utils/shared.js.map +1 -0
  81. package/dist/commands/pull-v4/utils/templates.js +58 -0
  82. package/dist/commands/pull-v4/utils/templates.js.map +1 -0
  83. package/package.json +4 -4
  84. package/dist/commands/pull-v4/generators/skill-generator.js.map +0 -1
  85. package/dist/commands/pull-v4/scheduled-trigger-generator.js +0 -38
  86. package/dist/commands/pull-v4/scheduled-trigger-generator.js.map +0 -1
  87. package/dist/commands/pull-v4/utils.js +0 -320
  88. package/dist/commands/pull-v4/utils.js.map +0 -1
@@ -1,6 +1,16 @@
1
- import { addReferenceGetterProperty, addValueToObject, buildComponentFileName, createFactoryDefinition, createUniqueReferenceName, formatStringLiteral, hasReferences, resolveReferenceName, toCamelCase } from "../utils.js";
1
+ import { hasReferences } from "../utils/shared.js";
2
+ import { formatStringLiteral } from "../utils/templates.js";
3
+ import { codeExpression, createReferenceGetterValue } from "../utils/code-values.js";
4
+ import { toCamelCase } from "../utils/naming.js";
5
+ import { addValueToObject } from "../utils/factory-writer.js";
6
+ import "../utils/index.js";
7
+ import { getObjectKeys } from "../collector-common.js";
8
+ import { collectProjectReferenceOverrides, collectProjectReferencePathOverrides } from "../collector-reference-helpers.js";
9
+ import { addResolvedReferenceImports, resolveReferenceBindingsFromIds, toReferenceNames } from "../reference-resolution.js";
10
+ import { generateFactorySourceFile } from "../simple-factory-generator.js";
2
11
  import { FullProjectDefinitionSchema } from "@inkeep/agents-core";
3
12
  import { z } from "zod";
13
+ import { join } from "node:path";
4
14
 
5
15
  //#region src/commands/pull-v4/generators/project-generator.ts
6
16
  const ReferenceNameByIdSchema = z.record(z.string(), z.string().nonempty());
@@ -42,117 +52,141 @@ const ProjectSchema = z.strictObject({
42
52
  referencePathOverrides: ReferencePathOverridesSchema.optional()
43
53
  });
44
54
  function generateProjectDefinition(data) {
45
- const result = ProjectSchema.safeParse(data);
46
- if (!result.success) throw new Error(`Validation failed for project:
47
- ${z.prettifyError(result.error)}`);
48
- const parsed = result.data;
49
- const projectVariableName = toCamelCase(parsed.projectId);
50
- const { sourceFile, configObject } = createFactoryDefinition({
51
- importName: "project",
52
- variableName: projectVariableName
55
+ return generateFactorySourceFile(data, {
56
+ schema: ProjectSchema,
57
+ factory: {
58
+ importName: "project",
59
+ variableName: (parsed) => toCamelCase(parsed.projectId)
60
+ },
61
+ render({ parsed, sourceFile, configObject }) {
62
+ const projectVariableName = toCamelCase(parsed.projectId);
63
+ const reservedReferenceNames = new Set([projectVariableName]);
64
+ if (hasReferences(parsed.skills)) {
65
+ sourceFile.getImportDeclarationOrThrow("@inkeep/agents-sdk").addNamedImport("loadSkills");
66
+ sourceFile.addImportDeclaration({
67
+ defaultImport: "path",
68
+ moduleSpecifier: "node:path"
69
+ });
70
+ }
71
+ const { projectId, skills, agents, tools, externalAgents, dataComponents, artifactComponents, credentialReferences, referenceOverrides, referencePathOverrides, ...rest } = parsed;
72
+ const projectConfig = {
73
+ id: projectId,
74
+ ...rest
75
+ };
76
+ if (hasReferences(skills)) projectConfig.skills = codeExpression(`() => loadSkills(path.join(${formatStringLiteral(projectId)}, 'skills'))`);
77
+ if (hasReferences(agents)) {
78
+ const resolvedReferences = resolveReferenceBindingsFromIds({
79
+ ids: agents,
80
+ reservedNames: reservedReferenceNames,
81
+ conflictSuffix: "Agent",
82
+ referenceOverrides: referenceOverrides?.agents,
83
+ referencePathOverrides: referencePathOverrides?.agents
84
+ });
85
+ addResolvedReferenceImports(sourceFile, resolvedReferences, (reference) => {
86
+ return `./agents/${reference.modulePath}`;
87
+ });
88
+ projectConfig.agents = createReferenceGetterValue(toReferenceNames(resolvedReferences));
89
+ }
90
+ if (hasReferences(tools)) {
91
+ const resolvedReferences = resolveReferenceBindingsFromIds({
92
+ ids: tools,
93
+ reservedNames: reservedReferenceNames,
94
+ conflictSuffix: "Tool",
95
+ collisionStrategy: "numeric-for-duplicates",
96
+ referenceOverrides: referenceOverrides?.tools,
97
+ referencePathOverrides: referencePathOverrides?.tools
98
+ });
99
+ addResolvedReferenceImports(sourceFile, resolvedReferences, (reference) => {
100
+ return `./tools/${reference.modulePath}`;
101
+ });
102
+ projectConfig.tools = createReferenceGetterValue(toReferenceNames(resolvedReferences));
103
+ }
104
+ if (hasReferences(externalAgents)) {
105
+ const resolvedReferences = resolveReferenceBindingsFromIds({
106
+ ids: externalAgents,
107
+ reservedNames: reservedReferenceNames,
108
+ conflictSuffix: "ExternalAgent",
109
+ referenceOverrides: referenceOverrides?.externalAgents,
110
+ referencePathOverrides: referencePathOverrides?.externalAgents
111
+ });
112
+ addResolvedReferenceImports(sourceFile, resolvedReferences, (reference) => {
113
+ return `./external-agents/${reference.modulePath}`;
114
+ });
115
+ projectConfig.externalAgents = createReferenceGetterValue(toReferenceNames(resolvedReferences));
116
+ }
117
+ if (hasReferences(dataComponents)) {
118
+ const resolvedReferences = resolveReferenceBindingsFromIds({
119
+ ids: dataComponents,
120
+ reservedNames: reservedReferenceNames,
121
+ conflictSuffix: "DataComponent",
122
+ referenceOverrides: referenceOverrides?.dataComponents,
123
+ referencePathOverrides: referencePathOverrides?.dataComponents
124
+ });
125
+ addResolvedReferenceImports(sourceFile, resolvedReferences, (reference) => {
126
+ return `./data-components/${reference.modulePath}`;
127
+ });
128
+ projectConfig.dataComponents = createReferenceGetterValue(toReferenceNames(resolvedReferences));
129
+ }
130
+ if (hasReferences(artifactComponents)) {
131
+ const resolvedReferences = resolveReferenceBindingsFromIds({
132
+ ids: artifactComponents,
133
+ reservedNames: reservedReferenceNames,
134
+ conflictSuffix: "ArtifactComponent",
135
+ referenceOverrides: referenceOverrides?.artifactComponents,
136
+ referencePathOverrides: referencePathOverrides?.artifactComponents
137
+ });
138
+ addResolvedReferenceImports(sourceFile, resolvedReferences, (reference) => {
139
+ return `./artifact-components/${reference.modulePath}`;
140
+ });
141
+ projectConfig.artifactComponents = createReferenceGetterValue(toReferenceNames(resolvedReferences));
142
+ }
143
+ if (hasReferences(credentialReferences)) {
144
+ const resolvedReferences = resolveReferenceBindingsFromIds({
145
+ ids: credentialReferences,
146
+ reservedNames: reservedReferenceNames,
147
+ conflictSuffix: "CredentialReference",
148
+ collisionStrategy: "numeric",
149
+ referenceOverrides: referenceOverrides?.credentialReferences,
150
+ referencePathOverrides: referencePathOverrides?.credentialReferences
151
+ });
152
+ addResolvedReferenceImports(sourceFile, resolvedReferences, (reference) => {
153
+ return `./credentials/${reference.modulePath}`;
154
+ });
155
+ projectConfig.credentialReferences = createReferenceGetterValue(toReferenceNames(resolvedReferences));
156
+ }
157
+ for (const [key, value] of Object.entries(projectConfig)) addValueToObject(configObject, key, value);
158
+ }
53
159
  });
54
- const reservedReferenceNames = new Set([projectVariableName]);
55
- if (hasReferences(parsed.skills)) {
56
- sourceFile.getImportDeclarationOrThrow("@inkeep/agents-sdk").addNamedImport("loadSkills");
57
- sourceFile.addImportDeclaration({
58
- defaultImport: "path",
59
- moduleSpecifier: "node:path"
60
- });
61
- }
62
- const { projectId, skills, agents, tools, externalAgents, dataComponents, artifactComponents, credentialReferences, referenceOverrides, referencePathOverrides, ...rest } = parsed;
63
- const credentialReferenceResolved = hasReferences(credentialReferences) ? createResolvedReferences(credentialReferences, referenceOverrides?.credentialReferences, referencePathOverrides?.credentialReferences, reservedReferenceNames, "CredentialReference", "numeric") : void 0;
64
- for (const [key, value] of Object.entries({
65
- id: projectId,
66
- ...rest
67
- })) addValueToObject(configObject, key, value);
68
- if (hasReferences(skills)) configObject.addPropertyAssignment({
69
- name: "skills",
70
- initializer: `() => loadSkills(path.join(${formatStringLiteral(projectId)}, 'skills'))`
71
- });
72
- if (hasReferences(agents)) {
73
- const resolvedReferences = createResolvedReferences(agents, referenceOverrides?.agents, referencePathOverrides?.agents, reservedReferenceNames, "Agent");
74
- addReferenceImports(sourceFile, resolvedReferences, "./agents");
75
- addReferenceGetterProperty(configObject, "agents", toReferenceNames(resolvedReferences));
76
- }
77
- if (hasReferences(tools)) {
78
- const resolvedReferences = createResolvedReferences(tools, referenceOverrides?.tools, referencePathOverrides?.tools, reservedReferenceNames, "Tool", "numeric-for-duplicates");
79
- addReferenceImports(sourceFile, resolvedReferences, "./tools");
80
- addReferenceGetterProperty(configObject, "tools", toReferenceNames(resolvedReferences));
81
- }
82
- if (hasReferences(externalAgents)) {
83
- const resolvedReferences = createResolvedReferences(externalAgents, referenceOverrides?.externalAgents, referencePathOverrides?.externalAgents, reservedReferenceNames, "ExternalAgent");
84
- addReferenceImports(sourceFile, resolvedReferences, "./external-agents");
85
- addReferenceGetterProperty(configObject, "externalAgents", toReferenceNames(resolvedReferences));
86
- }
87
- if (hasReferences(dataComponents)) {
88
- const resolvedReferences = createResolvedReferences(dataComponents, referenceOverrides?.dataComponents, referencePathOverrides?.dataComponents, reservedReferenceNames, "DataComponent");
89
- addReferenceImports(sourceFile, resolvedReferences, "./data-components");
90
- addReferenceGetterProperty(configObject, "dataComponents", toReferenceNames(resolvedReferences));
91
- }
92
- if (hasReferences(artifactComponents)) {
93
- const resolvedReferences = createResolvedReferences(artifactComponents, referenceOverrides?.artifactComponents, referencePathOverrides?.artifactComponents, reservedReferenceNames, "ArtifactComponent");
94
- addReferenceImports(sourceFile, resolvedReferences, "./artifact-components");
95
- addReferenceGetterProperty(configObject, "artifactComponents", toReferenceNames(resolvedReferences));
96
- }
97
- if (hasReferences(credentialReferences)) {
98
- const resolvedReferences = credentialReferenceResolved ?? [];
99
- addReferenceImports(sourceFile, resolvedReferences, "./credentials");
100
- addReferenceGetterProperty(configObject, "credentialReferences", toReferenceNames(resolvedReferences));
101
- }
102
- return sourceFile;
103
- }
104
- function addReferenceImports(sourceFile, references, basePath) {
105
- for (const reference of references) sourceFile.addImportDeclaration({
106
- namedImports: [reference.importName === reference.localName ? reference.importName : {
107
- name: reference.importName,
108
- alias: reference.localName
109
- }],
110
- moduleSpecifier: `${basePath}/${reference.modulePath}`
111
- });
112
- }
113
- function toReferenceNames(references) {
114
- return references.map((reference) => reference.localName);
115
- }
116
- function createResolvedReferences(references, referenceOverrides, referencePathOverrides, reservedReferenceNames, suffix, collisionStrategy = "descriptive") {
117
- const seenIds = /* @__PURE__ */ new Set();
118
- const normalizedReferences = [];
119
- for (const referenceId of references) {
120
- if (seenIds.has(referenceId)) continue;
121
- seenIds.add(referenceId);
122
- normalizedReferences.push({
123
- id: referenceId,
124
- importName: resolveReferenceName(referenceId, [referenceOverrides]),
125
- modulePath: resolveReferenceModulePath(referenceId, referencePathOverrides?.[referenceId])
126
- });
127
- }
128
- const importNameCounts = /* @__PURE__ */ new Map();
129
- for (const reference of normalizedReferences) importNameCounts.set(reference.importName, (importNameCounts.get(reference.importName) ?? 0) + 1);
130
- return normalizedReferences.map((reference) => {
131
- const localName = collisionStrategy === "numeric" || collisionStrategy === "numeric-for-duplicates" && (importNameCounts.get(reference.importName) ?? 0) > 1 ? createNumericReferenceName(reference.importName, reservedReferenceNames) : createUniqueReferenceName(reference.importName, reservedReferenceNames, suffix);
132
- return {
133
- id: reference.id,
134
- importName: reference.importName,
135
- localName,
136
- modulePath: reference.modulePath
137
- };
138
- });
139
- }
140
- function createNumericReferenceName(baseName, reservedNames) {
141
- if (!reservedNames.has(baseName)) {
142
- reservedNames.add(baseName);
143
- return baseName;
144
- }
145
- let index = 1;
146
- while (reservedNames.has(`${baseName}${index}`)) index += 1;
147
- const uniqueName = `${baseName}${index}`;
148
- reservedNames.add(uniqueName);
149
- return uniqueName;
150
- }
151
- function resolveReferenceModulePath(referenceId, referencePathOverride) {
152
- if (referencePathOverride && referencePathOverride.length > 0) return referencePathOverride.replace(/\.tsx?$/, "");
153
- return buildComponentFileName(referenceId).replace(/\.tsx?$/, "");
154
160
  }
161
+ const task = {
162
+ type: "project",
163
+ collect(context) {
164
+ const referenceOverrides = collectProjectReferenceOverrides(context);
165
+ const referencePathOverrides = collectProjectReferencePathOverrides(context);
166
+ return [{
167
+ id: context.project.id,
168
+ filePath: context.resolver.resolveOutputFilePath("project", context.project.id, join(context.paths.projectRoot, "index.ts")),
169
+ payload: {
170
+ projectId: context.project.id,
171
+ name: context.project.name,
172
+ description: context.project.description,
173
+ models: context.project.models,
174
+ stopWhen: context.project.stopWhen,
175
+ skills: getObjectKeys(context.project.skills),
176
+ agents: [...context.completeAgentIds],
177
+ tools: getObjectKeys(context.project.tools),
178
+ externalAgents: getObjectKeys(context.project.externalAgents),
179
+ dataComponents: getObjectKeys(context.project.dataComponents),
180
+ artifactComponents: getObjectKeys(context.project.artifactComponents),
181
+ credentialReferences: getObjectKeys(context.project.credentialReferences),
182
+ ...referenceOverrides && { referenceOverrides },
183
+ ...referencePathOverrides && { referencePathOverrides }
184
+ }
185
+ }];
186
+ },
187
+ generate: generateProjectDefinition
188
+ };
155
189
 
156
190
  //#endregion
157
- export { generateProjectDefinition };
191
+ export { generateProjectDefinition, task };
158
192
  //# sourceMappingURL=project-generator.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"project-generator.js","names":[],"sources":["../../../../src/commands/pull-v4/generators/project-generator.ts"],"sourcesContent":["import { FullProjectDefinitionSchema } from '@inkeep/agents-core';\nimport type { SourceFile } from 'ts-morph';\nimport { z } from 'zod';\nimport {\n addReferenceGetterProperty,\n addValueToObject,\n buildComponentFileName,\n createFactoryDefinition,\n createUniqueReferenceName,\n formatStringLiteral,\n hasReferences,\n resolveReferenceName,\n toCamelCase,\n} from '../utils';\n\nconst ReferenceNameByIdSchema = z.record(z.string(), z.string().nonempty());\n\nconst ReferenceOverridesSchema = z.object({\n agents: ReferenceNameByIdSchema.optional(),\n tools: ReferenceNameByIdSchema.optional(),\n externalAgents: ReferenceNameByIdSchema.optional(),\n dataComponents: ReferenceNameByIdSchema.optional(),\n artifactComponents: ReferenceNameByIdSchema.optional(),\n credentialReferences: ReferenceNameByIdSchema.optional(),\n});\n\nconst ReferencePathOverridesSchema = z.object({\n agents: ReferenceNameByIdSchema.optional(),\n tools: ReferenceNameByIdSchema.optional(),\n externalAgents: ReferenceNameByIdSchema.optional(),\n dataComponents: ReferenceNameByIdSchema.optional(),\n artifactComponents: ReferenceNameByIdSchema.optional(),\n credentialReferences: ReferenceNameByIdSchema.optional(),\n});\n\ninterface ResolvedReference {\n id: string;\n importName: string;\n localName: string;\n modulePath: string;\n}\n\ntype CollisionStrategy = 'descriptive' | 'numeric' | 'numeric-for-duplicates';\n\nconst MySchema = FullProjectDefinitionSchema.pick({\n name: true,\n description: true,\n models: true,\n stopWhen: true,\n});\n\nconst ProjectSchema = z.strictObject({\n projectId: z.string().nonempty(),\n ...MySchema.shape,\n description: z.preprocess((v) => v || undefined, MySchema.shape.description),\n // Invalid input: expected object, received null\n stopWhen: z.preprocess(\n (v) => (v && Object.keys(v).length && v) || undefined,\n MySchema.shape.stopWhen\n ),\n skills: z.array(z.string()).optional(),\n agents: z.array(z.string()).optional(),\n tools: z.array(z.string()).optional(),\n externalAgents: z.array(z.string()).optional(),\n dataComponents: z.array(z.string()).optional(),\n artifactComponents: z.array(z.string()).optional(),\n credentialReferences: z.array(z.string()).optional(),\n referenceOverrides: ReferenceOverridesSchema.optional(),\n referencePathOverrides: ReferencePathOverridesSchema.optional(),\n});\n\ntype ProjectInput = z.input<typeof ProjectSchema>;\n\nexport function generateProjectDefinition(data: ProjectInput): SourceFile {\n const result = ProjectSchema.safeParse(data);\n if (!result.success) {\n throw new Error(`Validation failed for project:\n${z.prettifyError(result.error)}`);\n }\n\n const parsed = result.data;\n const projectVariableName = toCamelCase(parsed.projectId);\n const { sourceFile, configObject } = createFactoryDefinition({\n importName: 'project',\n variableName: projectVariableName,\n });\n const reservedReferenceNames = new Set([projectVariableName]);\n if (hasReferences(parsed.skills)) {\n sourceFile.getImportDeclarationOrThrow('@inkeep/agents-sdk').addNamedImport('loadSkills');\n sourceFile.addImportDeclaration({\n defaultImport: 'path',\n moduleSpecifier: 'node:path',\n });\n }\n\n const {\n projectId,\n skills,\n agents,\n tools,\n externalAgents,\n dataComponents,\n artifactComponents,\n credentialReferences,\n referenceOverrides,\n referencePathOverrides,\n ...rest\n } = parsed;\n\n const credentialReferenceResolved = hasReferences(credentialReferences)\n ? createResolvedReferences(\n credentialReferences,\n referenceOverrides?.credentialReferences,\n referencePathOverrides?.credentialReferences,\n reservedReferenceNames,\n 'CredentialReference',\n 'numeric'\n )\n : undefined;\n\n for (const [key, value] of Object.entries({\n id: projectId,\n ...rest,\n })) {\n addValueToObject(configObject, key, value);\n }\n\n if (hasReferences(skills)) {\n configObject.addPropertyAssignment({\n name: 'skills',\n initializer: `() => loadSkills(path.join(${formatStringLiteral(projectId)}, 'skills'))`,\n });\n }\n\n if (hasReferences(agents)) {\n const resolvedReferences = createResolvedReferences(\n agents,\n referenceOverrides?.agents,\n referencePathOverrides?.agents,\n reservedReferenceNames,\n 'Agent'\n );\n addReferenceImports(sourceFile, resolvedReferences, './agents');\n addReferenceGetterProperty(configObject, 'agents', toReferenceNames(resolvedReferences));\n }\n\n if (hasReferences(tools)) {\n const resolvedReferences = createResolvedReferences(\n tools,\n referenceOverrides?.tools,\n referencePathOverrides?.tools,\n reservedReferenceNames,\n 'Tool',\n 'numeric-for-duplicates'\n );\n addReferenceImports(sourceFile, resolvedReferences, './tools');\n addReferenceGetterProperty(configObject, 'tools', toReferenceNames(resolvedReferences));\n }\n\n if (hasReferences(externalAgents)) {\n const resolvedReferences = createResolvedReferences(\n externalAgents,\n referenceOverrides?.externalAgents,\n referencePathOverrides?.externalAgents,\n reservedReferenceNames,\n 'ExternalAgent'\n );\n addReferenceImports(sourceFile, resolvedReferences, './external-agents');\n addReferenceGetterProperty(\n configObject,\n 'externalAgents',\n toReferenceNames(resolvedReferences)\n );\n }\n\n if (hasReferences(dataComponents)) {\n const resolvedReferences = createResolvedReferences(\n dataComponents,\n referenceOverrides?.dataComponents,\n referencePathOverrides?.dataComponents,\n reservedReferenceNames,\n 'DataComponent'\n );\n addReferenceImports(sourceFile, resolvedReferences, './data-components');\n addReferenceGetterProperty(\n configObject,\n 'dataComponents',\n toReferenceNames(resolvedReferences)\n );\n }\n\n if (hasReferences(artifactComponents)) {\n const resolvedReferences = createResolvedReferences(\n artifactComponents,\n referenceOverrides?.artifactComponents,\n referencePathOverrides?.artifactComponents,\n reservedReferenceNames,\n 'ArtifactComponent'\n );\n addReferenceImports(sourceFile, resolvedReferences, './artifact-components');\n addReferenceGetterProperty(\n configObject,\n 'artifactComponents',\n toReferenceNames(resolvedReferences)\n );\n }\n\n if (hasReferences(credentialReferences)) {\n const resolvedReferences = credentialReferenceResolved ?? [];\n addReferenceImports(sourceFile, resolvedReferences, './credentials');\n addReferenceGetterProperty(\n configObject,\n 'credentialReferences',\n toReferenceNames(resolvedReferences)\n );\n }\n\n return sourceFile;\n}\n\nfunction addReferenceImports(\n sourceFile: SourceFile,\n references: ResolvedReference[],\n basePath: string\n): void {\n for (const reference of references) {\n sourceFile.addImportDeclaration({\n namedImports: [\n reference.importName === reference.localName\n ? reference.importName\n : { name: reference.importName, alias: reference.localName },\n ],\n moduleSpecifier: `${basePath}/${reference.modulePath}`,\n });\n }\n}\n\nfunction toReferenceNames(references: ResolvedReference[]): string[] {\n return references.map((reference) => reference.localName);\n}\n\nfunction createResolvedReferences(\n references: string[],\n referenceOverrides: Record<string, string> | undefined,\n referencePathOverrides: Record<string, string> | undefined,\n reservedReferenceNames: Set<string>,\n suffix: string,\n collisionStrategy: CollisionStrategy = 'descriptive'\n): ResolvedReference[] {\n const seenIds = new Set<string>();\n const normalizedReferences: Array<{\n id: string;\n importName: string;\n modulePath: string;\n }> = [];\n\n for (const referenceId of references) {\n if (seenIds.has(referenceId)) {\n continue;\n }\n seenIds.add(referenceId);\n\n normalizedReferences.push({\n id: referenceId,\n importName: resolveReferenceName(referenceId, [referenceOverrides]),\n modulePath: resolveReferenceModulePath(referenceId, referencePathOverrides?.[referenceId]),\n });\n }\n\n const importNameCounts = new Map<string, number>();\n for (const reference of normalizedReferences) {\n importNameCounts.set(\n reference.importName,\n (importNameCounts.get(reference.importName) ?? 0) + 1\n );\n }\n\n return normalizedReferences.map((reference) => {\n const shouldUseNumeric =\n collisionStrategy === 'numeric' ||\n (collisionStrategy === 'numeric-for-duplicates' &&\n (importNameCounts.get(reference.importName) ?? 0) > 1);\n\n const localName = shouldUseNumeric\n ? createNumericReferenceName(reference.importName, reservedReferenceNames)\n : createUniqueReferenceName(reference.importName, reservedReferenceNames, suffix);\n\n return {\n id: reference.id,\n importName: reference.importName,\n localName,\n modulePath: reference.modulePath,\n };\n });\n}\n\nfunction createNumericReferenceName(baseName: string, reservedNames: Set<string>): string {\n if (!reservedNames.has(baseName)) {\n reservedNames.add(baseName);\n return baseName;\n }\n\n let index = 1;\n while (reservedNames.has(`${baseName}${index}`)) {\n index += 1;\n }\n\n const uniqueName = `${baseName}${index}`;\n reservedNames.add(uniqueName);\n return uniqueName;\n}\n\nfunction resolveReferenceModulePath(\n referenceId: string,\n referencePathOverride: string | undefined\n): string {\n if (referencePathOverride && referencePathOverride.length > 0) {\n return referencePathOverride.replace(/\\.tsx?$/, '');\n }\n\n const fileName = buildComponentFileName(referenceId);\n return fileName.replace(/\\.tsx?$/, '');\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"project-generator.js","names":[],"sources":["../../../../src/commands/pull-v4/generators/project-generator.ts"],"sourcesContent":["import { join } from 'node:path';\nimport { FullProjectDefinitionSchema } from '@inkeep/agents-core';\nimport type { SourceFile } from 'ts-morph';\nimport { z } from 'zod';\nimport { getObjectKeys } from '../collector-common';\nimport {\n collectProjectReferenceOverrides,\n collectProjectReferencePathOverrides,\n} from '../collector-reference-helpers';\nimport type { GenerationTask } from '../generation-types';\nimport {\n addResolvedReferenceImports,\n resolveReferenceBindingsFromIds,\n toReferenceNames,\n} from '../reference-resolution';\nimport { generateFactorySourceFile } from '../simple-factory-generator';\nimport {\n addValueToObject,\n codeExpression,\n createReferenceGetterValue,\n formatStringLiteral,\n hasReferences,\n toCamelCase,\n} from '../utils';\n\nconst ReferenceNameByIdSchema = z.record(z.string(), z.string().nonempty());\n\nconst ReferenceOverridesSchema = z.object({\n agents: ReferenceNameByIdSchema.optional(),\n tools: ReferenceNameByIdSchema.optional(),\n externalAgents: ReferenceNameByIdSchema.optional(),\n dataComponents: ReferenceNameByIdSchema.optional(),\n artifactComponents: ReferenceNameByIdSchema.optional(),\n credentialReferences: ReferenceNameByIdSchema.optional(),\n});\n\nconst ReferencePathOverridesSchema = z.object({\n agents: ReferenceNameByIdSchema.optional(),\n tools: ReferenceNameByIdSchema.optional(),\n externalAgents: ReferenceNameByIdSchema.optional(),\n dataComponents: ReferenceNameByIdSchema.optional(),\n artifactComponents: ReferenceNameByIdSchema.optional(),\n credentialReferences: ReferenceNameByIdSchema.optional(),\n});\n\nconst MySchema = FullProjectDefinitionSchema.pick({\n name: true,\n description: true,\n models: true,\n stopWhen: true,\n});\n\nconst ProjectSchema = z.strictObject({\n projectId: z.string().nonempty(),\n ...MySchema.shape,\n description: z.preprocess((v) => v || undefined, MySchema.shape.description),\n // Invalid input: expected object, received null\n stopWhen: z.preprocess(\n (v) => (v && Object.keys(v).length && v) || undefined,\n MySchema.shape.stopWhen\n ),\n skills: z.array(z.string()).optional(),\n agents: z.array(z.string()).optional(),\n tools: z.array(z.string()).optional(),\n externalAgents: z.array(z.string()).optional(),\n dataComponents: z.array(z.string()).optional(),\n artifactComponents: z.array(z.string()).optional(),\n credentialReferences: z.array(z.string()).optional(),\n referenceOverrides: ReferenceOverridesSchema.optional(),\n referencePathOverrides: ReferencePathOverridesSchema.optional(),\n});\n\ntype ProjectInput = z.input<typeof ProjectSchema>;\n\nexport function generateProjectDefinition(data: ProjectInput): SourceFile {\n return generateFactorySourceFile(data, {\n schema: ProjectSchema,\n factory: {\n importName: 'project',\n variableName: (parsed) => toCamelCase(parsed.projectId),\n },\n render({ parsed, sourceFile, configObject }) {\n const projectVariableName = toCamelCase(parsed.projectId);\n const reservedReferenceNames = new Set([projectVariableName]);\n if (hasReferences(parsed.skills)) {\n sourceFile.getImportDeclarationOrThrow('@inkeep/agents-sdk').addNamedImport('loadSkills');\n sourceFile.addImportDeclaration({\n defaultImport: 'path',\n moduleSpecifier: 'node:path',\n });\n }\n\n const {\n projectId,\n skills,\n agents,\n tools,\n externalAgents,\n dataComponents,\n artifactComponents,\n credentialReferences,\n referenceOverrides,\n referencePathOverrides,\n ...rest\n } = parsed;\n\n const projectConfig: Record<string, unknown> = {\n id: projectId,\n ...rest,\n };\n\n if (hasReferences(skills)) {\n projectConfig.skills = codeExpression(\n `() => loadSkills(path.join(${formatStringLiteral(projectId)}, 'skills'))`\n );\n }\n\n if (hasReferences(agents)) {\n const resolvedReferences = resolveReferenceBindingsFromIds({\n ids: agents,\n reservedNames: reservedReferenceNames,\n conflictSuffix: 'Agent',\n referenceOverrides: referenceOverrides?.agents,\n referencePathOverrides: referencePathOverrides?.agents,\n });\n addResolvedReferenceImports(sourceFile, resolvedReferences, (reference) => {\n return `./agents/${reference.modulePath}`;\n });\n projectConfig.agents = createReferenceGetterValue(toReferenceNames(resolvedReferences));\n }\n\n if (hasReferences(tools)) {\n const resolvedReferences = resolveReferenceBindingsFromIds({\n ids: tools,\n reservedNames: reservedReferenceNames,\n conflictSuffix: 'Tool',\n collisionStrategy: 'numeric-for-duplicates',\n referenceOverrides: referenceOverrides?.tools,\n referencePathOverrides: referencePathOverrides?.tools,\n });\n addResolvedReferenceImports(sourceFile, resolvedReferences, (reference) => {\n return `./tools/${reference.modulePath}`;\n });\n projectConfig.tools = createReferenceGetterValue(toReferenceNames(resolvedReferences));\n }\n\n if (hasReferences(externalAgents)) {\n const resolvedReferences = resolveReferenceBindingsFromIds({\n ids: externalAgents,\n reservedNames: reservedReferenceNames,\n conflictSuffix: 'ExternalAgent',\n referenceOverrides: referenceOverrides?.externalAgents,\n referencePathOverrides: referencePathOverrides?.externalAgents,\n });\n addResolvedReferenceImports(sourceFile, resolvedReferences, (reference) => {\n return `./external-agents/${reference.modulePath}`;\n });\n projectConfig.externalAgents = createReferenceGetterValue(\n toReferenceNames(resolvedReferences)\n );\n }\n\n if (hasReferences(dataComponents)) {\n const resolvedReferences = resolveReferenceBindingsFromIds({\n ids: dataComponents,\n reservedNames: reservedReferenceNames,\n conflictSuffix: 'DataComponent',\n referenceOverrides: referenceOverrides?.dataComponents,\n referencePathOverrides: referencePathOverrides?.dataComponents,\n });\n addResolvedReferenceImports(sourceFile, resolvedReferences, (reference) => {\n return `./data-components/${reference.modulePath}`;\n });\n projectConfig.dataComponents = createReferenceGetterValue(\n toReferenceNames(resolvedReferences)\n );\n }\n\n if (hasReferences(artifactComponents)) {\n const resolvedReferences = resolveReferenceBindingsFromIds({\n ids: artifactComponents,\n reservedNames: reservedReferenceNames,\n conflictSuffix: 'ArtifactComponent',\n referenceOverrides: referenceOverrides?.artifactComponents,\n referencePathOverrides: referencePathOverrides?.artifactComponents,\n });\n addResolvedReferenceImports(sourceFile, resolvedReferences, (reference) => {\n return `./artifact-components/${reference.modulePath}`;\n });\n projectConfig.artifactComponents = createReferenceGetterValue(\n toReferenceNames(resolvedReferences)\n );\n }\n\n if (hasReferences(credentialReferences)) {\n const resolvedReferences = resolveReferenceBindingsFromIds({\n ids: credentialReferences,\n reservedNames: reservedReferenceNames,\n conflictSuffix: 'CredentialReference',\n collisionStrategy: 'numeric',\n referenceOverrides: referenceOverrides?.credentialReferences,\n referencePathOverrides: referencePathOverrides?.credentialReferences,\n });\n addResolvedReferenceImports(sourceFile, resolvedReferences, (reference) => {\n return `./credentials/${reference.modulePath}`;\n });\n projectConfig.credentialReferences = createReferenceGetterValue(\n toReferenceNames(resolvedReferences)\n );\n }\n\n for (const [key, value] of Object.entries(projectConfig)) {\n addValueToObject(configObject, key, value);\n }\n },\n });\n}\n\nexport const task = {\n type: 'project',\n collect(context) {\n const referenceOverrides = collectProjectReferenceOverrides(context);\n const referencePathOverrides = collectProjectReferencePathOverrides(context);\n\n return [\n {\n id: context.project.id,\n filePath: context.resolver.resolveOutputFilePath(\n 'project',\n context.project.id,\n join(context.paths.projectRoot, 'index.ts')\n ),\n payload: {\n projectId: context.project.id,\n name: context.project.name,\n description: context.project.description,\n models: context.project.models,\n stopWhen: context.project.stopWhen,\n skills: getObjectKeys(context.project.skills),\n agents: [...context.completeAgentIds],\n tools: getObjectKeys(context.project.tools),\n externalAgents: getObjectKeys(context.project.externalAgents),\n dataComponents: getObjectKeys(context.project.dataComponents),\n artifactComponents: getObjectKeys(context.project.artifactComponents),\n credentialReferences: getObjectKeys(context.project.credentialReferences),\n ...(referenceOverrides && { referenceOverrides }),\n ...(referencePathOverrides && { referencePathOverrides }),\n } as Parameters<typeof generateProjectDefinition>[0],\n },\n ];\n },\n generate: generateProjectDefinition,\n} satisfies GenerationTask<Parameters<typeof generateProjectDefinition>[0]>;\n"],"mappings":"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"}
@@ -0,0 +1,66 @@
1
+ import { toTriggerReferenceName } from "../utils/naming.js";
2
+ import "../utils/index.js";
3
+ import { buildSequentialNameFileNames } from "../generation-resolver.js";
4
+ import { generateSimpleFactoryDefinition } from "../simple-factory-generator.js";
5
+ import { FullProjectDefinitionSchema } from "@inkeep/agents-core";
6
+ import { z } from "zod";
7
+ import { join } from "node:path";
8
+ import { SyntaxKind } from "ts-morph";
9
+
10
+ //#region src/commands/pull-v4/generators/scheduled-trigger-generator.ts
11
+ const MySchema = FullProjectDefinitionSchema.shape.agents.valueType.shape.scheduledTriggers.unwrap().valueType.omit({
12
+ id: true,
13
+ runAsUserId: true,
14
+ createdBy: true
15
+ });
16
+ const ScheduledTriggerSchema = z.strictObject({
17
+ scheduledTriggerId: z.string().nonempty(),
18
+ ...MySchema.shape,
19
+ description: z.preprocess((v) => v ?? void 0, MySchema.shape.description),
20
+ runAt: z.preprocess((v) => v ?? void 0, MySchema.shape.runAt),
21
+ payload: z.preprocess((v) => v ?? void 0, MySchema.shape.payload)
22
+ });
23
+ function generateScheduledTriggerDefinition({ id, runAsUserId, createdBy, ...data }) {
24
+ return generateSimpleFactoryDefinition(data, {
25
+ schema: ScheduledTriggerSchema,
26
+ factory: {
27
+ importName: "ScheduledTrigger",
28
+ variableName: (parsed) => toTriggerReferenceName(parsed.name),
29
+ syntaxKind: SyntaxKind.NewExpression
30
+ },
31
+ buildConfig(parsed) {
32
+ const { scheduledTriggerId, ...rest } = parsed;
33
+ return {
34
+ id: scheduledTriggerId,
35
+ ...rest
36
+ };
37
+ }
38
+ });
39
+ }
40
+ const task = {
41
+ type: "scheduled-trigger",
42
+ collect(context) {
43
+ if (!context.project.agents) return [];
44
+ const records = [];
45
+ for (const agentId of context.completeAgentIds) {
46
+ const agentData = context.project.agents[agentId];
47
+ if (!agentData?.scheduledTriggers) continue;
48
+ const scheduledTriggerEntries = Object.entries(agentData.scheduledTriggers);
49
+ const fileNamesByScheduledTriggerId = buildSequentialNameFileNames(scheduledTriggerEntries);
50
+ for (const [scheduledTriggerId, scheduledTriggerData] of scheduledTriggerEntries) records.push({
51
+ id: scheduledTriggerId,
52
+ filePath: context.resolver.resolveOutputFilePath("scheduledTriggers", scheduledTriggerId, join(context.paths.agentsDir, "scheduled-triggers", fileNamesByScheduledTriggerId[scheduledTriggerId])),
53
+ payload: {
54
+ scheduledTriggerId,
55
+ ...scheduledTriggerData
56
+ }
57
+ });
58
+ }
59
+ return records;
60
+ },
61
+ generate: generateScheduledTriggerDefinition
62
+ };
63
+
64
+ //#endregion
65
+ export { generateScheduledTriggerDefinition, task };
66
+ //# sourceMappingURL=scheduled-trigger-generator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scheduled-trigger-generator.js","names":[],"sources":["../../../../src/commands/pull-v4/generators/scheduled-trigger-generator.ts"],"sourcesContent":["import { join } from 'node:path';\nimport { FullProjectDefinitionSchema } from '@inkeep/agents-core';\nimport { type SourceFile, SyntaxKind } from 'ts-morph';\nimport { z } from 'zod';\nimport { buildSequentialNameFileNames } from '../generation-resolver';\nimport type { GenerationTask } from '../generation-types';\nimport { generateSimpleFactoryDefinition } from '../simple-factory-generator';\nimport { toTriggerReferenceName } from '../utils';\n\nconst MySchema = FullProjectDefinitionSchema.shape.agents.valueType.shape.scheduledTriggers\n .unwrap()\n .valueType.omit({\n id: true,\n runAsUserId: true,\n createdBy: true,\n });\n\nconst ScheduledTriggerSchema = z.strictObject({\n scheduledTriggerId: z.string().nonempty(),\n ...MySchema.shape,\n description: z.preprocess((v) => v ?? undefined, MySchema.shape.description),\n runAt: z.preprocess((v) => v ?? undefined, MySchema.shape.runAt),\n payload: z.preprocess((v) => v ?? undefined, MySchema.shape.payload),\n});\n\ntype ScheduledTriggerInput = z.input<typeof ScheduledTriggerSchema>;\n\nexport function generateScheduledTriggerDefinition({\n id,\n runAsUserId,\n createdBy,\n ...data\n}: ScheduledTriggerInput & Record<string, unknown>): SourceFile {\n return generateSimpleFactoryDefinition(data, {\n schema: ScheduledTriggerSchema,\n factory: {\n importName: 'ScheduledTrigger',\n variableName: (parsed) => toTriggerReferenceName(parsed.name),\n syntaxKind: SyntaxKind.NewExpression,\n },\n buildConfig(parsed) {\n const { scheduledTriggerId, ...rest } = parsed;\n return {\n id: scheduledTriggerId,\n ...rest,\n };\n },\n });\n}\n\nexport const task = {\n type: 'scheduled-trigger',\n collect(context) {\n if (!context.project.agents) {\n return [];\n }\n\n const records = [];\n for (const agentId of context.completeAgentIds) {\n const agentData = context.project.agents[agentId];\n if (!agentData?.scheduledTriggers) {\n continue;\n }\n\n const scheduledTriggerEntries = Object.entries(agentData.scheduledTriggers);\n const fileNamesByScheduledTriggerId = buildSequentialNameFileNames(scheduledTriggerEntries);\n\n for (const [scheduledTriggerId, scheduledTriggerData] of scheduledTriggerEntries) {\n records.push({\n id: scheduledTriggerId,\n filePath: context.resolver.resolveOutputFilePath(\n 'scheduledTriggers',\n scheduledTriggerId,\n join(\n context.paths.agentsDir,\n 'scheduled-triggers',\n fileNamesByScheduledTriggerId[scheduledTriggerId]\n )\n ),\n payload: {\n scheduledTriggerId,\n ...scheduledTriggerData,\n } as Parameters<typeof generateScheduledTriggerDefinition>[0],\n });\n }\n }\n\n return records;\n },\n generate: generateScheduledTriggerDefinition,\n} satisfies GenerationTask<Parameters<typeof generateScheduledTriggerDefinition>[0]>;\n"],"mappings":";;;;;;;;;;AASA,MAAM,WAAW,4BAA4B,MAAM,OAAO,UAAU,MAAM,kBACvE,QAAQ,CACR,UAAU,KAAK;CACd,IAAI;CACJ,aAAa;CACb,WAAW;CACZ,CAAC;AAEJ,MAAM,yBAAyB,EAAE,aAAa;CAC5C,oBAAoB,EAAE,QAAQ,CAAC,UAAU;CACzC,GAAG,SAAS;CACZ,aAAa,EAAE,YAAY,MAAM,KAAK,QAAW,SAAS,MAAM,YAAY;CAC5E,OAAO,EAAE,YAAY,MAAM,KAAK,QAAW,SAAS,MAAM,MAAM;CAChE,SAAS,EAAE,YAAY,MAAM,KAAK,QAAW,SAAS,MAAM,QAAQ;CACrE,CAAC;AAIF,SAAgB,mCAAmC,EACjD,IACA,aACA,WACA,GAAG,QAC2D;AAC9D,QAAO,gCAAgC,MAAM;EAC3C,QAAQ;EACR,SAAS;GACP,YAAY;GACZ,eAAe,WAAW,uBAAuB,OAAO,KAAK;GAC7D,YAAY,WAAW;GACxB;EACD,YAAY,QAAQ;GAClB,MAAM,EAAE,oBAAoB,GAAG,SAAS;AACxC,UAAO;IACL,IAAI;IACJ,GAAG;IACJ;;EAEJ,CAAC;;AAGJ,MAAa,OAAO;CAClB,MAAM;CACN,QAAQ,SAAS;AACf,MAAI,CAAC,QAAQ,QAAQ,OACnB,QAAO,EAAE;EAGX,MAAM,UAAU,EAAE;AAClB,OAAK,MAAM,WAAW,QAAQ,kBAAkB;GAC9C,MAAM,YAAY,QAAQ,QAAQ,OAAO;AACzC,OAAI,CAAC,WAAW,kBACd;GAGF,MAAM,0BAA0B,OAAO,QAAQ,UAAU,kBAAkB;GAC3E,MAAM,gCAAgC,6BAA6B,wBAAwB;AAE3F,QAAK,MAAM,CAAC,oBAAoB,yBAAyB,wBACvD,SAAQ,KAAK;IACX,IAAI;IACJ,UAAU,QAAQ,SAAS,sBACzB,qBACA,oBACA,KACE,QAAQ,MAAM,WACd,sBACA,8BAA8B,oBAC/B,CACF;IACD,SAAS;KACP;KACA,GAAG;KACJ;IACF,CAAC;;AAIN,SAAO;;CAET,UAAU;CACX"}
@@ -1,6 +1,13 @@
1
- import { addValueToObject, convertJsonSchemaToZodSafe, createFactoryDefinition, toCamelCase } from "../utils.js";
1
+ import { codeExpression } from "../utils/code-values.js";
2
+ import { buildComponentFileName, toCamelCase } from "../utils/naming.js";
3
+ import { addValueToObject } from "../utils/factory-writer.js";
4
+ import { convertJsonSchemaToZodSafe } from "../utils/schema-rendering.js";
5
+ import "../utils/index.js";
6
+ import { asRecord, resolveStatusComponentId } from "../collector-common.js";
7
+ import { generateFactorySourceFile } from "../simple-factory-generator.js";
2
8
  import { FullProjectDefinitionSchema } from "@inkeep/agents-core";
3
9
  import { z } from "zod";
10
+ import { join } from "node:path";
4
11
 
5
12
  //#region src/commands/pull-v4/generators/status-component-generator.ts
6
13
  const MySchema = FullProjectDefinitionSchema.shape.statusUpdates.unwrap().shape.statusComponents.unwrap().element;
@@ -9,27 +16,55 @@ const StatusComponentSchema = z.strictObject({
9
16
  ...MySchema.shape
10
17
  });
11
18
  function generateStatusComponentDefinition({ id, ...data }) {
12
- const result = StatusComponentSchema.safeParse(data);
13
- if (!result.success) throw new Error(`Validation failed for status component:\n${z.prettifyError(result.error)}`);
14
- const { statusComponentId, detailsSchema, ...rest } = result.data;
15
- const { sourceFile, configObject } = createFactoryDefinition({
16
- importName: "statusComponent",
17
- variableName: toCamelCase(statusComponentId)
19
+ return generateFactorySourceFile(data, {
20
+ schema: StatusComponentSchema,
21
+ factory: {
22
+ importName: "statusComponent",
23
+ variableName: (parsed) => toCamelCase(parsed.statusComponentId)
24
+ },
25
+ render({ parsed, sourceFile, configObject }) {
26
+ const { statusComponentId: _, detailsSchema, ...rest } = parsed;
27
+ for (const [k, v] of Object.entries(rest)) addValueToObject(configObject, k, v);
28
+ if (detailsSchema) {
29
+ sourceFile.addImportDeclaration({
30
+ namedImports: ["z"],
31
+ moduleSpecifier: "zod"
32
+ });
33
+ addValueToObject(configObject, "detailsSchema", codeExpression(convertJsonSchemaToZodSafe(detailsSchema)));
34
+ }
35
+ }
18
36
  });
19
- for (const [k, v] of Object.entries(rest)) addValueToObject(configObject, k, v);
20
- if (detailsSchema) {
21
- sourceFile.addImportDeclaration({
22
- namedImports: ["z"],
23
- moduleSpecifier: "zod"
24
- });
25
- configObject.addPropertyAssignment({
26
- name: "detailsSchema",
27
- initializer: convertJsonSchemaToZodSafe(detailsSchema)
28
- });
29
- }
30
- return sourceFile;
31
37
  }
38
+ const task = {
39
+ type: "status-component",
40
+ collect(context) {
41
+ if (!context.project.agents) return [];
42
+ const statusComponentRecordsById = /* @__PURE__ */ new Map();
43
+ for (const agentId of context.completeAgentIds) {
44
+ const agentData = context.project.agents[agentId];
45
+ const statusUpdates = asRecord(agentData?.statusUpdates);
46
+ const statusComponents = Array.isArray(statusUpdates?.statusComponents) ? statusUpdates.statusComponents : [];
47
+ for (const statusComponentData of statusComponents) {
48
+ const payload = asRecord(statusComponentData);
49
+ if (!payload) continue;
50
+ const statusComponentId = resolveStatusComponentId(payload);
51
+ if (!statusComponentId || statusComponentRecordsById.has(statusComponentId)) continue;
52
+ const statusComponentName = typeof payload.name === "string" ? payload.name : void 0;
53
+ statusComponentRecordsById.set(statusComponentId, {
54
+ id: statusComponentId,
55
+ filePath: context.resolver.resolveOutputFilePath("statusComponents", statusComponentId, join(context.paths.statusComponentsDir, buildComponentFileName(statusComponentId, statusComponentName))),
56
+ payload: {
57
+ statusComponentId,
58
+ ...payload
59
+ }
60
+ });
61
+ }
62
+ }
63
+ return [...statusComponentRecordsById.values()];
64
+ },
65
+ generate: generateStatusComponentDefinition
66
+ };
32
67
 
33
68
  //#endregion
34
- export { generateStatusComponentDefinition };
69
+ export { generateStatusComponentDefinition, task };
35
70
  //# sourceMappingURL=status-component-generator.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"status-component-generator.js","names":[],"sources":["../../../../src/commands/pull-v4/generators/status-component-generator.ts"],"sourcesContent":["import { FullProjectDefinitionSchema } from '@inkeep/agents-core';\nimport type { SourceFile } from 'ts-morph';\nimport { z } from 'zod';\nimport {\n addValueToObject,\n convertJsonSchemaToZodSafe,\n createFactoryDefinition,\n toCamelCase,\n} from '../utils';\n\nconst MySchema = FullProjectDefinitionSchema.shape.statusUpdates\n .unwrap()\n .shape.statusComponents.unwrap().element;\n\nconst StatusComponentSchema = z.strictObject({\n statusComponentId: z.string().nonempty(),\n ...MySchema.shape,\n});\n\ntype StatusComponentInput = z.input<typeof StatusComponentSchema>;\n\nexport function generateStatusComponentDefinition({\n id,\n ...data\n}: StatusComponentInput & Record<string, unknown>): SourceFile {\n const result = StatusComponentSchema.safeParse(data);\n if (!result.success) {\n throw new Error(`Validation failed for status component:\\n${z.prettifyError(result.error)}`);\n }\n\n const { statusComponentId, detailsSchema, ...rest } = result.data;\n\n const { sourceFile, configObject } = createFactoryDefinition({\n importName: 'statusComponent',\n variableName: toCamelCase(statusComponentId),\n });\n\n for (const [k, v] of Object.entries(rest)) {\n addValueToObject(configObject, k, v);\n }\n if (detailsSchema) {\n sourceFile.addImportDeclaration({\n namedImports: ['z'],\n moduleSpecifier: 'zod',\n });\n configObject.addPropertyAssignment({\n name: 'detailsSchema',\n initializer: convertJsonSchemaToZodSafe(detailsSchema),\n });\n }\n\n return sourceFile;\n}\n"],"mappings":";;;;;AAUA,MAAM,WAAW,4BAA4B,MAAM,cAChD,QAAQ,CACR,MAAM,iBAAiB,QAAQ,CAAC;AAEnC,MAAM,wBAAwB,EAAE,aAAa;CAC3C,mBAAmB,EAAE,QAAQ,CAAC,UAAU;CACxC,GAAG,SAAS;CACb,CAAC;AAIF,SAAgB,kCAAkC,EAChD,IACA,GAAG,QAC0D;CAC7D,MAAM,SAAS,sBAAsB,UAAU,KAAK;AACpD,KAAI,CAAC,OAAO,QACV,OAAM,IAAI,MAAM,4CAA4C,EAAE,cAAc,OAAO,MAAM,GAAG;CAG9F,MAAM,EAAE,mBAAmB,eAAe,GAAG,SAAS,OAAO;CAE7D,MAAM,EAAE,YAAY,iBAAiB,wBAAwB;EAC3D,YAAY;EACZ,cAAc,YAAY,kBAAkB;EAC7C,CAAC;AAEF,MAAK,MAAM,CAAC,GAAG,MAAM,OAAO,QAAQ,KAAK,CACvC,kBAAiB,cAAc,GAAG,EAAE;AAEtC,KAAI,eAAe;AACjB,aAAW,qBAAqB;GAC9B,cAAc,CAAC,IAAI;GACnB,iBAAiB;GAClB,CAAC;AACF,eAAa,sBAAsB;GACjC,MAAM;GACN,aAAa,2BAA2B,cAAc;GACvD,CAAC;;AAGJ,QAAO"}
1
+ {"version":3,"file":"status-component-generator.js","names":[],"sources":["../../../../src/commands/pull-v4/generators/status-component-generator.ts"],"sourcesContent":["import { join } from 'node:path';\nimport { FullProjectDefinitionSchema } from '@inkeep/agents-core';\nimport type { SourceFile } from 'ts-morph';\nimport { z } from 'zod';\nimport { asRecord, resolveStatusComponentId } from '../collector-common';\nimport type { GenerationTask } from '../generation-types';\nimport { generateFactorySourceFile } from '../simple-factory-generator';\nimport {\n addValueToObject,\n buildComponentFileName,\n codeExpression,\n convertJsonSchemaToZodSafe,\n toCamelCase,\n} from '../utils';\n\nconst MySchema = FullProjectDefinitionSchema.shape.statusUpdates\n .unwrap()\n .shape.statusComponents.unwrap().element;\n\nconst StatusComponentSchema = z.strictObject({\n statusComponentId: z.string().nonempty(),\n ...MySchema.shape,\n});\n\ntype StatusComponentInput = z.input<typeof StatusComponentSchema>;\n\nexport function generateStatusComponentDefinition({\n id,\n ...data\n}: StatusComponentInput & Record<string, unknown>): SourceFile {\n return generateFactorySourceFile(data, {\n schema: StatusComponentSchema,\n factory: {\n importName: 'statusComponent',\n variableName: (parsed) => toCamelCase(parsed.statusComponentId),\n },\n render({ parsed, sourceFile, configObject }) {\n const { statusComponentId: _, detailsSchema, ...rest } = parsed;\n\n for (const [k, v] of Object.entries(rest)) {\n addValueToObject(configObject, k, v);\n }\n if (detailsSchema) {\n sourceFile.addImportDeclaration({\n namedImports: ['z'],\n moduleSpecifier: 'zod',\n });\n addValueToObject(\n configObject,\n 'detailsSchema',\n codeExpression(convertJsonSchemaToZodSafe(detailsSchema))\n );\n }\n },\n });\n}\n\nexport const task = {\n type: 'status-component',\n collect(context) {\n if (!context.project.agents) {\n return [];\n }\n\n const statusComponentRecordsById = new Map<\n string,\n ReturnType<\n GenerationTask<Parameters<typeof generateStatusComponentDefinition>[0]>['collect']\n >[number]\n >();\n\n for (const agentId of context.completeAgentIds) {\n const agentData = context.project.agents[agentId];\n const statusUpdates = asRecord(agentData?.statusUpdates);\n const statusComponents = Array.isArray(statusUpdates?.statusComponents)\n ? statusUpdates.statusComponents\n : [];\n\n for (const statusComponentData of statusComponents) {\n const payload = asRecord(statusComponentData);\n if (!payload) {\n continue;\n }\n\n const statusComponentId = resolveStatusComponentId(payload);\n if (!statusComponentId || statusComponentRecordsById.has(statusComponentId)) {\n continue;\n }\n\n const statusComponentName = typeof payload.name === 'string' ? payload.name : undefined;\n statusComponentRecordsById.set(statusComponentId, {\n id: statusComponentId,\n filePath: context.resolver.resolveOutputFilePath(\n 'statusComponents',\n statusComponentId,\n join(\n context.paths.statusComponentsDir,\n buildComponentFileName(statusComponentId, statusComponentName)\n )\n ),\n payload: {\n statusComponentId,\n ...payload,\n } as Parameters<typeof generateStatusComponentDefinition>[0],\n });\n }\n }\n\n return [...statusComponentRecordsById.values()];\n },\n generate: generateStatusComponentDefinition,\n} satisfies GenerationTask<Parameters<typeof generateStatusComponentDefinition>[0]>;\n"],"mappings":";;;;;;;;;;;;AAeA,MAAM,WAAW,4BAA4B,MAAM,cAChD,QAAQ,CACR,MAAM,iBAAiB,QAAQ,CAAC;AAEnC,MAAM,wBAAwB,EAAE,aAAa;CAC3C,mBAAmB,EAAE,QAAQ,CAAC,UAAU;CACxC,GAAG,SAAS;CACb,CAAC;AAIF,SAAgB,kCAAkC,EAChD,IACA,GAAG,QAC0D;AAC7D,QAAO,0BAA0B,MAAM;EACrC,QAAQ;EACR,SAAS;GACP,YAAY;GACZ,eAAe,WAAW,YAAY,OAAO,kBAAkB;GAChE;EACD,OAAO,EAAE,QAAQ,YAAY,gBAAgB;GAC3C,MAAM,EAAE,mBAAmB,GAAG,eAAe,GAAG,SAAS;AAEzD,QAAK,MAAM,CAAC,GAAG,MAAM,OAAO,QAAQ,KAAK,CACvC,kBAAiB,cAAc,GAAG,EAAE;AAEtC,OAAI,eAAe;AACjB,eAAW,qBAAqB;KAC9B,cAAc,CAAC,IAAI;KACnB,iBAAiB;KAClB,CAAC;AACF,qBACE,cACA,iBACA,eAAe,2BAA2B,cAAc,CAAC,CAC1D;;;EAGN,CAAC;;AAGJ,MAAa,OAAO;CAClB,MAAM;CACN,QAAQ,SAAS;AACf,MAAI,CAAC,QAAQ,QAAQ,OACnB,QAAO,EAAE;EAGX,MAAM,6CAA6B,IAAI,KAKpC;AAEH,OAAK,MAAM,WAAW,QAAQ,kBAAkB;GAC9C,MAAM,YAAY,QAAQ,QAAQ,OAAO;GACzC,MAAM,gBAAgB,SAAS,WAAW,cAAc;GACxD,MAAM,mBAAmB,MAAM,QAAQ,eAAe,iBAAiB,GACnE,cAAc,mBACd,EAAE;AAEN,QAAK,MAAM,uBAAuB,kBAAkB;IAClD,MAAM,UAAU,SAAS,oBAAoB;AAC7C,QAAI,CAAC,QACH;IAGF,MAAM,oBAAoB,yBAAyB,QAAQ;AAC3D,QAAI,CAAC,qBAAqB,2BAA2B,IAAI,kBAAkB,CACzE;IAGF,MAAM,sBAAsB,OAAO,QAAQ,SAAS,WAAW,QAAQ,OAAO;AAC9E,+BAA2B,IAAI,mBAAmB;KAChD,IAAI;KACJ,UAAU,QAAQ,SAAS,sBACzB,oBACA,mBACA,KACE,QAAQ,MAAM,qBACd,uBAAuB,mBAAmB,oBAAoB,CAC/D,CACF;KACD,SAAS;MACP;MACA,GAAG;MACJ;KACF,CAAC;;;AAIN,SAAO,CAAC,GAAG,2BAA2B,QAAQ,CAAC;;CAEjD,UAAU;CACX"}
@@ -1,4 +1,7 @@
1
- import { formatInlineLiteral, isPlainObject, resolveReferenceName, toCamelCase } from "../utils.js";
1
+ import { isPlainObject } from "../utils/shared.js";
2
+ import { formatInlineLiteral } from "../utils/code-values.js";
3
+ import { resolveReferenceName, toCamelCase } from "../utils/naming.js";
4
+ import "../utils/index.js";
2
5
 
3
6
  //#region src/commands/pull-v4/generators/sub-agent-generator.helpers.ts
4
7
  function resolveSubAgentName(subAgentId, name) {
@@ -1 +1 @@
1
- {"version":3,"file":"sub-agent-generator.helpers.js","names":[],"sources":["../../../../src/commands/pull-v4/generators/sub-agent-generator.helpers.ts"],"sourcesContent":["import { formatInlineLiteral, isPlainObject, resolveReferenceName, toCamelCase } from '../utils';\n\ninterface DelegateReferenceOverrides {\n subAgents?: Record<string, string>;\n agents?: Record<string, string>;\n externalAgents?: Record<string, string>;\n}\n\nexport function resolveSubAgentName(subAgentId: string, name?: string): string {\n if (name !== undefined) {\n return name;\n }\n\n return subAgentId\n .replace(/[-_]/g, ' ')\n .replace(/([a-z])([A-Z])/g, '$1 $2')\n .replace(/\\b\\w/g, (char) => char.toUpperCase());\n}\n\nexport function resolveSubAgentVariableName(subAgentId: string, name?: string): string {\n const seed = name || subAgentId;\n return toCamelCase(seed);\n}\n\nexport function collectCanUseReferences(\n canUse?: unknown[],\n toolReferenceOverrides?: Record<string, string>\n): string[] {\n if (!Array.isArray(canUse)) {\n return [];\n }\n\n const references: string[] = [];\n for (const item of canUse) {\n if (typeof item === 'string') {\n references.push(resolveReferenceName(item, [toolReferenceOverrides]));\n continue;\n }\n\n if (!isPlainObject(item)) {\n continue;\n }\n\n const toolId = typeof item.toolId === 'string' ? item.toolId : undefined;\n if (!toolId) {\n continue;\n }\n\n const toolReference = resolveReferenceName(toolId, [toolReferenceOverrides]);\n const withConfig: Record<string, unknown> = {};\n const selectedTools =\n Array.isArray(item.toolSelection) && item.toolSelection.length\n ? item.toolSelection\n : Array.isArray(item.selectedTools) && item.selectedTools.length\n ? item.selectedTools\n : undefined;\n\n if (selectedTools) {\n withConfig.selectedTools = selectedTools;\n }\n\n if (isPlainObject(item.headers) && Object.keys(item.headers).length) {\n withConfig.headers = item.headers;\n }\n\n if (isPlainObject(item.toolPolicies) && Object.keys(item.toolPolicies).length) {\n withConfig.toolPolicies = item.toolPolicies;\n }\n\n if (Object.keys(withConfig).length > 0) {\n references.push(`${toolReference}.with(${formatInlineLiteral(withConfig)})`);\n continue;\n }\n\n references.push(toolReference);\n }\n\n return references;\n}\n\nexport function collectCanDelegateToReferences(\n canDelegateTo: unknown[] | undefined,\n referenceOverrides: DelegateReferenceOverrides\n): string[] {\n if (!Array.isArray(canDelegateTo)) {\n return [];\n }\n\n const references: string[] = [];\n for (const item of canDelegateTo) {\n if (typeof item === 'string') {\n references.push(\n resolveReferenceName(item, [\n referenceOverrides.subAgents,\n referenceOverrides.agents,\n referenceOverrides.externalAgents,\n ])\n );\n continue;\n }\n\n if (!isPlainObject(item)) {\n continue;\n }\n\n const subAgentId = typeof item.subAgentId === 'string' ? item.subAgentId : undefined;\n const agentId = typeof item.agentId === 'string' ? item.agentId : undefined;\n const externalAgentId =\n typeof item.externalAgentId === 'string' ? item.externalAgentId : undefined;\n const targetId = subAgentId || agentId || externalAgentId;\n\n if (!targetId) {\n continue;\n }\n\n const targetReference = subAgentId\n ? resolveReferenceName(subAgentId, [referenceOverrides.subAgents])\n : agentId\n ? resolveReferenceName(agentId, [referenceOverrides.agents])\n : resolveReferenceName(targetId, [referenceOverrides.externalAgents]);\n\n if (isPlainObject(item.headers) && Object.keys(item.headers).length > 0) {\n references.push(\n `${targetReference}.with(${formatInlineLiteral({\n headers: item.headers,\n })})`\n );\n continue;\n }\n\n references.push(targetReference);\n }\n\n return references;\n}\n\nexport function collectSkills(skills?: unknown[]): string[] {\n if (!Array.isArray(skills)) {\n return [];\n }\n\n const formattedSkills: string[] = [];\n for (const skill of skills) {\n if (typeof skill === 'string') {\n formattedSkills.push(formatInlineLiteral(skill));\n continue;\n }\n\n if (!isPlainObject(skill)) {\n continue;\n }\n\n const skillId =\n typeof skill.id === 'string'\n ? skill.id\n : typeof skill.skillId === 'string'\n ? skill.skillId\n : undefined;\n if (!skillId) {\n continue;\n }\n\n const formattedSkill: Record<string, unknown> = { id: skillId };\n if (typeof skill.index === 'number' && Number.isInteger(skill.index)) {\n formattedSkill.index = skill.index;\n }\n if (typeof skill.alwaysLoaded === 'boolean') {\n formattedSkill.alwaysLoaded = skill.alwaysLoaded;\n }\n\n formattedSkills.push(formatInlineLiteral(formattedSkill));\n }\n\n return formattedSkills;\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"sub-agent-generator.helpers.js","names":[],"sources":["../../../../src/commands/pull-v4/generators/sub-agent-generator.helpers.ts"],"sourcesContent":["import { formatInlineLiteral, isPlainObject, resolveReferenceName, toCamelCase } from '../utils';\n\ninterface DelegateReferenceOverrides {\n subAgents?: Record<string, string>;\n agents?: Record<string, string>;\n externalAgents?: Record<string, string>;\n}\n\nexport function resolveSubAgentName(subAgentId: string, name?: string): string {\n if (name !== undefined) {\n return name;\n }\n\n return subAgentId\n .replace(/[-_]/g, ' ')\n .replace(/([a-z])([A-Z])/g, '$1 $2')\n .replace(/\\b\\w/g, (char) => char.toUpperCase());\n}\n\nexport function resolveSubAgentVariableName(subAgentId: string, name?: string): string {\n const seed = name || subAgentId;\n return toCamelCase(seed);\n}\n\nexport function collectCanUseReferences(\n canUse?: unknown[],\n toolReferenceOverrides?: Record<string, string>\n): string[] {\n if (!Array.isArray(canUse)) {\n return [];\n }\n\n const references: string[] = [];\n for (const item of canUse) {\n if (typeof item === 'string') {\n references.push(resolveReferenceName(item, [toolReferenceOverrides]));\n continue;\n }\n\n if (!isPlainObject(item)) {\n continue;\n }\n\n const toolId = typeof item.toolId === 'string' ? item.toolId : undefined;\n if (!toolId) {\n continue;\n }\n\n const toolReference = resolveReferenceName(toolId, [toolReferenceOverrides]);\n const withConfig: Record<string, unknown> = {};\n const selectedTools =\n Array.isArray(item.toolSelection) && item.toolSelection.length\n ? item.toolSelection\n : Array.isArray(item.selectedTools) && item.selectedTools.length\n ? item.selectedTools\n : undefined;\n\n if (selectedTools) {\n withConfig.selectedTools = selectedTools;\n }\n\n if (isPlainObject(item.headers) && Object.keys(item.headers).length) {\n withConfig.headers = item.headers;\n }\n\n if (isPlainObject(item.toolPolicies) && Object.keys(item.toolPolicies).length) {\n withConfig.toolPolicies = item.toolPolicies;\n }\n\n if (Object.keys(withConfig).length > 0) {\n references.push(`${toolReference}.with(${formatInlineLiteral(withConfig)})`);\n continue;\n }\n\n references.push(toolReference);\n }\n\n return references;\n}\n\nexport function collectCanDelegateToReferences(\n canDelegateTo: unknown[] | undefined,\n referenceOverrides: DelegateReferenceOverrides\n): string[] {\n if (!Array.isArray(canDelegateTo)) {\n return [];\n }\n\n const references: string[] = [];\n for (const item of canDelegateTo) {\n if (typeof item === 'string') {\n references.push(\n resolveReferenceName(item, [\n referenceOverrides.subAgents,\n referenceOverrides.agents,\n referenceOverrides.externalAgents,\n ])\n );\n continue;\n }\n\n if (!isPlainObject(item)) {\n continue;\n }\n\n const subAgentId = typeof item.subAgentId === 'string' ? item.subAgentId : undefined;\n const agentId = typeof item.agentId === 'string' ? item.agentId : undefined;\n const externalAgentId =\n typeof item.externalAgentId === 'string' ? item.externalAgentId : undefined;\n const targetId = subAgentId || agentId || externalAgentId;\n\n if (!targetId) {\n continue;\n }\n\n const targetReference = subAgentId\n ? resolveReferenceName(subAgentId, [referenceOverrides.subAgents])\n : agentId\n ? resolveReferenceName(agentId, [referenceOverrides.agents])\n : resolveReferenceName(targetId, [referenceOverrides.externalAgents]);\n\n if (isPlainObject(item.headers) && Object.keys(item.headers).length > 0) {\n references.push(\n `${targetReference}.with(${formatInlineLiteral({\n headers: item.headers,\n })})`\n );\n continue;\n }\n\n references.push(targetReference);\n }\n\n return references;\n}\n\nexport function collectSkills(skills?: unknown[]): string[] {\n if (!Array.isArray(skills)) {\n return [];\n }\n\n const formattedSkills: string[] = [];\n for (const skill of skills) {\n if (typeof skill === 'string') {\n formattedSkills.push(formatInlineLiteral(skill));\n continue;\n }\n\n if (!isPlainObject(skill)) {\n continue;\n }\n\n const skillId =\n typeof skill.id === 'string'\n ? skill.id\n : typeof skill.skillId === 'string'\n ? skill.skillId\n : undefined;\n if (!skillId) {\n continue;\n }\n\n const formattedSkill: Record<string, unknown> = { id: skillId };\n if (typeof skill.index === 'number' && Number.isInteger(skill.index)) {\n formattedSkill.index = skill.index;\n }\n if (typeof skill.alwaysLoaded === 'boolean') {\n formattedSkill.alwaysLoaded = skill.alwaysLoaded;\n }\n\n formattedSkills.push(formatInlineLiteral(formattedSkill));\n }\n\n return formattedSkills;\n}\n"],"mappings":";;;;;;AAQA,SAAgB,oBAAoB,YAAoB,MAAuB;AAC7E,KAAI,SAAS,OACX,QAAO;AAGT,QAAO,WACJ,QAAQ,SAAS,IAAI,CACrB,QAAQ,mBAAmB,QAAQ,CACnC,QAAQ,UAAU,SAAS,KAAK,aAAa,CAAC;;AAGnD,SAAgB,4BAA4B,YAAoB,MAAuB;AAErF,QAAO,YADM,QAAQ,WACG;;AAG1B,SAAgB,wBACd,QACA,wBACU;AACV,KAAI,CAAC,MAAM,QAAQ,OAAO,CACxB,QAAO,EAAE;CAGX,MAAM,aAAuB,EAAE;AAC/B,MAAK,MAAM,QAAQ,QAAQ;AACzB,MAAI,OAAO,SAAS,UAAU;AAC5B,cAAW,KAAK,qBAAqB,MAAM,CAAC,uBAAuB,CAAC,CAAC;AACrE;;AAGF,MAAI,CAAC,cAAc,KAAK,CACtB;EAGF,MAAM,SAAS,OAAO,KAAK,WAAW,WAAW,KAAK,SAAS;AAC/D,MAAI,CAAC,OACH;EAGF,MAAM,gBAAgB,qBAAqB,QAAQ,CAAC,uBAAuB,CAAC;EAC5E,MAAM,aAAsC,EAAE;EAC9C,MAAM,gBACJ,MAAM,QAAQ,KAAK,cAAc,IAAI,KAAK,cAAc,SACpD,KAAK,gBACL,MAAM,QAAQ,KAAK,cAAc,IAAI,KAAK,cAAc,SACtD,KAAK,gBACL;AAER,MAAI,cACF,YAAW,gBAAgB;AAG7B,MAAI,cAAc,KAAK,QAAQ,IAAI,OAAO,KAAK,KAAK,QAAQ,CAAC,OAC3D,YAAW,UAAU,KAAK;AAG5B,MAAI,cAAc,KAAK,aAAa,IAAI,OAAO,KAAK,KAAK,aAAa,CAAC,OACrE,YAAW,eAAe,KAAK;AAGjC,MAAI,OAAO,KAAK,WAAW,CAAC,SAAS,GAAG;AACtC,cAAW,KAAK,GAAG,cAAc,QAAQ,oBAAoB,WAAW,CAAC,GAAG;AAC5E;;AAGF,aAAW,KAAK,cAAc;;AAGhC,QAAO;;AAGT,SAAgB,+BACd,eACA,oBACU;AACV,KAAI,CAAC,MAAM,QAAQ,cAAc,CAC/B,QAAO,EAAE;CAGX,MAAM,aAAuB,EAAE;AAC/B,MAAK,MAAM,QAAQ,eAAe;AAChC,MAAI,OAAO,SAAS,UAAU;AAC5B,cAAW,KACT,qBAAqB,MAAM;IACzB,mBAAmB;IACnB,mBAAmB;IACnB,mBAAmB;IACpB,CAAC,CACH;AACD;;AAGF,MAAI,CAAC,cAAc,KAAK,CACtB;EAGF,MAAM,aAAa,OAAO,KAAK,eAAe,WAAW,KAAK,aAAa;EAC3E,MAAM,UAAU,OAAO,KAAK,YAAY,WAAW,KAAK,UAAU;EAClE,MAAM,kBACJ,OAAO,KAAK,oBAAoB,WAAW,KAAK,kBAAkB;EACpE,MAAM,WAAW,cAAc,WAAW;AAE1C,MAAI,CAAC,SACH;EAGF,MAAM,kBAAkB,aACpB,qBAAqB,YAAY,CAAC,mBAAmB,UAAU,CAAC,GAChE,UACE,qBAAqB,SAAS,CAAC,mBAAmB,OAAO,CAAC,GAC1D,qBAAqB,UAAU,CAAC,mBAAmB,eAAe,CAAC;AAEzE,MAAI,cAAc,KAAK,QAAQ,IAAI,OAAO,KAAK,KAAK,QAAQ,CAAC,SAAS,GAAG;AACvE,cAAW,KACT,GAAG,gBAAgB,QAAQ,oBAAoB,EAC7C,SAAS,KAAK,SACf,CAAC,CAAC,GACJ;AACD;;AAGF,aAAW,KAAK,gBAAgB;;AAGlC,QAAO;;AAGT,SAAgB,cAAc,QAA8B;AAC1D,KAAI,CAAC,MAAM,QAAQ,OAAO,CACxB,QAAO,EAAE;CAGX,MAAM,kBAA4B,EAAE;AACpC,MAAK,MAAM,SAAS,QAAQ;AAC1B,MAAI,OAAO,UAAU,UAAU;AAC7B,mBAAgB,KAAK,oBAAoB,MAAM,CAAC;AAChD;;AAGF,MAAI,CAAC,cAAc,MAAM,CACvB;EAGF,MAAM,UACJ,OAAO,MAAM,OAAO,WAChB,MAAM,KACN,OAAO,MAAM,YAAY,WACvB,MAAM,UACN;AACR,MAAI,CAAC,QACH;EAGF,MAAM,iBAA0C,EAAE,IAAI,SAAS;AAC/D,MAAI,OAAO,MAAM,UAAU,YAAY,OAAO,UAAU,MAAM,MAAM,CAClE,gBAAe,QAAQ,MAAM;AAE/B,MAAI,OAAO,MAAM,iBAAiB,UAChC,gBAAe,eAAe,MAAM;AAGtC,kBAAgB,KAAK,oBAAoB,eAAe,CAAC;;AAG3D,QAAO"}