@inkeep/agents-cli 0.58.10 → 0.58.12
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/agents-cli/package.js +3 -2
- package/dist/agents-cli/package.js.map +1 -0
- package/dist/api.js +7 -11
- package/dist/api.js.map +1 -0
- package/dist/commands/add-ui.js +2 -1
- package/dist/commands/add-ui.js.map +1 -0
- package/dist/commands/add.js +2 -1
- package/dist/commands/add.js.map +1 -0
- package/dist/commands/config.js +2 -1
- package/dist/commands/config.js.map +1 -0
- package/dist/commands/dev.js +2 -1
- package/dist/commands/dev.js.map +1 -0
- package/dist/commands/init.js +2 -1
- package/dist/commands/init.js.map +1 -0
- package/dist/commands/list-agents.js +2 -1
- package/dist/commands/list-agents.js.map +1 -0
- package/dist/commands/login.js +2 -1
- package/dist/commands/login.js.map +1 -0
- package/dist/commands/logout.js +2 -1
- package/dist/commands/logout.js.map +1 -0
- package/dist/commands/profile.js +2 -1
- package/dist/commands/profile.js.map +1 -0
- package/dist/commands/pull-v4/component-parser.js +2 -1
- package/dist/commands/pull-v4/component-parser.js.map +1 -0
- package/dist/commands/pull-v4/component-registry.js +2 -1
- package/dist/commands/pull-v4/component-registry.js.map +1 -0
- package/dist/commands/pull-v4/generators/agent-generator.helpers.js +186 -0
- package/dist/commands/pull-v4/generators/agent-generator.helpers.js.map +1 -0
- package/dist/commands/pull-v4/generators/agent-generator.js +70 -209
- package/dist/commands/pull-v4/generators/agent-generator.js.map +1 -0
- package/dist/commands/pull-v4/generators/artifact-component-generator.js +13 -16
- package/dist/commands/pull-v4/generators/artifact-component-generator.js.map +1 -0
- package/dist/commands/pull-v4/generators/context-config-generator.js +38 -24
- package/dist/commands/pull-v4/generators/context-config-generator.js.map +1 -0
- package/dist/commands/pull-v4/generators/credential-generator.js +14 -10
- package/dist/commands/pull-v4/generators/credential-generator.js.map +1 -0
- package/dist/commands/pull-v4/generators/data-component-generator.js +10 -12
- package/dist/commands/pull-v4/generators/data-component-generator.js.map +1 -0
- package/dist/commands/pull-v4/generators/environment-generator.js +11 -91
- package/dist/commands/pull-v4/generators/environment-generator.js.map +1 -0
- package/dist/commands/pull-v4/generators/external-agent-generator.js +22 -39
- package/dist/commands/pull-v4/generators/external-agent-generator.js.map +1 -0
- package/dist/commands/pull-v4/generators/function-tool-generator.js +19 -31
- package/dist/commands/pull-v4/generators/function-tool-generator.js.map +1 -0
- package/dist/commands/pull-v4/generators/mcp-tool-generator.js +30 -71
- package/dist/commands/pull-v4/generators/mcp-tool-generator.js.map +1 -0
- package/dist/commands/pull-v4/generators/project-generator.js +64 -31
- package/dist/commands/pull-v4/generators/project-generator.js.map +1 -0
- package/dist/commands/pull-v4/generators/skill-generator.js +4 -1
- package/dist/commands/pull-v4/generators/skill-generator.js.map +1 -0
- package/dist/commands/pull-v4/generators/status-component-generator.js +19 -19
- package/dist/commands/pull-v4/generators/status-component-generator.js.map +1 -0
- package/dist/commands/pull-v4/generators/sub-agent-generator.helpers.js +84 -0
- package/dist/commands/pull-v4/generators/sub-agent-generator.helpers.js.map +1 -0
- package/dist/commands/pull-v4/generators/sub-agent-generator.js +82 -113
- package/dist/commands/pull-v4/generators/sub-agent-generator.js.map +1 -0
- package/dist/commands/pull-v4/generators/trigger-generator.js +21 -30
- package/dist/commands/pull-v4/generators/trigger-generator.js.map +1 -0
- package/dist/commands/pull-v4/introspect/demo-project.js +1616 -0
- package/dist/commands/pull-v4/introspect/demo-project.js.map +1 -0
- package/dist/commands/pull-v4/introspect/index.js +17 -16
- package/dist/commands/pull-v4/introspect/index.js.map +1 -0
- package/dist/commands/pull-v4/introspect/test-helpers.js +5 -3
- package/dist/commands/pull-v4/introspect/test-helpers.js.map +1 -0
- package/dist/commands/pull-v4/introspect-generator.js +606 -93
- package/dist/commands/pull-v4/introspect-generator.js.map +1 -0
- package/dist/commands/pull-v4/module-merge.js +2 -1
- package/dist/commands/pull-v4/module-merge.js.map +1 -0
- package/dist/commands/pull-v4/scheduled-trigger-generator.js +16 -17
- package/dist/commands/pull-v4/scheduled-trigger-generator.js.map +1 -0
- package/dist/commands/pull-v4/utils.js +90 -28
- package/dist/commands/pull-v4/utils.js.map +1 -0
- package/dist/commands/push.js +2 -1
- package/dist/commands/push.js.map +1 -0
- package/dist/commands/status.js +2 -1
- package/dist/commands/status.js.map +1 -0
- package/dist/commands/update.js +2 -1
- package/dist/commands/update.js.map +1 -0
- package/dist/commands/whoami.js +2 -1
- package/dist/commands/whoami.js.map +1 -0
- package/dist/config.js +2 -1
- package/dist/config.js.map +1 -0
- package/dist/env.js +2 -1
- package/dist/env.js.map +1 -0
- package/dist/index.js +2 -1
- package/dist/index.js.map +1 -0
- package/dist/instrumentation.js +2 -1
- package/dist/instrumentation.js.map +1 -0
- package/dist/node_modules/.pnpm/diff@8.0.3/node_modules/diff/libesm/diff/array.js +2 -1
- package/dist/node_modules/.pnpm/diff@8.0.3/node_modules/diff/libesm/diff/array.js.map +1 -0
- package/dist/node_modules/.pnpm/diff@8.0.3/node_modules/diff/libesm/diff/base.js +2 -1
- package/dist/node_modules/.pnpm/diff@8.0.3/node_modules/diff/libesm/diff/base.js.map +1 -0
- package/dist/node_modules/.pnpm/diff@8.0.3/node_modules/diff/libesm/diff/character.js +2 -1
- package/dist/node_modules/.pnpm/diff@8.0.3/node_modules/diff/libesm/diff/character.js.map +1 -0
- package/dist/node_modules/.pnpm/diff@8.0.3/node_modules/diff/libesm/diff/css.js +2 -1
- package/dist/node_modules/.pnpm/diff@8.0.3/node_modules/diff/libesm/diff/css.js.map +1 -0
- package/dist/node_modules/.pnpm/diff@8.0.3/node_modules/diff/libesm/diff/json.js +2 -1
- package/dist/node_modules/.pnpm/diff@8.0.3/node_modules/diff/libesm/diff/json.js.map +1 -0
- package/dist/node_modules/.pnpm/diff@8.0.3/node_modules/diff/libesm/diff/line.js +2 -1
- package/dist/node_modules/.pnpm/diff@8.0.3/node_modules/diff/libesm/diff/line.js.map +1 -0
- package/dist/node_modules/.pnpm/diff@8.0.3/node_modules/diff/libesm/diff/sentence.js +2 -1
- package/dist/node_modules/.pnpm/diff@8.0.3/node_modules/diff/libesm/diff/sentence.js.map +1 -0
- package/dist/node_modules/.pnpm/diff@8.0.3/node_modules/diff/libesm/diff/word.js +2 -1
- package/dist/node_modules/.pnpm/diff@8.0.3/node_modules/diff/libesm/diff/word.js.map +1 -0
- package/dist/node_modules/.pnpm/diff@8.0.3/node_modules/diff/libesm/patch/create.js +2 -1
- package/dist/node_modules/.pnpm/diff@8.0.3/node_modules/diff/libesm/patch/create.js.map +1 -0
- package/dist/node_modules/.pnpm/diff@8.0.3/node_modules/diff/libesm/util/string.js +2 -1
- package/dist/node_modules/.pnpm/diff@8.0.3/node_modules/diff/libesm/util/string.js.map +1 -0
- package/dist/utils/background-version-check.js +2 -1
- package/dist/utils/background-version-check.js.map +1 -0
- package/dist/utils/ci-environment.js +2 -1
- package/dist/utils/ci-environment.js.map +1 -0
- package/dist/utils/cli-pipeline.js +2 -1
- package/dist/utils/cli-pipeline.js.map +1 -0
- package/dist/utils/config.js +2 -1
- package/dist/utils/config.js.map +1 -0
- package/dist/utils/credentials.js +2 -1
- package/dist/utils/credentials.js.map +1 -0
- package/dist/utils/environment-loader.js +2 -1
- package/dist/utils/environment-loader.js.map +1 -0
- package/dist/utils/file-finder.js +2 -1
- package/dist/utils/file-finder.js.map +1 -0
- package/dist/utils/json-comparator.js +2 -1
- package/dist/utils/json-comparator.js.map +1 -0
- package/dist/utils/json-comparison.js +2 -1
- package/dist/utils/json-comparison.js.map +1 -0
- package/dist/utils/mcp-runner.js +2 -1
- package/dist/utils/mcp-runner.js.map +1 -0
- package/dist/utils/model-config.js +2 -1
- package/dist/utils/model-config.js.map +1 -0
- package/dist/utils/package-manager.js +2 -1
- package/dist/utils/package-manager.js.map +1 -0
- package/dist/utils/profile-config.js +2 -1
- package/dist/utils/profile-config.js.map +1 -0
- package/dist/utils/profiles/profile-manager.js +2 -1
- package/dist/utils/profiles/profile-manager.js.map +1 -0
- package/dist/utils/profiles/types.js +2 -1
- package/dist/utils/profiles/types.js.map +1 -0
- package/dist/utils/project-directory.js +2 -1
- package/dist/utils/project-directory.js.map +1 -0
- package/dist/utils/project-loader.js +2 -1
- package/dist/utils/project-loader.js.map +1 -0
- package/dist/utils/schema-introspection.js +2 -1
- package/dist/utils/schema-introspection.js.map +1 -0
- package/dist/utils/templates.js +2 -1
- package/dist/utils/templates.js.map +1 -0
- package/dist/utils/tsx-loader.js +2 -1
- package/dist/utils/tsx-loader.js.map +1 -0
- package/dist/utils/version-check.js +2 -1
- package/dist/utils/version-check.js.map +1 -0
- package/package.json +3 -3
|
@@ -1,48 +1,36 @@
|
|
|
1
|
-
import { addValueToObject, createFactoryDefinition,
|
|
1
|
+
import { addValueToObject, createFactoryDefinition, toToolReferenceName } from "../utils.js";
|
|
2
|
+
import { FullProjectDefinitionSchema } from "@inkeep/agents-core";
|
|
2
3
|
import { z } from "zod";
|
|
3
4
|
|
|
4
5
|
//#region src/commands/pull-v4/generators/function-tool-generator.ts
|
|
5
|
-
const
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
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
|
-
});
|
|
6
|
+
const MySchema = FullProjectDefinitionSchema.shape.functions.unwrap().valueType.omit({ id: true });
|
|
7
|
+
const MySchema2 = FullProjectDefinitionSchema.shape.functionTools.unwrap().valueType.omit({
|
|
8
|
+
id: true,
|
|
9
|
+
functionId: true
|
|
10
|
+
});
|
|
11
|
+
const FunctionToolSchema = z.strictObject({
|
|
12
|
+
...MySchema.shape,
|
|
13
|
+
...MySchema2.shape,
|
|
14
|
+
name: z.preprocess((v) => v ?? "", MySchema2.shape.name),
|
|
15
|
+
description: z.preprocess((v) => v || void 0, MySchema2.shape.description),
|
|
16
|
+
functionToolId: z.string().nonempty()
|
|
24
17
|
});
|
|
25
18
|
function generateFunctionToolDefinition(data) {
|
|
26
19
|
const result = FunctionToolSchema.safeParse(data);
|
|
27
20
|
if (!result.success) throw new Error(`Validation failed for function tool:\n${z.prettifyError(result.error)}`);
|
|
28
|
-
const parsed = result.data;
|
|
21
|
+
const { functionToolId, executeCode, ...parsed } = result.data;
|
|
29
22
|
const { sourceFile, configObject } = createFactoryDefinition({
|
|
30
23
|
importName: "functionTool",
|
|
31
|
-
variableName:
|
|
24
|
+
variableName: toToolReferenceName(parsed.name || functionToolId)
|
|
32
25
|
});
|
|
33
|
-
|
|
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);
|
|
26
|
+
for (const [k, v] of Object.entries(parsed)) addValueToObject(configObject, k, v);
|
|
41
27
|
if (executeCode) configObject.addPropertyAssignment({
|
|
42
28
|
name: "execute",
|
|
43
29
|
initializer: executeCode
|
|
44
30
|
});
|
|
31
|
+
return sourceFile;
|
|
45
32
|
}
|
|
46
33
|
|
|
47
34
|
//#endregion
|
|
48
|
-
export { generateFunctionToolDefinition };
|
|
35
|
+
export { generateFunctionToolDefinition };
|
|
36
|
+
//# sourceMappingURL=function-tool-generator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"function-tool-generator.js","names":[],"sources":["../../../../src/commands/pull-v4/generators/function-tool-generator.ts"],"sourcesContent":["import { FullProjectDefinitionSchema } from '@inkeep/agents-core';\nimport type { SourceFile } from 'ts-morph';\nimport { z } from 'zod';\nimport { addValueToObject, createFactoryDefinition, toToolReferenceName } from '../utils';\n\nconst MySchema = FullProjectDefinitionSchema.shape.functions.unwrap().valueType.omit({\n id: true,\n});\nconst MySchema2 = FullProjectDefinitionSchema.shape.functionTools.unwrap().valueType.omit({\n id: true,\n functionId: true,\n});\n\nconst FunctionToolSchema = z.strictObject({\n ...MySchema.shape,\n ...MySchema2.shape,\n name: z.preprocess((v) => v ?? '', MySchema2.shape.name),\n // Even empty description should exist, otherwise agent-sdk show type error\n // dependencies: z.preprocess(\n // (v) => (v && Object.keys(v).length && v) || undefined,\n // MySchema.shape.dependencies\n // ),\n description: z.preprocess((v) => v || undefined, MySchema2.shape.description),\n functionToolId: z.string().nonempty(),\n});\n\ntype FunctionToolInput = z.input<typeof FunctionToolSchema>;\n\nexport function generateFunctionToolDefinition(data: FunctionToolInput): SourceFile {\n const result = FunctionToolSchema.safeParse(data);\n if (!result.success) {\n throw new Error(`Validation failed for function tool:\\n${z.prettifyError(result.error)}`);\n }\n\n const { functionToolId, executeCode, ...parsed } = result.data;\n const { sourceFile, configObject } = createFactoryDefinition({\n importName: 'functionTool',\n variableName: toToolReferenceName(parsed.name || functionToolId),\n });\n\n for (const [k, v] of Object.entries(parsed)) {\n addValueToObject(configObject, k, v);\n }\n if (executeCode) {\n configObject.addPropertyAssignment({\n name: 'execute',\n initializer: executeCode,\n });\n }\n return sourceFile;\n}\n"],"mappings":";;;;;AAKA,MAAM,WAAW,4BAA4B,MAAM,UAAU,QAAQ,CAAC,UAAU,KAAK,EACnF,IAAI,MACL,CAAC;AACF,MAAM,YAAY,4BAA4B,MAAM,cAAc,QAAQ,CAAC,UAAU,KAAK;CACxF,IAAI;CACJ,YAAY;CACb,CAAC;AAEF,MAAM,qBAAqB,EAAE,aAAa;CACxC,GAAG,SAAS;CACZ,GAAG,UAAU;CACb,MAAM,EAAE,YAAY,MAAM,KAAK,IAAI,UAAU,MAAM,KAAK;CAMxD,aAAa,EAAE,YAAY,MAAM,KAAK,QAAW,UAAU,MAAM,YAAY;CAC7E,gBAAgB,EAAE,QAAQ,CAAC,UAAU;CACtC,CAAC;AAIF,SAAgB,+BAA+B,MAAqC;CAClF,MAAM,SAAS,mBAAmB,UAAU,KAAK;AACjD,KAAI,CAAC,OAAO,QACV,OAAM,IAAI,MAAM,yCAAyC,EAAE,cAAc,OAAO,MAAM,GAAG;CAG3F,MAAM,EAAE,gBAAgB,aAAa,GAAG,WAAW,OAAO;CAC1D,MAAM,EAAE,YAAY,iBAAiB,wBAAwB;EAC3D,YAAY;EACZ,cAAc,oBAAoB,OAAO,QAAQ,eAAe;EACjE,CAAC;AAEF,MAAK,MAAM,CAAC,GAAG,MAAM,OAAO,QAAQ,OAAO,CACzC,kBAAiB,cAAc,GAAG,EAAE;AAEtC,KAAI,YACF,cAAa,sBAAsB;EACjC,MAAM;EACN,aAAa;EACd,CAAC;AAEJ,QAAO"}
|
|
@@ -1,91 +1,50 @@
|
|
|
1
|
-
import { addValueToObject, createFactoryDefinition,
|
|
1
|
+
import { addValueToObject, createFactoryDefinition, formatStringLiteral, toToolReferenceName } from "../utils.js";
|
|
2
|
+
import { FullProjectDefinitionSchema } from "@inkeep/agents-core";
|
|
2
3
|
import { z } from "zod";
|
|
3
4
|
|
|
4
5
|
//#region src/commands/pull-v4/generators/mcp-tool-generator.ts
|
|
5
|
-
const
|
|
6
|
+
const MySchema = FullProjectDefinitionSchema.shape.tools.valueType.omit({
|
|
7
|
+
id: true,
|
|
8
|
+
lastError: true
|
|
9
|
+
});
|
|
10
|
+
const McpToolSchema = z.strictObject({
|
|
6
11
|
mcpToolId: z.string().nonempty(),
|
|
7
|
-
|
|
8
|
-
description: z.
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
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().transform((value) => value ?? void 0),
|
|
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
|
-
});
|
|
12
|
+
...MySchema.shape,
|
|
13
|
+
description: z.preprocess((v) => v ?? void 0, MySchema.shape.description),
|
|
14
|
+
headers: z.preprocess((v) => v ?? void 0, MySchema.shape.headers),
|
|
15
|
+
capabilities: z.preprocess((v) => v && Object.keys(v).length && v || void 0, MySchema.shape.capabilities),
|
|
16
|
+
imageUrl: z.preprocess((v) => v || void 0, MySchema.shape.imageUrl),
|
|
17
|
+
credential: z.record(z.string(), z.unknown()).optional()
|
|
27
18
|
});
|
|
28
|
-
function generateMcpToolDefinition(data) {
|
|
19
|
+
function generateMcpToolDefinition({ tenantId, id, projectId, createdAt, updatedAt, lastError, ...data }) {
|
|
29
20
|
const result = McpToolSchema.safeParse(data);
|
|
30
21
|
if (!result.success) throw new Error(`Validation failed for MCP tool:\n${z.prettifyError(result.error)}`);
|
|
31
|
-
const parsed = result.data;
|
|
22
|
+
const { credentialReferenceId, config, mcpToolId, ...parsed } = result.data;
|
|
32
23
|
const { sourceFile, configObject } = createFactoryDefinition({
|
|
33
24
|
importName: "mcpTool",
|
|
34
|
-
variableName:
|
|
35
|
-
});
|
|
36
|
-
if (parsed.credentialReferenceId && parsed.credential === void 0) sourceFile.addImportDeclaration({
|
|
37
|
-
namedImports: ["envSettings"],
|
|
38
|
-
moduleSpecifier: "../environments"
|
|
25
|
+
variableName: toToolReferenceName(parsed.name)
|
|
39
26
|
});
|
|
40
|
-
|
|
41
|
-
return sourceFile;
|
|
42
|
-
}
|
|
43
|
-
function writeMcpToolConfig(configObject, { mcpToolId, description, serverUrl, config, transport, activeTools, credential, credentialReferenceId, ...rest }) {
|
|
27
|
+
const activeTools = config?.mcp?.activeTools;
|
|
44
28
|
for (const [k, v] of Object.entries({
|
|
45
29
|
id: mcpToolId,
|
|
46
|
-
...
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
serverUrl
|
|
51
|
-
}),
|
|
52
|
-
transport: resolveTransport({
|
|
53
|
-
config,
|
|
54
|
-
transport
|
|
55
|
-
}),
|
|
56
|
-
activeTools: resolveActiveTools({
|
|
57
|
-
config,
|
|
58
|
-
activeTools
|
|
59
|
-
})
|
|
30
|
+
...parsed,
|
|
31
|
+
serverUrl: config?.mcp?.server?.url,
|
|
32
|
+
transport: config?.mcp?.transport,
|
|
33
|
+
...activeTools?.length && { activeTools }
|
|
60
34
|
})) addValueToObject(configObject, k, v);
|
|
61
|
-
if (
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
});
|
|
67
|
-
return;
|
|
68
|
-
}
|
|
35
|
+
if (credentialReferenceId) {
|
|
36
|
+
sourceFile.addImportDeclaration({
|
|
37
|
+
namedImports: ["envSettings"],
|
|
38
|
+
moduleSpecifier: "../environments"
|
|
39
|
+
});
|
|
69
40
|
configObject.addPropertyAssignment({
|
|
70
41
|
name: "credential",
|
|
71
|
-
initializer:
|
|
42
|
+
initializer: `envSettings.getEnvironmentCredential(${formatStringLiteral(credentialReferenceId)})`
|
|
72
43
|
});
|
|
73
|
-
return;
|
|
74
44
|
}
|
|
75
|
-
|
|
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;
|
|
45
|
+
return sourceFile;
|
|
88
46
|
}
|
|
89
47
|
|
|
90
48
|
//#endregion
|
|
91
|
-
export { generateMcpToolDefinition };
|
|
49
|
+
export { generateMcpToolDefinition };
|
|
50
|
+
//# sourceMappingURL=mcp-tool-generator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mcp-tool-generator.js","names":[],"sources":["../../../../src/commands/pull-v4/generators/mcp-tool-generator.ts"],"sourcesContent":["import { FullProjectDefinitionSchema } from '@inkeep/agents-core';\nimport type { SourceFile } from 'ts-morph';\nimport { z } from 'zod';\nimport {\n addValueToObject,\n createFactoryDefinition,\n formatStringLiteral,\n toToolReferenceName,\n} from '../utils';\n\nconst MySchema = FullProjectDefinitionSchema.shape.tools.valueType.omit({\n id: true,\n lastError: true,\n});\n\nconst McpToolSchema = z.strictObject({\n mcpToolId: z.string().nonempty(),\n ...MySchema.shape,\n description: z.preprocess((v) => v ?? undefined, MySchema.shape.description),\n headers: z.preprocess((v) => v ?? undefined, MySchema.shape.headers),\n capabilities: z.preprocess(\n (v) => (v && Object.keys(v).length && v) || undefined,\n MySchema.shape.capabilities\n ),\n imageUrl: z.preprocess((v) => v || undefined, MySchema.shape.imageUrl),\n // Additional field\n credential: z.record(z.string(), z.unknown()).optional(),\n});\n\ntype McpToolInput = z.input<typeof McpToolSchema>;\n\nexport function generateMcpToolDefinition({\n tenantId,\n id,\n projectId,\n createdAt,\n updatedAt,\n lastError,\n ...data\n}: McpToolInput & Record<string, unknown>): SourceFile {\n const result = McpToolSchema.safeParse(data);\n if (!result.success) {\n throw new Error(`Validation failed for MCP tool:\\n${z.prettifyError(result.error)}`);\n }\n\n const { credentialReferenceId, config, mcpToolId, ...parsed } = result.data;\n const { sourceFile, configObject } = createFactoryDefinition({\n importName: 'mcpTool',\n variableName: toToolReferenceName(parsed.name),\n });\n\n const activeTools = config?.mcp?.activeTools;\n for (const [k, v] of Object.entries({\n id: mcpToolId,\n ...parsed,\n serverUrl: config?.mcp?.server?.url,\n transport: config?.mcp?.transport,\n ...(activeTools?.length && { activeTools }),\n })) {\n addValueToObject(configObject, k, v);\n }\n\n if (credentialReferenceId) {\n sourceFile.addImportDeclaration({\n namedImports: ['envSettings'],\n moduleSpecifier: '../environments',\n });\n configObject.addPropertyAssignment({\n name: 'credential',\n initializer: `envSettings.getEnvironmentCredential(${formatStringLiteral(credentialReferenceId)})`,\n });\n }\n return sourceFile;\n}\n"],"mappings":";;;;;AAUA,MAAM,WAAW,4BAA4B,MAAM,MAAM,UAAU,KAAK;CACtE,IAAI;CACJ,WAAW;CACZ,CAAC;AAEF,MAAM,gBAAgB,EAAE,aAAa;CACnC,WAAW,EAAE,QAAQ,CAAC,UAAU;CAChC,GAAG,SAAS;CACZ,aAAa,EAAE,YAAY,MAAM,KAAK,QAAW,SAAS,MAAM,YAAY;CAC5E,SAAS,EAAE,YAAY,MAAM,KAAK,QAAW,SAAS,MAAM,QAAQ;CACpE,cAAc,EAAE,YACb,MAAO,KAAK,OAAO,KAAK,EAAE,CAAC,UAAU,KAAM,QAC5C,SAAS,MAAM,aAChB;CACD,UAAU,EAAE,YAAY,MAAM,KAAK,QAAW,SAAS,MAAM,SAAS;CAEtE,YAAY,EAAE,OAAO,EAAE,QAAQ,EAAE,EAAE,SAAS,CAAC,CAAC,UAAU;CACzD,CAAC;AAIF,SAAgB,0BAA0B,EACxC,UACA,IACA,WACA,WACA,WACA,WACA,GAAG,QACkD;CACrD,MAAM,SAAS,cAAc,UAAU,KAAK;AAC5C,KAAI,CAAC,OAAO,QACV,OAAM,IAAI,MAAM,oCAAoC,EAAE,cAAc,OAAO,MAAM,GAAG;CAGtF,MAAM,EAAE,uBAAuB,QAAQ,WAAW,GAAG,WAAW,OAAO;CACvE,MAAM,EAAE,YAAY,iBAAiB,wBAAwB;EAC3D,YAAY;EACZ,cAAc,oBAAoB,OAAO,KAAK;EAC/C,CAAC;CAEF,MAAM,cAAc,QAAQ,KAAK;AACjC,MAAK,MAAM,CAAC,GAAG,MAAM,OAAO,QAAQ;EAClC,IAAI;EACJ,GAAG;EACH,WAAW,QAAQ,KAAK,QAAQ;EAChC,WAAW,QAAQ,KAAK;EACxB,GAAI,aAAa,UAAU,EAAE,aAAa;EAC3C,CAAC,CACA,kBAAiB,cAAc,GAAG,EAAE;AAGtC,KAAI,uBAAuB;AACzB,aAAW,qBAAqB;GAC9B,cAAc,CAAC,cAAc;GAC7B,iBAAiB;GAClB,CAAC;AACF,eAAa,sBAAsB;GACjC,MAAM;GACN,aAAa,wCAAwC,oBAAoB,sBAAsB,CAAC;GACjG,CAAC;;AAEJ,QAAO"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
import { addReferenceGetterProperty, addValueToObject,
|
|
1
|
+
import { addReferenceGetterProperty, addValueToObject, buildComponentFileName, createFactoryDefinition, createUniqueReferenceName, formatStringLiteral, hasReferences, resolveReferenceName, toCamelCase } from "../utils.js";
|
|
2
|
+
import { FullProjectDefinitionSchema } from "@inkeep/agents-core";
|
|
2
3
|
import { z } from "zod";
|
|
3
4
|
|
|
4
5
|
//#region src/commands/pull-v4/generators/project-generator.ts
|
|
@@ -11,19 +12,25 @@ const ReferenceOverridesSchema = z.object({
|
|
|
11
12
|
artifactComponents: ReferenceNameByIdSchema.optional(),
|
|
12
13
|
credentialReferences: ReferenceNameByIdSchema.optional()
|
|
13
14
|
});
|
|
14
|
-
const
|
|
15
|
+
const ReferencePathOverridesSchema = z.object({
|
|
16
|
+
agents: ReferenceNameByIdSchema.optional(),
|
|
17
|
+
tools: ReferenceNameByIdSchema.optional(),
|
|
18
|
+
externalAgents: ReferenceNameByIdSchema.optional(),
|
|
19
|
+
dataComponents: ReferenceNameByIdSchema.optional(),
|
|
20
|
+
artifactComponents: ReferenceNameByIdSchema.optional(),
|
|
21
|
+
credentialReferences: ReferenceNameByIdSchema.optional()
|
|
22
|
+
});
|
|
23
|
+
const MySchema = FullProjectDefinitionSchema.pick({
|
|
24
|
+
name: true,
|
|
25
|
+
description: true,
|
|
26
|
+
models: true,
|
|
27
|
+
stopWhen: true
|
|
28
|
+
});
|
|
29
|
+
const ProjectSchema = z.strictObject({
|
|
15
30
|
projectId: z.string().nonempty(),
|
|
16
|
-
|
|
17
|
-
description: z.
|
|
18
|
-
|
|
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()),
|
|
31
|
+
...MySchema.shape,
|
|
32
|
+
description: z.preprocess((v) => v || void 0, MySchema.shape.description),
|
|
33
|
+
stopWhen: z.preprocess((v) => v && Object.keys(v).length && v || void 0, MySchema.shape.stopWhen),
|
|
27
34
|
skills: z.array(z.string()).optional(),
|
|
28
35
|
agents: z.array(z.string()).optional(),
|
|
29
36
|
tools: z.array(z.string()).optional(),
|
|
@@ -31,7 +38,8 @@ const ProjectSchema = z.looseObject({
|
|
|
31
38
|
dataComponents: z.array(z.string()).optional(),
|
|
32
39
|
artifactComponents: z.array(z.string()).optional(),
|
|
33
40
|
credentialReferences: z.array(z.string()).optional(),
|
|
34
|
-
referenceOverrides: ReferenceOverridesSchema.optional()
|
|
41
|
+
referenceOverrides: ReferenceOverridesSchema.optional(),
|
|
42
|
+
referencePathOverrides: ReferencePathOverridesSchema.optional()
|
|
35
43
|
});
|
|
36
44
|
function generateProjectDefinition(data) {
|
|
37
45
|
const result = ProjectSchema.safeParse(data);
|
|
@@ -51,7 +59,8 @@ ${z.prettifyError(result.error)}`);
|
|
|
51
59
|
moduleSpecifier: "node:path"
|
|
52
60
|
});
|
|
53
61
|
}
|
|
54
|
-
const { projectId, skills, agents, tools, externalAgents, dataComponents, artifactComponents, credentialReferences, referenceOverrides, ...rest } = parsed;
|
|
62
|
+
const { projectId, skills, agents, tools, externalAgents, dataComponents, artifactComponents, credentialReferences, referenceOverrides, referencePathOverrides, ...rest } = parsed;
|
|
63
|
+
const credentialReferenceResolved = hasReferences(credentialReferences) ? createResolvedReferences(credentialReferences, referenceOverrides?.credentialReferences, referencePathOverrides?.credentialReferences, reservedReferenceNames, "CredentialReference", "numeric") : void 0;
|
|
55
64
|
for (const [key, value] of Object.entries({
|
|
56
65
|
id: projectId,
|
|
57
66
|
...rest
|
|
@@ -61,32 +70,32 @@ ${z.prettifyError(result.error)}`);
|
|
|
61
70
|
initializer: `() => loadSkills(path.join(${formatStringLiteral(projectId)}, 'skills'))`
|
|
62
71
|
});
|
|
63
72
|
if (hasReferences(agents)) {
|
|
64
|
-
const resolvedReferences = createResolvedReferences(agents, referenceOverrides?.agents, reservedReferenceNames, "Agent");
|
|
73
|
+
const resolvedReferences = createResolvedReferences(agents, referenceOverrides?.agents, referencePathOverrides?.agents, reservedReferenceNames, "Agent");
|
|
65
74
|
addReferenceImports(sourceFile, resolvedReferences, "./agents");
|
|
66
75
|
addReferenceGetterProperty(configObject, "agents", toReferenceNames(resolvedReferences));
|
|
67
76
|
}
|
|
68
77
|
if (hasReferences(tools)) {
|
|
69
|
-
const resolvedReferences = createResolvedReferences(tools, referenceOverrides?.tools, reservedReferenceNames, "Tool");
|
|
78
|
+
const resolvedReferences = createResolvedReferences(tools, referenceOverrides?.tools, referencePathOverrides?.tools, reservedReferenceNames, "Tool", "numeric-for-duplicates");
|
|
70
79
|
addReferenceImports(sourceFile, resolvedReferences, "./tools");
|
|
71
80
|
addReferenceGetterProperty(configObject, "tools", toReferenceNames(resolvedReferences));
|
|
72
81
|
}
|
|
73
82
|
if (hasReferences(externalAgents)) {
|
|
74
|
-
const resolvedReferences = createResolvedReferences(externalAgents, referenceOverrides?.externalAgents, reservedReferenceNames, "ExternalAgent");
|
|
83
|
+
const resolvedReferences = createResolvedReferences(externalAgents, referenceOverrides?.externalAgents, referencePathOverrides?.externalAgents, reservedReferenceNames, "ExternalAgent");
|
|
75
84
|
addReferenceImports(sourceFile, resolvedReferences, "./external-agents");
|
|
76
85
|
addReferenceGetterProperty(configObject, "externalAgents", toReferenceNames(resolvedReferences));
|
|
77
86
|
}
|
|
78
87
|
if (hasReferences(dataComponents)) {
|
|
79
|
-
const resolvedReferences = createResolvedReferences(dataComponents, referenceOverrides?.dataComponents, reservedReferenceNames, "DataComponent");
|
|
88
|
+
const resolvedReferences = createResolvedReferences(dataComponents, referenceOverrides?.dataComponents, referencePathOverrides?.dataComponents, reservedReferenceNames, "DataComponent");
|
|
80
89
|
addReferenceImports(sourceFile, resolvedReferences, "./data-components");
|
|
81
90
|
addReferenceGetterProperty(configObject, "dataComponents", toReferenceNames(resolvedReferences));
|
|
82
91
|
}
|
|
83
92
|
if (hasReferences(artifactComponents)) {
|
|
84
|
-
const resolvedReferences = createResolvedReferences(artifactComponents, referenceOverrides?.artifactComponents, reservedReferenceNames, "ArtifactComponent");
|
|
93
|
+
const resolvedReferences = createResolvedReferences(artifactComponents, referenceOverrides?.artifactComponents, referencePathOverrides?.artifactComponents, reservedReferenceNames, "ArtifactComponent");
|
|
85
94
|
addReferenceImports(sourceFile, resolvedReferences, "./artifact-components");
|
|
86
95
|
addReferenceGetterProperty(configObject, "artifactComponents", toReferenceNames(resolvedReferences));
|
|
87
96
|
}
|
|
88
97
|
if (hasReferences(credentialReferences)) {
|
|
89
|
-
const resolvedReferences =
|
|
98
|
+
const resolvedReferences = credentialReferenceResolved ?? [];
|
|
90
99
|
addReferenceImports(sourceFile, resolvedReferences, "./credentials");
|
|
91
100
|
addReferenceGetterProperty(configObject, "credentialReferences", toReferenceNames(resolvedReferences));
|
|
92
101
|
}
|
|
@@ -98,28 +107,52 @@ function addReferenceImports(sourceFile, references, basePath) {
|
|
|
98
107
|
name: reference.importName,
|
|
99
108
|
alias: reference.localName
|
|
100
109
|
}],
|
|
101
|
-
moduleSpecifier: `${basePath}/${reference.
|
|
110
|
+
moduleSpecifier: `${basePath}/${reference.modulePath}`
|
|
102
111
|
});
|
|
103
112
|
}
|
|
104
113
|
function toReferenceNames(references) {
|
|
105
114
|
return references.map((reference) => reference.localName);
|
|
106
115
|
}
|
|
107
|
-
function createResolvedReferences(references, referenceOverrides, reservedReferenceNames, suffix) {
|
|
116
|
+
function createResolvedReferences(references, referenceOverrides, referencePathOverrides, reservedReferenceNames, suffix, collisionStrategy = "descriptive") {
|
|
108
117
|
const seenIds = /* @__PURE__ */ new Set();
|
|
109
|
-
const
|
|
118
|
+
const normalizedReferences = [];
|
|
110
119
|
for (const referenceId of references) {
|
|
111
120
|
if (seenIds.has(referenceId)) continue;
|
|
112
121
|
seenIds.add(referenceId);
|
|
113
|
-
|
|
114
|
-
const localName = createUniqueReferenceName(importName, reservedReferenceNames, suffix);
|
|
115
|
-
resolvedReferences.push({
|
|
122
|
+
normalizedReferences.push({
|
|
116
123
|
id: referenceId,
|
|
117
|
-
importName,
|
|
118
|
-
|
|
124
|
+
importName: resolveReferenceName(referenceId, [referenceOverrides]),
|
|
125
|
+
modulePath: resolveReferenceModulePath(referenceId, referencePathOverrides?.[referenceId])
|
|
119
126
|
});
|
|
120
127
|
}
|
|
121
|
-
|
|
128
|
+
const importNameCounts = /* @__PURE__ */ new Map();
|
|
129
|
+
for (const reference of normalizedReferences) importNameCounts.set(reference.importName, (importNameCounts.get(reference.importName) ?? 0) + 1);
|
|
130
|
+
return normalizedReferences.map((reference) => {
|
|
131
|
+
const localName = collisionStrategy === "numeric" || collisionStrategy === "numeric-for-duplicates" && (importNameCounts.get(reference.importName) ?? 0) > 1 ? createNumericReferenceName(reference.importName, reservedReferenceNames) : createUniqueReferenceName(reference.importName, reservedReferenceNames, suffix);
|
|
132
|
+
return {
|
|
133
|
+
id: reference.id,
|
|
134
|
+
importName: reference.importName,
|
|
135
|
+
localName,
|
|
136
|
+
modulePath: reference.modulePath
|
|
137
|
+
};
|
|
138
|
+
});
|
|
139
|
+
}
|
|
140
|
+
function createNumericReferenceName(baseName, reservedNames) {
|
|
141
|
+
if (!reservedNames.has(baseName)) {
|
|
142
|
+
reservedNames.add(baseName);
|
|
143
|
+
return baseName;
|
|
144
|
+
}
|
|
145
|
+
let index = 1;
|
|
146
|
+
while (reservedNames.has(`${baseName}${index}`)) index += 1;
|
|
147
|
+
const uniqueName = `${baseName}${index}`;
|
|
148
|
+
reservedNames.add(uniqueName);
|
|
149
|
+
return uniqueName;
|
|
150
|
+
}
|
|
151
|
+
function resolveReferenceModulePath(referenceId, referencePathOverride) {
|
|
152
|
+
if (referencePathOverride && referencePathOverride.length > 0) return referencePathOverride.replace(/\.tsx?$/, "");
|
|
153
|
+
return buildComponentFileName(referenceId).replace(/\.tsx?$/, "");
|
|
122
154
|
}
|
|
123
155
|
|
|
124
156
|
//#endregion
|
|
125
|
-
export { generateProjectDefinition };
|
|
157
|
+
export { generateProjectDefinition };
|
|
158
|
+
//# sourceMappingURL=project-generator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"project-generator.js","names":[],"sources":["../../../../src/commands/pull-v4/generators/project-generator.ts"],"sourcesContent":["import { FullProjectDefinitionSchema } from '@inkeep/agents-core';\nimport type { SourceFile } from 'ts-morph';\nimport { z } from 'zod';\nimport {\n addReferenceGetterProperty,\n addValueToObject,\n buildComponentFileName,\n createFactoryDefinition,\n createUniqueReferenceName,\n formatStringLiteral,\n hasReferences,\n resolveReferenceName,\n toCamelCase,\n} from '../utils';\n\nconst ReferenceNameByIdSchema = z.record(z.string(), z.string().nonempty());\n\nconst ReferenceOverridesSchema = z.object({\n agents: ReferenceNameByIdSchema.optional(),\n tools: ReferenceNameByIdSchema.optional(),\n externalAgents: ReferenceNameByIdSchema.optional(),\n dataComponents: ReferenceNameByIdSchema.optional(),\n artifactComponents: ReferenceNameByIdSchema.optional(),\n credentialReferences: ReferenceNameByIdSchema.optional(),\n});\n\nconst ReferencePathOverridesSchema = z.object({\n agents: ReferenceNameByIdSchema.optional(),\n tools: ReferenceNameByIdSchema.optional(),\n externalAgents: ReferenceNameByIdSchema.optional(),\n dataComponents: ReferenceNameByIdSchema.optional(),\n artifactComponents: ReferenceNameByIdSchema.optional(),\n credentialReferences: ReferenceNameByIdSchema.optional(),\n});\n\ninterface ResolvedReference {\n id: string;\n importName: string;\n localName: string;\n modulePath: string;\n}\n\ntype CollisionStrategy = 'descriptive' | 'numeric' | 'numeric-for-duplicates';\n\nconst MySchema = FullProjectDefinitionSchema.pick({\n name: true,\n description: true,\n models: true,\n stopWhen: true,\n});\n\nconst ProjectSchema = z.strictObject({\n projectId: z.string().nonempty(),\n ...MySchema.shape,\n description: z.preprocess((v) => v || undefined, MySchema.shape.description),\n // Invalid input: expected object, received null\n stopWhen: z.preprocess(\n (v) => (v && Object.keys(v).length && v) || undefined,\n MySchema.shape.stopWhen\n ),\n skills: z.array(z.string()).optional(),\n agents: z.array(z.string()).optional(),\n tools: z.array(z.string()).optional(),\n externalAgents: z.array(z.string()).optional(),\n dataComponents: z.array(z.string()).optional(),\n artifactComponents: z.array(z.string()).optional(),\n credentialReferences: z.array(z.string()).optional(),\n referenceOverrides: ReferenceOverridesSchema.optional(),\n referencePathOverrides: ReferencePathOverridesSchema.optional(),\n});\n\ntype ProjectInput = z.input<typeof ProjectSchema>;\n\nexport function generateProjectDefinition(data: ProjectInput): SourceFile {\n const result = ProjectSchema.safeParse(data);\n if (!result.success) {\n throw new Error(`Validation failed for project:\n${z.prettifyError(result.error)}`);\n }\n\n const parsed = result.data;\n const projectVariableName = toCamelCase(parsed.projectId);\n const { sourceFile, configObject } = createFactoryDefinition({\n importName: 'project',\n variableName: projectVariableName,\n });\n const reservedReferenceNames = new Set([projectVariableName]);\n if (hasReferences(parsed.skills)) {\n sourceFile.getImportDeclarationOrThrow('@inkeep/agents-sdk').addNamedImport('loadSkills');\n sourceFile.addImportDeclaration({\n defaultImport: 'path',\n moduleSpecifier: 'node:path',\n });\n }\n\n const {\n projectId,\n skills,\n agents,\n tools,\n externalAgents,\n dataComponents,\n artifactComponents,\n credentialReferences,\n referenceOverrides,\n referencePathOverrides,\n ...rest\n } = parsed;\n\n const credentialReferenceResolved = hasReferences(credentialReferences)\n ? createResolvedReferences(\n credentialReferences,\n referenceOverrides?.credentialReferences,\n referencePathOverrides?.credentialReferences,\n reservedReferenceNames,\n 'CredentialReference',\n 'numeric'\n )\n : undefined;\n\n for (const [key, value] of Object.entries({\n id: projectId,\n ...rest,\n })) {\n addValueToObject(configObject, key, value);\n }\n\n if (hasReferences(skills)) {\n configObject.addPropertyAssignment({\n name: 'skills',\n initializer: `() => loadSkills(path.join(${formatStringLiteral(projectId)}, 'skills'))`,\n });\n }\n\n if (hasReferences(agents)) {\n const resolvedReferences = createResolvedReferences(\n agents,\n referenceOverrides?.agents,\n referencePathOverrides?.agents,\n reservedReferenceNames,\n 'Agent'\n );\n addReferenceImports(sourceFile, resolvedReferences, './agents');\n addReferenceGetterProperty(configObject, 'agents', toReferenceNames(resolvedReferences));\n }\n\n if (hasReferences(tools)) {\n const resolvedReferences = createResolvedReferences(\n tools,\n referenceOverrides?.tools,\n referencePathOverrides?.tools,\n reservedReferenceNames,\n 'Tool',\n 'numeric-for-duplicates'\n );\n addReferenceImports(sourceFile, resolvedReferences, './tools');\n addReferenceGetterProperty(configObject, 'tools', toReferenceNames(resolvedReferences));\n }\n\n if (hasReferences(externalAgents)) {\n const resolvedReferences = createResolvedReferences(\n externalAgents,\n referenceOverrides?.externalAgents,\n referencePathOverrides?.externalAgents,\n reservedReferenceNames,\n 'ExternalAgent'\n );\n addReferenceImports(sourceFile, resolvedReferences, './external-agents');\n addReferenceGetterProperty(\n configObject,\n 'externalAgents',\n toReferenceNames(resolvedReferences)\n );\n }\n\n if (hasReferences(dataComponents)) {\n const resolvedReferences = createResolvedReferences(\n dataComponents,\n referenceOverrides?.dataComponents,\n referencePathOverrides?.dataComponents,\n reservedReferenceNames,\n 'DataComponent'\n );\n addReferenceImports(sourceFile, resolvedReferences, './data-components');\n addReferenceGetterProperty(\n configObject,\n 'dataComponents',\n toReferenceNames(resolvedReferences)\n );\n }\n\n if (hasReferences(artifactComponents)) {\n const resolvedReferences = createResolvedReferences(\n artifactComponents,\n referenceOverrides?.artifactComponents,\n referencePathOverrides?.artifactComponents,\n reservedReferenceNames,\n 'ArtifactComponent'\n );\n addReferenceImports(sourceFile, resolvedReferences, './artifact-components');\n addReferenceGetterProperty(\n configObject,\n 'artifactComponents',\n toReferenceNames(resolvedReferences)\n );\n }\n\n if (hasReferences(credentialReferences)) {\n const resolvedReferences = credentialReferenceResolved ?? [];\n addReferenceImports(sourceFile, resolvedReferences, './credentials');\n addReferenceGetterProperty(\n configObject,\n 'credentialReferences',\n toReferenceNames(resolvedReferences)\n );\n }\n\n return sourceFile;\n}\n\nfunction addReferenceImports(\n sourceFile: SourceFile,\n references: ResolvedReference[],\n basePath: string\n): void {\n for (const reference of references) {\n sourceFile.addImportDeclaration({\n namedImports: [\n reference.importName === reference.localName\n ? reference.importName\n : { name: reference.importName, alias: reference.localName },\n ],\n moduleSpecifier: `${basePath}/${reference.modulePath}`,\n });\n }\n}\n\nfunction toReferenceNames(references: ResolvedReference[]): string[] {\n return references.map((reference) => reference.localName);\n}\n\nfunction createResolvedReferences(\n references: string[],\n referenceOverrides: Record<string, string> | undefined,\n referencePathOverrides: Record<string, string> | undefined,\n reservedReferenceNames: Set<string>,\n suffix: string,\n collisionStrategy: CollisionStrategy = 'descriptive'\n): ResolvedReference[] {\n const seenIds = new Set<string>();\n const normalizedReferences: Array<{\n id: string;\n importName: string;\n modulePath: string;\n }> = [];\n\n for (const referenceId of references) {\n if (seenIds.has(referenceId)) {\n continue;\n }\n seenIds.add(referenceId);\n\n normalizedReferences.push({\n id: referenceId,\n importName: resolveReferenceName(referenceId, [referenceOverrides]),\n modulePath: resolveReferenceModulePath(referenceId, referencePathOverrides?.[referenceId]),\n });\n }\n\n const importNameCounts = new Map<string, number>();\n for (const reference of normalizedReferences) {\n importNameCounts.set(\n reference.importName,\n (importNameCounts.get(reference.importName) ?? 0) + 1\n );\n }\n\n return normalizedReferences.map((reference) => {\n const shouldUseNumeric =\n collisionStrategy === 'numeric' ||\n (collisionStrategy === 'numeric-for-duplicates' &&\n (importNameCounts.get(reference.importName) ?? 0) > 1);\n\n const localName = shouldUseNumeric\n ? createNumericReferenceName(reference.importName, reservedReferenceNames)\n : createUniqueReferenceName(reference.importName, reservedReferenceNames, suffix);\n\n return {\n id: reference.id,\n importName: reference.importName,\n localName,\n modulePath: reference.modulePath,\n };\n });\n}\n\nfunction createNumericReferenceName(baseName: string, reservedNames: Set<string>): string {\n if (!reservedNames.has(baseName)) {\n reservedNames.add(baseName);\n return baseName;\n }\n\n let index = 1;\n while (reservedNames.has(`${baseName}${index}`)) {\n index += 1;\n }\n\n const uniqueName = `${baseName}${index}`;\n reservedNames.add(uniqueName);\n return uniqueName;\n}\n\nfunction resolveReferenceModulePath(\n referenceId: string,\n referencePathOverride: string | undefined\n): string {\n if (referencePathOverride && referencePathOverride.length > 0) {\n return referencePathOverride.replace(/\\.tsx?$/, '');\n }\n\n const fileName = buildComponentFileName(referenceId);\n return fileName.replace(/\\.tsx?$/, '');\n}\n"],"mappings":"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"}
|
|
@@ -1,8 +1,10 @@
|
|
|
1
|
+
import { FullProjectDefinitionSchema } from "@inkeep/agents-core";
|
|
1
2
|
import { join } from "node:path";
|
|
2
3
|
import { stringify } from "yaml";
|
|
3
4
|
import { mkdir, writeFile } from "node:fs/promises";
|
|
4
5
|
|
|
5
6
|
//#region src/commands/pull-v4/generators/skill-generator.ts
|
|
7
|
+
FullProjectDefinitionSchema.shape.skills.unwrap().valueType;
|
|
6
8
|
function formatMetadata(metadata) {
|
|
7
9
|
return `metadata:\n${stringify(metadata).split("\n").filter((line) => line.trim() !== "").map((line) => ` ${line}`).join("\n")}`;
|
|
8
10
|
}
|
|
@@ -20,4 +22,5 @@ async function generateSkills(skills, skillsDir) {
|
|
|
20
22
|
}
|
|
21
23
|
|
|
22
24
|
//#endregion
|
|
23
|
-
export { generateSkills };
|
|
25
|
+
export { generateSkills };
|
|
26
|
+
//# sourceMappingURL=skill-generator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"skill-generator.js","names":[],"sources":["../../../../src/commands/pull-v4/generators/skill-generator.ts"],"sourcesContent":["import { mkdir, writeFile } from 'node:fs/promises';\nimport { join } from 'node:path';\nimport { FullProjectDefinitionSchema } from '@inkeep/agents-core';\nimport { stringify } from 'yaml';\nimport type { z } from 'zod';\n\nconst MySchema = FullProjectDefinitionSchema.shape.skills.unwrap().valueType;\n\ntype SkillInput = z.input<typeof MySchema>;\n\ntype SkillMap = Record<string, SkillInput>;\n\nfunction formatMetadata(metadata: NonNullable<SkillInput['metadata']>): string {\n const yaml = stringify(metadata);\n const indented = yaml\n .split('\\n')\n .filter((line) => line.trim() !== '')\n .map((line) => ` ${line}`)\n .join('\\n');\n return `metadata:\\n${indented}`;\n}\n\nexport async function generateSkills(skills: SkillMap, skillsDir: string): Promise<void> {\n await mkdir(skillsDir, { recursive: true });\n\n for (const [skillId, skill] of Object.entries(skills)) {\n const parts: string[] = ['---', `name: ${JSON.stringify(skill.name)}`];\n parts.push(`description: ${JSON.stringify(skill.description ?? '')}`);\n\n if (skill.metadata && Object.keys(skill.metadata).length > 0) {\n parts.push(formatMetadata(skill.metadata));\n }\n\n parts.push('---', '', skill.content || '');\n\n const skillDir = join(skillsDir, skillId);\n await mkdir(skillDir, { recursive: true });\n\n const filePath = join(skillDir, 'SKILL.md');\n await writeFile(filePath, parts.join('\\n'), 'utf8');\n }\n}\n"],"mappings":";;;;;;AAMiB,4BAA4B,MAAM,OAAO,QAAQ,CAAC;AAMnE,SAAS,eAAe,UAAuD;AAO7E,QAAO,cANM,UAAU,SAAS,CAE7B,MAAM,KAAK,CACX,QAAQ,SAAS,KAAK,MAAM,KAAK,GAAG,CACpC,KAAK,SAAS,KAAK,OAAO,CAC1B,KAAK,KAAK;;AAIf,eAAsB,eAAe,QAAkB,WAAkC;AACvF,OAAM,MAAM,WAAW,EAAE,WAAW,MAAM,CAAC;AAE3C,MAAK,MAAM,CAAC,SAAS,UAAU,OAAO,QAAQ,OAAO,EAAE;EACrD,MAAM,QAAkB,CAAC,OAAO,SAAS,KAAK,UAAU,MAAM,KAAK,GAAG;AACtE,QAAM,KAAK,gBAAgB,KAAK,UAAU,MAAM,eAAe,GAAG,GAAG;AAErE,MAAI,MAAM,YAAY,OAAO,KAAK,MAAM,SAAS,CAAC,SAAS,EACzD,OAAM,KAAK,eAAe,MAAM,SAAS,CAAC;AAG5C,QAAM,KAAK,OAAO,IAAI,MAAM,WAAW,GAAG;EAE1C,MAAM,WAAW,KAAK,WAAW,QAAQ;AACzC,QAAM,MAAM,UAAU,EAAE,WAAW,MAAM,CAAC;AAG1C,QAAM,UADW,KAAK,UAAU,WAAW,EACjB,MAAM,KAAK,KAAK,EAAE,OAAO"}
|
|
@@ -1,35 +1,35 @@
|
|
|
1
1
|
import { addValueToObject, convertJsonSchemaToZodSafe, createFactoryDefinition, toCamelCase } from "../utils.js";
|
|
2
|
+
import { FullProjectDefinitionSchema } from "@inkeep/agents-core";
|
|
2
3
|
import { z } from "zod";
|
|
3
4
|
|
|
4
5
|
//#region src/commands/pull-v4/generators/status-component-generator.ts
|
|
5
|
-
const
|
|
6
|
+
const MySchema = FullProjectDefinitionSchema.shape.statusUpdates.unwrap().shape.statusComponents.unwrap().element;
|
|
7
|
+
const StatusComponentSchema = z.strictObject({
|
|
6
8
|
statusComponentId: z.string().nonempty(),
|
|
7
|
-
|
|
8
|
-
description: z.string().optional(),
|
|
9
|
-
detailsSchema: z.unknown().optional(),
|
|
10
|
-
schema: z.unknown().optional()
|
|
9
|
+
...MySchema.shape
|
|
11
10
|
});
|
|
12
|
-
function generateStatusComponentDefinition(data) {
|
|
11
|
+
function generateStatusComponentDefinition({ id, ...data }) {
|
|
13
12
|
const result = StatusComponentSchema.safeParse(data);
|
|
14
13
|
if (!result.success) throw new Error(`Validation failed for status component:\n${z.prettifyError(result.error)}`);
|
|
15
|
-
const
|
|
16
|
-
const detailsSchema = parsed.detailsSchema !== void 0 ? parsed.detailsSchema : parsed.schema;
|
|
14
|
+
const { statusComponentId, detailsSchema, ...rest } = result.data;
|
|
17
15
|
const { sourceFile, configObject } = createFactoryDefinition({
|
|
18
16
|
importName: "statusComponent",
|
|
19
|
-
variableName: toCamelCase(
|
|
17
|
+
variableName: toCamelCase(statusComponentId)
|
|
20
18
|
});
|
|
21
|
-
if (detailsSchema !== void 0) sourceFile.addImportDeclaration({
|
|
22
|
-
namedImports: ["z"],
|
|
23
|
-
moduleSpecifier: "zod"
|
|
24
|
-
});
|
|
25
|
-
const { statusComponentId, id, detailsSchema: _, schema: _2, ...rest } = parsed;
|
|
26
19
|
for (const [k, v] of Object.entries(rest)) addValueToObject(configObject, k, v);
|
|
27
|
-
if (detailsSchema)
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
20
|
+
if (detailsSchema) {
|
|
21
|
+
sourceFile.addImportDeclaration({
|
|
22
|
+
namedImports: ["z"],
|
|
23
|
+
moduleSpecifier: "zod"
|
|
24
|
+
});
|
|
25
|
+
configObject.addPropertyAssignment({
|
|
26
|
+
name: "detailsSchema",
|
|
27
|
+
initializer: convertJsonSchemaToZodSafe(detailsSchema)
|
|
28
|
+
});
|
|
29
|
+
}
|
|
31
30
|
return sourceFile;
|
|
32
31
|
}
|
|
33
32
|
|
|
34
33
|
//#endregion
|
|
35
|
-
export { generateStatusComponentDefinition };
|
|
34
|
+
export { generateStatusComponentDefinition };
|
|
35
|
+
//# sourceMappingURL=status-component-generator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"status-component-generator.js","names":[],"sources":["../../../../src/commands/pull-v4/generators/status-component-generator.ts"],"sourcesContent":["import { FullProjectDefinitionSchema } from '@inkeep/agents-core';\nimport type { SourceFile } from 'ts-morph';\nimport { z } from 'zod';\nimport {\n addValueToObject,\n convertJsonSchemaToZodSafe,\n createFactoryDefinition,\n toCamelCase,\n} from '../utils';\n\nconst MySchema = FullProjectDefinitionSchema.shape.statusUpdates\n .unwrap()\n .shape.statusComponents.unwrap().element;\n\nconst StatusComponentSchema = z.strictObject({\n statusComponentId: z.string().nonempty(),\n ...MySchema.shape,\n});\n\ntype StatusComponentInput = z.input<typeof StatusComponentSchema>;\n\nexport function generateStatusComponentDefinition({\n id,\n ...data\n}: StatusComponentInput & Record<string, unknown>): SourceFile {\n const result = StatusComponentSchema.safeParse(data);\n if (!result.success) {\n throw new Error(`Validation failed for status component:\\n${z.prettifyError(result.error)}`);\n }\n\n const { statusComponentId, detailsSchema, ...rest } = result.data;\n\n const { sourceFile, configObject } = createFactoryDefinition({\n importName: 'statusComponent',\n variableName: toCamelCase(statusComponentId),\n });\n\n for (const [k, v] of Object.entries(rest)) {\n addValueToObject(configObject, k, v);\n }\n if (detailsSchema) {\n sourceFile.addImportDeclaration({\n namedImports: ['z'],\n moduleSpecifier: 'zod',\n });\n configObject.addPropertyAssignment({\n name: 'detailsSchema',\n initializer: convertJsonSchemaToZodSafe(detailsSchema),\n });\n }\n\n return sourceFile;\n}\n"],"mappings":";;;;;AAUA,MAAM,WAAW,4BAA4B,MAAM,cAChD,QAAQ,CACR,MAAM,iBAAiB,QAAQ,CAAC;AAEnC,MAAM,wBAAwB,EAAE,aAAa;CAC3C,mBAAmB,EAAE,QAAQ,CAAC,UAAU;CACxC,GAAG,SAAS;CACb,CAAC;AAIF,SAAgB,kCAAkC,EAChD,IACA,GAAG,QAC0D;CAC7D,MAAM,SAAS,sBAAsB,UAAU,KAAK;AACpD,KAAI,CAAC,OAAO,QACV,OAAM,IAAI,MAAM,4CAA4C,EAAE,cAAc,OAAO,MAAM,GAAG;CAG9F,MAAM,EAAE,mBAAmB,eAAe,GAAG,SAAS,OAAO;CAE7D,MAAM,EAAE,YAAY,iBAAiB,wBAAwB;EAC3D,YAAY;EACZ,cAAc,YAAY,kBAAkB;EAC7C,CAAC;AAEF,MAAK,MAAM,CAAC,GAAG,MAAM,OAAO,QAAQ,KAAK,CACvC,kBAAiB,cAAc,GAAG,EAAE;AAEtC,KAAI,eAAe;AACjB,aAAW,qBAAqB;GAC9B,cAAc,CAAC,IAAI;GACnB,iBAAiB;GAClB,CAAC;AACF,eAAa,sBAAsB;GACjC,MAAM;GACN,aAAa,2BAA2B,cAAc;GACvD,CAAC;;AAGJ,QAAO"}
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
import { formatInlineLiteral, isPlainObject, resolveReferenceName, toCamelCase } from "../utils.js";
|
|
2
|
+
|
|
3
|
+
//#region src/commands/pull-v4/generators/sub-agent-generator.helpers.ts
|
|
4
|
+
function resolveSubAgentName(subAgentId, name) {
|
|
5
|
+
if (name !== void 0) return name;
|
|
6
|
+
return subAgentId.replace(/[-_]/g, " ").replace(/([a-z])([A-Z])/g, "$1 $2").replace(/\b\w/g, (char) => char.toUpperCase());
|
|
7
|
+
}
|
|
8
|
+
function resolveSubAgentVariableName(subAgentId, name) {
|
|
9
|
+
return toCamelCase(name || subAgentId);
|
|
10
|
+
}
|
|
11
|
+
function collectCanUseReferences(canUse, toolReferenceOverrides) {
|
|
12
|
+
if (!Array.isArray(canUse)) return [];
|
|
13
|
+
const references = [];
|
|
14
|
+
for (const item of canUse) {
|
|
15
|
+
if (typeof item === "string") {
|
|
16
|
+
references.push(resolveReferenceName(item, [toolReferenceOverrides]));
|
|
17
|
+
continue;
|
|
18
|
+
}
|
|
19
|
+
if (!isPlainObject(item)) continue;
|
|
20
|
+
const toolId = typeof item.toolId === "string" ? item.toolId : void 0;
|
|
21
|
+
if (!toolId) continue;
|
|
22
|
+
const toolReference = resolveReferenceName(toolId, [toolReferenceOverrides]);
|
|
23
|
+
const withConfig = {};
|
|
24
|
+
const selectedTools = Array.isArray(item.toolSelection) && item.toolSelection.length ? item.toolSelection : Array.isArray(item.selectedTools) && item.selectedTools.length ? item.selectedTools : void 0;
|
|
25
|
+
if (selectedTools) withConfig.selectedTools = selectedTools;
|
|
26
|
+
if (isPlainObject(item.headers) && Object.keys(item.headers).length) withConfig.headers = item.headers;
|
|
27
|
+
if (isPlainObject(item.toolPolicies) && Object.keys(item.toolPolicies).length) withConfig.toolPolicies = item.toolPolicies;
|
|
28
|
+
if (Object.keys(withConfig).length > 0) {
|
|
29
|
+
references.push(`${toolReference}.with(${formatInlineLiteral(withConfig)})`);
|
|
30
|
+
continue;
|
|
31
|
+
}
|
|
32
|
+
references.push(toolReference);
|
|
33
|
+
}
|
|
34
|
+
return references;
|
|
35
|
+
}
|
|
36
|
+
function collectCanDelegateToReferences(canDelegateTo, referenceOverrides) {
|
|
37
|
+
if (!Array.isArray(canDelegateTo)) return [];
|
|
38
|
+
const references = [];
|
|
39
|
+
for (const item of canDelegateTo) {
|
|
40
|
+
if (typeof item === "string") {
|
|
41
|
+
references.push(resolveReferenceName(item, [
|
|
42
|
+
referenceOverrides.subAgents,
|
|
43
|
+
referenceOverrides.agents,
|
|
44
|
+
referenceOverrides.externalAgents
|
|
45
|
+
]));
|
|
46
|
+
continue;
|
|
47
|
+
}
|
|
48
|
+
if (!isPlainObject(item)) continue;
|
|
49
|
+
const subAgentId = typeof item.subAgentId === "string" ? item.subAgentId : void 0;
|
|
50
|
+
const agentId = typeof item.agentId === "string" ? item.agentId : void 0;
|
|
51
|
+
const externalAgentId = typeof item.externalAgentId === "string" ? item.externalAgentId : void 0;
|
|
52
|
+
const targetId = subAgentId || agentId || externalAgentId;
|
|
53
|
+
if (!targetId) continue;
|
|
54
|
+
const targetReference = subAgentId ? resolveReferenceName(subAgentId, [referenceOverrides.subAgents]) : agentId ? resolveReferenceName(agentId, [referenceOverrides.agents]) : resolveReferenceName(targetId, [referenceOverrides.externalAgents]);
|
|
55
|
+
if (isPlainObject(item.headers) && Object.keys(item.headers).length > 0) {
|
|
56
|
+
references.push(`${targetReference}.with(${formatInlineLiteral({ headers: item.headers })})`);
|
|
57
|
+
continue;
|
|
58
|
+
}
|
|
59
|
+
references.push(targetReference);
|
|
60
|
+
}
|
|
61
|
+
return references;
|
|
62
|
+
}
|
|
63
|
+
function collectSkills(skills) {
|
|
64
|
+
if (!Array.isArray(skills)) return [];
|
|
65
|
+
const formattedSkills = [];
|
|
66
|
+
for (const skill of skills) {
|
|
67
|
+
if (typeof skill === "string") {
|
|
68
|
+
formattedSkills.push(formatInlineLiteral(skill));
|
|
69
|
+
continue;
|
|
70
|
+
}
|
|
71
|
+
if (!isPlainObject(skill)) continue;
|
|
72
|
+
const skillId = typeof skill.id === "string" ? skill.id : typeof skill.skillId === "string" ? skill.skillId : void 0;
|
|
73
|
+
if (!skillId) continue;
|
|
74
|
+
const formattedSkill = { id: skillId };
|
|
75
|
+
if (typeof skill.index === "number" && Number.isInteger(skill.index)) formattedSkill.index = skill.index;
|
|
76
|
+
if (typeof skill.alwaysLoaded === "boolean") formattedSkill.alwaysLoaded = skill.alwaysLoaded;
|
|
77
|
+
formattedSkills.push(formatInlineLiteral(formattedSkill));
|
|
78
|
+
}
|
|
79
|
+
return formattedSkills;
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
//#endregion
|
|
83
|
+
export { collectCanDelegateToReferences, collectCanUseReferences, collectSkills, resolveSubAgentName, resolveSubAgentVariableName };
|
|
84
|
+
//# sourceMappingURL=sub-agent-generator.helpers.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sub-agent-generator.helpers.js","names":[],"sources":["../../../../src/commands/pull-v4/generators/sub-agent-generator.helpers.ts"],"sourcesContent":["import { formatInlineLiteral, isPlainObject, resolveReferenceName, toCamelCase } from '../utils';\n\ninterface DelegateReferenceOverrides {\n subAgents?: Record<string, string>;\n agents?: Record<string, string>;\n externalAgents?: Record<string, string>;\n}\n\nexport function resolveSubAgentName(subAgentId: string, name?: string): string {\n if (name !== undefined) {\n return name;\n }\n\n return subAgentId\n .replace(/[-_]/g, ' ')\n .replace(/([a-z])([A-Z])/g, '$1 $2')\n .replace(/\\b\\w/g, (char) => char.toUpperCase());\n}\n\nexport function resolveSubAgentVariableName(subAgentId: string, name?: string): string {\n const seed = name || subAgentId;\n return toCamelCase(seed);\n}\n\nexport function collectCanUseReferences(\n canUse?: unknown[],\n toolReferenceOverrides?: Record<string, string>\n): string[] {\n if (!Array.isArray(canUse)) {\n return [];\n }\n\n const references: string[] = [];\n for (const item of canUse) {\n if (typeof item === 'string') {\n references.push(resolveReferenceName(item, [toolReferenceOverrides]));\n continue;\n }\n\n if (!isPlainObject(item)) {\n continue;\n }\n\n const toolId = typeof item.toolId === 'string' ? item.toolId : undefined;\n if (!toolId) {\n continue;\n }\n\n const toolReference = resolveReferenceName(toolId, [toolReferenceOverrides]);\n const withConfig: Record<string, unknown> = {};\n const selectedTools =\n Array.isArray(item.toolSelection) && item.toolSelection.length\n ? item.toolSelection\n : Array.isArray(item.selectedTools) && item.selectedTools.length\n ? item.selectedTools\n : undefined;\n\n if (selectedTools) {\n withConfig.selectedTools = selectedTools;\n }\n\n if (isPlainObject(item.headers) && Object.keys(item.headers).length) {\n withConfig.headers = item.headers;\n }\n\n if (isPlainObject(item.toolPolicies) && Object.keys(item.toolPolicies).length) {\n withConfig.toolPolicies = item.toolPolicies;\n }\n\n if (Object.keys(withConfig).length > 0) {\n references.push(`${toolReference}.with(${formatInlineLiteral(withConfig)})`);\n continue;\n }\n\n references.push(toolReference);\n }\n\n return references;\n}\n\nexport function collectCanDelegateToReferences(\n canDelegateTo: unknown[] | undefined,\n referenceOverrides: DelegateReferenceOverrides\n): string[] {\n if (!Array.isArray(canDelegateTo)) {\n return [];\n }\n\n const references: string[] = [];\n for (const item of canDelegateTo) {\n if (typeof item === 'string') {\n references.push(\n resolveReferenceName(item, [\n referenceOverrides.subAgents,\n referenceOverrides.agents,\n referenceOverrides.externalAgents,\n ])\n );\n continue;\n }\n\n if (!isPlainObject(item)) {\n continue;\n }\n\n const subAgentId = typeof item.subAgentId === 'string' ? item.subAgentId : undefined;\n const agentId = typeof item.agentId === 'string' ? item.agentId : undefined;\n const externalAgentId =\n typeof item.externalAgentId === 'string' ? item.externalAgentId : undefined;\n const targetId = subAgentId || agentId || externalAgentId;\n\n if (!targetId) {\n continue;\n }\n\n const targetReference = subAgentId\n ? resolveReferenceName(subAgentId, [referenceOverrides.subAgents])\n : agentId\n ? resolveReferenceName(agentId, [referenceOverrides.agents])\n : resolveReferenceName(targetId, [referenceOverrides.externalAgents]);\n\n if (isPlainObject(item.headers) && Object.keys(item.headers).length > 0) {\n references.push(\n `${targetReference}.with(${formatInlineLiteral({\n headers: item.headers,\n })})`\n );\n continue;\n }\n\n references.push(targetReference);\n }\n\n return references;\n}\n\nexport function collectSkills(skills?: unknown[]): string[] {\n if (!Array.isArray(skills)) {\n return [];\n }\n\n const formattedSkills: string[] = [];\n for (const skill of skills) {\n if (typeof skill === 'string') {\n formattedSkills.push(formatInlineLiteral(skill));\n continue;\n }\n\n if (!isPlainObject(skill)) {\n continue;\n }\n\n const skillId =\n typeof skill.id === 'string'\n ? skill.id\n : typeof skill.skillId === 'string'\n ? skill.skillId\n : undefined;\n if (!skillId) {\n continue;\n }\n\n const formattedSkill: Record<string, unknown> = { id: skillId };\n if (typeof skill.index === 'number' && Number.isInteger(skill.index)) {\n formattedSkill.index = skill.index;\n }\n if (typeof skill.alwaysLoaded === 'boolean') {\n formattedSkill.alwaysLoaded = skill.alwaysLoaded;\n }\n\n formattedSkills.push(formatInlineLiteral(formattedSkill));\n }\n\n return formattedSkills;\n}\n"],"mappings":"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"}
|