@aigne/core 1.39.0 → 1.40.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +7 -0
- package/lib/cjs/aigne/aigne.d.ts +16 -0
- package/lib/cjs/aigne/aigne.js +11 -0
- package/lib/cjs/loader/index.d.ts +22 -0
- package/lib/cjs/loader/index.js +23 -18
- package/lib/cjs/loader/schema.d.ts +2 -2
- package/lib/dts/aigne/aigne.d.ts +16 -0
- package/lib/dts/loader/index.d.ts +22 -0
- package/lib/dts/loader/schema.d.ts +2 -2
- package/lib/esm/aigne/aigne.d.ts +16 -0
- package/lib/esm/aigne/aigne.js +11 -0
- package/lib/esm/loader/index.d.ts +22 -0
- package/lib/esm/loader/index.js +25 -17
- package/lib/esm/loader/schema.d.ts +2 -2
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -12,6 +12,13 @@
|
|
|
12
12
|
* dependencies
|
|
13
13
|
* @aigne/observability bumped to 0.1.0
|
|
14
14
|
|
|
15
|
+
## [1.40.0](https://github.com/AIGNE-io/aigne-framework/compare/core-v1.39.0...core-v1.40.0) (2025-07-31)
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
### Features
|
|
19
|
+
|
|
20
|
+
* **cli:** support dynamic download and execution of doc-smith app ([#293](https://github.com/AIGNE-io/aigne-framework/issues/293)) ([4c40077](https://github.com/AIGNE-io/aigne-framework/commit/4c40077bacef076bc4b098879e948ef866218e39))
|
|
21
|
+
|
|
15
22
|
## [1.39.0](https://github.com/AIGNE-io/aigne-framework/compare/core-v1.38.1...core-v1.39.0) (2025-07-28)
|
|
16
23
|
|
|
17
24
|
|
package/lib/cjs/aigne/aigne.d.ts
CHANGED
|
@@ -35,6 +35,12 @@ export interface AIGNEOptions {
|
|
|
35
35
|
* Agents to use for the AIGNE instance.
|
|
36
36
|
*/
|
|
37
37
|
agents?: Agent[];
|
|
38
|
+
mcpServer?: {
|
|
39
|
+
agents?: Agent[];
|
|
40
|
+
};
|
|
41
|
+
cli?: {
|
|
42
|
+
agents?: Agent[];
|
|
43
|
+
};
|
|
38
44
|
/**
|
|
39
45
|
* Limits for the AIGNE instance, such as timeout, max tokens, max invocations, etc.
|
|
40
46
|
*/
|
|
@@ -112,6 +118,16 @@ export declare class AIGNE<U extends UserContext = UserContext> {
|
|
|
112
118
|
readonly agents: Agent<any, any>[] & {
|
|
113
119
|
[key: string]: Agent<any, any>;
|
|
114
120
|
};
|
|
121
|
+
readonly mcpServer: {
|
|
122
|
+
agents: Agent<any, any>[] & {
|
|
123
|
+
[key: string]: Agent<any, any>;
|
|
124
|
+
};
|
|
125
|
+
};
|
|
126
|
+
readonly cli: {
|
|
127
|
+
agents: Agent<any, any>[] & {
|
|
128
|
+
[key: string]: Agent<any, any>;
|
|
129
|
+
};
|
|
130
|
+
};
|
|
115
131
|
/**
|
|
116
132
|
* Observer for the AIGNE instance.
|
|
117
133
|
*/
|
package/lib/cjs/aigne/aigne.js
CHANGED
|
@@ -31,6 +31,7 @@ class AIGNE {
|
|
|
31
31
|
static async load(path, options) {
|
|
32
32
|
const { model, agents = [], skills = [], ...aigne } = await (0, index_js_1.load)({ ...options, path });
|
|
33
33
|
return new AIGNE({
|
|
34
|
+
...aigne,
|
|
34
35
|
...options,
|
|
35
36
|
rootDir: aigne.rootDir,
|
|
36
37
|
model: options?.model || model,
|
|
@@ -61,6 +62,10 @@ class AIGNE {
|
|
|
61
62
|
this.skills.push(...options.skills);
|
|
62
63
|
if (options?.agents?.length)
|
|
63
64
|
this.addAgent(...options.agents);
|
|
65
|
+
if (options?.mcpServer?.agents?.length)
|
|
66
|
+
this.mcpServer.agents.push(...options.mcpServer.agents);
|
|
67
|
+
if (options?.cli?.agents?.length)
|
|
68
|
+
this.cli.agents.push(...options.cli.agents);
|
|
64
69
|
this.observer?.serve();
|
|
65
70
|
this.initProcessExitHandler();
|
|
66
71
|
}
|
|
@@ -100,6 +105,12 @@ class AIGNE {
|
|
|
100
105
|
* Provides indexed access by agent name.
|
|
101
106
|
*/
|
|
102
107
|
agents = (0, type_utils_js_1.createAccessorArray)([], (arr, name) => arr.find((i) => i.name === name));
|
|
108
|
+
mcpServer = {
|
|
109
|
+
agents: (0, type_utils_js_1.createAccessorArray)([], (arr, name) => arr.find((i) => i.name === name)),
|
|
110
|
+
};
|
|
111
|
+
cli = {
|
|
112
|
+
agents: (0, type_utils_js_1.createAccessorArray)([], (arr, name) => arr.find((i) => i.name === name)),
|
|
113
|
+
};
|
|
103
114
|
/**
|
|
104
115
|
* Observer for the AIGNE instance.
|
|
105
116
|
*/
|
|
@@ -67,6 +67,16 @@ declare const aigneFileSchema: z.ZodObject<{
|
|
|
67
67
|
} | undefined>;
|
|
68
68
|
agents: z.ZodType<string[] | undefined, z.ZodTypeDef, string[] | undefined>;
|
|
69
69
|
skills: z.ZodType<string[] | undefined, z.ZodTypeDef, string[] | undefined>;
|
|
70
|
+
mcpServer: z.ZodType<{
|
|
71
|
+
agents?: string[] | undefined;
|
|
72
|
+
} | undefined, z.ZodTypeDef, {
|
|
73
|
+
agents?: string[] | undefined;
|
|
74
|
+
} | undefined>;
|
|
75
|
+
cli: z.ZodType<{
|
|
76
|
+
agents?: string[] | undefined;
|
|
77
|
+
} | undefined, z.ZodTypeDef, {
|
|
78
|
+
agents?: string[] | undefined;
|
|
79
|
+
} | undefined>;
|
|
70
80
|
}, "strip", z.ZodTypeAny, {
|
|
71
81
|
name?: string | undefined;
|
|
72
82
|
description?: string | undefined;
|
|
@@ -80,6 +90,12 @@ declare const aigneFileSchema: z.ZodObject<{
|
|
|
80
90
|
provider?: string | null | undefined;
|
|
81
91
|
} | undefined;
|
|
82
92
|
agents?: string[] | undefined;
|
|
93
|
+
mcpServer?: {
|
|
94
|
+
agents?: string[] | undefined;
|
|
95
|
+
} | undefined;
|
|
96
|
+
cli?: {
|
|
97
|
+
agents?: string[] | undefined;
|
|
98
|
+
} | undefined;
|
|
83
99
|
}, {
|
|
84
100
|
name?: string | undefined;
|
|
85
101
|
description?: string | undefined;
|
|
@@ -93,6 +109,12 @@ declare const aigneFileSchema: z.ZodObject<{
|
|
|
93
109
|
provider?: string | null | undefined;
|
|
94
110
|
} | undefined;
|
|
95
111
|
agents?: string[] | undefined;
|
|
112
|
+
mcpServer?: {
|
|
113
|
+
agents?: string[] | undefined;
|
|
114
|
+
} | undefined;
|
|
115
|
+
cli?: {
|
|
116
|
+
agents?: string[] | undefined;
|
|
117
|
+
} | undefined;
|
|
96
118
|
}>;
|
|
97
119
|
export declare function loadAIGNEFile(path: string): Promise<{
|
|
98
120
|
aigne: z.infer<typeof aigneFileSchema>;
|
package/lib/cjs/loader/index.js
CHANGED
|
@@ -1,14 +1,10 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
-
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
-
};
|
|
5
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
3
|
exports.load = load;
|
|
7
4
|
exports.loadAgent = loadAgent;
|
|
8
5
|
exports.loadModel = loadModel;
|
|
9
6
|
exports.loadAIGNEFile = loadAIGNEFile;
|
|
10
7
|
const index_js_1 = require("@aigne/platform-helpers/nodejs/index.js");
|
|
11
|
-
const camelize_ts_1 = __importDefault(require("camelize-ts"));
|
|
12
8
|
const yaml_1 = require("yaml");
|
|
13
9
|
const zod_1 = require("zod");
|
|
14
10
|
const agent_js_1 = require("../agents/agent.js");
|
|
@@ -24,8 +20,9 @@ const schema_js_1 = require("./schema.js");
|
|
|
24
20
|
const AIGNE_FILE_NAME = ["aigne.yaml", "aigne.yml"];
|
|
25
21
|
async function load(options) {
|
|
26
22
|
const { aigne, rootDir } = await loadAIGNEFile(options.path);
|
|
27
|
-
const
|
|
28
|
-
const
|
|
23
|
+
const allAgentPaths = new Set((0, type_utils_js_1.flat)(aigne.agents, aigne.skills, aigne.mcpServer?.agents, aigne.cli?.agents).map((i) => index_js_1.nodejs.path.join(rootDir, i)));
|
|
24
|
+
const allAgents = Object.fromEntries(await Promise.all(Array.from(allAgentPaths).map(async (path) => [path, await loadAgent(path, options)])));
|
|
25
|
+
const pickAgents = (paths) => paths.map((filename) => allAgents[index_js_1.nodejs.path.join(rootDir, filename)]).filter(type_utils_js_1.isNonNullable);
|
|
29
26
|
return {
|
|
30
27
|
...aigne,
|
|
31
28
|
rootDir,
|
|
@@ -35,8 +32,14 @@ async function load(options) {
|
|
|
35
32
|
create: (options) => new i(options),
|
|
36
33
|
}
|
|
37
34
|
: i), aigne.model),
|
|
38
|
-
agents,
|
|
39
|
-
skills,
|
|
35
|
+
agents: pickAgents(aigne.agents ?? []),
|
|
36
|
+
skills: pickAgents(aigne.skills ?? []),
|
|
37
|
+
mcpServer: {
|
|
38
|
+
agents: pickAgents(aigne.mcpServer?.agents ?? []),
|
|
39
|
+
},
|
|
40
|
+
cli: {
|
|
41
|
+
agents: pickAgents(aigne.cli?.agents ?? []),
|
|
42
|
+
},
|
|
40
43
|
};
|
|
41
44
|
}
|
|
42
45
|
async function loadAgent(path, options, agentOptions) {
|
|
@@ -176,32 +179,34 @@ async function loadModel(models, model, modelOptions, accessKeyOptions) {
|
|
|
176
179
|
modelOptions: { ...params, ...modelOptions },
|
|
177
180
|
});
|
|
178
181
|
}
|
|
179
|
-
const aigneFileSchema = zod_1.z.object({
|
|
182
|
+
const aigneFileSchema = (0, schema_js_1.camelizeSchema)(zod_1.z.object({
|
|
180
183
|
name: (0, schema_js_1.optionalize)(zod_1.z.string()),
|
|
181
184
|
description: (0, schema_js_1.optionalize)(zod_1.z.string()),
|
|
182
185
|
model: (0, schema_js_1.optionalize)(zod_1.z.union([
|
|
183
186
|
zod_1.z.string(),
|
|
184
|
-
zod_1.z.object({
|
|
187
|
+
(0, schema_js_1.camelizeSchema)(zod_1.z.object({
|
|
185
188
|
provider: zod_1.z.string().nullish(),
|
|
186
189
|
name: zod_1.z.string().nullish(),
|
|
187
190
|
temperature: zod_1.z.number().min(0).max(2).nullish(),
|
|
188
191
|
topP: zod_1.z.number().min(0).nullish(),
|
|
189
192
|
frequencyPenalty: zod_1.z.number().min(-2).max(2).nullish(),
|
|
190
193
|
presencePenalty: zod_1.z.number().min(-2).max(2).nullish(),
|
|
191
|
-
}),
|
|
194
|
+
})),
|
|
192
195
|
])).transform((v) => (typeof v === "string" ? { name: v } : v)),
|
|
193
196
|
agents: (0, schema_js_1.optionalize)(zod_1.z.array(zod_1.z.string())),
|
|
194
197
|
skills: (0, schema_js_1.optionalize)(zod_1.z.array(zod_1.z.string())),
|
|
195
|
-
|
|
198
|
+
mcpServer: (0, schema_js_1.optionalize)(zod_1.z.object({
|
|
199
|
+
agents: (0, schema_js_1.optionalize)(zod_1.z.array(zod_1.z.string())),
|
|
200
|
+
})),
|
|
201
|
+
cli: (0, schema_js_1.optionalize)(zod_1.z.object({
|
|
202
|
+
agents: (0, schema_js_1.optionalize)(zod_1.z.array(zod_1.z.string())),
|
|
203
|
+
})),
|
|
204
|
+
}));
|
|
196
205
|
async function loadAIGNEFile(path) {
|
|
197
206
|
const file = await findAIGNEFile(path);
|
|
198
207
|
const raw = await (0, type_utils_js_1.tryOrThrow)(() => index_js_1.nodejs.fs.readFile(file, "utf8"), (error) => new Error(`Failed to load aigne.yaml from ${file}: ${error.message}`));
|
|
199
|
-
const json = (0, type_utils_js_1.tryOrThrow)(() => (0,
|
|
200
|
-
const aigne = (0, type_utils_js_1.tryOrThrow)(() => aigneFileSchema.parse({
|
|
201
|
-
...json,
|
|
202
|
-
model: json.model ?? json.chatModel,
|
|
203
|
-
skills: json.skills ?? json.tools,
|
|
204
|
-
}), (error) => new Error(`Failed to validate aigne.yaml from ${file}: ${error.message}`));
|
|
208
|
+
const json = (0, type_utils_js_1.tryOrThrow)(() => (0, yaml_1.parse)(raw), (error) => new Error(`Failed to parse aigne.yaml from ${file}: ${error.message}`));
|
|
209
|
+
const aigne = (0, type_utils_js_1.tryOrThrow)(() => aigneFileSchema.parse({ ...json, model: json.model ?? json.chat_model ?? json.chatModel }), (error) => new Error(`Failed to validate aigne.yaml from ${file}: ${error.message}`));
|
|
205
210
|
return { aigne, rootDir: index_js_1.nodejs.path.dirname(file) };
|
|
206
211
|
}
|
|
207
212
|
async function findAIGNEFile(path) {
|
|
@@ -30,6 +30,6 @@ export declare const defaultInputSchema: z.ZodRecord<z.ZodString, z.ZodUnion<[z.
|
|
|
30
30
|
$get: string;
|
|
31
31
|
}>, z.ZodUnknown]>>;
|
|
32
32
|
export declare function optionalize<T>(schema: ZodType<T>): ZodType<T | undefined>;
|
|
33
|
-
export declare function camelizeSchema<T>(schema:
|
|
33
|
+
export declare function camelizeSchema<T extends ZodType>(schema: T, { shallow }?: {
|
|
34
34
|
shallow?: boolean;
|
|
35
|
-
}):
|
|
35
|
+
}): T;
|
package/lib/dts/aigne/aigne.d.ts
CHANGED
|
@@ -35,6 +35,12 @@ export interface AIGNEOptions {
|
|
|
35
35
|
* Agents to use for the AIGNE instance.
|
|
36
36
|
*/
|
|
37
37
|
agents?: Agent[];
|
|
38
|
+
mcpServer?: {
|
|
39
|
+
agents?: Agent[];
|
|
40
|
+
};
|
|
41
|
+
cli?: {
|
|
42
|
+
agents?: Agent[];
|
|
43
|
+
};
|
|
38
44
|
/**
|
|
39
45
|
* Limits for the AIGNE instance, such as timeout, max tokens, max invocations, etc.
|
|
40
46
|
*/
|
|
@@ -112,6 +118,16 @@ export declare class AIGNE<U extends UserContext = UserContext> {
|
|
|
112
118
|
readonly agents: Agent<any, any>[] & {
|
|
113
119
|
[key: string]: Agent<any, any>;
|
|
114
120
|
};
|
|
121
|
+
readonly mcpServer: {
|
|
122
|
+
agents: Agent<any, any>[] & {
|
|
123
|
+
[key: string]: Agent<any, any>;
|
|
124
|
+
};
|
|
125
|
+
};
|
|
126
|
+
readonly cli: {
|
|
127
|
+
agents: Agent<any, any>[] & {
|
|
128
|
+
[key: string]: Agent<any, any>;
|
|
129
|
+
};
|
|
130
|
+
};
|
|
115
131
|
/**
|
|
116
132
|
* Observer for the AIGNE instance.
|
|
117
133
|
*/
|
|
@@ -67,6 +67,16 @@ declare const aigneFileSchema: z.ZodObject<{
|
|
|
67
67
|
} | undefined>;
|
|
68
68
|
agents: z.ZodType<string[] | undefined, z.ZodTypeDef, string[] | undefined>;
|
|
69
69
|
skills: z.ZodType<string[] | undefined, z.ZodTypeDef, string[] | undefined>;
|
|
70
|
+
mcpServer: z.ZodType<{
|
|
71
|
+
agents?: string[] | undefined;
|
|
72
|
+
} | undefined, z.ZodTypeDef, {
|
|
73
|
+
agents?: string[] | undefined;
|
|
74
|
+
} | undefined>;
|
|
75
|
+
cli: z.ZodType<{
|
|
76
|
+
agents?: string[] | undefined;
|
|
77
|
+
} | undefined, z.ZodTypeDef, {
|
|
78
|
+
agents?: string[] | undefined;
|
|
79
|
+
} | undefined>;
|
|
70
80
|
}, "strip", z.ZodTypeAny, {
|
|
71
81
|
name?: string | undefined;
|
|
72
82
|
description?: string | undefined;
|
|
@@ -80,6 +90,12 @@ declare const aigneFileSchema: z.ZodObject<{
|
|
|
80
90
|
provider?: string | null | undefined;
|
|
81
91
|
} | undefined;
|
|
82
92
|
agents?: string[] | undefined;
|
|
93
|
+
mcpServer?: {
|
|
94
|
+
agents?: string[] | undefined;
|
|
95
|
+
} | undefined;
|
|
96
|
+
cli?: {
|
|
97
|
+
agents?: string[] | undefined;
|
|
98
|
+
} | undefined;
|
|
83
99
|
}, {
|
|
84
100
|
name?: string | undefined;
|
|
85
101
|
description?: string | undefined;
|
|
@@ -93,6 +109,12 @@ declare const aigneFileSchema: z.ZodObject<{
|
|
|
93
109
|
provider?: string | null | undefined;
|
|
94
110
|
} | undefined;
|
|
95
111
|
agents?: string[] | undefined;
|
|
112
|
+
mcpServer?: {
|
|
113
|
+
agents?: string[] | undefined;
|
|
114
|
+
} | undefined;
|
|
115
|
+
cli?: {
|
|
116
|
+
agents?: string[] | undefined;
|
|
117
|
+
} | undefined;
|
|
96
118
|
}>;
|
|
97
119
|
export declare function loadAIGNEFile(path: string): Promise<{
|
|
98
120
|
aigne: z.infer<typeof aigneFileSchema>;
|
|
@@ -30,6 +30,6 @@ export declare const defaultInputSchema: z.ZodRecord<z.ZodString, z.ZodUnion<[z.
|
|
|
30
30
|
$get: string;
|
|
31
31
|
}>, z.ZodUnknown]>>;
|
|
32
32
|
export declare function optionalize<T>(schema: ZodType<T>): ZodType<T | undefined>;
|
|
33
|
-
export declare function camelizeSchema<T>(schema:
|
|
33
|
+
export declare function camelizeSchema<T extends ZodType>(schema: T, { shallow }?: {
|
|
34
34
|
shallow?: boolean;
|
|
35
|
-
}):
|
|
35
|
+
}): T;
|
package/lib/esm/aigne/aigne.d.ts
CHANGED
|
@@ -35,6 +35,12 @@ export interface AIGNEOptions {
|
|
|
35
35
|
* Agents to use for the AIGNE instance.
|
|
36
36
|
*/
|
|
37
37
|
agents?: Agent[];
|
|
38
|
+
mcpServer?: {
|
|
39
|
+
agents?: Agent[];
|
|
40
|
+
};
|
|
41
|
+
cli?: {
|
|
42
|
+
agents?: Agent[];
|
|
43
|
+
};
|
|
38
44
|
/**
|
|
39
45
|
* Limits for the AIGNE instance, such as timeout, max tokens, max invocations, etc.
|
|
40
46
|
*/
|
|
@@ -112,6 +118,16 @@ export declare class AIGNE<U extends UserContext = UserContext> {
|
|
|
112
118
|
readonly agents: Agent<any, any>[] & {
|
|
113
119
|
[key: string]: Agent<any, any>;
|
|
114
120
|
};
|
|
121
|
+
readonly mcpServer: {
|
|
122
|
+
agents: Agent<any, any>[] & {
|
|
123
|
+
[key: string]: Agent<any, any>;
|
|
124
|
+
};
|
|
125
|
+
};
|
|
126
|
+
readonly cli: {
|
|
127
|
+
agents: Agent<any, any>[] & {
|
|
128
|
+
[key: string]: Agent<any, any>;
|
|
129
|
+
};
|
|
130
|
+
};
|
|
115
131
|
/**
|
|
116
132
|
* Observer for the AIGNE instance.
|
|
117
133
|
*/
|
package/lib/esm/aigne/aigne.js
CHANGED
|
@@ -28,6 +28,7 @@ export class AIGNE {
|
|
|
28
28
|
static async load(path, options) {
|
|
29
29
|
const { model, agents = [], skills = [], ...aigne } = await load({ ...options, path });
|
|
30
30
|
return new AIGNE({
|
|
31
|
+
...aigne,
|
|
31
32
|
...options,
|
|
32
33
|
rootDir: aigne.rootDir,
|
|
33
34
|
model: options?.model || model,
|
|
@@ -58,6 +59,10 @@ export class AIGNE {
|
|
|
58
59
|
this.skills.push(...options.skills);
|
|
59
60
|
if (options?.agents?.length)
|
|
60
61
|
this.addAgent(...options.agents);
|
|
62
|
+
if (options?.mcpServer?.agents?.length)
|
|
63
|
+
this.mcpServer.agents.push(...options.mcpServer.agents);
|
|
64
|
+
if (options?.cli?.agents?.length)
|
|
65
|
+
this.cli.agents.push(...options.cli.agents);
|
|
61
66
|
this.observer?.serve();
|
|
62
67
|
this.initProcessExitHandler();
|
|
63
68
|
}
|
|
@@ -97,6 +102,12 @@ export class AIGNE {
|
|
|
97
102
|
* Provides indexed access by agent name.
|
|
98
103
|
*/
|
|
99
104
|
agents = createAccessorArray([], (arr, name) => arr.find((i) => i.name === name));
|
|
105
|
+
mcpServer = {
|
|
106
|
+
agents: createAccessorArray([], (arr, name) => arr.find((i) => i.name === name)),
|
|
107
|
+
};
|
|
108
|
+
cli = {
|
|
109
|
+
agents: createAccessorArray([], (arr, name) => arr.find((i) => i.name === name)),
|
|
110
|
+
};
|
|
100
111
|
/**
|
|
101
112
|
* Observer for the AIGNE instance.
|
|
102
113
|
*/
|
|
@@ -67,6 +67,16 @@ declare const aigneFileSchema: z.ZodObject<{
|
|
|
67
67
|
} | undefined>;
|
|
68
68
|
agents: z.ZodType<string[] | undefined, z.ZodTypeDef, string[] | undefined>;
|
|
69
69
|
skills: z.ZodType<string[] | undefined, z.ZodTypeDef, string[] | undefined>;
|
|
70
|
+
mcpServer: z.ZodType<{
|
|
71
|
+
agents?: string[] | undefined;
|
|
72
|
+
} | undefined, z.ZodTypeDef, {
|
|
73
|
+
agents?: string[] | undefined;
|
|
74
|
+
} | undefined>;
|
|
75
|
+
cli: z.ZodType<{
|
|
76
|
+
agents?: string[] | undefined;
|
|
77
|
+
} | undefined, z.ZodTypeDef, {
|
|
78
|
+
agents?: string[] | undefined;
|
|
79
|
+
} | undefined>;
|
|
70
80
|
}, "strip", z.ZodTypeAny, {
|
|
71
81
|
name?: string | undefined;
|
|
72
82
|
description?: string | undefined;
|
|
@@ -80,6 +90,12 @@ declare const aigneFileSchema: z.ZodObject<{
|
|
|
80
90
|
provider?: string | null | undefined;
|
|
81
91
|
} | undefined;
|
|
82
92
|
agents?: string[] | undefined;
|
|
93
|
+
mcpServer?: {
|
|
94
|
+
agents?: string[] | undefined;
|
|
95
|
+
} | undefined;
|
|
96
|
+
cli?: {
|
|
97
|
+
agents?: string[] | undefined;
|
|
98
|
+
} | undefined;
|
|
83
99
|
}, {
|
|
84
100
|
name?: string | undefined;
|
|
85
101
|
description?: string | undefined;
|
|
@@ -93,6 +109,12 @@ declare const aigneFileSchema: z.ZodObject<{
|
|
|
93
109
|
provider?: string | null | undefined;
|
|
94
110
|
} | undefined;
|
|
95
111
|
agents?: string[] | undefined;
|
|
112
|
+
mcpServer?: {
|
|
113
|
+
agents?: string[] | undefined;
|
|
114
|
+
} | undefined;
|
|
115
|
+
cli?: {
|
|
116
|
+
agents?: string[] | undefined;
|
|
117
|
+
} | undefined;
|
|
96
118
|
}>;
|
|
97
119
|
export declare function loadAIGNEFile(path: string): Promise<{
|
|
98
120
|
aigne: z.infer<typeof aigneFileSchema>;
|
package/lib/esm/loader/index.js
CHANGED
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
import { nodejs } from "@aigne/platform-helpers/nodejs/index.js";
|
|
2
|
-
import camelize from "camelize-ts";
|
|
3
2
|
import { parse } from "yaml";
|
|
4
3
|
import { z } from "zod";
|
|
5
4
|
import { Agent, FunctionAgent } from "../agents/agent.js";
|
|
@@ -8,15 +7,16 @@ import { MCPAgent } from "../agents/mcp-agent.js";
|
|
|
8
7
|
import { TeamAgent } from "../agents/team-agent.js";
|
|
9
8
|
import { TransformAgent } from "../agents/transform-agent.js";
|
|
10
9
|
import { PromptBuilder } from "../prompt/prompt-builder.js";
|
|
11
|
-
import { isNonNullable, tryOrThrow } from "../utils/type-utils.js";
|
|
10
|
+
import { flat, isNonNullable, tryOrThrow } from "../utils/type-utils.js";
|
|
12
11
|
import { loadAgentFromJsFile } from "./agent-js.js";
|
|
13
12
|
import { loadAgentFromYamlFile } from "./agent-yaml.js";
|
|
14
|
-
import { optionalize } from "./schema.js";
|
|
13
|
+
import { camelizeSchema, optionalize } from "./schema.js";
|
|
15
14
|
const AIGNE_FILE_NAME = ["aigne.yaml", "aigne.yml"];
|
|
16
15
|
export async function load(options) {
|
|
17
16
|
const { aigne, rootDir } = await loadAIGNEFile(options.path);
|
|
18
|
-
const
|
|
19
|
-
const
|
|
17
|
+
const allAgentPaths = new Set(flat(aigne.agents, aigne.skills, aigne.mcpServer?.agents, aigne.cli?.agents).map((i) => nodejs.path.join(rootDir, i)));
|
|
18
|
+
const allAgents = Object.fromEntries(await Promise.all(Array.from(allAgentPaths).map(async (path) => [path, await loadAgent(path, options)])));
|
|
19
|
+
const pickAgents = (paths) => paths.map((filename) => allAgents[nodejs.path.join(rootDir, filename)]).filter(isNonNullable);
|
|
20
20
|
return {
|
|
21
21
|
...aigne,
|
|
22
22
|
rootDir,
|
|
@@ -26,8 +26,14 @@ export async function load(options) {
|
|
|
26
26
|
create: (options) => new i(options),
|
|
27
27
|
}
|
|
28
28
|
: i), aigne.model),
|
|
29
|
-
agents,
|
|
30
|
-
skills,
|
|
29
|
+
agents: pickAgents(aigne.agents ?? []),
|
|
30
|
+
skills: pickAgents(aigne.skills ?? []),
|
|
31
|
+
mcpServer: {
|
|
32
|
+
agents: pickAgents(aigne.mcpServer?.agents ?? []),
|
|
33
|
+
},
|
|
34
|
+
cli: {
|
|
35
|
+
agents: pickAgents(aigne.cli?.agents ?? []),
|
|
36
|
+
},
|
|
31
37
|
};
|
|
32
38
|
}
|
|
33
39
|
export async function loadAgent(path, options, agentOptions) {
|
|
@@ -167,32 +173,34 @@ export async function loadModel(models, model, modelOptions, accessKeyOptions) {
|
|
|
167
173
|
modelOptions: { ...params, ...modelOptions },
|
|
168
174
|
});
|
|
169
175
|
}
|
|
170
|
-
const aigneFileSchema = z.object({
|
|
176
|
+
const aigneFileSchema = camelizeSchema(z.object({
|
|
171
177
|
name: optionalize(z.string()),
|
|
172
178
|
description: optionalize(z.string()),
|
|
173
179
|
model: optionalize(z.union([
|
|
174
180
|
z.string(),
|
|
175
|
-
z.object({
|
|
181
|
+
camelizeSchema(z.object({
|
|
176
182
|
provider: z.string().nullish(),
|
|
177
183
|
name: z.string().nullish(),
|
|
178
184
|
temperature: z.number().min(0).max(2).nullish(),
|
|
179
185
|
topP: z.number().min(0).nullish(),
|
|
180
186
|
frequencyPenalty: z.number().min(-2).max(2).nullish(),
|
|
181
187
|
presencePenalty: z.number().min(-2).max(2).nullish(),
|
|
182
|
-
}),
|
|
188
|
+
})),
|
|
183
189
|
])).transform((v) => (typeof v === "string" ? { name: v } : v)),
|
|
184
190
|
agents: optionalize(z.array(z.string())),
|
|
185
191
|
skills: optionalize(z.array(z.string())),
|
|
186
|
-
|
|
192
|
+
mcpServer: optionalize(z.object({
|
|
193
|
+
agents: optionalize(z.array(z.string())),
|
|
194
|
+
})),
|
|
195
|
+
cli: optionalize(z.object({
|
|
196
|
+
agents: optionalize(z.array(z.string())),
|
|
197
|
+
})),
|
|
198
|
+
}));
|
|
187
199
|
export async function loadAIGNEFile(path) {
|
|
188
200
|
const file = await findAIGNEFile(path);
|
|
189
201
|
const raw = await tryOrThrow(() => nodejs.fs.readFile(file, "utf8"), (error) => new Error(`Failed to load aigne.yaml from ${file}: ${error.message}`));
|
|
190
|
-
const json = tryOrThrow(() =>
|
|
191
|
-
const aigne = tryOrThrow(() => aigneFileSchema.parse({
|
|
192
|
-
...json,
|
|
193
|
-
model: json.model ?? json.chatModel,
|
|
194
|
-
skills: json.skills ?? json.tools,
|
|
195
|
-
}), (error) => new Error(`Failed to validate aigne.yaml from ${file}: ${error.message}`));
|
|
202
|
+
const json = tryOrThrow(() => parse(raw), (error) => new Error(`Failed to parse aigne.yaml from ${file}: ${error.message}`));
|
|
203
|
+
const aigne = tryOrThrow(() => aigneFileSchema.parse({ ...json, model: json.model ?? json.chat_model ?? json.chatModel }), (error) => new Error(`Failed to validate aigne.yaml from ${file}: ${error.message}`));
|
|
196
204
|
return { aigne, rootDir: nodejs.path.dirname(file) };
|
|
197
205
|
}
|
|
198
206
|
async function findAIGNEFile(path) {
|
|
@@ -30,6 +30,6 @@ export declare const defaultInputSchema: z.ZodRecord<z.ZodString, z.ZodUnion<[z.
|
|
|
30
30
|
$get: string;
|
|
31
31
|
}>, z.ZodUnknown]>>;
|
|
32
32
|
export declare function optionalize<T>(schema: ZodType<T>): ZodType<T | undefined>;
|
|
33
|
-
export declare function camelizeSchema<T>(schema:
|
|
33
|
+
export declare function camelizeSchema<T extends ZodType>(schema: T, { shallow }?: {
|
|
34
34
|
shallow?: boolean;
|
|
35
|
-
}):
|
|
35
|
+
}): T;
|