@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,59 @@
1
+ /**
2
+ * Abstract base class for conversation history management.
3
+ *
4
+ * This module defines the ConversationManager abstraction, which provides a
5
+ * domain-specific interface for managing an agent's conversation context.
6
+ */
7
+ import { AfterModelCallEvent } from '../hooks/events.js';
8
+ import { ContextWindowOverflowError } from '../errors.js';
9
+ /**
10
+ * Abstract base class for conversation history management strategies.
11
+ *
12
+ * The primary responsibility of a ConversationManager is overflow recovery: when the
13
+ * model returns a {@link ContextWindowOverflowError}, {@link ConversationManager.reduce}
14
+ * is called and MUST reduce the history enough for the next model call to succeed.
15
+ * If `reduce` returns `false` (no reduction performed), the error propagates out of
16
+ * the agent loop uncaught. This makes `reduce` a critical operation — implementations
17
+ * must be able to make meaningful progress when called with `error` set.
18
+ *
19
+ * Optionally, a manager can also do proactive management (e.g. trimming after every
20
+ * invocation to stay within a window) by overriding `initAgent`, calling
21
+ * `super.initAgent(agent)` to preserve overflow recovery, then registering additional hooks.
22
+ *
23
+ * @example
24
+ * ```typescript
25
+ * class Last10MessagesManager extends ConversationManager {
26
+ * readonly name = 'my:last-10-messages'
27
+ *
28
+ * reduce({ agent }: ReduceOptions): boolean {
29
+ * if (agent.messages.length <= 10) return false
30
+ * agent.messages.splice(0, agent.messages.length - 10)
31
+ * return true
32
+ * }
33
+ * }
34
+ * ```
35
+ */
36
+ export class ConversationManager {
37
+ /**
38
+ * Initialize the conversation manager with the agent instance.
39
+ *
40
+ * Registers overflow recovery: when a {@link ContextWindowOverflowError} occurs,
41
+ * calls {@link ConversationManager.reduce} and retries the model call if reduction succeeded.
42
+ * If `reduce` returns `false`, the error propagates out of the agent loop uncaught.
43
+ *
44
+ * Subclasses that need proactive management MUST call `super.initAgent(agent)` to
45
+ * preserve this overflow recovery behavior.
46
+ *
47
+ * @param agent - The agent to register hooks with
48
+ */
49
+ initAgent(agent) {
50
+ agent.addHook(AfterModelCallEvent, (event) => {
51
+ if (event.error instanceof ContextWindowOverflowError) {
52
+ if (this.reduce({ agent: event.agent, error: event.error })) {
53
+ event.retry = true;
54
+ }
55
+ }
56
+ });
57
+ }
58
+ }
59
+ //# sourceMappingURL=conversation-manager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"conversation-manager.js","sourceRoot":"","sources":["../../../src/conversation-manager/conversation-manager.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH,OAAO,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAA;AACxD,OAAO,EAAE,0BAA0B,EAAE,MAAM,cAAc,CAAA;AAmBzD;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AACH,MAAM,OAAgB,mBAAmB;IAuBvC;;;;;;;;;;;OAWG;IACH,SAAS,CAAC,KAAiB;QACzB,KAAK,CAAC,OAAO,CAAC,mBAAmB,EAAE,CAAC,KAAK,EAAE,EAAE;YAC3C,IAAI,KAAK,CAAC,KAAK,YAAY,0BAA0B,EAAE,CAAC;gBACtD,IAAI,IAAI,CAAC,MAAM,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE,CAAC,EAAE,CAAC;oBAC5D,KAAK,CAAC,KAAK,GAAG,IAAI,CAAA;gBACpB,CAAC;YACH,CAAC;QACH,CAAC,CAAC,CAAA;IACJ,CAAC;CACF"}
@@ -3,6 +3,7 @@
3
3
  *
4
4
  * This module exports conversation manager implementations.
5
5
  */
