@strands-agents/sdk 0.6.0 → 0.7.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 (370) hide show
  1. package/README.md +64 -0
  2. package/dist/src/__fixtures__/agent-helpers.d.ts +37 -4
  3. package/dist/src/__fixtures__/agent-helpers.d.ts.map +1 -1
  4. package/dist/src/__fixtures__/agent-helpers.js +31 -4
  5. package/dist/src/__fixtures__/agent-helpers.js.map +1 -1
  6. package/dist/src/__fixtures__/metrics-helpers.d.ts +30 -0
  7. package/dist/src/__fixtures__/metrics-helpers.d.ts.map +1 -1
  8. package/dist/src/__fixtures__/metrics-helpers.js +29 -6
  9. package/dist/src/__fixtures__/metrics-helpers.js.map +1 -1
  10. package/dist/src/__fixtures__/mock-message-model.d.ts +8 -4
  11. package/dist/src/__fixtures__/mock-message-model.d.ts.map +1 -1
  12. package/dist/src/__fixtures__/mock-message-model.js +13 -7
  13. package/dist/src/__fixtures__/mock-message-model.js.map +1 -1
  14. package/dist/src/__fixtures__/mock-meter.d.ts +32 -0
  15. package/dist/src/__fixtures__/mock-meter.d.ts.map +1 -0
  16. package/dist/src/__fixtures__/mock-meter.js +47 -0
  17. package/dist/src/__fixtures__/mock-meter.js.map +1 -0
  18. package/dist/src/__fixtures__/mock-plugin.d.ts +13 -0
  19. package/dist/src/__fixtures__/mock-plugin.d.ts.map +1 -0
  20. package/dist/src/__fixtures__/{mock-hook-provider.js → mock-plugin.js} +8 -5
  21. package/dist/src/__fixtures__/mock-plugin.js.map +1 -0
  22. package/dist/src/__fixtures__/tool-helpers.d.ts.map +1 -1
  23. package/dist/src/__fixtures__/tool-helpers.js +5 -2
  24. package/dist/src/__fixtures__/tool-helpers.js.map +1 -1
  25. package/dist/src/__tests__/index.test.js +21 -0
  26. package/dist/src/__tests__/index.test.js.map +1 -1
  27. package/dist/src/__tests__/mcp.test.js.map +1 -1
  28. package/dist/src/__tests__/mime.test.d.ts +2 -0
  29. package/dist/src/__tests__/mime.test.d.ts.map +1 -0
  30. package/dist/src/__tests__/mime.test.js +83 -0
  31. package/dist/src/__tests__/mime.test.js.map +1 -0
  32. package/dist/src/__tests__/state-store.test.d.ts +2 -0
  33. package/dist/src/__tests__/state-store.test.d.ts.map +1 -0
  34. package/dist/src/__tests__/{app-state.test.js → state-store.test.js} +86 -51
  35. package/dist/src/__tests__/state-store.test.js.map +1 -0
  36. package/dist/src/a2a/__tests__/a2a-agent.test.d.ts +2 -0
  37. package/dist/src/a2a/__tests__/a2a-agent.test.d.ts.map +1 -0
  38. package/dist/src/a2a/__tests__/a2a-agent.test.js +364 -0
  39. package/dist/src/a2a/__tests__/a2a-agent.test.js.map +1 -0
  40. package/dist/src/a2a/__tests__/adapters.test.d.ts +2 -0
  41. package/dist/src/a2a/__tests__/adapters.test.d.ts.map +1 -0
  42. package/dist/src/a2a/__tests__/adapters.test.js +151 -0
  43. package/dist/src/a2a/__tests__/adapters.test.js.map +1 -0
  44. package/dist/src/a2a/__tests__/executor.test.d.ts +2 -0
  45. package/dist/src/a2a/__tests__/executor.test.d.ts.map +1 -0
  46. package/dist/src/a2a/__tests__/executor.test.js +196 -0
  47. package/dist/src/a2a/__tests__/executor.test.js.map +1 -0
  48. package/dist/src/a2a/__tests__/server.test.d.ts +2 -0
  49. package/dist/src/a2a/__tests__/server.test.d.ts.map +1 -0
  50. package/dist/src/a2a/__tests__/server.test.js +51 -0
  51. package/dist/src/a2a/__tests__/server.test.js.map +1 -0
  52. package/dist/src/a2a/__tests__/server.test.node.d.ts +2 -0
  53. package/dist/src/a2a/__tests__/server.test.node.d.ts.map +1 -0
  54. package/dist/src/a2a/__tests__/server.test.node.js +110 -0
  55. package/dist/src/a2a/__tests__/server.test.node.js.map +1 -0
  56. package/dist/src/a2a/a2a-agent.d.ts +132 -0
  57. package/dist/src/a2a/a2a-agent.d.ts.map +1 -0
  58. package/dist/src/a2a/a2a-agent.js +255 -0
  59. package/dist/src/a2a/a2a-agent.js.map +1 -0
  60. package/dist/src/a2a/adapters.d.ts +27 -0
  61. package/dist/src/a2a/adapters.d.ts.map +1 -0
  62. package/dist/src/a2a/adapters.js +175 -0
  63. package/dist/src/a2a/adapters.js.map +1 -0
  64. package/dist/src/a2a/events.d.ts +42 -0
  65. package/dist/src/a2a/events.d.ts.map +1 -0
  66. package/dist/src/a2a/events.js +35 -0
  67. package/dist/src/a2a/events.js.map +1 -0
  68. package/dist/src/a2a/executor.d.ts +57 -0
  69. package/dist/src/a2a/executor.d.ts.map +1 -0
  70. package/dist/src/a2a/executor.js +130 -0
  71. package/dist/src/a2a/executor.js.map +1 -0
  72. package/dist/src/a2a/express-server.d.ts +67 -0
  73. package/dist/src/a2a/express-server.d.ts.map +1 -0
  74. package/dist/src/a2a/express-server.js +95 -0
  75. package/dist/src/a2a/express-server.js.map +1 -0
  76. package/dist/src/a2a/index.d.ts +16 -0
  77. package/dist/src/a2a/index.d.ts.map +1 -0
  78. package/dist/src/a2a/index.js +16 -0
  79. package/dist/src/a2a/index.js.map +1 -0
  80. package/dist/src/a2a/logging.d.ts +8 -0
  81. package/dist/src/a2a/logging.d.ts.map +1 -0
  82. package/dist/src/a2a/logging.js +15 -0
  83. package/dist/src/a2a/logging.js.map +1 -0
  84. package/dist/src/a2a/server.d.ts +67 -0
  85. package/dist/src/a2a/server.d.ts.map +1 -0
  86. package/dist/src/a2a/server.js +67 -0
  87. package/dist/src/a2a/server.js.map +1 -0
  88. package/dist/src/agent/__tests__/agent.hook.test.js +87 -51
  89. package/dist/src/agent/__tests__/agent.hook.test.js.map +1 -1
  90. package/dist/src/agent/__tests__/agent.test.js +87 -10
  91. package/dist/src/agent/__tests__/agent.test.js.map +1 -1
  92. package/dist/src/agent/__tests__/agent.tracer.test.js +10 -10
  93. package/dist/src/agent/__tests__/agent.tracer.test.js.map +1 -1
  94. package/dist/src/agent/__tests__/snapshot.test.js +11 -11
  95. package/dist/src/agent/__tests__/snapshot.test.js.map +1 -1
  96. package/dist/src/agent/agent.d.ts +39 -43
  97. package/dist/src/agent/agent.d.ts.map +1 -1
  98. package/dist/src/agent/agent.js +66 -40
  99. package/dist/src/agent/agent.js.map +1 -1
  100. package/dist/src/agent/snapshot.d.ts.map +1 -1
  101. package/dist/src/agent/snapshot.js +3 -2
  102. package/dist/src/agent/snapshot.js.map +1 -1
  103. package/dist/src/conversation-manager/__tests__/conversation-manager.test.d.ts +2 -0
  104. package/dist/src/conversation-manager/__tests__/conversation-manager.test.d.ts.map +1 -0
  105. package/dist/src/conversation-manager/__tests__/conversation-manager.test.js +100 -0
  106. package/dist/src/conversation-manager/__tests__/conversation-manager.test.js.map +1 -0
  107. package/dist/src/conversation-manager/__tests__/null-conversation-manager.test.js +26 -10
  108. package/dist/src/conversation-manager/__tests__/null-conversation-manager.test.js.map +1 -1
  109. package/dist/src/conversation-manager/__tests__/sliding-window-conversation-manager.test.js +84 -21
  110. package/dist/src/conversation-manager/__tests__/sliding-window-conversation-manager.test.js.map +1 -1
  111. package/dist/src/conversation-manager/conversation-manager.d.ts +87 -0
  112. package/dist/src/conversation-manager/conversation-manager.d.ts.map +1 -0
  113. package/dist/src/conversation-manager/conversation-manager.js +59 -0
  114. package/dist/src/conversation-manager/conversation-manager.js.map +1 -0
  115. package/dist/src/conversation-manager/index.d.ts +1 -0
  116. package/dist/src/conversation-manager/index.d.ts.map +1 -1
  117. package/dist/src/conversation-manager/index.js +1 -0
  118. package/dist/src/conversation-manager/index.js.map +1 -1
  119. package/dist/src/conversation-manager/null-conversation-manager.d.ts +12 -8
  120. package/dist/src/conversation-manager/null-conversation-manager.d.ts.map +1 -1
  121. package/dist/src/conversation-manager/null-conversation-manager.js +13 -7
  122. package/dist/src/conversation-manager/null-conversation-manager.js.map +1 -1
  123. package/dist/src/conversation-manager/sliding-window-conversation-manager.d.ts +28 -19
  124. package/dist/src/conversation-manager/sliding-window-conversation-manager.d.ts.map +1 -1
  125. package/dist/src/conversation-manager/sliding-window-conversation-manager.js +44 -36
  126. package/dist/src/conversation-manager/sliding-window-conversation-manager.js.map +1 -1
  127. package/dist/src/hooks/__tests__/registry.test.js +10 -154
  128. package/dist/src/hooks/__tests__/registry.test.js.map +1 -1
  129. package/dist/src/hooks/events.d.ts +44 -44
  130. package/dist/src/hooks/events.d.ts.map +1 -1
  131. package/dist/src/hooks/events.js +11 -11
  132. package/dist/src/hooks/events.js.map +1 -1
  133. package/dist/src/hooks/index.d.ts +3 -3
  134. package/dist/src/hooks/index.d.ts.map +1 -1
  135. package/dist/src/hooks/index.js +2 -2
  136. package/dist/src/hooks/registry.d.ts +1 -32
  137. package/dist/src/hooks/registry.d.ts.map +1 -1
  138. package/dist/src/hooks/registry.js +1 -47
  139. package/dist/src/hooks/registry.js.map +1 -1
  140. package/dist/src/hooks/types.d.ts +0 -31
  141. package/dist/src/hooks/types.d.ts.map +1 -1
  142. package/dist/src/index.d.ts +12 -12
  143. package/dist/src/index.d.ts.map +1 -1
  144. package/dist/src/index.js +8 -8
  145. package/dist/src/index.js.map +1 -1
  146. package/dist/src/mime.d.ts +24 -0
  147. package/dist/src/mime.d.ts.map +1 -0
  148. package/dist/src/mime.js +82 -0
  149. package/dist/src/mime.js.map +1 -0
  150. package/dist/src/models/__tests__/anthropic.test.js +78 -1
  151. package/dist/src/models/__tests__/anthropic.test.js.map +1 -1
  152. package/dist/src/models/__tests__/bedrock.test.js +1844 -613
  153. package/dist/src/models/__tests__/bedrock.test.js.map +1 -1
  154. package/dist/src/models/__tests__/gemini.test.js +100 -1
  155. package/dist/src/models/__tests__/gemini.test.js.map +1 -1
  156. package/dist/src/models/__tests__/model.test.js +25 -0
  157. package/dist/src/models/__tests__/model.test.js.map +1 -1
  158. package/dist/src/models/__tests__/openai.test.js +184 -32
  159. package/dist/src/models/__tests__/openai.test.js.map +1 -1
  160. package/dist/src/models/anthropic.d.ts.map +1 -1
  161. package/dist/src/models/anthropic.js +6 -7
  162. package/dist/src/models/anthropic.js.map +1 -1
  163. package/dist/src/models/bedrock.d.ts +64 -10
  164. package/dist/src/models/bedrock.d.ts.map +1 -1
  165. package/dist/src/models/bedrock.js +202 -23
  166. package/dist/src/models/bedrock.js.map +1 -1
  167. package/dist/src/models/gemini/adapters.d.ts.map +1 -1
  168. package/dist/src/models/gemini/adapters.js +65 -14
  169. package/dist/src/models/gemini/adapters.js.map +1 -1
  170. package/dist/src/models/model.d.ts +12 -0
  171. package/dist/src/models/model.d.ts.map +1 -1
  172. package/dist/src/models/model.js +5 -9
  173. package/dist/src/models/model.js.map +1 -1
  174. package/dist/src/models/openai.d.ts +15 -0
  175. package/dist/src/models/openai.d.ts.map +1 -1
  176. package/dist/src/models/openai.js +108 -64
  177. package/dist/src/models/openai.js.map +1 -1
  178. package/dist/src/models/streaming.d.ts +5 -0
  179. package/dist/src/models/streaming.d.ts.map +1 -1
  180. package/dist/src/multiagent/__tests__/events.test.js +24 -7
  181. package/dist/src/multiagent/__tests__/events.test.js.map +1 -1
  182. package/dist/src/multiagent/__tests__/graph.test.js +28 -13
  183. package/dist/src/multiagent/__tests__/graph.test.js.map +1 -1
  184. package/dist/src/multiagent/__tests__/nodes.test.js +28 -10
  185. package/dist/src/multiagent/__tests__/nodes.test.js.map +1 -1
  186. package/dist/src/multiagent/__tests__/swarm.test.js +33 -10
  187. package/dist/src/multiagent/__tests__/swarm.test.js.map +1 -1
  188. package/dist/src/multiagent/events.d.ts +48 -14
  189. package/dist/src/multiagent/events.d.ts.map +1 -1
  190. package/dist/src/multiagent/events.js +11 -3
  191. package/dist/src/multiagent/events.js.map +1 -1
  192. package/dist/src/multiagent/graph.d.ts +21 -11
  193. package/dist/src/multiagent/graph.d.ts.map +1 -1
  194. package/dist/src/multiagent/graph.js +35 -29
  195. package/dist/src/multiagent/graph.js.map +1 -1
  196. package/dist/src/multiagent/index.d.ts +3 -2
  197. package/dist/src/multiagent/index.d.ts.map +1 -1
  198. package/dist/src/multiagent/index.js.map +1 -1
  199. package/dist/src/multiagent/multiagent.d.ts +41 -0
  200. package/dist/src/multiagent/multiagent.d.ts.map +1 -0
  201. package/dist/src/multiagent/multiagent.js +2 -0
  202. package/dist/src/multiagent/multiagent.js.map +1 -0
  203. package/dist/src/multiagent/nodes.d.ts +18 -21
  204. package/dist/src/multiagent/nodes.d.ts.map +1 -1
  205. package/dist/src/multiagent/nodes.js +27 -11
  206. package/dist/src/multiagent/nodes.js.map +1 -1
  207. package/dist/src/multiagent/plugins.d.ts +70 -0
  208. package/dist/src/multiagent/plugins.d.ts.map +1 -0
  209. package/dist/src/multiagent/plugins.js +70 -0
  210. package/dist/src/multiagent/plugins.js.map +1 -0
  211. package/dist/src/multiagent/state.d.ts +2 -2
  212. package/dist/src/multiagent/state.d.ts.map +1 -1
  213. package/dist/src/multiagent/state.js +2 -2
  214. package/dist/src/multiagent/state.js.map +1 -1
  215. package/dist/src/multiagent/swarm.d.ts +26 -16
  216. package/dist/src/multiagent/swarm.d.ts.map +1 -1
  217. package/dist/src/multiagent/swarm.js +31 -13
  218. package/dist/src/multiagent/swarm.js.map +1 -1
  219. package/dist/src/plugins/__tests__/plugin.test.d.ts +2 -0
  220. package/dist/src/plugins/__tests__/plugin.test.d.ts.map +1 -0
  221. package/dist/src/plugins/__tests__/plugin.test.js +114 -0
  222. package/dist/src/plugins/__tests__/plugin.test.js.map +1 -0
  223. package/dist/src/plugins/__tests__/registry.test.d.ts +2 -0
  224. package/dist/src/plugins/__tests__/registry.test.d.ts.map +1 -0
  225. package/dist/src/plugins/__tests__/registry.test.js +147 -0
  226. package/dist/src/plugins/__tests__/registry.test.js.map +1 -0
  227. package/dist/src/plugins/index.d.ts +30 -0
  228. package/dist/src/plugins/index.d.ts.map +1 -0
  229. package/dist/src/plugins/index.js +30 -0
  230. package/dist/src/plugins/index.js.map +1 -0
  231. package/dist/src/plugins/plugin.d.ts +74 -0
  232. package/dist/src/plugins/plugin.d.ts.map +1 -0
  233. package/dist/src/plugins/plugin.js +8 -0
  234. package/dist/src/plugins/plugin.js.map +1 -0
  235. package/dist/src/plugins/registry.d.ts +25 -0
  236. package/dist/src/plugins/registry.d.ts.map +1 -0
  237. package/dist/src/plugins/registry.js +41 -0
  238. package/dist/src/plugins/registry.js.map +1 -0
  239. package/dist/src/session/__tests__/session-manager.test.js +74 -92
  240. package/dist/src/session/__tests__/session-manager.test.js.map +1 -1
  241. package/dist/src/session/index.d.ts +0 -1
  242. package/dist/src/session/index.d.ts.map +1 -1
  243. package/dist/src/session/index.js +0 -1
  244. package/dist/src/session/index.js.map +1 -1
  245. package/dist/src/session/session-manager.d.ts +9 -5
  246. package/dist/src/session/session-manager.d.ts.map +1 -1
  247. package/dist/src/session/session-manager.js +14 -8
  248. package/dist/src/session/session-manager.js.map +1 -1
  249. package/dist/src/session/storage.d.ts +1 -1
  250. package/dist/src/session/storage.d.ts.map +1 -1
  251. package/dist/src/session/types.d.ts +2 -2
  252. package/dist/src/session/types.d.ts.map +1 -1
  253. package/dist/src/{app-state.d.ts → state-store.d.ts} +11 -11
  254. package/dist/src/state-store.d.ts.map +1 -0
  255. package/dist/src/{app-state.js → state-store.js} +8 -7
  256. package/dist/src/state-store.js.map +1 -0
  257. package/dist/src/telemetry/__tests__/config.test.js +24 -0
  258. package/dist/src/telemetry/__tests__/config.test.js.map +1 -1
  259. package/dist/src/telemetry/__tests__/config.test.node.js +56 -0
  260. package/dist/src/telemetry/__tests__/config.test.node.js.map +1 -1
  261. package/dist/src/telemetry/__tests__/meter.test.js +176 -9
  262. package/dist/src/telemetry/__tests__/meter.test.js.map +1 -1
  263. package/dist/src/telemetry/__tests__/tracer.test.node.js +123 -2
  264. package/dist/src/telemetry/__tests__/tracer.test.node.js.map +1 -1
  265. package/dist/src/telemetry/config.d.ts +72 -12
  266. package/dist/src/telemetry/config.d.ts.map +1 -1
  267. package/dist/src/telemetry/config.js +101 -24
  268. package/dist/src/telemetry/config.js.map +1 -1
  269. package/dist/src/telemetry/index.d.ts +10 -7
  270. package/dist/src/telemetry/index.d.ts.map +1 -1
  271. package/dist/src/telemetry/index.js +9 -6
  272. package/dist/src/telemetry/index.js.map +1 -1
  273. package/dist/src/telemetry/meter.d.ts +23 -4
  274. package/dist/src/telemetry/meter.d.ts.map +1 -1
  275. package/dist/src/telemetry/meter.js +78 -5
  276. package/dist/src/telemetry/meter.js.map +1 -1
  277. package/dist/src/telemetry/tracer.d.ts +27 -0
  278. package/dist/src/telemetry/tracer.d.ts.map +1 -1
  279. package/dist/src/telemetry/tracer.js +80 -5
  280. package/dist/src/telemetry/tracer.js.map +1 -1
  281. package/dist/src/telemetry/types.d.ts +2 -0
  282. package/dist/src/telemetry/types.d.ts.map +1 -1
  283. package/dist/src/telemetry/utils.d.ts +10 -0
  284. package/dist/src/telemetry/utils.d.ts.map +1 -0
  285. package/dist/src/telemetry/utils.js +13 -0
  286. package/dist/src/telemetry/utils.js.map +1 -0
  287. package/dist/src/tools/__tests__/tool.test.js +22 -1
  288. package/dist/src/tools/__tests__/tool.test.js.map +1 -1
  289. package/dist/src/tools/function-tool.d.ts +11 -1
  290. package/dist/src/tools/function-tool.d.ts.map +1 -1
  291. package/dist/src/tools/function-tool.js +64 -3
  292. package/dist/src/tools/function-tool.js.map +1 -1
  293. package/dist/src/tools/tool.d.ts +2 -2
  294. package/dist/src/tools/tool.d.ts.map +1 -1
  295. package/dist/src/tsconfig.tsbuildinfo +1 -1
  296. package/dist/src/types/__tests__/media.test.js +22 -16
  297. package/dist/src/types/__tests__/media.test.js.map +1 -1
  298. package/dist/src/types/agent.d.ts +75 -7
  299. package/dist/src/types/agent.d.ts.map +1 -1
  300. package/dist/src/types/agent.js.map +1 -1
  301. package/dist/src/types/media.d.ts +27 -30
  302. package/dist/src/types/media.d.ts.map +1 -1
  303. package/dist/src/types/media.js +15 -56
  304. package/dist/src/types/media.js.map +1 -1
  305. package/dist/src/types/messages.d.ts +18 -4
  306. package/dist/src/types/messages.d.ts.map +1 -1
  307. package/dist/src/types/messages.js +22 -26
  308. package/dist/src/types/messages.js.map +1 -1
  309. package/dist/src/types/serializable.d.ts +34 -4
  310. package/dist/src/types/serializable.d.ts.map +1 -1
  311. package/dist/src/types/serializable.js +31 -2
  312. package/dist/src/types/serializable.js.map +1 -1
  313. package/dist/src/vended-tools/bash/__tests__/bash.test.node.js +5 -4
  314. package/dist/src/vended-tools/bash/__tests__/bash.test.node.js.map +1 -1
  315. package/dist/src/vended-tools/file-editor/__tests__/file-editor.test.node.d.ts.map +1 -0
  316. package/dist/src/vended-tools/{file_editor → file-editor}/__tests__/file-editor.test.node.js +11 -4
  317. package/dist/src/vended-tools/file-editor/__tests__/file-editor.test.node.js.map +1 -0
  318. package/dist/src/vended-tools/{file_editor → file-editor}/file-editor.d.ts +1 -1
  319. package/dist/src/vended-tools/{file_editor → file-editor}/file-editor.d.ts.map +1 -1
  320. package/dist/src/vended-tools/{file_editor → file-editor}/file-editor.js +2 -2
  321. package/dist/src/vended-tools/{file_editor → file-editor}/file-editor.js.map +1 -1
  322. package/dist/src/vended-tools/{file_editor → file-editor}/index.d.ts.map +1 -1
  323. package/dist/src/vended-tools/file-editor/index.js.map +1 -0
  324. package/dist/src/vended-tools/{file_editor → file-editor}/types.d.ts.map +1 -1
  325. package/dist/src/vended-tools/file-editor/types.js.map +1 -0
  326. package/dist/src/vended-tools/http-request/__tests__/http-request.test.d.ts.map +1 -0
  327. package/dist/src/vended-tools/{http_request → http-request}/__tests__/http-request.test.js.map +1 -1
  328. package/dist/src/vended-tools/{http_request → http-request}/http-request.d.ts.map +1 -1
  329. package/dist/src/vended-tools/{http_request → http-request}/http-request.js.map +1 -1
  330. package/dist/src/vended-tools/{http_request → http-request}/index.d.ts.map +1 -1
  331. package/dist/src/vended-tools/http-request/index.js.map +1 -0
  332. package/dist/src/vended-tools/{http_request → http-request}/types.d.ts.map +1 -1
  333. package/dist/src/vended-tools/http-request/types.js.map +1 -0
  334. package/dist/src/vended-tools/notebook/__tests__/notebook.test.js +5 -4
  335. package/dist/src/vended-tools/notebook/__tests__/notebook.test.js.map +1 -1
  336. package/dist/src/vended-tools/notebook/notebook.js +2 -2
  337. package/dist/src/vended-tools/notebook/notebook.js.map +1 -1
  338. package/package.json +52 -10
  339. package/dist/src/__fixtures__/mock-hook-provider.d.ts +0 -10
  340. package/dist/src/__fixtures__/mock-hook-provider.d.ts.map +0 -1
  341. package/dist/src/__fixtures__/mock-hook-provider.js.map +0 -1
  342. package/dist/src/__tests__/app-state.test.d.ts +0 -2
  343. package/dist/src/__tests__/app-state.test.d.ts.map +0 -1
  344. package/dist/src/__tests__/app-state.test.js.map +0 -1
  345. package/dist/src/app-state.d.ts.map +0 -1
  346. package/dist/src/app-state.js.map +0 -1
  347. package/dist/src/multiagent/base.d.ts +0 -25
  348. package/dist/src/multiagent/base.d.ts.map +0 -1
  349. package/dist/src/multiagent/base.js +0 -2
  350. package/dist/src/multiagent/base.js.map +0 -1
  351. package/dist/src/vended-tools/file_editor/__tests__/file-editor.test.node.d.ts.map +0 -1
  352. package/dist/src/vended-tools/file_editor/__tests__/file-editor.test.node.js.map +0 -1
  353. package/dist/src/vended-tools/file_editor/index.js.map +0 -1
  354. package/dist/src/vended-tools/file_editor/types.js.map +0 -1
  355. package/dist/src/vended-tools/http_request/__tests__/http-request.test.d.ts.map +0 -1
  356. package/dist/src/vended-tools/http_request/index.js.map +0 -1
  357. package/dist/src/vended-tools/http_request/types.js.map +0 -1
  358. /package/dist/src/vended-tools/{file_editor → file-editor}/__tests__/file-editor.test.node.d.ts +0 -0
  359. /package/dist/src/vended-tools/{file_editor → file-editor}/index.d.ts +0 -0
  360. /package/dist/src/vended-tools/{file_editor → file-editor}/index.js +0 -0
  361. /package/dist/src/vended-tools/{file_editor → file-editor}/types.d.ts +0 -0
  362. /package/dist/src/vended-tools/{file_editor → file-editor}/types.js +0 -0
  363. /package/dist/src/vended-tools/{http_request → http-request}/__tests__/http-request.test.d.ts +0 -0
  364. /package/dist/src/vended-tools/{http_request → http-request}/__tests__/http-request.test.js +0 -0
  365. /package/dist/src/vended-tools/{http_request → http-request}/http-request.d.ts +0 -0
  366. /package/dist/src/vended-tools/{http_request → http-request}/http-request.js +0 -0
  367. /package/dist/src/vended-tools/{http_request → http-request}/index.d.ts +0 -0
  368. /package/dist/src/vended-tools/{http_request → http-request}/index.js +0 -0
  369. /package/dist/src/vended-tools/{http_request → http-request}/types.d.ts +0 -0
  370. /package/dist/src/vended-tools/{http_request → http-request}/types.js +0 -0
