@inkeep/agents-cli 0.58.10 → 0.58.13
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/agents-cli/package.js +3 -2
- package/dist/agents-cli/package.js.map +1 -0
- package/dist/api.js +7 -11
- package/dist/api.js.map +1 -0
- package/dist/commands/add-ui.js +2 -1
- package/dist/commands/add-ui.js.map +1 -0
- package/dist/commands/add.js +2 -1
- package/dist/commands/add.js.map +1 -0
- package/dist/commands/config.js +2 -1
- package/dist/commands/config.js.map +1 -0
- package/dist/commands/dev.js +2 -1
- package/dist/commands/dev.js.map +1 -0
- package/dist/commands/init.js +2 -1
- package/dist/commands/init.js.map +1 -0
- package/dist/commands/list-agents.js +2 -1
- package/dist/commands/list-agents.js.map +1 -0
- package/dist/commands/login.js +2 -1
- package/dist/commands/login.js.map +1 -0
- package/dist/commands/logout.js +2 -1
- package/dist/commands/logout.js.map +1 -0
- package/dist/commands/profile.js +2 -1
- package/dist/commands/profile.js.map +1 -0
- package/dist/commands/pull-v4/component-parser.js +2 -1
- package/dist/commands/pull-v4/component-parser.js.map +1 -0
- package/dist/commands/pull-v4/component-registry.js +2 -1
- package/dist/commands/pull-v4/component-registry.js.map +1 -0
- package/dist/commands/pull-v4/generators/agent-generator.helpers.js +186 -0
- package/dist/commands/pull-v4/generators/agent-generator.helpers.js.map +1 -0
- package/dist/commands/pull-v4/generators/agent-generator.js +70 -209
- package/dist/commands/pull-v4/generators/agent-generator.js.map +1 -0
- package/dist/commands/pull-v4/generators/artifact-component-generator.js +13 -16
- package/dist/commands/pull-v4/generators/artifact-component-generator.js.map +1 -0
- package/dist/commands/pull-v4/generators/context-config-generator.js +38 -24
- package/dist/commands/pull-v4/generators/context-config-generator.js.map +1 -0
- package/dist/commands/pull-v4/generators/credential-generator.js +14 -10
- package/dist/commands/pull-v4/generators/credential-generator.js.map +1 -0
- package/dist/commands/pull-v4/generators/data-component-generator.js +10 -12
- package/dist/commands/pull-v4/generators/data-component-generator.js.map +1 -0
- package/dist/commands/pull-v4/generators/environment-generator.js +11 -91
- package/dist/commands/pull-v4/generators/environment-generator.js.map +1 -0
- package/dist/commands/pull-v4/generators/external-agent-generator.js +22 -39
- package/dist/commands/pull-v4/generators/external-agent-generator.js.map +1 -0
- package/dist/commands/pull-v4/generators/function-tool-generator.js +19 -31
- package/dist/commands/pull-v4/generators/function-tool-generator.js.map +1 -0
- package/dist/commands/pull-v4/generators/mcp-tool-generator.js +30 -71
- package/dist/commands/pull-v4/generators/mcp-tool-generator.js.map +1 -0
- package/dist/commands/pull-v4/generators/project-generator.js +64 -31
- package/dist/commands/pull-v4/generators/project-generator.js.map +1 -0
- package/dist/commands/pull-v4/generators/skill-generator.js +4 -1
- package/dist/commands/pull-v4/generators/skill-generator.js.map +1 -0
- package/dist/commands/pull-v4/generators/status-component-generator.js +19 -19
- package/dist/commands/pull-v4/generators/status-component-generator.js.map +1 -0
- package/dist/commands/pull-v4/generators/sub-agent-generator.helpers.js +84 -0
- package/dist/commands/pull-v4/generators/sub-agent-generator.helpers.js.map +1 -0
- package/dist/commands/pull-v4/generators/sub-agent-generator.js +82 -113
- package/dist/commands/pull-v4/generators/sub-agent-generator.js.map +1 -0
- package/dist/commands/pull-v4/generators/trigger-generator.js +21 -30
- package/dist/commands/pull-v4/generators/trigger-generator.js.map +1 -0
- package/dist/commands/pull-v4/introspect/demo-project.js +1616 -0
- package/dist/commands/pull-v4/introspect/demo-project.js.map +1 -0
- package/dist/commands/pull-v4/introspect/index.js +17 -16
- package/dist/commands/pull-v4/introspect/index.js.map +1 -0
- package/dist/commands/pull-v4/introspect/test-helpers.js +5 -3
- package/dist/commands/pull-v4/introspect/test-helpers.js.map +1 -0
- package/dist/commands/pull-v4/introspect-generator.js +606 -93
- package/dist/commands/pull-v4/introspect-generator.js.map +1 -0
- package/dist/commands/pull-v4/module-merge.js +2 -1
- package/dist/commands/pull-v4/module-merge.js.map +1 -0
- package/dist/commands/pull-v4/scheduled-trigger-generator.js +16 -17
- package/dist/commands/pull-v4/scheduled-trigger-generator.js.map +1 -0
- package/dist/commands/pull-v4/utils.js +90 -28
- package/dist/commands/pull-v4/utils.js.map +1 -0
- package/dist/commands/push.js +2 -1
- package/dist/commands/push.js.map +1 -0
- package/dist/commands/status.js +2 -1
- package/dist/commands/status.js.map +1 -0
- package/dist/commands/update.js +2 -1
- package/dist/commands/update.js.map +1 -0
- package/dist/commands/whoami.js +2 -1
- package/dist/commands/whoami.js.map +1 -0
- package/dist/config.js +2 -1
- package/dist/config.js.map +1 -0
- package/dist/env.js +2 -1
- package/dist/env.js.map +1 -0
- package/dist/index.js +2 -1
- package/dist/index.js.map +1 -0
- package/dist/instrumentation.js +2 -1
- package/dist/instrumentation.js.map +1 -0
- package/dist/node_modules/.pnpm/diff@8.0.3/node_modules/diff/libesm/diff/array.js +2 -1
- package/dist/node_modules/.pnpm/diff@8.0.3/node_modules/diff/libesm/diff/array.js.map +1 -0
- package/dist/node_modules/.pnpm/diff@8.0.3/node_modules/diff/libesm/diff/base.js +2 -1
- package/dist/node_modules/.pnpm/diff@8.0.3/node_modules/diff/libesm/diff/base.js.map +1 -0
- package/dist/node_modules/.pnpm/diff@8.0.3/node_modules/diff/libesm/diff/character.js +2 -1
- package/dist/node_modules/.pnpm/diff@8.0.3/node_modules/diff/libesm/diff/character.js.map +1 -0
- package/dist/node_modules/.pnpm/diff@8.0.3/node_modules/diff/libesm/diff/css.js +2 -1
- package/dist/node_modules/.pnpm/diff@8.0.3/node_modules/diff/libesm/diff/css.js.map +1 -0
- package/dist/node_modules/.pnpm/diff@8.0.3/node_modules/diff/libesm/diff/json.js +2 -1
- package/dist/node_modules/.pnpm/diff@8.0.3/node_modules/diff/libesm/diff/json.js.map +1 -0
- package/dist/node_modules/.pnpm/diff@8.0.3/node_modules/diff/libesm/diff/line.js +2 -1
- package/dist/node_modules/.pnpm/diff@8.0.3/node_modules/diff/libesm/diff/line.js.map +1 -0
- package/dist/node_modules/.pnpm/diff@8.0.3/node_modules/diff/libesm/diff/sentence.js +2 -1
- package/dist/node_modules/.pnpm/diff@8.0.3/node_modules/diff/libesm/diff/sentence.js.map +1 -0
- package/dist/node_modules/.pnpm/diff@8.0.3/node_modules/diff/libesm/diff/word.js +2 -1
- package/dist/node_modules/.pnpm/diff@8.0.3/node_modules/diff/libesm/diff/word.js.map +1 -0
- package/dist/node_modules/.pnpm/diff@8.0.3/node_modules/diff/libesm/patch/create.js +2 -1
- package/dist/node_modules/.pnpm/diff@8.0.3/node_modules/diff/libesm/patch/create.js.map +1 -0
- package/dist/node_modules/.pnpm/diff@8.0.3/node_modules/diff/libesm/util/string.js +2 -1
- package/dist/node_modules/.pnpm/diff@8.0.3/node_modules/diff/libesm/util/string.js.map +1 -0
- package/dist/utils/background-version-check.js +2 -1
- package/dist/utils/background-version-check.js.map +1 -0
- package/dist/utils/ci-environment.js +2 -1
- package/dist/utils/ci-environment.js.map +1 -0
- package/dist/utils/cli-pipeline.js +2 -1
- package/dist/utils/cli-pipeline.js.map +1 -0
- package/dist/utils/config.js +2 -1
- package/dist/utils/config.js.map +1 -0
- package/dist/utils/credentials.js +2 -1
- package/dist/utils/credentials.js.map +1 -0
- package/dist/utils/environment-loader.js +2 -1
- package/dist/utils/environment-loader.js.map +1 -0
- package/dist/utils/file-finder.js +2 -1
- package/dist/utils/file-finder.js.map +1 -0
- package/dist/utils/json-comparator.js +2 -1
- package/dist/utils/json-comparator.js.map +1 -0
- package/dist/utils/json-comparison.js +2 -1
- package/dist/utils/json-comparison.js.map +1 -0
- package/dist/utils/mcp-runner.js +2 -1
- package/dist/utils/mcp-runner.js.map +1 -0
- package/dist/utils/model-config.js +2 -1
- package/dist/utils/model-config.js.map +1 -0
- package/dist/utils/package-manager.js +2 -1
- package/dist/utils/package-manager.js.map +1 -0
- package/dist/utils/profile-config.js +2 -1
- package/dist/utils/profile-config.js.map +1 -0
- package/dist/utils/profiles/profile-manager.js +2 -1
- package/dist/utils/profiles/profile-manager.js.map +1 -0
- package/dist/utils/profiles/types.js +2 -1
- package/dist/utils/profiles/types.js.map +1 -0
- package/dist/utils/project-directory.js +2 -1
- package/dist/utils/project-directory.js.map +1 -0
- package/dist/utils/project-loader.js +2 -1
- package/dist/utils/project-loader.js.map +1 -0
- package/dist/utils/schema-introspection.js +2 -1
- package/dist/utils/schema-introspection.js.map +1 -0
- package/dist/utils/templates.js +2 -1
- package/dist/utils/templates.js.map +1 -0
- package/dist/utils/tsx-loader.js +2 -1
- package/dist/utils/tsx-loader.js.map +1 -0
- package/dist/utils/version-check.js +2 -1
- package/dist/utils/version-check.js.map +1 -0
- 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,
|
|
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
|
|
6
|
+
const MySchema = FullProjectDefinitionSchema.shape.artifactComponents.unwrap().valueType.omit({ id: true });
|
|
7
|
+
const ArtifactComponentSchema = z.strictObject({
|
|
6
8
|
artifactComponentId: z.string().nonempty(),
|
|
7
|
-
|
|
8
|
-
description: z.
|
|
9
|
-
|
|
10
|
-
|
|
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
|
|
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,
|
|
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,
|
|
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
|
|
10
|
+
const ReferencePathOverridesSchema = z.object({ credentialReferences: ReferenceNameByIdSchema.optional() });
|
|
11
|
+
const ContextConfigSchema = z.strictObject({
|
|
9
12
|
contextConfigId: z.string().nonempty(),
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
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
|
|
26
|
-
const
|
|
27
|
-
const
|
|
28
|
-
const
|
|
29
|
-
const
|
|
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(
|
|
33
|
-
const credentialReferenceNames = collectCredentialReferenceNames(fetchDefinitions,
|
|
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)
|
|
47
|
-
|
|
48
|
-
|
|
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(
|
|
83
|
+
variableName: toContextConfigVariableName(parsed.contextConfigId),
|
|
73
84
|
isExported: true
|
|
74
85
|
});
|
|
75
|
-
writeContextConfig(configObject,
|
|
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/${
|
|
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":"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"}
|
|
@@ -1,22 +1,25 @@
|
|
|
1
|
-
import { addValueToObject, createFactoryDefinition,
|
|
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
|
|
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
|
-
|
|
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:
|
|
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
|
|
6
|
+
const MySchema = FullProjectDefinitionSchema.shape.dataComponents.unwrap().valueType.omit({ id: true });
|
|
7
|
+
const DataComponentSchema = z.strictObject({
|
|
6
8
|
dataComponentId: z.string().nonempty(),
|
|
7
|
-
|
|
8
|
-
description: z.
|
|
9
|
-
props: z.unknown()
|
|
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
|
|
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 {
|
|
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
|
|
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
|
-
|
|
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,
|
|
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 {
|
|
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
|
|
6
|
+
const MySchema = FullProjectDefinitionSchema.shape.externalAgents.unwrap().valueType.omit({ id: true });
|
|
7
|
+
const ExternalAgentSchema = z.strictObject({
|
|
7
8
|
externalAgentId: z.string().nonempty(),
|
|
8
|
-
|
|
9
|
-
|
|
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(
|
|
18
|
+
variableName: externalAgentReferenceName ?? toCamelCase(externalAgentId)
|
|
24
19
|
});
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
});
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
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(
|
|
31
|
+
initializer: toCamelCase(credentialReferenceId)
|
|
42
32
|
});
|
|
43
|
-
return;
|
|
44
33
|
}
|
|
45
|
-
|
|
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"}
|