@strands-agents/sdk 0.3.0 → 0.5.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 (302) hide show
  1. package/README.md +43 -0
  2. package/dist/src/__fixtures__/agent-helpers.d.ts +10 -1
  3. package/dist/src/__fixtures__/agent-helpers.d.ts.map +1 -1
  4. package/dist/src/__fixtures__/agent-helpers.js +13 -2
  5. package/dist/src/__fixtures__/agent-helpers.js.map +1 -1
  6. package/dist/src/__fixtures__/mock-hook-provider.d.ts +3 -7
  7. package/dist/src/__fixtures__/mock-hook-provider.d.ts.map +1 -1
  8. package/dist/src/__fixtures__/mock-hook-provider.js +3 -9
  9. package/dist/src/__fixtures__/mock-hook-provider.js.map +1 -1
  10. package/dist/src/__fixtures__/mock-message-model.d.ts +8 -2
  11. package/dist/src/__fixtures__/mock-message-model.d.ts.map +1 -1
  12. package/dist/src/__fixtures__/mock-message-model.js +1 -0
  13. package/dist/src/__fixtures__/mock-message-model.js.map +1 -1
  14. package/dist/src/__fixtures__/mock-span.d.ts +78 -0
  15. package/dist/src/__fixtures__/mock-span.d.ts.map +1 -0
  16. package/dist/src/__fixtures__/mock-span.js +93 -0
  17. package/dist/src/__fixtures__/mock-span.js.map +1 -0
  18. package/dist/src/__fixtures__/mock-storage-provider.d.ts +37 -0
  19. package/dist/src/__fixtures__/mock-storage-provider.d.ts.map +1 -0
  20. package/dist/src/__fixtures__/mock-storage-provider.js +105 -0
  21. package/dist/src/__fixtures__/mock-storage-provider.js.map +1 -0
  22. package/dist/src/__fixtures__/slim-types.d.ts +50 -0
  23. package/dist/src/__fixtures__/slim-types.d.ts.map +1 -0
  24. package/dist/src/__fixtures__/slim-types.js +6 -0
  25. package/dist/src/__fixtures__/slim-types.js.map +1 -0
  26. package/dist/src/__fixtures__/tool-helpers.d.ts +10 -5
  27. package/dist/src/__fixtures__/tool-helpers.d.ts.map +1 -1
  28. package/dist/src/__fixtures__/tool-helpers.js +5 -5
  29. package/dist/src/__fixtures__/tool-helpers.js.map +1 -1
  30. package/dist/src/__tests__/app-state.test.d.ts +2 -0
  31. package/dist/src/__tests__/app-state.test.d.ts.map +1 -0
  32. package/dist/src/{agent/__tests__/state.test.js → __tests__/app-state.test.js} +62 -43
  33. package/dist/src/__tests__/app-state.test.js.map +1 -0
  34. package/dist/src/__tests__/mcp.test.js +96 -15
  35. package/dist/src/__tests__/mcp.test.js.map +1 -1
  36. package/dist/src/agent/__tests__/agent.hook.test.js +18 -18
  37. package/dist/src/agent/__tests__/agent.hook.test.js.map +1 -1
  38. package/dist/src/agent/__tests__/agent.test.js +234 -8
  39. package/dist/src/agent/__tests__/agent.test.js.map +1 -1
  40. package/dist/src/agent/__tests__/agent.tracer.test.d.ts +2 -0
  41. package/dist/src/agent/__tests__/agent.tracer.test.d.ts.map +1 -0
  42. package/dist/src/agent/__tests__/agent.tracer.test.js +470 -0
  43. package/dist/src/agent/__tests__/agent.tracer.test.js.map +1 -0
  44. package/dist/src/agent/__tests__/printer.test.js +5 -9
  45. package/dist/src/agent/__tests__/printer.test.js.map +1 -1
  46. package/dist/src/agent/__tests__/snapshot.test.d.ts +2 -0
  47. package/dist/src/agent/__tests__/snapshot.test.d.ts.map +1 -0
  48. package/dist/src/agent/__tests__/snapshot.test.js +249 -0
  49. package/dist/src/agent/__tests__/snapshot.test.js.map +1 -0
  50. package/dist/src/agent/agent.d.ts +78 -10
  51. package/dist/src/agent/agent.d.ts.map +1 -1
  52. package/dist/src/agent/agent.js +252 -55
  53. package/dist/src/agent/agent.js.map +1 -1
  54. package/dist/src/agent/printer.d.ts +4 -0
  55. package/dist/src/agent/printer.d.ts.map +1 -1
  56. package/dist/src/agent/printer.js +18 -6
  57. package/dist/src/agent/printer.js.map +1 -1
  58. package/dist/src/agent/snapshot.d.ts +132 -0
  59. package/dist/src/agent/snapshot.d.ts.map +1 -0
  60. package/dist/src/agent/snapshot.js +151 -0
  61. package/dist/src/agent/snapshot.js.map +1 -0
  62. package/dist/src/{agent/state.d.ts → app-state.d.ts} +19 -6
  63. package/dist/src/app-state.d.ts.map +1 -0
  64. package/dist/src/{agent/state.js → app-state.js} +27 -6
  65. package/dist/src/app-state.js.map +1 -0
  66. package/dist/src/conversation-manager/sliding-window-conversation-manager.d.ts +1 -1
  67. package/dist/src/conversation-manager/sliding-window-conversation-manager.js +1 -1
  68. package/dist/src/errors.d.ts +15 -0
  69. package/dist/src/errors.d.ts.map +1 -1
  70. package/dist/src/errors.js +18 -0
  71. package/dist/src/errors.js.map +1 -1
  72. package/dist/src/hooks/__tests__/events.test.js +102 -21
  73. package/dist/src/hooks/__tests__/events.test.js.map +1 -1
  74. package/dist/src/hooks/events.d.ts +156 -22
  75. package/dist/src/hooks/events.d.ts.map +1 -1
  76. package/dist/src/hooks/events.js +158 -18
  77. package/dist/src/hooks/events.js.map +1 -1
  78. package/dist/src/hooks/index.d.ts +12 -4
  79. package/dist/src/hooks/index.d.ts.map +1 -1
  80. package/dist/src/hooks/index.js +11 -3
  81. package/dist/src/hooks/index.js.map +1 -1
  82. package/dist/src/hooks/registry.d.ts +5 -5
  83. package/dist/src/hooks/registry.d.ts.map +1 -1
  84. package/dist/src/hooks/registry.js.map +1 -1
  85. package/dist/src/hooks/types.d.ts +5 -5
  86. package/dist/src/hooks/types.d.ts.map +1 -1
  87. package/dist/src/index.d.ts +6 -3
  88. package/dist/src/index.d.ts.map +1 -1
  89. package/dist/src/index.js +8 -3
  90. package/dist/src/index.js.map +1 -1
  91. package/dist/src/mcp.d.ts +3 -0
  92. package/dist/src/mcp.d.ts.map +1 -1
  93. package/dist/src/mcp.js +38 -1
  94. package/dist/src/mcp.js.map +1 -1
  95. package/dist/src/models/__tests__/anthropic.test.js +31 -42
  96. package/dist/src/models/__tests__/anthropic.test.js.map +1 -1
  97. package/dist/src/models/__tests__/bedrock.test.js +70 -107
  98. package/dist/src/models/__tests__/bedrock.test.js.map +1 -1
  99. package/dist/src/models/__tests__/gemini.test.js +18 -18
  100. package/dist/src/models/__tests__/gemini.test.js.map +1 -1
  101. package/dist/src/models/__tests__/model.test.js +21 -13
  102. package/dist/src/models/__tests__/model.test.js.map +1 -1
  103. package/dist/src/models/__tests__/openai.test.js +73 -83
  104. package/dist/src/models/__tests__/openai.test.js.map +1 -1
  105. package/dist/src/models/model.d.ts +4 -0
  106. package/dist/src/models/model.d.ts.map +1 -1
  107. package/dist/src/models/model.js +6 -0
  108. package/dist/src/models/model.js.map +1 -1
  109. package/dist/src/models/streaming.d.ts +9 -1
  110. package/dist/src/models/streaming.d.ts.map +1 -1
  111. package/dist/src/models/streaming.js +17 -0
  112. package/dist/src/models/streaming.js.map +1 -1
  113. package/dist/src/multiagent/__tests__/events.test.d.ts +2 -0
  114. package/dist/src/multiagent/__tests__/events.test.d.ts.map +1 -0
  115. package/dist/src/multiagent/__tests__/events.test.js +189 -0
  116. package/dist/src/multiagent/__tests__/events.test.js.map +1 -0
  117. package/dist/src/multiagent/__tests__/nodes.test.d.ts +2 -0
  118. package/dist/src/multiagent/__tests__/nodes.test.d.ts.map +1 -0
  119. package/dist/src/multiagent/__tests__/nodes.test.js +194 -0
  120. package/dist/src/multiagent/__tests__/nodes.test.js.map +1 -0
  121. package/dist/src/multiagent/__tests__/queue.test.d.ts +2 -0
  122. package/dist/src/multiagent/__tests__/queue.test.d.ts.map +1 -0
  123. package/dist/src/multiagent/__tests__/queue.test.js +96 -0
  124. package/dist/src/multiagent/__tests__/queue.test.js.map +1 -0
  125. package/dist/src/multiagent/base.d.ts +25 -0
  126. package/dist/src/multiagent/base.d.ts.map +1 -0
  127. package/dist/src/multiagent/base.js +2 -0
  128. package/dist/src/multiagent/base.js.map +1 -0
  129. package/dist/src/multiagent/edge.d.ts +29 -0
  130. package/dist/src/multiagent/edge.d.ts.map +1 -0
  131. package/dist/src/multiagent/edge.js +15 -0
  132. package/dist/src/multiagent/edge.js.map +1 -0
  133. package/dist/src/multiagent/events.d.ts +135 -0
  134. package/dist/src/multiagent/events.d.ts.map +1 -0
  135. package/dist/src/multiagent/events.js +140 -0
  136. package/dist/src/multiagent/events.js.map +1 -0
  137. package/dist/src/multiagent/index.d.ts +13 -0
  138. package/dist/src/multiagent/index.d.ts.map +1 -0
  139. package/dist/src/multiagent/index.js +8 -0
  140. package/dist/src/multiagent/index.js.map +1 -0
  141. package/dist/src/multiagent/nodes.d.ts +123 -0
  142. package/dist/src/multiagent/nodes.d.ts.map +1 -0
  143. package/dist/src/multiagent/nodes.js +148 -0
  144. package/dist/src/multiagent/nodes.js.map +1 -0
  145. package/dist/src/multiagent/queue.d.ts +67 -0
  146. package/dist/src/multiagent/queue.d.ts.map +1 -0
  147. package/dist/src/multiagent/queue.js +59 -0
  148. package/dist/src/multiagent/queue.js.map +1 -0
  149. package/dist/src/multiagent/state.d.ts +122 -0
  150. package/dist/src/multiagent/state.d.ts.map +1 -0
  151. package/dist/src/multiagent/state.js +132 -0
  152. package/dist/src/multiagent/state.js.map +1 -0
  153. package/dist/src/registry/tool-registry.d.ts +2 -1
  154. package/dist/src/registry/tool-registry.d.ts.map +1 -1
  155. package/dist/src/registry/tool-registry.js +4 -2
  156. package/dist/src/registry/tool-registry.js.map +1 -1
  157. package/dist/src/session/__tests__/file-storage.test.node.d.ts +2 -0
  158. package/dist/src/session/__tests__/file-storage.test.node.d.ts.map +1 -0
  159. package/dist/src/session/__tests__/file-storage.test.node.js +218 -0
  160. package/dist/src/session/__tests__/file-storage.test.node.js.map +1 -0
  161. package/dist/src/session/__tests__/s3-storage.test.node.d.ts +2 -0
  162. package/dist/src/session/__tests__/s3-storage.test.node.d.ts.map +1 -0
  163. package/dist/src/session/__tests__/s3-storage.test.node.js +375 -0
  164. package/dist/src/session/__tests__/s3-storage.test.node.js.map +1 -0
  165. package/dist/src/session/__tests__/validation.test.d.ts +2 -0
  166. package/dist/src/session/__tests__/validation.test.d.ts.map +1 -0
  167. package/dist/src/session/__tests__/validation.test.js +20 -0
  168. package/dist/src/session/__tests__/validation.test.js.map +1 -0
  169. package/dist/src/session/file-storage.d.ts +79 -0
  170. package/dist/src/session/file-storage.d.ts.map +1 -0
  171. package/dist/src/session/file-storage.js +144 -0
  172. package/dist/src/session/file-storage.js.map +1 -0
  173. package/dist/src/session/index.d.ts +19 -0
  174. package/dist/src/session/index.d.ts.map +1 -0
  175. package/dist/src/session/index.js +18 -0
  176. package/dist/src/session/index.js.map +1 -0
  177. package/dist/src/session/s3-storage.d.ts +93 -0
  178. package/dist/src/session/s3-storage.d.ts.map +1 -0
  179. package/dist/src/session/s3-storage.js +150 -0
  180. package/dist/src/session/s3-storage.js.map +1 -0
  181. package/dist/src/session/storage.d.ts +91 -0
  182. package/dist/src/session/storage.d.ts.map +1 -0
  183. package/dist/src/session/storage.js +2 -0
  184. package/dist/src/session/storage.js.map +1 -0
  185. package/dist/src/session/types.d.ts +49 -0
  186. package/dist/src/session/types.d.ts.map +1 -0
  187. package/dist/src/session/types.js +2 -0
  188. package/dist/src/session/types.js.map +1 -0
  189. package/dist/src/session/validation.d.ts +10 -0
  190. package/dist/src/session/validation.d.ts.map +1 -0
  191. package/dist/src/session/validation.js +16 -0
  192. package/dist/src/session/validation.js.map +1 -0
  193. package/dist/src/structured-output/__tests__/context.test.d.ts +2 -0
  194. package/dist/src/structured-output/__tests__/context.test.d.ts.map +1 -0
  195. package/dist/src/structured-output/__tests__/context.test.js +201 -0
  196. package/dist/src/structured-output/__tests__/context.test.js.map +1 -0
  197. package/dist/src/structured-output/__tests__/exceptions.test.d.ts +2 -0
  198. package/dist/src/structured-output/__tests__/exceptions.test.d.ts.map +1 -0
  199. package/dist/src/structured-output/__tests__/exceptions.test.js +103 -0
  200. package/dist/src/structured-output/__tests__/exceptions.test.js.map +1 -0
  201. package/dist/src/structured-output/__tests__/tool.test.d.ts +2 -0
  202. package/dist/src/structured-output/__tests__/tool.test.d.ts.map +1 -0
  203. package/dist/src/structured-output/__tests__/tool.test.js +256 -0
  204. package/dist/src/structured-output/__tests__/tool.test.js.map +1 -0
  205. package/dist/src/structured-output/__tests__/utils.test.d.ts +2 -0
  206. package/dist/src/structured-output/__tests__/utils.test.d.ts.map +1 -0
  207. package/dist/src/structured-output/__tests__/utils.test.js +183 -0
  208. package/dist/src/structured-output/__tests__/utils.test.js.map +1 -0
  209. package/dist/src/structured-output/context.d.ts +91 -0
  210. package/dist/src/structured-output/context.d.ts.map +1 -0
  211. package/dist/src/structured-output/context.js +112 -0
  212. package/dist/src/structured-output/context.js.map +1 -0
  213. package/dist/src/structured-output/exceptions.d.ts +18 -0
  214. package/dist/src/structured-output/exceptions.d.ts.map +1 -0
  215. package/dist/src/structured-output/exceptions.js +28 -0
  216. package/dist/src/structured-output/exceptions.js.map +1 -0
  217. package/dist/src/structured-output/tool.d.ts +33 -0
  218. package/dist/src/structured-output/tool.d.ts.map +1 -0
  219. package/dist/src/structured-output/tool.js +73 -0
  220. package/dist/src/structured-output/tool.js.map +1 -0
  221. package/dist/src/structured-output/utils.d.ts +23 -0
  222. package/dist/src/structured-output/utils.d.ts.map +1 -0
  223. package/dist/src/structured-output/utils.js +104 -0
  224. package/dist/src/structured-output/utils.js.map +1 -0
  225. package/dist/src/telemetry/__tests__/config.test.node.d.ts +2 -0
  226. package/dist/src/telemetry/__tests__/config.test.node.d.ts.map +1 -0
  227. package/dist/src/telemetry/__tests__/config.test.node.js +129 -0
  228. package/dist/src/telemetry/__tests__/config.test.node.js.map +1 -0
  229. package/dist/src/telemetry/__tests__/json.test.d.ts +2 -0
  230. package/dist/src/telemetry/__tests__/json.test.d.ts.map +1 -0
  231. package/dist/src/telemetry/__tests__/json.test.js +89 -0
  232. package/dist/src/telemetry/__tests__/json.test.js.map +1 -0
  233. package/dist/src/telemetry/__tests__/tracer.test.node.d.ts +2 -0
  234. package/dist/src/telemetry/__tests__/tracer.test.node.d.ts.map +1 -0
  235. package/dist/src/telemetry/__tests__/tracer.test.node.js +611 -0
  236. package/dist/src/telemetry/__tests__/tracer.test.node.js.map +1 -0
  237. package/dist/src/telemetry/config.d.ts +61 -0
  238. package/dist/src/telemetry/config.d.ts.map +1 -0
  239. package/dist/src/telemetry/config.js +101 -0
  240. package/dist/src/telemetry/config.js.map +1 -0
  241. package/dist/src/telemetry/index.d.ts +34 -0
  242. package/dist/src/telemetry/index.d.ts.map +1 -0
  243. package/dist/src/telemetry/index.js +33 -0
  244. package/dist/src/telemetry/index.js.map +1 -0
  245. package/dist/src/telemetry/json.d.ts +11 -0
  246. package/dist/src/telemetry/json.d.ts.map +1 -0
  247. package/dist/src/telemetry/json.js +25 -0
  248. package/dist/src/telemetry/json.js.map +1 -0
  249. package/dist/src/telemetry/tracer.d.ts +219 -0
  250. package/dist/src/telemetry/tracer.d.ts.map +1 -0
  251. package/dist/src/telemetry/tracer.js +610 -0
  252. package/dist/src/telemetry/tracer.js.map +1 -0
  253. package/dist/src/telemetry/types.d.ts +101 -0
  254. package/dist/src/telemetry/types.d.ts.map +1 -0
  255. package/dist/src/telemetry/types.js +5 -0
  256. package/dist/src/telemetry/types.js.map +1 -0
  257. package/dist/src/tools/tool.d.ts +1 -1
  258. package/dist/src/tools/tool.js +1 -1
  259. package/dist/src/tools/zod-tool.d.ts.map +1 -1
  260. package/dist/src/tools/zod-tool.js +2 -5
  261. package/dist/src/tools/zod-tool.js.map +1 -1
  262. package/dist/src/tsconfig.tsbuildinfo +1 -1
  263. package/dist/src/types/__tests__/media.test.js +216 -1
  264. package/dist/src/types/__tests__/media.test.js.map +1 -1
  265. package/dist/src/types/__tests__/messages.test.js +193 -4
  266. package/dist/src/types/__tests__/messages.test.js.map +1 -1
  267. package/dist/src/types/agent.d.ts +16 -10
  268. package/dist/src/types/agent.d.ts.map +1 -1
  269. package/dist/src/types/agent.js +8 -1
  270. package/dist/src/types/agent.js.map +1 -1
  271. package/dist/src/types/json.d.ts +61 -0
  272. package/dist/src/types/json.d.ts.map +1 -1
  273. package/dist/src/types/json.js +24 -0
  274. package/dist/src/types/json.js.map +1 -1
  275. package/dist/src/types/media.d.ts +84 -4
  276. package/dist/src/types/media.d.ts.map +1 -1
  277. package/dist/src/types/media.js +194 -0
  278. package/dist/src/types/media.js.map +1 -1
  279. package/dist/src/types/messages.d.ts +152 -13
  280. package/dist/src/types/messages.d.ts.map +1 -1
  281. package/dist/src/types/messages.js +235 -8
  282. package/dist/src/types/messages.js.map +1 -1
  283. package/dist/src/types/serializable.d.ts +31 -0
  284. package/dist/src/types/serializable.d.ts.map +1 -0
  285. package/dist/src/types/serializable.js +19 -0
  286. package/dist/src/types/serializable.js.map +1 -0
  287. package/dist/src/utils/zod.d.ts +11 -0
  288. package/dist/src/utils/zod.d.ts.map +1 -0
  289. package/dist/src/utils/zod.js +14 -0
  290. package/dist/src/utils/zod.js.map +1 -0
  291. package/dist/src/vended-tools/bash/__tests__/bash.test.node.js +2 -2
  292. package/dist/src/vended-tools/bash/__tests__/bash.test.node.js.map +1 -1
  293. package/dist/src/vended-tools/file_editor/__tests__/file-editor.test.node.js +4 -4
  294. package/dist/src/vended-tools/file_editor/__tests__/file-editor.test.node.js.map +1 -1
  295. package/dist/src/vended-tools/notebook/__tests__/notebook.test.js +2 -2
  296. package/dist/src/vended-tools/notebook/__tests__/notebook.test.js.map +1 -1
  297. package/package.json +17 -3
  298. package/dist/src/agent/__tests__/state.test.d.ts +0 -2
  299. package/dist/src/agent/__tests__/state.test.d.ts.map +0 -1
  300. package/dist/src/agent/__tests__/state.test.js.map +0 -1
  301. package/dist/src/agent/state.d.ts.map +0 -1
  302. package/dist/src/agent/state.js.map +0 -1