@@ -0,0 +1,196 @@
1
+ import { describe, expect, it, vi } from 'vitest';
2
+ import { A2AExecutor } from '../executor.js';
3
+ import { Agent } from '../../agent/agent.js';
4
+ import { MockMessageModel } from '../../__fixtures__/mock-message-model.js';
5
+ import { createMockAgent } from '../../__fixtures__/agent-helpers.js';
6
+ import { TextBlock } from '../../types/messages.js';
7
+ import { ImageBlock, encodeBase64 } from '../../types/media.js';
8
+ import { ContentBlockEvent, ModelStreamUpdateEvent } from '../../hooks/events.js';
9
+ import { AgentResult } from '../../types/agent.js';
10
+ import { Message } from '../../types/messages.js';
11
+ function createMockEventBus() {
12
+ const events = [];
13
+ return {
14
+ events,
15
+ publish: vi.fn((event) => {
16
+ events.push(event);
17
+ }),
18
+ on: vi.fn().mockReturnThis(),
19
+ off: vi.fn().mockReturnThis(),
20
+ once: vi.fn().mockReturnThis(),
21
+ removeAllListeners: vi.fn().mockReturnThis(),
22
+ finished: vi.fn(),
23
+ };
24
+ }
25
+ function createRequestContext(text, taskId = 'task-1') {
26
+ return {
27
+ taskId,
28
+ contextId: 'ctx-1',
29
+ userMessage: {
30
+ kind: 'message',
31
+ messageId: 'msg-1',
32
+ role: 'user',
33
+ parts: [{ kind: 'text', text }],
34
+ },
35
+ };
36
+ }
37
+ describe('A2AExecutor', () => {
38
+ describe('execute', () => {
39
+ it('streams text deltas as artifact chunks and publishes completed status', async () => {
40
+ const model = new MockMessageModel().addTurn({ type: 'textBlock', text: 'Agent response' });
41
+ const agent = new Agent({ model, printer: false });
42
+ const executor = new A2AExecutor(agent);
43
+ const eventBus = createMockEventBus();
44
+ await executor.execute(createRequestContext('Hello agent'), eventBus);
45
+ // First event registers the task with the ResultManager
46
+ expect(eventBus.events[0]).toStrictEqual({
47
+ kind: 'task',
48
+ id: 'task-1',
49
+ contextId: 'ctx-1',
50
+ status: { state: 'working' },
51
+ });
52
+ const artifactEvents = eventBus.events.filter((e) => e.kind === 'artifact-update');
53
+ const statusEvents = eventBus.events.filter((e) => e.kind === 'status-update');
54
+ // Should have at least 2 artifact events (text delta + lastChunk)
55
+ expect(artifactEvents.length).toBeGreaterThanOrEqual(2);
56
+ // First artifact: text delta, creates new artifact
57
+ expect(artifactEvents[0]).toStrictEqual({
58
+ kind: 'artifact-update',
59
+ taskId: 'task-1',
60
+ contextId: 'ctx-1',
61
+ append: false,
62
+ artifact: { artifactId: expect.any(String), parts: [{ kind: 'text', text: 'Agent response' }] },
63
+ });
64
+ // Last artifact: lastChunk marker, appends to existing artifact
65
+ expect(artifactEvents[artifactEvents.length - 1]).toStrictEqual(expect.objectContaining({ append: true, lastChunk: true }));
66
+ // All artifact events share the same artifactId
67
+ const artifactId = artifactEvents[0].artifact.artifactId;
68
+ for (const event of artifactEvents) {
69
+ expect(event.artifact.artifactId).toBe(artifactId);
70
+ }
71
+ // Only completed status — no working status (A2A-compliant streaming)
72
+ expect(statusEvents).toStrictEqual([
73
+ { kind: 'status-update', taskId: 'task-1', contextId: 'ctx-1', status: { state: 'completed' }, final: true },
74
+ ]);
75
+ });
76
+ it('sets append to true for subsequent chunks after the first', async () => {
77
+ const model = new MockMessageModel().addTurn([
78
+ { type: 'textBlock', text: 'First' },
79
+ { type: 'textBlock', text: 'Second' },
80
+ ]);
81
+ const agent = new Agent({ model, printer: false });
82
+ const executor = new A2AExecutor(agent);
83
+ const eventBus = createMockEventBus();
84
+ await executor.execute(createRequestContext('Hello'), eventBus);
85
+ const artifactEvents = eventBus.events.filter((e) => e.kind === 'artifact-update');
86
+ // 2 text deltas + 1 lastChunk
87
+ expect(artifactEvents).toHaveLength(3);
88
+ expect(artifactEvents.map((e) => e.append)).toStrictEqual([false, true, true]);
89
+ expect(artifactEvents[2].lastChunk).toBe(true);
90
+ });
91
+ it('converts A2A parts to content blocks and passes to stream', async () => {
92
+ const model = new MockMessageModel().addTurn({ type: 'textBlock', text: 'Response' });
93
+ const agent = new Agent({ model, printer: false });
94
+ vi.spyOn(agent, 'stream');
95
+ const executor = new A2AExecutor(agent);
96
+ const eventBus = createMockEventBus();
97
+ const context = {
98
+ taskId: 'task-1',
99
+ contextId: 'ctx-1',
100
+ userMessage: {
101
+ kind: 'message',
102
+ messageId: 'msg-1',
103
+ role: 'user',
104
+ parts: [
105
+ { kind: 'text', text: 'Line 1' },
106
+ { kind: 'file', file: { uri: 'file://test.txt' } },
107
+ { kind: 'text', text: 'Line 2' },
108
+ ],
109
+ },
110
+ };
111
+ await executor.execute(context, eventBus);
112
+ expect(agent.stream).toHaveBeenCalledWith([
113
+ new TextBlock('Line 1'),
114
+ new TextBlock('[File: file (file://test.txt)]'),
115
+ new TextBlock('Line 2'),
116
+ ]);
117
+ });
118
+ it('re-throws when agent throws, publishing only the initial task event', async () => {
119
+ const model = new MockMessageModel().addTurn(new Error('Agent failed'));
120
+ const agent = new Agent({ model, printer: false });
121
+ const executor = new A2AExecutor(agent);
122
+ const eventBus = createMockEventBus();
123
+ await expect(executor.execute(createRequestContext('Hello'), eventBus)).rejects.toThrow('Agent failed');
124
+ // Only the initial task registration event is published before the error
125
+ expect(eventBus.events).toStrictEqual([
126
+ { kind: 'task', id: 'task-1', contextId: 'ctx-1', status: { state: 'working' } },
127
+ ]);
128
+ });
129
+ it('publishes image content blocks as separate file artifacts', async () => {
130
+ const imageBytes = new Uint8Array([137, 80, 78, 71]);
131
+ const mockAgent = {
132
+ id: 'test-agent',
133
+ name: 'Test Agent',
134
+ invoke: vi.fn(),
135
+ async *stream() {
136
+ const agent = createMockAgent();
137
+ // Text delta
138
+ yield new ModelStreamUpdateEvent({
139
+ agent,
140
+ event: { type: 'modelContentBlockDeltaEvent', delta: { type: 'textDelta', text: 'Here is the image:' } },
141
+ });
142
+ // Image content block
143
+ yield new ContentBlockEvent({
144
+ agent,
145
+ contentBlock: new ImageBlock({ format: 'png', source: { bytes: imageBytes } }),
146
+ });
147
+ return new AgentResult({
148
+ stopReason: 'endTurn',
149
+ lastMessage: new Message({ role: 'assistant', content: [new TextBlock('Here is the image:')] }),
150
+ });
151
+ },
152
+ };
153
+ const executor = new A2AExecutor(mockAgent);
154
+ const eventBus = createMockEventBus();
155
+ await executor.execute(createRequestContext('Generate an image'), eventBus);
156
+ const artifactEvents = eventBus.events.filter((e) => e.kind === 'artifact-update');
157
+ // text delta + image artifact + final text lastChunk = 3
158
+ expect(artifactEvents).toHaveLength(3);
159
+ // First: text delta
160
+ expect(artifactEvents[0].artifact.parts).toStrictEqual([{ kind: 'text', text: 'Here is the image:' }]);
161
+ // Second: image as file part with its own artifactId
162
+ expect(artifactEvents[1].artifact.artifactId).not.toBe(artifactEvents[0].artifact.artifactId);
163
+ expect(artifactEvents[1].lastChunk).toBe(true);
164
+ expect(artifactEvents[1].append).toBe(false);
165
+ expect(artifactEvents[1].artifact.parts).toStrictEqual([
166
+ { kind: 'file', file: { bytes: encodeBase64(imageBytes), mimeType: 'image/png' } },
167
+ ]);
168
+ // Third: final text lastChunk
169
+ expect(artifactEvents[2].lastChunk).toBe(true);
170
+ });
171
+ it('throws A2AError.invalidRequest when parts produce no content blocks', async () => {
172
+ const model = new MockMessageModel().addTurn({ type: 'textBlock', text: 'Response' });
173
+ const agent = new Agent({ model, printer: false });
174
+ const executor = new A2AExecutor(agent);
175
+ const eventBus = createMockEventBus();
176
+ const context = {
177
+ taskId: 'task-1',
178
+ contextId: 'ctx-1',
179
+ userMessage: { kind: 'message', messageId: 'msg-1', role: 'user', parts: [] },
180
+ };
181
+ await expect(executor.execute(context, eventBus)).rejects.toThrow('No content blocks available');
182
+ expect(eventBus.events).toStrictEqual([]);
183
+ });
184
+ });
185
+ describe('cancelTask', () => {
186
+ it('throws A2AError.unsupportedOperation', async () => {
187
+ const model = new MockMessageModel().addTurn({ type: 'textBlock', text: '' });
188
+ const agent = new Agent({ model, printer: false });
189
+ const executor = new A2AExecutor(agent);
190
+ const eventBus = createMockEventBus();
191
+ await expect(executor.cancelTask('task-1', eventBus)).rejects.toThrow('Task cancellation is not supported');
192
+ expect(eventBus.events).toStrictEqual([]);
193
+ });
194
+ });
195
+ });
196
+ //# sourceMappingURL=executor.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"executor.test.js","sourceRoot":"","sources":["../../../../src/a2a/__tests__/executor.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=server.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"server.test.d.ts","sourceRoot":"","sources":["../../../../src/a2a/__tests__/server.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,51 @@
1
+ import { describe, expect, it, vi } from 'vitest';
2
+ import { A2AServer } from '../server.js';
3
+ import { Agent } from '../../agent/agent.js';
4
+ import { MockMessageModel } from '../../__fixtures__/mock-message-model.js';
5
+ describe('A2AServer', () => {
6
+ describe('constructor', () => {
7
+ it('builds agent card with provided values', () => {
8
+ const model = new MockMessageModel().addTurn({ type: 'textBlock', text: 'Hello' });
9
+ const server = new A2AServer({
10
+ agent: new Agent({ model, printer: false }),
11
+ name: 'Base Agent',
12
+ description: 'A base agent',
13
+ httpUrl: 'http://example.com',
14
+ version: '2.0.0',
15
+ });
16
+ expect(server.agentCard).toStrictEqual({
17
+ name: 'Base Agent',
18
+ description: 'A base agent',
19
+ version: '2.0.0',
20
+ protocolVersion: '0.2.0',
21
+ url: 'http://example.com',
22
+ defaultInputModes: ['text/plain'],
23
+ defaultOutputModes: ['text/plain'],
24
+ skills: [],
25
+ capabilities: { streaming: true },
26
+ });
27
+ });
28
+ it('uses default values when optional config is omitted', () => {
29
+ const model = new MockMessageModel().addTurn({ type: 'textBlock', text: 'Hello' });
30
+ const server = new A2AServer({
31
+ agent: new Agent({ model, printer: false }),
32
+ name: 'Minimal Agent',
33
+ });
34
+ expect(server.agentCard.description).toBe('');
35
+ expect(server.agentCard.version).toBe('0.0.1');
36
+ expect(server.agentCard.url).toBe('');
37
+ expect(server.agentCard.skills).toStrictEqual([]);
38
+ });
39
+ it('accepts custom taskStore', () => {
40
+ const model = new MockMessageModel().addTurn({ type: 'textBlock', text: 'Hello' });
41
+ const taskStore = { save: vi.fn(), load: vi.fn() };
42
+ const server = new A2AServer({
43
+ agent: new Agent({ model, printer: false }),
44
+ name: 'Agent',
45
+ taskStore,
46
+ });
47
+ expect(server.agentCard).toBeDefined();
48
+ });
49
+ });
50
+ });
51
+ //# sourceMappingURL=server.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"server.test.js","sourceRoot":"","sources":["../../../../src/a2a/__tests__/server.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=server.test.node.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"server.test.node.d.ts","sourceRoot":"","sources":["../../../../src/a2a/__tests__/server.test.node.ts"],"names":[],"mappings":""}
@@ -0,0 +1,110 @@
1
+ import { describe, expect, it, vi } from 'vitest';
2
+ import { A2AExpressServer } from '../express-server.js';
3
+ import { A2AServer } from '../server.js';
4
+ import { Agent } from '../../agent/agent.js';
5
+ import { MockMessageModel } from '../../__fixtures__/mock-message-model.js';
6
+ // Mock express
7
+ vi.mock('express', () => {
8
+ const mockRouter = {
9
+ get: vi.fn(),
10
+ post: vi.fn(),
11
+ use: vi.fn(),
12
+ };
13
+ const mockApp = {
14
+ use: vi.fn(),
15
+ listen: vi.fn((_port, _host, cb) => {
16
+ cb();
17
+ return { on: vi.fn(), close: vi.fn(), address: () => ({ port: _port || 54321 }) };
18
+ }),
19
+ };
20
+ const express = Object.assign(vi.fn(() => mockApp), {
21
+ Router: vi.fn(() => mockRouter),
22
+ json: vi.fn(() => 'json-middleware'),
23
+ });
24
+ return { default: express };
25
+ });
26
+ // Mock A2A SDK express middleware
27
+ const mockAgentCardHandler = vi.fn(() => 'agent-card-handler');
28
+ const mockJsonRpcHandler = vi.fn(() => 'json-rpc-handler');
29
+ vi.mock('@a2a-js/sdk/server/express', () => ({
30
+ agentCardHandler: (...args) => mockAgentCardHandler(...args),
31
+ jsonRpcHandler: (...args) => mockJsonRpcHandler(...args),
32
+ UserBuilder: { noAuthentication: vi.fn() },
33
+ }));
34
+ function createTestConfig(overrides) {
35
+ const model = new MockMessageModel().addTurn({ type: 'textBlock', text: 'Hello' });
36
+ return {
37
+ agent: new Agent({ model, printer: false }),
38
+ name: 'Test Agent',
39
+ ...overrides,
40
+ };
41
+ }
42
+ describe('A2AExpressServer', () => {
43
+ describe('constructor', () => {
44
+ it('builds agent card with default values', () => {
45
+ const server = new A2AExpressServer(createTestConfig());
46
+ expect(server.agentCard).toStrictEqual({
47
+ name: 'Test Agent',
48
+ description: '',
49
+ version: '0.0.1',
50
+ protocolVersion: '0.2.0',
51
+ url: 'http://127.0.0.1:9000',
52
+ defaultInputModes: ['text/plain'],
53
+ defaultOutputModes: ['text/plain'],
54
+ skills: [],
55
+ capabilities: { streaming: true },
56
+ });
57
+ });
58
+ it('uses custom config values', () => {
59
+ const server = new A2AExpressServer(createTestConfig({
60
+ description: 'A helpful agent',
61
+ host: '0.0.0.0',
62
+ port: 8080,
63
+ version: '1.0.0',
64
+ skills: [{ id: 'skill-1', name: 'Skill 1', description: 'A skill', tags: [] }],
65
+ }));
66
+ expect(server.agentCard).toStrictEqual({
67
+ name: 'Test Agent',
68
+ description: 'A helpful agent',
69
+ version: '1.0.0',
70
+ protocolVersion: '0.2.0',
71
+ url: 'http://0.0.0.0:8080',
72
+ defaultInputModes: ['text/plain'],
73
+ defaultOutputModes: ['text/plain'],
74
+ skills: [{ id: 'skill-1', name: 'Skill 1', description: 'A skill', tags: [] }],
75
+ capabilities: { streaming: true },
76
+ });
77
+ });
78
+ it('uses httpUrl override when provided', () => {
79
+ const server = new A2AExpressServer(createTestConfig({ httpUrl: 'https://my-agent.example.com' }));
80
+ expect(server.agentCard.url).toBe('https://my-agent.example.com');
81
+ });
82
+ it('accepts custom taskStore', () => {
83
+ const taskStore = { save: vi.fn(), load: vi.fn() };
84
+ const server = new A2AExpressServer(createTestConfig({ taskStore }));
85
+ expect(server.agentCard).toBeDefined();
86
+ });
87
+ it('is an instance of A2AServer', () => {
88
+ const server = new A2AExpressServer(createTestConfig());
89
+ expect(server).toBeInstanceOf(A2AServer);
90
+ });
91
+ });
92
+ describe('createMiddleware', () => {
93
+ it('returns an express router with SDK middleware', async () => {
94
+ const server = new A2AExpressServer(createTestConfig());
95
+ const router = server.createMiddleware();
96
+ expect(router).toBeDefined();
97
+ expect(router.use).toHaveBeenCalledTimes(2);
98
+ expect(router.use).toHaveBeenCalledWith('/.well-known/agent-card.json', 'agent-card-handler');
99
+ expect(router.use).toHaveBeenCalledWith('/', 'json-rpc-handler');
100
+ expect(mockAgentCardHandler).toHaveBeenCalledWith({
101
+ agentCardProvider: expect.objectContaining({ getAgentCard: expect.any(Function) }),
102
+ });
103
+ expect(mockJsonRpcHandler).toHaveBeenCalledWith({
104
+ requestHandler: expect.anything(),
105
+ userBuilder: expect.anything(),
106
+ });
107
+ });
108
+ });
109
+ });
110
+ //# sourceMappingURL=server.test.node.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"server.test.node.js","sourceRoot":"","sources":["../../../../src/a2a/__tests__/server.test.node.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,132 @@
1
+ /**
2
+ * A2A agent that wraps a remote A2A agent as an InvokableAgent.
3
+ *
4
+ * Implements the InvokableAgent interface so it can be used anywhere a local Agent
5
+ * can be used. The remote agent is invoked via the A2A protocol.
6
+ * The A2A protocol is experimental, so breaking changes in the underlying SDK
7
+ * may require breaking changes in this module.
8
+ */
9
+ import type { InvokableAgent, InvokeArgs, InvokeOptions } from '../types/agent.js';
10
+ import { AgentResult } from '../types/agent.js';
11
+ import { type A2AStreamEvent } from './events.js';
12
+ /**
13
+ * Configuration options for creating an A2AAgent.
14
+ */
15
+ export interface A2AAgentConfig {
16
+ /** Base URL of the remote A2A agent */
17
+ url: string;
18
+ /** Path to the agent card endpoint (default: '/.well-known/agent-card.json') */
19
+ agentCardPath?: string;
20
+ /** Optional unique identifier. Defaults to the URL. */
21
+ id?: string;
22
+ /** Optional name. If not provided, populated from the agent card after connection. */
23
+ name?: string;
24
+ /** Optional description. If not provided, populated from the agent card after connection. */
25
+ description?: string;
26
+ }
27
+ /**
28
+ * Wraps a remote A2A agent as an InvokableAgent.
29
+ *
30
+ * Implements `InvokableAgent` so it can be used polymorphically with local `Agent` instances.
31
+ * On invocation, the agent lazily connects to the remote endpoint via the A2A protocol
32
+ * and returns the response as an `AgentResult`.
33
+ *
34
+ * @example
35
+ * ```typescript
36
+ * import { A2AAgent } from '@strands-agents/sdk/a2a'
37
+ *
38
+ * const remoteAgent = new A2AAgent({ url: 'http://localhost:9000' })
39
+ * const result = await remoteAgent.invoke('Hello, remote agent!')
40
+ * console.log(result.toString())
41
+ * ```
42
+ */
43
+ export declare class A2AAgent implements InvokableAgent {
44
+ private _config;
45
+ private _client;
46
+ private _agentCard;
47
+ /**
48
+ * The unique identifier of the agent instance.
49
+ */
50
+ readonly id: string;
51
+ /**
52
+ * The name of the agent.
53
+ * If not provided in config, populated from the agent card after connection.
54
+ */
55
+ readonly name?: string;
56
+ /**
57
+ * Optional description of what the agent does.
58
+ * If not provided in config, populated from the agent card after connection.
59
+ */
60
+ readonly description?: string;
61
+ /**
62
+ * Creates a new A2AAgent.
63
+ *
64
+ * @param config - Configuration for connecting to the remote agent
65
+ */
66
+ constructor(config: A2AAgentConfig);
67
+ /**
68
+ * Invokes the remote agent and returns the final result.
69
+ *
70
+ * Built on top of `stream()` — consumes the full event stream and returns the final result.
71
+ *
72
+ * @param args - Arguments for invoking the agent
73
+ * @param options - Optional invocation options (unused for remote agents)
74
+ * @returns Promise that resolves to the AgentResult
75
+ */
76
+ invoke(args: InvokeArgs, options?: InvokeOptions): Promise<AgentResult>;
77
+ /**
78
+ * Streams the remote agent execution, yielding A2A events as they arrive.
79
+ *
80
+ * Yields `A2AStreamUpdateEvent` for each raw A2A protocol event (Message, Task,
81
+ * TaskStatusUpdateEvent, TaskArtifactUpdateEvent), followed by an `A2AResultEvent`
82
+ * containing the final result built from the last complete event.
83
+ *
84
+ * @param args - Arguments for invoking the agent
85
+ * @param _options - Optional invocation options (unused for remote agents)
86
+ * @returns Async generator that yields AgentStreamEvent objects and returns AgentResult
87
+ */
88
+ stream(args: InvokeArgs, _options?: InvokeOptions): AsyncGenerator<A2AStreamEvent, AgentResult, undefined>;
89
+ /**
90
+ * Returns the cached A2A SDK client, creating one lazily on first use.
91
+ * Also fetches and caches the agent card for name/description.
92
+ *
93
+ * @returns The A2A SDK client
94
+ */
95
+ private _getClient;
96
+ /**
97
+ * Extracts a text string from InvokeArgs for sending to the remote agent.
98
+ *
99
+ * @param args - The invocation arguments
100
+ * @returns The extracted text string
101
+ */
102
+ private _extractTextFromArgs;
103
+ /**
104
+ * Checks whether an A2A streaming event represents a complete response.
105
+ *
106
+ * @param event - The A2A streaming event
107
+ * @returns True if the event is a terminal/complete event
108
+ */
109
+ private _isCompleteEvent;
110
+ /**
111
+ * Builds an AgentResult from the final A2A streaming event.
112
+ *
113
+ * @param event - The final A2A event, or undefined if no events were received
114
+ * @returns The constructed AgentResult
115
+ */
116
+ private _buildResult;
117
+ /**
118
+ * Extracts text content from an A2A streaming event.
119
+ *
120
+ * @param event - The A2A streaming event
121
+ * @returns Extracted text content
122
+ */
123
+ private _extractTextFromEvent;
124
+ /**
125
+ * Joins text from A2A parts, filtering out non-text parts.
126
+ *
127
+ * @param parts - Array of A2A parts
128
+ * @returns Joined text content
129
+ */
130
+ private _textFromParts;
131
+ }
132
+ //# sourceMappingURL=a2a-agent.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"a2a-agent.d.ts","sourceRoot":"","sources":["../../../src/a2a/a2a-agent.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAKH,OAAO,KAAK,EAAE,cAAc,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAA;AAClF,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAA;AAE/C,OAAO,EAA2D,KAAK,cAAc,EAAE,MAAM,aAAa,CAAA;AAI1G;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,uCAAuC;IACvC,GAAG,EAAE,MAAM,CAAA;IACX,gFAAgF;IAChF,aAAa,CAAC,EAAE,MAAM,CAAA;IACtB,uDAAuD;IACvD,EAAE,CAAC,EAAE,MAAM,CAAA;IACX,sFAAsF;IACtF,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,6FAA6F;IAC7F,WAAW,CAAC,EAAE,MAAM,CAAA;CACrB;AAED;;;;;;;;;;;;;;;GAeG;AACH,qBAAa,QAAS,YAAW,cAAc;IAC7C,OAAO,CAAC,OAAO,CAAgB;IAC/B,OAAO,CAAC,OAAO,CAA0B;IACzC,OAAO,CAAC,UAAU,CAAuB;IAEzC;;OAEG;IACH,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAA;IAEnB;;;OAGG;IACH,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAA;IAEtB;;;OAGG;IACH,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAA;IAE7B;;;;OAIG;gBACS,MAAM,EAAE,cAAc;IAOlC;;;;;;;;OAQG;IACG,MAAM,CAAC,IAAI,EAAE,UAAU,EAAE,OAAO,CAAC,EAAE,aAAa,GAAG,OAAO,CAAC,WAAW,CAAC;IAS7E;;;;;;;;;;OAUG;IACI,MAAM,CAAC,IAAI,EAAE,UAAU,EAAE,QAAQ,CAAC,EAAE,aAAa,GAAG,cAAc,CAAC,cAAc,EAAE,WAAW,EAAE,SAAS,CAAC;IA6CjH;;;;;OAKG;YACW,UAAU;IAoBxB;;;;;OAKG;IACH,OAAO,CAAC,oBAAoB;IA4B5B;;;;;OAKG;IACH,OAAO,CAAC,gBAAgB;IAQxB;;;;;OAKG;IACH,OAAO,CAAC,YAAY;IASpB;;;;;OAKG;IACH,OAAO,CAAC,qBAAqB;IAkB7B;;;;;OAKG;IACH,OAAO,CAAC,cAAc;CAMvB"}