@aigne/core 1.15.0 → 1.17.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 (194) hide show
  1. package/CHANGELOG.md +22 -0
  2. package/README.md +9 -7
  3. package/README.zh.md +9 -7
  4. package/lib/cjs/agents/agent.d.ts +168 -29
  5. package/lib/cjs/agents/agent.js +152 -56
  6. package/lib/cjs/agents/ai-agent.d.ts +7 -7
  7. package/lib/cjs/agents/ai-agent.js +19 -15
  8. package/lib/{esm/models → cjs/agents}/chat-model.d.ts +29 -19
  9. package/lib/cjs/{models → agents}/chat-model.js +56 -15
  10. package/lib/cjs/agents/guide-rail-agent.d.ts +62 -0
  11. package/lib/cjs/agents/guide-rail-agent.js +14 -0
  12. package/lib/cjs/agents/mcp-agent.d.ts +3 -4
  13. package/lib/cjs/agents/mcp-agent.js +11 -11
  14. package/lib/cjs/agents/team-agent.d.ts +7 -8
  15. package/lib/cjs/agents/team-agent.js +10 -10
  16. package/lib/cjs/agents/user-agent.d.ts +4 -4
  17. package/lib/cjs/agents/user-agent.js +10 -10
  18. package/lib/cjs/aigne/aigne.d.ts +13 -11
  19. package/lib/cjs/aigne/aigne.js +7 -6
  20. package/lib/cjs/aigne/context.d.ts +19 -8
  21. package/lib/cjs/aigne/context.js +27 -7
  22. package/lib/cjs/index.d.ts +2 -1
  23. package/lib/cjs/index.js +2 -1
  24. package/lib/cjs/loader/agent-yaml.d.ts +2 -2
  25. package/lib/cjs/loader/index.d.ts +18 -11
  26. package/lib/cjs/loader/index.js +8 -27
  27. package/lib/cjs/memory/default-memory/default-memory-storage/index.d.ts +30 -0
  28. package/lib/cjs/memory/default-memory/default-memory-storage/index.js +69 -0
  29. package/lib/cjs/memory/default-memory/default-memory-storage/migrate.d.ts +7 -0
  30. package/lib/cjs/memory/default-memory/default-memory-storage/migrate.js +53 -0
  31. package/lib/cjs/memory/default-memory/default-memory-storage/migrations/20250523165801-init.d.ts +7 -0
  32. package/lib/cjs/memory/default-memory/default-memory-storage/migrations/20250523165801-init.js +33 -0
  33. package/lib/cjs/memory/default-memory/default-memory-storage/models/memory.d.ts +10 -0
  34. package/lib/cjs/memory/default-memory/default-memory-storage/models/memory.js +32 -0
  35. package/lib/cjs/memory/default-memory/index.d.ts +10 -0
  36. package/lib/cjs/memory/{default-memory.js → default-memory/index.js} +16 -25
  37. package/lib/cjs/memory/default-memory/storage.d.ts +13 -0
  38. package/lib/cjs/memory/default-memory/storage.js +6 -0
  39. package/lib/cjs/memory/memory.d.ts +3 -2
  40. package/lib/cjs/memory/memory.js +1 -1
  41. package/lib/cjs/memory/retriever.d.ts +2 -2
  42. package/lib/cjs/prompt/prompt-builder.d.ts +10 -4
  43. package/lib/cjs/prompt/prompt-builder.js +4 -4
  44. package/lib/cjs/prompt/template.d.ts +3 -3
  45. package/lib/cjs/utils/json-schema.js +1 -1
  46. package/lib/cjs/utils/logger.d.ts +33 -8
  47. package/lib/cjs/utils/logger.js +63 -5
  48. package/lib/cjs/utils/model-utils.d.ts +1 -1
  49. package/lib/cjs/utils/stream-utils.d.ts +3 -1
  50. package/lib/cjs/utils/stream-utils.js +31 -1
  51. package/lib/cjs/utils/type-utils.d.ts +7 -2
  52. package/lib/dts/agents/agent.d.ts +168 -29
  53. package/lib/dts/agents/ai-agent.d.ts +7 -7
  54. package/lib/{cjs/models → dts/agents}/chat-model.d.ts +29 -19
  55. package/lib/dts/agents/guide-rail-agent.d.ts +62 -0
  56. package/lib/dts/agents/mcp-agent.d.ts +3 -4
  57. package/lib/dts/agents/team-agent.d.ts +7 -8
  58. package/lib/dts/agents/user-agent.d.ts +4 -4
  59. package/lib/dts/aigne/aigne.d.ts +13 -11
  60. package/lib/dts/aigne/context.d.ts +19 -8
  61. package/lib/dts/index.d.ts +2 -1
  62. package/lib/dts/loader/agent-yaml.d.ts +2 -2
  63. package/lib/dts/loader/index.d.ts +18 -11
  64. package/lib/dts/memory/default-memory/default-memory-storage/index.d.ts +30 -0
  65. package/lib/dts/memory/default-memory/default-memory-storage/migrate.d.ts +7 -0
  66. package/lib/dts/memory/default-memory/default-memory-storage/migrations/20250523165801-init.d.ts +7 -0
  67. package/lib/dts/memory/default-memory/default-memory-storage/models/memory.d.ts +10 -0
  68. package/lib/dts/memory/default-memory/index.d.ts +10 -0
  69. package/lib/dts/memory/default-memory/storage.d.ts +13 -0
  70. package/lib/dts/memory/memory.d.ts +3 -2
  71. package/lib/dts/memory/retriever.d.ts +2 -2
  72. package/lib/dts/prompt/prompt-builder.d.ts +10 -4
  73. package/lib/dts/prompt/template.d.ts +3 -3
  74. package/lib/dts/utils/logger.d.ts +33 -8
  75. package/lib/dts/utils/model-utils.d.ts +1 -1
  76. package/lib/dts/utils/stream-utils.d.ts +3 -1
  77. package/lib/dts/utils/type-utils.d.ts +7 -2
  78. package/lib/esm/agents/agent.d.ts +168 -29
  79. package/lib/esm/agents/agent.js +152 -56
  80. package/lib/esm/agents/ai-agent.d.ts +7 -7
  81. package/lib/esm/agents/ai-agent.js +18 -14
  82. package/lib/{dts/models → esm/agents}/chat-model.d.ts +29 -19
  83. package/lib/esm/{models → agents}/chat-model.js +56 -15
  84. package/lib/esm/agents/guide-rail-agent.d.ts +62 -0
  85. package/lib/esm/agents/guide-rail-agent.js +11 -0
  86. package/lib/esm/agents/mcp-agent.d.ts +3 -4
  87. package/lib/esm/agents/mcp-agent.js +11 -11
  88. package/lib/esm/agents/team-agent.d.ts +7 -8
  89. package/lib/esm/agents/team-agent.js +10 -10
  90. package/lib/esm/agents/user-agent.d.ts +4 -4
  91. package/lib/esm/agents/user-agent.js +10 -10
  92. package/lib/esm/aigne/aigne.d.ts +13 -11
  93. package/lib/esm/aigne/aigne.js +7 -6
  94. package/lib/esm/aigne/context.d.ts +19 -8
  95. package/lib/esm/aigne/context.js +28 -8
  96. package/lib/esm/index.d.ts +2 -1
  97. package/lib/esm/index.js +2 -1
  98. package/lib/esm/loader/agent-yaml.d.ts +2 -2
  99. package/lib/esm/loader/index.d.ts +18 -11
  100. package/lib/esm/loader/index.js +8 -27
  101. package/lib/esm/memory/default-memory/default-memory-storage/index.d.ts +30 -0
  102. package/lib/esm/memory/default-memory/default-memory-storage/index.js +64 -0
  103. package/lib/esm/memory/default-memory/default-memory-storage/migrate.d.ts +7 -0
  104. package/lib/esm/memory/default-memory/default-memory-storage/migrate.js +16 -0
  105. package/lib/esm/memory/default-memory/default-memory-storage/migrations/20250523165801-init.d.ts +7 -0
  106. package/lib/esm/memory/default-memory/default-memory-storage/migrations/20250523165801-init.js +28 -0
  107. package/lib/esm/memory/default-memory/default-memory-storage/models/memory.d.ts +10 -0
  108. package/lib/esm/memory/default-memory/default-memory-storage/models/memory.js +29 -0
  109. package/lib/esm/memory/default-memory/index.d.ts +10 -0
  110. package/lib/esm/memory/{default-memory.js → default-memory/index.js} +15 -24
  111. package/lib/esm/memory/default-memory/storage.d.ts +13 -0
  112. package/lib/esm/memory/default-memory/storage.js +2 -0
  113. package/lib/esm/memory/memory.d.ts +3 -2
  114. package/lib/esm/memory/memory.js +2 -2
  115. package/lib/esm/memory/retriever.d.ts +2 -2
  116. package/lib/esm/prompt/prompt-builder.d.ts +10 -4
  117. package/lib/esm/prompt/prompt-builder.js +4 -4
  118. package/lib/esm/prompt/template.d.ts +3 -3
  119. package/lib/esm/utils/json-schema.js +1 -1
  120. package/lib/esm/utils/logger.d.ts +33 -8
  121. package/lib/esm/utils/logger.js +61 -4
  122. package/lib/esm/utils/model-utils.d.ts +1 -1
  123. package/lib/esm/utils/stream-utils.d.ts +3 -1
  124. package/lib/esm/utils/stream-utils.js +29 -1
  125. package/lib/esm/utils/type-utils.d.ts +7 -2
  126. package/package.json +4 -20
  127. package/lib/cjs/client/client.d.ts +0 -97
  128. package/lib/cjs/client/client.js +0 -87
  129. package/lib/cjs/client/index.d.ts +0 -1
  130. package/lib/cjs/client/index.js +0 -17
  131. package/lib/cjs/memory/default-memory.d.ts +0 -16
  132. package/lib/cjs/models/bedrock-chat-model.d.ts +0 -79
  133. package/lib/cjs/models/bedrock-chat-model.js +0 -303
  134. package/lib/cjs/models/claude-chat-model.d.ts +0 -114
  135. package/lib/cjs/models/claude-chat-model.js +0 -317
  136. package/lib/cjs/models/deepseek-chat-model.d.ts +0 -23
  137. package/lib/cjs/models/deepseek-chat-model.js +0 -35
  138. package/lib/cjs/models/gemini-chat-model.d.ts +0 -23
  139. package/lib/cjs/models/gemini-chat-model.js +0 -35
  140. package/lib/cjs/models/ollama-chat-model.d.ts +0 -22
  141. package/lib/cjs/models/ollama-chat-model.js +0 -34
  142. package/lib/cjs/models/open-router-chat-model.d.ts +0 -22
  143. package/lib/cjs/models/open-router-chat-model.js +0 -34
  144. package/lib/cjs/models/openai-chat-model.d.ts +0 -166
  145. package/lib/cjs/models/openai-chat-model.js +0 -415
  146. package/lib/cjs/models/xai-chat-model.d.ts +0 -21
  147. package/lib/cjs/models/xai-chat-model.js +0 -33
  148. package/lib/cjs/server/error.d.ts +0 -15
  149. package/lib/cjs/server/error.js +0 -22
  150. package/lib/cjs/server/index.d.ts +0 -2
  151. package/lib/cjs/server/index.js +0 -18
  152. package/lib/cjs/server/server.d.ts +0 -135
  153. package/lib/cjs/server/server.js +0 -187
  154. package/lib/dts/client/client.d.ts +0 -97
  155. package/lib/dts/client/index.d.ts +0 -1
  156. package/lib/dts/memory/default-memory.d.ts +0 -16
  157. package/lib/dts/models/bedrock-chat-model.d.ts +0 -79
  158. package/lib/dts/models/claude-chat-model.d.ts +0 -114
  159. package/lib/dts/models/deepseek-chat-model.d.ts +0 -23
  160. package/lib/dts/models/gemini-chat-model.d.ts +0 -23
  161. package/lib/dts/models/ollama-chat-model.d.ts +0 -22
  162. package/lib/dts/models/open-router-chat-model.d.ts +0 -22
  163. package/lib/dts/models/openai-chat-model.d.ts +0 -166
  164. package/lib/dts/models/xai-chat-model.d.ts +0 -21
  165. package/lib/dts/server/error.d.ts +0 -15
  166. package/lib/dts/server/index.d.ts +0 -2
  167. package/lib/dts/server/server.d.ts +0 -135
  168. package/lib/esm/client/client.d.ts +0 -97
  169. package/lib/esm/client/client.js +0 -83
  170. package/lib/esm/client/index.d.ts +0 -1
  171. package/lib/esm/client/index.js +0 -1
  172. package/lib/esm/memory/default-memory.d.ts +0 -16
  173. package/lib/esm/models/bedrock-chat-model.d.ts +0 -79
  174. package/lib/esm/models/bedrock-chat-model.js +0 -298
  175. package/lib/esm/models/claude-chat-model.d.ts +0 -114
  176. package/lib/esm/models/claude-chat-model.js +0 -310
  177. package/lib/esm/models/deepseek-chat-model.d.ts +0 -23
  178. package/lib/esm/models/deepseek-chat-model.js +0 -31
  179. package/lib/esm/models/gemini-chat-model.d.ts +0 -23
  180. package/lib/esm/models/gemini-chat-model.js +0 -31
  181. package/lib/esm/models/ollama-chat-model.d.ts +0 -22
  182. package/lib/esm/models/ollama-chat-model.js +0 -30
  183. package/lib/esm/models/open-router-chat-model.d.ts +0 -22
  184. package/lib/esm/models/open-router-chat-model.js +0 -30
  185. package/lib/esm/models/openai-chat-model.d.ts +0 -166
  186. package/lib/esm/models/openai-chat-model.js +0 -405
  187. package/lib/esm/models/xai-chat-model.d.ts +0 -21
  188. package/lib/esm/models/xai-chat-model.js +0 -29
  189. package/lib/esm/server/error.d.ts +0 -15
  190. package/lib/esm/server/error.js +0 -18
  191. package/lib/esm/server/index.d.ts +0 -2
  192. package/lib/esm/server/index.js +0 -2
  193. package/lib/esm/server/server.d.ts +0 -135
  194. package/lib/esm/server/server.js +0 -180
