@inkeep/agents-cli 0.51.0 → 0.53.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.
Files changed (76) hide show
  1. package/dist/agents-cli/package.js +6 -0
  2. package/dist/commands/config.js +1 -1
  3. package/dist/commands/dev.js +1 -1
  4. package/dist/commands/init.js +1 -1
  5. package/dist/commands/{pull-v3 → pull-v4}/component-parser.js +6 -12
  6. package/dist/commands/{pull-v3/utils → pull-v4}/component-registry.js +1 -1
  7. package/dist/commands/pull-v4/generators/agent-generator.js +258 -0
  8. package/dist/commands/pull-v4/generators/artifact-component-generator.js +69 -0
  9. package/dist/commands/pull-v4/generators/context-config-generator.js +264 -0
  10. package/dist/commands/pull-v4/generators/credential-generator.js +30 -0
  11. package/dist/commands/pull-v4/generators/data-component-generator.js +50 -0
  12. package/dist/commands/pull-v4/generators/environment-generator.js +123 -0
  13. package/dist/commands/pull-v4/generators/external-agent-generator.js +56 -0
  14. package/dist/commands/pull-v4/generators/function-tool-generator.js +48 -0
  15. package/dist/commands/pull-v4/generators/mcp-tool-generator.js +91 -0
  16. package/dist/commands/pull-v4/generators/project-generator.js +125 -0
  17. package/dist/commands/{pull-v3/components → pull-v4/generators}/skill-generator.js +1 -1
  18. package/dist/commands/pull-v4/generators/status-component-generator.js +35 -0
  19. package/dist/commands/pull-v4/generators/sub-agent-generator.js +269 -0
  20. package/dist/commands/pull-v4/generators/trigger-generator.js +58 -0
  21. package/dist/commands/pull-v4/introspect/index.js +365 -0
  22. package/dist/commands/pull-v4/introspect/test-helpers.js +143 -0
  23. package/dist/commands/pull-v4/introspect-generator.js +706 -0
  24. package/dist/commands/pull-v4/module-merge.js +405 -0
  25. package/dist/commands/pull-v4/utils.js +235 -0
  26. package/dist/commands/push.js +1 -1
  27. package/dist/commands/update.js +2 -2
  28. package/dist/index.js +18 -44
  29. package/dist/node_modules/.pnpm/diff@8.0.3/node_modules/diff/libesm/diff/array.js +18 -0
  30. package/dist/node_modules/.pnpm/diff@8.0.3/node_modules/diff/libesm/diff/base.js +180 -0
  31. package/dist/node_modules/.pnpm/diff@8.0.3/node_modules/diff/libesm/diff/character.js +8 -0
  32. package/dist/node_modules/.pnpm/diff@8.0.3/node_modules/diff/libesm/diff/css.js +12 -0
  33. package/dist/node_modules/.pnpm/diff@8.0.3/node_modules/diff/libesm/diff/json.js +60 -0
  34. package/dist/node_modules/.pnpm/diff@8.0.3/node_modules/diff/libesm/diff/line.js +37 -0
  35. package/dist/node_modules/.pnpm/diff@8.0.3/node_modules/diff/libesm/diff/sentence.js +31 -0
  36. package/dist/node_modules/.pnpm/diff@8.0.3/node_modules/diff/libesm/diff/word.js +118 -0
  37. package/dist/node_modules/.pnpm/diff@8.0.3/node_modules/diff/libesm/index.js +11 -0
  38. package/dist/node_modules/.pnpm/diff@8.0.3/node_modules/diff/libesm/patch/create.js +141 -0
  39. package/dist/node_modules/.pnpm/diff@8.0.3/node_modules/diff/libesm/util/string.js +63 -0
  40. package/dist/utils/ci-environment.js +1 -1
  41. package/dist/utils/config.js +1 -1
  42. package/dist/utils/environment-loader.js +1 -1
  43. package/dist/utils/file-finder.js +1 -1
  44. package/dist/utils/mcp-runner.js +1 -1
  45. package/dist/utils/profile-config.js +1 -1
  46. package/dist/utils/profiles/profile-manager.js +1 -1
  47. package/dist/utils/project-directory.js +1 -1
  48. package/dist/utils/project-loader.js +1 -1
  49. package/dist/utils/version-check.js +6 -15
  50. package/package.json +5 -7
  51. package/dist/commands/pull-v3/component-updater.js +0 -768
  52. package/dist/commands/pull-v3/components/agent-generator.js +0 -255
  53. package/dist/commands/pull-v3/components/artifact-component-generator.js +0 -143
  54. package/dist/commands/pull-v3/components/context-config-generator.js +0 -190
  55. package/dist/commands/pull-v3/components/credential-generator.js +0 -89
  56. package/dist/commands/pull-v3/components/data-component-generator.js +0 -102
  57. package/dist/commands/pull-v3/components/environment-generator.js +0 -173
  58. package/dist/commands/pull-v3/components/external-agent-generator.js +0 -75
  59. package/dist/commands/pull-v3/components/function-tool-generator.js +0 -92
  60. package/dist/commands/pull-v3/components/mcp-tool-generator.js +0 -86
  61. package/dist/commands/pull-v3/components/project-generator.js +0 -157
  62. package/dist/commands/pull-v3/components/status-component-generator.js +0 -92
  63. package/dist/commands/pull-v3/components/sub-agent-generator.js +0 -295
  64. package/dist/commands/pull-v3/components/trigger-generator.js +0 -185
  65. package/dist/commands/pull-v3/index.js +0 -510
  66. package/dist/commands/pull-v3/introspect-generator.js +0 -286
  67. package/dist/commands/pull-v3/llm-content-merger.js +0 -192
  68. package/dist/commands/pull-v3/new-component-generator.js +0 -279
  69. package/dist/commands/pull-v3/project-comparator.js +0 -914
  70. package/dist/commands/pull-v3/project-index-generator.js +0 -32
  71. package/dist/commands/pull-v3/project-validator.js +0 -358
  72. package/dist/commands/pull-v3/targeted-typescript-placeholders.js +0 -173
  73. package/dist/commands/pull-v3/utils/component-tracker.js +0 -165
  74. package/dist/commands/pull-v3/utils/generator-utils.js +0 -146
  75. package/dist/commands/pull-v3/utils/model-provider-detector.js +0 -50
  76. package/dist/utils/url.js +0 -26
