@aigne/core 1.13.0 → 1.14.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 (195) hide show
  1. package/CHANGELOG.md +15 -0
  2. package/README.md +13 -26
  3. package/README.zh.md +24 -37
  4. package/lib/cjs/agents/agent.d.ts +522 -15
  5. package/lib/cjs/agents/agent.js +357 -36
  6. package/lib/cjs/agents/ai-agent.d.ts +210 -52
  7. package/lib/cjs/agents/ai-agent.js +182 -24
  8. package/lib/cjs/agents/mcp-agent.d.ts +112 -0
  9. package/lib/cjs/agents/mcp-agent.js +79 -1
  10. package/lib/cjs/agents/team-agent.d.ts +99 -0
  11. package/lib/cjs/agents/team-agent.js +94 -0
  12. package/lib/cjs/agents/user-agent.d.ts +6 -4
  13. package/lib/cjs/agents/user-agent.js +16 -5
  14. package/lib/cjs/aigne/aigne.d.ts +263 -16
  15. package/lib/cjs/aigne/aigne.js +130 -20
  16. package/lib/cjs/aigne/context.d.ts +24 -8
  17. package/lib/cjs/aigne/context.js +8 -22
  18. package/lib/cjs/aigne/message-queue.d.ts +26 -4
  19. package/lib/cjs/aigne/message-queue.js +42 -7
  20. package/lib/cjs/aigne/usage.d.ts +9 -0
  21. package/lib/cjs/aigne/usage.js +3 -0
  22. package/lib/cjs/client/client.d.ts +81 -3
  23. package/lib/cjs/client/client.js +38 -0
  24. package/lib/cjs/client/index.d.ts +1 -0
  25. package/lib/cjs/client/index.js +17 -0
  26. package/lib/cjs/index.d.ts +0 -1
  27. package/lib/cjs/index.js +0 -1
  28. package/lib/cjs/loader/agent-js.d.ts +1 -1
  29. package/lib/cjs/loader/agent-js.js +2 -2
  30. package/lib/cjs/loader/agent-yaml.d.ts +3 -2
  31. package/lib/cjs/loader/agent-yaml.js +2 -1
  32. package/lib/cjs/loader/index.d.ts +4 -4
  33. package/lib/cjs/memory/default-memory.d.ts +16 -0
  34. package/lib/cjs/memory/default-memory.js +70 -0
  35. package/lib/cjs/memory/index.d.ts +3 -0
  36. package/lib/cjs/memory/index.js +19 -0
  37. package/lib/cjs/memory/memory.d.ts +89 -0
  38. package/lib/cjs/memory/memory.js +132 -0
  39. package/lib/cjs/memory/recorder.d.ts +86 -0
  40. package/lib/cjs/memory/recorder.js +50 -0
  41. package/lib/cjs/memory/retriever.d.ts +99 -0
  42. package/lib/cjs/memory/retriever.js +51 -0
  43. package/lib/cjs/models/bedrock-chat-model.d.ts +12 -3
  44. package/lib/cjs/models/bedrock-chat-model.js +54 -24
  45. package/lib/cjs/models/chat-model.d.ts +278 -1
  46. package/lib/cjs/models/chat-model.js +54 -0
  47. package/lib/cjs/models/claude-chat-model.d.ts +49 -3
  48. package/lib/cjs/models/claude-chat-model.js +34 -2
  49. package/lib/cjs/models/deepseek-chat-model.d.ts +16 -0
  50. package/lib/cjs/models/deepseek-chat-model.js +16 -0
  51. package/lib/cjs/models/gemini-chat-model.d.ts +14 -0
  52. package/lib/cjs/models/gemini-chat-model.js +14 -0
  53. package/lib/cjs/models/ollama-chat-model.d.ts +16 -0
  54. package/lib/cjs/models/ollama-chat-model.js +16 -0
  55. package/lib/cjs/models/open-router-chat-model.d.ts +16 -0
  56. package/lib/cjs/models/open-router-chat-model.js +16 -0
  57. package/lib/cjs/models/openai-chat-model.d.ts +67 -3
  58. package/lib/cjs/models/openai-chat-model.js +47 -2
  59. package/lib/cjs/models/xai-chat-model.d.ts +16 -0
  60. package/lib/cjs/models/xai-chat-model.js +16 -0
  61. package/lib/cjs/prompt/prompt-builder.d.ts +4 -4
  62. package/lib/cjs/prompt/prompt-builder.js +19 -18
  63. package/lib/cjs/prompt/prompts/memory-message-template.d.ts +1 -0
  64. package/lib/cjs/prompt/prompts/memory-message-template.js +10 -0
  65. package/lib/cjs/prompt/template.js +5 -1
  66. package/lib/cjs/server/error.d.ts +11 -0
  67. package/lib/cjs/server/error.js +11 -0
  68. package/lib/cjs/server/index.d.ts +2 -0
  69. package/lib/cjs/server/index.js +18 -0
  70. package/lib/cjs/server/server.d.ts +89 -8
  71. package/lib/cjs/server/server.js +58 -0
  72. package/lib/cjs/utils/fs.d.ts +2 -0
  73. package/lib/cjs/utils/fs.js +25 -0
  74. package/lib/cjs/utils/prompts.d.ts +1 -0
  75. package/lib/cjs/utils/prompts.js +11 -2
  76. package/lib/cjs/utils/type-utils.d.ts +1 -0
  77. package/lib/cjs/utils/type-utils.js +14 -0
  78. package/lib/dts/agents/agent.d.ts +522 -15
  79. package/lib/dts/agents/ai-agent.d.ts +210 -52
  80. package/lib/dts/agents/mcp-agent.d.ts +112 -0
  81. package/lib/dts/agents/team-agent.d.ts +99 -0
  82. package/lib/dts/agents/user-agent.d.ts +6 -4
  83. package/lib/dts/aigne/aigne.d.ts +263 -16
  84. package/lib/dts/aigne/context.d.ts +24 -8
  85. package/lib/dts/aigne/message-queue.d.ts +26 -4
  86. package/lib/dts/aigne/usage.d.ts +9 -0
  87. package/lib/dts/client/client.d.ts +81 -3
  88. package/lib/dts/client/index.d.ts +1 -0
  89. package/lib/dts/index.d.ts +0 -1
  90. package/lib/dts/loader/agent-js.d.ts +1 -1
  91. package/lib/dts/loader/agent-yaml.d.ts +3 -2
  92. package/lib/dts/loader/index.d.ts +4 -4
  93. package/lib/dts/memory/default-memory.d.ts +16 -0
  94. package/lib/dts/memory/index.d.ts +3 -0
  95. package/lib/dts/memory/memory.d.ts +89 -0
  96. package/lib/dts/memory/recorder.d.ts +86 -0
  97. package/lib/dts/memory/retriever.d.ts +99 -0
  98. package/lib/dts/models/bedrock-chat-model.d.ts +12 -3
  99. package/lib/dts/models/chat-model.d.ts +278 -1
  100. package/lib/dts/models/claude-chat-model.d.ts +49 -3
  101. package/lib/dts/models/deepseek-chat-model.d.ts +16 -0
  102. package/lib/dts/models/gemini-chat-model.d.ts +14 -0
  103. package/lib/dts/models/ollama-chat-model.d.ts +16 -0
  104. package/lib/dts/models/open-router-chat-model.d.ts +16 -0
  105. package/lib/dts/models/openai-chat-model.d.ts +67 -3
  106. package/lib/dts/models/xai-chat-model.d.ts +16 -0
  107. package/lib/dts/prompt/prompt-builder.d.ts +4 -4
  108. package/lib/dts/prompt/prompts/memory-message-template.d.ts +1 -0
  109. package/lib/dts/server/error.d.ts +11 -0
  110. package/lib/dts/server/index.d.ts +2 -0
  111. package/lib/dts/server/server.d.ts +89 -8
  112. package/lib/dts/utils/fs.d.ts +2 -0
  113. package/lib/dts/utils/prompts.d.ts +1 -0
  114. package/lib/dts/utils/type-utils.d.ts +1 -0
  115. package/lib/esm/agents/agent.d.ts +522 -15
  116. package/lib/esm/agents/agent.js +351 -35
  117. package/lib/esm/agents/ai-agent.d.ts +210 -52
  118. package/lib/esm/agents/ai-agent.js +183 -25
  119. package/lib/esm/agents/mcp-agent.d.ts +112 -0
  120. package/lib/esm/agents/mcp-agent.js +79 -1
  121. package/lib/esm/agents/team-agent.d.ts +99 -0
  122. package/lib/esm/agents/team-agent.js +94 -0
  123. package/lib/esm/agents/user-agent.d.ts +6 -4
  124. package/lib/esm/agents/user-agent.js +17 -6
  125. package/lib/esm/aigne/aigne.d.ts +263 -16
  126. package/lib/esm/aigne/aigne.js +132 -22
  127. package/lib/esm/aigne/context.d.ts +24 -8
  128. package/lib/esm/aigne/context.js +9 -22
  129. package/lib/esm/aigne/message-queue.d.ts +26 -4
  130. package/lib/esm/aigne/message-queue.js +42 -8
  131. package/lib/esm/aigne/usage.d.ts +9 -0
  132. package/lib/esm/aigne/usage.js +3 -0
  133. package/lib/esm/client/client.d.ts +81 -3
  134. package/lib/esm/client/client.js +38 -0
  135. package/lib/esm/client/index.d.ts +1 -0
  136. package/lib/esm/client/index.js +1 -0
  137. package/lib/esm/index.d.ts +0 -1
  138. package/lib/esm/index.js +0 -1
  139. package/lib/esm/loader/agent-js.d.ts +1 -1
  140. package/lib/esm/loader/agent-js.js +2 -2
  141. package/lib/esm/loader/agent-yaml.d.ts +3 -2
  142. package/lib/esm/loader/agent-yaml.js +2 -1
  143. package/lib/esm/loader/index.d.ts +4 -4
  144. package/lib/esm/memory/default-memory.d.ts +16 -0
  145. package/lib/esm/memory/default-memory.js +63 -0
  146. package/lib/esm/memory/index.d.ts +3 -0
  147. package/lib/esm/memory/index.js +3 -0
  148. package/lib/esm/memory/memory.d.ts +89 -0
  149. package/lib/esm/memory/memory.js +127 -0
  150. package/lib/esm/memory/recorder.d.ts +86 -0
  151. package/lib/esm/memory/recorder.js +46 -0
  152. package/lib/esm/memory/retriever.d.ts +99 -0
  153. package/lib/esm/memory/retriever.js +47 -0
  154. package/lib/esm/models/bedrock-chat-model.d.ts +12 -3
  155. package/lib/esm/models/bedrock-chat-model.js +56 -26
  156. package/lib/esm/models/chat-model.d.ts +278 -1
  157. package/lib/esm/models/chat-model.js +54 -0
  158. package/lib/esm/models/claude-chat-model.d.ts +49 -3
  159. package/lib/esm/models/claude-chat-model.js +35 -3
  160. package/lib/esm/models/deepseek-chat-model.d.ts +16 -0
  161. package/lib/esm/models/deepseek-chat-model.js +16 -0
  162. package/lib/esm/models/gemini-chat-model.d.ts +14 -0
  163. package/lib/esm/models/gemini-chat-model.js +14 -0
  164. package/lib/esm/models/ollama-chat-model.d.ts +16 -0
  165. package/lib/esm/models/ollama-chat-model.js +16 -0
  166. package/lib/esm/models/open-router-chat-model.d.ts +16 -0
  167. package/lib/esm/models/open-router-chat-model.js +16 -0
  168. package/lib/esm/models/openai-chat-model.d.ts +67 -3
  169. package/lib/esm/models/openai-chat-model.js +47 -2
  170. package/lib/esm/models/xai-chat-model.d.ts +16 -0
  171. package/lib/esm/models/xai-chat-model.js +16 -0
  172. package/lib/esm/prompt/prompt-builder.d.ts +4 -4
  173. package/lib/esm/prompt/prompt-builder.js +20 -19
  174. package/lib/esm/prompt/prompts/memory-message-template.d.ts +1 -0
  175. package/lib/esm/prompt/prompts/memory-message-template.js +7 -0
  176. package/lib/esm/prompt/template.js +5 -1
  177. package/lib/esm/server/error.d.ts +11 -0
  178. package/lib/esm/server/error.js +11 -0
  179. package/lib/esm/server/index.d.ts +2 -0
  180. package/lib/esm/server/index.js +2 -0
  181. package/lib/esm/server/server.d.ts +89 -8
  182. package/lib/esm/server/server.js +58 -0
  183. package/lib/esm/utils/fs.d.ts +2 -0
  184. package/lib/esm/utils/fs.js +21 -0
  185. package/lib/esm/utils/prompts.d.ts +1 -0
  186. package/lib/esm/utils/prompts.js +10 -2
  187. package/lib/esm/utils/type-utils.d.ts +1 -0
  188. package/lib/esm/utils/type-utils.js +13 -0
  189. package/package.json +14 -11
  190. package/lib/cjs/agents/memory.d.ts +0 -26
  191. package/lib/cjs/agents/memory.js +0 -45
  192. package/lib/dts/agents/memory.d.ts +0 -26
  193. package/lib/esm/agents/memory.d.ts +0 -26
  194. package/lib/esm/agents/memory.js +0 -41
  195. /package/{LICENSE → LICENSE.md} +0 -0
