@inkeep/agents-cli 0.59.3 → 0.60.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/agents-cli/package.js +1 -1
- package/dist/commands/pull-v4/collector-common.js +128 -0
- package/dist/commands/pull-v4/collector-common.js.map +1 -0
- package/dist/commands/pull-v4/collector-reference-helpers.js +323 -0
- package/dist/commands/pull-v4/collector-reference-helpers.js.map +1 -0
- package/dist/commands/pull-v4/component-parser.js +2 -1
- package/dist/commands/pull-v4/component-parser.js.map +1 -1
- package/dist/commands/pull-v4/file-scope.js +43 -0
- package/dist/commands/pull-v4/file-scope.js.map +1 -0
- package/dist/commands/pull-v4/generation-resolver.js +305 -0
- package/dist/commands/pull-v4/generation-resolver.js.map +1 -0
- package/dist/commands/pull-v4/generation-types.js +56 -0
- package/dist/commands/pull-v4/generation-types.js.map +1 -0
- package/dist/commands/pull-v4/generators/agent-generator.helpers.js +4 -10
- package/dist/commands/pull-v4/generators/agent-generator.helpers.js.map +1 -1
- package/dist/commands/pull-v4/generators/agent-generator.js +154 -81
- package/dist/commands/pull-v4/generators/agent-generator.js.map +1 -1
- package/dist/commands/pull-v4/generators/artifact-component-generator.js +48 -27
- package/dist/commands/pull-v4/generators/artifact-component-generator.js.map +1 -1
- package/dist/commands/pull-v4/generators/context-config-generator.js +147 -129
- package/dist/commands/pull-v4/generators/context-config-generator.js.map +1 -1
- package/dist/commands/pull-v4/generators/credential-generator.js +36 -14
- package/dist/commands/pull-v4/generators/credential-generator.js.map +1 -1
- package/dist/commands/pull-v4/generators/data-component-generator.js +55 -19
- package/dist/commands/pull-v4/generators/data-component-generator.js.map +1 -1
- package/dist/commands/pull-v4/generators/environment-generator.js +29 -33
- package/dist/commands/pull-v4/generators/environment-generator.js.map +1 -1
- package/dist/commands/pull-v4/generators/environment-settings-generator.js +57 -0
- package/dist/commands/pull-v4/generators/environment-settings-generator.js.map +1 -0
- package/dist/commands/pull-v4/generators/external-agent-generator.js +51 -23
- package/dist/commands/pull-v4/generators/external-agent-generator.js.map +1 -1
- package/dist/commands/pull-v4/generators/function-tool-generator.js +50 -14
- package/dist/commands/pull-v4/generators/function-tool-generator.js.map +1 -1
- package/dist/commands/pull-v4/generators/helpers/agent.js +129 -0
- package/dist/commands/pull-v4/generators/helpers/agent.js.map +1 -0
- package/dist/commands/pull-v4/generators/helpers/sub-agent.js +65 -0
- package/dist/commands/pull-v4/generators/helpers/sub-agent.js.map +1 -0
- package/dist/commands/pull-v4/generators/index.js +38 -0
- package/dist/commands/pull-v4/generators/index.js.map +1 -0
- package/dist/commands/pull-v4/generators/mcp-tool-generator.js +48 -27
- package/dist/commands/pull-v4/generators/mcp-tool-generator.js.map +1 -1
- package/dist/commands/pull-v4/generators/project-generator.js +144 -110
- package/dist/commands/pull-v4/generators/project-generator.js.map +1 -1
- package/dist/commands/pull-v4/generators/scheduled-trigger-generator.js +66 -0
- package/dist/commands/pull-v4/generators/scheduled-trigger-generator.js.map +1 -0
- package/dist/commands/pull-v4/generators/status-component-generator.js +55 -20
- package/dist/commands/pull-v4/generators/status-component-generator.js.map +1 -1
- package/dist/commands/pull-v4/generators/sub-agent-generator.helpers.js +4 -1
- package/dist/commands/pull-v4/generators/sub-agent-generator.helpers.js.map +1 -1
- package/dist/commands/pull-v4/generators/sub-agent-generator.js +282 -166
- package/dist/commands/pull-v4/generators/sub-agent-generator.js.map +1 -1
- package/dist/commands/pull-v4/generators/trigger-generator.js +62 -27
- package/dist/commands/pull-v4/generators/trigger-generator.js.map +1 -1
- package/dist/commands/pull-v4/import-plan.js +40 -0
- package/dist/commands/pull-v4/import-plan.js.map +1 -0
- package/dist/commands/pull-v4/introspect/index.js +11 -7
- package/dist/commands/pull-v4/introspect/index.js.map +1 -1
- package/dist/commands/pull-v4/introspect-generator.js +15 -1218
- package/dist/commands/pull-v4/introspect-generator.js.map +1 -1
- package/dist/commands/pull-v4/module-merge.js +14 -5
- package/dist/commands/pull-v4/module-merge.js.map +1 -1
- package/dist/commands/pull-v4/reference-resolution.js +111 -0
- package/dist/commands/pull-v4/reference-resolution.js.map +1 -0
- package/dist/commands/pull-v4/simple-factory-generator.js +54 -0
- package/dist/commands/pull-v4/simple-factory-generator.js.map +1 -0
- package/dist/commands/pull-v4/{generators/skill-generator.js → skill.js} +18 -6
- package/dist/commands/pull-v4/skill.js.map +1 -0
- package/dist/commands/pull-v4/typescript-file-writer.js +78 -0
- package/dist/commands/pull-v4/typescript-file-writer.js.map +1 -0
- package/dist/commands/pull-v4/utils/code-values.js +64 -0
- package/dist/commands/pull-v4/utils/code-values.js.map +1 -0
- package/dist/commands/pull-v4/utils/factory-writer.js +128 -0
- package/dist/commands/pull-v4/utils/factory-writer.js.map +1 -0
- package/dist/commands/pull-v4/utils/index.js +8 -0
- package/dist/commands/pull-v4/utils/naming.js +74 -0
- package/dist/commands/pull-v4/utils/naming.js.map +1 -0
- package/dist/commands/pull-v4/utils/schema-rendering.js +20 -0
- package/dist/commands/pull-v4/utils/schema-rendering.js.map +1 -0
- package/dist/commands/pull-v4/utils/shared.js +18 -0
- package/dist/commands/pull-v4/utils/shared.js.map +1 -0
- package/dist/commands/pull-v4/utils/templates.js +58 -0
- package/dist/commands/pull-v4/utils/templates.js.map +1 -0
- package/package.json +4 -4
- package/dist/commands/pull-v4/generators/skill-generator.js.map +0 -1
- package/dist/commands/pull-v4/scheduled-trigger-generator.js +0 -38
- package/dist/commands/pull-v4/scheduled-trigger-generator.js.map +0 -1
- package/dist/commands/pull-v4/utils.js +0 -320
- package/dist/commands/pull-v4/utils.js.map +0 -1
|
@@ -1,7 +1,16 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { isPlainObject } from "../utils/shared.js";
|
|
2
|
+
import { codeExpression, codeReference } from "../utils/code-values.js";
|
|
3
|
+
import { toCamelCase } from "../utils/naming.js";
|
|
4
|
+
import { addFactoryConfigVariable, addValueToObject, createInMemoryProject } from "../utils/factory-writer.js";
|
|
5
|
+
import { convertJsonSchemaToZodSafe } from "../utils/schema-rendering.js";
|
|
6
|
+
import "../utils/index.js";
|
|
7
|
+
import { applyPromptHeaderTemplateSchema, asRecord, collectHeaderTemplateVariablesFromAgentPrompts } from "../collector-common.js";
|
|
8
|
+
import { collectContextConfigCredentialReferenceOverrides, collectContextConfigCredentialReferencePathOverrides, collectContextConfigHeadersReferenceOverride } from "../collector-reference-helpers.js";
|
|
9
|
+
import { generateValidatedSourceFile } from "../simple-factory-generator.js";
|
|
10
|
+
import { addNamedImports, applyImportPlan, createImportPlan } from "../import-plan.js";
|
|
2
11
|
import { FullProjectDefinitionSchema } from "@inkeep/agents-core";
|
|
3
12
|
import { z } from "zod";
|
|
4
|
-
import {
|
|
13
|
+
import { join } from "node:path";
|
|
5
14
|
|
|
6
15
|
//#region src/commands/pull-v4/generators/context-config-generator.ts
|
|
7
16
|
const MySchema = FullProjectDefinitionSchema.shape.agents.valueType.shape.contextConfig.unwrap();
|
|
@@ -21,91 +30,88 @@ const ContextConfigSchema = z.strictObject({
|
|
|
21
30
|
fetchConfig: z.record(z.string(), z.unknown()).optional(),
|
|
22
31
|
defaultValue: z.unknown(),
|
|
23
32
|
responseSchema: z.unknown()
|
|
24
|
-
})
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
const credentialReferenceNames = collectCredentialReferenceNames(fetchDefinitions, parsed.referenceOverrides?.credentialReferences);
|
|
41
|
-
const coreImports = ["contextConfig"];
|
|
42
|
-
if (shouldDefineHeadersInFile) coreImports.unshift("headers");
|
|
43
|
-
if (fetchDefinitions.length > 0) coreImports.splice(coreImports.length - 1, 0, "fetchDefinition");
|
|
44
|
-
sourceFile.addImportDeclaration({
|
|
45
|
-
namedImports: coreImports,
|
|
46
|
-
moduleSpecifier: "@inkeep/agents-core"
|
|
47
|
-
});
|
|
48
|
-
const hasResponseSchemas = fetchDefinitions.some((definition) => isPlainObject(definition.data.responseSchema));
|
|
49
|
-
if (shouldDefineHeadersInFile || hasResponseSchemas) sourceFile.addImportDeclaration({
|
|
50
|
-
namedImports: ["z"],
|
|
51
|
-
moduleSpecifier: "zod"
|
|
52
|
-
});
|
|
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
|
-
}
|
|
60
|
-
if (shouldDefineHeadersInFile && headersReference && headersSchema) {
|
|
61
|
-
const { configObject: headersObject } = addFactoryConfigVariable({
|
|
62
|
-
sourceFile,
|
|
63
|
-
isExported: true,
|
|
64
|
-
importName: "headers",
|
|
65
|
-
variableName: headersReference
|
|
66
|
-
});
|
|
67
|
-
headersObject.addPropertyAssignment({
|
|
68
|
-
name: "schema",
|
|
69
|
-
initializer: convertJsonSchemaToZod(headersSchema)
|
|
70
|
-
});
|
|
71
|
-
}
|
|
72
|
-
for (const fetchDefinition of fetchDefinitions) {
|
|
73
|
-
const { configObject: fetchConfigObject } = addFactoryConfigVariable({
|
|
74
|
-
sourceFile,
|
|
75
|
-
importName: "fetchDefinition",
|
|
76
|
-
variableName: fetchDefinition.variableName
|
|
77
|
-
});
|
|
78
|
-
writeFetchDefinition(fetchConfigObject, fetchDefinition.data, credentialReferenceNames, headersReference);
|
|
33
|
+
}).transform((data) => ({
|
|
34
|
+
...data,
|
|
35
|
+
normalizedHeadersReference: extractHeadersReference(data.headers),
|
|
36
|
+
normalizedContextVariables: normalizeContextVariables(data.contextVariables)
|
|
37
|
+
}));
|
|
38
|
+
function normalizeContextVariables(contextVariables) {
|
|
39
|
+
if (!contextVariables) return {};
|
|
40
|
+
const normalizedVariables = {};
|
|
41
|
+
for (const [key, value] of Object.entries(contextVariables)) {
|
|
42
|
+
const referenceName = extractContextVariableReference(key, value);
|
|
43
|
+
if (!referenceName) continue;
|
|
44
|
+
normalizedVariables[key] = {
|
|
45
|
+
referenceName,
|
|
46
|
+
rawValue: value,
|
|
47
|
+
...isPlainObject(value) && isFetchDefinitionData(value) ? { fetchDefinitionData: value } : {}
|
|
48
|
+
};
|
|
79
49
|
}
|
|
80
|
-
|
|
81
|
-
|
|
50
|
+
return normalizedVariables;
|
|
51
|
+
}
|
|
52
|
+
function generateContextConfigDefinition(data) {
|
|
53
|
+
return generateValidatedSourceFile(data, {
|
|
54
|
+
schema: ContextConfigSchema,
|
|
82
55
|
importName: "contextConfig",
|
|
83
|
-
|
|
84
|
-
|
|
56
|
+
render(parsed) {
|
|
57
|
+
const sourceFile = createInMemoryProject().createSourceFile("context-config-definition.ts", "", { overwrite: true });
|
|
58
|
+
if (isHeadersDefinitionData(parsed)) return generateStandaloneHeadersDefinition(sourceFile, parsed);
|
|
59
|
+
if (isFetchDefinitionData(parsed)) return generateStandaloneFetchDefinition(sourceFile, parsed);
|
|
60
|
+
const explicitHeadersReference = (typeof parsed.headersReference === "string" && parsed.headersReference.length > 0 ? parsed.headersReference : void 0) ?? parsed.normalizedHeadersReference;
|
|
61
|
+
const templateHeaderVariables = collectTemplateHeaderVariables(parsed.normalizedContextVariables);
|
|
62
|
+
const inferredHeadersSchema = !isPlainObject(parsed.headersSchema) && !explicitHeadersReference ? inferHeadersSchemaFromTemplateHeaderVariables(templateHeaderVariables) : void 0;
|
|
63
|
+
const headersSchema = isPlainObject(parsed.headersSchema) ? parsed.headersSchema : inferredHeadersSchema;
|
|
64
|
+
const headersReference = resolveHeadersReference(parsed, Boolean(headersSchema));
|
|
65
|
+
const shouldDefineHeadersInFile = Boolean(headersReference) && isPlainObject(headersSchema);
|
|
66
|
+
const fetchDefinitions = collectFetchDefinitionEntries(parsed.normalizedContextVariables);
|
|
67
|
+
const credentialReferenceNames = collectCredentialReferenceNames(fetchDefinitions, parsed.referenceOverrides?.credentialReferences);
|
|
68
|
+
const coreImports = ["contextConfig"];
|
|
69
|
+
if (shouldDefineHeadersInFile) coreImports.unshift("headers");
|
|
70
|
+
if (fetchDefinitions.length > 0) coreImports.splice(coreImports.length - 1, 0, "fetchDefinition");
|
|
71
|
+
const importPlan = createImportPlan();
|
|
72
|
+
addNamedImports(importPlan, "@inkeep/agents-core", coreImports);
|
|
73
|
+
const hasResponseSchemas = fetchDefinitions.some((definition) => isPlainObject(definition.data.responseSchema));
|
|
74
|
+
if (shouldDefineHeadersInFile || hasResponseSchemas) addNamedImports(importPlan, "zod", "z");
|
|
75
|
+
for (const [credentialId, credentialReferenceName] of credentialReferenceNames) addNamedImports(importPlan, `../credentials/${parsed.referencePathOverrides?.credentialReferences?.[credentialId] ?? credentialId}`, credentialReferenceName);
|
|
76
|
+
applyImportPlan(sourceFile, importPlan);
|
|
77
|
+
if (shouldDefineHeadersInFile && headersReference && headersSchema) {
|
|
78
|
+
const { configObject: headersObject } = addFactoryConfigVariable({
|
|
79
|
+
sourceFile,
|
|
80
|
+
isExported: true,
|
|
81
|
+
importName: "headers",
|
|
82
|
+
variableName: headersReference
|
|
83
|
+
});
|
|
84
|
+
addValueToObject(headersObject, "schema", createSchemaExpression(headersSchema));
|
|
85
|
+
}
|
|
86
|
+
for (const fetchDefinition of fetchDefinitions) {
|
|
87
|
+
const { configObject: fetchConfigObject } = addFactoryConfigVariable({
|
|
88
|
+
sourceFile,
|
|
89
|
+
importName: "fetchDefinition",
|
|
90
|
+
variableName: fetchDefinition.variableName
|
|
91
|
+
});
|
|
92
|
+
writeFetchDefinition(fetchConfigObject, fetchDefinition.data, credentialReferenceNames, headersReference);
|
|
93
|
+
}
|
|
94
|
+
const { configObject } = addFactoryConfigVariable({
|
|
95
|
+
sourceFile,
|
|
96
|
+
importName: "contextConfig",
|
|
97
|
+
variableName: toContextConfigVariableName(parsed.contextConfigId),
|
|
98
|
+
isExported: true
|
|
99
|
+
});
|
|
100
|
+
writeContextConfig(configObject, parsed, headersReference);
|
|
101
|
+
return sourceFile;
|
|
102
|
+
}
|
|
85
103
|
});
|
|
86
|
-
writeContextConfig(configObject, parsed, headersReference);
|
|
87
|
-
return sourceFile;
|
|
88
104
|
}
|
|
89
105
|
function writeContextConfig(configObject, data, headersReference) {
|
|
90
|
-
|
|
91
|
-
if (
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
name: "contextVariables",
|
|
98
|
-
initializer: "{}"
|
|
99
|
-
}).getInitializerIfKindOrThrow(SyntaxKind.ObjectLiteralExpression);
|
|
100
|
-
for (const [key, value] of Object.entries(data.contextVariables)) {
|
|
101
|
-
const reference = extractContextVariableReference(key, value);
|
|
102
|
-
if (!reference) continue;
|
|
103
|
-
contextVariablesObject.addPropertyAssignment({
|
|
104
|
-
name: formatPropertyName(key),
|
|
105
|
-
initializer: reference
|
|
106
|
-
});
|
|
107
|
-
}
|
|
106
|
+
const contextConfig = {};
|
|
107
|
+
if (data.id !== void 0) contextConfig.id = data.id;
|
|
108
|
+
if (headersReference) contextConfig.headers = codeReference(headersReference);
|
|
109
|
+
if (Object.keys(data.normalizedContextVariables).length > 0) {
|
|
110
|
+
const contextVariables = {};
|
|
111
|
+
for (const [key, value] of Object.entries(data.normalizedContextVariables)) contextVariables[key] = codeReference(value.referenceName);
|
|
112
|
+
contextConfig.contextVariables = contextVariables;
|
|
108
113
|
}
|
|
114
|
+
for (const [key, value] of Object.entries(contextConfig)) addValueToObject(configObject, key, value);
|
|
109
115
|
}
|
|
110
116
|
function extractHeadersReference(headers) {
|
|
111
117
|
if (!headers) return;
|
|
@@ -124,34 +130,25 @@ function isFetchDefinitionData(value) {
|
|
|
124
130
|
return value.fetchConfig !== void 0 || value.responseSchema !== void 0;
|
|
125
131
|
}
|
|
126
132
|
function collectFetchDefinitionEntries(contextVariables) {
|
|
127
|
-
if (!contextVariables) return [];
|
|
128
|
-
return Object.entries(contextVariables).filter(([, value]) =>
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
};
|
|
134
|
-
});
|
|
133
|
+
if (!contextVariables || Object.keys(contextVariables).length === 0) return [];
|
|
134
|
+
return Object.entries(contextVariables).filter(([, value]) => Boolean(value.fetchDefinitionData)).map(([key, value]) => ({
|
|
135
|
+
key,
|
|
136
|
+
variableName: value.referenceName,
|
|
137
|
+
data: value.fetchDefinitionData
|
|
138
|
+
}));
|
|
135
139
|
}
|
|
136
140
|
function writeFetchDefinition(configObject, fetchDefinitionData, credentialReferenceNames, headersReference) {
|
|
137
|
-
const { contextConfigId, responseSchema, credentialReferenceId, ...rest } = isPlainObject(fetchDefinitionData) ? fetchDefinitionData : {};
|
|
141
|
+
const { contextConfigId, responseSchema, credentialReferenceId, normalizedHeadersReference: _normalizedHeadersReference, normalizedContextVariables: _normalizedContextVariables, ...rest } = isPlainObject(fetchDefinitionData) ? fetchDefinitionData : {};
|
|
138
142
|
const normalizedRest = rewriteHeaderTemplates(rest, headersReference);
|
|
143
|
+
const fetchDefinition = {};
|
|
139
144
|
for (const [k, v] of Object.entries({
|
|
140
145
|
id: contextConfigId,
|
|
141
146
|
...normalizedRest
|
|
142
|
-
})) if (v !== null)
|
|
143
|
-
if (responseSchema)
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
if (typeof credentialReferenceId === "string" && credentialReferenceNames?.has(credentialReferenceId)) {
|
|
148
|
-
configObject.addPropertyAssignment({
|
|
149
|
-
name: "credentialReference",
|
|
150
|
-
initializer: credentialReferenceNames.get(credentialReferenceId)
|
|
151
|
-
});
|
|
152
|
-
return;
|
|
153
|
-
}
|
|
154
|
-
if (typeof credentialReferenceId === "string") addStringProperty(configObject, "credentialReferenceId", credentialReferenceId);
|
|
147
|
+
})) if (v !== null) fetchDefinition[k] = v;
|
|
148
|
+
if (responseSchema) fetchDefinition.responseSchema = createSchemaExpression(responseSchema);
|
|
149
|
+
if (typeof credentialReferenceId === "string" && credentialReferenceNames?.has(credentialReferenceId)) fetchDefinition.credentialReference = codeReference(credentialReferenceNames.get(credentialReferenceId));
|
|
150
|
+
else if (typeof credentialReferenceId === "string") fetchDefinition.credentialReferenceId = credentialReferenceId;
|
|
151
|
+
for (const [key, value] of Object.entries(fetchDefinition)) addValueToObject(configObject, key, value);
|
|
155
152
|
}
|
|
156
153
|
const HEADER_TEMPLATE_REGEX = /\{\{headers\.([^}]+)\}\}/g;
|
|
157
154
|
const HEADER_TO_TEMPLATE_CALL_REGEX = /\$\{\s*(headersSchema|headers)\.toTemplate\((['"])([^'"`]+)\2\)\s*\}/g;
|
|
@@ -168,23 +165,16 @@ function rewriteHeaderTemplates(value, headersReference) {
|
|
|
168
165
|
}
|
|
169
166
|
function generateStandaloneHeadersDefinition(sourceFile, data) {
|
|
170
167
|
const importName = "headers";
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
sourceFile.addImportDeclaration({
|
|
176
|
-
namedImports: ["z"],
|
|
177
|
-
moduleSpecifier: "zod"
|
|
178
|
-
});
|
|
168
|
+
const importPlan = createImportPlan();
|
|
169
|
+
addNamedImports(importPlan, "@inkeep/agents-core", importName);
|
|
170
|
+
addNamedImports(importPlan, "zod", "z");
|
|
171
|
+
applyImportPlan(sourceFile, importPlan);
|
|
179
172
|
const { configObject } = addFactoryConfigVariable({
|
|
180
173
|
sourceFile,
|
|
181
174
|
importName,
|
|
182
175
|
variableName: toContextConfigVariableName(data.contextConfigId)
|
|
183
176
|
});
|
|
184
|
-
configObject.
|
|
185
|
-
name: "schema",
|
|
186
|
-
initializer: convertJsonSchemaToZod(data.schema)
|
|
187
|
-
});
|
|
177
|
+
addValueToObject(configObject, "schema", createSchemaExpression(data.schema));
|
|
188
178
|
return sourceFile;
|
|
189
179
|
}
|
|
190
180
|
function isHeadersDefinitionData(value) {
|
|
@@ -192,25 +182,18 @@ function isHeadersDefinitionData(value) {
|
|
|
192
182
|
}
|
|
193
183
|
function generateStandaloneFetchDefinition(sourceFile, data) {
|
|
194
184
|
const importName = "fetchDefinition";
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
});
|
|
199
|
-
if (isPlainObject(data.responseSchema)) sourceFile.addImportDeclaration({
|
|
200
|
-
namedImports: ["z"],
|
|
201
|
-
moduleSpecifier: "zod"
|
|
202
|
-
});
|
|
185
|
+
const importPlan = createImportPlan();
|
|
186
|
+
addNamedImports(importPlan, "@inkeep/agents-core", importName);
|
|
187
|
+
if (isPlainObject(data.responseSchema)) addNamedImports(importPlan, "zod", "z");
|
|
203
188
|
const credentialReferenceNames = /* @__PURE__ */ new Map();
|
|
204
189
|
if (typeof data.credentialReferenceId === "string") {
|
|
205
190
|
const credentialReferenceId = data.credentialReferenceId;
|
|
206
191
|
const credentialReferenceName = data.referenceOverrides?.credentialReferences?.[credentialReferenceId] ?? toReferenceIdentifier(credentialReferenceId);
|
|
207
192
|
const credentialReferencePath = data.referencePathOverrides?.credentialReferences?.[credentialReferenceId] ?? credentialReferenceId;
|
|
208
193
|
credentialReferenceNames.set(credentialReferenceId, credentialReferenceName);
|
|
209
|
-
|
|
210
|
-
namedImports: [credentialReferenceName],
|
|
211
|
-
moduleSpecifier: `../credentials/${credentialReferencePath}`
|
|
212
|
-
});
|
|
194
|
+
addNamedImports(importPlan, `../credentials/${credentialReferencePath}`, credentialReferenceName);
|
|
213
195
|
}
|
|
196
|
+
applyImportPlan(sourceFile, importPlan);
|
|
214
197
|
const { configObject } = addFactoryConfigVariable({
|
|
215
198
|
sourceFile,
|
|
216
199
|
importName,
|
|
@@ -222,6 +205,9 @@ function generateStandaloneFetchDefinition(sourceFile, data) {
|
|
|
222
205
|
function convertJsonSchemaToZod(schema) {
|
|
223
206
|
return convertJsonSchemaToZodSafe(schema, { conversionOptions: { module: "none" } });
|
|
224
207
|
}
|
|
208
|
+
function createSchemaExpression(schema) {
|
|
209
|
+
return codeExpression(convertJsonSchemaToZod(schema));
|
|
210
|
+
}
|
|
225
211
|
function extractContextVariableReference(key, value) {
|
|
226
212
|
if (typeof value === "string") return toReferenceIdentifier(value);
|
|
227
213
|
if (!isPlainObject(value)) return;
|
|
@@ -246,7 +232,7 @@ function collectCredentialReferenceNames(fetchDefinitions, overrideNamesById) {
|
|
|
246
232
|
}
|
|
247
233
|
function collectTemplateHeaderVariables(contextVariables) {
|
|
248
234
|
const variables = /* @__PURE__ */ new Set();
|
|
249
|
-
collectTemplateHeaderVariablesFromValue(
|
|
235
|
+
for (const value of Object.values(contextVariables ?? {})) collectTemplateHeaderVariablesFromValue(value.rawValue, variables);
|
|
250
236
|
return variables;
|
|
251
237
|
}
|
|
252
238
|
function collectTemplateHeaderVariablesFromValue(value, variables) {
|
|
@@ -272,7 +258,39 @@ function inferHeadersSchemaFromTemplateHeaderVariables(variables) {
|
|
|
272
258
|
additionalProperties: false
|
|
273
259
|
};
|
|
274
260
|
}
|
|
261
|
+
const task = {
|
|
262
|
+
type: "context-config",
|
|
263
|
+
collect(context) {
|
|
264
|
+
if (!context.project.agents) return [];
|
|
265
|
+
const contextConfigRecordsById = /* @__PURE__ */ new Map();
|
|
266
|
+
for (const agentId of context.completeAgentIds) {
|
|
267
|
+
const agentData = context.project.agents[agentId];
|
|
268
|
+
const contextConfig = agentData ? asRecord(agentData.contextConfig) : void 0;
|
|
269
|
+
if (!agentData || !contextConfig) continue;
|
|
270
|
+
const normalizedContextConfig = applyPromptHeaderTemplateSchema(contextConfig, collectHeaderTemplateVariablesFromAgentPrompts(agentData));
|
|
271
|
+
const contextConfigId = typeof normalizedContextConfig.id === "string" ? normalizedContextConfig.id : "";
|
|
272
|
+
if (!contextConfigId || contextConfigRecordsById.has(contextConfigId)) continue;
|
|
273
|
+
const contextConfigFilePath = context.resolver.resolveOutputFilePath("contextConfigs", contextConfigId, join(context.paths.contextConfigsDir, `${contextConfigId}.ts`));
|
|
274
|
+
const credentialReferenceOverrides = collectContextConfigCredentialReferenceOverrides(context, normalizedContextConfig);
|
|
275
|
+
const credentialReferencePathOverrides = collectContextConfigCredentialReferencePathOverrides(context, normalizedContextConfig);
|
|
276
|
+
const headersReferenceOverride = collectContextConfigHeadersReferenceOverride(context, contextConfigId, contextConfigFilePath);
|
|
277
|
+
contextConfigRecordsById.set(contextConfigId, {
|
|
278
|
+
id: contextConfigId,
|
|
279
|
+
filePath: contextConfigFilePath,
|
|
280
|
+
payload: {
|
|
281
|
+
contextConfigId,
|
|
282
|
+
...normalizedContextConfig,
|
|
283
|
+
...headersReferenceOverride && { headersReference: headersReferenceOverride },
|
|
284
|
+
...credentialReferenceOverrides && { referenceOverrides: { credentialReferences: credentialReferenceOverrides } },
|
|
285
|
+
...credentialReferencePathOverrides && { referencePathOverrides: { credentialReferences: credentialReferencePathOverrides } }
|
|
286
|
+
}
|
|
287
|
+
});
|
|
288
|
+
}
|
|
289
|
+
return [...contextConfigRecordsById.values()];
|
|
290
|
+
},
|
|
291
|
+
generate: generateContextConfigDefinition
|
|
292
|
+
};
|
|
275
293
|
|
|
276
294
|
//#endregion
|
|
277
|
-
export { generateContextConfigDefinition };
|
|
295
|
+
export { generateContextConfigDefinition, task };
|
|
278
296
|
//# sourceMappingURL=context-config-generator.js.map
|
|
@@ -1 +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
|
+
{"version":3,"file":"context-config-generator.js","names":[],"sources":["../../../../src/commands/pull-v4/generators/context-config-generator.ts"],"sourcesContent":["import { join } from 'node:path';\nimport { FullProjectDefinitionSchema } from '@inkeep/agents-core';\nimport type { ObjectLiteralExpression, SourceFile } from 'ts-morph';\nimport { z } from 'zod';\nimport {\n applyPromptHeaderTemplateSchema,\n asRecord,\n collectHeaderTemplateVariablesFromAgentPrompts,\n} from '../collector-common';\nimport {\n collectContextConfigCredentialReferenceOverrides,\n collectContextConfigCredentialReferencePathOverrides,\n collectContextConfigHeadersReferenceOverride,\n} from '../collector-reference-helpers';\nimport type { GenerationTask } from '../generation-types';\nimport { addNamedImports, applyImportPlan, createImportPlan } from '../import-plan';\nimport { generateValidatedSourceFile } from '../simple-factory-generator';\nimport {\n addFactoryConfigVariable,\n addValueToObject,\n codeExpression,\n codeReference,\n convertJsonSchemaToZodSafe,\n createInMemoryProject,\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\ninterface NormalizedContextVariableEntry {\n referenceName: string;\n rawValue: unknown;\n fetchDefinitionData?: Record<string, unknown>;\n}\n\ntype NormalizedContextVariableMap = Record<string, NormalizedContextVariableEntry>;\n\nconst BaseContextConfigSchema = 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\nconst ContextConfigSchema = BaseContextConfigSchema.transform((data) => ({\n ...data,\n normalizedHeadersReference: extractHeadersReference(data.headers),\n normalizedContextVariables: normalizeContextVariables(data.contextVariables),\n}));\n\ntype ContextConfigInput = z.input<typeof ContextConfigSchema>;\ntype ContextConfigOutput = z.output<typeof ContextConfigSchema>;\n\nfunction normalizeContextVariables(\n contextVariables?: Record<string, unknown>\n): NormalizedContextVariableMap {\n if (!contextVariables) {\n return {};\n }\n\n const normalizedVariables: NormalizedContextVariableMap = {};\n for (const [key, value] of Object.entries(contextVariables)) {\n const referenceName = extractContextVariableReference(key, value);\n if (!referenceName) {\n continue;\n }\n\n normalizedVariables[key] = {\n referenceName,\n rawValue: value,\n ...(isPlainObject(value) && isFetchDefinitionData(value)\n ? { fetchDefinitionData: value }\n : {}),\n };\n }\n\n return normalizedVariables;\n}\n\nexport function generateContextConfigDefinition(data: ContextConfigInput): SourceFile {\n return generateValidatedSourceFile(data, {\n schema: ContextConfigSchema,\n importName: 'contextConfig',\n render(parsed) {\n const project = createInMemoryProject();\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) ?? parsed.normalizedHeadersReference;\n const templateHeaderVariables = collectTemplateHeaderVariables(\n parsed.normalizedContextVariables\n );\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.normalizedContextVariables);\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 const importPlan = createImportPlan();\n addNamedImports(importPlan, '@inkeep/agents-core', coreImports);\n\n const hasResponseSchemas = fetchDefinitions.some((definition) =>\n isPlainObject(definition.data.responseSchema)\n );\n if (shouldDefineHeadersInFile || hasResponseSchemas) {\n addNamedImports(importPlan, 'zod', 'z');\n }\n\n for (const [credentialId, credentialReferenceName] of credentialReferenceNames) {\n const credentialReferencePath =\n parsed.referencePathOverrides?.credentialReferences?.[credentialId] ?? credentialId;\n addNamedImports(\n importPlan,\n `../credentials/${credentialReferencePath}`,\n credentialReferenceName\n );\n }\n applyImportPlan(sourceFile, importPlan);\n if (shouldDefineHeadersInFile && headersReference && headersSchema) {\n const { configObject: headersObject } = addFactoryConfigVariable({\n sourceFile,\n isExported: true,\n importName: 'headers',\n variableName: headersReference,\n });\n\n addValueToObject(headersObject, 'schema', createSchemaExpression(headersSchema));\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 });\n}\n\nfunction writeContextConfig(\n configObject: ObjectLiteralExpression,\n data: ContextConfigOutput,\n headersReference?: string\n) {\n const contextConfig: Record<string, unknown> = {};\n if (data.id !== undefined) {\n contextConfig.id = data.id;\n }\n if (headersReference) {\n contextConfig.headers = codeReference(headersReference);\n }\n if (Object.keys(data.normalizedContextVariables).length > 0) {\n const contextVariables: Record<string, unknown> = {};\n\n for (const [key, value] of Object.entries(data.normalizedContextVariables)) {\n contextVariables[key] = codeReference(value.referenceName);\n }\n contextConfig.contextVariables = contextVariables;\n }\n\n for (const [key, value] of Object.entries(contextConfig)) {\n addValueToObject(configObject, key, value);\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(\n contextVariables?: NormalizedContextVariableMap\n): Array<{ key: string; variableName: string; data: Record<string, unknown> }> {\n if (!contextVariables || Object.keys(contextVariables).length === 0) {\n return [];\n }\n\n return Object.entries(contextVariables)\n .filter(([, value]) => Boolean(value.fetchDefinitionData))\n .map(([key, value]) => ({\n key,\n variableName: value.referenceName,\n data: value.fetchDefinitionData as Record<string, unknown>,\n }));\n}\n\nfunction writeFetchDefinition(\n configObject: ObjectLiteralExpression,\n fetchDefinitionData: unknown,\n credentialReferenceNames?: Map<string, string>,\n headersReference?: string\n) {\n const {\n contextConfigId,\n responseSchema,\n credentialReferenceId,\n normalizedHeadersReference: _normalizedHeadersReference,\n normalizedContextVariables: _normalizedContextVariables,\n ...rest\n } = isPlainObject(fetchDefinitionData) ? fetchDefinitionData : {};\n const normalizedRest = rewriteHeaderTemplates(rest, headersReference);\n const fetchDefinition: Record<string, unknown> = {};\n for (const [k, v] of Object.entries({\n id: contextConfigId,\n ...normalizedRest,\n })) {\n if (v !== null) {\n fetchDefinition[k] = v;\n }\n }\n if (responseSchema) {\n fetchDefinition.responseSchema = createSchemaExpression(\n responseSchema as Record<string, unknown>\n );\n }\n\n if (\n typeof credentialReferenceId === 'string' &&\n credentialReferenceNames?.has(credentialReferenceId)\n ) {\n fetchDefinition.credentialReference = codeReference(\n credentialReferenceNames.get(credentialReferenceId) as string\n );\n } else if (typeof credentialReferenceId === 'string') {\n fetchDefinition.credentialReferenceId = credentialReferenceId;\n }\n\n for (const [key, value] of Object.entries(fetchDefinition)) {\n addValueToObject(configObject, key, value);\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 const importPlan = createImportPlan();\n addNamedImports(importPlan, '@inkeep/agents-core', importName);\n addNamedImports(importPlan, 'zod', 'z');\n applyImportPlan(sourceFile, importPlan);\n\n const headersVarName = toContextConfigVariableName(data.contextConfigId);\n const { configObject } = addFactoryConfigVariable({\n sourceFile,\n importName,\n variableName: headersVarName,\n });\n\n addValueToObject(configObject, 'schema', createSchemaExpression(data.schema));\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 const importPlan = createImportPlan();\n addNamedImports(importPlan, '@inkeep/agents-core', importName);\n\n if (isPlainObject(data.responseSchema)) {\n addNamedImports(importPlan, 'zod', 'z');\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 addNamedImports(\n importPlan,\n `../credentials/${credentialReferencePath}`,\n credentialReferenceName\n );\n }\n applyImportPlan(sourceFile, importPlan);\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 createSchemaExpression(schema: Record<string, unknown>) {\n return codeExpression(convertJsonSchemaToZod(schema));\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(\n contextVariables?: NormalizedContextVariableMap\n): Set<string> {\n const variables = new Set<string>();\n for (const value of Object.values(contextVariables ?? {})) {\n collectTemplateHeaderVariablesFromValue(value.rawValue, variables);\n }\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\nexport const task = {\n type: 'context-config',\n collect(context) {\n if (!context.project.agents) {\n return [];\n }\n\n const contextConfigRecordsById = new Map<\n string,\n ReturnType<\n GenerationTask<Parameters<typeof generateContextConfigDefinition>[0]>['collect']\n >[number]\n >();\n\n for (const agentId of context.completeAgentIds) {\n const agentData = context.project.agents[agentId];\n const contextConfig = agentData ? asRecord(agentData.contextConfig) : undefined;\n if (!agentData || !contextConfig) {\n continue;\n }\n\n const normalizedContextConfig = applyPromptHeaderTemplateSchema(\n contextConfig,\n collectHeaderTemplateVariablesFromAgentPrompts(agentData)\n );\n const contextConfigId =\n typeof normalizedContextConfig.id === 'string' ? normalizedContextConfig.id : '';\n if (!contextConfigId || contextConfigRecordsById.has(contextConfigId)) {\n continue;\n }\n\n const contextConfigFilePath = context.resolver.resolveOutputFilePath(\n 'contextConfigs',\n contextConfigId,\n join(context.paths.contextConfigsDir, `${contextConfigId}.ts`)\n );\n const credentialReferenceOverrides = collectContextConfigCredentialReferenceOverrides(\n context,\n normalizedContextConfig\n );\n const credentialReferencePathOverrides = collectContextConfigCredentialReferencePathOverrides(\n context,\n normalizedContextConfig\n );\n const headersReferenceOverride = collectContextConfigHeadersReferenceOverride(\n context,\n contextConfigId,\n contextConfigFilePath\n );\n\n contextConfigRecordsById.set(contextConfigId, {\n id: contextConfigId,\n filePath: contextConfigFilePath,\n payload: {\n contextConfigId,\n ...normalizedContextConfig,\n ...(headersReferenceOverride && {\n headersReference: headersReferenceOverride,\n }),\n ...(credentialReferenceOverrides && {\n referenceOverrides: {\n credentialReferences: credentialReferenceOverrides,\n },\n }),\n ...(credentialReferencePathOverrides && {\n referencePathOverrides: {\n credentialReferences: credentialReferencePathOverrides,\n },\n }),\n } as Parameters<typeof generateContextConfigDefinition>[0],\n });\n }\n\n return [...contextConfigRecordsById.values()];\n },\n generate: generateContextConfigDefinition,\n} satisfies GenerationTask<Parameters<typeof generateContextConfigDefinition>[0]>;\n"],"mappings":"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"}
|
|
@@ -1,6 +1,10 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { toCredentialReferenceName } from "../utils/naming.js";
|
|
2
|
+
import "../utils/index.js";
|
|
3
|
+
import { buildSequentialNameFileNames } from "../generation-resolver.js";
|
|
4
|
+
import { generateSimpleFactoryDefinition } from "../simple-factory-generator.js";
|
|
2
5
|
import { FullProjectDefinitionSchema } from "@inkeep/agents-core";
|
|
3
6
|
import { z } from "zod";
|
|
7
|
+
import { join } from "node:path";
|
|
4
8
|
|
|
5
9
|
//#region src/commands/pull-v4/generators/credential-generator.ts
|
|
6
10
|
const MySchema = FullProjectDefinitionSchema.shape.credentialReferences.unwrap().valueType.omit({
|
|
@@ -14,21 +18,39 @@ const CredentialSchema = z.strictObject({
|
|
|
14
18
|
...MySchema.shape
|
|
15
19
|
});
|
|
16
20
|
function generateCredentialDefinition({ tenantId, id, projectId, createdBy, createdAt, updatedAt, toolId, userId, ...data }) {
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
21
|
+
return generateSimpleFactoryDefinition(data, {
|
|
22
|
+
schema: CredentialSchema,
|
|
23
|
+
factory: {
|
|
24
|
+
importName: "credential",
|
|
25
|
+
variableName: (parsed) => toCredentialReferenceName(parsed.name)
|
|
26
|
+
},
|
|
27
|
+
buildConfig(parsed) {
|
|
28
|
+
const { credentialId, ...rest } = parsed;
|
|
29
|
+
return {
|
|
30
|
+
id: credentialId,
|
|
31
|
+
...rest
|
|
32
|
+
};
|
|
33
|
+
}
|
|
23
34
|
});
|
|
24
|
-
const { credentialId, ...rest } = parsed;
|
|
25
|
-
for (const [k, v] of Object.entries({
|
|
26
|
-
id: credentialId,
|
|
27
|
-
...rest
|
|
28
|
-
})) addValueToObject(configObject, k, v);
|
|
29
|
-
return sourceFile;
|
|
30
35
|
}
|
|
36
|
+
const task = {
|
|
37
|
+
type: "credential",
|
|
38
|
+
collect(context) {
|
|
39
|
+
if (!context.project.credentialReferences) return [];
|
|
40
|
+
const credentialEntries = Object.entries(context.project.credentialReferences);
|
|
41
|
+
const fileNamesByCredentialId = buildSequentialNameFileNames(credentialEntries);
|
|
42
|
+
return credentialEntries.map(([credentialId, credentialData]) => ({
|
|
43
|
+
id: credentialId,
|
|
44
|
+
filePath: context.resolver.resolveOutputFilePath("credentials", credentialId, join(context.paths.credentialsDir, fileNamesByCredentialId[credentialId])),
|
|
45
|
+
payload: {
|
|
46
|
+
credentialId,
|
|
47
|
+
...credentialData
|
|
48
|
+
}
|
|
49
|
+
}));
|
|
50
|
+
},
|
|
51
|
+
generate: generateCredentialDefinition
|
|
52
|
+
};
|
|
31
53
|
|
|
32
54
|
//#endregion
|
|
33
|
-
export { generateCredentialDefinition };
|
|
55
|
+
export { generateCredentialDefinition, task };
|
|
34
56
|
//# sourceMappingURL=credential-generator.js.map
|
|
@@ -1 +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 {
|
|
1
|
+
{"version":3,"file":"credential-generator.js","names":[],"sources":["../../../../src/commands/pull-v4/generators/credential-generator.ts"],"sourcesContent":["import { join } from 'node:path';\nimport { FullProjectDefinitionSchema } from '@inkeep/agents-core';\nimport type { SourceFile } from 'ts-morph';\nimport { z } from 'zod';\nimport { buildSequentialNameFileNames } from '../generation-resolver';\nimport type { GenerationTask } from '../generation-types';\nimport { generateSimpleFactoryDefinition } from '../simple-factory-generator';\nimport { 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 return generateSimpleFactoryDefinition(data, {\n schema: CredentialSchema,\n factory: {\n importName: 'credential',\n variableName: (parsed) => toCredentialReferenceName(parsed.name),\n },\n buildConfig(parsed) {\n const { credentialId, ...rest } = parsed;\n return {\n id: credentialId,\n ...rest,\n };\n },\n });\n}\n\nexport const task = {\n type: 'credential',\n collect(context) {\n if (!context.project.credentialReferences) {\n return [];\n }\n\n const credentialEntries = Object.entries(context.project.credentialReferences);\n const fileNamesByCredentialId = buildSequentialNameFileNames(credentialEntries);\n\n return credentialEntries.map(([credentialId, credentialData]) => ({\n id: credentialId,\n filePath: context.resolver.resolveOutputFilePath(\n 'credentials',\n credentialId,\n join(context.paths.credentialsDir, fileNamesByCredentialId[credentialId])\n ),\n payload: {\n credentialId,\n ...credentialData,\n } as Parameters<typeof generateCredentialDefinition>[0],\n }));\n },\n generate: generateCredentialDefinition,\n} satisfies GenerationTask<Parameters<typeof generateCredentialDefinition>[0]>;\n"],"mappings":";;;;;;;;;AASA,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;AACxD,QAAO,gCAAgC,MAAM;EAC3C,QAAQ;EACR,SAAS;GACP,YAAY;GACZ,eAAe,WAAW,0BAA0B,OAAO,KAAK;GACjE;EACD,YAAY,QAAQ;GAClB,MAAM,EAAE,cAAc,GAAG,SAAS;AAClC,UAAO;IACL,IAAI;IACJ,GAAG;IACJ;;EAEJ,CAAC;;AAGJ,MAAa,OAAO;CAClB,MAAM;CACN,QAAQ,SAAS;AACf,MAAI,CAAC,QAAQ,QAAQ,qBACnB,QAAO,EAAE;EAGX,MAAM,oBAAoB,OAAO,QAAQ,QAAQ,QAAQ,qBAAqB;EAC9E,MAAM,0BAA0B,6BAA6B,kBAAkB;AAE/E,SAAO,kBAAkB,KAAK,CAAC,cAAc,qBAAqB;GAChE,IAAI;GACJ,UAAU,QAAQ,SAAS,sBACzB,eACA,cACA,KAAK,QAAQ,MAAM,gBAAgB,wBAAwB,cAAc,CAC1E;GACD,SAAS;IACP;IACA,GAAG;IACJ;GACF,EAAE;;CAEL,UAAU;CACX"}
|