@@ -0,0 +1,249 @@
1
+ import { describe, it, expect, beforeEach, afterEach, vi } from 'vitest';
2
+ import { Agent } from '../agent.js';
3
+ import { SNAPSHOT_SCHEMA_VERSION, ALL_SNAPSHOT_FIELDS, SNAPSHOT_PRESETS, createTimestamp, resolveSnapshotFields, takeSnapshot, loadSnapshot, } from '../snapshot.js';
4
+ import { Message, TextBlock, ToolUseBlock, ToolResultBlock } from '../../types/messages.js';
5
+ import { TestModelProvider } from '../../__fixtures__/model-test-helpers.js';
6
+ // Fixed timestamp for testing
7
+ const MOCK_TIMESTAMP = '2026-01-15T12:00:00.000Z';
8
+ /**
9
+ * Helper to create a test agent with a mock model
10
+ */
11
+ function createTestAgent() {
12
+ return new Agent({
13
+ model: new TestModelProvider(),
14
+ tools: [],
15
+ });
16
+ }
17
+ describe('Snapshot API', () => {
18
+ beforeEach(() => {
19
+ vi.useFakeTimers();
20
+ vi.setSystemTime(new Date(MOCK_TIMESTAMP));
21
+ });
22
+ afterEach(() => {
23
+ vi.useRealTimers();
24
+ });
25
+ describe('constants', () => {
26
+ it('exports snapshot constants with correct values', () => {
27
+ expect(SNAPSHOT_SCHEMA_VERSION).toBe('1.0');
28
+ expect(ALL_SNAPSHOT_FIELDS).toEqual(['messages', 'state', 'systemPrompt']);
29
+ expect(SNAPSHOT_PRESETS).toEqual({
30
+ session: ['messages', 'state', 'systemPrompt'],
31
+ });
32
+ });
33
+ });
34
+ describe('createTimestamp', () => {
35
+ it('returns ISO 8601 formatted timestamp', () => {
36
+ expect(createTimestamp()).toBe(MOCK_TIMESTAMP);
37
+ });
38
+ });
39
+ describe('resolveSnapshotFields', () => {
40
+ it('throws error when no fields would be included', () => {
41
+ expect(() => resolveSnapshotFields({})).toThrow('No fields to include in snapshot');
42
+ });
43
+ it('returns session preset fields when preset is "session"', () => {
44
+ const fields = resolveSnapshotFields({ preset: 'session' });
45
+ expect(fields).toEqual(new Set(['messages', 'state', 'systemPrompt']));
46
+ });
47
+ it('returns explicit fields when include is specified', () => {
48
+ const fields = resolveSnapshotFields({ include: ['messages', 'state'] });
49
+ expect(fields).toEqual(new Set(['messages', 'state']));
50
+ });
51
+ it('applies exclude after preset', () => {
52
+ const fields = resolveSnapshotFields({ preset: 'session', exclude: ['state'] });
53
+ expect(fields).toEqual(new Set(['messages', 'systemPrompt']));
54
+ });
55
+ it('throws error for invalid preset', () => {
56
+ expect(() => resolveSnapshotFields({ preset: 'invalid' })).toThrow('Invalid preset: invalid');
57
+ });
58
+ it('throws error for invalid field names', () => {
59
+ expect(() => resolveSnapshotFields({ include: ['invalidField'] })).toThrow('Invalid snapshot field: invalidField');
60
+ });
61
+ });
62
+ describe('takeSnapshot', () => {
63
+ let agent;
64
+ beforeEach(() => {
65
+ agent = createTestAgent();
66
+ });
67
+ it('creates snapshot with session preset', () => {
68
+ agent.messages.push(new Message({ role: 'user', content: [new TextBlock('Hello')] }));
69
+ agent.state.set('key', 'value');
70
+ agent.systemPrompt = 'Test prompt';
71
+ const snapshot = takeSnapshot(agent, { preset: 'session' });
72
+ expect(snapshot).toEqual({
73
+ scope: 'agent',
74
+ schemaVersion: SNAPSHOT_SCHEMA_VERSION,
75
+ createdAt: MOCK_TIMESTAMP,
76
+ data: {
77
+ messages: [{ role: 'user', content: [{ text: 'Hello' }] }],
78
+ state: { key: 'value' },
79
+ systemPrompt: 'Test prompt',
80
+ },
81
+ appData: {},
82
+ });
83
+ });
84
+ it('includes appData in snapshot', () => {
85
+ const snapshot = takeSnapshot(agent, {
86
+ preset: 'session',
87
+ appData: { customKey: 'customValue' },
88
+ });
89
+ expect(snapshot.appData).toEqual({ customKey: 'customValue' });
90
+ });
91
+ it('excludes specified fields', () => {
92
+ agent.messages.push(new Message({ role: 'user', content: [new TextBlock('Hello')] }));
93
+ agent.state.set('key', 'value');
94
+ const snapshot = takeSnapshot(agent, { preset: 'session', exclude: ['messages'] });
95
+ expect(snapshot.data.messages).toBeUndefined();
96
+ expect(snapshot.data.state).toBeDefined();
97
+ });
98
+ });
99
+ describe('loadSnapshot', () => {
100
+ let agent;
101
+ beforeEach(() => {
102
+ agent = createTestAgent();
103
+ });
104
+ it('throws error for incompatible schema version', () => {
105
+ const snapshot = {
106
+ scope: 'agent',
107
+ schemaVersion: '2.0',
108
+ createdAt: createTimestamp(),
109
+ data: {},
110
+ appData: {},
111
+ };
112
+ expect(() => loadSnapshot(agent, snapshot)).toThrow('Unsupported snapshot schema version: 2.0. Current version: 1.0');
113
+ });
114
+ it('restores messages from snapshot', () => {
115
+ const snapshot = {
116
+ scope: 'agent',
117
+ schemaVersion: '1.0',
118
+ createdAt: createTimestamp(),
119
+ data: {
120
+ messages: [{ role: 'user', content: [{ text: 'Restored message' }] }],
121
+ },
122
+ appData: {},
123
+ };
124
+ loadSnapshot(agent, snapshot);
125
+ expect(agent.messages).toHaveLength(1);
126
+ expect(agent.messages[0]).toEqual(new Message({ role: 'user', content: [new TextBlock('Restored message')] }));
127
+ });
128
+ it('restores state from snapshot', () => {
129
+ const snapshot = {
130
+ scope: 'agent',
131
+ schemaVersion: '1.0',
132
+ createdAt: createTimestamp(),
133
+ data: {
134
+ state: { restoredKey: 'restoredValue' },
135
+ },
136
+ appData: {},
137
+ };
138
+ loadSnapshot(agent, snapshot);
139
+ expect(agent.state.get('restoredKey')).toBe('restoredValue');
140
+ });
141
+ it('restores systemPrompt from snapshot', () => {
142
+ const snapshot = {
143
+ scope: 'agent',
144
+ schemaVersion: '1.0',
145
+ createdAt: createTimestamp(),
146
+ data: {
147
+ systemPrompt: 'Restored system prompt',
148
+ },
149
+ appData: {},
150
+ };
151
+ loadSnapshot(agent, snapshot);
152
+ expect(agent.systemPrompt).toBe('Restored system prompt');
153
+ });
154
+ it('leaves systemPrompt unchanged when snapshot has null systemPrompt', () => {
155
+ agent.systemPrompt = 'Original prompt';
156
+ const snapshot = {
157
+ scope: 'agent',
158
+ schemaVersion: '1.0',
159
+ createdAt: createTimestamp(),
160
+ data: { systemPrompt: null },
161
+ appData: {},
162
+ };
163
+ loadSnapshot(agent, snapshot);
164
+ // systemPrompt should remain unchanged since snapshot had null
165
+ expect(agent.systemPrompt).toBe('Original prompt');
166
+ });
167
+ });
168
+ describe('round-trip', () => {
169
+ let agent;
170
+ beforeEach(() => {
171
+ agent = createTestAgent();
172
+ });
173
+ it('preserves messages through save/load cycle', () => {
174
+ const originalMessages = [
175
+ new Message({ role: 'user', content: [new TextBlock('Hello')] }),
176
+ new Message({ role: 'assistant', content: [new TextBlock('Hi!')] }),
177
+ ];
178
+ agent.messages.push(...originalMessages);
179
+ const snapshot = takeSnapshot(agent, { preset: 'session' });
180
+ // Modify agent
181
+ agent.messages.length = 0;
182
+ agent.messages.push(new Message({ role: 'user', content: [new TextBlock('Different')] }));
183
+ // Restore
184
+ loadSnapshot(agent, snapshot);
185
+ expect(agent.messages).toEqual(originalMessages);
186
+ });
187
+ it('preserves state through save/load cycle', () => {
188
+ agent.state.set('userId', 'user-123');
189
+ agent.state.set('counter', 42);
190
+ const snapshot = takeSnapshot(agent, { preset: 'session' });
191
+ // Modify state
192
+ agent.state.clear();
193
+ agent.state.set('different', 'value');
194
+ // Restore
195
+ loadSnapshot(agent, snapshot);
196
+ expect(agent.state.getAll()).toEqual({ userId: 'user-123', counter: 42 });
197
+ });
198
+ it('handles complex message content', () => {
199
+ const toolUseBlock = new ToolUseBlock({
200
+ name: 'calculator',
201
+ toolUseId: 'tool-123',
202
+ input: { operation: 'add', numbers: [1, 2, 3] },
203
+ });
204
+ const toolResultBlock = new ToolResultBlock({
205
+ toolUseId: 'tool-123',
206
+ status: 'success',
207
+ content: [new TextBlock('6')],
208
+ });
209
+ const originalMessages = [
210
+ new Message({ role: 'assistant', content: [toolUseBlock] }),
211
+ new Message({ role: 'user', content: [toolResultBlock] }),
212
+ ];
213
+ agent.messages.push(...originalMessages);
214
+ const snapshot = takeSnapshot(agent, { include: ['messages'] });
215
+ agent.messages.length = 0;
216
+ loadSnapshot(agent, snapshot);
217
+ expect(agent.messages).toEqual(originalMessages);
218
+ });
219
+ });
220
+ describe('JSON serialization', () => {
221
+ it('snapshot survives JSON.stringify/JSON.parse round-trip', () => {
222
+ const agent = createTestAgent();
223
+ agent.messages.push(new Message({ role: 'user', content: [new TextBlock('Hello')] }));
224
+ agent.state.set('userId', 'user-123');
225
+ agent.systemPrompt = 'You are a helpful assistant';
226
+ const snapshot = takeSnapshot(agent, { preset: 'session' });
227
+ // Serialize to JSON string and parse back
228
+ const jsonString = JSON.stringify(snapshot);
229
+ const parsed = JSON.parse(jsonString);
230
+ // Verify structure is preserved
231
+ expect(parsed).toEqual(snapshot);
232
+ });
233
+ it('snapshot can be stored and retrieved as JSON string', () => {
234
+ const agent = createTestAgent();
235
+ agent.messages.push(new Message({ role: 'user', content: [new TextBlock('Test message')] }));
236
+ agent.state.set('key', 'value');
237
+ const snapshot = takeSnapshot(agent, { preset: 'session' });
238
+ // Simulate storing to a database or file as JSON
239
+ const stored = JSON.stringify(snapshot);
240
+ // Simulate retrieving and restoring
241
+ const retrieved = JSON.parse(stored);
242
+ const newAgent = createTestAgent();
243
+ loadSnapshot(newAgent, retrieved);
244
+ expect(newAgent.messages).toHaveLength(1);
245
+ expect(newAgent.state.getAll()).toEqual({ key: 'value' });
246
+ });
247
+ });
248
+ });
249
+ //# sourceMappingURL=snapshot.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"snapshot.test.js","sourceRoot":"","sources":["../../../../src/agent/__tests__/snapshot.test.ts"],"names":[],"mappings":"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"}
@@ -1,10 +1,13 @@
1
1
  import { AgentResult, type AgentStreamEvent, type ContentBlock, type ContentBlockData, type JSONValue, McpClient, Message, type MessageData, type SystemPrompt, type SystemPromptData, type Tool } from '../index.js';