@@ -1,7 +1,7 @@
1
1
  import EventEmitter from "node:events";
2
2
  import { Agent, type AgentInvokeOptions, type AgentProcessAsyncGenerator, type AgentResponse, type AgentResponseStream, type Message } from "../agents/agent.js";
3
+ import type { ChatModel } from "../agents/chat-model.js";
3
4
  import { UserAgent } from "../agents/user-agent.js";
4
- import type { ChatModel } from "../models/chat-model.js";
5
5
  import { type OmitPropertiesFromArrayFirstElement } from "../utils/type-utils.js";
6
6
  import type { Args, Listener, TypedEventEmitter } from "../utils/typed-event-emtter.js";
7
7
  import { type MessagePayload, MessageQueue, type MessageQueueListener, type Unsubscribe } from "./message-queue.js";
@@ -38,19 +38,27 @@ export type ContextEmitEventMap = {
38
38
  /**
39
39
  * @hidden
40
40
  */
41
- export interface InvokeOptions extends AgentInvokeOptions {
41
+ export interface InvokeOptions<U extends UserContext = UserContext> extends Partial<Omit<AgentInvokeOptions<U>, "context">> {
42
42
  returnActiveAgent?: boolean;
43
43
  disableTransfer?: boolean;
44
+ sourceAgent?: Agent;
45
+ userContext?: U;
44
46
  }
45
47
  /**
46
48
  * @hidden
47
49
  */
48
- export interface Context extends TypedEventEmitter<ContextEventMap, ContextEmitEventMap> {
50
+ export interface UserContext extends Record<string, unknown> {
51
+ }
52
+ /**
53
+ * @hidden
54
+ */
55
+ export interface Context<U extends UserContext = UserContext> extends TypedEventEmitter<ContextEventMap, ContextEmitEventMap> {
49
56
  model?: ChatModel;
50
57
  skills?: Agent[];
51
58
  usage: ContextUsage;
52
59
  limits?: ContextLimits;
53
60
  status?: "normal" | "timeout";
61
+ userContext: U;
54
62
  /**
55
63
  * Create a user agent to consistently invoke an agent
56
64
  * @param agent Agent to invoke
@@ -91,7 +99,7 @@ export interface Context extends TypedEventEmitter<ContextEventMap, ContextEmitE
91
99
  * @param topic topic name, or an array of topic names
92
100
  * @param payload message to publish
93
101
  */
94
- publish(topic: string | string[], payload: Omit<MessagePayload, "context"> | Message | string): void;
102
+ publish(topic: string | string[], payload: Omit<MessagePayload, "context"> | Message | string, options?: InvokeOptions): void;
95
103
  subscribe(topic: string | string[], listener?: undefined): Promise<MessagePayload>;
96
104
  subscribe(topic: string | string[], listener: MessageQueueListener): Unsubscribe;
97
105
  subscribe(topic: string | string[], listener?: MessageQueueListener): Unsubscribe | Promise<MessagePayload>;
@@ -113,15 +121,17 @@ export interface Context extends TypedEventEmitter<ContextEventMap, ContextEmitE
113
121
  * @hidden
114
122
  */
115
123
  export declare class AIGNEContext implements Context {
116
- constructor(parent?: ConstructorParameters<typeof AIGNEContextInternal>[0]);
124
+ constructor(...[parent, ...args]: ConstructorParameters<typeof AIGNEContextShared>);
117
125
  parentId?: string;
118
126
  id: string;
119
- readonly internal: AIGNEContextInternal;
127
+ readonly internal: AIGNEContextShared;
120
128
  get model(): ChatModel | undefined;
121
129
  get skills(): Agent<Message, Message>[] | undefined;
122
130
  get limits(): ContextLimits | undefined;
123
131
  get status(): "normal" | "timeout";
124
132
  get usage(): ContextUsage;
133
+ get userContext(): Context["userContext"];
134
+ set userContext(userContext: Context["userContext"]);
125
135
  newContext({ reset }?: {
126
136
  reset?: boolean;
127
137
  }): AIGNEContext;
@@ -134,17 +144,18 @@ export declare class AIGNEContext implements Context {
134
144
  once<K extends keyof ContextEventMap>(eventName: K, listener: Listener<K, ContextEventMap>): this;
135
145
  off<K extends keyof ContextEventMap>(eventName: K, listener: Listener<K, ContextEventMap>): this;
136
146
  }
137
- declare class AIGNEContextInternal {
147
+ declare class AIGNEContextShared {
138
148
  private readonly parent?;
139
149
  constructor(parent?: (Pick<Context, "model" | "skills" | "limits"> & {
140
150
  messageQueue?: MessageQueue;
141
- }) | undefined);
151
+ }) | undefined, overrides?: Partial<Context>);
142
152
  readonly messageQueue: MessageQueue;
143
153
  readonly events: EventEmitter<ContextEventMap>;
144
154
  get model(): ChatModel | undefined;
145
155
  get skills(): Agent<Message, Message>[] | undefined;
146
156
  get limits(): ContextLimits | undefined;
147
157
  usage: ContextUsage;
158
+ userContext: Context["userContext"];
148
159
  private abortController;
149
160
  private timer?;
150
161
  private initTimeout;
@@ -19,13 +19,13 @@ const usage_js_1 = require("./usage.js");
19
19
  * @hidden
20
20
  */
21
21
  class AIGNEContext {
22
- constructor(parent) {
22
+ constructor(...[parent, ...args]) {
23
23
  if (parent instanceof AIGNEContext) {
24
24
  this.parentId = parent.id;
25
25
  this.internal = parent.internal;
26
26
  }
27
27
  else {
28
- this.internal = new AIGNEContextInternal(parent);
28
+ this.internal = new AIGNEContextShared(parent, ...args);
29
29
  }
30
30
  }
31
31
  parentId;
@@ -46,9 +46,15 @@ class AIGNEContext {
46
46
  get usage() {
47
47
  return this.internal.usage;
48
48
  }
49
+ get userContext() {
50
+ return this.internal.userContext;
51
+ }
52
+ set userContext(userContext) {
53
+ this.internal.userContext = userContext;
54
+ }
49
55
  newContext({ reset } = {}) {
50
56
  if (reset)
51
- return new AIGNEContext(this.internal);
57
+ return new AIGNEContext(this, { userContext: {} });
52
58
  return new AIGNEContext(this);
53
59
  }
54
60
  invoke = ((agent, message, options) => {
@@ -57,6 +63,8 @@ class AIGNEContext {
57
63
  message,
58
64
  options,
59
65
  });
66
+ if (options?.userContext)
67
+ Object.assign(this.userContext, options.userContext);
60
68
  if ((0, type_utils_js_1.isNil)(message)) {
61
69
  return user_agent_js_1.UserAgent.from({
62
70
  context: this,
@@ -96,7 +104,9 @@ class AIGNEContext {
96
104
  return stream;
97
105
  });
98
106
  });
99
- publish = ((topic, payload) => {
107
+ publish = ((topic, payload, options) => {
108
+ if (options?.userContext)
109
+ Object.assign(this.userContext, options.userContext);
100
110
  return this.internal.messageQueue.publish(topic, {
101
111
  ...(0, message_queue_js_1.toMessagePayload)(payload),
102
112
  context: this,
@@ -132,11 +142,12 @@ class AIGNEContext {
132
142
  }
133
143
  }
134
144
  exports.AIGNEContext = AIGNEContext;
135
- class AIGNEContextInternal {
145
+ class AIGNEContextShared {
136
146
  parent;
137
- constructor(parent) {
147
+ constructor(parent, overrides) {
138
148
  this.parent = parent;
139
149
  this.messageQueue = this.parent?.messageQueue ?? new message_queue_js_1.MessageQueue();
150
+ this.userContext = overrides?.userContext ?? {};
140
151
  }
141
152
  messageQueue;
142
153
  events = new node_events_1.default();
@@ -150,6 +161,7 @@ class AIGNEContextInternal {
150
161
  return this.parent?.limits;
151
162
  }
152
163
  usage = (0, usage_js_1.newEmptyContextUsage)();
164
+ userContext;
153
165
  abortController = new AbortController();
154
166
  timer;
155
167
  initTimeout() {
@@ -174,7 +186,15 @@ class AIGNEContextInternal {
174
186
  let output;
175
187
  for (;;) {
176
188
  const result = {};
177
- const stream = await activeAgent.invoke(input, context, { streaming: true });
189
+ if (options?.sourceAgent && activeAgent !== options.sourceAgent) {
190
+ options.sourceAgent.hooks.onHandoff?.({
191
+ context,
192
+ source: options.sourceAgent,
193
+ target: activeAgent,
194
+ input,
195
+ });
196
+ }
197
+ const stream = await activeAgent.invoke(input, { ...options, context, streaming: true });
178
198
  for await (const value of stream) {
179
199
  if (value.delta.text) {
180
200
  yield { delta: { text: value.delta.text } };
@@ -1,10 +1,11 @@
1
1
  export * from "./agents/agent.js";
2
2
  export * from "./agents/ai-agent.js";
3
+ export * from "./agents/chat-model.js";
4
+ export * from "./agents/guide-rail-agent.js";
3
5
  export * from "./agents/mcp-agent.js";
4
6
  export * from "./agents/team-agent.js";
5
7
  export * from "./agents/types.js";
6
8
  export * from "./agents/user-agent.js";
7
9
  export * from "./aigne/index.js";
8
- export * from "./models/chat-model.js";
9
10
  export * from "./prompt/prompt-builder.js";
10
11
  export * from "./prompt/template.js";
package/lib/cjs/index.js CHANGED
@@ -16,11 +16,12 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
16
16
  Object.defineProperty(exports, "__esModule", { value: true });
17
17
  __exportStar(require("./agents/agent.js"), exports);
18
18
  __exportStar(require("./agents/ai-agent.js"), exports);
19
+ __exportStar(require("./agents/chat-model.js"), exports);
20
+ __exportStar(require("./agents/guide-rail-agent.js"), exports);
19
21
  __exportStar(require("./agents/mcp-agent.js"), exports);
20
22
  __exportStar(require("./agents/team-agent.js"), exports);
21
23
  __exportStar(require("./agents/types.js"), exports);
22
24
  __exportStar(require("./agents/user-agent.js"), exports);
23
25
  __exportStar(require("./aigne/index.js"), exports);
24
- __exportStar(require("./models/chat-model.js"), exports);
25
26
  __exportStar(require("./prompt/prompt-builder.js"), exports);
26
27
  __exportStar(require("./prompt/template.js"), exports);
@@ -14,16 +14,16 @@ export declare function loadAgentFromYamlFile(path: string): Promise<{
14
14
  }, {
15
15
  [x: string]: any;
16
16
  }> | undefined;
17
- toolChoice?: AIAgentToolChoice | undefined;
18
17
  outputSchema?: ZodObject<Record<string, ZodType<any, z.ZodTypeDef, any>>, z.UnknownKeysParam, z.ZodTypeAny, {
19
18
  [x: string]: any;
20
19
  }, {
21
20
  [x: string]: any;
22
21
  }> | undefined;
23
22
  outputKey?: string | undefined;
23
+ toolChoice?: AIAgentToolChoice | undefined;
24
24
  } | {
25
25
  type: "mcp";
26
26
  url?: string | undefined;
27
- command?: string | undefined;
28
27
  args?: string[] | undefined;
28
+ command?: string | undefined;
29
29
  }>;
@@ -1,7 +1,14 @@
1
+ import type { Camelize } from "camelize-ts";
1
2
  import { z } from "zod";
2
3
  import { type Agent } from "../agents/agent.js";
3
- import type { ChatModel, ChatModelOptions } from "../models/chat-model.js";
4
+ import type { ChatModel, ChatModelOptions } from "../agents/chat-model.js";
4
5
  export interface LoadOptions {
6
+ models: {
7
+ new (parameters: {
8
+ model?: string;
9
+ modelOptions?: ChatModelOptions;
10
+ }): ChatModel;
11
+ }[];
5
12
  path: string;
6
13
  }
7
14
  export declare function load(options: LoadOptions): Promise<{
@@ -15,12 +22,12 @@ export declare function load(options: LoadOptions): Promise<{
15
22
  temperature?: number | null | undefined;
16
23
  provider?: string | null | undefined;
17
24
  top_p?: number | null | undefined;
18
- frequent_penalty?: number | null | undefined;
25
+ frequency_penalty?: number | null | undefined;
19
26
  presence_penalty?: number | null | undefined;
20
27
  } | null | undefined;
21
28
  }>;
22
29
  export declare function loadAgent(path: string): Promise<Agent>;
23
- export declare function loadModel(model?: z.infer<typeof aigneFileSchema>["chat_model"], modelOptions?: ChatModelOptions): Promise<ChatModel | undefined>;
30
+ export declare function loadModel(models: LoadOptions["models"], model?: Camelize<z.infer<typeof aigneFileSchema>["chat_model"]>, modelOptions?: ChatModelOptions): Promise<ChatModel | undefined>;
24
31
  declare const aigneFileSchema: z.ZodObject<{
25
32
  name: z.ZodOptional<z.ZodNullable<z.ZodString>>;
26
33
  description: z.ZodOptional<z.ZodNullable<z.ZodString>>;
@@ -29,35 +36,35 @@ declare const aigneFileSchema: z.ZodObject<{
29
36
  name: z.ZodOptional<z.ZodNullable<z.ZodString>>;
30
37
  temperature: z.ZodOptional<z.ZodNullable<z.ZodNumber>>;
31
38
  top_p: z.ZodOptional<z.ZodNullable<z.ZodNumber>>;
32
- frequent_penalty: z.ZodOptional<z.ZodNullable<z.ZodNumber>>;
39
+ frequency_penalty: z.ZodOptional<z.ZodNullable<z.ZodNumber>>;
33
40
  presence_penalty: z.ZodOptional<z.ZodNullable<z.ZodNumber>>;
34
41
  }, "strip", z.ZodTypeAny, {
35
42
  name?: string | null | undefined;
36
43
  temperature?: number | null | undefined;
37
44
  provider?: string | null | undefined;
38
45
  top_p?: number | null | undefined;
39
- frequent_penalty?: number | null | undefined;
46
+ frequency_penalty?: number | null | undefined;
40
47
  presence_penalty?: number | null | undefined;
41
48
  }, {
42
49
  name?: string | null | undefined;
43
50
  temperature?: number | null | undefined;
44
51
  provider?: string | null | undefined;
45
52
  top_p?: number | null | undefined;
46
- frequent_penalty?: number | null | undefined;
53
+ frequency_penalty?: number | null | undefined;
47
54
  presence_penalty?: number | null | undefined;
48
55
  }>]>>>, {
49
56
  name?: string | null | undefined;
50
57
  temperature?: number | null | undefined;
51
58
  provider?: string | null | undefined;
52
59
  top_p?: number | null | undefined;
53
- frequent_penalty?: number | null | undefined;
60
+ frequency_penalty?: number | null | undefined;
54
61
  presence_penalty?: number | null | undefined;
55
62
  } | null | undefined, string | {
56
63
  name?: string | null | undefined;
57
64
  temperature?: number | null | undefined;
58
65
  provider?: string | null | undefined;
59
66
  top_p?: number | null | undefined;
60
- frequent_penalty?: number | null | undefined;
67
+ frequency_penalty?: number | null | undefined;
61
68
  presence_penalty?: number | null | undefined;
62
69
  } | null | undefined>;
63
70
  agents: z.ZodOptional<z.ZodNullable<z.ZodArray<z.ZodString, "many">>>;
@@ -71,7 +78,7 @@ declare const aigneFileSchema: z.ZodObject<{
71
78
  temperature?: number | null | undefined;
72
79
  provider?: string | null | undefined;
73
80
  top_p?: number | null | undefined;
74
- frequent_penalty?: number | null | undefined;
81
+ frequency_penalty?: number | null | undefined;
75
82
  presence_penalty?: number | null | undefined;
76
83
  } | null | undefined;
77
84
  agents?: string[] | null | undefined;
@@ -84,7 +91,7 @@ declare const aigneFileSchema: z.ZodObject<{
84
91
  temperature?: number | null | undefined;
85
92
  provider?: string | null | undefined;
86
93
  top_p?: number | null | undefined;
87
- frequent_penalty?: number | null | undefined;
94
+ frequency_penalty?: number | null | undefined;
88
95
  presence_penalty?: number | null | undefined;
89
96
  } | null | undefined;
90
97
  agents?: string[] | null | undefined;
@@ -98,7 +105,7 @@ export declare function loadAIGNEFile(path: string): Promise<{
98
105
  temperature?: number | null | undefined;
99
106
  provider?: string | null | undefined;
100
107
  top_p?: number | null | undefined;
101
- frequent_penalty?: number | null | undefined;
108
+ frequency_penalty?: number | null | undefined;
102
109
  presence_penalty?: number | null | undefined;
103
110
  } | null | undefined;
104
111
  agents?: string[] | null | undefined;
@@ -11,14 +11,6 @@ const zod_1 = require("zod");
11
11
  const agent_js_1 = require("../agents/agent.js");
12
12
  const ai_agent_js_1 = require("../agents/ai-agent.js");
13
13
  const mcp_agent_js_1 = require("../agents/mcp-agent.js");
14
- const bedrock_chat_model_js_1 = require("../models/bedrock-chat-model.js");
15
- const claude_chat_model_js_1 = require("../models/claude-chat-model.js");
16
- const deepseek_chat_model_js_1 = require("../models/deepseek-chat-model.js");
17
- const gemini_chat_model_js_1 = require("../models/gemini-chat-model.js");
18
- const ollama_chat_model_js_1 = require("../models/ollama-chat-model.js");
19
- const open_router_chat_model_js_1 = require("../models/open-router-chat-model.js");
20
- const openai_chat_model_js_1 = require("../models/openai-chat-model.js");
21
- const xai_chat_model_js_1 = require("../models/xai-chat-model.js");
22
14
  const type_utils_js_1 = require("../utils/type-utils.js");
23
15
  const agent_js_js_1 = require("./agent-js.js");
24
16
  const agent_yaml_js_1 = require("./agent-yaml.js");
@@ -32,7 +24,7 @@ async function load(options) {
32
24
  const skills = await Promise.all((aigne.skills ?? []).map((filename) => loadAgent((0, node_path_1.join)(rootDir, filename))));
33
25
  return {
34
26
  ...aigne,
35
- model: await loadModel(aigne.chat_model),
27
+ model: await loadModel(options.models, aigne.chat_model),
36
28
  agents,
37
29
  skills,
38
30
  };
@@ -70,26 +62,15 @@ async function loadAgent(path) {
70
62
  }
71
63
  const { MODEL_PROVIDER, MODEL_NAME } = process.env;
72
64
  const DEFAULT_MODEL_PROVIDER = "openai";
73
- const DEFAULT_MODEL_NAME = "gpt-4o-mini";
74
- async function loadModel(model, modelOptions) {
65
+ async function loadModel(models, model, modelOptions) {
75
66
  const params = {
76
- model: MODEL_NAME ?? model?.name ?? DEFAULT_MODEL_NAME,
67
+ model: MODEL_NAME ?? model?.name ?? undefined,
77
68
  temperature: model?.temperature ?? undefined,
78
- topP: model?.top_p ?? undefined,
79
- frequencyPenalty: model?.frequent_penalty ?? undefined,
80
- presencePenalty: model?.presence_penalty ?? undefined,
69
+ topP: model?.topP ?? undefined,
70
+ frequencyPenalty: model?.frequencyPenalty ?? undefined,
71
+ presencePenalty: model?.presencePenalty ?? undefined,
81
72
  };
82
- const availableModels = [
83
- openai_chat_model_js_1.OpenAIChatModel,
84
- claude_chat_model_js_1.ClaudeChatModel,
85
- xai_chat_model_js_1.XAIChatModel,
86
- gemini_chat_model_js_1.GeminiChatModel,
87
- deepseek_chat_model_js_1.DeepSeekChatModel,
88
- open_router_chat_model_js_1.OpenRouterChatModel,
89
- ollama_chat_model_js_1.OllamaChatModel,
90
- bedrock_chat_model_js_1.BedrockChatModel,
91
- ];
92
- const M = availableModels.find((m) => m.name
73
+ const M = models.find((m) => m.name
93
74
  .toLowerCase()
94
75
  .includes((MODEL_PROVIDER ?? model?.provider ?? DEFAULT_MODEL_PROVIDER).toLowerCase()));
95
76
  if (!M)
@@ -107,7 +88,7 @@ const aigneFileSchema = zod_1.z.object({
107
88
  name: zod_1.z.string().nullish(),
108
89
  temperature: zod_1.z.number().min(0).max(2).nullish(),
109
90
  top_p: zod_1.z.number().min(0).nullish(),
110
- frequent_penalty: zod_1.z.number().min(-2).max(2).nullish(),
91
+ frequency_penalty: zod_1.z.number().min(-2).max(2).nullish(),
111
92
  presence_penalty: zod_1.z.number().min(-2).max(2).nullish(),
112
93
  }),
113
94
  ])
@@ -0,0 +1,30 @@
1
+ import type { AgentInvokeOptions } from "../../../agents/agent.js";
2
+ import "sqlite3";
3
+ import { Sequelize } from "sequelize";
4
+ import type { Context } from "../../../aigne/context.js";
5
+ import type { PromiseOrValue } from "../../../utils/type-utils.js";
6
+ import type { Memory } from "../../memory.js";
7
+ import { MemoryStorage } from "../storage.js";
8
+ export interface DefaultMemoryStorageOptions {
9
+ path?: string;
10
+ getSessionId?: (context: Context) => PromiseOrValue<string>;
11
+ }
12
+ export declare class DefaultMemoryStorage extends MemoryStorage {
13
+ options?: DefaultMemoryStorageOptions | undefined;
14
+ memories: {
15
+ [groupId: string]: Memory[];
16
+ };
17
+ constructor(options?: DefaultMemoryStorageOptions | undefined);
18
+ private _models?;
19
+ private get models();
20
+ private convertMemory;
21
+ search(query: {
22
+ limit?: number;
23
+ }, { context }: AgentInvokeOptions): Promise<{
24
+ result: Memory[];
25
+ }>;
26
+ create(memory: Pick<Memory, "content">, { context }: AgentInvokeOptions): Promise<{
27
+ result: Memory;
28
+ }>;
29
+ }
30
+ export declare function initSequelize(path?: string): Sequelize;
@@ -0,0 +1,69 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.DefaultMemoryStorage = void 0;
4
+ exports.initSequelize = initSequelize;
5
+ require("sqlite3");
6
+ const sequelize_1 = require("sequelize");
7
+ const logger_js_1 = require("../../../utils/logger.js");
8
+ const storage_js_1 = require("../storage.js");
9
+ const migrate_js_1 = require("./migrate.js");
10
+ const memory_js_1 = require("./models/memory.js");
11
+ const DEFAULT_MAX_MEMORY_COUNT = 10;
12
+ class DefaultMemoryStorage extends storage_js_1.MemoryStorage {
13
+ options;
14
+ memories = {};
15
+ constructor(options) {
16
+ super();
17
+ this.options = options;
18
+ }
19
+ _models;
20
+ get models() {
21
+ this._models ??= (async () => {
22
+ const sequelize = initSequelize(this.options?.path);
23
+ await (0, migrate_js_1.migrate)(sequelize);
24
+ return {
25
+ Memory: (0, memory_js_1.initMemoryModel)(sequelize),
26
+ };
27
+ })();
28
+ return this._models;
29
+ }
30
+ convertMemory(m) {
31
+ return {
32
+ id: m.id,
33
+ sessionId: m.sessionId,
34
+ content: m.content,
35
+ createdAt: m.createdAt.toISOString(),
36
+ };
37
+ }
38
+ async search(query, { context }) {
39
+ const { limit = DEFAULT_MAX_MEMORY_COUNT } = query;
40
+ const sessionId = (await this.options?.getSessionId?.(context)) ?? null;
41
+ const { Memory } = await this.models;
42
+ const memories = await Memory.findAll({
43
+ where: { sessionId },
44
+ order: [["id", "DESC"]],
45
+ limit,
46
+ });
47
+ return {
48
+ result: memories.reverse().map(this.convertMemory),
49
+ };
50
+ }
51
+ async create(memory, { context }) {
52
+ const sessionId = (await this.options?.getSessionId?.(context)) ?? null;
53
+ const { Memory } = await this.models;
54
+ const m = await Memory.create({
55
+ ...memory,
56
+ sessionId,
57
+ });
58
+ return { result: this.convertMemory(m) };
59
+ }
60
+ }
61
+ exports.DefaultMemoryStorage = DefaultMemoryStorage;
62
+ function initSequelize(path) {
63
+ const sequelize = new sequelize_1.Sequelize({
64
+ logging: (sql) => logger_js_1.logger.debug(sql),
65
+ storage: path,
66
+ dialect: "sqlite",
67
+ });
68
+ return sequelize;
69
+ }
@@ -0,0 +1,7 @@
1
+ import type { Sequelize } from "sequelize";
2
+ import { type MigrateDownOptions, type MigrateUpOptions } from "umzug";
3
+ export declare const migrate: (sequelize: Sequelize, { type, upOptions, downOptions, }?: {
4
+ type?: "up" | "down";
5
+ upOptions?: MigrateUpOptions;
6
+ downOptions?: MigrateDownOptions;
7
+ }) => Promise<void>;
@@ -0,0 +1,53 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.migrate = void 0;
37
+ const umzug_1 = require("umzug");
38
+ const init = __importStar(require("./migrations/20250523165801-init.js"));
39
+ const migrate = async (sequelize, { type = "up", upOptions, downOptions, } = {}) => {
40
+ const umzug = new umzug_1.Umzug({
41
+ migrations: [{ ...init, name: "20241224202701-init" }],
42
+ context: sequelize.getQueryInterface(),
43
+ storage: new umzug_1.SequelizeStorage({ sequelize }),
44
+ logger: console,
45
+ });
46
+ if (type === "down") {
47
+ await umzug.down(downOptions);
48
+ }
49
+ else {
50
+ await umzug.up(upOptions);
51
+ }
52
+ };
53
+ exports.migrate = migrate;
@@ -0,0 +1,7 @@
1
+ import { type QueryInterface } from "sequelize";
2
+ export declare const up: ({ context: queryInterface }: {
3
+ context: QueryInterface;
4
+ }) => Promise<void>;
5
+ export declare const down: ({ context: queryInterface }: {
6
+ context: QueryInterface;
7
+ }) => Promise<void>;
@@ -0,0 +1,33 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.down = exports.up = void 0;
4
+ const sequelize_1 = require("sequelize");
5
+ const up = async ({ context: queryInterface }) => {
6
+ await queryInterface.createTable("Memories", {
7
+ id: {
8
+ type: sequelize_1.DataTypes.STRING,
9
+ primaryKey: true,
10
+ allowNull: false,
11
+ },
12
+ createdAt: {
13
+ type: sequelize_1.DataTypes.DATE,
14
+ allowNull: false,
15
+ },
16
+ updatedAt: {
17
+ type: sequelize_1.DataTypes.DATE,
18
+ allowNull: false,
19
+ },
20
+ sessionId: {
21
+ type: sequelize_1.DataTypes.STRING,
22
+ },
23
+ content: {
24
+ type: sequelize_1.DataTypes.JSON,
25
+ allowNull: false,
26
+ },
27
+ });
28
+ };
29
+ exports.up = up;
30
+ const down = async ({ context: queryInterface }) => {
31
+ await queryInterface.dropTable("Memories");
32
+ };
33
+ exports.down = down;
@@ -0,0 +1,10 @@
1
+ import { type CreationOptional, type InferAttributes, type InferCreationAttributes, Model } from "sequelize";
2
+ import type { ModelStatic, Sequelize } from "sequelize";
3
+ export interface Memory extends Model<InferAttributes<Memory>, InferCreationAttributes<Memory>> {
4
+ id: CreationOptional<string>;
5
+ createdAt: CreationOptional<Date>;
6
+ updatedAt: CreationOptional<Date>;
7
+ sessionId?: string | null;
8
+ content: unknown;
9
+ }
10
+ export declare function initMemoryModel(sequelize: Sequelize): ModelStatic<Memory>;
@@ -0,0 +1,32 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.initMemoryModel = initMemoryModel;
4
+ const sequelize_1 = require("sequelize");
5
+ const uuid_1 = require("uuid");
6
+ const nextId = () => (0, uuid_1.v7)();
7
+ function initMemoryModel(sequelize) {
8
+ return class Memory extends sequelize_1.Model {
9
+ }.init({
10
+ id: {
11
+ type: sequelize_1.DataTypes.STRING,
12
+ primaryKey: true,
13
+ allowNull: false,
14
+ defaultValue: nextId,
15
+ },
16
+ createdAt: {
17
+ type: sequelize_1.DataTypes.DATE,
18
+ allowNull: false,
19
+ },
20
+ updatedAt: {
21
+ type: sequelize_1.DataTypes.DATE,
22
+ allowNull: false,
23
+ },
24
+ sessionId: {
25
+ type: sequelize_1.DataTypes.STRING,
26
+ },
27
+ content: {
28
+ type: sequelize_1.DataTypes.JSON,
29
+ allowNull: false,
30
+ },
31
+ }, { sequelize });
32
+ }
@@ -0,0 +1,10 @@
1
+ import { MemoryAgent, type MemoryAgentOptions } from "../memory.js";
2
+ import { type DefaultMemoryStorageOptions } from "./default-memory-storage/index.js";
3
+ import { MemoryStorage } from "./storage.js";
4
+ export interface DefaultMemoryOptions extends Partial<MemoryAgentOptions> {
5
+ storage?: MemoryStorage | DefaultMemoryStorageOptions;
6
+ }
7
+ export declare class DefaultMemory extends MemoryAgent {
8
+ constructor(options?: DefaultMemoryOptions);
9
+ storage: MemoryStorage;
10
+ }