@@ -0,0 +1,30 @@
1
+ import { addValueToObject, createFactoryDefinition, toCamelCase } from "../utils.js";
2
+ import { z } from "zod";
3
+
4
+ //#region src/commands/pull-v4/generators/credential-generator.ts
5
+ const CredentialSchema = z.object({
6
+ credentialId: z.string().nonempty(),
7
+ name: z.string().nonempty(),
8
+ type: z.string().nonempty(),
9
+ credentialStoreId: z.string().nonempty(),
10
+ description: z.string().optional(),
11
+ retrievalParams: z.unknown().optional()
12
+ });
13
+ function generateCredentialDefinition(data) {
14
+ const result = CredentialSchema.safeParse(data);
15
+ if (!result.success) throw new Error(`Validation failed for credential:\n${z.prettifyError(result.error)}`);
16
+ const parsed = result.data;
17
+ const { sourceFile, configObject } = createFactoryDefinition({
18
+ importName: "credential",
19
+ variableName: toCamelCase(parsed.credentialId)
20
+ });
21
+ const { credentialId, ...rest } = parsed;
22
+ for (const [k, v] of Object.entries({
23
+ id: credentialId,
24
+ ...rest
25
+ })) addValueToObject(configObject, k, v);
26
+ return sourceFile;
27
+ }
28
+
29
+ //#endregion
30
+ export { generateCredentialDefinition };
@@ -0,0 +1,50 @@
1
+ import { addStringProperty, addValueToObject, convertJsonSchemaToZodSafe, createFactoryDefinition, toCamelCase } from "../utils.js";
2
+ import { z } from "zod";
3
+
4
+ //#region src/commands/pull-v4/generators/data-component-generator.ts
5
+ const DataComponentSchema = z.object({
6
+ dataComponentId: z.string().nonempty(),
7
+ name: z.string().nonempty(),
8
+ description: z.string().nullable().optional(),
9
+ props: z.unknown().optional(),
10
+ schema: z.unknown().optional(),
11
+ render: z.looseObject({
12
+ component: z.string().optional(),
13
+ mockData: z.looseObject({}).optional()
14
+ }).nullable().optional()
15
+ });
16
+ function generateDataComponentDefinition(data) {
17
+ const result = DataComponentSchema.safeParse(data);
18
+ if (!result.success) throw new Error(`Validation failed for data component:\n${z.prettifyError(result.error)}`);
19
+ const parsed = result.data;
20
+ const props = parsed.props !== void 0 ? parsed.props : parsed.schema;
21
+ const { sourceFile, configObject } = createFactoryDefinition({
22
+ importName: "dataComponent",
23
+ variableName: toCamelCase(parsed.dataComponentId)
24
+ });
25
+ if (props !== void 0) sourceFile.addImportDeclaration({
26
+ namedImports: ["z"],
27
+ moduleSpecifier: "zod"
28
+ });
29
+ writeDataComponentConfig(configObject, parsed, props);
30
+ return sourceFile;
31
+ }
32
+ function writeDataComponentConfig(configObject, data, props) {
33
+ addStringProperty(configObject, "id", data.dataComponentId);
34
+ addStringProperty(configObject, "name", data.name);
35
+ if (typeof data.description === "string") addStringProperty(configObject, "description", data.description);
36
+ if (props !== void 0) configObject.addPropertyAssignment({
37
+ name: "props",
38
+ initializer: convertJsonSchemaToZodSafe(props)
39
+ });
40
+ if (data.render) addRenderProperty(configObject, data.render);
41
+ }
42
+ function addRenderProperty(configObject, render) {
43
+ if (render.component) addValueToObject(configObject, "render", {
44
+ component: render.component,
45
+ mockData: render.mockData
46
+ });
47
+ }
48
+
49
+ //#endregion
50
+ export { generateDataComponentDefinition };
@@ -0,0 +1,123 @@
1
+ import { addStringProperty, createFactoryDefinition, formatInlineLiteral, formatPropertyName, isPlainObject } from "../utils.js";
2
+ import { z } from "zod";
3
+ import { SyntaxKind } from "ts-morph";
4
+
5
+ //#region src/commands/pull-v4/generators/environment-generator.ts
6
+ const EnvironmentSettingsSchema = z.looseObject({ credentials: z.record(z.string(), z.unknown()).nullable().optional() });
7
+ 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
+ function generateEnvironmentSettingsDefinition(environmentName, environmentData) {
21
+ const environmentNameResult = z.string().nonempty().safeParse(environmentName);
22
+ if (!environmentNameResult.success) throw new Error(`Validation failed for environment name:\n${z.prettifyError(environmentNameResult.error)}`);
23
+ const result = EnvironmentSettingsSchema.safeParse(environmentData);
24
+ if (!result.success) throw new Error(`Validation failed for environment settings:\n${z.prettifyError(result.error)}`);
25
+ const parsed = result.data;
26
+ const { sourceFile, configObject } = createFactoryDefinition({
27
+ importName: "registerEnvironmentSettings",
28
+ variableName: environmentNameResult.data
29
+ });
30
+ const hasCredentialStoreType = needsCredentialStoreType(parsed);
31
+ if (hasCredentialStoreType) sourceFile.addImportDeclaration({
32
+ namedImports: ["CredentialStoreType"],
33
+ moduleSpecifier: "@inkeep/agents-core"
34
+ });
35
+ addCredentialsProperty(configObject, parsed.credentials, hasCredentialStoreType);
36
+ return sourceFile;
37
+ }
38
+ function generateEnvironmentIndexDefinition(environments) {
39
+ const result = EnvironmentIndexSchema.safeParse(environments);
40
+ if (!result.success) throw new Error(`Validation failed for environments index:\n${z.prettifyError(result.error)}`);
41
+ const { sourceFile, configObject } = createFactoryDefinition({
42
+ importName: "createEnvironmentSettings",
43
+ variableName: "envSettings"
44
+ });
45
+ for (const environmentName of result.data) sourceFile.addImportDeclaration({
46
+ namedImports: [environmentName],
47
+ moduleSpecifier: `./${environmentName}.env`
48
+ });
49
+ for (const environmentName of result.data) configObject.addShorthandPropertyAssignment({ name: environmentName });
50
+ return sourceFile;
51
+ }
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
+
122
+ //#endregion
123
+ export { generateEnvironmentIndexDefinition, generateEnvironmentIndexFile, generateEnvironmentIndexImports, generateEnvironmentSettingsDefinition, generateEnvironmentSettingsFile, generateEnvironmentSettingsImports };
@@ -0,0 +1,56 @@
1
+ import { addStringProperty, createFactoryDefinition, toCamelCase } from "../utils.js";
2
+ import { z } from "zod";
3
+ import { SyntaxKind } from "ts-morph";
4
+
5
+ //#region src/commands/pull-v4/generators/external-agent-generator.ts
6
+ const ExternalAgentSchema = z.looseObject({
7
+ externalAgentId: z.string().nonempty(),
8
+ name: z.string().nonempty(),
9
+ description: z.string().nullable().optional(),
10
+ baseUrl: z.string().nonempty(),
11
+ credentialReference: z.union([z.string(), z.looseObject({
12
+ id: z.string().optional(),
13
+ name: z.string().optional(),
14
+ description: z.string().optional()
15
+ })]).optional()
16
+ });
17
+ function generateExternalAgentDefinition(data) {
18
+ const result = ExternalAgentSchema.safeParse(data);
19
+ if (!result.success) throw new Error(`Validation failed for external agent:\n${z.prettifyError(result.error)}`);
20
+ const parsed = result.data;
21
+ const { sourceFile, configObject } = createFactoryDefinition({
22
+ importName: "externalAgent",
23
+ variableName: toCamelCase(parsed.externalAgentId)
24
+ });
25
+ if (typeof parsed.credentialReference === "string") sourceFile.addImportDeclaration({
26
+ namedImports: [toCamelCase(parsed.credentialReference)],
27
+ moduleSpecifier: `../credentials/${parsed.credentialReference}`
28
+ });
29
+ writeExternalAgentConfig(configObject, parsed);
30
+ return sourceFile;
31
+ }
32
+ function writeExternalAgentConfig(configObject, data) {
33
+ addStringProperty(configObject, "id", data.externalAgentId);
34
+ addStringProperty(configObject, "name", data.name);
35
+ if (data.description !== null && data.description !== void 0) addStringProperty(configObject, "description", data.description);
36
+ else addStringProperty(configObject, "description", `External agent ${data.externalAgentId}`);
37
+ addStringProperty(configObject, "baseUrl", data.baseUrl);
38
+ if (typeof data.credentialReference === "string") {
39
+ configObject.addPropertyAssignment({
40
+ name: "credentialReference",
41
+ initializer: toCamelCase(data.credentialReference)
42
+ });
43
+ return;
44
+ }
45
+ if (!data.credentialReference) return;
46
+ const credentialReferenceObject = configObject.addPropertyAssignment({
47
+ name: "credentialReference",
48
+ initializer: "{}"
49
+ }).getInitializerIfKindOrThrow(SyntaxKind.ObjectLiteralExpression);
50
+ if (data.credentialReference.id !== void 0) addStringProperty(credentialReferenceObject, "id", data.credentialReference.id);
51
+ if (data.credentialReference.name !== void 0) addStringProperty(credentialReferenceObject, "name", data.credentialReference.name);
52
+ if (data.credentialReference.description !== void 0) addStringProperty(credentialReferenceObject, "description", data.credentialReference.description);
53
+ }
54
+
55
+ //#endregion
56
+ export { generateExternalAgentDefinition };
@@ -0,0 +1,48 @@
1
+ import { addValueToObject, createFactoryDefinition, toCamelCase } from "../utils.js";
2
+ import { z } from "zod";
3
+
4
+ //#region src/commands/pull-v4/generators/function-tool-generator.ts
5
+ const FunctionToolSchema = z.looseObject({
6
+ functionToolId: z.string().nonempty(),
7
+ name: z.string().nonempty(),
8
+ description: z.string().optional(),
9
+ inputSchema: z.unknown().optional(),
10
+ schema: z.unknown().optional(),
11
+ executeCode: z.string().optional(),
12
+ execute: z.string().optional()
13
+ }).superRefine((value, context) => {
14
+ if (value.inputSchema === void 0 && value.schema === void 0) context.addIssue({
15
+ code: "custom",
16
+ message: "inputSchema is required",
17
+ path: ["inputSchema"]
18
+ });
19
+ if (value.executeCode === void 0 && value.execute === void 0) context.addIssue({
20
+ code: "custom",
21
+ message: "executeCode is required",
22
+ path: ["executeCode"]
23
+ });
24
+ });
25
+ function generateFunctionToolDefinition(data) {
26
+ const result = FunctionToolSchema.safeParse(data);
27
+ if (!result.success) throw new Error(`Validation failed for function tool:\n${z.prettifyError(result.error)}`);
28
+ const parsed = result.data;
29
+ const { sourceFile, configObject } = createFactoryDefinition({
30
+ importName: "functionTool",
31
+ variableName: toCamelCase(parsed.functionToolId)
32
+ });
33
+ writeFunctionToolConfig(configObject, parsed);
34
+ return sourceFile;
35
+ }
36
+ function writeFunctionToolConfig(configObject, { functionToolId, executeCode, inputSchema, schema, ...rest }) {
37
+ for (const [k, v] of Object.entries({
38
+ ...rest,
39
+ inputSchema: inputSchema ?? schema
40
+ })) addValueToObject(configObject, k, v);
41
+ if (executeCode) configObject.addPropertyAssignment({
42
+ name: "execute",
43
+ initializer: executeCode
44
+ });
45
+ }
46
+
47
+ //#endregion
48
+ export { generateFunctionToolDefinition };
@@ -0,0 +1,91 @@
1
+ import { addValueToObject, createFactoryDefinition, formatInlineLiteral, formatStringLiteral, toCamelCase } from "../utils.js";
2
+ import { z } from "zod";
3
+
4
+ //#region src/commands/pull-v4/generators/mcp-tool-generator.ts
5
+ const McpToolSchema = z.object({
6
+ mcpToolId: z.string().nonempty(),
7
+ name: z.string().nonempty(),
8
+ description: z.string().nullable().optional(),
9
+ config: z.looseObject({ mcp: z.looseObject({
10
+ server: z.looseObject({ url: z.string().optional() }).optional(),
11
+ transport: z.unknown().optional(),
12
+ activeTools: z.array(z.unknown()).optional()
13
+ }).optional() }).optional(),
14
+ serverUrl: z.string().optional(),
15
+ transport: z.object({ type: z.string() }).optional(),
16
+ activeTools: z.array(z.unknown()).optional(),
17
+ imageUrl: z.string().nullish(),
18
+ headers: z.unknown().optional(),
19
+ credential: z.unknown().optional(),
20
+ credentialReferenceId: z.string().nullish()
21
+ }).superRefine((value, context) => {
22
+ if (!resolveServerUrl(value)) context.addIssue({
23
+ code: "custom",
24
+ message: "serverUrl is required (from config.mcp.server.url or serverUrl)",
25
+ path: ["serverUrl"]
26
+ });
27
+ });
28
+ function generateMcpToolDefinition(data) {
29
+ const result = McpToolSchema.safeParse(data);
30
+ if (!result.success) throw new Error(`Validation failed for MCP tool:\n${z.prettifyError(result.error)}`);
31
+ const parsed = result.data;
32
+ const { sourceFile, configObject } = createFactoryDefinition({
33
+ importName: "mcpTool",
34
+ variableName: toCamelCase(parsed.mcpToolId)
35
+ });
36
+ if (parsed.credentialReferenceId && parsed.credential === void 0) sourceFile.addImportDeclaration({
37
+ namedImports: ["envSettings"],
38
+ moduleSpecifier: "../environments"
39
+ });
40
+ writeMcpToolConfig(configObject, parsed);
41
+ return sourceFile;
42
+ }
43
+ function writeMcpToolConfig(configObject, { mcpToolId, description, serverUrl, config, transport, activeTools, credential, credentialReferenceId, ...rest }) {
44
+ for (const [k, v] of Object.entries({
45
+ id: mcpToolId,
46
+ ...rest,
47
+ description: description ?? void 0,
48
+ serverUrl: resolveServerUrl({
49
+ config,
50
+ serverUrl
51
+ }),
52
+ transport: resolveTransport({
53
+ config,
54
+ transport
55
+ }),
56
+ activeTools: resolveActiveTools({
57
+ config,
58
+ activeTools
59
+ })
60
+ })) addValueToObject(configObject, k, v);
61
+ if (credential !== void 0 && credential !== null) {
62
+ if (typeof credential === "string") {
63
+ configObject.addPropertyAssignment({
64
+ name: "credential",
65
+ initializer: credential
66
+ });
67
+ return;
68
+ }
69
+ configObject.addPropertyAssignment({
70
+ name: "credential",
71
+ initializer: formatInlineLiteral(credential)
72
+ });
73
+ return;
74
+ }
75
+ if (credentialReferenceId) configObject.addPropertyAssignment({
76
+ name: "credential",
77
+ initializer: `envSettings.getEnvironmentCredential(${formatStringLiteral(credentialReferenceId)})`
78
+ });
79
+ }
80
+ function resolveServerUrl(data) {
81
+ return data.config?.mcp?.server?.url ?? data.serverUrl;
82
+ }
83
+ function resolveTransport(data) {
84
+ return data.config?.mcp?.transport ?? data.transport;
85
+ }
86
+ function resolveActiveTools(data) {
87
+ return data.config?.mcp?.activeTools ?? data.activeTools;
88
+ }
89
+
90
+ //#endregion
91
+ export { generateMcpToolDefinition };
@@ -0,0 +1,125 @@
1
+ import { addReferenceGetterProperty, addValueToObject, convertNullToUndefined, createFactoryDefinition, createUniqueReferenceName, formatStringLiteral, hasReferences, resolveReferenceName, toCamelCase } from "../utils.js";
2
+ import { z } from "zod";
3
+
4
+ //#region src/commands/pull-v4/generators/project-generator.ts
5
+ const ReferenceNameByIdSchema = z.record(z.string(), z.string().nonempty());
6
+ const ReferenceOverridesSchema = z.object({
7
+ agents: ReferenceNameByIdSchema.optional(),
8
+ tools: ReferenceNameByIdSchema.optional(),
9
+ externalAgents: ReferenceNameByIdSchema.optional(),
10
+ dataComponents: ReferenceNameByIdSchema.optional(),
11
+ artifactComponents: ReferenceNameByIdSchema.optional(),
12
+ credentialReferences: ReferenceNameByIdSchema.optional()
13
+ });
14
+ const ProjectSchema = z.looseObject({
15
+ projectId: z.string().nonempty(),
16
+ name: z.string().nonempty(),
17
+ description: z.string().optional(),
18
+ models: z.looseObject({
19
+ base: z.looseObject({ model: z.string().nonempty() }),
20
+ structuredOutput: z.looseObject({}).optional(),
21
+ summarizer: z.looseObject({}).optional()
22
+ }),
23
+ stopWhen: z.preprocess(convertNullToUndefined, z.strictObject({
24
+ transferCountIs: z.int().optional(),
25
+ stepCountIs: z.int().optional()
26
+ }).optional()),
27
+ skills: z.array(z.string()).optional(),
28
+ agents: z.array(z.string()).optional(),
29
+ tools: z.array(z.string()).optional(),
30
+ externalAgents: z.array(z.string()).optional(),
31
+ dataComponents: z.array(z.string()).optional(),
32
+ artifactComponents: z.array(z.string()).optional(),
33
+ credentialReferences: z.array(z.string()).optional(),
34
+ referenceOverrides: ReferenceOverridesSchema.optional()
35
+ });
36
+ function generateProjectDefinition(data) {
37
+ const result = ProjectSchema.safeParse(data);
38
+ if (!result.success) throw new Error(`Validation failed for project:
39
+ ${z.prettifyError(result.error)}`);
40
+ const parsed = result.data;
41
+ const projectVariableName = toCamelCase(parsed.projectId);
42
+ const { sourceFile, configObject } = createFactoryDefinition({
43
+ importName: "project",
44
+ variableName: projectVariableName
45
+ });
46
+ const reservedReferenceNames = new Set([projectVariableName]);
47
+ if (hasReferences(parsed.skills)) {
48
+ sourceFile.getImportDeclarationOrThrow("@inkeep/agents-sdk").addNamedImport("loadSkills");
49
+ sourceFile.addImportDeclaration({
50
+ defaultImport: "path",
51
+ moduleSpecifier: "node:path"
52
+ });
53
+ }
54
+ const { projectId, skills, agents, tools, externalAgents, dataComponents, artifactComponents, credentialReferences, referenceOverrides, ...rest } = parsed;
55
+ for (const [key, value] of Object.entries({
56
+ id: projectId,
57
+ ...rest
58
+ })) addValueToObject(configObject, key, value);
59
+ if (hasReferences(skills)) configObject.addPropertyAssignment({
60
+ name: "skills",
61
+ initializer: `() => loadSkills(path.join(${formatStringLiteral(projectId)}, 'skills'))`
62
+ });
63
+ if (hasReferences(agents)) {
64
+ const resolvedReferences = createResolvedReferences(agents, referenceOverrides?.agents, reservedReferenceNames, "Agent");
65
+ addReferenceImports(sourceFile, resolvedReferences, "./agents");
66
+ addReferenceGetterProperty(configObject, "agents", toReferenceNames(resolvedReferences));
67
+ }
68
+ if (hasReferences(tools)) {
69
+ const resolvedReferences = createResolvedReferences(tools, referenceOverrides?.tools, reservedReferenceNames, "Tool");
70
+ addReferenceImports(sourceFile, resolvedReferences, "./tools");
71
+ addReferenceGetterProperty(configObject, "tools", toReferenceNames(resolvedReferences));
72
+ }
73
+ if (hasReferences(externalAgents)) {
74
+ const resolvedReferences = createResolvedReferences(externalAgents, referenceOverrides?.externalAgents, reservedReferenceNames, "ExternalAgent");
75
+ addReferenceImports(sourceFile, resolvedReferences, "./external-agents");
76
+ addReferenceGetterProperty(configObject, "externalAgents", toReferenceNames(resolvedReferences));
77
+ }
78
+ if (hasReferences(dataComponents)) {
79
+ const resolvedReferences = createResolvedReferences(dataComponents, referenceOverrides?.dataComponents, reservedReferenceNames, "DataComponent");
80
+ addReferenceImports(sourceFile, resolvedReferences, "./data-components");
81
+ addReferenceGetterProperty(configObject, "dataComponents", toReferenceNames(resolvedReferences));
82
+ }
83
+ if (hasReferences(artifactComponents)) {
84
+ const resolvedReferences = createResolvedReferences(artifactComponents, referenceOverrides?.artifactComponents, reservedReferenceNames, "ArtifactComponent");
85
+ addReferenceImports(sourceFile, resolvedReferences, "./artifact-components");
86
+ addReferenceGetterProperty(configObject, "artifactComponents", toReferenceNames(resolvedReferences));
87
+ }
88
+ if (hasReferences(credentialReferences)) {
89
+ const resolvedReferences = createResolvedReferences(credentialReferences, referenceOverrides?.credentialReferences, reservedReferenceNames, "CredentialReference");
90
+ addReferenceImports(sourceFile, resolvedReferences, "./credentials");
91
+ addReferenceGetterProperty(configObject, "credentialReferences", toReferenceNames(resolvedReferences));
92
+ }
93
+ return sourceFile;
94
+ }
95
+ function addReferenceImports(sourceFile, references, basePath) {
96
+ for (const reference of references) sourceFile.addImportDeclaration({
97
+ namedImports: [reference.importName === reference.localName ? reference.importName : {
98
+ name: reference.importName,
99
+ alias: reference.localName
100
+ }],
101
+ moduleSpecifier: `${basePath}/${reference.id}`
102
+ });
103
+ }
104
+ function toReferenceNames(references) {
105
+ return references.map((reference) => reference.localName);
106
+ }
107
+ function createResolvedReferences(references, referenceOverrides, reservedReferenceNames, suffix) {
108
+ const seenIds = /* @__PURE__ */ new Set();
109
+ const resolvedReferences = [];
110
+ for (const referenceId of references) {
111
+ if (seenIds.has(referenceId)) continue;
112
+ seenIds.add(referenceId);
113
+ const importName = resolveReferenceName(referenceId, [referenceOverrides]);
114
+ const localName = createUniqueReferenceName(importName, reservedReferenceNames, suffix);
115
+ resolvedReferences.push({
116
+ id: referenceId,
117
+ importName,
118
+ localName
119
+ });
120
+ }
121
+ return resolvedReferences;
122
+ }
123
+
124
+ //#endregion
125
+ export { generateProjectDefinition };
@@ -2,7 +2,7 @@ import { join } from "node:path";
2
2
  import { stringify } from "yaml";
