@lleverage-ai/agent-sdk 0.0.1

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 (327) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +2321 -0
  3. package/dist/agent.d.ts +52 -0
  4. package/dist/agent.d.ts.map +1 -0
  5. package/dist/agent.js +2122 -0
  6. package/dist/agent.js.map +1 -0
  7. package/dist/backend.d.ts +378 -0
  8. package/dist/backend.d.ts.map +1 -0
  9. package/dist/backend.js +71 -0
  10. package/dist/backend.js.map +1 -0
  11. package/dist/backends/composite.d.ts +258 -0
  12. package/dist/backends/composite.d.ts.map +1 -0
  13. package/dist/backends/composite.js +437 -0
  14. package/dist/backends/composite.js.map +1 -0
  15. package/dist/backends/filesystem.d.ts +268 -0
  16. package/dist/backends/filesystem.d.ts.map +1 -0
  17. package/dist/backends/filesystem.js +623 -0
  18. package/dist/backends/filesystem.js.map +1 -0
  19. package/dist/backends/index.d.ts +14 -0
  20. package/dist/backends/index.d.ts.map +1 -0
  21. package/dist/backends/index.js +14 -0
  22. package/dist/backends/index.js.map +1 -0
  23. package/dist/backends/persistent.d.ts +312 -0
  24. package/dist/backends/persistent.d.ts.map +1 -0
  25. package/dist/backends/persistent.js +519 -0
  26. package/dist/backends/persistent.js.map +1 -0
  27. package/dist/backends/sandbox.d.ts +315 -0
  28. package/dist/backends/sandbox.d.ts.map +1 -0
  29. package/dist/backends/sandbox.js +490 -0
  30. package/dist/backends/sandbox.js.map +1 -0
  31. package/dist/backends/state.d.ts +225 -0
  32. package/dist/backends/state.d.ts.map +1 -0
  33. package/dist/backends/state.js +396 -0
  34. package/dist/backends/state.js.map +1 -0
  35. package/dist/checkpointer/file-saver.d.ts +182 -0
  36. package/dist/checkpointer/file-saver.d.ts.map +1 -0
  37. package/dist/checkpointer/file-saver.js +298 -0
  38. package/dist/checkpointer/file-saver.js.map +1 -0
  39. package/dist/checkpointer/index.d.ts +40 -0
  40. package/dist/checkpointer/index.d.ts.map +1 -0
  41. package/dist/checkpointer/index.js +40 -0
  42. package/dist/checkpointer/index.js.map +1 -0
  43. package/dist/checkpointer/kv-saver.d.ts +142 -0
  44. package/dist/checkpointer/kv-saver.d.ts.map +1 -0
  45. package/dist/checkpointer/kv-saver.js +176 -0
  46. package/dist/checkpointer/kv-saver.js.map +1 -0
  47. package/dist/checkpointer/memory-saver.d.ts +158 -0
  48. package/dist/checkpointer/memory-saver.d.ts.map +1 -0
  49. package/dist/checkpointer/memory-saver.js +222 -0
  50. package/dist/checkpointer/memory-saver.js.map +1 -0
  51. package/dist/checkpointer/types.d.ts +353 -0
  52. package/dist/checkpointer/types.d.ts.map +1 -0
  53. package/dist/checkpointer/types.js +159 -0
  54. package/dist/checkpointer/types.js.map +1 -0
  55. package/dist/context-manager.d.ts +627 -0
  56. package/dist/context-manager.d.ts.map +1 -0
  57. package/dist/context-manager.js +1039 -0
  58. package/dist/context-manager.js.map +1 -0
  59. package/dist/context.d.ts +57 -0
  60. package/dist/context.d.ts.map +1 -0
  61. package/dist/context.js +76 -0
  62. package/dist/context.js.map +1 -0
  63. package/dist/errors/index.d.ts +611 -0
  64. package/dist/errors/index.d.ts.map +1 -0
  65. package/dist/errors/index.js +1023 -0
  66. package/dist/errors/index.js.map +1 -0
  67. package/dist/generation-helpers.d.ts +126 -0
  68. package/dist/generation-helpers.d.ts.map +1 -0
  69. package/dist/generation-helpers.js +181 -0
  70. package/dist/generation-helpers.js.map +1 -0
  71. package/dist/hooks/audit.d.ts +210 -0
  72. package/dist/hooks/audit.d.ts.map +1 -0
  73. package/dist/hooks/audit.js +305 -0
  74. package/dist/hooks/audit.js.map +1 -0
  75. package/dist/hooks/cache.d.ts +180 -0
  76. package/dist/hooks/cache.d.ts.map +1 -0
  77. package/dist/hooks/cache.js +273 -0
  78. package/dist/hooks/cache.js.map +1 -0
  79. package/dist/hooks/guardrails.d.ts +145 -0
  80. package/dist/hooks/guardrails.d.ts.map +1 -0
  81. package/dist/hooks/guardrails.js +326 -0
  82. package/dist/hooks/guardrails.js.map +1 -0
  83. package/dist/hooks/index.d.ts +18 -0
  84. package/dist/hooks/index.d.ts.map +1 -0
  85. package/dist/hooks/index.js +32 -0
  86. package/dist/hooks/index.js.map +1 -0
  87. package/dist/hooks/logging.d.ts +193 -0
  88. package/dist/hooks/logging.d.ts.map +1 -0
  89. package/dist/hooks/logging.js +345 -0
  90. package/dist/hooks/logging.js.map +1 -0
  91. package/dist/hooks/parallel-guardrails.d.ts +268 -0
  92. package/dist/hooks/parallel-guardrails.d.ts.map +1 -0
  93. package/dist/hooks/parallel-guardrails.js +416 -0
  94. package/dist/hooks/parallel-guardrails.js.map +1 -0
  95. package/dist/hooks/rate-limit.d.ts +305 -0
  96. package/dist/hooks/rate-limit.d.ts.map +1 -0
  97. package/dist/hooks/rate-limit.js +372 -0
  98. package/dist/hooks/rate-limit.js.map +1 -0
  99. package/dist/hooks/retry.d.ts +144 -0
  100. package/dist/hooks/retry.d.ts.map +1 -0
  101. package/dist/hooks/retry.js +210 -0
  102. package/dist/hooks/retry.js.map +1 -0
  103. package/dist/hooks/secrets.d.ts +174 -0
  104. package/dist/hooks/secrets.d.ts.map +1 -0
  105. package/dist/hooks/secrets.js +306 -0
  106. package/dist/hooks/secrets.js.map +1 -0
  107. package/dist/hooks.d.ts +229 -0
  108. package/dist/hooks.d.ts.map +1 -0
  109. package/dist/hooks.js +352 -0
  110. package/dist/hooks.js.map +1 -0
  111. package/dist/index.d.ts +97 -0
  112. package/dist/index.d.ts.map +1 -0
  113. package/dist/index.js +182 -0
  114. package/dist/index.js.map +1 -0
  115. package/dist/mcp/env.d.ts +25 -0
  116. package/dist/mcp/env.d.ts.map +1 -0
  117. package/dist/mcp/env.js +18 -0
  118. package/dist/mcp/env.js.map +1 -0
  119. package/dist/mcp/index.d.ts +16 -0
  120. package/dist/mcp/index.d.ts.map +1 -0
  121. package/dist/mcp/index.js +17 -0
  122. package/dist/mcp/index.js.map +1 -0
  123. package/dist/mcp/manager.d.ts +184 -0
  124. package/dist/mcp/manager.d.ts.map +1 -0
  125. package/dist/mcp/manager.js +446 -0
  126. package/dist/mcp/manager.js.map +1 -0
  127. package/dist/mcp/types.d.ts +58 -0
  128. package/dist/mcp/types.d.ts.map +1 -0
  129. package/dist/mcp/types.js +7 -0
  130. package/dist/mcp/types.js.map +1 -0
  131. package/dist/mcp/validation.d.ts +119 -0
  132. package/dist/mcp/validation.d.ts.map +1 -0
  133. package/dist/mcp/validation.js +407 -0
  134. package/dist/mcp/validation.js.map +1 -0
  135. package/dist/mcp/virtual-server.d.ts +78 -0
  136. package/dist/mcp/virtual-server.d.ts.map +1 -0
  137. package/dist/mcp/virtual-server.js +137 -0
  138. package/dist/mcp/virtual-server.js.map +1 -0
  139. package/dist/memory/filesystem-store.d.ts +217 -0
  140. package/dist/memory/filesystem-store.d.ts.map +1 -0
  141. package/dist/memory/filesystem-store.js +343 -0
  142. package/dist/memory/filesystem-store.js.map +1 -0
  143. package/dist/memory/index.d.ts +46 -0
  144. package/dist/memory/index.d.ts.map +1 -0
  145. package/dist/memory/index.js +46 -0
  146. package/dist/memory/index.js.map +1 -0
  147. package/dist/memory/loader.d.ts +396 -0
  148. package/dist/memory/loader.d.ts.map +1 -0
  149. package/dist/memory/loader.js +419 -0
  150. package/dist/memory/loader.js.map +1 -0
  151. package/dist/memory/permissions.d.ts +282 -0
  152. package/dist/memory/permissions.d.ts.map +1 -0
  153. package/dist/memory/permissions.js +297 -0
  154. package/dist/memory/permissions.js.map +1 -0
  155. package/dist/memory/rules.d.ts +249 -0
  156. package/dist/memory/rules.d.ts.map +1 -0
  157. package/dist/memory/rules.js +362 -0
  158. package/dist/memory/rules.js.map +1 -0
  159. package/dist/memory/store.d.ts +286 -0
  160. package/dist/memory/store.d.ts.map +1 -0
  161. package/dist/memory/store.js +263 -0
  162. package/dist/memory/store.js.map +1 -0
  163. package/dist/middleware/apply.d.ts +73 -0
  164. package/dist/middleware/apply.d.ts.map +1 -0
  165. package/dist/middleware/apply.js +219 -0
  166. package/dist/middleware/apply.js.map +1 -0
  167. package/dist/middleware/context.d.ts +33 -0
  168. package/dist/middleware/context.d.ts.map +1 -0
  169. package/dist/middleware/context.js +176 -0
  170. package/dist/middleware/context.js.map +1 -0
  171. package/dist/middleware/index.d.ts +31 -0
  172. package/dist/middleware/index.d.ts.map +1 -0
  173. package/dist/middleware/index.js +32 -0
  174. package/dist/middleware/index.js.map +1 -0
  175. package/dist/middleware/logging.d.ts +137 -0
  176. package/dist/middleware/logging.d.ts.map +1 -0
  177. package/dist/middleware/logging.js +374 -0
  178. package/dist/middleware/logging.js.map +1 -0
  179. package/dist/middleware/types.d.ts +183 -0
  180. package/dist/middleware/types.d.ts.map +1 -0
  181. package/dist/middleware/types.js +11 -0
  182. package/dist/middleware/types.js.map +1 -0
  183. package/dist/observability/events.d.ts +183 -0
  184. package/dist/observability/events.d.ts.map +1 -0
  185. package/dist/observability/events.js +305 -0
  186. package/dist/observability/events.js.map +1 -0
  187. package/dist/observability/index.d.ts +55 -0
  188. package/dist/observability/index.d.ts.map +1 -0
  189. package/dist/observability/index.js +87 -0
  190. package/dist/observability/index.js.map +1 -0
  191. package/dist/observability/logger.d.ts +318 -0
  192. package/dist/observability/logger.d.ts.map +1 -0
  193. package/dist/observability/logger.js +436 -0
  194. package/dist/observability/logger.js.map +1 -0
  195. package/dist/observability/metrics.d.ts +341 -0
  196. package/dist/observability/metrics.d.ts.map +1 -0
  197. package/dist/observability/metrics.js +490 -0
  198. package/dist/observability/metrics.js.map +1 -0
  199. package/dist/observability/preset.d.ts +161 -0
  200. package/dist/observability/preset.d.ts.map +1 -0
  201. package/dist/observability/preset.js +133 -0
  202. package/dist/observability/preset.js.map +1 -0
  203. package/dist/observability/streaming.d.ts +113 -0
  204. package/dist/observability/streaming.d.ts.map +1 -0
  205. package/dist/observability/streaming.js +114 -0
  206. package/dist/observability/streaming.js.map +1 -0
  207. package/dist/observability/tracing.d.ts +378 -0
  208. package/dist/observability/tracing.d.ts.map +1 -0
  209. package/dist/observability/tracing.js +539 -0
  210. package/dist/observability/tracing.js.map +1 -0
  211. package/dist/plugins.d.ts +55 -0
  212. package/dist/plugins.d.ts.map +1 -0
  213. package/dist/plugins.js +63 -0
  214. package/dist/plugins.js.map +1 -0
  215. package/dist/presets/index.d.ts +7 -0
  216. package/dist/presets/index.d.ts.map +1 -0
  217. package/dist/presets/index.js +7 -0
  218. package/dist/presets/index.js.map +1 -0
  219. package/dist/presets/production.d.ts +262 -0
  220. package/dist/presets/production.d.ts.map +1 -0
  221. package/dist/presets/production.js +295 -0
  222. package/dist/presets/production.js.map +1 -0
  223. package/dist/security/index.d.ts +179 -0
  224. package/dist/security/index.d.ts.map +1 -0
  225. package/dist/security/index.js +323 -0
  226. package/dist/security/index.js.map +1 -0
  227. package/dist/subagents/advanced.d.ts +413 -0
  228. package/dist/subagents/advanced.d.ts.map +1 -0
  229. package/dist/subagents/advanced.js +396 -0
  230. package/dist/subagents/advanced.js.map +1 -0
  231. package/dist/subagents/index.d.ts +14 -0
  232. package/dist/subagents/index.d.ts.map +1 -0
  233. package/dist/subagents/index.js +15 -0
  234. package/dist/subagents/index.js.map +1 -0
  235. package/dist/subagents.d.ts +73 -0
  236. package/dist/subagents.d.ts.map +1 -0
  237. package/dist/subagents.js +213 -0
  238. package/dist/subagents.js.map +1 -0
  239. package/dist/task-store/file-store.d.ts +76 -0
  240. package/dist/task-store/file-store.d.ts.map +1 -0
  241. package/dist/task-store/file-store.js +190 -0
  242. package/dist/task-store/file-store.js.map +1 -0
  243. package/dist/task-store/index.d.ts +11 -0
  244. package/dist/task-store/index.d.ts.map +1 -0
  245. package/dist/task-store/index.js +10 -0
  246. package/dist/task-store/index.js.map +1 -0
  247. package/dist/task-store/kv-store.d.ts +140 -0
  248. package/dist/task-store/kv-store.d.ts.map +1 -0
  249. package/dist/task-store/kv-store.js +169 -0
  250. package/dist/task-store/kv-store.js.map +1 -0
  251. package/dist/task-store/memory-store.d.ts +66 -0
  252. package/dist/task-store/memory-store.d.ts.map +1 -0
  253. package/dist/task-store/memory-store.js +125 -0
  254. package/dist/task-store/memory-store.js.map +1 -0
  255. package/dist/task-store/types.d.ts +235 -0
  256. package/dist/task-store/types.d.ts.map +1 -0
  257. package/dist/task-store/types.js +110 -0
  258. package/dist/task-store/types.js.map +1 -0
  259. package/dist/testing/assertions.d.ts +401 -0
  260. package/dist/testing/assertions.d.ts.map +1 -0
  261. package/dist/testing/assertions.js +630 -0
  262. package/dist/testing/assertions.js.map +1 -0
  263. package/dist/testing/index.d.ts +343 -0
  264. package/dist/testing/index.d.ts.map +1 -0
  265. package/dist/testing/index.js +360 -0
  266. package/dist/testing/index.js.map +1 -0
  267. package/dist/testing/mock-agent.d.ts +214 -0
  268. package/dist/testing/mock-agent.d.ts.map +1 -0
  269. package/dist/testing/mock-agent.js +448 -0
  270. package/dist/testing/mock-agent.js.map +1 -0
  271. package/dist/testing/recorder.d.ts +288 -0
  272. package/dist/testing/recorder.d.ts.map +1 -0
  273. package/dist/testing/recorder.js +499 -0
  274. package/dist/testing/recorder.js.map +1 -0
  275. package/dist/tools/execute.d.ts +104 -0
  276. package/dist/tools/execute.d.ts.map +1 -0
  277. package/dist/tools/execute.js +191 -0
  278. package/dist/tools/execute.js.map +1 -0
  279. package/dist/tools/factory.d.ts +260 -0
  280. package/dist/tools/factory.d.ts.map +1 -0
  281. package/dist/tools/factory.js +241 -0
  282. package/dist/tools/factory.js.map +1 -0
  283. package/dist/tools/filesystem.d.ts +215 -0
  284. package/dist/tools/filesystem.d.ts.map +1 -0
  285. package/dist/tools/filesystem.js +311 -0
  286. package/dist/tools/filesystem.js.map +1 -0
  287. package/dist/tools/index.d.ts +33 -0
  288. package/dist/tools/index.d.ts.map +1 -0
  289. package/dist/tools/index.js +33 -0
  290. package/dist/tools/index.js.map +1 -0
  291. package/dist/tools/search.d.ts +59 -0
  292. package/dist/tools/search.d.ts.map +1 -0
  293. package/dist/tools/search.js +94 -0
  294. package/dist/tools/search.js.map +1 -0
  295. package/dist/tools/skills.d.ts +354 -0
  296. package/dist/tools/skills.d.ts.map +1 -0
  297. package/dist/tools/skills.js +413 -0
  298. package/dist/tools/skills.js.map +1 -0
  299. package/dist/tools/task.d.ts +272 -0
  300. package/dist/tools/task.d.ts.map +1 -0
  301. package/dist/tools/task.js +521 -0
  302. package/dist/tools/task.js.map +1 -0
  303. package/dist/tools/todos.d.ts +131 -0
  304. package/dist/tools/todos.d.ts.map +1 -0
  305. package/dist/tools/todos.js +120 -0
  306. package/dist/tools/todos.js.map +1 -0
  307. package/dist/tools/tool-registry.d.ts +424 -0
  308. package/dist/tools/tool-registry.d.ts.map +1 -0
  309. package/dist/tools/tool-registry.js +607 -0
  310. package/dist/tools/tool-registry.js.map +1 -0
  311. package/dist/tools/user-interaction.d.ts +116 -0
  312. package/dist/tools/user-interaction.d.ts.map +1 -0
  313. package/dist/tools/user-interaction.js +147 -0
  314. package/dist/tools/user-interaction.js.map +1 -0
  315. package/dist/tools/utils.d.ts +124 -0
  316. package/dist/tools/utils.d.ts.map +1 -0
  317. package/dist/tools/utils.js +189 -0
  318. package/dist/tools/utils.js.map +1 -0
  319. package/dist/tools.d.ts +74 -0
  320. package/dist/tools.d.ts.map +1 -0
  321. package/dist/tools.js +73 -0
  322. package/dist/tools.js.map +1 -0
  323. package/dist/types.d.ts +2421 -0
  324. package/dist/types.d.ts.map +1 -0
  325. package/dist/types.js +55 -0
  326. package/dist/types.js.map +1 -0
  327. package/package.json +81 -0