2
- import type { BaseModelConfig, Model } from '../models/model.js';
2
+ import { Model } from '../models/model.js';
3
+ import type { BaseModelConfig } from '../models/model.js';
3
4
  import { ToolRegistry } from '../registry/tool-registry.js';
4
- import { AgentState } from './state.js';
5
+ import { AppState } from '../app-state.js';
5
6
  import type { AgentData } from '../types/agent.js';
6
7
  import type { HookProvider } from '../hooks/types.js';
7
8
  import { HookRegistryImplementation } from '../hooks/registry.js';
9
+ import type { z } from 'zod';
10
+ import type { AttributeValue } from '@opentelemetry/api';
8
11
  /**
9
12
  * Recursive type definition for nested tool arrays.
10
13
  * Allows tools to be organized in nested arrays of any depth.
@@ -66,6 +69,24 @@ export type AgentConfig = {
66
69
  * Hooks enable observing and extending agent behavior.
67
70
  */
68
71
  hooks?: HookProvider[];
72
+ /**
73
+ * Zod schema for structured output validation.
74
+ */
75
+ structuredOutputSchema?: z.ZodSchema;
76
+ /**
77
+ * Custom trace attributes to include in all spans.
78
+ * These attributes are merged with standard attributes in telemetry spans.
79
+ * Telemetry must be enabled globally via telemetry.setupTracer() for these to take effect.
80
+ */
81
+ traceAttributes?: Record<string, AttributeValue>;
82
+ /**
83
+ * Optional name for the agent. Defaults to "Strands Agent".
84
+ */
85
+ name?: string;
86
+ /**
87
+ * Optional unique identifier for the agent. Defaults to "default".
88
+ */
89
+ agentId?: string;
69
90
  };
