@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,630 @@
1
+ /**
2
+ * Assertion helpers for agent testing.
3
+ *
4
+ * Provides convenient assertion utilities for testing agent behavior,
5
+ * responses, tool calls, and state.
6
+ *
7
+ * @packageDocumentation
8
+ */
9
+ /**
10
+ * Ensure a GenerateResult is complete, throwing if it's interrupted.
11
+ * @internal
12
+ */
13
+ function ensureComplete(result) {
14
+ if (result.status === "interrupted") {
15
+ throw new AgentAssertionError("Cannot assert on interrupted result", "complete", "interrupted", { interruptType: result.interrupt.type });
16
+ }
17
+ return result;
18
+ }
19
+ // =============================================================================
20
+ // Assertion Error
21
+ // =============================================================================
22
+ /**
23
+ * Error thrown when an agent assertion fails.
24
+ *
25
+ * @category Testing
26
+ */
27
+ export class AgentAssertionError extends Error {
28
+ /** The expected value */
29
+ expected;
30
+ /** The actual value */
31
+ actual;
32
+ /** Additional context */
33
+ context;
34
+ constructor(message, expected, actual, context) {
35
+ super(message);
36
+ this.name = "AgentAssertionError";
37
+ this.expected = expected;
38
+ this.actual = actual;
39
+ this.context = context;
40
+ }
41
+ }
42
+ // =============================================================================
43
+ // Response Assertions
44
+ // =============================================================================
45
+ /**
46
+ * Assert that a response contains specific text.
47
+ *
48
+ * @param result - The generate result to check
49
+ * @param text - Text that should be present
50
+ * @throws AgentAssertionError if text is not found
51
+ *
52
+ * @example
53
+ * ```typescript
54
+ * const result = await agent.generate({ prompt: "Say hello" });
55
+ * assertResponseContains(result, "hello");
56
+ * ```
57
+ *
58
+ * @category Testing
59
+ */
60
+ export function assertResponseContains(result, text) {
61
+ const complete = ensureComplete(result);
62
+ if (!complete.text.toLowerCase().includes(text.toLowerCase())) {
63
+ throw new AgentAssertionError(`Expected response to contain "${text}"`, text, complete.text, {
64
+ fullText: complete.text,
65
+ });
66
+ }
67
+ }
68
+ /**
69
+ * Assert that a response matches a regular expression.
70
+ *
71
+ * @param result - The generate result to check
72
+ * @param pattern - Pattern to match against
73
+ * @throws AgentAssertionError if pattern doesn't match
74
+ *
75
+ * @example
76
+ * ```typescript
77
+ * assertResponseMatches(result, /hello.*world/i);
78
+ * ```
79
+ *
80
+ * @category Testing
81
+ */
82
+ export function assertResponseMatches(result, pattern) {
83
+ const complete = ensureComplete(result);
84
+ if (!pattern.test(complete.text)) {
85
+ throw new AgentAssertionError(`Expected response to match pattern ${pattern}`, pattern.toString(), complete.text, { fullText: complete.text });
86
+ }
87
+ }
88
+ /**
89
+ * Assert that a response has a specific finish reason.
90
+ *
91
+ * @param result - The generate result to check
92
+ * @param reason - Expected finish reason
93
+ * @throws AgentAssertionError if reason doesn't match
94
+ *
95
+ * @example
96
+ * ```typescript
97
+ * assertFinishReason(result, "stop");
98
+ * ```
99
+ *
100
+ * @category Testing
101
+ */
102
+ export function assertFinishReason(result, reason) {
103
+ const complete = ensureComplete(result);
104
+ if (complete.finishReason !== reason) {
105
+ throw new AgentAssertionError(`Expected finish reason "${reason}", got "${complete.finishReason}"`, reason, complete.finishReason);
106
+ }
107
+ }
108
+ /**
109
+ * Assert that a response has usage information.
110
+ *
111
+ * @param result - The generate result to check
112
+ * @throws AgentAssertionError if usage is missing
113
+ *
114
+ * @example
115
+ * ```typescript
116
+ * assertHasUsage(result);
117
+ * console.log(result.usage.inputTokens);
118
+ * ```
119
+ *
120
+ * @category Testing
121
+ */
122
+ export function assertHasUsage(result) {
123
+ const complete = ensureComplete(result);
124
+ if (!complete.usage) {
125
+ throw new AgentAssertionError("Expected response to have usage information", "usage object", undefined);
126
+ }
127
+ }
128
+ /**
129
+ * Assert that token usage is within expected bounds.
130
+ *
131
+ * @param result - The generate result to check
132
+ * @param options - Usage bounds
133
+ * @throws AgentAssertionError if usage is outside bounds
134
+ *
135
+ * @example
136
+ * ```typescript
137
+ * assertUsageWithin(result, {
138
+ * maxInputTokens: 1000,
139
+ * maxOutputTokens: 500,
140
+ * });
141
+ * ```
142
+ *
143
+ * @category Testing
144
+ */
145
+ export function assertUsageWithin(result, options) {
146
+ const complete = ensureComplete(result);
147
+ if (!complete.usage) {
148
+ throw new AgentAssertionError("Expected response to have usage information", "usage object", undefined);
149
+ }
150
+ const inputTokens = complete.usage.inputTokens ?? 0;
151
+ const outputTokens = complete.usage.outputTokens ?? 0;
152
+ if (options.minInputTokens !== undefined && inputTokens < options.minInputTokens) {
153
+ throw new AgentAssertionError(`Expected at least ${options.minInputTokens} input tokens, got ${inputTokens}`, options.minInputTokens, inputTokens);
154
+ }
155
+ if (options.maxInputTokens !== undefined && inputTokens > options.maxInputTokens) {
156
+ throw new AgentAssertionError(`Expected at most ${options.maxInputTokens} input tokens, got ${inputTokens}`, options.maxInputTokens, inputTokens);
157
+ }
158
+ if (options.minOutputTokens !== undefined && outputTokens < options.minOutputTokens) {
159
+ throw new AgentAssertionError(`Expected at least ${options.minOutputTokens} output tokens, got ${outputTokens}`, options.minOutputTokens, outputTokens);
160
+ }
161
+ if (options.maxOutputTokens !== undefined && outputTokens > options.maxOutputTokens) {
162
+ throw new AgentAssertionError(`Expected at most ${options.maxOutputTokens} output tokens, got ${outputTokens}`, options.maxOutputTokens, outputTokens);
163
+ }
164
+ }
165
+ /**
166
+ * Assert that structured output was generated.
167
+ *
168
+ * @param result - The generate result to check
169
+ * @throws AgentAssertionError if output is missing
170
+ *
171
+ * @example
172
+ * ```typescript
173
+ * assertHasOutput(result);
174
+ * const data = result.output as MySchema;
175
+ * ```
176
+ *
177
+ * @category Testing
178
+ */
179
+ export function assertHasOutput(result) {
180
+ const complete = ensureComplete(result);
181
+ if (complete.output === undefined) {
182
+ throw new AgentAssertionError("Expected response to have structured output", "output object", undefined);
183
+ }
184
+ }
185
+ // =============================================================================
186
+ // Tool Call Assertions
187
+ // =============================================================================
188
+ /**
189
+ * Assert that a specific tool was called.
190
+ *
191
+ * @param result - The generate result to check
192
+ * @param toolName - Name of the tool expected to be called
193
+ * @returns The matching tool call
194
+ * @throws AgentAssertionError if tool was not called
195
+ *
196
+ * @example
197
+ * ```typescript
198
+ * const toolCall = assertToolCalled(result, "weather");
199
+ * expect(toolCall.input.city).toBe("Tokyo");
200
+ * ```
201
+ *
202
+ * @category Testing
203
+ */
204
+ export function assertToolCalled(result, toolName) {
205
+ const complete = ensureComplete(result);
206
+ for (const step of complete.steps) {
207
+ for (const toolCall of step.toolCalls) {
208
+ if (toolCall.toolName === toolName) {
209
+ return toolCall;
210
+ }
211
+ }
212
+ }
213
+ const calledTools = complete.steps
214
+ .flatMap((s) => s.toolCalls)
215
+ .map((tc) => tc.toolName);
216
+ throw new AgentAssertionError(`Expected tool "${toolName}" to be called`, toolName, calledTools, {
217
+ calledTools,
218
+ });
219
+ }
220
+ /**
221
+ * Assert that a tool was called with specific input.
222
+ *
223
+ * @param result - The generate result to check
224
+ * @param toolName - Name of the tool
225
+ * @param expectedInput - Expected input (partial match)
226
+ * @returns The matching tool call
227
+ * @throws AgentAssertionError if tool was not called with expected input
228
+ *
229
+ * @example
230
+ * ```typescript
231
+ * assertToolCalledWith(result, "weather", { city: "Tokyo" });
232
+ * ```
233
+ *
234
+ * @category Testing
235
+ */
236
+ export function assertToolCalledWith(result, toolName, expectedInput) {
237
+ const complete = ensureComplete(result);
238
+ for (const step of complete.steps) {
239
+ for (const toolCall of step.toolCalls) {
240
+ if (toolCall.toolName === toolName) {
241
+ const input = toolCall.input;
242
+ let matches = true;
243
+ for (const [key, value] of Object.entries(expectedInput)) {
244
+ if (input[key] !== value) {
245
+ matches = false;
246
+ break;
247
+ }
248
+ }
249
+ if (matches) {
250
+ return toolCall;
251
+ }
252
+ }
253
+ }
254
+ }
255
+ const toolCalls = complete.steps
256
+ .flatMap((s) => s.toolCalls)
257
+ .filter((tc) => tc.toolName === toolName)
258
+ .map((tc) => tc.input);
259
+ throw new AgentAssertionError(`Expected tool "${toolName}" to be called with ${JSON.stringify(expectedInput)}`, expectedInput, toolCalls, { toolCalls });
260
+ }
261
+ /**
262
+ * Assert that a tool was NOT called.
263
+ *
264
+ * @param result - The generate result to check
265
+ * @param toolName - Name of the tool that should not be called
266
+ * @throws AgentAssertionError if tool was called
267
+ *
268
+ * @example
269
+ * ```typescript
270
+ * assertToolNotCalled(result, "dangerousTool");
271
+ * ```
272
+ *
273
+ * @category Testing
274
+ */
275
+ export function assertToolNotCalled(result, toolName) {
276
+ const complete = ensureComplete(result);
277
+ for (const step of complete.steps) {
278
+ for (const toolCall of step.toolCalls) {
279
+ if (toolCall.toolName === toolName) {
280
+ throw new AgentAssertionError(`Expected tool "${toolName}" to NOT be called`, "tool not called", toolCall, { toolCall });
281
+ }
282
+ }
283
+ }
284
+ }
285
+ /**
286
+ * Assert the number of times a tool was called.
287
+ *
288
+ * @param result - The generate result to check
289
+ * @param toolName - Name of the tool
290
+ * @param count - Expected call count
291
+ * @throws AgentAssertionError if count doesn't match
292
+ *
293
+ * @example
294
+ * ```typescript
295
+ * assertToolCallCount(result, "search", 3);
296
+ * ```
297
+ *
298
+ * @category Testing
299
+ */
300
+ export function assertToolCallCount(result, toolName, count) {
301
+ const complete = ensureComplete(result);
302
+ let actualCount = 0;
303
+ for (const step of complete.steps) {
304
+ for (const toolCall of step.toolCalls) {
305
+ if (toolCall.toolName === toolName) {
306
+ actualCount++;
307
+ }
308
+ }
309
+ }
310
+ if (actualCount !== count) {
311
+ throw new AgentAssertionError(`Expected tool "${toolName}" to be called ${count} times, got ${actualCount}`, count, actualCount);
312
+ }
313
+ }
314
+ /**
315
+ * Assert that steps were executed.
316
+ *
317
+ * @param result - The generate result to check
318
+ * @param minSteps - Minimum expected steps
319
+ * @param maxSteps - Maximum expected steps (optional)
320
+ * @throws AgentAssertionError if step count is outside bounds
321
+ *
322
+ * @example
323
+ * ```typescript
324
+ * assertStepCount(result, 1, 5);
325
+ * ```
326
+ *
327
+ * @category Testing
328
+ */
329
+ export function assertStepCount(result, minSteps, maxSteps) {
330
+ const complete = ensureComplete(result);
331
+ const stepCount = complete.steps.length;
332
+ if (stepCount < minSteps) {
333
+ throw new AgentAssertionError(`Expected at least ${minSteps} steps, got ${stepCount}`, minSteps, stepCount);
334
+ }
335
+ if (maxSteps !== undefined && stepCount > maxSteps) {
336
+ throw new AgentAssertionError(`Expected at most ${maxSteps} steps, got ${stepCount}`, maxSteps, stepCount);
337
+ }
338
+ }
339
+ // =============================================================================
340
+ // Stream Assertions
341
+ // =============================================================================
342
+ /**
343
+ * Collect all chunks from a stream into an array.
344
+ *
345
+ * @param stream - The stream to collect
346
+ * @returns Array of all stream parts
347
+ *
348
+ * @example
349
+ * ```typescript
350
+ * const chunks = await collectStreamChunks(agent.stream({ prompt: "Hi" }));
351
+ * assertStreamHasText(chunks);
352
+ * ```
353
+ *
354
+ * @category Testing
355
+ */
356
+ export async function collectStreamChunks(stream) {
357
+ const chunks = [];
358
+ for await (const chunk of stream) {
359
+ chunks.push(chunk);
360
+ }
361
+ return chunks;
362
+ }
363
+ /**
364
+ * Assert that a stream contains text chunks.
365
+ *
366
+ * @param chunks - Collected stream chunks
367
+ * @throws AgentAssertionError if no text chunks found
368
+ *
369
+ * @category Testing
370
+ */
371
+ export function assertStreamHasText(chunks) {
372
+ const hasText = chunks.some((c) => c.type === "text-delta");
373
+ if (!hasText) {
374
+ throw new AgentAssertionError("Expected stream to contain text chunks", "text-delta chunks", chunks.map((c) => c.type));
375
+ }
376
+ }
377
+ /**
378
+ * Assert that a stream has a finish chunk.
379
+ *
380
+ * @param chunks - Collected stream chunks
381
+ * @param reason - Optional expected finish reason
382
+ * @throws AgentAssertionError if no finish chunk or wrong reason
383
+ *
384
+ * @category Testing
385
+ */
386
+ export function assertStreamFinished(chunks, reason) {
387
+ const finishChunk = chunks.find((c) => c.type === "finish");
388
+ if (!finishChunk) {
389
+ throw new AgentAssertionError("Expected stream to have a finish chunk", "finish chunk", chunks.map((c) => c.type));
390
+ }
391
+ if (reason && finishChunk.type === "finish" && finishChunk.finishReason !== reason) {
392
+ throw new AgentAssertionError(`Expected finish reason "${reason}", got "${finishChunk.finishReason}"`, reason, finishChunk.finishReason);
393
+ }
394
+ }
395
+ /**
396
+ * Get the combined text from stream chunks.
397
+ *
398
+ * @param chunks - Collected stream chunks
399
+ * @returns Combined text
400
+ *
401
+ * @example
402
+ * ```typescript
403
+ * const chunks = await collectStreamChunks(stream);
404
+ * const text = getStreamText(chunks);
405
+ * expect(text).toContain("hello");
406
+ * ```
407
+ *
408
+ * @category Testing
409
+ */
410
+ export function getStreamText(chunks) {
411
+ return chunks
412
+ .filter((c) => c.type === "text-delta")
413
+ .map((c) => c.text)
414
+ .join("");
415
+ }
416
+ /**
417
+ * Assert that the combined stream text contains specific content.
418
+ *
419
+ * @param chunks - Collected stream chunks
420
+ * @param text - Text to look for
421
+ * @throws AgentAssertionError if text not found
422
+ *
423
+ * @category Testing
424
+ */
425
+ export function assertStreamTextContains(chunks, text) {
426
+ const fullText = getStreamText(chunks);
427
+ if (!fullText.toLowerCase().includes(text.toLowerCase())) {
428
+ throw new AgentAssertionError(`Expected stream text to contain "${text}"`, text, fullText);
429
+ }
430
+ }
431
+ // =============================================================================
432
+ // Agent State Assertions
433
+ // =============================================================================
434
+ /**
435
+ * Assert that agent state contains a file.
436
+ *
437
+ * @param state - The agent state to check
438
+ * @param path - File path
439
+ * @throws AgentAssertionError if file doesn't exist
440
+ *
441
+ * @example
442
+ * ```typescript
443
+ * assertStateHasFile(agent.state, "/src/index.ts");
444
+ * ```
445
+ *
446
+ * @category Testing
447
+ */
448
+ export function assertStateHasFile(state, path) {
449
+ if (!state.files[path]) {
450
+ throw new AgentAssertionError(`Expected state to have file "${path}"`, path, Object.keys(state.files));
451
+ }
452
+ }
453
+ /**
454
+ * Assert that agent state has a todo item.
455
+ *
456
+ * @param state - The agent state to check
457
+ * @param matcher - Todo content or partial match
458
+ * @returns The matching todo
459
+ * @throws AgentAssertionError if todo not found
460
+ *
461
+ * @example
462
+ * ```typescript
463
+ * const todo = assertStateHasTodo(agent.state, { content: "Fix bug" });
464
+ * expect(todo.status).toBe("completed");
465
+ * ```
466
+ *
467
+ * @category Testing
468
+ */
469
+ export function assertStateHasTodo(state, matcher) {
470
+ const predicate = typeof matcher === "string"
471
+ ? (t) => t.content.includes(matcher)
472
+ : (t) => {
473
+ for (const [key, value] of Object.entries(matcher)) {
474
+ if (t[key] !== value) {
475
+ return false;
476
+ }
477
+ }
478
+ return true;
479
+ };
480
+ const found = state.todos.find(predicate);
481
+ if (!found) {
482
+ throw new AgentAssertionError(`Expected state to have matching todo`, matcher, state.todos);
483
+ }
484
+ return found;
485
+ }
486
+ /**
487
+ * Assert the number of todos in a state.
488
+ *
489
+ * @param state - The agent state to check
490
+ * @param count - Expected todo count
491
+ * @param status - Optional filter by status
492
+ * @throws AgentAssertionError if count doesn't match
493
+ *
494
+ * @example
495
+ * ```typescript
496
+ * assertTodoCount(agent.state, 3);
497
+ * assertTodoCount(agent.state, 1, "completed");
498
+ * ```
499
+ *
500
+ * @category Testing
501
+ */
502
+ export function assertTodoCount(state, count, status) {
503
+ const todos = status ? state.todos.filter((t) => t.status === status) : state.todos;
504
+ if (todos.length !== count) {
505
+ throw new AgentAssertionError(`Expected ${count} todos${status ? ` with status "${status}"` : ""}, got ${todos.length}`, count, todos.length, { todos });
506
+ }
507
+ }
508
+ // =============================================================================
509
+ // Mock Agent Assertions
510
+ // =============================================================================
511
+ /**
512
+ * Assert that a mock agent was called.
513
+ *
514
+ * @param agent - The mock agent
515
+ * @param method - Method to check ("generate" or "stream")
516
+ * @throws AgentAssertionError if not called
517
+ *
518
+ * @category Testing
519
+ */
520
+ export function assertMockAgentCalled(agent, method = "generate") {
521
+ const calls = method === "generate" ? agent.generateCalls : agent.streamCalls;
522
+ if (calls.length === 0) {
523
+ throw new AgentAssertionError(`Expected mock agent ${method}() to be called`, "at least 1 call", 0);
524
+ }
525
+ }
526
+ /**
527
+ * Assert that a mock agent was called a specific number of times.
528
+ *
529
+ * @param agent - The mock agent
530
+ * @param count - Expected call count
531
+ * @param method - Method to check ("generate" or "stream")
532
+ * @throws AgentAssertionError if count doesn't match
533
+ *
534
+ * @category Testing
535
+ */
536
+ export function assertMockAgentCallCount(agent, count, method = "generate") {
537
+ const calls = method === "generate" ? agent.generateCalls : agent.streamCalls;
538
+ if (calls.length !== count) {
539
+ throw new AgentAssertionError(`Expected mock agent ${method}() to be called ${count} times`, count, calls.length);
540
+ }
541
+ }
542
+ /**
543
+ * Assert that a mock agent was called with specific options.
544
+ *
545
+ * @param agent - The mock agent
546
+ * @param options - Expected options (partial match)
547
+ * @param method - Method to check
548
+ * @throws AgentAssertionError if not called with options
549
+ *
550
+ * @category Testing
551
+ */
552
+ export function assertMockAgentCalledWith(agent, options, method = "generate") {
553
+ const calls = method === "generate" ? agent.generateCalls : agent.streamCalls;
554
+ const found = calls.some((call) => {
555
+ for (const [key, value] of Object.entries(options)) {
556
+ if (call[key] !== value) {
557
+ return false;
558
+ }
559
+ }
560
+ return true;
561
+ });
562
+ if (!found) {
563
+ throw new AgentAssertionError(`Expected mock agent ${method}() to be called with matching options`, options, calls);
564
+ }
565
+ }
566
+ /**
567
+ * Assert multiple agent behavior expectations at once.
568
+ *
569
+ * This is a convenience function that combines multiple assertions.
570
+ *
571
+ * @param result - The generate result to check
572
+ * @param options - Behavior expectations
573
+ * @throws AgentAssertionError if any expectation fails
574
+ *
575
+ * @example
576
+ * ```typescript
577
+ * assertAgentBehavior(result, {
578
+ * responseContains: ["hello", "world"],
579
+ * finishReason: "stop",
580
+ * toolsCalled: ["search"],
581
+ * toolsNotCalled: ["delete"],
582
+ * minSteps: 1,
583
+ * hasUsage: true,
584
+ * });
585
+ * ```
586
+ *
587
+ * @category Testing
588
+ */
589
+ export function assertAgentBehavior(result, options) {
590
+ // Response text assertions
591
+ if (options.responseContains) {
592
+ const texts = Array.isArray(options.responseContains)
593
+ ? options.responseContains
594
+ : [options.responseContains];
595
+ for (const text of texts) {
596
+ assertResponseContains(result, text);
597
+ }
598
+ }
599
+ if (options.responseMatches) {
600
+ assertResponseMatches(result, options.responseMatches);
601
+ }
602
+ // Finish reason
603
+ if (options.finishReason) {
604
+ assertFinishReason(result, options.finishReason);
605
+ }
606
+ // Tool assertions
607
+ if (options.toolsCalled) {
608
+ for (const tool of options.toolsCalled) {
609
+ assertToolCalled(result, tool);
610
+ }
611
+ }
612
+ if (options.toolsNotCalled) {
613
+ for (const tool of options.toolsNotCalled) {
614
+ assertToolNotCalled(result, tool);
615
+ }
616
+ }
617
+ // Step count
618
+ if (options.minSteps !== undefined || options.maxSteps !== undefined) {
619
+ assertStepCount(result, options.minSteps ?? 0, options.maxSteps);
620
+ }
621
+ // Output
622
+ if (options.hasOutput) {
623
+ assertHasOutput(result);
624
+ }
625
+ // Usage
626
+ if (options.hasUsage) {
627
+ assertHasUsage(result);
628
+ }
629
+ }
630
+ //# sourceMappingURL=assertions.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"assertions.js","sourceRoot":"","sources":["../../src/testing/assertions.ts"],"names":[],"mappings":"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"}