@@ -0,0 +1,214 @@
1
+ /**
2
+ * Mock agent implementation for testing.
3
+ *
4
+ * Provides a fully configurable mock agent that can be used in tests
5
+ * without making real API calls.
6
+ *
7
+ * @packageDocumentation
8
+ */
9
+ import type { LanguageModel, LanguageModelUsage, ToolSet } from "ai";
10
+ import type { BackendProtocol } from "../backend.js";
11
+ import type { AgentState } from "../backends/state.js";
12
+ import type { Agent, FinishReason, GenerateOptions, GenerateStep, SkillDefinition, StreamPart } from "../types.js";
13
+ /**
14
+ * Configuration for a mock response.
15
+ *
16
+ * @category Testing
17
+ */
18
+ export interface MockResponse {
19
+ /** The text response to return */
20
+ text: string;
21
+ /** Finish reason */
22
+ finishReason?: FinishReason;
23
+ /** Token usage information */
24
+ usage?: LanguageModelUsage;
25
+ /** Structured output if using output schema */
26
+ output?: unknown;
27
+ /** Steps to include in the response */
28
+ steps?: GenerateStep[];
29
+ /** Delay in milliseconds before responding */
30
+ delay?: number;
31
+ /** Error to throw instead of returning a response */
32
+ error?: Error;
33
+ /** Stream chunks for streaming responses */
34
+ streamChunks?: StreamPart[];
35
+ }
36
+ /**
37
+ * Options for creating a mock agent.
38
+ *
39
+ * @category Testing
40
+ */
41
+ export interface MockAgentOptions {
42
+ /** Static response to return for all requests */
43
+ response?: MockResponse;
44
+ /** Function to dynamically generate responses based on input */
45
+ responseHandler?: (options: GenerateOptions) => MockResponse | Promise<MockResponse>;
46
+ /** Queue of responses to return in order */
47
+ responseQueue?: MockResponse[];
48
+ /** Initial state for the agent */
49
+ initialState?: Partial<AgentState>;
50
+ /** Backend to use (defaults to StateBackend) */
51
+ backend?: BackendProtocol;
52
+ /** Tools available to the mock agent */
53
+ tools?: ToolSet;
54
+ /** Skills available to the mock agent */
55
+ skills?: SkillDefinition[];
56
+ /** System prompt for the mock agent */
57
+ systemPrompt?: string;
58
+ /** Max steps configuration */
59
+ maxSteps?: number;
60
+ /** ID for the mock agent */
61
+ id?: string;
62
+ }
63
+ /**
64
+ * A mock agent for testing purposes.
65
+ *
66
+ * Extends the standard Agent interface with additional methods
67
+ * for configuring mock behavior and inspecting calls.
68
+ *
69
+ * @category Testing
70
+ */
71
+ export interface MockAgent extends Agent {
72
+ /**
73
+ * All calls made to generate().
74
+ */
75
+ readonly generateCalls: GenerateOptions[];
76
+ /**
77
+ * All calls made to stream().
78
+ */
79
+ readonly streamCalls: GenerateOptions[];
80
+ /**
81
+ * Set a static response for all subsequent requests.
82
+ */
83
+ setResponse(response: MockResponse): void;
84
+ /**
85
+ * Set a response handler for dynamic responses.
86
+ */
87
+ setResponseHandler(handler: (options: GenerateOptions) => MockResponse | Promise<MockResponse>): void;
88
+ /**
89
+ * Queue responses to be returned in order.
90
+ */
91
+ queueResponses(...responses: MockResponse[]): void;
92
+ /**
93
+ * Clear all queued responses.
94
+ */
95
+ clearQueue(): void;
96
+ /**
97
+ * Reset all call history.
98
+ */
99
+ resetHistory(): void;
100
+ /**
101
+ * Get the number of times generate was called.
102
+ */
103
+ getGenerateCallCount(): number;
104
+ /**
105
+ * Get the number of times stream was called.
106
+ */
107
+ getStreamCallCount(): number;
108
+ /**
109
+ * Assert that generate was called with specific options.
110
+ */
111
+ assertGenerateCalledWith(expected: Partial<GenerateOptions>): void;
112
+ /**
113
+ * Assert that generate was called a specific number of times.
114
+ */
115
+ assertGenerateCallCount(count: number): void;
116
+ }
117
+ /**
118
+ * Creates a mock agent for testing.
119
+ *
120
+ * Mock agents provide predictable responses and call tracking
121
+ * without making real API calls. They're useful for unit testing
122
+ * agent-dependent code.
123
+ *
124
+ * @param options - Configuration for the mock agent
125
+ * @returns A mock agent instance
126
+ *
127
+ * @example
128
+ * ```typescript
129
+ * import { createMockAgent } from "@lleverage-ai/agent-sdk/testing";
130
+ *
131
+ * const agent = createMockAgent({
132
+ * response: { text: "Hello from mock!" },
133
+ * });
134
+ *
135
+ * const result = await agent.generate({ prompt: "Hi" });
136
+ * expect(result.text).toBe("Hello from mock!");
137
+ * expect(agent.generateCalls).toHaveLength(1);
138
+ * ```
139
+ *
140
+ * @example
141
+ * ```typescript
142
+ * // Dynamic responses based on input
143
+ * const agent = createMockAgent({
144
+ * responseHandler: (opts) => ({
145
+ * text: `You said: ${opts.prompt}`,
146
+ * }),
147
+ * });
148
+ *
149
+ * const result = await agent.generate({ prompt: "hello" });
150
+ * expect(result.text).toBe("You said: hello");
151
+ * ```
152
+ *
153
+ * @example
154
+ * ```typescript
155
+ * // Queue multiple responses
156
+ * const agent = createMockAgent();
157
+ * agent.queueResponses(
158
+ * { text: "First response" },
159
+ * { text: "Second response" },
160
+ * );
161
+ *
162
+ * const r1 = await agent.generate({ prompt: "1" });
163
+ * const r2 = await agent.generate({ prompt: "2" });
164
+ * expect(r1.text).toBe("First response");
165
+ * expect(r2.text).toBe("Second response");
166
+ * ```
167
+ *
168
+ * @category Testing
169
+ */
170
+ export declare function createMockAgent(options?: MockAgentOptions): MockAgent;
171
+ /**
172
+ * Options for creating a mock language model.
173
+ *
174
+ * @category Testing
175
+ */
176
+ export interface MockModelOptions {
177
+ /** Default text response */
178
+ text?: string;
179
+ /** Default tool calls to return */
180
+ toolCalls?: Array<{
181
+ toolName: string;
182
+ input: unknown;
183
+ }>;
184
+ /** Default finish reason */
185
+ finishReason?: FinishReason;
186
+ /** Default usage */
187
+ usage?: LanguageModelUsage;
188
+ /** Provider name */
189
+ provider?: string;
190
+ /** Model ID */
191
+ modelId?: string;
192
+ }
193
+ /**
194
+ * Creates a mock language model for testing.
195
+ *
196
+ * This is a lower-level utility for creating mock models that can be
197
+ * passed to createAgent() when you need more control over the model behavior.
198
+ *
199
+ * @param options - Configuration for the mock model
200
+ * @returns A mock LanguageModel instance
201
+ *
202
+ * @example
203
+ * ```typescript
204
+ * import { createMockModel } from "@lleverage-ai/agent-sdk/testing";
205
+ * import { createAgent } from "@lleverage-ai/agent-sdk";
206
+ *
207
+ * const model = createMockModel({ text: "Custom response" });
208
+ * const agent = createAgent({ model });
209
+ * ```
210
+ *
211
+ * @category Testing
212
+ */
213
+ export declare function createMockModel(options?: MockModelOptions): LanguageModel;
214
+ //# sourceMappingURL=mock-agent.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mock-agent.d.ts","sourceRoot":"","sources":["../../src/testing/mock-agent.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,448 @@
1
+ /**
2
+ * Mock agent implementation for testing.
3
+ *
4
+ * Provides a fully configurable mock agent that can be used in tests
5
+ * without making real API calls.
6
+ *
7
+ * @packageDocumentation
8
+ */
9
+ import { StateBackend } from "../backends/state.js";
10
+ /**
11
+ * Default mock response configuration.
12
+ */
13
+ const DEFAULT_MOCK_RESPONSE = {
14
+ text: "Mock response",
15
+ finishReason: "stop",
16
+ usage: {
17
+ inputTokens: 10,
18
+ outputTokens: 20,
19
+ totalTokens: 30,
20
+ inputTokenDetails: {
21
+ noCacheTokens: 10,
22
+ cacheReadTokens: 0,
23
+ cacheWriteTokens: 0,
24
+ },
25
+ outputTokenDetails: {
26
+ textTokens: 20,
27
+ reasoningTokens: 0,
28
+ },
29
+ },
30
+ steps: [],
31
+ };
32
+ // =============================================================================
33
+ // Mock Agent Implementation
34
+ // =============================================================================
35
+ /**
36
+ * Module-level counter for generating unique mock agent IDs.
37
+ * This ensures each call to createMockAgent() produces a unique ID.
38
+ */
39
+ let mockAgentIdCounter = 0;
40
+ /**
41
+ * Creates a mock agent for testing.
42
+ *
43
+ * Mock agents provide predictable responses and call tracking
44
+ * without making real API calls. They're useful for unit testing
45
+ * agent-dependent code.
46
+ *
47
+ * @param options - Configuration for the mock agent
48
+ * @returns A mock agent instance
49
+ *
50
+ * @example
51
+ * ```typescript
52
+ * import { createMockAgent } from "@lleverage-ai/agent-sdk/testing";
53
+ *
54
+ * const agent = createMockAgent({
55
+ * response: { text: "Hello from mock!" },
56
+ * });
57
+ *
58
+ * const result = await agent.generate({ prompt: "Hi" });
59
+ * expect(result.text).toBe("Hello from mock!");
60
+ * expect(agent.generateCalls).toHaveLength(1);
61
+ * ```
62
+ *
63
+ * @example
64
+ * ```typescript
65
+ * // Dynamic responses based on input
66
+ * const agent = createMockAgent({
67
+ * responseHandler: (opts) => ({
68
+ * text: `You said: ${opts.prompt}`,
69
+ * }),
70
+ * });
71
+ *
72
+ * const result = await agent.generate({ prompt: "hello" });
73
+ * expect(result.text).toBe("You said: hello");
74
+ * ```
75
+ *
76
+ * @example
77
+ * ```typescript
78
+ * // Queue multiple responses
79
+ * const agent = createMockAgent();
80
+ * agent.queueResponses(
81
+ * { text: "First response" },
82
+ * { text: "Second response" },
83
+ * );
84
+ *
85
+ * const r1 = await agent.generate({ prompt: "1" });
86
+ * const r2 = await agent.generate({ prompt: "2" });
87
+ * expect(r1.text).toBe("First response");
88
+ * expect(r2.text).toBe("Second response");
89
+ * ```
90
+ *
91
+ * @category Testing
92
+ */
93
+ export function createMockAgent(options = {}) {
94
+ const id = options.id ?? `mock-agent-${++mockAgentIdCounter}`;
95
+ // Initialize state
96
+ const state = {
97
+ todos: options.initialState?.todos ?? [],
98
+ files: options.initialState?.files ?? {},
99
+ };
100
+ // Initialize backend
101
+ const backend = options.backend ?? new StateBackend(state);
102
+ // Response configuration
103
+ let currentResponse = options.response ?? DEFAULT_MOCK_RESPONSE;
104
+ let responseHandler = options.responseHandler;
105
+ const responseQueue = [...(options.responseQueue ?? [])];
106
+ // Call tracking
107
+ const generateCalls = [];
108
+ const streamCalls = [];
109
+ // Mock model (not actually used, but needed for interface)
110
+ const mockModel = {
111
+ specificationVersion: "v3",
112
+ provider: "mock",
113
+ modelId: "mock-model",
114
+ defaultObjectGenerationMode: "json",
115
+ doGenerate: async () => ({
116
+ text: currentResponse.text,
117
+ content: [{ type: "text", text: currentResponse.text }],
118
+ toolCalls: [],
119
+ finishReason: currentResponse.finishReason ?? "stop",
120
+ usage: currentResponse.usage ?? DEFAULT_MOCK_RESPONSE.usage,
121
+ request: { body: {} },
122
+ response: {
123
+ id: "mock-response-id",
124
+ timestamp: new Date(),
125
+ modelId: "mock-model",
126
+ headers: {},
127
+ },
128
+ warnings: [],
129
+ sources: [],
130
+ providerMetadata: undefined,
131
+ }),
132
+ doStream: async () => ({
133
+ stream: new ReadableStream({
134
+ start(controller) {
135
+ controller.enqueue({
136
+ type: "text-delta",
137
+ text: currentResponse.text,
138
+ });
139
+ controller.enqueue({
140
+ type: "finish",
141
+ finishReason: currentResponse.finishReason ?? "stop",
142
+ usage: currentResponse.usage ?? DEFAULT_MOCK_RESPONSE.usage,
143
+ });
144
+ controller.close();
145
+ },
146
+ }),
147
+ rawCall: { rawPrompt: null, rawSettings: {} },
148
+ }),
149
+ };
150
+ const agentOptions = {
151
+ model: mockModel,
152
+ systemPrompt: options.systemPrompt,
153
+ tools: options.tools,
154
+ skills: options.skills,
155
+ maxSteps: options.maxSteps,
156
+ };
157
+ /**
158
+ * Get the next response to use.
159
+ */
160
+ async function getNextResponse(genOptions) {
161
+ // Check queue first
162
+ if (responseQueue.length > 0) {
163
+ return responseQueue.shift();
164
+ }
165
+ // Use handler if provided
166
+ if (responseHandler) {
167
+ return await responseHandler(genOptions);
168
+ }
169
+ // Fall back to static response
170
+ return currentResponse;
171
+ }
172
+ /**
173
+ * Convert MockResponse to GenerateResult.
174
+ */
175
+ function toGenerateResult(response) {
176
+ return {
177
+ status: "complete",
178
+ text: response.text,
179
+ finishReason: response.finishReason ?? "stop",
180
+ usage: response.usage ?? DEFAULT_MOCK_RESPONSE.usage,
181
+ output: response.output,
182
+ steps: response.steps ?? [],
183
+ };
184
+ }
185
+ /**
186
+ * Convert MockResponse to stream chunks.
187
+ */
188
+ function* toStreamChunks(response) {
189
+ // Use custom stream chunks if provided
190
+ if (response.streamChunks) {
191
+ for (const chunk of response.streamChunks) {
192
+ yield chunk;
193
+ }
194
+ return;
195
+ }
196
+ // Default: yield text as a single chunk, then finish
197
+ yield { type: "text-delta", text: response.text };
198
+ yield {
199
+ type: "finish",
200
+ finishReason: response.finishReason ?? "stop",
201
+ usage: response.usage,
202
+ };
203
+ }
204
+ const mockAgent = {
205
+ id,
206
+ options: agentOptions,
207
+ backend,
208
+ state,
209
+ // Call tracking
210
+ generateCalls,
211
+ streamCalls,
212
+ getSkills() {
213
+ return [...(options.skills ?? [])];
214
+ },
215
+ async generate(genOptions) {
216
+ generateCalls.push({ ...genOptions });
217
+ const response = await getNextResponse(genOptions);
218
+ // Handle delay
219
+ if (response.delay && response.delay > 0) {
220
+ await new Promise((resolve) => setTimeout(resolve, response.delay));
221
+ }
222
+ // Handle error
223
+ if (response.error) {
224
+ throw response.error;
225
+ }
226
+ return toGenerateResult(response);
227
+ },
228
+ async *stream(genOptions) {
229
+ streamCalls.push({ ...genOptions });
230
+ const response = await getNextResponse(genOptions);
231
+ // Handle delay
232
+ if (response.delay && response.delay > 0) {
233
+ await new Promise((resolve) => setTimeout(resolve, response.delay));
234
+ }
235
+ // Handle error
236
+ if (response.error) {
237
+ yield { type: "error", error: response.error };
238
+ return;
239
+ }
240
+ for (const chunk of toStreamChunks(response)) {
241
+ yield chunk;
242
+ }
243
+ },
244
+ async streamResponse(genOptions) {
245
+ streamCalls.push({ ...genOptions });
246
+ const response = await getNextResponse(genOptions);
247
+ // Handle delay
248
+ if (response.delay && response.delay > 0) {
249
+ await new Promise((resolve) => setTimeout(resolve, response.delay));
250
+ }
251
+ // Handle error
252
+ if (response.error) {
253
+ return new Response(JSON.stringify({ error: response.error.message }), {
254
+ status: 500,
255
+ headers: { "Content-Type": "application/json" },
256
+ });
257
+ }
258
+ // Return a simple text response
259
+ return new Response(response.text, {
260
+ status: 200,
261
+ headers: { "Content-Type": "text/plain" },
262
+ });
263
+ },
264
+ async streamDataResponse(genOptions) {
265
+ // For mock agent, streamDataResponse behaves the same as streamResponse
266
+ // since we don't have real streaming tools to exercise
267
+ return mockAgent.streamResponse(genOptions);
268
+ },
269
+ async streamRaw(genOptions) {
270
+ streamCalls.push({ ...genOptions });
271
+ const response = await getNextResponse(genOptions);
272
+ // Return a mock streamText-like result
273
+ return {
274
+ fullStream: (async function* () {
275
+ if (response.error) {
276
+ yield { type: "error", error: response.error };
277
+ return;
278
+ }
279
+ yield { type: "text-delta", text: response.text };
280
+ yield {
281
+ type: "finish",
282
+ finishReason: response.finishReason ?? "stop",
283
+ totalUsage: response.usage,
284
+ };
285
+ })(),
286
+ text: Promise.resolve(response.text),
287
+ usage: Promise.resolve(response.usage ?? DEFAULT_MOCK_RESPONSE.usage),
288
+ finishReason: Promise.resolve(response.finishReason ?? "stop"),
289
+ steps: Promise.resolve(response.steps ?? []),
290
+ output: Promise.resolve(response.output),
291
+ toolCalls: Promise.resolve([]),
292
+ toolResults: Promise.resolve([]),
293
+ response: Promise.resolve({
294
+ id: "mock-response-id",
295
+ timestamp: new Date(),
296
+ modelId: "mock-model",
297
+ messages: [],
298
+ }),
299
+ warnings: Promise.resolve([]),
300
+ toUIMessageStreamResponse: () => new Response(response.text),
301
+ toTextStreamResponse: () => new Response(response.text),
302
+ };
303
+ },
304
+ // Configuration methods
305
+ setResponse(response) {
306
+ currentResponse = response;
307
+ },
308
+ setResponseHandler(handler) {
309
+ responseHandler = handler;
310
+ },
311
+ queueResponses(...responses) {
312
+ responseQueue.push(...responses);
313
+ },
314
+ clearQueue() {
315
+ responseQueue.length = 0;
316
+ },
317
+ resetHistory() {
318
+ generateCalls.length = 0;
319
+ streamCalls.length = 0;
320
+ },
321
+ getGenerateCallCount() {
322
+ return generateCalls.length;
323
+ },
324
+ getStreamCallCount() {
325
+ return streamCalls.length;
326
+ },
327
+ assertGenerateCalledWith(expected) {
328
+ const found = generateCalls.some((call) => {
329
+ for (const [key, value] of Object.entries(expected)) {
330
+ if (call[key] !== value) {
331
+ return false;
332
+ }
333
+ }
334
+ return true;
335
+ });
336
+ if (!found) {
337
+ const callsStr = generateCalls.map((c) => JSON.stringify(c)).join("\n");
338
+ throw new Error(`Expected generate to be called with ${JSON.stringify(expected)}, but calls were:\n${callsStr}`);
339
+ }
340
+ },
341
+ assertGenerateCallCount(count) {
342
+ if (generateCalls.length !== count) {
343
+ throw new Error(`Expected generate to be called ${count} times, but was called ${generateCalls.length} times`);
344
+ }
345
+ },
346
+ getActiveTools() {
347
+ return { ...(options.tools ?? {}) };
348
+ },
349
+ loadTools(_toolNames) {
350
+ // Mock agent doesn't support lazy loading
351
+ return { loaded: [], notFound: _toolNames };
352
+ },
353
+ setPermissionMode(_mode) {
354
+ // Mock agent permission mode setter (no-op in mock)
355
+ },
356
+ async getInterrupt(_threadId) {
357
+ // Mock agent always returns undefined (no pending interrupts)
358
+ return undefined;
359
+ },
360
+ async resume(threadId, _interruptId, _response, genOptions) {
361
+ // Mock implementation: just call generate with the threadId
362
+ return mockAgent.generate({
363
+ threadId,
364
+ ...genOptions,
365
+ });
366
+ },
367
+ // Mock agent is always ready immediately
368
+ ready: Promise.resolve(),
369
+ };
370
+ return mockAgent;
371
+ }
372
+ /**
373
+ * Creates a mock language model for testing.
374
+ *
375
+ * This is a lower-level utility for creating mock models that can be
376
+ * passed to createAgent() when you need more control over the model behavior.
377
+ *
378
+ * @param options - Configuration for the mock model
379
+ * @returns A mock LanguageModel instance
380
+ *
381
+ * @example
382
+ * ```typescript
383
+ * import { createMockModel } from "@lleverage-ai/agent-sdk/testing";
384
+ * import { createAgent } from "@lleverage-ai/agent-sdk";
385
+ *
386
+ * const model = createMockModel({ text: "Custom response" });
387
+ * const agent = createAgent({ model });
388
+ * ```
389
+ *
390
+ * @category Testing
391
+ */
392
+ export function createMockModel(options = {}) {
393
+ const text = options.text ?? "Mock response";
394
+ const finishReason = options.finishReason ?? "stop";
395
+ const usage = options.usage ?? {
396
+ inputTokens: 10,
397
+ outputTokens: 20,
398
+ totalTokens: 30,
399
+ inputTokenDetails: {
400
+ noCacheTokens: 10,
401
+ cacheReadTokens: 0,
402
+ cacheWriteTokens: 0,
403
+ },
404
+ outputTokenDetails: {
405
+ textTokens: 20,
406
+ reasoningTokens: 0,
407
+ },
408
+ };
409
+ return {
410
+ specificationVersion: "v3",
411
+ provider: options.provider ?? "mock",
412
+ modelId: options.modelId ?? "mock-model",
413
+ defaultObjectGenerationMode: "json",
414
+ doGenerate: async () => ({
415
+ text,
416
+ content: [{ type: "text", text }],
417
+ toolCalls: options.toolCalls ?? [],
418
+ finishReason,
419
+ usage,
420
+ request: { body: {} },
421
+ response: {
422
+ id: "mock-response-id",
423
+ timestamp: new Date(),
424
+ modelId: options.modelId ?? "mock-model",
425
+ headers: {},
426
+ },
427
+ warnings: [],
428
+ sources: [],
429
+ providerMetadata: undefined,
430
+ }),
431
+ doStream: async () => ({
432
+ stream: new ReadableStream({
433
+ start(controller) {
434
+ controller.enqueue({ type: "text-delta", text });
435
+ controller.enqueue({
436
+ type: "finish",
437
+ finishReason,
438
+ usage,
439
+ providerMetadata: undefined,
440
+ });
441
+ controller.close();
442
+ },
443
+ }),
444
+ rawCall: { rawPrompt: null, rawSettings: {} },
445
+ }),
446
+ };
447
+ }
448
+ //# sourceMappingURL=mock-agent.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mock-agent.js","sourceRoot":"","sources":["../../src/testing/mock-agent.ts"],"names":[],"mappings":"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"}