@aigne/core 1.28.2 → 1.29.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 (44) hide show
  1. package/CHANGELOG.md +7 -0
  2. package/lib/cjs/agents/agent.d.ts +1 -0
  3. package/lib/cjs/agents/agent.js +9 -5
  4. package/lib/cjs/agents/team-agent.d.ts +59 -2
  5. package/lib/cjs/agents/team-agent.js +54 -0
  6. package/lib/cjs/agents/transform-agent.d.ts +82 -0
  7. package/lib/cjs/agents/transform-agent.js +67 -0
  8. package/lib/cjs/index.d.ts +1 -0
  9. package/lib/cjs/index.js +1 -0
  10. package/lib/cjs/loader/agent-js.d.ts +2 -2
  11. package/lib/cjs/loader/agent-js.js +11 -15
  12. package/lib/cjs/loader/agent-yaml.d.ts +35 -44
  13. package/lib/cjs/loader/agent-yaml.js +58 -103
  14. package/lib/cjs/loader/index.js +28 -11
  15. package/lib/cjs/loader/schema.d.ts +2 -1
  16. package/lib/cjs/loader/schema.js +4 -0
  17. package/lib/dts/agents/agent.d.ts +1 -0
  18. package/lib/dts/agents/team-agent.d.ts +59 -2
  19. package/lib/dts/agents/transform-agent.d.ts +82 -0
  20. package/lib/dts/index.d.ts +1 -0
  21. package/lib/dts/loader/agent-js.d.ts +2 -2
  22. package/lib/dts/loader/agent-yaml.d.ts +35 -44
  23. package/lib/dts/loader/schema.d.ts +2 -1
  24. package/lib/esm/agents/agent.d.ts +1 -0
  25. package/lib/esm/agents/agent.js +8 -5
  26. package/lib/esm/agents/team-agent.d.ts +59 -2
  27. package/lib/esm/agents/team-agent.js +53 -2
  28. package/lib/esm/agents/transform-agent.d.ts +82 -0
  29. package/lib/esm/agents/transform-agent.js +60 -0
  30. package/lib/esm/index.d.ts +1 -0
  31. package/lib/esm/index.js +1 -0
  32. package/lib/esm/loader/agent-js.d.ts +2 -2
  33. package/lib/esm/loader/agent-js.js +9 -16
  34. package/lib/esm/loader/agent-yaml.d.ts +35 -44
  35. package/lib/esm/loader/agent-yaml.js +56 -104
  36. package/lib/esm/loader/index.js +28 -11
  37. package/lib/esm/loader/schema.d.ts +2 -1
  38. package/lib/esm/loader/schema.js +3 -0
  39. package/package.json +2 -1
  40. package/lib/cjs/utils/camelize.d.ts +0 -13
  41. package/lib/cjs/utils/camelize.js +0 -16
  42. package/lib/dts/utils/camelize.d.ts +0 -13
  43. package/lib/esm/utils/camelize.d.ts +0 -13
  44. package/lib/esm/utils/camelize.js +0 -10
@@ -5,6 +5,7 @@ import { Agent, FunctionAgent } from "../agents/agent.js";
5
5
  import { AIAgent } from "../agents/ai-agent.js";
6
6
  import { MCPAgent } from "../agents/mcp-agent.js";
7
7
  import { TeamAgent } from "../agents/team-agent.js";
8
+ import { TransformAgent } from "../agents/transform-agent.js";
8
9
  import { tryOrThrow } from "../utils/type-utils.js";
9
10
  import { loadAgentFromJsFile } from "./agent-js.js";
10
11
  import { loadAgentFromYamlFile } from "./agent-yaml.js";
@@ -36,20 +37,29 @@ export async function loadAgent(path, options) {
36
37
  }