70
91
  /**
71
92
  * Arguments for invoking an agent.
@@ -76,6 +97,15 @@ export type AgentConfig = {
76
97
  * - `Message[]` | `MessageData[]` - Array of messages (appends all to conversation)
77
98
  */
78
99
  export type InvokeArgs = string | ContentBlock[] | ContentBlockData[] | Message[] | MessageData[];
100
+ /**
101
+ * Options for a single agent invocation.
102
+ */
103
+ export interface InvokeOptions {
104
+ /**
105
+ * Zod schema for structured output validation, overriding the constructor-provided schema for this invocation only.
106
+ */
107
+ structuredOutputSchema?: z.ZodSchema;
108
+ }
79
109
  /**
80
110
  * Orchestrates the interaction between a model, a set of tools, and MCP clients.
81
111
  * The Agent is responsible for managing the lifecycle of tools and clients
@@ -87,10 +117,10 @@ export declare class Agent implements AgentData {
87
117
  */
88
118
  readonly messages: Message[];
89
119
  /**
90
- * Agent state storage accessible to tools and application logic.
120
+ * App state storage accessible to tools and application logic.
91
121
  * State is not passed to the model during inference.
92
122
  */
93
- readonly state: AgentState;
123
+ readonly state: AppState;
94
124
  /**
95
125
  * Conversation manager for handling message history and context overflow.
96
126
  */
