@inkeep/agents-cli 0.58.9 → 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
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agent-generator.js","names":[],"sources":["../../../../src/commands/pull-v4/generators/agent-generator.ts"],"sourcesContent":["import { FullProjectDefinitionSchema } from '@inkeep/agents-core';\nimport { type ObjectLiteralExpression, type SourceFile, SyntaxKind } from 'ts-morph';\nimport { z } from 'zod';\nimport {\n addReferenceGetterProperty,\n addValueToObject,\n createFactoryDefinition,\n formatTemplate,\n resolveContextTemplateImports,\n toCamelCase,\n toTriggerReferenceName,\n} from '../utils';\nimport {\n addScheduledTriggerImports,\n addStatusComponentImports,\n addSubAgentImports,\n addTriggerImports,\n collectTemplateVariableNamesFromFields,\n createReferenceNameMap,\n createScheduledTriggerReferenceMaps,\n createSubAgentReferenceMaps,\n createTriggerReferenceMaps,\n extractContextConfigId,\n extractIds,\n extractStatusComponentIds,\n type ReferenceNameMap,\n resolveStatusComponentId,\n} from './agent-generator.helpers';\n\nconst SubAgentReferenceSchema = z.object({\n name: z.string().nonempty(),\n local: z.boolean().optional(),\n});\n\nconst MySchema = FullProjectDefinitionSchema.shape.agents.valueType.omit({\n id: true,\n});\n\nconst SubAgentSchema = MySchema.shape.subAgents.valueType.omit({\n // Invalid input: expected \"internal\"\n type: true,\n});\n\nconst ToolSchema = MySchema.shape.tools.unwrap().valueType;\n\nconst AgentSchema = z.strictObject({\n agentId: z.string().nonempty(),\n ...MySchema.shape,\n description: z.preprocess((v) => v || undefined, MySchema.shape.description),\n models: z.preprocess((v) => v ?? undefined, MySchema.shape.models),\n stopWhen: z.preprocess(\n (v) => (v && Object.keys(v).length && v) || undefined,\n MySchema.shape.stopWhen\n ),\n subAgents: z.record(\n z.string(),\n z.strictObject({\n ...SubAgentSchema.shape,\n models: z.preprocess((v) => v ?? undefined, SubAgentSchema.shape.models),\n stopWhen: z.preprocess((v) => v ?? undefined, SubAgentSchema.shape.stopWhen),\n // Unrecognized keys: \"name\", \"description\", \"content\", \"metadata\", \"subAgentSkillId\", \"subAgentId\", \"createdAt\", \"updatedAt\"\n skills: z.unknown(),\n // Invalid input\n canDelegateTo: z.unknown(),\n })\n ),\n tools: z\n .record(\n z.string(),\n z.strictObject({\n ...ToolSchema.shape,\n // Invalid input: expected string, received null\n imageUrl: z.preprocess((v) => v ?? undefined, ToolSchema.shape.imageUrl),\n })\n )\n .optional(),\n // ✖ Invalid input: expected string, received undefined\n // → at triggers.t546ck7yueh52jils88rm.authentication.headers[0].value\n triggers: z.record(z.string(), z.unknown()).optional(),\n agentVariableName: z.string().nonempty().optional(),\n subAgentReferences: z.record(z.string(), SubAgentReferenceSchema).optional(),\n subAgentReferencePathOverrides: z.record(z.string(), z.string().nonempty()).optional(),\n contextConfigReference: SubAgentReferenceSchema.optional(),\n contextConfigHeadersReference: SubAgentReferenceSchema.optional(),\n});\n\ntype AgentInput = z.input<typeof AgentSchema>;\ntype AgentOutput = z.output<typeof AgentSchema>;\n\ninterface AgentReferenceNames {\n subAgents: ReferenceNameMap;\n contextConfig?: string;\n contextHeaders?: string;\n triggers: ReferenceNameMap;\n scheduledTriggers: ReferenceNameMap;\n statusComponents: ReferenceNameMap;\n}\n\nexport function generateAgentDefinition({\n id,\n createdAt,\n updatedAt,\n ...data\n}: AgentInput & Record<string, unknown>): SourceFile {\n const result = AgentSchema.safeParse(data);\n if (!result.success) {\n throw new Error(`Validation failed for agent:\\n${z.prettifyError(result.error)}`);\n }\n\n const parsed = result.data;\n\n const subAgentIds = new Set(extractIds(parsed.subAgents));\n if (parsed.defaultSubAgentId) {\n subAgentIds.add(parsed.defaultSubAgentId);\n }\n const agentVarName = parsed.agentVariableName || toCamelCase(parsed.agentId);\n const { sourceFile, configObject } = createFactoryDefinition({\n importName: 'agent',\n variableName: agentVarName,\n });\n const reservedReferenceNames = new Set([agentVarName]);\n const { referenceNames: subAgentReferenceNames, importNames: subAgentImportNames } =\n createSubAgentReferenceMaps(\n subAgentIds,\n reservedReferenceNames,\n 'SubAgent',\n parsed.subAgentReferences\n );\n addSubAgentImports(\n sourceFile,\n subAgentReferenceNames,\n subAgentImportNames,\n parsed.subAgentReferencePathOverrides\n );\n\n const contextConfigId = extractContextConfigId(parsed.contextConfig);\n let contextConfigReferenceName: string | undefined;\n let contextHeadersReferenceName: string | undefined;\n const promptTemplateVariables = collectTemplateVariableNamesFromFields([\n parsed.prompt,\n parsed.statusUpdates?.prompt,\n ]);\n const hasHeadersTemplateVariables = promptTemplateVariables.some((variableName) =>\n variableName.startsWith('headers.')\n );\n if (contextConfigId) {\n const contextImportResolution = resolveContextTemplateImports({\n reservedNames: reservedReferenceNames,\n shouldResolveContextReference: true,\n shouldResolveHeadersReference: hasHeadersTemplateVariables,\n contextConfigReference: parsed.contextConfigReference,\n contextConfigHeadersReference: parsed.contextConfigHeadersReference,\n defaultContextImportName: toCamelCase(contextConfigId),\n defaultHeadersImportName: `${toCamelCase(contextConfigId)}Headers`,\n });\n contextConfigReferenceName = contextImportResolution.contextReferenceName;\n contextHeadersReferenceName = contextImportResolution.headersReferenceName;\n\n if (contextImportResolution.namedImports.length > 0) {\n sourceFile.addImportDeclaration({\n namedImports: contextImportResolution.namedImports,\n moduleSpecifier: `../context-configs/${contextConfigId}`,\n });\n }\n }\n\n const { referenceNames: triggerReferenceNames, importRefs: triggerImportRefs } =\n createTriggerReferenceMaps(parsed.triggers, reservedReferenceNames);\n addTriggerImports(sourceFile, triggerReferenceNames, triggerImportRefs);\n\n const { referenceNames: scheduledTriggerReferenceNames, importRefs: scheduledTriggerImportRefs } =\n createScheduledTriggerReferenceMaps(parsed.scheduledTriggers, reservedReferenceNames);\n addScheduledTriggerImports(\n sourceFile,\n scheduledTriggerReferenceNames,\n scheduledTriggerImportRefs\n );\n\n const statusComponentReferenceNames = createReferenceNameMap(\n extractStatusComponentIds(parsed.statusUpdates),\n reservedReferenceNames,\n 'StatusComponent'\n );\n addStatusComponentImports(sourceFile, statusComponentReferenceNames);\n\n writeAgentConfig(configObject, parsed, {\n subAgents: subAgentReferenceNames,\n contextConfig: contextConfigReferenceName,\n contextHeaders: contextHeadersReferenceName,\n triggers: triggerReferenceNames,\n scheduledTriggers: scheduledTriggerReferenceNames,\n statusComponents: statusComponentReferenceNames,\n });\n return sourceFile;\n}\n\nfunction writeAgentConfig(\n configObject: ObjectLiteralExpression,\n data: AgentOutput,\n referenceNames: AgentReferenceNames\n) {\n for (const [key, value] of Object.entries({\n id: data.agentId,\n name: data.name,\n description: data.description,\n prompt:\n data.prompt &&\n formatTemplate(data.prompt, {\n contextReference: referenceNames.contextConfig,\n headersReference: referenceNames.contextHeaders,\n }),\n models: data.models,\n stopWhen: data.stopWhen,\n })) {\n addValueToObject(configObject, key, value);\n }\n\n const { defaultSubAgentId } = data;\n if (defaultSubAgentId) {\n configObject.addPropertyAssignment({\n name: 'defaultSubAgent',\n initializer:\n referenceNames.subAgents.get(defaultSubAgentId) ?? toCamelCase(defaultSubAgentId),\n });\n }\n\n const subAgentIds = extractIds(data.subAgents);\n addReferenceGetterProperty(\n configObject,\n 'subAgents',\n subAgentIds.map((id) => referenceNames.subAgents.get(id) ?? toCamelCase(id))\n );\n\n const contextConfigId = extractContextConfigId(data.contextConfig);\n if (contextConfigId && referenceNames.contextConfig) {\n configObject.addPropertyAssignment({\n name: 'contextConfig',\n initializer: referenceNames.contextConfig,\n });\n }\n\n const triggerIds = data.triggers ? extractIds(data.triggers) : [];\n if (triggerIds.length) {\n addReferenceGetterProperty(\n configObject,\n 'triggers',\n triggerIds.map((id) => referenceNames.triggers.get(id) ?? toTriggerReferenceName(id))\n );\n }\n\n const scheduledTriggerIds = data.scheduledTriggers ? extractIds(data.scheduledTriggers) : [];\n if (scheduledTriggerIds.length) {\n addReferenceGetterProperty(\n configObject,\n 'scheduledTriggers',\n scheduledTriggerIds.map(\n (id) => referenceNames.scheduledTriggers.get(id) ?? toTriggerReferenceName(id)\n )\n );\n }\n\n if (data.statusUpdates) {\n const statusUpdatesProperty = configObject.addPropertyAssignment({\n name: 'statusUpdates',\n initializer: '{}',\n });\n const statusUpdatesObject = statusUpdatesProperty.getInitializerIfKindOrThrow(\n SyntaxKind.ObjectLiteralExpression\n );\n addValueToObject(statusUpdatesObject, 'numEvents', data.statusUpdates.numEvents);\n addValueToObject(statusUpdatesObject, 'timeInSeconds', data.statusUpdates.timeInSeconds);\n addValueToObject(\n statusUpdatesObject,\n 'prompt',\n data.statusUpdates.prompt &&\n formatTemplate(data.statusUpdates.prompt, {\n contextReference: referenceNames.contextConfig,\n headersReference: referenceNames.contextHeaders,\n })\n );\n const statusComponentRefs = data.statusUpdates.statusComponents?.map(\n (statusComponent) =>\n `${referenceNames.statusComponents.get(resolveStatusComponentId(statusComponent)) ?? toCamelCase(resolveStatusComponentId(statusComponent))}.config`\n );\n if (statusComponentRefs?.length) {\n const statusComponentsProperty = statusUpdatesObject.addPropertyAssignment({\n name: 'statusComponents',\n initializer: '[]',\n });\n const statusComponentsArray = statusComponentsProperty.getInitializerIfKindOrThrow(\n SyntaxKind.ArrayLiteralExpression\n );\n statusComponentsArray.addElements(statusComponentRefs);\n }\n }\n}\n"],"mappings":"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"}
@@ -1,25 +1,21 @@
1
- import { addValueToObject, convertJsonSchemaToZodSafe, convertNullToUndefined, createFactoryDefinition, formatPropertyName, formatStringLiteral, isPlainObject, toCamelCase } from "../utils.js";
1
+ import { addValueToObject, convertJsonSchemaToZodSafe, createFactoryDefinition, formatPropertyName, formatStringLiteral, isPlainObject, toCamelCase } from "../utils.js";
2
+ import { FullProjectDefinitionSchema } from "@inkeep/agents-core";
2
3
  import { z } from "zod";
3
4
 
4
5
  //#region src/commands/pull-v4/generators/artifact-component-generator.ts
5
- const ArtifactComponentSchema = z.object({
6
+ const MySchema = FullProjectDefinitionSchema.shape.artifactComponents.unwrap().valueType.omit({ id: true });
7
+ const ArtifactComponentSchema = z.strictObject({
6
8
  artifactComponentId: z.string().nonempty(),
7
- name: z.string().nonempty(),
8
- description: z.string().optional(),
9
- props: z.looseObject({}),
10
- schema: z.looseObject({}).optional(),
11
- template: z.string().optional(),
12
- contentType: z.string().optional(),
13
- render: z.preprocess(convertNullToUndefined, z.looseObject({
14
- component: z.string().optional(),
15
- mockData: z.looseObject({}).optional()
16
- }).optional())
9
+ ...MySchema.shape,
10
+ description: z.preprocess((v) => v || void 0, MySchema.shape.description),
11
+ render: z.preprocess((v) => v ?? void 0, MySchema.shape.render),
12
+ props: z.unknown()
17
13
  });
18
- function generateArtifactComponentDefinition(data) {
14
+ function generateArtifactComponentDefinition({ tenantId, id, projectId, createdAt, updatedAt, ...data }) {
19
15
  const result = ArtifactComponentSchema.safeParse(data);
20
16
  if (!result.success) throw new Error(`Validation failed for artifact component:\n${z.prettifyError(result.error)}`);
21
17
  const parsed = result.data;
22
- const schema = parsed.props ?? parsed.schema;
18
+ const schema = parsed.props;
23
19
  const { sourceFile, configObject } = createFactoryDefinition({
24
20
  importName: "artifactComponent",
25
21
  variableName: toCamelCase(parsed.artifactComponentId)
@@ -32,7 +28,7 @@ function generateArtifactComponentDefinition(data) {
32
28
  namedImports: ["z"],
33
29
  moduleSpecifier: "zod"
34
30
  });
35
- const { artifactComponentId, schema: _, props: _2, ...rest } = parsed;
31
+ const { artifactComponentId, props: _, ...rest } = parsed;
36
32
  for (const [key, value] of Object.entries({
37
33
  id: artifactComponentId,
38
34
  ...rest
@@ -66,4 +62,5 @@ function formatArtifactSchema(schema) {
66
62
  }
67
63
 
68
64
  //#endregion
69
- export { generateArtifactComponentDefinition };
65
+ export { generateArtifactComponentDefinition };
66
+ //# sourceMappingURL=artifact-component-generator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"artifact-component-generator.js","names":[],"sources":["../../../../src/commands/pull-v4/generators/artifact-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 formatPropertyName,\n formatStringLiteral,\n isPlainObject,\n toCamelCase,\n} from '../utils';\n\nconst MySchema = FullProjectDefinitionSchema.shape.artifactComponents.unwrap().valueType.omit({\n id: true,\n});\n\nconst ArtifactComponentSchema = z.strictObject({\n artifactComponentId: z.string().nonempty(),\n ...MySchema.shape,\n description: z.preprocess((v) => v || undefined, MySchema.shape.description),\n render: z.preprocess((v) => v ?? undefined, MySchema.shape.render),\n // Invalid input\n props: z.unknown(),\n});\n\ntype ArtifactComponentInput = z.input<typeof ArtifactComponentSchema>;\n\nexport function generateArtifactComponentDefinition({\n tenantId,\n id,\n projectId,\n createdAt,\n updatedAt,\n ...data\n}: ArtifactComponentInput & Record<string, unknown>): SourceFile {\n const result = ArtifactComponentSchema.safeParse(data);\n if (!result.success) {\n throw new Error(`Validation failed for artifact component:\\n${z.prettifyError(result.error)}`);\n }\n\n const parsed = result.data;\n const schema = parsed.props;\n const { sourceFile, configObject } = createFactoryDefinition({\n importName: 'artifactComponent',\n variableName: toCamelCase(parsed.artifactComponentId),\n });\n\n if (hasInPreviewFields(schema)) {\n sourceFile.addImportDeclaration({\n namedImports: ['preview'],\n moduleSpecifier: '@inkeep/agents-core',\n });\n }\n if (schema) {\n sourceFile.addImportDeclaration({ namedImports: ['z'], moduleSpecifier: 'zod' });\n }\n\n const { artifactComponentId, props: _, ...rest } = parsed;\n\n for (const [key, value] of Object.entries({\n id: artifactComponentId,\n ...rest,\n })) {\n addValueToObject(configObject, key, value);\n }\n if (schema) {\n configObject.addPropertyAssignment({\n name: 'props',\n initializer: formatArtifactSchema(schema),\n });\n }\n return sourceFile;\n}\n\nfunction hasInPreviewFields(schema: unknown): boolean {\n if (!isPlainObject(schema) || schema.type !== 'object' || !isPlainObject(schema.properties)) {\n return false;\n }\n\n return Object.values(schema.properties).some(\n (property) => isPlainObject(property) && property.inPreview === true\n );\n}\n\nfunction formatArtifactSchema(schema: unknown): string {\n if (!isPlainObject(schema)) {\n return 'z.any()';\n }\n\n if (schema.type === 'object' && isPlainObject(schema.properties)) {\n const lines = ['z.object({'];\n\n for (const [key, propertySchema] of Object.entries(schema.properties)) {\n const propertyWithoutPreview = isPlainObject(propertySchema)\n ? { ...propertySchema }\n : propertySchema;\n\n if (isPlainObject(propertyWithoutPreview)) {\n delete propertyWithoutPreview.inPreview;\n }\n\n const zodType = convertJsonSchemaToZodSafe(propertyWithoutPreview);\n const propertyValue =\n isPlainObject(propertySchema) && propertySchema.inPreview === true\n ? `preview(${zodType})`\n : zodType;\n\n lines.push(` ${formatPropertyName(key)}: ${propertyValue},`);\n }\n\n lines.push('})');\n\n if (typeof schema.description === 'string') {\n return `${lines.join('\\n')}.describe(${formatStringLiteral(schema.description)})`;\n }\n\n return lines.join('\\n');\n }\n\n return convertJsonSchemaToZodSafe(schema);\n}\n"],"mappings":";;;;;AAaA,MAAM,WAAW,4BAA4B,MAAM,mBAAmB,QAAQ,CAAC,UAAU,KAAK,EAC5F,IAAI,MACL,CAAC;AAEF,MAAM,0BAA0B,EAAE,aAAa;CAC7C,qBAAqB,EAAE,QAAQ,CAAC,UAAU;CAC1C,GAAG,SAAS;CACZ,aAAa,EAAE,YAAY,MAAM,KAAK,QAAW,SAAS,MAAM,YAAY;CAC5E,QAAQ,EAAE,YAAY,MAAM,KAAK,QAAW,SAAS,MAAM,OAAO;CAElE,OAAO,EAAE,SAAS;CACnB,CAAC;AAIF,SAAgB,oCAAoC,EAClD,UACA,IACA,WACA,WACA,WACA,GAAG,QAC4D;CAC/D,MAAM,SAAS,wBAAwB,UAAU,KAAK;AACtD,KAAI,CAAC,OAAO,QACV,OAAM,IAAI,MAAM,8CAA8C,EAAE,cAAc,OAAO,MAAM,GAAG;CAGhG,MAAM,SAAS,OAAO;CACtB,MAAM,SAAS,OAAO;CACtB,MAAM,EAAE,YAAY,iBAAiB,wBAAwB;EAC3D,YAAY;EACZ,cAAc,YAAY,OAAO,oBAAoB;EACtD,CAAC;AAEF,KAAI,mBAAmB,OAAO,CAC5B,YAAW,qBAAqB;EAC9B,cAAc,CAAC,UAAU;EACzB,iBAAiB;EAClB,CAAC;AAEJ,KAAI,OACF,YAAW,qBAAqB;EAAE,cAAc,CAAC,IAAI;EAAE,iBAAiB;EAAO,CAAC;CAGlF,MAAM,EAAE,qBAAqB,OAAO,GAAG,GAAG,SAAS;AAEnD,MAAK,MAAM,CAAC,KAAK,UAAU,OAAO,QAAQ;EACxC,IAAI;EACJ,GAAG;EACJ,CAAC,CACA,kBAAiB,cAAc,KAAK,MAAM;AAE5C,KAAI,OACF,cAAa,sBAAsB;EACjC,MAAM;EACN,aAAa,qBAAqB,OAAO;EAC1C,CAAC;AAEJ,QAAO;;AAGT,SAAS,mBAAmB,QAA0B;AACpD,KAAI,CAAC,cAAc,OAAO,IAAI,OAAO,SAAS,YAAY,CAAC,cAAc,OAAO,WAAW,CACzF,QAAO;AAGT,QAAO,OAAO,OAAO,OAAO,WAAW,CAAC,MACrC,aAAa,cAAc,SAAS,IAAI,SAAS,cAAc,KACjE;;AAGH,SAAS,qBAAqB,QAAyB;AACrD,KAAI,CAAC,cAAc,OAAO,CACxB,QAAO;AAGT,KAAI,OAAO,SAAS,YAAY,cAAc,OAAO,WAAW,EAAE;EAChE,MAAM,QAAQ,CAAC,aAAa;AAE5B,OAAK,MAAM,CAAC,KAAK,mBAAmB,OAAO,QAAQ,OAAO,WAAW,EAAE;GACrE,MAAM,yBAAyB,cAAc,eAAe,GACxD,EAAE,GAAG,gBAAgB,GACrB;AAEJ,OAAI,cAAc,uBAAuB,CACvC,QAAO,uBAAuB;GAGhC,MAAM,UAAU,2BAA2B,uBAAuB;GAClE,MAAM,gBACJ,cAAc,eAAe,IAAI,eAAe,cAAc,OAC1D,WAAW,QAAQ,KACnB;AAEN,SAAM,KAAK,KAAK,mBAAmB,IAAI,CAAC,IAAI,cAAc,GAAG;;AAG/D,QAAM,KAAK,KAAK;AAEhB,MAAI,OAAO,OAAO,gBAAgB,SAChC,QAAO,GAAG,MAAM,KAAK,KAAK,CAAC,YAAY,oBAAoB,OAAO,YAAY,CAAC;AAGjF,SAAO,MAAM,KAAK,KAAK;;AAGzB,QAAO,2BAA2B,OAAO"}
@@ -1,18 +1,26 @@
1
- import { addFactoryConfigVariable, addStringProperty, addValueToObject, convertJsonSchemaToZodSafe, convertNullToUndefined, createInMemoryProject, formatPropertyName, isPlainObject, toCamelCase } from "../utils.js";
1
+ import { addFactoryConfigVariable, addStringProperty, addValueToObject, convertJsonSchemaToZodSafe, createInMemoryProject, formatPropertyName, isPlainObject, toCamelCase } 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/context-config-generator.ts
7
+ const MySchema = FullProjectDefinitionSchema.shape.agents.valueType.shape.contextConfig.unwrap();
6
8
  const ReferenceNameByIdSchema = z.record(z.string(), z.string().nonempty());
7
9
  const ReferenceOverridesSchema = z.object({ credentialReferences: ReferenceNameByIdSchema.optional() });
8
- const ContextConfigSchema = z.looseObject({
10
+ const ReferencePathOverridesSchema = z.object({ credentialReferences: ReferenceNameByIdSchema.optional() });
11
+ const ContextConfigSchema = z.strictObject({
9
12
  contextConfigId: z.string().nonempty(),
10
- id: z.string().optional(),
11
- schema: z.looseObject({}).optional(),
12
- headers: z.union([z.string(), z.looseObject({ id: z.string().optional() })]).optional(),
13
- headersSchema: z.preprocess(convertNullToUndefined, z.looseObject({}).optional()),
14
- contextVariables: z.record(z.string(), z.unknown()).optional(),
15
- referenceOverrides: ReferenceOverridesSchema.optional()
13
+ ...MySchema.shape,
14
+ referenceOverrides: ReferenceOverridesSchema.optional(),
15
+ referencePathOverrides: ReferencePathOverridesSchema.optional(),
16
+ headers: z.string().optional(),
17
+ headersReference: z.string().optional(),
18
+ schema: z.unknown(),
19
+ name: z.string().nullish(),
20
+ trigger: z.unknown(),
21
+ fetchConfig: z.record(z.string(), z.unknown()).optional(),
22
+ defaultValue: z.unknown(),
23
+ responseSchema: z.unknown()
16
24
  });
17
25
  function generateContextConfigDefinition(data) {
18
26
  const result = ContextConfigSchema.safeParse(data);
@@ -22,15 +30,14 @@ function generateContextConfigDefinition(data) {
22
30
  const sourceFile = project.createSourceFile("context-config-definition.ts", "", { overwrite: true });
23
31
  if (isHeadersDefinitionData(parsed)) return generateStandaloneHeadersDefinition(sourceFile, parsed);
24
32
  if (isFetchDefinitionData(parsed)) return generateStandaloneFetchDefinition(sourceFile, parsed);
25
- const parsedContextConfig = result.data;
26
- const explicitHeadersReference = extractHeadersReference(parsedContextConfig.headers);
27
- const templateHeaderVariables = collectTemplateHeaderVariables(parsedContextConfig.contextVariables);
28
- const inferredHeadersSchema = !isPlainObject(parsedContextConfig.headersSchema) && !explicitHeadersReference ? inferHeadersSchemaFromTemplateHeaderVariables(templateHeaderVariables) : void 0;
29
- const headersSchema = isPlainObject(parsedContextConfig.headersSchema) ? parsedContextConfig.headersSchema : inferredHeadersSchema;
30
- const headersReference = resolveHeadersReference(parsedContextConfig, Boolean(headersSchema));
33
+ const explicitHeadersReference = (typeof parsed.headersReference === "string" && parsed.headersReference.length > 0 ? parsed.headersReference : void 0) ?? extractHeadersReference(parsed.headers);
34
+ const templateHeaderVariables = collectTemplateHeaderVariables(parsed.contextVariables);
35
+ const inferredHeadersSchema = !isPlainObject(parsed.headersSchema) && !explicitHeadersReference ? inferHeadersSchemaFromTemplateHeaderVariables(templateHeaderVariables) : void 0;
36
+ const headersSchema = isPlainObject(parsed.headersSchema) ? parsed.headersSchema : inferredHeadersSchema;
37
+ const headersReference = resolveHeadersReference(parsed, Boolean(headersSchema));
31
38
  const shouldDefineHeadersInFile = Boolean(headersReference) && isPlainObject(headersSchema);
32
- const fetchDefinitions = collectFetchDefinitionEntries(parsedContextConfig.contextVariables);
33
- const credentialReferenceNames = collectCredentialReferenceNames(fetchDefinitions, parsedContextConfig.referenceOverrides?.credentialReferences);
39
+ const fetchDefinitions = collectFetchDefinitionEntries(parsed.contextVariables);
40
+ const credentialReferenceNames = collectCredentialReferenceNames(fetchDefinitions, parsed.referenceOverrides?.credentialReferences);
34
41
  const coreImports = ["contextConfig"];
35
42
  if (shouldDefineHeadersInFile) coreImports.unshift("headers");
36
43
  if (fetchDefinitions.length > 0) coreImports.splice(coreImports.length - 1, 0, "fetchDefinition");
@@ -43,13 +50,17 @@ function generateContextConfigDefinition(data) {
43
50
  namedImports: ["z"],
44
51
  moduleSpecifier: "zod"
45
52
  });
46
- for (const [credentialId, credentialReferenceName] of credentialReferenceNames) sourceFile.addImportDeclaration({
47
- namedImports: [credentialReferenceName],
48
- moduleSpecifier: `../credentials/${credentialId}`
49
- });
53
+ for (const [credentialId, credentialReferenceName] of credentialReferenceNames) {
54
+ const credentialReferencePath = parsed.referencePathOverrides?.credentialReferences?.[credentialId] ?? credentialId;
55
+ sourceFile.addImportDeclaration({
56
+ namedImports: [credentialReferenceName],
57
+ moduleSpecifier: `../credentials/${credentialReferencePath}`
58
+ });
59
+ }
50
60
  if (shouldDefineHeadersInFile && headersReference && headersSchema) {
51
61
  const { configObject: headersObject } = addFactoryConfigVariable({
52
62
  sourceFile,
63
+ isExported: true,
53
64
  importName: "headers",
54
65
  variableName: headersReference
55
66
  });
@@ -69,10 +80,10 @@ function generateContextConfigDefinition(data) {
69
80
  const { configObject } = addFactoryConfigVariable({
70
81
  sourceFile,
71
82
  importName: "contextConfig",
72
- variableName: toContextConfigVariableName(parsedContextConfig.contextConfigId),
83
+ variableName: toContextConfigVariableName(parsed.contextConfigId),
73
84
  isExported: true
74
85
  });
75
- writeContextConfig(configObject, parsedContextConfig, headersReference);
86
+ writeContextConfig(configObject, parsed, headersReference);
76
87
  return sourceFile;
77
88
  }
78
89
  function writeContextConfig(configObject, data, headersReference) {
@@ -103,6 +114,7 @@ function extractHeadersReference(headers) {
103
114
  if (typeof headers.name === "string") return headers.name;
104
115
  }
105
116
  function resolveHeadersReference(data, hasHeadersSchema) {
117
+ if (typeof data.headersReference === "string" && data.headersReference) return data.headersReference;
106
118
  const headersRef = extractHeadersReference(data.headers);
107
119
  if (headersRef) return toReferenceIdentifier(headersRef);
108
120
  if (hasHeadersSchema) return `${toContextConfigVariableName(data.contextConfigId)}Headers`;
@@ -192,10 +204,11 @@ function generateStandaloneFetchDefinition(sourceFile, data) {
192
204
  if (typeof data.credentialReferenceId === "string") {
193
205
  const credentialReferenceId = data.credentialReferenceId;
194
206
  const credentialReferenceName = data.referenceOverrides?.credentialReferences?.[credentialReferenceId] ?? toReferenceIdentifier(credentialReferenceId);
207
+ const credentialReferencePath = data.referencePathOverrides?.credentialReferences?.[credentialReferenceId] ?? credentialReferenceId;
195
208
  credentialReferenceNames.set(credentialReferenceId, credentialReferenceName);
196
209
  sourceFile.addImportDeclaration({
197
210
  namedImports: [credentialReferenceName],
198
- moduleSpecifier: `../credentials/${credentialReferenceId}`
211
+ moduleSpecifier: `../credentials/${credentialReferencePath}`
199
212
  });
200
213
  }
201
214
  const { configObject } = addFactoryConfigVariable({
@@ -261,4 +274,5 @@ function inferHeadersSchemaFromTemplateHeaderVariables(variables) {
261
274
  }
262
275
 
263
276
  //#endregion
264
- export { generateContextConfigDefinition };
277
+ export { generateContextConfigDefinition };
278
+ //# sourceMappingURL=context-config-generator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"context-config-generator.js","names":[],"sources":["../../../../src/commands/pull-v4/generators/context-config-generator.ts"],"sourcesContent":["import { FullProjectDefinitionSchema } from '@inkeep/agents-core';\nimport { type ObjectLiteralExpression, type SourceFile, SyntaxKind } from 'ts-morph';\nimport { z } from 'zod';\nimport {\n addFactoryConfigVariable,\n addStringProperty,\n addValueToObject,\n convertJsonSchemaToZodSafe,\n createInMemoryProject,\n formatPropertyName,\n isPlainObject,\n toCamelCase,\n} from '../utils';\n\nconst MySchema = FullProjectDefinitionSchema.shape.agents.valueType.shape.contextConfig.unwrap();\n\nconst ReferenceNameByIdSchema = z.record(z.string(), z.string().nonempty());\n\nconst ReferenceOverridesSchema = z.object({\n credentialReferences: ReferenceNameByIdSchema.optional(),\n});\n\nconst ReferencePathOverridesSchema = z.object({\n credentialReferences: ReferenceNameByIdSchema.optional(),\n});\n\nconst ContextConfigSchema = z.strictObject({\n contextConfigId: z.string().nonempty(),\n ...MySchema.shape,\n referenceOverrides: ReferenceOverridesSchema.optional(),\n referencePathOverrides: ReferencePathOverridesSchema.optional(),\n\n // TODO check these fields\n headers: z.string().optional(),\n headersReference: z.string().optional(),\n schema: z.unknown(),\n name: z.string().nullish(),\n trigger: z.unknown(),\n fetchConfig: z.record(z.string(), z.unknown()).optional(),\n defaultValue: z.unknown(),\n responseSchema: z.unknown(),\n});\n\ntype ContextConfigInput = z.input<typeof ContextConfigSchema>;\ntype ContextConfigOutput = z.output<typeof ContextConfigSchema>;\n\nexport function generateContextConfigDefinition(data: ContextConfigInput): SourceFile {\n const result = ContextConfigSchema.safeParse(data);\n if (!result.success) {\n throw new Error(`Validation failed for context config:\\n${z.prettifyError(result.error)}`);\n }\n\n const project = createInMemoryProject();\n\n const parsed = result.data;\n const sourceFile = project.createSourceFile('context-config-definition.ts', '', {\n overwrite: true,\n });\n\n if (isHeadersDefinitionData(parsed)) {\n return generateStandaloneHeadersDefinition(sourceFile, parsed);\n }\n\n if (isFetchDefinitionData(parsed)) {\n return generateStandaloneFetchDefinition(sourceFile, parsed);\n }\n\n const explicitHeadersReference =\n (typeof parsed.headersReference === 'string' && parsed.headersReference.length > 0\n ? parsed.headersReference\n : undefined) ?? extractHeadersReference(parsed.headers);\n const templateHeaderVariables = collectTemplateHeaderVariables(parsed.contextVariables);\n const inferredHeadersSchema =\n !isPlainObject(parsed.headersSchema) && !explicitHeadersReference\n ? inferHeadersSchemaFromTemplateHeaderVariables(templateHeaderVariables)\n : undefined;\n const headersSchema = isPlainObject(parsed.headersSchema)\n ? parsed.headersSchema\n : inferredHeadersSchema;\n const headersReference = resolveHeadersReference(parsed, Boolean(headersSchema));\n const shouldDefineHeadersInFile = Boolean(headersReference) && isPlainObject(headersSchema);\n const fetchDefinitions = collectFetchDefinitionEntries(parsed.contextVariables);\n const credentialReferenceNames = collectCredentialReferenceNames(\n fetchDefinitions,\n parsed.referenceOverrides?.credentialReferences\n );\n const coreImports = ['contextConfig'];\n if (shouldDefineHeadersInFile) {\n coreImports.unshift('headers');\n }\n if (fetchDefinitions.length > 0) {\n coreImports.splice(coreImports.length - 1, 0, 'fetchDefinition');\n }\n\n sourceFile.addImportDeclaration({\n namedImports: coreImports,\n moduleSpecifier: '@inkeep/agents-core',\n });\n\n const hasResponseSchemas = fetchDefinitions.some((definition) =>\n // @ts-expect-error -- fixme\n isPlainObject(definition.data.responseSchema)\n );\n if (shouldDefineHeadersInFile || hasResponseSchemas) {\n sourceFile.addImportDeclaration({\n namedImports: ['z'],\n moduleSpecifier: 'zod',\n });\n }\n\n for (const [credentialId, credentialReferenceName] of credentialReferenceNames) {\n const credentialReferencePath =\n parsed.referencePathOverrides?.credentialReferences?.[credentialId] ?? credentialId;\n sourceFile.addImportDeclaration({\n namedImports: [credentialReferenceName],\n moduleSpecifier: `../credentials/${credentialReferencePath}`,\n });\n }\n if (shouldDefineHeadersInFile && headersReference && headersSchema) {\n const { configObject: headersObject } = addFactoryConfigVariable({\n sourceFile,\n isExported: true,\n importName: 'headers',\n variableName: headersReference,\n });\n\n headersObject.addPropertyAssignment({\n name: 'schema',\n initializer: convertJsonSchemaToZod(headersSchema),\n });\n }\n\n for (const fetchDefinition of fetchDefinitions) {\n const { configObject: fetchConfigObject } = addFactoryConfigVariable({\n sourceFile,\n importName: 'fetchDefinition',\n variableName: fetchDefinition.variableName,\n });\n writeFetchDefinition(\n fetchConfigObject,\n fetchDefinition.data,\n credentialReferenceNames,\n headersReference\n );\n }\n const contextConfigVarName = toContextConfigVariableName(parsed.contextConfigId);\n const { configObject } = addFactoryConfigVariable({\n sourceFile,\n importName: 'contextConfig',\n variableName: contextConfigVarName,\n isExported: true,\n });\n\n writeContextConfig(configObject, parsed, headersReference);\n\n return sourceFile;\n}\n\nfunction writeContextConfig(\n configObject: ObjectLiteralExpression,\n data: ContextConfigOutput,\n headersReference?: string\n) {\n if (data.id !== undefined) {\n addStringProperty(configObject, 'id', data.id);\n }\n\n if (headersReference) {\n configObject.addPropertyAssignment({\n name: 'headers',\n initializer: headersReference,\n });\n }\n\n if (data.contextVariables && Object.keys(data.contextVariables).length > 0) {\n const contextVariablesProperty = configObject.addPropertyAssignment({\n name: 'contextVariables',\n initializer: '{}',\n });\n const contextVariablesObject = contextVariablesProperty.getInitializerIfKindOrThrow(\n SyntaxKind.ObjectLiteralExpression\n );\n\n for (const [key, value] of Object.entries(data.contextVariables)) {\n const reference = extractContextVariableReference(key, value);\n if (!reference) {\n continue;\n }\n\n contextVariablesObject.addPropertyAssignment({\n name: formatPropertyName(key),\n initializer: reference,\n });\n }\n }\n}\n\nfunction extractHeadersReference(headers?: string | { id?: string; name?: string }) {\n if (!headers) {\n return undefined;\n }\n if (typeof headers === 'string') {\n return headers;\n }\n if (typeof headers.id === 'string') {\n return headers.id;\n }\n if (typeof headers.name === 'string') {\n return headers.name;\n }\n return undefined;\n}\n\nfunction resolveHeadersReference(\n data: ContextConfigOutput,\n hasHeadersSchema: boolean\n): string | undefined {\n if (typeof data.headersReference === 'string' && data.headersReference) {\n return data.headersReference;\n }\n\n const headersRef = extractHeadersReference(data.headers);\n if (headersRef) {\n return toReferenceIdentifier(headersRef);\n }\n\n if (hasHeadersSchema) {\n return `${toContextConfigVariableName(data.contextConfigId)}Headers`;\n }\n\n return undefined;\n}\n\nfunction isFetchDefinitionData(value: unknown): boolean {\n if (!isPlainObject(value)) {\n return false;\n }\n\n return value.fetchConfig !== undefined || value.responseSchema !== undefined;\n}\n\nfunction collectFetchDefinitionEntries(contextVariables?: Record<string, unknown>) {\n if (!contextVariables) {\n return [];\n }\n\n return Object.entries(contextVariables)\n .filter(([, value]) => isFetchDefinitionData(value))\n .map(([key, value]) => {\n const variableName =\n extractContextVariableReference(key, value) ?? toReferenceIdentifier(key);\n return {\n key,\n variableName,\n data: value,\n };\n });\n}\n\nfunction writeFetchDefinition(\n configObject: ObjectLiteralExpression,\n fetchDefinitionData: unknown,\n credentialReferenceNames?: Map<string, string>,\n headersReference?: string\n) {\n const { contextConfigId, responseSchema, credentialReferenceId, ...rest } = isPlainObject(\n fetchDefinitionData\n )\n ? fetchDefinitionData\n : {};\n const normalizedRest = rewriteHeaderTemplates(rest, headersReference);\n for (const [k, v] of Object.entries({\n id: contextConfigId,\n ...normalizedRest,\n })) {\n if (v !== null) {\n addValueToObject(configObject, k, v);\n }\n }\n if (responseSchema) {\n configObject.addPropertyAssignment({\n name: 'responseSchema',\n // @ts-expect-error -- fixme\n initializer: convertJsonSchemaToZod(responseSchema),\n });\n }\n\n if (\n typeof credentialReferenceId === 'string' &&\n credentialReferenceNames?.has(credentialReferenceId)\n ) {\n configObject.addPropertyAssignment({\n name: 'credentialReference',\n initializer: credentialReferenceNames.get(credentialReferenceId) as string,\n });\n return;\n }\n\n if (typeof credentialReferenceId === 'string') {\n addStringProperty(configObject, 'credentialReferenceId', credentialReferenceId);\n }\n}\n\nconst HEADER_TEMPLATE_REGEX = /\\{\\{headers\\.([^}]+)\\}\\}/g;\nconst HEADER_TO_TEMPLATE_CALL_REGEX =\n /\\$\\{\\s*(headersSchema|headers)\\.toTemplate\\((['\"])([^'\"`]+)\\2\\)\\s*\\}/g;\n\nfunction rewriteHeaderTemplates<T>(value: T, headersReference?: string): T {\n if (!headersReference) {\n return value;\n }\n\n if (typeof value === 'string') {\n const withHeaderTokensReplaced = value.replace(\n HEADER_TEMPLATE_REGEX,\n (_, variableName: string) => {\n return `\\${${headersReference}.toTemplate(${JSON.stringify(variableName)})}`;\n }\n );\n return withHeaderTokensReplaced.replace(\n HEADER_TO_TEMPLATE_CALL_REGEX,\n (_, __: string, ___: string, variableName: string) => {\n return `\\${${headersReference}.toTemplate(${JSON.stringify(variableName)})}`;\n }\n ) as T;\n }\n\n if (Array.isArray(value)) {\n return value.map((entry) => rewriteHeaderTemplates(entry, headersReference)) as T;\n }\n\n if (isPlainObject(value)) {\n return Object.fromEntries(\n Object.entries(value).map(([key, entryValue]) => [\n key,\n rewriteHeaderTemplates(entryValue, headersReference),\n ])\n ) as T;\n }\n\n return value;\n}\n\nfunction generateStandaloneHeadersDefinition(\n sourceFile: SourceFile,\n data: ContextConfigOutput & { schema: Record<string, unknown> }\n): SourceFile {\n const importName = 'headers';\n sourceFile.addImportDeclaration({\n namedImports: [importName],\n moduleSpecifier: '@inkeep/agents-core',\n });\n sourceFile.addImportDeclaration({\n namedImports: ['z'],\n moduleSpecifier: 'zod',\n });\n\n const headersVarName = toContextConfigVariableName(data.contextConfigId);\n const { configObject } = addFactoryConfigVariable({\n sourceFile,\n importName,\n variableName: headersVarName,\n });\n\n configObject.addPropertyAssignment({\n name: 'schema',\n initializer: convertJsonSchemaToZod(data.schema),\n });\n return sourceFile;\n}\n\nfunction isHeadersDefinitionData(\n value: ContextConfigOutput\n): value is ContextConfigOutput & { schema: Record<string, unknown> } {\n return isPlainObject(value.schema);\n}\n\nfunction generateStandaloneFetchDefinition(\n sourceFile: SourceFile,\n data: ContextConfigOutput\n): SourceFile {\n const importName = 'fetchDefinition';\n sourceFile.addImportDeclaration({\n namedImports: [importName],\n moduleSpecifier: '@inkeep/agents-core',\n });\n\n if (isPlainObject(data.responseSchema)) {\n sourceFile.addImportDeclaration({\n namedImports: ['z'],\n moduleSpecifier: 'zod',\n });\n }\n\n const credentialReferenceNames = new Map<string, string>();\n if (typeof (data as Record<string, unknown>).credentialReferenceId === 'string') {\n const credentialReferenceId = (data as Record<string, unknown>).credentialReferenceId as string;\n const credentialReferenceName =\n data.referenceOverrides?.credentialReferences?.[credentialReferenceId] ??\n toReferenceIdentifier(credentialReferenceId);\n const credentialReferencePath =\n data.referencePathOverrides?.credentialReferences?.[credentialReferenceId] ??\n credentialReferenceId;\n credentialReferenceNames.set(credentialReferenceId, credentialReferenceName);\n sourceFile.addImportDeclaration({\n namedImports: [credentialReferenceName],\n moduleSpecifier: `../credentials/${credentialReferencePath}`,\n });\n }\n\n const fetchVarName = toContextConfigVariableName(data.contextConfigId);\n const { configObject } = addFactoryConfigVariable({\n sourceFile,\n importName,\n variableName: fetchVarName,\n });\n\n writeFetchDefinition(configObject, data, credentialReferenceNames);\n return sourceFile;\n}\n\nfunction convertJsonSchemaToZod(schema: Record<string, unknown>): string {\n return convertJsonSchemaToZodSafe(schema, {\n conversionOptions: { module: 'none' },\n });\n}\n\nfunction extractContextVariableReference(key: string, value: unknown): string | undefined {\n if (typeof value === 'string') {\n return toReferenceIdentifier(value);\n }\n\n if (!isPlainObject(value)) {\n return;\n }\n\n if (typeof value.id === 'string') {\n return toReferenceIdentifier(value.id);\n }\n if (typeof value.name === 'string') {\n return toReferenceIdentifier(value.name);\n }\n if (typeof value.ref === 'string') {\n return toReferenceIdentifier(value.ref);\n }\n if (typeof value.variable === 'string') {\n return toReferenceIdentifier(value.variable);\n }\n\n if (value.fetchConfig || value.responseSchema) {\n return toReferenceIdentifier(key);\n }\n\n return toReferenceIdentifier(key);\n}\n\nconst toContextConfigVariableName = toCamelCase;\n\nconst toReferenceIdentifier = toCamelCase;\n\nfunction collectCredentialReferenceNames(\n fetchDefinitions: Array<{ data: unknown }>,\n overrideNamesById?: Record<string, string>\n): Map<string, string> {\n const credentialReferenceNames = new Map<string, string>();\n\n for (const fetchDefinition of fetchDefinitions) {\n const fetchDefinitionData = isPlainObject(fetchDefinition.data)\n ? fetchDefinition.data\n : undefined;\n const credentialReferenceId =\n fetchDefinitionData && typeof fetchDefinitionData.credentialReferenceId === 'string'\n ? fetchDefinitionData.credentialReferenceId\n : undefined;\n if (!credentialReferenceId || credentialReferenceNames.has(credentialReferenceId)) {\n continue;\n }\n\n credentialReferenceNames.set(\n credentialReferenceId,\n overrideNamesById?.[credentialReferenceId] ?? toReferenceIdentifier(credentialReferenceId)\n );\n }\n\n return credentialReferenceNames;\n}\n\nfunction collectTemplateHeaderVariables(contextVariables?: Record<string, unknown>): Set<string> {\n const variables = new Set<string>();\n collectTemplateHeaderVariablesFromValue(contextVariables, variables);\n return variables;\n}\n\nfunction collectTemplateHeaderVariablesFromValue(value: unknown, variables: Set<string>): void {\n if (typeof value === 'string') {\n for (const match of value.matchAll(HEADER_TEMPLATE_REGEX)) {\n if (match[1]) {\n variables.add(match[1]);\n }\n }\n for (const match of value.matchAll(HEADER_TO_TEMPLATE_CALL_REGEX)) {\n if (match[3]) {\n variables.add(match[3]);\n }\n }\n return;\n }\n\n if (Array.isArray(value)) {\n for (const entry of value) {\n collectTemplateHeaderVariablesFromValue(entry, variables);\n }\n return;\n }\n\n if (isPlainObject(value)) {\n for (const entryValue of Object.values(value)) {\n collectTemplateHeaderVariablesFromValue(entryValue, variables);\n }\n }\n}\n\nfunction inferHeadersSchemaFromTemplateHeaderVariables(\n variables: Set<string>\n): Record<string, unknown> | undefined {\n if (!variables.size) {\n return;\n }\n\n const properties: Record<string, unknown> = {};\n for (const variable of [...variables].sort()) {\n properties[variable] = { type: 'string' };\n }\n\n return {\n type: 'object',\n properties,\n required: [...variables].sort(),\n additionalProperties: false,\n };\n}\n"],"mappings":";;;;;;AAcA,MAAM,WAAW,4BAA4B,MAAM,OAAO,UAAU,MAAM,cAAc,QAAQ;AAEhG,MAAM,0BAA0B,EAAE,OAAO,EAAE,QAAQ,EAAE,EAAE,QAAQ,CAAC,UAAU,CAAC;AAE3E,MAAM,2BAA2B,EAAE,OAAO,EACxC,sBAAsB,wBAAwB,UAAU,EACzD,CAAC;AAEF,MAAM,+BAA+B,EAAE,OAAO,EAC5C,sBAAsB,wBAAwB,UAAU,EACzD,CAAC;AAEF,MAAM,sBAAsB,EAAE,aAAa;CACzC,iBAAiB,EAAE,QAAQ,CAAC,UAAU;CACtC,GAAG,SAAS;CACZ,oBAAoB,yBAAyB,UAAU;CACvD,wBAAwB,6BAA6B,UAAU;CAG/D,SAAS,EAAE,QAAQ,CAAC,UAAU;CAC9B,kBAAkB,EAAE,QAAQ,CAAC,UAAU;CACvC,QAAQ,EAAE,SAAS;CACnB,MAAM,EAAE,QAAQ,CAAC,SAAS;CAC1B,SAAS,EAAE,SAAS;CACpB,aAAa,EAAE,OAAO,EAAE,QAAQ,EAAE,EAAE,SAAS,CAAC,CAAC,UAAU;CACzD,cAAc,EAAE,SAAS;CACzB,gBAAgB,EAAE,SAAS;CAC5B,CAAC;AAKF,SAAgB,gCAAgC,MAAsC;CACpF,MAAM,SAAS,oBAAoB,UAAU,KAAK;AAClD,KAAI,CAAC,OAAO,QACV,OAAM,IAAI,MAAM,0CAA0C,EAAE,cAAc,OAAO,MAAM,GAAG;CAG5F,MAAM,UAAU,uBAAuB;CAEvC,MAAM,SAAS,OAAO;CACtB,MAAM,aAAa,QAAQ,iBAAiB,gCAAgC,IAAI,EAC9E,WAAW,MACZ,CAAC;AAEF,KAAI,wBAAwB,OAAO,CACjC,QAAO,oCAAoC,YAAY,OAAO;AAGhE,KAAI,sBAAsB,OAAO,CAC/B,QAAO,kCAAkC,YAAY,OAAO;CAG9D,MAAM,4BACH,OAAO,OAAO,qBAAqB,YAAY,OAAO,iBAAiB,SAAS,IAC7E,OAAO,mBACP,WAAc,wBAAwB,OAAO,QAAQ;CAC3D,MAAM,0BAA0B,+BAA+B,OAAO,iBAAiB;CACvF,MAAM,wBACJ,CAAC,cAAc,OAAO,cAAc,IAAI,CAAC,2BACrC,8CAA8C,wBAAwB,GACtE;CACN,MAAM,gBAAgB,cAAc,OAAO,cAAc,GACrD,OAAO,gBACP;CACJ,MAAM,mBAAmB,wBAAwB,QAAQ,QAAQ,cAAc,CAAC;CAChF,MAAM,4BAA4B,QAAQ,iBAAiB,IAAI,cAAc,cAAc;CAC3F,MAAM,mBAAmB,8BAA8B,OAAO,iBAAiB;CAC/E,MAAM,2BAA2B,gCAC/B,kBACA,OAAO,oBAAoB,qBAC5B;CACD,MAAM,cAAc,CAAC,gBAAgB;AACrC,KAAI,0BACF,aAAY,QAAQ,UAAU;AAEhC,KAAI,iBAAiB,SAAS,EAC5B,aAAY,OAAO,YAAY,SAAS,GAAG,GAAG,kBAAkB;AAGlE,YAAW,qBAAqB;EAC9B,cAAc;EACd,iBAAiB;EAClB,CAAC;CAEF,MAAM,qBAAqB,iBAAiB,MAAM,eAEhD,cAAc,WAAW,KAAK,eAAe,CAC9C;AACD,KAAI,6BAA6B,mBAC/B,YAAW,qBAAqB;EAC9B,cAAc,CAAC,IAAI;EACnB,iBAAiB;EAClB,CAAC;AAGJ,MAAK,MAAM,CAAC,cAAc,4BAA4B,0BAA0B;EAC9E,MAAM,0BACJ,OAAO,wBAAwB,uBAAuB,iBAAiB;AACzE,aAAW,qBAAqB;GAC9B,cAAc,CAAC,wBAAwB;GACvC,iBAAiB,kBAAkB;GACpC,CAAC;;AAEJ,KAAI,6BAA6B,oBAAoB,eAAe;EAClE,MAAM,EAAE,cAAc,kBAAkB,yBAAyB;GAC/D;GACA,YAAY;GACZ,YAAY;GACZ,cAAc;GACf,CAAC;AAEF,gBAAc,sBAAsB;GAClC,MAAM;GACN,aAAa,uBAAuB,cAAc;GACnD,CAAC;;AAGJ,MAAK,MAAM,mBAAmB,kBAAkB;EAC9C,MAAM,EAAE,cAAc,sBAAsB,yBAAyB;GACnE;GACA,YAAY;GACZ,cAAc,gBAAgB;GAC/B,CAAC;AACF,uBACE,mBACA,gBAAgB,MAChB,0BACA,iBACD;;CAGH,MAAM,EAAE,iBAAiB,yBAAyB;EAChD;EACA,YAAY;EACZ,cAJ2B,4BAA4B,OAAO,gBAAgB;EAK9E,YAAY;EACb,CAAC;AAEF,oBAAmB,cAAc,QAAQ,iBAAiB;AAE1D,QAAO;;AAGT,SAAS,mBACP,cACA,MACA,kBACA;AACA,KAAI,KAAK,OAAO,OACd,mBAAkB,cAAc,MAAM,KAAK,GAAG;AAGhD,KAAI,iBACF,cAAa,sBAAsB;EACjC,MAAM;EACN,aAAa;EACd,CAAC;AAGJ,KAAI,KAAK,oBAAoB,OAAO,KAAK,KAAK,iBAAiB,CAAC,SAAS,GAAG;EAK1E,MAAM,yBAJ2B,aAAa,sBAAsB;GAClE,MAAM;GACN,aAAa;GACd,CAAC,CACsD,4BACtD,WAAW,wBACZ;AAED,OAAK,MAAM,CAAC,KAAK,UAAU,OAAO,QAAQ,KAAK,iBAAiB,EAAE;GAChE,MAAM,YAAY,gCAAgC,KAAK,MAAM;AAC7D,OAAI,CAAC,UACH;AAGF,0BAAuB,sBAAsB;IAC3C,MAAM,mBAAmB,IAAI;IAC7B,aAAa;IACd,CAAC;;;;AAKR,SAAS,wBAAwB,SAAmD;AAClF,KAAI,CAAC,QACH;AAEF,KAAI,OAAO,YAAY,SACrB,QAAO;AAET,KAAI,OAAO,QAAQ,OAAO,SACxB,QAAO,QAAQ;AAEjB,KAAI,OAAO,QAAQ,SAAS,SAC1B,QAAO,QAAQ;;AAKnB,SAAS,wBACP,MACA,kBACoB;AACpB,KAAI,OAAO,KAAK,qBAAqB,YAAY,KAAK,iBACpD,QAAO,KAAK;CAGd,MAAM,aAAa,wBAAwB,KAAK,QAAQ;AACxD,KAAI,WACF,QAAO,sBAAsB,WAAW;AAG1C,KAAI,iBACF,QAAO,GAAG,4BAA4B,KAAK,gBAAgB,CAAC;;AAMhE,SAAS,sBAAsB,OAAyB;AACtD,KAAI,CAAC,cAAc,MAAM,CACvB,QAAO;AAGT,QAAO,MAAM,gBAAgB,UAAa,MAAM,mBAAmB;;AAGrE,SAAS,8BAA8B,kBAA4C;AACjF,KAAI,CAAC,iBACH,QAAO,EAAE;AAGX,QAAO,OAAO,QAAQ,iBAAiB,CACpC,QAAQ,GAAG,WAAW,sBAAsB,MAAM,CAAC,CACnD,KAAK,CAAC,KAAK,WAAW;AAGrB,SAAO;GACL;GACA,cAHA,gCAAgC,KAAK,MAAM,IAAI,sBAAsB,IAAI;GAIzE,MAAM;GACP;GACD;;AAGN,SAAS,qBACP,cACA,qBACA,0BACA,kBACA;CACA,MAAM,EAAE,iBAAiB,gBAAgB,uBAAuB,GAAG,SAAS,cAC1E,oBACD,GACG,sBACA,EAAE;CACN,MAAM,iBAAiB,uBAAuB,MAAM,iBAAiB;AACrE,MAAK,MAAM,CAAC,GAAG,MAAM,OAAO,QAAQ;EAClC,IAAI;EACJ,GAAG;EACJ,CAAC,CACA,KAAI,MAAM,KACR,kBAAiB,cAAc,GAAG,EAAE;AAGxC,KAAI,eACF,cAAa,sBAAsB;EACjC,MAAM;EAEN,aAAa,uBAAuB,eAAe;EACpD,CAAC;AAGJ,KACE,OAAO,0BAA0B,YACjC,0BAA0B,IAAI,sBAAsB,EACpD;AACA,eAAa,sBAAsB;GACjC,MAAM;GACN,aAAa,yBAAyB,IAAI,sBAAsB;GACjE,CAAC;AACF;;AAGF,KAAI,OAAO,0BAA0B,SACnC,mBAAkB,cAAc,yBAAyB,sBAAsB;;AAInF,MAAM,wBAAwB;AAC9B,MAAM,gCACJ;AAEF,SAAS,uBAA0B,OAAU,kBAA8B;AACzE,KAAI,CAAC,iBACH,QAAO;AAGT,KAAI,OAAO,UAAU,SAOnB,QANiC,MAAM,QACrC,wBACC,GAAG,iBAAyB;AAC3B,SAAO,MAAM,iBAAiB,cAAc,KAAK,UAAU,aAAa,CAAC;GAE5E,CAC+B,QAC9B,gCACC,GAAG,IAAY,KAAa,iBAAyB;AACpD,SAAO,MAAM,iBAAiB,cAAc,KAAK,UAAU,aAAa,CAAC;GAE5E;AAGH,KAAI,MAAM,QAAQ,MAAM,CACtB,QAAO,MAAM,KAAK,UAAU,uBAAuB,OAAO,iBAAiB,CAAC;AAG9E,KAAI,cAAc,MAAM,CACtB,QAAO,OAAO,YACZ,OAAO,QAAQ,MAAM,CAAC,KAAK,CAAC,KAAK,gBAAgB,CAC/C,KACA,uBAAuB,YAAY,iBAAiB,CACrD,CAAC,CACH;AAGH,QAAO;;AAGT,SAAS,oCACP,YACA,MACY;CACZ,MAAM,aAAa;AACnB,YAAW,qBAAqB;EAC9B,cAAc,CAAC,WAAW;EAC1B,iBAAiB;EAClB,CAAC;AACF,YAAW,qBAAqB;EAC9B,cAAc,CAAC,IAAI;EACnB,iBAAiB;EAClB,CAAC;CAGF,MAAM,EAAE,iBAAiB,yBAAyB;EAChD;EACA;EACA,cAJqB,4BAA4B,KAAK,gBAAgB;EAKvE,CAAC;AAEF,cAAa,sBAAsB;EACjC,MAAM;EACN,aAAa,uBAAuB,KAAK,OAAO;EACjD,CAAC;AACF,QAAO;;AAGT,SAAS,wBACP,OACoE;AACpE,QAAO,cAAc,MAAM,OAAO;;AAGpC,SAAS,kCACP,YACA,MACY;CACZ,MAAM,aAAa;AACnB,YAAW,qBAAqB;EAC9B,cAAc,CAAC,WAAW;EAC1B,iBAAiB;EAClB,CAAC;AAEF,KAAI,cAAc,KAAK,eAAe,CACpC,YAAW,qBAAqB;EAC9B,cAAc,CAAC,IAAI;EACnB,iBAAiB;EAClB,CAAC;CAGJ,MAAM,2CAA2B,IAAI,KAAqB;AAC1D,KAAI,OAAQ,KAAiC,0BAA0B,UAAU;EAC/E,MAAM,wBAAyB,KAAiC;EAChE,MAAM,0BACJ,KAAK,oBAAoB,uBAAuB,0BAChD,sBAAsB,sBAAsB;EAC9C,MAAM,0BACJ,KAAK,wBAAwB,uBAAuB,0BACpD;AACF,2BAAyB,IAAI,uBAAuB,wBAAwB;AAC5E,aAAW,qBAAqB;GAC9B,cAAc,CAAC,wBAAwB;GACvC,iBAAiB,kBAAkB;GACpC,CAAC;;CAIJ,MAAM,EAAE,iBAAiB,yBAAyB;EAChD;EACA;EACA,cAJmB,4BAA4B,KAAK,gBAAgB;EAKrE,CAAC;AAEF,sBAAqB,cAAc,MAAM,yBAAyB;AAClE,QAAO;;AAGT,SAAS,uBAAuB,QAAyC;AACvE,QAAO,2BAA2B,QAAQ,EACxC,mBAAmB,EAAE,QAAQ,QAAQ,EACtC,CAAC;;AAGJ,SAAS,gCAAgC,KAAa,OAAoC;AACxF,KAAI,OAAO,UAAU,SACnB,QAAO,sBAAsB,MAAM;AAGrC,KAAI,CAAC,cAAc,MAAM,CACvB;AAGF,KAAI,OAAO,MAAM,OAAO,SACtB,QAAO,sBAAsB,MAAM,GAAG;AAExC,KAAI,OAAO,MAAM,SAAS,SACxB,QAAO,sBAAsB,MAAM,KAAK;AAE1C,KAAI,OAAO,MAAM,QAAQ,SACvB,QAAO,sBAAsB,MAAM,IAAI;AAEzC,KAAI,OAAO,MAAM,aAAa,SAC5B,QAAO,sBAAsB,MAAM,SAAS;AAG9C,KAAI,MAAM,eAAe,MAAM,eAC7B,QAAO,sBAAsB,IAAI;AAGnC,QAAO,sBAAsB,IAAI;;AAGnC,MAAM,8BAA8B;AAEpC,MAAM,wBAAwB;AAE9B,SAAS,gCACP,kBACA,mBACqB;CACrB,MAAM,2CAA2B,IAAI,KAAqB;AAE1D,MAAK,MAAM,mBAAmB,kBAAkB;EAC9C,MAAM,sBAAsB,cAAc,gBAAgB,KAAK,GAC3D,gBAAgB,OAChB;EACJ,MAAM,wBACJ,uBAAuB,OAAO,oBAAoB,0BAA0B,WACxE,oBAAoB,wBACpB;AACN,MAAI,CAAC,yBAAyB,yBAAyB,IAAI,sBAAsB,CAC/E;AAGF,2BAAyB,IACvB,uBACA,oBAAoB,0BAA0B,sBAAsB,sBAAsB,CAC3F;;AAGH,QAAO;;AAGT,SAAS,+BAA+B,kBAAyD;CAC/F,MAAM,4BAAY,IAAI,KAAa;AACnC,yCAAwC,kBAAkB,UAAU;AACpE,QAAO;;AAGT,SAAS,wCAAwC,OAAgB,WAA8B;AAC7F,KAAI,OAAO,UAAU,UAAU;AAC7B,OAAK,MAAM,SAAS,MAAM,SAAS,sBAAsB,CACvD,KAAI,MAAM,GACR,WAAU,IAAI,MAAM,GAAG;AAG3B,OAAK,MAAM,SAAS,MAAM,SAAS,8BAA8B,CAC/D,KAAI,MAAM,GACR,WAAU,IAAI,MAAM,GAAG;AAG3B;;AAGF,KAAI,MAAM,QAAQ,MAAM,EAAE;AACxB,OAAK,MAAM,SAAS,MAClB,yCAAwC,OAAO,UAAU;AAE3D;;AAGF,KAAI,cAAc,MAAM,CACtB,MAAK,MAAM,cAAc,OAAO,OAAO,MAAM,CAC3C,yCAAwC,YAAY,UAAU;;AAKpE,SAAS,8CACP,WACqC;AACrC,KAAI,CAAC,UAAU,KACb;CAGF,MAAM,aAAsC,EAAE;AAC9C,MAAK,MAAM,YAAY,CAAC,GAAG,UAAU,CAAC,MAAM,CAC1C,YAAW,YAAY,EAAE,MAAM,UAAU;AAG3C,QAAO;EACL,MAAM;EACN;EACA,UAAU,CAAC,GAAG,UAAU,CAAC,MAAM;EAC/B,sBAAsB;EACvB"}
@@ -1,22 +1,25 @@
1
- import { addValueToObject, createFactoryDefinition, toCamelCase } from "../utils.js";
1
+ import { addValueToObject, createFactoryDefinition, toCredentialReferenceName } from "../utils.js";
2
+ import { FullProjectDefinitionSchema } from "@inkeep/agents-core";
2
3
  import { z } from "zod";
3
4
 
4
5
  //#region src/commands/pull-v4/generators/credential-generator.ts
5
- const CredentialSchema = z.object({
6
+ const MySchema = FullProjectDefinitionSchema.shape.credentialReferences.unwrap().valueType.omit({
7
+ id: true,
8
+ createdBy: true,
9
+ toolId: true,
10
+ userId: true
11
+ });
12
+ const CredentialSchema = z.strictObject({
6
13
  credentialId: z.string().nonempty(),
7
- name: z.string().nonempty(),
8
- type: z.string().nonempty(),
9
- credentialStoreId: z.string().nonempty(),
10
- description: z.string().optional(),
11
- retrievalParams: z.unknown().optional()
14
+ ...MySchema.shape
12
15
  });
13
- function generateCredentialDefinition(data) {
16
+ function generateCredentialDefinition({ tenantId, id, projectId, createdBy, createdAt, updatedAt, toolId, userId, ...data }) {
14
17
  const result = CredentialSchema.safeParse(data);
15
18
  if (!result.success) throw new Error(`Validation failed for credential:\n${z.prettifyError(result.error)}`);
16
19
  const parsed = result.data;
17
20
  const { sourceFile, configObject } = createFactoryDefinition({
18
21
  importName: "credential",
19
- variableName: toCamelCase(parsed.credentialId)
22
+ variableName: toCredentialReferenceName(parsed.name)
20
23
  });
21
24
  const { credentialId, ...rest } = parsed;
22
25
  for (const [k, v] of Object.entries({
@@ -27,4 +30,5 @@ function generateCredentialDefinition(data) {
27
30
  }
28
31
 
29
32
  //#endregion
30
- export { generateCredentialDefinition };
33
+ export { generateCredentialDefinition };
34
+ //# sourceMappingURL=credential-generator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"credential-generator.js","names":[],"sources":["../../../../src/commands/pull-v4/generators/credential-generator.ts"],"sourcesContent":["import { FullProjectDefinitionSchema } from '@inkeep/agents-core';\nimport type { SourceFile } from 'ts-morph';\nimport { z } from 'zod';\nimport { addValueToObject, createFactoryDefinition, toCredentialReferenceName } from '../utils';\n\nconst MySchema = FullProjectDefinitionSchema.shape.credentialReferences.unwrap().valueType.omit({\n id: true,\n createdBy: true,\n toolId: true,\n userId: true,\n});\n\nconst CredentialSchema = z.strictObject({\n credentialId: z.string().nonempty(),\n ...MySchema.shape,\n});\n\ntype CredentialInput = z.input<typeof CredentialSchema>;\n\nexport function generateCredentialDefinition({\n tenantId,\n id,\n projectId,\n createdBy,\n createdAt,\n updatedAt,\n toolId,\n userId,\n ...data\n}: CredentialInput & Record<string, unknown>): SourceFile {\n const result = CredentialSchema.safeParse(data);\n if (!result.success) {\n throw new Error(`Validation failed for credential:\\n${z.prettifyError(result.error)}`);\n }\n\n const parsed = result.data;\n const credentialVarName = toCredentialReferenceName(parsed.name);\n const { sourceFile, configObject } = createFactoryDefinition({\n importName: 'credential',\n variableName: credentialVarName,\n });\n\n const { credentialId, ...rest } = parsed;\n\n for (const [k, v] of Object.entries({ id: credentialId, ...rest })) {\n addValueToObject(configObject, k, v);\n }\n return sourceFile;\n}\n"],"mappings":";;;;;AAKA,MAAM,WAAW,4BAA4B,MAAM,qBAAqB,QAAQ,CAAC,UAAU,KAAK;CAC9F,IAAI;CACJ,WAAW;CACX,QAAQ;CACR,QAAQ;CACT,CAAC;AAEF,MAAM,mBAAmB,EAAE,aAAa;CACtC,cAAc,EAAE,QAAQ,CAAC,UAAU;CACnC,GAAG,SAAS;CACb,CAAC;AAIF,SAAgB,6BAA6B,EAC3C,UACA,IACA,WACA,WACA,WACA,WACA,QACA,QACA,GAAG,QACqD;CACxD,MAAM,SAAS,iBAAiB,UAAU,KAAK;AAC/C,KAAI,CAAC,OAAO,QACV,OAAM,IAAI,MAAM,sCAAsC,EAAE,cAAc,OAAO,MAAM,GAAG;CAGxF,MAAM,SAAS,OAAO;CAEtB,MAAM,EAAE,YAAY,iBAAiB,wBAAwB;EAC3D,YAAY;EACZ,cAHwB,0BAA0B,OAAO,KAAK;EAI/D,CAAC;CAEF,MAAM,EAAE,cAAc,GAAG,SAAS;AAElC,MAAK,MAAM,CAAC,GAAG,MAAM,OAAO,QAAQ;EAAE,IAAI;EAAc,GAAG;EAAM,CAAC,CAChE,kBAAiB,cAAc,GAAG,EAAE;AAEtC,QAAO"}
@@ -1,23 +1,20 @@
1
1
  import { addStringProperty, addValueToObject, convertJsonSchemaToZodSafe, createFactoryDefinition, toCamelCase } from "../utils.js";
2
+ import { FullProjectDefinitionSchema } from "@inkeep/agents-core";
2
3
  import { z } from "zod";
3
4
 
4
5
  //#region src/commands/pull-v4/generators/data-component-generator.ts
5
- const DataComponentSchema = z.object({
6
+ const MySchema = FullProjectDefinitionSchema.shape.dataComponents.unwrap().valueType.omit({ id: true });
7
+ const DataComponentSchema = z.strictObject({
6
8
  dataComponentId: z.string().nonempty(),
7
- name: z.string().nonempty(),
8
- description: z.string().nullable().optional(),
9
- props: z.unknown().optional(),
10
- schema: z.unknown().optional(),
11
- render: z.looseObject({
12
- component: z.string().optional(),
13
- mockData: z.looseObject({}).optional()
14
- }).nullable().optional()
9
+ ...MySchema.shape,
10
+ description: z.preprocess((v) => v || void 0, MySchema.shape.description),
11
+ props: z.unknown()
15
12
  });
16
- function generateDataComponentDefinition(data) {
13
+ function generateDataComponentDefinition({ tenantId, id, projectId, createdAt, updatedAt, ...data }) {
17
14
  const result = DataComponentSchema.safeParse(data);
18
15
  if (!result.success) throw new Error(`Validation failed for data component:\n${z.prettifyError(result.error)}`);
19
16
  const parsed = result.data;
20
- const props = parsed.props !== void 0 ? parsed.props : parsed.schema;
17
+ const props = parsed.props;
21
18
  const { sourceFile, configObject } = createFactoryDefinition({
22
19
  importName: "dataComponent",
23
20
  variableName: toCamelCase(parsed.dataComponentId)
@@ -47,4 +44,5 @@ function addRenderProperty(configObject, render) {
47
44
  }
48
45
 
49
46
  //#endregion
50
- export { generateDataComponentDefinition };
47
+ export { generateDataComponentDefinition };
48
+ //# sourceMappingURL=data-component-generator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"data-component-generator.js","names":[],"sources":["../../../../src/commands/pull-v4/generators/data-component-generator.ts"],"sourcesContent":["import { FullProjectDefinitionSchema } from '@inkeep/agents-core';\nimport type { ObjectLiteralExpression, SourceFile } from 'ts-morph';\nimport { z } from 'zod';\nimport {\n addStringProperty,\n addValueToObject,\n convertJsonSchemaToZodSafe,\n createFactoryDefinition,\n toCamelCase,\n} from '../utils';\n\nconst MySchema = FullProjectDefinitionSchema.shape.dataComponents.unwrap().valueType.omit({\n id: true,\n});\n\nconst DataComponentSchema = z.strictObject({\n dataComponentId: z.string().nonempty(),\n ...MySchema.shape,\n description: z.preprocess((v) => v || undefined, MySchema.shape.description),\n // Each property must have a \"description\" for LLM compatibility\n props: z.unknown(),\n});\n\ntype DataComponentInput = z.input<typeof DataComponentSchema>;\ntype DataComponentOutput = z.output<typeof DataComponentSchema>;\n\nexport function generateDataComponentDefinition({\n tenantId,\n id,\n projectId,\n createdAt,\n updatedAt,\n ...data\n}: DataComponentInput & Record<string, unknown>): SourceFile {\n const result = DataComponentSchema.safeParse(data);\n if (!result.success) {\n throw new Error(`Validation failed for data component:\\n${z.prettifyError(result.error)}`);\n }\n\n const parsed = result.data;\n const props = parsed.props;\n const { sourceFile, configObject } = createFactoryDefinition({\n importName: 'dataComponent',\n variableName: toCamelCase(parsed.dataComponentId),\n });\n\n if (props !== undefined) {\n sourceFile.addImportDeclaration({\n namedImports: ['z'],\n moduleSpecifier: 'zod',\n });\n }\n\n writeDataComponentConfig(configObject, parsed, props);\n\n return sourceFile;\n}\n\nfunction writeDataComponentConfig(\n configObject: ObjectLiteralExpression,\n data: DataComponentOutput,\n props: unknown\n): void {\n addStringProperty(configObject, 'id', data.dataComponentId);\n addStringProperty(configObject, 'name', data.name);\n\n if (typeof data.description === 'string') {\n addStringProperty(configObject, 'description', data.description);\n }\n\n if (props !== undefined) {\n configObject.addPropertyAssignment({\n name: 'props',\n initializer: convertJsonSchemaToZodSafe(props),\n });\n }\n\n if (data.render) {\n addRenderProperty(configObject, data.render);\n }\n}\n\nfunction addRenderProperty(\n configObject: ObjectLiteralExpression,\n render: NonNullable<DataComponentOutput['render']>\n): void {\n if (render.component) {\n addValueToObject(configObject, 'render', {\n component: render.component,\n mockData: render.mockData,\n });\n }\n}\n"],"mappings":";;;;;AAWA,MAAM,WAAW,4BAA4B,MAAM,eAAe,QAAQ,CAAC,UAAU,KAAK,EACxF,IAAI,MACL,CAAC;AAEF,MAAM,sBAAsB,EAAE,aAAa;CACzC,iBAAiB,EAAE,QAAQ,CAAC,UAAU;CACtC,GAAG,SAAS;CACZ,aAAa,EAAE,YAAY,MAAM,KAAK,QAAW,SAAS,MAAM,YAAY;CAE5E,OAAO,EAAE,SAAS;CACnB,CAAC;AAKF,SAAgB,gCAAgC,EAC9C,UACA,IACA,WACA,WACA,WACA,GAAG,QACwD;CAC3D,MAAM,SAAS,oBAAoB,UAAU,KAAK;AAClD,KAAI,CAAC,OAAO,QACV,OAAM,IAAI,MAAM,0CAA0C,EAAE,cAAc,OAAO,MAAM,GAAG;CAG5F,MAAM,SAAS,OAAO;CACtB,MAAM,QAAQ,OAAO;CACrB,MAAM,EAAE,YAAY,iBAAiB,wBAAwB;EAC3D,YAAY;EACZ,cAAc,YAAY,OAAO,gBAAgB;EAClD,CAAC;AAEF,KAAI,UAAU,OACZ,YAAW,qBAAqB;EAC9B,cAAc,CAAC,IAAI;EACnB,iBAAiB;EAClB,CAAC;AAGJ,0BAAyB,cAAc,QAAQ,MAAM;AAErD,QAAO;;AAGT,SAAS,yBACP,cACA,MACA,OACM;AACN,mBAAkB,cAAc,MAAM,KAAK,gBAAgB;AAC3D,mBAAkB,cAAc,QAAQ,KAAK,KAAK;AAElD,KAAI,OAAO,KAAK,gBAAgB,SAC9B,mBAAkB,cAAc,eAAe,KAAK,YAAY;AAGlE,KAAI,UAAU,OACZ,cAAa,sBAAsB;EACjC,MAAM;EACN,aAAa,2BAA2B,MAAM;EAC/C,CAAC;AAGJ,KAAI,KAAK,OACP,mBAAkB,cAAc,KAAK,OAAO;;AAIhD,SAAS,kBACP,cACA,QACM;AACN,KAAI,OAAO,UACT,kBAAiB,cAAc,UAAU;EACvC,WAAW,OAAO;EAClB,UAAU,OAAO;EAClB,CAAC"}
@@ -1,22 +1,15 @@
1
- import { addStringProperty, createFactoryDefinition, formatInlineLiteral, formatPropertyName, isPlainObject } from "../utils.js";
1
+ import { addValueToObject, createFactoryDefinition } from "../utils.js";
2
+ import { FullProjectDefinitionSchema } from "@inkeep/agents-core";
2
3
  import { z } from "zod";
3
- import { SyntaxKind } from "ts-morph";
4
4
 
5
5
  //#region src/commands/pull-v4/generators/environment-generator.ts
6
- const EnvironmentSettingsSchema = z.looseObject({ credentials: z.record(z.string(), z.unknown()).nullable().optional() });
6
+ const EnvironmentCredentialSchema = FullProjectDefinitionSchema.shape.credentialReferences.unwrap().valueType.omit({
7
+ createdBy: true,
8
+ toolId: true,
9
+ userId: true
10
+ });
11
+ const EnvironmentSettingsSchema = z.looseObject({ credentials: z.record(z.string(), EnvironmentCredentialSchema).nullable().optional() });
7
12
  const EnvironmentIndexSchema = z.array(z.string());
8
- function generateEnvironmentSettingsImports(environmentData) {
9
- const imports = [`import { registerEnvironmentSettings } from '@inkeep/agents-sdk';`];
10
- if (needsCredentialStoreType(environmentData)) imports.push(`import { CredentialStoreType } from '@inkeep/agents-core';`);
11
- return imports;
12
- }
13
- function generateEnvironmentIndexImports(environments) {
14
- const result = EnvironmentIndexSchema.safeParse(environments);
15
- if (!result.success) throw new Error(`Validation failed for environments index:\n${z.prettifyError(result.error)}`);
16
- const imports = [`import { createEnvironmentSettings } from '@inkeep/agents-sdk';`];
17
- for (const environmentName of result.data) imports.push(`import { ${environmentName} } from './${environmentName}.env';`);
18
- return imports;
19
- }
20
13
  function generateEnvironmentSettingsDefinition(environmentName, environmentData) {
21
14
  const environmentNameResult = z.string().nonempty().safeParse(environmentName);
22
15
  if (!environmentNameResult.success) throw new Error(`Validation failed for environment name:\n${z.prettifyError(environmentNameResult.error)}`);
@@ -27,12 +20,7 @@ function generateEnvironmentSettingsDefinition(environmentName, environmentData)
27
20
  importName: "registerEnvironmentSettings",
28
21
  variableName: environmentNameResult.data
29
22
  });
30
- const hasCredentialStoreType = needsCredentialStoreType(parsed);
31
- if (hasCredentialStoreType) sourceFile.addImportDeclaration({
32
- namedImports: ["CredentialStoreType"],
33
- moduleSpecifier: "@inkeep/agents-core"
34
- });
35
- addCredentialsProperty(configObject, parsed.credentials, hasCredentialStoreType);
23
+ addValueToObject(configObject, "credentials", parsed.credentials ?? {});
36
24
  return sourceFile;
37
25
  }
38
26
  function generateEnvironmentIndexDefinition(environments) {
@@ -49,75 +37,7 @@ function generateEnvironmentIndexDefinition(environments) {
49
37
  for (const environmentName of result.data) configObject.addShorthandPropertyAssignment({ name: environmentName });
50
38
  return sourceFile;
51
39
  }
52
- function generateEnvironmentSettingsFile(environmentName, environmentData) {
53
- return generateEnvironmentSettingsDefinition(environmentName, environmentData);
54
- }
55
- function generateEnvironmentIndexFile(environments) {
56
- return generateEnvironmentIndexDefinition(environments);
57
- }
58
- function needsCredentialStoreType(environmentData) {
59
- if (!isPlainObject(environmentData.credentials)) return false;
60
- return Object.values(environmentData.credentials).some((credential) => isPlainObject(credential) && typeof credential.type === "string" && [
61
- "memory",
62
- "env",
63
- "keychain"
64
- ].includes(credential.type));
65
- }
66
- function addCredentialsProperty(configObject, credentials, hasCredentialStoreType) {
67
- if (!isPlainObject(credentials) || !Object.keys(credentials).length) {
68
- configObject.addPropertyAssignment({
69
- name: "credentials",
70
- initializer: "{}"
71
- });
72
- return;
73
- }
74
- const credentialsObject = configObject.addPropertyAssignment({
75
- name: "credentials",
76
- initializer: "{}"
77
- }).getInitializerIfKindOrThrow(SyntaxKind.ObjectLiteralExpression);
78
- for (const [credentialKey, credentialValue] of Object.entries(credentials)) {
79
- if (!isPlainObject(credentialValue)) continue;
80
- writeCredential(credentialsObject.addPropertyAssignment({
81
- name: formatPropertyName(credentialKey),
82
- initializer: "{}"
83
- }).getInitializerIfKindOrThrow(SyntaxKind.ObjectLiteralExpression), credentialValue, hasCredentialStoreType);
84
- }
85
- }
86
- function writeCredential(credentialObject, credentialData, hasCredentialStoreType) {
87
- if (credentialData.id !== void 0) addStringProperty(credentialObject, "id", credentialData.id);
88
- if (credentialData.name !== void 0 && credentialData.name !== null) addStringProperty(credentialObject, "name", credentialData.name);
89
- if (credentialData.type !== void 0) if (hasCredentialStoreType && typeof credentialData.type === "string" && [
90
- "memory",
91
- "env",
92
- "keychain"
93
- ].includes(credentialData.type)) credentialObject.addPropertyAssignment({
94
- name: "type",
95
- initializer: `CredentialStoreType.${credentialData.type}`
96
- });
97
- else credentialObject.addPropertyAssignment({
98
- name: "type",
99
- initializer: formatInlineLiteral(credentialData.type)
100
- });
101
- if (credentialData.credentialStoreId !== void 0) addStringProperty(credentialObject, "credentialStoreId", credentialData.credentialStoreId);
102
- if (credentialData.description !== void 0 && credentialData.description !== null) addStringProperty(credentialObject, "description", credentialData.description);
103
- addRetrievalParams(credentialObject, credentialData.retrievalParams);
104
- }
105
- function addRetrievalParams(credentialObject, retrievalParams) {
106
- if (!isPlainObject(retrievalParams)) return;
107
- const retrievalParamsProperty = credentialObject.addPropertyAssignment({
108
- name: "retrievalParams",
109
- initializer: "{}"
110
- });
111
- const retrievalParamsObject = retrievalParamsProperty.getInitializerIfKindOrThrow(SyntaxKind.ObjectLiteralExpression);
112
- for (const [key, value] of Object.entries(retrievalParams)) {
113
- if (value === void 0 || value === null) continue;
114
- retrievalParamsObject.addPropertyAssignment({
115
- name: formatPropertyName(key),
116
- initializer: formatInlineLiteral(value)
117
- });
118
- }
119
- if (!retrievalParamsObject.getProperties().length) retrievalParamsProperty.remove();
120
- }
121
40
 
122
41
  //#endregion
123
- export { generateEnvironmentIndexDefinition, generateEnvironmentIndexFile, generateEnvironmentIndexImports, generateEnvironmentSettingsDefinition, generateEnvironmentSettingsFile, generateEnvironmentSettingsImports };
42
+ export { generateEnvironmentIndexDefinition, generateEnvironmentSettingsDefinition };
43
+ //# sourceMappingURL=environment-generator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"environment-generator.js","names":[],"sources":["../../../../src/commands/pull-v4/generators/environment-generator.ts"],"sourcesContent":["import { FullProjectDefinitionSchema } from '@inkeep/agents-core';\nimport type { SourceFile } from 'ts-morph';\nimport { z } from 'zod';\nimport { addValueToObject, createFactoryDefinition } from '../utils';\n\nconst EnvironmentCredentialSchema = FullProjectDefinitionSchema.shape.credentialReferences\n .unwrap()\n .valueType.omit({\n createdBy: true,\n toolId: true,\n userId: true,\n });\n\nconst EnvironmentSettingsSchema = z.looseObject({\n credentials: z.record(z.string(), EnvironmentCredentialSchema).nullable().optional(),\n});\n\nconst EnvironmentIndexSchema = z.array(z.string());\n\ntype EnvironmentSettingsInput = z.input<typeof EnvironmentSettingsSchema>;\ntype EnvironmentIndexInput = z.input<typeof EnvironmentIndexSchema>;\n\nexport function generateEnvironmentSettingsDefinition(\n environmentName: string,\n environmentData: EnvironmentSettingsInput\n): SourceFile {\n const environmentNameSchema = z.string().nonempty();\n const environmentNameResult = environmentNameSchema.safeParse(environmentName);\n if (!environmentNameResult.success) {\n throw new Error(\n `Validation failed for environment name:\\n${z.prettifyError(environmentNameResult.error)}`\n );\n }\n\n const result = EnvironmentSettingsSchema.safeParse(environmentData);\n if (!result.success) {\n throw new Error(\n `Validation failed for environment settings:\\n${z.prettifyError(result.error)}`\n );\n }\n\n const parsed = result.data;\n const { sourceFile, configObject } = createFactoryDefinition({\n importName: 'registerEnvironmentSettings',\n variableName: environmentNameResult.data,\n });\n\n addValueToObject(configObject, 'credentials', parsed.credentials ?? {});\n\n return sourceFile;\n}\n\nexport function generateEnvironmentIndexDefinition(\n environments: EnvironmentIndexInput\n): SourceFile {\n const result = EnvironmentIndexSchema.safeParse(environments);\n if (!result.success) {\n throw new Error(`Validation failed for environments index:\\n${z.prettifyError(result.error)}`);\n }\n\n const { sourceFile, configObject } = createFactoryDefinition({\n importName: 'createEnvironmentSettings',\n variableName: 'envSettings',\n });\n\n for (const environmentName of result.data) {\n sourceFile.addImportDeclaration({\n namedImports: [environmentName],\n moduleSpecifier: `./${environmentName}.env`,\n });\n }\n\n for (const environmentName of result.data) {\n configObject.addShorthandPropertyAssignment({ name: environmentName });\n }\n\n return sourceFile;\n}\n"],"mappings":";;;;;AAKA,MAAM,8BAA8B,4BAA4B,MAAM,qBACnE,QAAQ,CACR,UAAU,KAAK;CACd,WAAW;CACX,QAAQ;CACR,QAAQ;CACT,CAAC;AAEJ,MAAM,4BAA4B,EAAE,YAAY,EAC9C,aAAa,EAAE,OAAO,EAAE,QAAQ,EAAE,4BAA4B,CAAC,UAAU,CAAC,UAAU,EACrF,CAAC;AAEF,MAAM,yBAAyB,EAAE,MAAM,EAAE,QAAQ,CAAC;AAKlD,SAAgB,sCACd,iBACA,iBACY;CAEZ,MAAM,wBADwB,EAAE,QAAQ,CAAC,UAAU,CACC,UAAU,gBAAgB;AAC9E,KAAI,CAAC,sBAAsB,QACzB,OAAM,IAAI,MACR,4CAA4C,EAAE,cAAc,sBAAsB,MAAM,GACzF;CAGH,MAAM,SAAS,0BAA0B,UAAU,gBAAgB;AACnE,KAAI,CAAC,OAAO,QACV,OAAM,IAAI,MACR,gDAAgD,EAAE,cAAc,OAAO,MAAM,GAC9E;CAGH,MAAM,SAAS,OAAO;CACtB,MAAM,EAAE,YAAY,iBAAiB,wBAAwB;EAC3D,YAAY;EACZ,cAAc,sBAAsB;EACrC,CAAC;AAEF,kBAAiB,cAAc,eAAe,OAAO,eAAe,EAAE,CAAC;AAEvE,QAAO;;AAGT,SAAgB,mCACd,cACY;CACZ,MAAM,SAAS,uBAAuB,UAAU,aAAa;AAC7D,KAAI,CAAC,OAAO,QACV,OAAM,IAAI,MAAM,8CAA8C,EAAE,cAAc,OAAO,MAAM,GAAG;CAGhG,MAAM,EAAE,YAAY,iBAAiB,wBAAwB;EAC3D,YAAY;EACZ,cAAc;EACf,CAAC;AAEF,MAAK,MAAM,mBAAmB,OAAO,KACnC,YAAW,qBAAqB;EAC9B,cAAc,CAAC,gBAAgB;EAC/B,iBAAiB,KAAK,gBAAgB;EACvC,CAAC;AAGJ,MAAK,MAAM,mBAAmB,OAAO,KACnC,cAAa,+BAA+B,EAAE,MAAM,iBAAiB,CAAC;AAGxE,QAAO"}
@@ -1,56 +1,39 @@
1
- import { addStringProperty, createFactoryDefinition, toCamelCase } from "../utils.js";
1
+ import { addValueToObject, createFactoryDefinition, toCamelCase } from "../utils.js";
2
+ import { FullProjectDefinitionSchema } from "@inkeep/agents-core";
2
3
  import { z } from "zod";
3
- import { SyntaxKind } from "ts-morph";
4
4
 
5
5
  //#region src/commands/pull-v4/generators/external-agent-generator.ts
6
- const ExternalAgentSchema = z.looseObject({
6
+ const MySchema = FullProjectDefinitionSchema.shape.externalAgents.unwrap().valueType.omit({ id: true });
7
+ const ExternalAgentSchema = z.strictObject({
7
8
  externalAgentId: z.string().nonempty(),
8
- name: z.string().nonempty(),
9
- description: z.string().nullable().optional(),
10
- baseUrl: z.string().nonempty(),
11
- credentialReference: z.union([z.string(), z.looseObject({
12
- id: z.string().optional(),
13
- name: z.string().optional(),
14
- description: z.string().optional()
15
- })]).optional()
9
+ externalAgentReferenceName: z.string().optional(),
10
+ ...MySchema.shape
16
11
  });
17
- function generateExternalAgentDefinition(data) {
12
+ function generateExternalAgentDefinition({ id, tenantId, projectId, createdAt, updatedAt, ...data }) {
18
13
  const result = ExternalAgentSchema.safeParse(data);
19
14
  if (!result.success) throw new Error(`Validation failed for external agent:\n${z.prettifyError(result.error)}`);
20
- const parsed = result.data;
15
+ const { externalAgentReferenceName, externalAgentId, credentialReferenceId, ...parsed } = result.data;
21
16
  const { sourceFile, configObject } = createFactoryDefinition({
22
17
  importName: "externalAgent",
23
- variableName: toCamelCase(parsed.externalAgentId)
18
+ variableName: externalAgentReferenceName ?? toCamelCase(externalAgentId)
24
19
  });
25
- if (typeof parsed.credentialReference === "string") sourceFile.addImportDeclaration({
26
- namedImports: [toCamelCase(parsed.credentialReference)],
27
- moduleSpecifier: `../credentials/${parsed.credentialReference}`
28
- });
29
- writeExternalAgentConfig(configObject, parsed);
30
- return sourceFile;
31
- }
32
- function writeExternalAgentConfig(configObject, data) {
33
- addStringProperty(configObject, "id", data.externalAgentId);
34
- addStringProperty(configObject, "name", data.name);
35
- if (data.description !== null && data.description !== void 0) addStringProperty(configObject, "description", data.description);
36
- else addStringProperty(configObject, "description", `External agent ${data.externalAgentId}`);
37
- addStringProperty(configObject, "baseUrl", data.baseUrl);
38
- if (typeof data.credentialReference === "string") {
20
+ for (const [key, value] of Object.entries({
21
+ id: externalAgentId,
22
+ ...parsed
23
+ })) addValueToObject(configObject, key, value);
24
+ if (credentialReferenceId) {
25
+ sourceFile.addImportDeclaration({
26
+ namedImports: [toCamelCase(credentialReferenceId)],
27
+ moduleSpecifier: `../credentials/${credentialReferenceId}`
28
+ });
39
29
  configObject.addPropertyAssignment({
40
30
  name: "credentialReference",
41
- initializer: toCamelCase(data.credentialReference)
31
+ initializer: toCamelCase(credentialReferenceId)
42
32
  });
43
- return;
44
33
  }
45
- if (!data.credentialReference) return;
46
- const credentialReferenceObject = configObject.addPropertyAssignment({
47
- name: "credentialReference",
48
- initializer: "{}"
49
- }).getInitializerIfKindOrThrow(SyntaxKind.ObjectLiteralExpression);
50
- if (data.credentialReference.id !== void 0) addStringProperty(credentialReferenceObject, "id", data.credentialReference.id);
51
- if (data.credentialReference.name !== void 0) addStringProperty(credentialReferenceObject, "name", data.credentialReference.name);
52
- if (data.credentialReference.description !== void 0) addStringProperty(credentialReferenceObject, "description", data.credentialReference.description);
34
+ return sourceFile;
53
35
  }
54
36
 
55
37
  //#endregion
56
- export { generateExternalAgentDefinition };
38
+ export { generateExternalAgentDefinition };
39
+ //# sourceMappingURL=external-agent-generator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"external-agent-generator.js","names":[],"sources":["../../../../src/commands/pull-v4/generators/external-agent-generator.ts"],"sourcesContent":["import { FullProjectDefinitionSchema } from '@inkeep/agents-core';\nimport type { SourceFile } from 'ts-morph';\nimport { z } from 'zod';\nimport { addValueToObject, createFactoryDefinition, toCamelCase } from '../utils';\n\nconst MySchema = FullProjectDefinitionSchema.shape.externalAgents.unwrap().valueType.omit({\n id: true,\n});\n\nconst ExternalAgentSchema = z.strictObject({\n externalAgentId: z.string().nonempty(),\n externalAgentReferenceName: z.string().optional(),\n ...MySchema.shape,\n});\n\ntype ExternalAgentInput = z.input<typeof ExternalAgentSchema>;\n\nexport function generateExternalAgentDefinition({\n id,\n tenantId,\n projectId,\n createdAt,\n updatedAt,\n ...data\n}: ExternalAgentInput & Record<string, unknown>): SourceFile {\n const result = ExternalAgentSchema.safeParse(data);\n if (!result.success) {\n throw new Error(`Validation failed for external agent:\\n${z.prettifyError(result.error)}`);\n }\n\n const { externalAgentReferenceName, externalAgentId, credentialReferenceId, ...parsed } =\n result.data;\n const { sourceFile, configObject } = createFactoryDefinition({\n importName: 'externalAgent',\n variableName: externalAgentReferenceName ?? toCamelCase(externalAgentId),\n });\n\n for (const [key, value] of Object.entries({\n id: externalAgentId,\n ...parsed,\n })) {\n addValueToObject(configObject, key, value);\n }\n if (credentialReferenceId) {\n sourceFile.addImportDeclaration({\n namedImports: [toCamelCase(credentialReferenceId)],\n moduleSpecifier: `../credentials/${credentialReferenceId}`,\n });\n configObject.addPropertyAssignment({\n name: 'credentialReference',\n initializer: toCamelCase(credentialReferenceId),\n });\n }\n return sourceFile;\n}\n"],"mappings":";;;;;AAKA,MAAM,WAAW,4BAA4B,MAAM,eAAe,QAAQ,CAAC,UAAU,KAAK,EACxF,IAAI,MACL,CAAC;AAEF,MAAM,sBAAsB,EAAE,aAAa;CACzC,iBAAiB,EAAE,QAAQ,CAAC,UAAU;CACtC,4BAA4B,EAAE,QAAQ,CAAC,UAAU;CACjD,GAAG,SAAS;CACb,CAAC;AAIF,SAAgB,gCAAgC,EAC9C,IACA,UACA,WACA,WACA,WACA,GAAG,QACwD;CAC3D,MAAM,SAAS,oBAAoB,UAAU,KAAK;AAClD,KAAI,CAAC,OAAO,QACV,OAAM,IAAI,MAAM,0CAA0C,EAAE,cAAc,OAAO,MAAM,GAAG;CAG5F,MAAM,EAAE,4BAA4B,iBAAiB,uBAAuB,GAAG,WAC7E,OAAO;CACT,MAAM,EAAE,YAAY,iBAAiB,wBAAwB;EAC3D,YAAY;EACZ,cAAc,8BAA8B,YAAY,gBAAgB;EACzE,CAAC;AAEF,MAAK,MAAM,CAAC,KAAK,UAAU,OAAO,QAAQ;EACxC,IAAI;EACJ,GAAG;EACJ,CAAC,CACA,kBAAiB,cAAc,KAAK,MAAM;AAE5C,KAAI,uBAAuB;AACzB,aAAW,qBAAqB;GAC9B,cAAc,CAAC,YAAY,sBAAsB,CAAC;GAClD,iBAAiB,kBAAkB;GACpC,CAAC;AACF,eAAa,sBAAsB;GACjC,MAAM;GACN,aAAa,YAAY,sBAAsB;GAChD,CAAC;;AAEJ,QAAO"}