3
3
  import { mkdir, writeFile } from "node:fs/promises";
4
4
 
5
- //#region src/commands/pull-v3/components/skill-generator.ts
5
+ //#region src/commands/pull-v4/generators/skill-generator.ts
6
6
  function formatMetadata(metadata) {
7
7
  return `metadata:\n${stringify(metadata).split("\n").filter((line) => line.trim() !== "").map((line) => ` ${line}`).join("\n")}`;
8
8
  }
@@ -0,0 +1,35 @@
1
+ import { addValueToObject, convertJsonSchemaToZodSafe, createFactoryDefinition, toCamelCase } from "../utils.js";
2
+ import { z } from "zod";
3
+
4
+ //#region src/commands/pull-v4/generators/status-component-generator.ts
5
+ const StatusComponentSchema = z.looseObject({
6
+ statusComponentId: z.string().nonempty(),
7
+ type: z.string().nonempty(),
8
+ description: z.string().optional(),
9
+ detailsSchema: z.unknown().optional(),
10
+ schema: z.unknown().optional()
11
+ });
12
+ function generateStatusComponentDefinition(data) {
13
+ const result = StatusComponentSchema.safeParse(data);
14
+ if (!result.success) throw new Error(`Validation failed for status component:\n${z.prettifyError(result.error)}`);
15
+ const parsed = result.data;
16
+ const detailsSchema = parsed.detailsSchema !== void 0 ? parsed.detailsSchema : parsed.schema;
17
+ const { sourceFile, configObject } = createFactoryDefinition({
18
+ importName: "statusComponent",
19
+ variableName: toCamelCase(parsed.statusComponentId)
20
+ });
21
+ if (detailsSchema !== void 0) sourceFile.addImportDeclaration({
22
+ namedImports: ["z"],
23
+ moduleSpecifier: "zod"
24
+ });
25
+ const { statusComponentId, id, detailsSchema: _, schema: _2, ...rest } = parsed;
26
+ for (const [k, v] of Object.entries(rest)) addValueToObject(configObject, k, v);
27
+ if (detailsSchema) configObject.addPropertyAssignment({
28
+ name: "detailsSchema",
29
+ initializer: convertJsonSchemaToZodSafe(detailsSchema)
30
+ });
31
+ return sourceFile;
32
+ }
33
+
34
+ //#endregion
35
+ export { generateStatusComponentDefinition };