6
+ export { ConversationManager, type ConversationManagerReduceOptions as ReduceOptions } from './conversation-manager.js';
6
7
  export { NullConversationManager } from './null-conversation-manager.js';
7
8
  export { SlidingWindowConversationManager, type SlidingWindowConversationManagerConfig, } from './sliding-window-conversation-manager.js';
8
9
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/conversation-manager/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,uBAAuB,EAAE,MAAM,gCAAgC,CAAA;AACxE,OAAO,EACL,gCAAgC,EAChC,KAAK,sCAAsC,GAC5C,MAAM,0CAA0C,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/conversation-manager/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,mBAAmB,EAAE,KAAK,gCAAgC,IAAI,aAAa,EAAE,MAAM,2BAA2B,CAAA;AACvH,OAAO,EAAE,uBAAuB,EAAE,MAAM,gCAAgC,CAAA;AACxE,OAAO,EACL,gCAAgC,EAChC,KAAK,sCAAsC,GAC5C,MAAM,0CAA0C,CAAA"}
@@ -3,6 +3,7 @@
3
3
  *
4
4
  * This module exports conversation manager implementations.
5
5
  */
6
+ export { ConversationManager } from './conversation-manager.js';
6
7
  export { NullConversationManager } from './null-conversation-manager.js';
7
8
  export { SlidingWindowConversationManager, } from './sliding-window-conversation-manager.js';
8
9
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/conversation-manager/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,uBAAuB,EAAE,MAAM,gCAAgC,CAAA;AACxE,OAAO,EACL,gCAAgC,GAEjC,MAAM,0CAA0C,CAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/conversation-manager/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,mBAAmB,EAA0D,MAAM,2BAA2B,CAAA;AACvH,OAAO,EAAE,uBAAuB,EAAE,MAAM,gCAAgC,CAAA;AACxE,OAAO,EACL,gCAAgC,GAEjC,MAAM,0CAA0C,CAAA"}
@@ -5,19 +5,23 @@
5
5
  * the conversation history. Useful for testing and scenarios where conversation
6
6
  * management is handled externally.
7
7
  */
8
- import type { HookProvider } from '../hooks/types.js';
9
- import type { HookRegistry } from '../hooks/registry.js';
8
+ import { ConversationManager, type ConversationManagerReduceOptions } from './conversation-manager.js';
10
9
  /**
11
10
  * A no-op conversation manager that does not modify the conversation history.
12
- * Implements HookProvider but registers zero hooks.
11
+ *
12
+ * Does not register any proactive hooks. Overflow errors will not be retried
13
+ * since `reduce` always returns `false`.
13
14
  */