@@ -1,70 +1,228 @@
1
- import { z } from "zod";
1
+ import { type ZodObject, type ZodType, z } from "zod";
2
2
  import type { Context } from "../aigne/context.js";
3
+ import { type DefaultMemoryOptions } from "../memory/default-memory.js";
3
4
  import { ChatModel } from "../models/chat-model.js";
4
5
  import type { ChatModelInput } from "../models/chat-model.js";
5
6
  import { PromptBuilder } from "../prompt/prompt-builder.js";
6
7
  import { Agent, type AgentOptions, type AgentProcessAsyncGenerator, type Message } from "./agent.js";
7
- export interface AIAgentOptions<I extends Message = Message, O extends Message = Message> extends AgentOptions<I, O> {
8
+ /**
9
+ * Configuration options for an AI Agent
10
+ *
11
+ * These options extend the base agent options with AI-specific parameters
12
+ * like model configuration, prompt instructions, and tool choice.
13
+ *
14
+ * @template I The input message type the agent accepts
15
+ * @template O The output message type the agent returns
16
+ */
17
+ export interface AIAgentOptions<I extends Message = Message, O extends Message = Message> extends Omit<AgentOptions<I, O>, "memory"> {
18
+ /**
19
+ * The language model to use for this agent
20
+ *
21
+ * If not provided, the agent will use the model from the context
22
+ */
8
23
  model?: ChatModel;
24
+ /**
25
+ * Instructions to guide the AI model's behavior
26
+ *
27
+ * Can be a simple string or a full PromptBuilder instance for
28
+ * more complex prompt templates
29
+ */
9
30
  instructions?: string | PromptBuilder;
31
+ /**
32
+ * Custom key to use for text output in the response
33
+ *
34
+ * Defaults to $message if not specified
35
+ */
10
36
  outputKey?: string;
11
- toolChoice?: AIAgentToolChoice;
37
+ /**
38
+ * Controls how the agent uses tools during execution
39
+ *
40
+ * @default AIAgentToolChoice.auto
41
+ */
42
+ toolChoice?: AIAgentToolChoice | Agent;
43
+ /**
44
+ * Whether to catch errors from tool execution and continue processing.
45
+ * If set to false, the agent will throw an error if a tool fails.
46
+ *
47
+ * @default true
48
+ */
49
+ catchToolsError?: boolean;
50
+ /**
51
+ * Whether to include memory agents as tools for the AI model
52
+ *
53
+ * When set to true, memory agents will be made available as tools
54
+ * that the model can call directly to retrieve or store information.
55
+ * This enables the agent to explicitly interact with its memories.
56
+ *
57
+ * @default false
58
+ */
59
+ memoryAgentsAsTools?: boolean;
60
+ /**
61
+ * Custom prompt template for formatting memory content
62
+ *
63
+ * Allows customization of how memories are presented to the AI model.
64
+ * If not provided, the default template from MEMORY_MESSAGE_TEMPLATE will be used.
65
+ *
66
+ * The template receives a {{memories}} variable containing serialized memory content.
67
+ */
68
+ memoryPromptTemplate?: string;
69
+ memory?: AgentOptions<I, O>["memory"] | DefaultMemoryOptions | true;
12
70
  }
13
- export type AIAgentToolChoice = "auto" | "none" | "required" | "router" | Agent;
14
- export declare const aiAgentToolChoiceSchema: z.ZodUnion<[z.ZodLiteral<"auto">, z.ZodLiteral<"none">, z.ZodLiteral<"required">, z.ZodLiteral<"router">, z.ZodType<Agent<Message, Message>, z.ZodTypeDef, Agent<Message, Message>>]>;
15
- export declare const aiAgentOptionsSchema: z.ZodObject<{
16
- model: z.ZodOptional<z.ZodType<ChatModel, z.ZodTypeDef, ChatModel>>;
17
- instructions: z.ZodOptional<z.ZodUnion<[z.ZodString, z.ZodType<PromptBuilder, z.ZodTypeDef, PromptBuilder>]>>;
18
- outputKey: z.ZodOptional<z.ZodString>;
19
- toolChoice: z.ZodOptional<z.ZodUnion<[z.ZodLiteral<"auto">, z.ZodLiteral<"none">, z.ZodLiteral<"required">, z.ZodLiteral<"router">, z.ZodType<Agent<Message, Message>, z.ZodTypeDef, Agent<Message, Message>>]>>;
20
- enableHistory: z.ZodOptional<z.ZodBoolean>;
21
- maxHistoryMessages: z.ZodOptional<z.ZodNumber>;
22
- includeInputInOutput: z.ZodOptional<z.ZodBoolean>;
23
- subscribeTopic: z.ZodOptional<z.ZodUnion<[z.ZodString, z.ZodArray<z.ZodString, "many">]>>;
24
- publishTopic: z.ZodOptional<z.ZodUnion<[z.ZodString, z.ZodArray<z.ZodString, "many">, z.ZodFunction<z.ZodTuple<[], z.ZodUnknown>, z.ZodUnknown>]>>;
25
- name: z.ZodOptional<z.ZodString>;
26
- description: z.ZodOptional<z.ZodString>;
27
- skills: z.ZodOptional<z.ZodArray<z.ZodUnion<[z.ZodType<Agent<Message, Message>, z.ZodTypeDef, Agent<Message, Message>>, z.ZodFunction<z.ZodTuple<[], z.ZodUnknown>, z.ZodUnknown>]>, "many">>;
28
- disableLogging: z.ZodOptional<z.ZodBoolean>;
29
- memory: z.ZodOptional<z.ZodUnion<[z.ZodBoolean, z.ZodAny, z.ZodAny]>>;
30
- }, "strip", z.ZodTypeAny, {
31
- description?: string | undefined;
32
- memory?: any;
33
- name?: string | undefined;
34
- includeInputInOutput?: boolean | undefined;
35
- subscribeTopic?: string | string[] | undefined;
36
- publishTopic?: string | string[] | ((...args: unknown[]) => unknown) | undefined;
37
- skills?: (Agent<Message, Message> | ((...args: unknown[]) => unknown))[] | undefined;
38
- toolChoice?: Agent<Message, Message> | "auto" | "none" | "required" | "router" | undefined;
39
- model?: ChatModel | undefined;
40
- instructions?: string | PromptBuilder | undefined;
41
- outputKey?: string | undefined;
42
- enableHistory?: boolean | undefined;
43
- maxHistoryMessages?: number | undefined;
44
- disableLogging?: boolean | undefined;
45
- }, {
46
- description?: string | undefined;
47
- memory?: any;
48
- name?: string | undefined;
49
- includeInputInOutput?: boolean | undefined;
50
- subscribeTopic?: string | string[] | undefined;
51
- publishTopic?: string | string[] | ((...args: unknown[]) => unknown) | undefined;
52
- skills?: (Agent<Message, Message> | ((...args: unknown[]) => unknown))[] | undefined;
53
- toolChoice?: Agent<Message, Message> | "auto" | "none" | "required" | "router" | undefined;
54
- model?: ChatModel | undefined;
55
- instructions?: string | PromptBuilder | undefined;
56
- outputKey?: string | undefined;
57
- enableHistory?: boolean | undefined;
58
- maxHistoryMessages?: number | undefined;
59
- disableLogging?: boolean | undefined;
71
+ /**
72
+ * Tool choice options for AI agents
73
+ *
74
+ * Controls how the agent decides to use tools during execution
75
+ */
76
+ export declare enum AIAgentToolChoice {
77
+ /**
78
+ * Let the model decide when to use tools
79
+ */
80
+ auto = "auto",
81
+ /**
82
+ * Disable tool usage
83
+ */
84
+ none = "none",
85
+ /**
86
+ * Force tool usage
87
+ */
88
+ required = "required",
89
+ /**
90
+ * Choose exactly one tool and route directly to it
91
+ */
92
+ router = "router"
93
+ }
94
+ /**
95
+ * Zod schema for validating AIAgentToolChoice values
96
+ *
97
+ * Used to ensure that toolChoice receives valid values
98
+ *
99
+ * @hidden
100
+ */
101
+ export declare const aiAgentToolChoiceSchema: z.ZodUnion<[z.ZodNativeEnum<typeof AIAgentToolChoice>, ZodType<Agent<Message, Message>, z.ZodTypeDef, Agent<Message, Message>>]>;
102
+ /**
103
+ * Zod schema for validating AIAgentOptions
104
+ *
105
+ * Extends the base agent options schema with AI-specific parameters
106
+ *
107
+ * @hidden
108
+ */
109
+ export declare const aiAgentOptionsSchema: ZodObject<{
110
+ [key in keyof AIAgentOptions]: ZodType<AIAgentOptions[key]>;
60
111
  }>;
112
+ /**
113
+ * AI-powered agent that leverages language models
114
+ *
115
+ * AIAgent connects to language models to process inputs and generate responses,
116
+ * with support for streaming, function calling, and tool usage.
117
+ *
118
+ * Key features:
119
+ * - Connect to any language model
120
+ * - Use customizable instructions and prompts
121
+ * - Execute tools/function calls
122
+ * - Support streaming responses
123
+ * - Router mode for specialized agents
124
+ *
125
+ * @template I The input message type the agent accepts
126
+ * @template O The output message type the agent returns
127
+ *
128
+ * @example
129
+ * Basic AIAgent creation:
130
+ * {@includeCode ../../test/agents/ai-agent.test.ts#example-ai-agent-basic}
131
+ */
61
132
  export declare class AIAgent<I extends Message = Message, O extends Message = Message> extends Agent<I, O> {
133
+ /**
134
+ * Create an AIAgent with the specified options
135
+ *
136
+ * Factory method that provides a convenient way to create new AI agents
137
+ *
138
+ * @param options Configuration options for the AI agent
139
+ * @returns A new AIAgent instance
140
+ *
141
+ * @example
142
+ * AI agent with custom instructions:
143
+ * {@includeCode ../../test/agents/ai-agent.test.ts#example-ai-agent-instructions}
144
+ */
62
145
  static from<I extends Message, O extends Message>(options: AIAgentOptions<I, O>): AIAgent<I, O>;
146
+ /**
147
+ * Create an AIAgent instance
148
+ *
149
+ * @param options Configuration options for the AI agent
150
+ */
63
151
  constructor(options: AIAgentOptions<I, O>);
152
+ /**
153
+ * The language model used by this agent
154
+ *
155
+ * If not set on the agent, the model from the context will be used
156
+ */
64
157
  model?: ChatModel;
158
+ /**
159
+ * Instructions for the language model
160
+ *
161
+ * Contains system messages, user templates, and other prompt elements
162
+ * that guide the model's behavior
163
+ *
164
+ * @example
165
+ * Custom prompt builder:
166
+ * {@includeCode ../../test/agents/ai-agent.test.ts#example-ai-agent-prompt-builder}
167
+ */
65
168
  instructions: PromptBuilder;
169
+ /**
170
+ * Custom key to use for text output in the response
171
+ *
172
+ * @example
173
+ * Setting a custom output key:
174
+ * {@includeCode ../../test/agents/ai-agent.test.ts#example-ai-agent-custom-output-key}
175
+ */
66
176
  outputKey?: string;
67
- toolChoice?: AIAgentToolChoice;
177
+ /**
178
+ * Controls how the agent uses tools during execution
179
+ *
180
+ * @example
181
+ * Automatic tool choice:
182
+ * {@includeCode ../../test/agents/ai-agent.test.ts#example-ai-agent-tool-choice-auto}
183
+ *
184
+ * @example
185
+ * Router tool choice:
186
+ * {@includeCode ../../test/agents/ai-agent.test.ts#example-ai-agent-router}
187
+ */
188
+ toolChoice?: AIAgentToolChoice | Agent;
189
+ /**
190
+ * Whether to include memory agents as tools for the AI model
191
+ *
192
+ * When set to true, memory agents will be made available as tools
193
+ * that the model can call directly to retrieve or store information.
194
+ * This enables the agent to explicitly interact with its memories.
195
+ */
196
+ memoryAgentsAsTools?: boolean;
197
+ /**
198
+ * Custom prompt template for formatting memory content
199
+ *
200
+ * Allows customization of how memories are presented to the AI model.
201
+ * If not provided, the default template from MEMORY_MESSAGE_TEMPLATE will be used.
202
+ *
203
+ * The template receives a {{memories}} variable containing serialized memory content.
204
+ */
205
+ memoryPromptTemplate?: string;
206
+ /**
207
+ * Whether to catch error from tool execution and continue processing.
208
+ * If set to false, the agent will throw an error if a tool fails
209
+ *
210
+ * @default true
211
+ */
212
+ catchToolsError: boolean;
213
+ /**
214
+ * Process an input message and generate a response
215
+ *
216
+ * @protected
217
+ */
68
218
  process(input: I, context: Context): AgentProcessAsyncGenerator<O>;
69
- processRouter(input: I, model: ChatModel, modelInput: ChatModelInput, context: Context, toolsMap: Map<string, Agent>): AgentProcessAsyncGenerator<O>;
219
+ /**
220
+ * Process router mode requests
221
+ *
222
+ * In router mode, the agent sends a single request to the model to determine
223
+ * which tool to use, then routes the request directly to that tool
224
+ *
225
+ * @protected
226
+ */
227
+ _processRouter(input: I, model: ChatModel, modelInput: ChatModelInput, context: Context, toolsMap: Map<string, Agent>): AgentProcessAsyncGenerator<O>;
70
228
  }
@@ -1,41 +1,113 @@
1
1
  import { z } from "zod";
2
+ import { DefaultMemory } from "../memory/default-memory.js";
3
+ import { MemoryAgent } from "../memory/memory.js";
2
4
  import { ChatModel } from "../models/chat-model.js";
3
5
  import { MESSAGE_KEY, PromptBuilder } from "../prompt/prompt-builder.js";
4
6
  import { AgentMessageTemplate, ToolMessageTemplate } from "../prompt/template.js";
5
7
  import { readableStreamToAsyncIterator } from "../utils/stream-utils.js";
6
- import { isEmpty } from "../utils/type-utils.js";
7
- import { Agent, } from "./agent.js";
8
+ import { checkArguments, isEmpty } from "../utils/type-utils.js";
9
+ import { Agent, agentOptionsSchema, } from "./agent.js";
8
10
  import { isTransferAgentOutput } from "./types.js";
9
- export const aiAgentToolChoiceSchema = z.union([
10
- z.literal("auto"),
11
- z.literal("none"),
12
- z.literal("required"),
13
- z.literal("router"),
14
- z.instanceof(Agent),
15
- ], { message: "aiAgentToolChoice must be 'auto', 'none', 'required', 'router', or an Agent" });
16
- export const aiAgentOptionsSchema = z.object({
11
+ /**
12
+ * Tool choice options for AI agents
13
+ *
14
+ * Controls how the agent decides to use tools during execution
15
+ */
16
+ export var AIAgentToolChoice;
17
+ (function (AIAgentToolChoice) {
18
+ /**
19
+ * Let the model decide when to use tools
20
+ */
21
+ AIAgentToolChoice["auto"] = "auto";
22
+ /**
23
+ * Disable tool usage
24
+ */
25
+ AIAgentToolChoice["none"] = "none";
26
+ /**
27
+ * Force tool usage
28
+ */
29
+ AIAgentToolChoice["required"] = "required";
30
+ /**
31
+ * Choose exactly one tool and route directly to it
32
+ */
33
+ AIAgentToolChoice["router"] = "router";
34
+ })(AIAgentToolChoice || (AIAgentToolChoice = {}));
35
+ /**
36
+ * Zod schema for validating AIAgentToolChoice values
37
+ *
38
+ * Used to ensure that toolChoice receives valid values
39
+ *
40
+ * @hidden
41
+ */
42
+ export const aiAgentToolChoiceSchema = z.union([z.nativeEnum(AIAgentToolChoice), z.instanceof(Agent)], {
43
+ message: `aiAgentToolChoice must be ${Object.values(AIAgentToolChoice).join(", ")}, or an Agent`,
44
+ });
45
+ /**
46
+ * Zod schema for validating AIAgentOptions
47
+ *
48
+ * Extends the base agent options schema with AI-specific parameters
49
+ *
50
+ * @hidden
51
+ */
52
+ export const aiAgentOptionsSchema = agentOptionsSchema.extend({
17
53
  model: z.instanceof(ChatModel).optional(),
18
54
  instructions: z.union([z.string(), z.instanceof(PromptBuilder)]).optional(),
19
55
  outputKey: z.string().optional(),
20
56
  toolChoice: aiAgentToolChoiceSchema.optional(),
21
- enableHistory: z.boolean().optional(),
22
- maxHistoryMessages: z.number().optional(),
23
- includeInputInOutput: z.boolean().optional(),
24
- subscribeTopic: z.union([z.string(), z.array(z.string())]).optional(),
25
- publishTopic: z.union([z.string(), z.array(z.string()), z.function()]).optional(),
26
- name: z.string().optional(),
27
- description: z.string().optional(),
28
- skills: z.array(z.union([z.instanceof(Agent), z.function()])).optional(),
29
- disableLogging: z.boolean().optional(),
30
- memory: z.union([z.boolean(), z.any(), z.any()]).optional(),
57
+ memoryAgentsAsTools: z.boolean().optional(),
58
+ memoryPromptTemplate: z.string().optional(),
31
59
  });
60
+ /**
61
+ * AI-powered agent that leverages language models
62
+ *
63
+ * AIAgent connects to language models to process inputs and generate responses,
64
+ * with support for streaming, function calling, and tool usage.
65
+ *
66
+ * Key features:
67
+ * - Connect to any language model
68
+ * - Use customizable instructions and prompts
69
+ * - Execute tools/function calls
70
+ * - Support streaming responses
71
+ * - Router mode for specialized agents
72
+ *
73
+ * @template I The input message type the agent accepts
74
+ * @template O The output message type the agent returns
75
+ *
76
+ * @example
77
+ * Basic AIAgent creation:
78
+ * {@includeCode ../../test/agents/ai-agent.test.ts#example-ai-agent-basic}
79
+ */
32
80
  export class AIAgent extends Agent {
81
+ /**
82
+ * Create an AIAgent with the specified options
83
+ *
84
+ * Factory method that provides a convenient way to create new AI agents
85
+ *
86
+ * @param options Configuration options for the AI agent
87
+ * @returns A new AIAgent instance
88
+ *
89
+ * @example
90
+ * AI agent with custom instructions:
91
+ * {@includeCode ../../test/agents/ai-agent.test.ts#example-ai-agent-instructions}
92
+ */
33
93
  static from(options) {
34
94
  return new AIAgent(options);
35
95
  }
96
+ /**
97
+ * Create an AIAgent instance
98
+ *
99
+ * @param options Configuration options for the AI agent
100
+ */
36
101
  constructor(options) {
37
- aiAgentOptionsSchema.parse(options);
38
- super(options);
102
+ super({
103
+ ...options,
104
+ memory: !options.memory
105
+ ? undefined
106
+ : Array.isArray(options.memory) || options.memory instanceof MemoryAgent
107
+ ? options.memory
108
+ : new DefaultMemory(options.memory === true ? {} : options.memory),
109
+ });
110
+ checkArguments("AIAgent", aiAgentOptionsSchema, options);
39
111
  this.model = options.model;
40
112
  this.instructions =
41
113
  typeof options.instructions === "string"
@@ -43,11 +115,77 @@ export class AIAgent extends Agent {
43
115
  : (options.instructions ?? new PromptBuilder());
44
116
  this.outputKey = options.outputKey;
45
117
  this.toolChoice = options.toolChoice;
118
+ this.memoryAgentsAsTools = options.memoryAgentsAsTools;
119
+ this.memoryPromptTemplate = options.memoryPromptTemplate;
120
+ if (typeof options.catchToolsError === "boolean")
121
+ this.catchToolsError = options.catchToolsError;
46
122
  }
123
+ /**
124
+ * The language model used by this agent
125
+ *
126
+ * If not set on the agent, the model from the context will be used
127
+ */
47
128
  model;
129
+ /**
130
+ * Instructions for the language model
131
+ *
132
+ * Contains system messages, user templates, and other prompt elements
133
+ * that guide the model's behavior
134
+ *
135
+ * @example
136
+ * Custom prompt builder:
137
+ * {@includeCode ../../test/agents/ai-agent.test.ts#example-ai-agent-prompt-builder}
138
+ */
48
139
  instructions;
140
+ /**
141
+ * Custom key to use for text output in the response
142
+ *
143
+ * @example
144
+ * Setting a custom output key:
145
+ * {@includeCode ../../test/agents/ai-agent.test.ts#example-ai-agent-custom-output-key}
146
+ */
49
147
  outputKey;
148
+ /**
149
+ * Controls how the agent uses tools during execution
150
+ *
151
+ * @example
152
+ * Automatic tool choice:
153
+ * {@includeCode ../../test/agents/ai-agent.test.ts#example-ai-agent-tool-choice-auto}
154
+ *
155
+ * @example
156
+ * Router tool choice:
157
+ * {@includeCode ../../test/agents/ai-agent.test.ts#example-ai-agent-router}
158
+ */
50
159
  toolChoice;
160
+ /**
161
+ * Whether to include memory agents as tools for the AI model
162
+ *
163
+ * When set to true, memory agents will be made available as tools
164
+ * that the model can call directly to retrieve or store information.
165
+ * This enables the agent to explicitly interact with its memories.
166
+ */
167
+ memoryAgentsAsTools;
168
+ /**
169
+ * Custom prompt template for formatting memory content
170
+ *
171
+ * Allows customization of how memories are presented to the AI model.
172
+ * If not provided, the default template from MEMORY_MESSAGE_TEMPLATE will be used.
173
+ *
174
+ * The template receives a {{memories}} variable containing serialized memory content.
175
+ */
176
+ memoryPromptTemplate;
177
+ /**
178
+ * Whether to catch error from tool execution and continue processing.
179
+ * If set to false, the agent will throw an error if a tool fails
180
+ *
181
+ * @default true
182
+ */
183
+ catchToolsError = true;
184
+ /**
185
+ * Process an input message and generate a response
186
+ *
187
+ * @protected
188
+ */
51
189
  async *process(input, context) {
52
190
  const model = this.model ?? context.model;
53
191
  if (!model)
@@ -60,7 +198,7 @@ export class AIAgent extends Agent {
60
198
  });
61
199
  const toolsMap = new Map(toolAgents?.map((i) => [i.name, i]));
62
200
  if (this.toolChoice === "router") {
63
- yield* this.processRouter(input, model, modelInput, context, toolsMap);
201
+ yield* this._processRouter(input, model, modelInput, context, toolsMap);
64
202
  return;
65
203
  }
66
204
  const toolCallMessages = [];
@@ -85,7 +223,19 @@ export class AIAgent extends Agent {
85
223
  if (!tool)
86
224
  throw new Error(`Tool not found: ${call.function.name}`);
87
225
  // NOTE: should pass both arguments (model generated) and input (user provided) to the tool
88
- const output = await context.invoke(tool, { ...call.function.arguments, ...input }, { disableTransfer: true });
226
+ const output = await context
227
+ .invoke(tool, { ...input, ...call.function.arguments }, { disableTransfer: true })
228
+ .catch((error) => {
229
+ if (!this.catchToolsError) {
230
+ return Promise.reject(error);
231
+ }
232
+ return {
233
+ isError: true,
234
+ error: {
235
+ message: error.message,
236
+ },
237
+ };
238
+ });
89
239
  // NOTE: Return transfer output immediately
90
240
  if (isTransferAgentOutput(output)) {
91
241
  return output;
@@ -111,7 +261,15 @@ export class AIAgent extends Agent {
111
261
  return;
112
262
  }
113
263
  }
114
- async *processRouter(input, model, modelInput, context, toolsMap) {
264
+ /**
265
+ * Process router mode requests
266
+ *
267
+ * In router mode, the agent sends a single request to the model to determine
268
+ * which tool to use, then routes the request directly to that tool
269
+ *
270
+ * @protected
271
+ */
272
+ async *_processRouter(input, model, modelInput, context, toolsMap) {
115
273
  const { toolCalls: [call] = [], } = await context.invoke(model, modelInput);
116
274
  if (!call) {
117
275
  throw new Error("Router toolChoice requires exactly one tool to be executed");
@@ -42,20 +42,132 @@ export type SSEServerParameters = {
42
42
  */
43
43
  shouldReconnect?: (error: Error) => boolean;
44
44
  };
45
+ /**
46
+ * MCPAgent is a specialized agent for interacting with MCP (Model Context Protocol) servers.
47
+ * It provides the ability to connect to remote MCP servers using different transport methods,
48
+ * and access their tools, prompts, and resources.
49
+ *
50
+ * MCPAgent serves as a bridge between your application and MCP servers, allowing you to:
51
+ * - Connect to MCP servers over HTTP/SSE or stdio
52
+ * - Access server tools as agent skills
53
+ * - Utilize server prompts and resources
54
+ * - Manage server connections with automatic reconnection
55
+ *
56
+ * @example
57
+ * Here's an example of creating an MCPAgent with SSE transport:
58
+ * {@includeCode ../../test/agents/mcp-agent.test.ts#example-mcp-agent-from-sse}
59
+ */
45
60
  export declare class MCPAgent extends Agent {
61
+ /**
62
+ * Create an MCPAgent from a connection to an SSE server.
63
+ *
64
+ * This overload establishes a Server-Sent Events connection to an MCP server
65
+ * and automatically discovers its available tools, prompts, and resources.
66
+ *
67
+ * @param options SSE server connection parameters
68
+ * @returns Promise resolving to a new MCPAgent instance
69
+ *
70
+ * @example
71
+ * Here's an example of creating an MCPAgent with StreamableHTTP transport:
72
+ * {@includeCode ../../test/agents/mcp-agent.test.ts#example-mcp-agent-from-streamable-http}
73
+ *
74
+ * @example
75
+ * Here's an example of creating an MCPAgent with SSE transport:
76
+ * {@includeCode ../../test/agents/mcp-agent.test.ts#example-mcp-agent-from-sse}
77
+ *
78
+ * @example
79
+ * Here's an example of creating an MCPAgent with Stdio transport:
80
+ * {@includeCode ../../test/agents/mcp-agent.test.ts#example-mcp-agent-from-stdio}
81
+ */
46
82
  static from(options: MCPServerOptions): Promise<MCPAgent>;
83
+ /**
84
+ * Create an MCPAgent from a pre-configured MCP client.
85
+ *
86
+ * This overload uses an existing MCP client instance and optionally
87
+ * pre-defined prompts and resources.
88
+ *
89
+ * @param options MCPAgent configuration with client instance
90
+ * @returns A new MCPAgent instance
91
+ *
92
+ * @example
93
+ * Here's an example of creating an MCPAgent with a client instance:
94
+ * {@includeCode ../../test/agents/mcp-agent.test.ts#example-mcp-agent-direct}
95
+ */
47
96
  static from(options: MCPAgentOptions): MCPAgent;
48
97
  private static fromTransport;
98
+ /**
99
+ * Create an MCPAgent instance directly with a configured client.
100
+ *
101
+ * @param options MCPAgent configuration options, including client instance
102
+ *
103
+ * @example
104
+ * Here's an example of creating an MCPAgent with an existing client:
105
+ * {@includeCode ../../test/agents/mcp-agent.test.ts#example-mcp-agent-direct}
106
+ */
49
107
  constructor(options: MCPAgentOptions);
108
+ /**
109
+ * The MCP client instance used for communication with the MCP server.
110
+ *
111
+ * This client manages the connection to the MCP server and provides
112
+ * methods for interacting with server-provided functionality.
113
+ */
50
114
  client: Client;
115
+ /**
116
+ * Array of MCP prompts available from the connected server.
117
+ *
118
+ * Prompts can be accessed by index or by name.
119
+ *
120
+ * @example
121
+ * Here's an example of accessing prompts:
122
+ * {@includeCode ../../test/agents/mcp-agent.test.ts#example-mcp-agent-prompts}
123
+ */
51
124
  readonly prompts: MCPPrompt[] & {
52
125
  [key: string]: MCPPrompt;
53
126
  };
127
+ /**
128
+ * Array of MCP resources available from the connected server.
129
+ *
130
+ * Resources can be accessed by index or by name.
131
+ *
132
+ * @example
133
+ * Here's an example of accessing resources:
134
+ * {@includeCode ../../test/agents/mcp-agent.test.ts#example-mcp-agent-resources}
135
+ */
54
136
  readonly resources: MCPResource[] & {
55
137
  [key: string]: MCPResource;
56
138
  };
139
+ /**
140
+ * Check if the agent is invokable.
141
+ *
142
+ * MCPAgent itself is not directly invokable as it acts as a container
143
+ * for tools, prompts, and resources. Always returns false.
144
+ */
57
145
  get isInvokable(): boolean;
146
+ /**
147
+ * Process method required by Agent interface.
148
+ *
149
+ * Since MCPAgent itself is not directly invokable, this method
150
+ * throws an error if called.
151
+ *
152
+ * @param _input Input message (unused)
153
+ * @param _context Execution context (unused)
154
+ * @throws Error This method always throws an error since MCPAgent is not directly invokable
155
+ */
58
156
  process(_input: Message, _context?: Context): Promise<Message>;
157
+ /**
158
+ * Shut down the agent and close the MCP connection.
159
+ *
160
+ * This method cleans up resources and closes the connection
161
+ * to the MCP server.
162
+ *
163
+ * @example
164
+ * Here's an example of shutting down an MCPAgent:
165
+ * {@includeCode ../../test/agents/mcp-agent.test.ts#example-mcp-agent-shutdown}
166
+ *
167
+ * @example
168
+ * Here's an example of shutting down an MCPAgent by using statement:
169
+ * {@includeCode ../../test/agents/mcp-agent.test.ts#example-mcp-agent-shutdown-by-using}
170
+ */
59
171
  shutdown(): Promise<void>;
60
172
  }
61
173
  export interface ClientWithReconnectOptions {