@@ -108,11 +138,24 @@ export declare class Agent implements AgentData {
108
138
  * The system prompt to pass to the model provider.
109
139
  */
110
140
  systemPrompt?: SystemPrompt;
141
+ /**
142
+ * The name of the agent.
143
+ */
144
+ readonly name: string;
145
+ /**
146
+ * The unique identifier of the agent instance.
147
+ */
148
+ readonly agentId: string;
111
149
  private _toolRegistry;
112
150
  private _mcpClients;
113
151
  private _initialized;
114
152
  private _isInvoking;
115
153
  private _printer?;
154
+ private _structuredOutputSchema?;
155
+ /** Tracer instance for creating and managing OpenTelemetry spans. */
156
+ private _tracer;
157
+ /** Running total of token usage across all model invocations in the current invocation. */
158
+ private _accumulatedTokenUsage;
116
159
  /**
117
160
  * Creates an instance of the Agent.
118
161
  * @param config - The configuration for the agent.
@@ -140,6 +183,7 @@ export declare class Agent implements AgentData {
140
183
  * streaming events.
141
184
  *
142
185
  * @param args - Arguments for invoking the agent
186
+ * @param options - Optional per-invocation options
143
187
  * @returns Promise that resolves to the final AgentResult
144
188
  *
145
189
  * @example
@@ -149,7 +193,7 @@ export declare class Agent implements AgentData {
149
193
  * console.log(result.lastMessage) // Agent's response
150
194
  * ```
151
195
  */
152
- invoke(args: InvokeArgs): Promise<AgentResult>;
196
+ invoke(args: InvokeArgs, options?: InvokeOptions): Promise<AgentResult>;
153
197
  /**
154
198
  * Streams the agent execution, yielding events and returning the final result.
155
199
  *
@@ -167,6 +211,7 @@ export declare class Agent implements AgentData {
167
211
  * with valid toolResponses
168
212
  *
169
213
  * @param args - Arguments for invoking the agent
214
+ * @param options - Optional per-invocation options
170
215
  * @returns Async generator that yields AgentStreamEvent objects and returns AgentResult
171
216
  *
172
217
  * @example
@@ -179,12 +224,13 @@ export declare class Agent implements AgentData {
179
224
  * // Messages array is mutated in place and contains the full conversation
180
225
  * ```
181
226
  */
182
- stream(args: InvokeArgs): AsyncGenerator<AgentStreamEvent, AgentResult, undefined>;
227
+ stream(args: InvokeArgs, options?: InvokeOptions): AsyncGenerator<AgentStreamEvent, AgentResult, undefined>;
183
228
  /**
184
229
  * Internal implementation of the agent streaming logic.
185
230
  * Separated to centralize printer event processing in the public stream method.
186
231
  *
187
232
  * @param args - Arguments for invoking the agent
233
+ * @param options - Optional per-invocation options
188
234
  * @returns Async generator that yields AgentStreamEvent objects and returns AgentResult
189
235
  */
190
236
  private _stream;
@@ -199,11 +245,21 @@ export declare class Agent implements AgentData {
199
245
  * Invokes the model provider and streams all events.
200
246
  *
201
247
  * @param args - Optional arguments for invoking the model
248
+ * @param toolChoice - Optional tool choice to force specific tool usage
202
249
  * @returns Object containing the assistant message and stop reason
203
250
  */
204
251
  private invokeModel;
205
252
  /**
206
- * Streams events from the model and fires ModelStreamEventHook for each event.
253
+ * Streams events from the model and dispatches appropriate events for each.
254
+ *
255
+ * The model's `streamAggregated()` yields two kinds of output:
256
+ * - **ModelStreamEvent**: Transient streaming deltas (partial data while generating).
257
+ * Wrapped in {@link ModelStreamUpdateEvent} before yielding.
258
+ * - **ContentBlock**: Fully assembled results (after all deltas accumulate).
259
+ * Wrapped in {@link ContentBlockEvent} before yielding.
260
+ *
261
+ * These are separate event classes because they represent different granularities
262
+ * (partial deltas vs finished blocks). Both are yielded in the stream and hookable.
207
263
  *
208
264
  * @param messages - Messages to send to the model
209
265
  * @param streamOptions - Options for streaming
@@ -230,12 +286,24 @@ export declare class Agent implements AgentData {
230
286
  */
231
287
  private executeTool;
232
288
  /**
233
- * Appends a message to the conversation history, invokes MessageAddedEvent hook,
234
- * and returns the event for yielding.
289
+ * Appends a message to the conversation history and returns the event for yielding.
235
290
  *
236
291
  * @param message - The message to append
237
- * @returns MessageAddedEvent to be yielded (hook already invoked)
292
+ * @returns MessageAddedEvent to be yielded
238
293
  */
239
294
  private _appendMessage;
295
+ /**
296
+ * Creates an empty Usage object with all counters set to zero.
297
+ *
298
+ * @returns A Usage object with zeroed counters
299
+ */
300
+ private static _createEmptyUsage;
301
+ /**
302
+ * Accumulates token usage from a source into a target Usage object.
303
+ *
304
+ * @param target - The Usage object to accumulate into (mutated in place)
305
+ * @param source - The Usage object to accumulate from
306
+ */
307
+ private static _accumulateUsage;
240
308
  }
241
309
  //# sourceMappingURL=agent.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"agent.d.ts","sourceRoot":"","sources":["../../../src/agent/agent.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"agent.d.ts","sourceRoot":"","sources":["../../../src/agent/agent.ts"],"names":[],"mappings":"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"}