37
38
  if ([".yml", ".yaml"].includes(nodejs.path.extname(path))) {
38
39
  const agent = await loadAgentFromYamlFile(path);
39
- const skills = "skills" in agent
40
- ? agent.skills &&
41
- (await Promise.all(agent.skills.map((filename) => loadAgent(nodejs.path.join(nodejs.path.dirname(path), filename), options))))
42
- : undefined;
43
- if (agent.type === "ai") {
40
+ return parseAgent(path, agent, options);
41
+ }
42
+ throw new Error(`Unsupported agent file type: ${path}`);
43
+ }
44
+ async function parseAgent(path, agent, options) {
45
+ const skills = "skills" in agent
46
+ ? agent.skills &&
47
+ (await Promise.all(agent.skills.map((skill) => typeof skill === "string"
48
+ ? loadAgent(nodejs.path.join(nodejs.path.dirname(path), skill), options)
49
+ : parseAgent(path, skill, options))))
50
+ : undefined;
51
+ const memory = "memory" in agent && options?.memories?.length
52
+ ? await loadMemory(options.memories, typeof agent.memory === "object" ? agent.memory.provider : undefined, typeof agent.memory === "object" ? agent.memory : {})
53
+ : undefined;
54
+ switch (agent.type) {
55
+ case "ai": {
44
56
  return AIAgent.from({
45
57
  ...agent,
46
- memory: !options?.memories?.length || !agent.memory
47
- ? undefined
48
- : await loadMemory(options.memories, typeof agent.memory === "object" ? agent.memory.provider : undefined, typeof agent.memory === "object" ? agent.memory : {}),
58
+ memory,
49
59
  skills,
50
60
  });
51
61
  }
52
- if (agent.type === "mcp") {
62
+ case "mcp": {
53
63
  if (agent.url) {
54
64
  return MCPAgent.from({
55
65
  url: agent.url,
@@ -63,14 +73,21 @@ export async function loadAgent(path, options) {
63
73
  }
64
74
  throw new Error(`Missing url or command in mcp agent: ${path}`);
65
75
  }
66
- if (agent.type === "team") {
76
+ case "team": {
67
77
  return TeamAgent.from({
68
78
  ...agent,
79
+ memory,
80
+ skills,
81
+ });
82
+ }
83
+ case "transform": {
84
+ return TransformAgent.from({
85
+ ...agent,
86
+ memory,
69
87
  skills,
70
88
  });
71
89
  }
72
90
  }
73
- throw new Error(`Unsupported agent file type: ${path}`);
74
91
  }
75
92
  async function loadMemory(memories, provider, options) {
76
93
  const M = !provider
@@ -1,4 +1,4 @@
1
- import { z } from "zod";
1
+ import { type ZodType, z } from "zod";
2
2
  export declare const inputOutputSchema: z.ZodObject<{
3
3
  type: z.ZodLiteral<"object">;
4
4
  properties: z.ZodRecord<z.ZodString, z.ZodAny>;
@@ -15,3 +15,4 @@ export declare const inputOutputSchema: z.ZodObject<{
15
15
  required?: string[] | undefined;
16
16
  additionalProperties?: boolean | undefined;
17
17
  }>;
18
+ export declare function optionalize<T>(schema: ZodType<T>): ZodType<T | undefined>;
@@ -5,3 +5,6 @@ export const inputOutputSchema = z.object({
5
5
  required: z.array(z.string()).optional(),
6
6
  additionalProperties: z.boolean().optional(),
7
7
  });
8
+ export function optionalize(schema) {
9
+ return schema.nullish().transform((v) => v ?? undefined);
10
+ }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@aigne/core",
3
- "version": "1.28.2",
3
+ "version": "1.29.0",
4
4
  "description": "AIGNE core library for building AI-powered applications",
5
5
  "publishConfig": {
6
6
  "access": "public"
@@ -71,6 +71,7 @@
71
71
  "eventsource-parser": "^3.0.1",
72
72
  "fast-deep-equal": "^3.1.3",
73
73
  "immer": "^10.1.1",
74
+ "jsonata": "^2.0.6",
74
75
  "mustache": "^4.2.0",
75
76
  "nanoid": "^5.1.5",
76
77
  "p-retry": "^6.2.1",
@@ -1,13 +0,0 @@
1
- export declare function customCamelize<T extends Record<string, unknown>, K extends KeyofUnion<T> = never>(obj: T, { shallowKeys }?: {
2
- shallowKeys?: K[];
3
- }): CustomCamelize<T, K>;
4
- type KeyofUnion<U> = U extends Record<string, unknown> ? keyof U : never;
5
- type CamelCase<S extends string> = S extends `${infer P1}_${infer P2}${infer P3}` ? `${P1}${Uppercase<P2>}${CamelCase<P3>}` : S;
6
- declare const _unique: unique symbol;
7
- type _never = typeof _unique;
8
- type ExtractTypeFromUnion<T, U> = Extract<T, U> extends never ? _never : Extract<T, U> extends Array<infer E> ? Array<E> : U;
9
- type ExtractTypeWithConstFromUnion<T, U> = Exclude<T, Exclude<T, U>>;
10
- export type CustomCamelize<T, ShallowKeys extends KeyofUnion<T> | undefined = undefined> = ExtractTypeFromUnion<T, never> extends never ? never : ExtractTypeFromUnion<T, Date> extends Date ? ExtractTypeWithConstFromUnion<T, Date> | CustomCamelize<Exclude<T, Date>> : ExtractTypeFromUnion<T, RegExp> extends RegExp ? ExtractTypeWithConstFromUnion<T, RegExp> | CustomCamelize<Exclude<T, RegExp>> : ExtractTypeFromUnion<T, Array<unknown>> extends Array<infer U> ? Array<CustomCamelize<U>> | CustomCamelize<Exclude<T, Array<U>>> : ExtractTypeFromUnion<T, Function> extends Function ? ExtractTypeWithConstFromUnion<T, Function> | CustomCamelize<Exclude<T, Function>> : ExtractTypeFromUnion<T, object> extends object ? {
11
- [K in keyof T as Uncapitalize<CamelCase<string & K>>]: K extends Exclude<ShallowKeys, undefined> ? T[K] : CustomCamelize<T[K]>;
12
- } : T;
13
- export {};
@@ -1,16 +0,0 @@
1
- "use strict";
2
- var __importDefault = (this && this.__importDefault) || function (mod) {
3
- return (mod && mod.__esModule) ? mod : { "default": mod };
4
- };
5
- Object.defineProperty(exports, "__esModule", { value: true });
6
- exports.customCamelize = customCamelize;
7
- const camelize_ts_1 = __importDefault(require("camelize-ts"));
8
- function customCamelize(obj, { shallowKeys = [] } = {}) {
9
- const shallow = Object.fromEntries(shallowKeys?.filter((key) => key in obj).map((key) => [key, obj[key]]) ?? []);
10
- const deep = Object.fromEntries(Object.entries(obj).filter(([key]) => !shallowKeys?.includes(key)));
11
- return {
12
- ...(0, camelize_ts_1.default)(shallow, true),
13
- ...(0, camelize_ts_1.default)(deep),
14
- };
15
- }
16
- const _unique = Symbol();
@@ -1,13 +0,0 @@
1
- export declare function customCamelize<T extends Record<string, unknown>, K extends KeyofUnion<T> = never>(obj: T, { shallowKeys }?: {
2
- shallowKeys?: K[];
3
- }): CustomCamelize<T, K>;
4
- type KeyofUnion<U> = U extends Record<string, unknown> ? keyof U : never;
5
- type CamelCase<S extends string> = S extends `${infer P1}_${infer P2}${infer P3}` ? `${P1}${Uppercase<P2>}${CamelCase<P3>}` : S;
6
- declare const _unique: unique symbol;
7
- type _never = typeof _unique;
8
- type ExtractTypeFromUnion<T, U> = Extract<T, U> extends never ? _never : Extract<T, U> extends Array<infer E> ? Array<E> : U;
9
- type ExtractTypeWithConstFromUnion<T, U> = Exclude<T, Exclude<T, U>>;
10
- export type CustomCamelize<T, ShallowKeys extends KeyofUnion<T> | undefined = undefined> = ExtractTypeFromUnion<T, never> extends never ? never : ExtractTypeFromUnion<T, Date> extends Date ? ExtractTypeWithConstFromUnion<T, Date> | CustomCamelize<Exclude<T, Date>> : ExtractTypeFromUnion<T, RegExp> extends RegExp ? ExtractTypeWithConstFromUnion<T, RegExp> | CustomCamelize<Exclude<T, RegExp>> : ExtractTypeFromUnion<T, Array<unknown>> extends Array<infer U> ? Array<CustomCamelize<U>> | CustomCamelize<Exclude<T, Array<U>>> : ExtractTypeFromUnion<T, Function> extends Function ? ExtractTypeWithConstFromUnion<T, Function> | CustomCamelize<Exclude<T, Function>> : ExtractTypeFromUnion<T, object> extends object ? {
11
- [K in keyof T as Uncapitalize<CamelCase<string & K>>]: K extends Exclude<ShallowKeys, undefined> ? T[K] : CustomCamelize<T[K]>;
12
- } : T;
13
- export {};
@@ -1,13 +0,0 @@
1
- export declare function customCamelize<T extends Record<string, unknown>, K extends KeyofUnion<T> = never>(obj: T, { shallowKeys }?: {
2
- shallowKeys?: K[];
3
- }): CustomCamelize<T, K>;
4
- type KeyofUnion<U> = U extends Record<string, unknown> ? keyof U : never;
5
- type CamelCase<S extends string> = S extends `${infer P1}_${infer P2}${infer P3}` ? `${P1}${Uppercase<P2>}${CamelCase<P3>}` : S;
6
- declare const _unique: unique symbol;
7
- type _never = typeof _unique;
8
- type ExtractTypeFromUnion<T, U> = Extract<T, U> extends never ? _never : Extract<T, U> extends Array<infer E> ? Array<E> : U;
9
- type ExtractTypeWithConstFromUnion<T, U> = Exclude<T, Exclude<T, U>>;
10
- export type CustomCamelize<T, ShallowKeys extends KeyofUnion<T> | undefined = undefined> = ExtractTypeFromUnion<T, never> extends never ? never : ExtractTypeFromUnion<T, Date> extends Date ? ExtractTypeWithConstFromUnion<T, Date> | CustomCamelize<Exclude<T, Date>> : ExtractTypeFromUnion<T, RegExp> extends RegExp ? ExtractTypeWithConstFromUnion<T, RegExp> | CustomCamelize<Exclude<T, RegExp>> : ExtractTypeFromUnion<T, Array<unknown>> extends Array<infer U> ? Array<CustomCamelize<U>> | CustomCamelize<Exclude<T, Array<U>>> : ExtractTypeFromUnion<T, Function> extends Function ? ExtractTypeWithConstFromUnion<T, Function> | CustomCamelize<Exclude<T, Function>> : ExtractTypeFromUnion<T, object> extends object ? {
11
- [K in keyof T as Uncapitalize<CamelCase<string & K>>]: K extends Exclude<ShallowKeys, undefined> ? T[K] : CustomCamelize<T[K]>;
12
- } : T;
13
- export {};
@@ -1,10 +0,0 @@
1
- import camelize from "camelize-ts";
2
- export function customCamelize(obj, { shallowKeys = [] } = {}) {
3
- const shallow = Object.fromEntries(shallowKeys?.filter((key) => key in obj).map((key) => [key, obj[key]]) ?? []);
4
- const deep = Object.fromEntries(Object.entries(obj).filter(([key]) => !shallowKeys?.includes(key)));
5
- return {
6
- ...camelize(shallow, true),
7
- ...camelize(deep),
8
- };
9
- }
10
- const _unique = Symbol();