14
- export declare class NullConversationManager implements HookProvider {
15
+ export declare class NullConversationManager extends ConversationManager {
16
+ /**
17
+ * Unique identifier for this conversation manager.
18
+ */
19
+ readonly name = "strands:null-conversation-manager";
15
20
  /**
16
- * Registers callbacks with the hook registry.
17
- * This implementation registers no hooks, providing a complete no-op behavior.
21
+ * No-op reduction never modifies the conversation history.
18
22
  *
19
- * @param _registry - The hook registry to register callbacks with (unused)
23
+ * @returns `false` always
20
24
  */
21
- registerCallbacks(_registry: HookRegistry): void;
25
+ reduce(_args: ConversationManagerReduceOptions): boolean;
22
26
  }
23
27
  //# sourceMappingURL=null-conversation-manager.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"null-conversation-manager.d.ts","sourceRoot":"","sources":["../../../src/conversation-manager/null-conversation-manager.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAA;AACrD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAA;AAExD;;;GAGG;AACH,qBAAa,uBAAwB,YAAW,YAAY;IAC1D;;;;;OAKG;IACI,iBAAiB,CAAC,SAAS,EAAE,YAAY,GAAG,IAAI;CAGxD"}
1
+ {"version":3,"file":"null-conversation-manager.d.ts","sourceRoot":"","sources":["../../../src/conversation-manager/null-conversation-manager.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,mBAAmB,EAAE,KAAK,gCAAgC,EAAE,MAAM,2BAA2B,CAAA;AAEtG;;;;;GAKG;AACH,qBAAa,uBAAwB,SAAQ,mBAAmB;IAC9D;;OAEG;IACH,QAAQ,CAAC,IAAI,uCAAsC;IAEnD;;;;OAIG;IACH,MAAM,CAAC,KAAK,EAAE,gCAAgC,GAAG,OAAO;CAGzD"}
@@ -5,19 +5,25 @@
5
5
  * the conversation history. Useful for testing and scenarios where conversation
6
6
  * management is handled externally.
7
7
  */
8
+ import { ConversationManager } from './conversation-manager.js';
8
9
  /**
9
10
  * A no-op conversation manager that does not modify the conversation history.
10
- * Implements HookProvider but registers zero hooks.
11
+ *
12
+ * Does not register any proactive hooks. Overflow errors will not be retried
13
+ * since `reduce` always returns `false`.
11
14
  */
12
- export class NullConversationManager {
15
+ export class NullConversationManager extends ConversationManager {
16
+ /**
17
+ * Unique identifier for this conversation manager.
18
+ */
19
+ name = 'strands:null-conversation-manager';
13
20
  /**
14
- * Registers callbacks with the hook registry.
15
- * This implementation registers no hooks, providing a complete no-op behavior.
21
+ * No-op reduction never modifies the conversation history.
16
22
  *
17
- * @param _registry - The hook registry to register callbacks with (unused)
23
+ * @returns `false` always
18
24
  */
19
- registerCallbacks(_registry) {
20
- // No-op - register zero hooks
25
+ reduce(_args) {
26
+ return false;
21
27
  }
22
28
  }
23
29
  //# sourceMappingURL=null-conversation-manager.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"null-conversation-manager.js","sourceRoot":"","sources":["../../../src/conversation-manager/null-conversation-manager.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAKH;;;GAGG;AACH,MAAM,OAAO,uBAAuB;IAClC;;;;;OAKG;IACI,iBAAiB,CAAC,SAAuB;QAC9C,8BAA8B;IAChC,CAAC;CACF"}
1
+ {"version":3,"file":"null-conversation-manager.js","sourceRoot":"","sources":["../../../src/conversation-manager/null-conversation-manager.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,mBAAmB,EAAyC,MAAM,2BAA2B,CAAA;AAEtG;;;;;GAKG;AACH,MAAM,OAAO,uBAAwB,SAAQ,mBAAmB;IAC9D;;OAEG;IACM,IAAI,GAAG,mCAAmC,CAAA;IAEnD;;;;OAIG;IACH,MAAM,CAAC,KAAuC;QAC5C,OAAO,KAAK,CAAA;IACd,CAAC;CACF"}
@@ -4,8 +4,8 @@
4
4
  * This module provides a sliding window strategy for managing conversation history
5
5
  * that preserves tool usage pairs and avoids invalid window states.
6
6
  */
7
- import type { HookProvider } from '../hooks/types.js';
8
- import type { HookRegistry } from '../hooks/registry.js';
7
+ import type { LocalAgent } from '../types/agent.js';
8
+ import { ConversationManager, type ConversationManagerReduceOptions } from './conversation-manager.js';
9
9
  /**
10
10
  * Configuration for the sliding window conversation manager.
11
11
  */
@@ -29,13 +29,17 @@ export type SlidingWindowConversationManagerConfig = {
29
29
  * the window size, it will either truncate large tool results or remove the oldest
30
30
  * messages while ensuring tool use/result pairs remain valid.
31
31
  *
32
- * As a HookProvider, it registers callbacks for:
32
+ * Registers hooks for:
33
33
  * - AfterInvocationEvent: Applies sliding window management after each invocation
34
- * - AfterModelCallEvent: Reduces context on overflow errors and requests retry
34
+ * - AfterModelCallEvent: Reduces context on overflow errors and requests retry (via super)
35
35
  */
36
- export declare class SlidingWindowConversationManager implements HookProvider {
36
+ export declare class SlidingWindowConversationManager extends ConversationManager {
37
37
  private readonly _windowSize;
38
38
  private readonly _shouldTruncateResults;
39
+ /**
40
+ * Unique identifier for this conversation manager.
41
+ */
42
+ readonly name = "strands:sliding-window-conversation-manager";
39
43
  /**
40
44
  * Initialize the sliding window conversation manager.
41
45
  *
@@ -43,25 +47,32 @@ export declare class SlidingWindowConversationManager implements HookProvider {
43
47
  */
44
48
  constructor(config?: SlidingWindowConversationManagerConfig);
45
49
  /**
46
- * Registers callbacks with the hook registry.
50
+ * Initialize the plugin by registering hooks with the agent.
47
51
  *
48
52
  * Registers:
49
53
  * - AfterInvocationEvent callback to apply sliding window management
50
- * - AfterModelCallEvent callback to handle context overflow and request retry
54
+ * - AfterModelCallEvent callback to handle context overflow and request retry (via super)
51
55
  *
52
- * @param registry - The hook registry to register callbacks with
56
+ * @param agent - The agent to register hooks with
53
57
  */
54
- registerCallbacks(registry: HookRegistry): void;
58
+ initAgent(agent: LocalAgent): void;
59
+ /**
60
+ * Reduce the conversation history in response to a context overflow.
61
+ *
62
+ * Attempts to truncate large tool results first before falling back to message trimming.
63
+ *
64
+ * @param options - The reduction options
65
+ * @returns `true` if the history was reduced, `false` otherwise
66
+ */
67
+ reduce({ agent, error }: ConversationManagerReduceOptions): boolean;
55
68
  /**
56
69
  * Apply the sliding window to the messages array to maintain a manageable history size.
57
70
  *
58
- * This method is called after every agent loop cycle to apply a sliding window if the message
59
- * count exceeds the window size. If the number of messages is within the window size, no action
60
- * is taken.
71
+ * Called after every agent invocation. No-op if within the window size.
61
72
  *
62
73
  * @param messages - The message array to manage. Modified in-place.
63
74
  */
64
- private applyManagement;
75
+ private _applyManagement;
65
76
  /**
66
77
  * Trim the oldest messages to reduce the conversation context size.
67
78
  *
@@ -76,11 +87,9 @@ export declare class SlidingWindowConversationManager implements HookProvider {
76
87
  *
77
88
  * @param messages - The message array to reduce. Modified in-place.
78
89
  * @param _error - The error that triggered the context reduction, if any.
79
- *
80
- * @throws ContextWindowOverflowError If the context cannot be reduced further,
81
- * such as when the conversation is already minimal or when no valid trim point exists.
90
+ * @returns `true` if any reduction occurred, `false` otherwise.
82
91
  */
83
- private reduceContext;
92
+ private _reduceContext;
84
93
  /**
85
94
  * Truncate tool results in a message to reduce context size.
86
95
  *
@@ -91,7 +100,7 @@ export declare class SlidingWindowConversationManager implements HookProvider {
91
100
  * @param msgIdx - Index of the message containing tool results to truncate.
92
101
  * @returns True if any changes were made to the message, false otherwise.
93
102
  */
94
- private truncateToolResults;
103
+ private _truncateToolResults;
95
104
  /**
96
105
  * Find the index of the last message containing tool results.
97
106
  *
@@ -100,6 +109,6 @@ export declare class SlidingWindowConversationManager implements HookProvider {
100
109
  * @param messages - The conversation message history.
101
110
  * @returns Index of the last message with tool results, or undefined if no such message exists.
102
111
  */
103
- private findLastMessageWithToolResults;
112
+ private _findLastMessageWithToolResults;
104
113
  }
105
114
  //# sourceMappingURL=sliding-window-conversation-manager.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"sliding-window-conversation-manager.d.ts","sourceRoot":"","sources":["../../../src/conversation-manager/sliding-window-conversation-manager.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAA;AACrD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAA;AAGxD;;GAEG;AACH,MAAM,MAAM,sCAAsC,GAAG;IACnD;;;OAGG;IACH,UAAU,CAAC,EAAE,MAAM,CAAA;IAEnB;;;OAGG;IACH,qBAAqB,CAAC,EAAE,OAAO,CAAA;CAChC,CAAA;AAED;;;;;;;;;;;GAWG;AACH,qBAAa,gCAAiC,YAAW,YAAY;IACnE,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAQ;IACpC,OAAO,CAAC,QAAQ,CAAC,sBAAsB,CAAS;IAEhD;;;;OAIG;gBACS,MAAM,CAAC,EAAE,sCAAsC;IAK3D;;;;;;;;OAQG;IACI,iBAAiB,CAAC,QAAQ,EAAE,YAAY,GAAG,IAAI;IAetD;;;;;;;;OAQG;IACH,OAAO,CAAC,eAAe;IAQvB;;;;;;;;;;;;;;;;;OAiBG;IACH,OAAO,CAAC,aAAa;IAuDrB;;;;;;;;;OASG;IACH,OAAO,CAAC,mBAAmB;IA0D3B;;;;;;;OAOG;IACH,OAAO,CAAC,8BAA8B;CAcvC"}
1
+ {"version":3,"file":"sliding-window-conversation-manager.d.ts","sourceRoot":"","sources":["../../../src/conversation-manager/sliding-window-conversation-manager.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAA;AAEnD,OAAO,EAAE,mBAAmB,EAAE,KAAK,gCAAgC,EAAE,MAAM,2BAA2B,CAAA;AAGtG;;GAEG;AACH,MAAM,MAAM,sCAAsC,GAAG;IACnD;;;OAGG;IACH,UAAU,CAAC,EAAE,MAAM,CAAA;IAEnB;;;OAGG;IACH,qBAAqB,CAAC,EAAE,OAAO,CAAA;CAChC,CAAA;AAED;;;;;;;;;;;GAWG;AACH,qBAAa,gCAAiC,SAAQ,mBAAmB;IACvE,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAQ;IACpC,OAAO,CAAC,QAAQ,CAAC,sBAAsB,CAAS;IAEhD;;OAEG;IACH,QAAQ,CAAC,IAAI,iDAAgD;IAE7D;;;;OAIG;gBACS,MAAM,CAAC,EAAE,sCAAsC;IAM3D;;;;;;;;OAQG;IACa,SAAS,CAAC,KAAK,EAAE,UAAU,GAAG,IAAI;IAQlD;;;;;;;OAOG;IACH,MAAM,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE,gCAAgC,GAAG,OAAO;IAInE;;;;;;OAMG;IACH,OAAO,CAAC,gBAAgB;IAQxB;;;;;;;;;;;;;;;OAeG;IACH,OAAO,CAAC,cAAc;IA2DtB;;;;;;;;;OASG;IACH,OAAO,CAAC,oBAAoB;IA0D5B;;;;;;;OAOG;IACH,OAAO,CAAC,+BAA+B;CAcxC"}
@@ -4,9 +4,10 @@
4
4
  * This module provides a sliding window strategy for managing conversation history
5
5
  * that preserves tool usage pairs and avoids invalid window states.
6
6
  */
7
- import { ContextWindowOverflowError } from '../errors.js';
8
7
  import { Message, TextBlock, ToolResultBlock } from '../types/messages.js';
9
- import { AfterInvocationEvent, AfterModelCallEvent } from '../hooks/events.js';
8
+ import { AfterInvocationEvent } from '../hooks/events.js';
9
+ import { ConversationManager } from './conversation-manager.js';
10
+ import { logger } from '../logging/logger.js';
10
11
  /**
11
12
  * Implements a sliding window strategy for managing conversation history.
12
13
  *
@@ -15,58 +16,65 @@ import { AfterInvocationEvent, AfterModelCallEvent } from '../hooks/events.js';
15
16
  * the window size, it will either truncate large tool results or remove the oldest
16
17
  * messages while ensuring tool use/result pairs remain valid.
17
18
  *
18
- * As a HookProvider, it registers callbacks for:
19
+ * Registers hooks for:
19
20
  * - AfterInvocationEvent: Applies sliding window management after each invocation
20
- * - AfterModelCallEvent: Reduces context on overflow errors and requests retry
21
+ * - AfterModelCallEvent: Reduces context on overflow errors and requests retry (via super)
21
22
  */
22
- export class SlidingWindowConversationManager {
23
+ export class SlidingWindowConversationManager extends ConversationManager {
23
24
  _windowSize;
24
25
  _shouldTruncateResults;
26
+ /**
27
+ * Unique identifier for this conversation manager.
28
+ */
29
+ name = 'strands:sliding-window-conversation-manager';
25
30
  /**
26
31
  * Initialize the sliding window conversation manager.
27
32
  *
28
33
  * @param config - Configuration options for the sliding window manager.
29
34
  */
30
35
  constructor(config) {
36
+ super();
31
37
  this._windowSize = config?.windowSize ?? 40;
32
38
  this._shouldTruncateResults = config?.shouldTruncateResults ?? true;
33
39
  }
34
40
  /**
35
- * Registers callbacks with the hook registry.
41
+ * Initialize the plugin by registering hooks with the agent.
36
42
  *
37
43
  * Registers:
38
44
  * - AfterInvocationEvent callback to apply sliding window management
39
- * - AfterModelCallEvent callback to handle context overflow and request retry
45
+ * - AfterModelCallEvent callback to handle context overflow and request retry (via super)
40
46
  *
41
- * @param registry - The hook registry to register callbacks with
47
+ * @param agent - The agent to register hooks with
42
48
  */
43
- registerCallbacks(registry) {
44
- // Apply sliding window management after each invocation
45
- registry.addCallback(AfterInvocationEvent, (event) => {
46
- this.applyManagement(event.agent.messages);
47
- });
48
- // Handle context overflow errors
49
- registry.addCallback(AfterModelCallEvent, (event) => {
50
- if (event.error instanceof ContextWindowOverflowError) {
51
- this.reduceContext(event.agent.messages, event.error);
52
- event.retry = true;
53
- }
49
+ initAgent(agent) {
50
+ super.initAgent(agent);
51
+ agent.addHook(AfterInvocationEvent, (event) => {
52
+ this._applyManagement(event.agent.messages);
54
53
  });
55
54
  }
55
+ /**
56
+ * Reduce the conversation history in response to a context overflow.
57
+ *
58
+ * Attempts to truncate large tool results first before falling back to message trimming.
59
+ *
60
+ * @param options - The reduction options
61
+ * @returns `true` if the history was reduced, `false` otherwise
62
+ */
63
+ reduce({ agent, error }) {
64
+ return this._reduceContext(agent.messages, error);
65
+ }
56
66
  /**
57
67
  * Apply the sliding window to the messages array to maintain a manageable history size.
58
68
  *
59
- * This method is called after every agent loop cycle to apply a sliding window if the message
60
- * count exceeds the window size. If the number of messages is within the window size, no action
61
- * is taken.
69
+ * Called after every agent invocation. No-op if within the window size.
62
70
  *
63
71
  * @param messages - The message array to manage. Modified in-place.
64
72
  */
65
- applyManagement(messages) {
73
+ _applyManagement(messages) {
66
74
  if (messages.length <= this._windowSize) {
67
75
  return;
68
76
  }
69
- this.reduceContext(messages);
77
+ this._reduceContext(messages, undefined);
70
78
  }
71
79
  /**
72
80
  * Trim the oldest messages to reduce the conversation context size.
@@ -82,17 +90,15 @@ export class SlidingWindowConversationManager {
82
90
  *
83
91
  * @param messages - The message array to reduce. Modified in-place.
84
92
  * @param _error - The error that triggered the context reduction, if any.
85
- *
86
- * @throws ContextWindowOverflowError If the context cannot be reduced further,
87
- * such as when the conversation is already minimal or when no valid trim point exists.
93
+ * @returns `true` if any reduction occurred, `false` otherwise.
88
94
  */
89
- reduceContext(messages, _error) {
95
+ _reduceContext(messages, _error) {
90
96
  // Only truncate tool results when handling a context overflow error, not for window size enforcement
91
- const lastMessageIdxWithToolResults = this.findLastMessageWithToolResults(messages);
97
+ const lastMessageIdxWithToolResults = this._findLastMessageWithToolResults(messages);
92
98
  if (_error && lastMessageIdxWithToolResults !== undefined && this._shouldTruncateResults) {
93
- const resultsTruncated = this.truncateToolResults(messages, lastMessageIdxWithToolResults);
99
+ const resultsTruncated = this._truncateToolResults(messages, lastMessageIdxWithToolResults);
94
100
  if (resultsTruncated) {
95
- return;
101
+ return true;
96
102
  }
97
103
  }
98
104
  // Try to trim messages when tool result cannot be truncated anymore
@@ -125,12 +131,14 @@ export class SlidingWindowConversationManager {
125
131
  // Valid trim point found
126
132
  break;
127
133
  }
128
- // If we didn't find a valid trim_index, then we throw
134
+ // If no valid trim point was found, return false and let the caller handle it
129
135
  if (trimIndex >= messages.length) {
130
- throw new ContextWindowOverflowError('Unable to trim conversation context!');
136
+ logger.warn(`window_size=<${this._windowSize}>, messages=<${messages.length}> | unable to trim conversation context, no valid trim point found`);
137
+ return false;
131
138
  }
132
- // Overwrite message history
139
+ // trimIndex is guaranteed to be < messages.length here, so splice always removes at least one message
133
140
  messages.splice(0, trimIndex);
141
+ return true;
134
142
  }
135
143
  /**
136
144
  * Truncate tool results in a message to reduce context size.
@@ -142,7 +150,7 @@ export class SlidingWindowConversationManager {
142
150
  * @param msgIdx - Index of the message containing tool results to truncate.
143
151
  * @returns True if any changes were made to the message, false otherwise.
144
152
  */
145
- truncateToolResults(messages, msgIdx) {
153
+ _truncateToolResults(messages, msgIdx) {
146
154
  if (msgIdx >= messages.length || msgIdx < 0) {
147
155
  return false;
148
156
  }
@@ -197,7 +205,7 @@ export class SlidingWindowConversationManager {
197
205
  * @param messages - The conversation message history.
198
206
  * @returns Index of the last message with tool results, or undefined if no such message exists.
199
207
  */
200
- findLastMessageWithToolResults(messages) {
208
+ _findLastMessageWithToolResults(messages) {
201
209
  // Iterate backwards through all messages (from newest to oldest)
202
210
  for (let idx = messages.length - 1; idx >= 0; idx--) {
203
211
  const currentMessage = messages[idx];
@@ -1 +1 @@
1
- {"version":3,"file":"sliding-window-conversation-manager.js","sourceRoot":"","sources":["../../../src/conversation-manager/sliding-window-conversation-manager.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"sliding-window-conversation-manager.js","sourceRoot":"","sources":["../../../src/conversation-manager/sliding-window-conversation-manager.ts"],"names":[],"mappings":"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"}